Ayuda con una funcion de matrices
Buenas
Resulta que me han pedido en la facultad una funcion que almacene unos valores enteros en una matriz 2D y que me imprima en pantalla el maximo y el minimo.
Ya he conseguido algo de programa, pero me da una serie de errores que no entiendo. A ver si me podeis ayudar.
El texto que estoy empleando es el siguiente.
#include <stdio.h>
#define MAX_ARR 5
void maximominimo (int array[][], int *maximo, int *minimo)
{
int i,j;
int array[MAX_ARR][MAX_ARR];
(*maximo)=array[0][0];
(*minimo)=array[0][0];
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("Escribe el elemento %d,%d n",i,j);
scanf("%d",&array[i][j]);
}
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("%3d",array[i][j]);
}
printf("n");
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
if ((*maximo)<array[i][j])
(*maximo)=array[i][j];
}
printf ("El mayor numero escrito es %dn",maximo);
for (j=0;j<MAX_ARR;j++)
{
if ((*minimo)>array[i][j])
(*minimo)=array[i][j];
}
printf ("El menor numero escrito es %dn",minimo);
}
}
Y los errores que me da al compilar son estos.
[alumno@LABF2-14 alumno]$ cc -o examen examen.c
examen.c: En la función `maximominimo':
examen.c:9: aviso: la declaración de `array' obscurece un parámetro
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o: In function `_start':
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o(.text+0x18): undefined reference to `main'
collect2: ld devolvió el estado de salida 1
[alumno@LABF2-14 alumno]$
Muchas gracias
Resulta que me han pedido en la facultad una funcion que almacene unos valores enteros en una matriz 2D y que me imprima en pantalla el maximo y el minimo.
Ya he conseguido algo de programa, pero me da una serie de errores que no entiendo. A ver si me podeis ayudar.
El texto que estoy empleando es el siguiente.
#include <stdio.h>
#define MAX_ARR 5
void maximominimo (int array[][], int *maximo, int *minimo)
{
int i,j;
int array[MAX_ARR][MAX_ARR];
(*maximo)=array[0][0];
(*minimo)=array[0][0];
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("Escribe el elemento %d,%d n",i,j);
scanf("%d",&array[i][j]);
}
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("%3d",array[i][j]);
}
printf("n");
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
if ((*maximo)<array[i][j])
(*maximo)=array[i][j];
}
printf ("El mayor numero escrito es %dn",maximo);
for (j=0;j<MAX_ARR;j++)
{
if ((*minimo)>array[i][j])
(*minimo)=array[i][j];
}
printf ("El menor numero escrito es %dn",minimo);
}
}
Y los errores que me da al compilar son estos.
[alumno@LABF2-14 alumno]$ cc -o examen examen.c
examen.c: En la función `maximominimo':
examen.c:9: aviso: la declaración de `array' obscurece un parámetro
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o: In function `_start':
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o(.text+0x18): undefined reference to `main'
collect2: ld devolvió el estado de salida 1
[alumno@LABF2-14 alumno]$
Muchas gracias
El primer error es que dentro de la función maximominimo() declaras una variable locarl array. El nombre de esta variable coincide con el del parámetro array. Eso quiere decir que dentro de la función no puedes usar el parámetro, porque cuando intentes utilizar array, estarás cogiendo la variable local y no el parámetro.
El otro problema es que no has puesto función main.
O bien pones un main, o bien le dices al compilador que estás compilando una libreria. El como decirle eso al compilador depende de cual estés utilizando. En visual c++ se le dice que quieres crear un proyecto libreria. En gcc se pone la opción -c para que genere solo el .o y luego se crea la libreria con el comando ar (o alguno similar).
De todas formas, si lo compilas como librería y no haces luego un main aparte, no podrás probar tu código.
Se bueno.
El otro problema es que no has puesto función main.
O bien pones un main, o bien le dices al compilador que estás compilando una libreria. El como decirle eso al compilador depende de cual estés utilizando. En visual c++ se le dice que quieres crear un proyecto libreria. En gcc se pone la opción -c para que genere solo el .o y luego se crea la libreria con el comando ar (o alguno similar).
De todas formas, si lo compilas como librería y no haces luego un main aparte, no podrás probar tu código.
Se bueno.
Muchas gracias por tu ayuda. Espero poder sacarlo asi. No es que tenga mucha idea, como ya habras observado, pero creo que lo que me dices se traduce en los siguientes cambios.
#include <stdio.h>
#define MAX_ARR 5
void main maximominimo (int array[][], int *maximo, int *minimo)
{
int i,j;
int array2[MAX_ARR][MAX_ARR];
(*maximo)=array2[0][0];
(*minimo)=array2[0][0];
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("Escribe el elemento %d,%d n",i,j);
scanf("%d",&array2[i][j]);
}
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("%3d",array2[i][j]);
}
printf("n");
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
if ((*maximo)<array2[i][j])
(*maximo)=array2[i][j];
} printf ("El mayor numero escrito es %dn",maximo);
for (j=0;j<MAX_ARR;j++)
{
if ((*minimo)>array2[i][j])
(*minimo)=array2[i][j];
}
printf ("El menor numero escrito es %dn",minimo);
}
}
Lo que he hecho es introducir el main. Y cambiar el nombre de la variable array por array2. No se si habre puesto una burrada, pero hasta que no vaya a la facultad no podre compilarlo.
Respecto a lo del compilador eso si que esta bien, porque eso, junto con el uso del vi es lo unico que he aprendido en esa clase (jeje).
Muchas gracias de nuevo
#include <stdio.h>
#define MAX_ARR 5
void main maximominimo (int array[][], int *maximo, int *minimo)
{
int i,j;
int array2[MAX_ARR][MAX_ARR];
(*maximo)=array2[0][0];
(*minimo)=array2[0][0];
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("Escribe el elemento %d,%d n",i,j);
scanf("%d",&array2[i][j]);
}
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
printf("%3d",array2[i][j]);
}
printf("n");
}
for (i=0;i<MAX_ARR;i++)
{
for (j=0;j<MAX_ARR;j++)
{
if ((*maximo)<array2[i][j])
(*maximo)=array2[i][j];
} printf ("El mayor numero escrito es %dn",maximo);
for (j=0;j<MAX_ARR;j++)
{
if ((*minimo)>array2[i][j])
(*minimo)=array2[i][j];
}
printf ("El menor numero escrito es %dn",minimo);
}
}
Lo que he hecho es introducir el main. Y cambiar el nombre de la variable array por array2. No se si habre puesto una burrada, pero hasta que no vaya a la facultad no podre compilarlo.
Respecto a lo del compilador eso si que esta bien, porque eso, junto con el uso del vi es lo unico que he aprendido en esa clase (jeje).
Muchas gracias de nuevo
