Download Código Fuente 1
Document related concepts
no text concepts found
Transcript
Capítulo 9 EJEMPLO 9.2 #include <stdio.h> #define NUM 8 int main() { int nums[NUM]; int i; int total = 0; for (i = 0; i < NUM; i++) { printf("Por favor, introduzca el número: "); scanf("%d",&nums[i]); } printf("\nLista de números: "); for (i = 0; i < NUM; i++) { printf("%d ",nums[i]); total += nums[i]; } } printf("\nLa suma de los números es %d",total); return 0; EJEMPLO 9.3 #include <stdio.h> /* Constantes y variables globales */ #define MAX 10 float muestra[MAX]; void main() { int i; printf("\nIntroduzca una lista de %d elementos positivos.\n",MAX); for (i = 0; i < MAX; muestra[i]>0?++i:i) scanf("%f",&muestra[i]); } EJEMPLO 9.4 #include <stdio.h> #define MAX 10 float muestra[MAX]; void main() { int i; printf("\nIntroduzca una lista de %d elementos positivos.\n",MAX); for (i = 0; i < MAX; muestra[i]>0?++i:i) Arrays } scanf("%f",&muestra[i]); printf("\nDatos leidos del teclado: "); for ( i = 0, i < MAX; ++i) printf("%f\t",muestra[i]); EJEMPLO 9.5 float discos[2][4]; int fila, col; for (fila = 0; fila < 2; fila++) { for (col = 0; col < 4; col++) { scanf("%f",&discos[fila][col]); } } /* Visualizar la tabla */ for (fila = 0; fila < 2; fila++) { for (col = 0; col < 4; col++) { printf("\n Pts %.1f \n",discos[fila][col]); } } EJERCICIO 9.1 #include <stdio.h> /* prototipos funcionales */ void leer(int a[][5]); void visualizar(const int a[][5]); int main() { int a[3][5]; leer(a); visualizar(a); return 0; } void leer(int a[][5]) { int i,j; } puts("Introduzca 15 números enteros, 3 por fila"); for (i = 0; i < 3; i++) { printf("Fila %d: ",i); for (j = 0; j < 5; j++) scanf("%d",&a[i][j]); } void visualizar (const int a[][5]) { int i,j; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) printf(" %d",a[i][j]); 275 276 Programación en C. Algoritmos, estructuras de datos y objetos. } } printf("\n"); EJERCICIO 9.2 #include <stdlib.h> #include <stdio.h> #include <time.h> #define N 8 #define randomize (srand(time(NULL))) #define random(num) (rand()%(num)) void gen_mat(int a[][N], int n); int simetrica(int a[][N], int n); void escribe_mat(int a[][N], int n); int main(void) { int a[N][N]; /* define matriz de tamaño máximo N */ int n,i,j; int es_sim; randomize; do { printf("\nTamaño de cada dimensión de la matriz, máximo %d: ",N); scanf("%d",&n); }while (n<2 || n>N); do { gen_mat(a,n); es_sim = simetrica(a,n); if (es_sim) { puts("\n\Encontrada matriz simétrica.\n"); escribe_mat(a,n); } } while (!es_sim); } return 0; void gen_mat(int a[][N], int n) { int i,j; } for (i=0; i<n; i++) for (j=0; j<n; j++) a[i][j]= random(N); int simetrica(int a[][N], int n) { int i,j; int es_simetrica; for (es_simetrica=1,i=0; i<n-1 && es_simetrica; i++) { for (j=i+1; j<n && es_simetrica; j++) if (a[i][j] != a[j][i]) es_simetrica= 0; } return es_simetrica; Arrays } void escribe_mat(int a[][N], int n) { int i,j; puts("\tMatriz analizada"); puts("\t----- ---------\n"); for (i=0; i<n; i++) { putchar('\t'); for (j=0; j<n; j++) printf("%d %c",a[i][j],(j==n-1 ?'\n ':' ')); } } EJEMPLO 9.6 #include <stdio.h> #define L 100 void leerArray(double a[], int* num ); void imprimirArray (const double [], int n); int main() { double a[L]; int n; leerArray(a, &n); printf("El array a tiene %d elementos, estos son\n ",n); imprimirArray(a, n); } return 0; void leerArray(double a[], int* num) { int n = 0; puts("Introduzca datos. Para terminar pulsar 0.\n"); for (; n < L; n++) { printf("%d: ",n); scanf("%lf",&a[n]); if (a[n] == 0) break; }; *num = n; } void imprimirArray(const double a[],int n) { int i = 0; for (; i < n; i++) printf("\t%d: %lf\n",i,a[i]); } EJEMPLO 9.7 double maximo(const double a[],int n) { double mx; int i; mx = a[0]; for (i = 1; i < n; i++) 277 278 Programación en C. Algoritmos, estructuras de datos y objetos. mx = (a[i]>mx a[i]: mx); } return mx; EJEMPLO 9.8 #include <stdio.h> int SumaDeEnteros(const int ArrayEnteros[], int NoElementos); int maximo(const int ArrayEnteros[], int NoElementos); int main() { int Items[10]; int Total, i; puts("Introduzca 10 números, seguidos por return"); for (i = 0; i < 10; i++) scanf("%d",&Items[i]); } printf("Total = %d \n",SumaDeEnteros(Items,10)); printf("Valor máximo: %d \n",maximo(Items,10)); return 0; int SumaDeEnteros(int ArrayEnteros[], int NoElementos) { int i, Total = 0; for (i = 0; i < NoElementos; i++) Total += ArrayEnteros[i]; } return Total; int maximo(const int ArrayEnteros[], int NoElementos) { int mx; int i; mx = ArrayEnteros[0]; for (i = 1; i < NoElementos; i++) mx = (ArrayEnteros[i]>mx ArrayEnteros[i]: mx); } return mx; EJERCICIO 9.3 #include <stdlib.h> #include <stdio.h> #include <time.h> #define F 8 #define C 10 #define N 50 #define randomize (srand(time(NULL))) #define random(num) (rand()%(num)) void escribe_mat(int a[][C]); void gen_mat(int a[][C]); int buscar(int a[][C],int* fila,int* col,int elemento); int main() { Arrays 279 int a[F][C]; int item, nf,nc,esta; int veces = 0; randomize; gen_mat(a); printf("\n Elemento a buscar: "); scanf("%d",&item); } do { esta = buscar(a,&nf,&nc,item); if (esta) { veces = veces+1; printf("\n coincidencia %d: Fila %d, Columna %d\n",veces,nf,nc); } }while (esta); escribe_mat(a); printf("\nNúmero de coincidencias del elemento %d :%d",item,veces); return 0; /* Busqueda lineal en toda la matriz */ int buscar(int a[][C],int* fila,int* col,int elemento) { static int x = 0, y = -1; int i,j,encontrado; /* avanza al siguiente elemento(fila,columna) */ if (y { y = x = } else y = } == C-1) /* ultima columna */ 0; x+1; y+1; encontrado = 0; while (!encontrado && (x<F)) { encontrado = (a[x][y] == elemento); if (!encontrado) /* avanza a siguiente elemento */ if (y == C-1) { y = 0; x = x+1; } else y = y+1; } /* ultimo valor de x e y */ *fila = x; *col = y; return encontrado; void gen_mat(int a[][C]) { int i,j; } for (i=0; i<F; i++) for (j=0; j<C; j++) a[i][j]= random(N); 280 Programación en C. Algoritmos, estructuras de datos y objetos. void escribe_mat(int a[][C]) { int i,j; puts("\t\tMatriz analizada"); puts("\t\t----- ----------\n"); for (i=0; i<F; i++) { putchar('\t'); for (j=0; j<C; j++) printf("%d %c",a[i][j],(j==C-1 ?'\n ':' ')); } } EJERCICIO 9.4 #include <stdlib.h> #include <stdio.h> #include <time.h> #define F 6 #define C 10 #define V 100.0 void escribe_mat(float mt[][C]); void gen_mat(float mt[][C]); float sumar(float v[]); int maximo(float mt[][C]); int main() { float mat[F][C]; int fila; srand(time(NULL)); /* inicializa semilla de números aleatorios */ gen_mat(mat); escribe_mat(mat); fila = maximo(mat); printf("\n\nFila cuya suma de elementos es mayor: %d",fila); } return 0; void gen_mat(float mat[][C]) { int i,j; } for (i=0; i<F; i++) for (j=0; j<C; j++) mat[i][j]= rand()/V; void escribe_mat(float mat[][C]) { int i,j; puts("\n\t\tMatriz analizada\n"); puts("\t\t----- ---------\n"); for (i=0; i<F; i++) { for (j=0; j<C; j++) printf("%.2f%c",mat[i][j],(j==C-1 ?'\n ':' ')); } } float sumar(float v[]) Arrays { int i; float s; for (s=0.0,i=0; i<C; i++) s += v[i]; return s; } int maximo(float mt[][C]) { float mx; int i,f; } mx = sumar(&mt[0][0]); /* direcci¢n de primera fila */ printf("\nSuma fila %d %.2f",0,mx); for (f=0,i=1; i<F; i++) { float t; t = sumar(&mt[i][0]); printf("\nSuma fila %d %.2f",i,t); if (t > mx) { mx = t; f = i; } } return f; 281