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 ':' '));
}
}
Related documents