Ejercicios Resueltos Con Punteros

12
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"); }

description

Punteros

Transcript of Ejercicios Resueltos Con Punteros

Page 1: Ejercicios Resueltos Con Punteros

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 suponeque 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];}

Page 2: Ejercicios Resueltos Con Punteros

}

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];elseimpar[i]=a[i];}/* Escritura del array par e impar*/printf("\nPar:\n");escribirArray(par,TAM);printf("\nImpar:\n");escribirArray(impar,TAM);

Page 3: Ejercicios Resueltos Con Punteros

/* 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úmerospares 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úmerosimpares 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

Page 4: Ejercicios Resueltos Con Punteros

Solucion:

#include <conio.h>#include <stdio.h>#define N_VENDEDORES 18#define N_PRODUCTOS 10 /* Función que muestra el menú del programa y retornael 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();}

Page 5: Ejercicios Resueltos Con Punteros

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 nVendedor){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:

Page 6: Ejercicios Resueltos Con Punteros

#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 retornael 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");

Page 7: Ejercicios Resueltos Con Punteros

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");

}}

}

Page 8: Ejercicios Resueltos Con Punteros

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*/

Page 9: Ejercicios Resueltos Con Punteros

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;

Page 10: Ejercicios Resueltos Con Punteros

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.