Sunteți pe pagina 1din 11

Ejercicios Resueltos con punteros.

1.
Crear un programa que contenga una funcin llamada copiarArray ) que reciba dos
arrays y el tamao de los mismos (deben de ser del mismo tamao) 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(){
/* Comprobacin de la funcin*/
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 nmeros
aleatorios del 1 al 1000. Una vez creado, mostrar el contenido y despus
organizarlo de forma que estn juntos los elementos pares y los impares.
Despus, 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
int
int
int

a[TAM];
par[TAM]={0};
impar[TAM]={0};
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);
/* Grabacin 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.
Slo se mueve cuando se insertan en l nmeros*/
/*recorrido del array par e impar e insercin de los nmeros
pares que contenga (todos los que sean distintos de 0)
se aade al array a desde la primera posicin del mismo*/
for(i=0;i<TAM;i++){
if(par[i]!=0) {
a[j]=par[i];
j++;
}
}
/*recorrido del array impar e insercin de los nmeros
impares que contenga desde la posicin 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
/* Funcin que muestra el men del programa y retorna
el nmero de men elegido por el usuario */
int mostrarMenu();
/* Funcin que calcula el total de todas las ventas*/
double mostrarTotal(double v[][N_PRODUCTOS]);
/* Funcin 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) Aadir 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 nVend
edor){
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 avin, as como mostrar qu asientos estn ocupados y libreas
actualmente.
El array tendr 25 filas y 4 columnas.
Solucion:

#include <conio.h>
#include <stdio.h>
#define
#define
#define
#define

N_FILAS 25
N_COLUMNAS 4
LIBRE 0
OCUPADO 1

/* Funcin que muestra el men del programa y retorna


el nmero 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 estn 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("Cancelacin 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 maysculas aleatorias y
que cuenta cuntas 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("\tDireccin: %x",p);
p++;
}
getch();
}

7.