Un struct dentro de una matriz

Iniciado por freakx, 13 Enero 2012, 00:34 AM

0 Miembros y 1 Visitante están viendo este tema.

freakx

En la universidad me mandaron una tarea en donde tengo qe crear una matriz de maximo 10 filas y 20 columnas y adentro de cada casillero de la matriz tengo qe guardar tres datos enteros, osea un struct dentro de una matriz


este es el codigo que llevo, todavia trabajo solamente con esas librerias. Quiero que me ayuden a como llenar la matriz con los datos haber si me pueden ayudar


Citar#include<stdio.h>
#include<stdlib.h>



typedef struct accidente{
   int lesionados;
   int vehiculos;
   int fecha;    
   
};    

void Llenar(int cruce[][20],int n, int m,accidentes *R)
{
    int i,j;
    for(i=0;i<n;i++)
     {  for(j=0;j<m;j++)
        {
         printf("ingrese numero de lesionados para la interseccion entre [Avenida %d,Calle %d]: ",i,j);

         scanf("%d",&cruce [j].(*R).lesionados);
         
printf("ingrese cantidad de vehiculos involucrados en la interseccion[Avenida %d,Calle %d]: ",i,j);

         scanf("%d",&cruce [j].(*R).vehiculos);
         
printf("ingrese fecha del accidente en la interseccion [Avenida %d,Calle %d]: ",i,j);
       
          scanf("%d",&cruce [j].(*R).fecha);
        }
        }  
}
void Mostrar(int a[][20],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
      {  for(j=0;j<m;j++)
        {
         printf("A[%d,%d] = %d\n",i,j,a[j]);
         }
         }
}


int main()

   int cruce[10][20];
   int n,m;

   
   printf("Ingrese cantidad de avenidas : ");
   scanf("%d",&n);
   
   if(n<=10)
  {
   
   printf("Ingrese cantidad de calles : ");
   scanf("%d",&m);
    if(m<=20)
    { Llenar(cruce,n,m,accidente);
      printf("\nMatriz A\n");
      Mostrar(a,n,m);
     }
     {
     else
     printf("ingrese un numero menor a 20  ");    
     }
  }  
  {
  else
  printf("ingrese un numero menor a 10   ");
  }
 
system("PAUSE");

}

Alien-Z

#1
No comprendo muy bien qué preguntas, ¿quieres guardar en la matriz los datos según se vayan introduciendo?, en ese caso debes usar dos bucles anidados como has puesto en tu código:

Código (cpp) [Seleccionar]
for(i=0;i<n;i++)
     {  for(j=0;j<m;j++)
        {
         printf("ingrese numero de lesionados para la interseccion entre [Avenida %d,Calle %d]: ",i,j);

         scanf("%d",&cruce [j].(*R).lesionados);

printf("ingrese cantidad de vehiculos involucrados en la interseccion[Avenida %d,Calle %d]: ",i,j);

         scanf("%d",&cruce [j].(*R).vehiculos);

printf("ingrese fecha del accidente en la interseccion [Avenida %d,Calle %d]: ",i,j);

         scanf("%d",&cruce [j].(*R).fecha);
        }
        }


Pero esto no es correcto:

&cruce [j].(*R).lesionados

En primer lugar "cruce" es una tabla bidimensional, no puedes dejar uno de los parámetros vacíos asi que debes poner también el número de filas (i):

Código (cpp) [Seleccionar]
&cruce[i][j].DATO

No entiendo muy bien qué ese "(*R)", pero no es necesario... a la tabla debes acceder con estos códigos:

Código (cpp) [Seleccionar]
cruce[i][j].lesionados
cruce[i][j].vehiculos
cruce[i][j].fecha


Lo cual tampoco te va a funcionar si no defines la tabla como tipo "accidente", es decir, asi:

Código (cpp) [Seleccionar]
void Llenar(accidente cruce[10][20],int n, int m,int accidentes) //En la función

int main()   //En el main
{

   accidente cruce[10][20];
.
.
.
}


Otra cosa es que usas variables que no has declarado, como por ejemplo la tabla "a" no está declarada en el main ni la variable "accidentes" (la primera se la pasas a la función "Mostrar" y la segunda a la función "Llenar").

Y por último en los codicionales haces lo siguiente:

Código (cpp) [Seleccionar]
If
{
//Instrucciones
}
{
else
//Instrucciones
}


El else no va dentro de las llaves, la estructura es siempre:

Código (cpp) [Seleccionar]
Instrucción principal
{
Instrucciones que la componen.
}


Con esto el programa funciona correctamente. Te he anotado los fallos pero los has cometido en varios lados del algoritmo, asi que revísalo entero.

Saludos.

freakx

Muchas gracias me sirvio muchisimoooo :)