Está en la página 1de 11

Ejercicios Resueltos con punteros.

1.
Crear un programa que contenga una función llamada copiarArray ) que reciba dos
arrays y el tamaño de los mismos (deben de ser del mismo tamaño) y que consiga
copia en el segundo array el contenido del primero

Solucion:

#include <conio.h>
#include <stdio.h>
 
void copiarArray(int a[], int b[], int tamanio);
void escribirArray(int a[], int tamanio);
 
int main(){
/* Comprobación de la función*/
int uno[]={2,4,5,6,7,8,9,11};
int dos[8];
printf("Array uno:\n");
escribirArray(uno,8);
copiarArray(uno,dos,8);
printf("Array dos:\n");
escribirArray(dos,8);
getch();
}
 
 
/* Escribe el contenido de un array de enteros por pantalla */
void escribirArray(int a[], int tamanio){
int i;
for(i=0;i<tamanio;i++)
printf("%d ",a[i]);
printf("\n");
}
 
/* Copia el contenido del array b en el array a. Se supone
que ambos arrays son del mismo tamanio*/
void copiarArray(int a[], int b[], int tamanio){
int i;
for(i=0;i<tamanio;i++){
b[i]=a[i];
}
}

2.

Crear un programa llamado paresImpares que cree un array de 100 números aleatorios del 1 al
1000. Una vez creado, mostrar el contenido y después organizarlo de forma que estén juntos los
elementos pares y los impares. Después, volver a mostrar el array.

Solucion:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
#define TAM 100
 
void escribirArray(int a[], int tamanio);
 
int main(){
int a[TAM];
int par[TAM]={0};
int impar[TAM]={0};
int i,j;
 
srand(time(NULL));
/*Relleno inicial del array a*/
for(i=0;i<TAM;i++){
a[i]=rand()%100+1;
}
/* Escritura del contenido del primer array*/
printf("Primer array:\n");
escribirArray(a,TAM);
/* Grabación de los pares y los impares en los otros arrays*/
for(i=0;i<TAM;i++){
if(a[i]%2==0)
par[i]=a[i];
else
impar[i]=a[i];
}
/* Escritura del array par e impar*/
printf("\nPar:\n");
escribirArray(par,TAM);
printf("\nImpar:\n");
escribirArray(impar,TAM);
/* Mezcla de ambos arrays en el array a 
y escritura del resultado final*/

j=0;/*j es el índice del array a. 


Sólo se mueve cuando se insertan en él números*/
/*recorrido del array par e impar e inserción de los números
pares que contenga (todos los que sean distintos de 0)
se añade al array a desde la primera posición del mismo*/
for(i=0;i<TAM;i++){
if(par[i]!=0) {
a[j]=par[i];
j++;
}
}
/*recorrido del array impar e inserción de los números
impares que contenga desde la posición en la que quedó j*/
for(i=0;i<TAM;i++){
if(impar[i]!=0) {
a[j]=impar[i];
j++;
}
}
/*Resultado final*/
printf("\resultado final:\n");
escribirArray(a,TAM);
} /* fin main */
 
/* Escribe el contenido de un array de enteros por pantalla */
void escribirArray(int a[], int tamanio){
int i;
for(i=0;i<tamanio;i++){
printf("%d ",a[i]);
}
printf("\n");
}
 

3.
Crear un programa llamado vendedores que cree un array de 18 X 10 indicando que poseemos
una empresa de 18 vendedores cada uno de los cuales vende 10 productos.

El array almacena los ingresos obtenidos por cada vendedor en cada producto, de modo que un
menú permite almacenar los ingresos, revisar el total de cada vendedor y obtener los ingresos
totales

Solucion:

#include <conio.h>
#include <stdio.h>
#define N_VENDEDORES 18
#define N_PRODUCTOS 10
 
/* Función que muestra el menú del programa y retorna
el número de menú elegido por el usuario */
int mostrarMenu();
 
/* Función que calcula el total de todas las ventas*/
double mostrarTotal(double v[][N_PRODUCTOS]);
 
/* Función que calcula el total de ventas de un vendedor*/
double totalVendedor(double v[][N_PRODUCTOS], int
nVendedor);
 
int main(){
double ventas[N_VENDEDORES][N_PRODUCTOS]={0};
int resp=mostrarMenu();
int nvend, nprod;
double cantidad;

while(resp!=4){
switch(resp){
case 1:
printf("Numero de vendedor: ");scanf("%d",&nvend);
printf("Numero de producto: ");scanf("%d",&nprod);
printf("Cantidad ventida: ");scanf("%lf",&cantidad);
ventas[nvend][nprod]=cantidad;
break;
case 2:
printf("Numero de vendedor: ");scanf("%d",&nvend);
printf("Ventas total del vendedor %d=%.2lf\n",
nvend,totalVendedor(ventas,nvend));
break;
case 3:
printf("Total de ventas=%.2lf\n",
mostrarTotal(ventas));
break;
}
resp=mostrarMenu();
}
getch();
}
int mostrarMenu(){
int resp;
printf("\n\n");
printf("1) Añadir datos\n");
printf("2) Mostrar total de vendedor\n");
printf("3) Mostrar total de ventas\n");
printf("4) Salir\n");
scanf("%d",&resp);
return resp;
}
 
double mostrarTotal(double v[][N_PRODUCTOS]){
double resp=0;
int i,j;
for(i=0;i<N_VENDEDORES;i++){
for(j=0;j<N_PRODUCTOS;j++){
resp+=v[i][j];
}
}
return resp;
}
 
double totalVendedor(double v[][N_PRODUCTOS], int nVen
dedor){
double resp=0;
int i;
for(i=0;i<N_PRODUCTOS;i++){
resp+=v[nVendedor][i];
}
return resp;
}
4.

Crear un programa que mediante un menú admita reservar o cancelar asientos de un avión, así
como mostrar qué asientos están ocupados y libreas actualmente.

El array tendrá 25 filas y 4 columnas.

Solucion:

#include <conio.h>
#include <stdio.h>
 
#define N_FILAS 25
#define N_COLUMNAS 4
#define LIBRE 0
#define OCUPADO 1
 
/* Función que muestra el menú del programa y retorna
el número de menú elegido por el usuario */
int mostrarMenu();
 
void reservarAsiento(int a[][N_COLUMNAS]); 
void cancelarAsiento(int a[][N_COLUMNAS]);
void mostrarOcupacion(int a[][N_COLUMNAS]);
 
int main(){
/* Los asientos inicialmente están libres*/
int asiento[N_FILAS][N_COLUMNAS]={0};
int resp=mostrarMenu();

while(resp!=4){
switch(resp){
case 1:
reservarAsiento(asiento);
break;
case 2:
cancelarAsiento(asiento);
break;
case 3:
mostrarOcupacion(asiento);
break;
}
resp=mostrarMenu();

getch();
}
 
int mostrarMenu(){
int resp;
printf("\n\n");
printf("1) Reservar Asiento\n");
printf("2) Cancelar Asiento\n");
printf("3) Mostrar Ocupacion\n");
printf("4) Salir\n");
scanf("%d",&resp);
return resp;
}
 
void reservarAsiento(int a[][N_COLUMNAS]){
int fila, col;
 
printf("Escriba la fila del asiento a reservar:
");scanf("%d",&fila);
printf("Escriba la columna del asiento a reservar:
");scanf("%d",&col);

if(a[fila][col]==OCUPADO) printf("Ese asiento ya está


reservado\n");
else {
a[fila][col]=OCUPADO;
printf("Reserva realizada\n");
}
}
 
void cancelarAsiento(int a[][N_COLUMNAS]){
int fila, col;
 
printf("Escriba la fila del asiento a cancelar:
");scanf("%d",&fila);
printf("Escriba la columna del asiento a cancelar:
");scanf("%d",&col);

if(a[fila][col]==LIBRE) printf("Ese asiento no está


ocupado\n");
else {
a[fila][col]=LIBRE;
printf("Cancelación realizada\n");
}
}
 
void mostrarOcupacion(int a[][N_COLUMNAS]){
int i,j;

for(i=0;i<N_FILAS;i++){
for(j=0;j<N_COLUMNAS;j++){
printf("fila %d, columna %d ",i,j);
if(a[i][j]==LIBRE) printf("Libre\n");
else printf("Ocupado\n");
}
}
}

5.

Crear un programa que cree un array con 1000 letras mayúsculas aleatorias y que cuenta cuántas
veces aparece cada letra en el array.

Solucion:

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#define TAM 1000

void escribirArray(char a[], int tamanio);

int main(){

char letra[TAM];

/* Array que contendrá las letras de la A a la Z*/


char AaZ[26];

/* contadores*/

int i,j,cont;

srand(time(NULL));

/* Relleno del array de letras */

for(i=65;i<=90;i++){

AaZ[i-65]=i;

/*Relleno inicial del array aleatorio*/

for(i=0;i<TAM;i++){

/*genera caracteres del ASCII 65 al 90,

de la letra A a Z */

letra[i]=rand()%26+65;

/* Escritura del contenido del primer array*/

printf("Array inicial:\n");

escribirArray(letra,TAM);

/* El bucle recorre el array que contiene las letras de la A

a la Z y cuenta cada vez que aparece cada letra en el array de letras

aleatorias*/

for(i=0;i<26;i++){

cont=0;

for(j=0;j<TAM;j++){

if(AaZ[i]==letra[j]) cont++;
}

printf("La letra %c aparece %i veces\n",65+i,cont);

getch();

/* Escribe el contenido de un array de enteros por pantalla */

void escribirArray(char a[], int tamanio){

int i;

for(i=0;i<tamanio;i++){

printf("%c ",a[i]);

printf("\n");

6.

Dado un vector de 10 elementos ={1, 2, 3, 4, 4, 7, 8, 9, 5, 4}, escribir un programa en C (haciendo


uso de puntero) que muestre las direcciones de memoria de cada elemento del vector.

#include "stdio.h"

#include <conio.h>

int main(){

int *p, i;

int mat[10] ={1, 2, 3, 4, 4, 7, 8, 9, 5, 4};

p=mat;
for(i=0; i<=3; i++) {

printf("\n mat[%d] = %d ",i, *p);

printf("\tDirecci¢n: %x",p);

p++;

getch();

7.

También podría gustarte