Download Arrays (listas y tablas) en C - Ejemplo 3.8
Document related concepts
no text concepts found
Transcript
Cap 3. Apartado 3.5.2, página 77-78 EJEMPLO 3.8 El siguiente programa busca todas las ocurrencias de un elemento y la posición que ocupa en una matriz.. La posición viene dada por fila y columna; la matriz se genera con números aleatorios de 0 a 49. La función de búsqueda devuelve 0 si no encuentra al elemento, 1 si lo encuentra. Tiene el argumento de la matriz y dos parámetros para devolver la fila y columna, por lo que tendrán que ser de tipo puntero para poder devolver dicha información. La búsqueda se hará a partir de la fila y columna de la última coincidencia. #include <stdlib.h> #include <stdio.h> #include <time.h> #define F 8 #define C 10 #define N 50 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() { 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 == C-1) { y = 0; x = x+1; } else y = y+1; /* ultima columna */ 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); } 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 ':' ')); } }