• Lunes 29 de Abril de 2024, 01:30

Autor Tema:  Problemas con estruturas  (Leído 1507 veces)

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Problemas con estruturas
« en: Miércoles 7 de Abril de 2010, 09:51 »
0
Buenas, estoy empezando con estructuras y me aparecen muchos errores nuevos para mi que no comprendo. Me gustaría que alguien me los explicara.

Este es el código:

Código: C
  1. //Descripción del ejercicio:
  2. //Realizado por: Samuel Rico Jiménez
  3. //Version 1.0
  4.  
  5. /*Cabecera de las bibliotecas de C*/
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. /*Variables globales*/
  12. int i;
  13.  
  14. /*Declaración de Macors (#define)*/
  15.  
  16. /*Cabecera de nuestras funciones*/
  17. void LeerDatos (struct Alumnado *Alumno[i]);
  18. void EscribirDatos (char* DNI, char* Nombre, int Edad int Nota1, int Nota2, int Nota3);
  19.  
  20. /*Programa principal*/
  21. int main()
  22. {
  23.   /*Bienvenida*/
  24.  
  25.   /*Estructuras implementadas*/
  26.   struct Alumnado
  27.   {
  28.     char DNI[9];
  29.     char Nombre[20];
  30.     unsigned int Edad;
  31.     float Nota1;
  32.     float Nota2;
  33.     float Nota3;
  34.   };
  35.  
  36.   /*Declaración de mis variables principales*/
  37.   struct Alumnado Alumno[2];
  38.  
  39.   /*Inicialización de mis variables*/
  40.   for (i=0; i<3; i++)
  41.   {
  42.     LeerDatos(&Alumno[i];
  43.   }
  44.  
  45.   for (i=0; i<3; i++)
  46.   {
  47.     EscribirDatos(Alumno[i].DNI, Alumno[i].Nombre, Alumno[i].Edad, Alumno[i].Nota1, Alumno[i].Nota2, Alumno[i].Nota3);
  48.   }
  49.  
  50.  
  51.   /*Declaración de mis arrays*/
  52.  
  53.   /*Parámetros de entrada*/
  54.  
  55.   /*Algoritmo principal*/
  56.  
  57.   /*Parámetros de salida*/
  58.  
  59.   /*Otros parámetros*/
  60.   getch();
  61.   return 0;
  62. }
  63.  
  64. /*Implementación de mis funciones*/
  65.  
  66. /*Leer datos*/
  67. void LeerDatos (struct Alumnado *Alumno[i])
  68. {
  69.   printf("Usted es el alumno numero %d", i);
  70.   printf("nIntroduzca su nombre");
  71.   gets(Alumno->Nombre);
  72.   printf("nIndique su edad");
  73.   scanf("%d", &Alumno->Edad);
  74.   fflush(stdin);
  75.   printf("nIntroduzca su DNI");
  76.   gets(Alumno->DNI);
  77.   printf("nPor favor, indique la nota de la primera evaluacion");
  78.   scanf("%f", &Alumno->Nota1);
  79.   fflush(stdin);
  80.   printf("nPor favor, indique la nota de la segunda evaluacion");
  81.   scanf("%f", &Alumno->Nota2);
  82.   fflush(stdin);
  83.   printf("nPor favor, indique la nota de la tercera evaluacion");
  84.   scanf("%f", &Alumno->Nota3);
  85.   fflush(stdin);
  86. }
  87.  
  88.  
  89. /*Escribir datos*/
  90. void EscribirDatos (char* DNI, char* Nombre, int Edad, int Nota1, int Nota2, int Nota3)
  91. {
  92.   printf("Nombre: %s n", Nombre);
  93.   printf("Edad: %d n", Edad);
  94.   printf("DNI: %s n", DNI);
  95.   printf("Nota media: %f", (Nota1+Nota2+Nota3/3));
  96. }
  97.  
  98.  

Estos son los errores y warnings que me da:

Estas ya las he corregido. Era porque la estructura debía ser declarada globalmente.
Citar
18 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c [Warning] "struct Alumnado" declared inside parameter list
18 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c [Warning] its scope is only this definition or declaration, which is probably not what you want
19 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "int"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `main':

Arreglado esto, era por tipo float en vez de int.
Citar
28 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "int"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `main':


Arreglados, el primero era problema de una coma en la funcion de esa linea, la segunda era problema en dichas líneas, donde debía cambiar "Alumnado" por "Alumno".
Citar
43 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before ';' token
48 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c syntax error before "Alumno"
 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c In function `LeerDatos':
72 F:Dev-CppParaQueOsCopieisSiQuereisAlumno.c `Alumnado' undeclared (first use in this function)
  (Each undeclared identifier is reported only once   for each function it appears in.)

Fallos del programa despues de compilar:

Todo arreglado
Citar
1- No muestra el nombre de la primera y la tercera persona.
2- La media no funciona correctamente.[/quote

Ya está todo solucionado, se puede cerrar el hilo.

El código resuelto sería:


Código: C
  1.  
  2.  
  3. //Realizado por: Samuel Rico
  4.  
  5. //Version 1.0
  6.  
  7.  
  8.  
  9. /*Cabecera de las bibliotecas de C*/
  10.  
  11. #include <stdio.h>
  12.  
  13. #include <conio.h>
  14.  
  15. #include <stdlib.h>
  16.  
  17. #include <string.h>
  18.  
  19.  
  20.  
  21. /*Variables globales*/
  22.  
  23. int i;
  24.  
  25. struct Alumnado
  26.  
  27. {
  28.  
  29.   char DNI[9];
  30.  
  31.   char Nombre[20];
  32.  
  33.   unsigned int Edad;
  34.  
  35.   float Nota1;
  36.  
  37.   float Nota2;
  38.  
  39.   float Nota3;
  40.  
  41. };
  42.  
  43.  
  44.  
  45. /*Declaración de Macors (#define)*/
  46.  
  47.  
  48.  
  49. /*Cabecera de nuestras funciones*/
  50.  
  51. void LeerDatos (struct Alumnado *Alumno);
  52.  
  53. void EscribirDatos (char* DNI, char* Nombre, int Edad, float Nota1, float Nota2, float Nota3);
  54.  
  55.  
  56.  
  57. /*Programa principal*/
  58.  
  59. int main()
  60.  
  61. {
  62.  
  63.   /*Bienvenida*/
  64.  
  65.  
  66.  
  67.   /*Estructuras implementadas*/
  68.  
  69.  
  70.  
  71.   /*Declaración de mis variables principales*/
  72.  
  73.   struct Alumnado Alumno[3];
  74.  
  75.  
  76.  
  77.   /*Inicialización de mis variables*/
  78.  
  79.   for (i=0; i<3; i++)
  80.  
  81.   {
  82.  
  83.     LeerDatos(&Alumno[i]);
  84.  
  85.   }
  86.  
  87.  
  88.  
  89.   for (i=0; i<3; i++)
  90.  
  91.   {
  92.  
  93.     EscribirDatos(Alumno[i].DNI, Alumno[i].Nombre, Alumno[i].Edad, Alumno[i].Nota1, Alumno[i].Nota2, Alumno[i].Nota3);
  94.  
  95.   }
  96.  
  97.  
  98.  
  99.  
  100.  
  101.   /*Declaración de mis arrays*/
  102.  
  103.  
  104.  
  105.   /*Parámetros de entrada*/
  106.  
  107.  
  108.  
  109.   /*Algoritmo principal*/
  110.  
  111.  
  112.  
  113.   /*Parámetros de salida*/
  114.  
  115.  
  116.  
  117.   /*Otros parámetros*/
  118.  
  119.   getch();
  120.  
  121.   return 0;
  122.  
  123. }
  124.  
  125.  
  126.  
  127. /*Implementación de mis funciones*/
  128.  
  129.  
  130.  
  131. /*Leer datos*/
  132.  
  133. void LeerDatos (struct Alumnado *Alumno)
  134.  
  135. {
  136.  
  137.   printf("nnAlumno numero %d", i+1);
  138.  
  139.   printf("nIntroduzca su nombre: ");
  140.  
  141.   gets(Alumno->Nombre);
  142.  
  143.   printf("nIndique su edad: ");
  144.  
  145.   scanf("%d", &Alumno->Edad);
  146.  
  147.   fflush(stdin);
  148.  
  149.   printf("nIntroduzca su DNI: ");
  150.  
  151.   gets(Alumno->DNI);
  152.  
  153.   printf("nPor favor, indique la nota de la primera evaluacion: ");
  154.  
  155.   scanf("%f", &Alumno->Nota1);
  156.  
  157.   fflush(stdin);
  158.  
  159.   printf("nPor favor, indique la nota de la segunda evaluacion: ");
  160.  
  161.   scanf("%f", &Alumno->Nota2);
  162.  
  163.   fflush(stdin);
  164.  
  165.   printf("nPor favor, indique la nota de la tercera evaluacion: ");
  166.  
  167.   scanf("%f", &Alumno->Nota3);
  168.  
  169.   fflush(stdin);
  170.  
  171. }
  172.  
  173.  
  174.  
  175.  
  176.  
  177. /*Escribir datos*/
  178.  
  179. void EscribirDatos (char* DNI, char* Nombre, int Edad, float Nota1, float Nota2, float Nota3)
  180.  
  181. {
  182.  
  183.   printf("nNombre: %s n", Nombre);
  184.  
  185.   printf("Edad: %d n", Edad);
  186.  
  187.   printf("DNI: %s n", DNI);
  188.  
  189.   printf("nNota media: %f", (Nota1+Nota2+Nota3)/3);
  190.  
  191. }
  192.  

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas con estruturas
« Respuesta #1 en: Jueves 8 de Abril de 2010, 10:33 »
0
Tengo un problema con otro ejercicio.

Esta vez el problema es que al escribir los 10 equipos con sus puntuaciones, me da un error.

Este es el código:

Código: C
  1. //Descripción del ejercicio:
  2. //Realizado por:
  3. //Version 1.0
  4.  
  5. /*Cabecera de las bibliotecas de C*/
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. /*Variables globales*/
  12. int i;
  13.  
  14. /*Estructuras*/
  15. struct Equipo
  16. {
  17.   char Nombre[30];
  18.   unsigned int Puntos;
  19. };
  20.  
  21. /*Declaración de Macors (#define)*/
  22.  
  23. /*Cabecera de nuestras funciones*/
  24. void LeerDatos(struct Equipo *Team);
  25. void MostrarDatos(struct Equipo Team);
  26. void OrdenarEquipos(struct Equipo *Team);
  27.  
  28. /*Programa principal*/
  29. int main()
  30. {
  31.   /*Bienvenida*/
  32.   /*Estructuras*/
  33.   struct Equipo Team[10];
  34.  
  35.   /*Declaración de mis variables principales*/
  36.   for(i=0; i<10; i++)
  37.   {
  38.     LeerDatos(&Team[i]);
  39.   }
  40.  
  41.   /*Inicialización de mis variables*/
  42.  
  43.   /*Declaración de mis arrays*/
  44.  
  45.   /*Parámetros de entrada*/
  46.  
  47.   /*Algoritmo principal*/
  48.   for(i=0; i<10; i++)
  49.   {
  50.     OrdenarEquipos(&Team[i]);
  51.   }
  52.  
  53.   /*Parámetros de salida*/
  54.   for(i=0; i<10; i++)
  55.   {
  56.     MostrarDatos(Team[i]);
  57.   }
  58.  
  59.   /*Otros parámetros*/
  60.   getch();
  61.   return 0;
  62. }
  63.  
  64. /*Implementación de mis funciones*/
  65. /*Función 1*/
  66. void LeerDatos(struct Equipo *Team)
  67. {
  68.   printf("Nombre del equipo: ");
  69.   gets(Team->Nombre);
  70.   printf("nPuntos: ");
  71.   scanf("%d", &Team->Puntos);
  72.   fflush(stdin);
  73. }
  74.  
  75. /*Función 2*/
  76. void MostrarDatos(struct Equipo Team)
  77. {
  78.   printf("nNombre del equipo: %s", Team.Nombre);
  79.   printf("nPuntos obtenidos: %d", Team.Puntos);
  80. }
  81.  
  82. /*Función 3*/
  83. void OrdenarEquipos(struct Equipo *Team)
  84. {
  85.   int j, k, Temp;
  86.   char Nombre2[30];
  87.   for (j=1; j<10; j++)
  88.   {
  89.     for (k=10-1; k>j; k--)
  90.     {
  91.       if (Team[j-1].Puntos>Team[j].Puntos)
  92.       {
  93.         Temp=Team[j-1].Puntos;
  94.         Team[j-1].Puntos=Team[j-1].Puntos;
  95.         Team[j-1].Puntos=Temp;
  96.         strcpy(Nombre2,Team[j-1].Nombre);
  97.         strcpy(Team[j-1].Nombre, Nombre2);
  98.         strcpy(Team[j].Nombre, Nombre2);
  99.       }
  100.     }
  101.   }
  102. }
  103.  

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas con estruturas
« Respuesta #2 en: Jueves 8 de Abril de 2010, 12:24 »
0
Siento ser tan acaparador con el espacio del foro pero, he vuelto a resolver el problema de la estructura.

1- Debo cambiar "j" por "k" en la ordenación.
2- Debo pasarle la estructura sólo una vez a la función, no 10.

Código resuelto:

Código: C
  1. //Descripción del ejercicio: Ordenar equipos con sus puntuaciones.
  2. //Realizado por: Samuel Rico Jiménez
  3. //Version 1.0
  4.  
  5. /*Cabecera de las bibliotecas de C*/
  6. #include <stdio.h>
  7. #include <conio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. /*Variables globales*/
  12. int i;
  13.  
  14. /*Estructuras*/
  15. struct Equipo
  16. {
  17.   char Nombre[30];
  18.   unsigned int Puntos;
  19. };
  20.  
  21. /*Declaración de Macors (#define)*/
  22.  
  23. /*Cabecera de nuestras funciones*/
  24. void LeerDatos(struct Equipo *Team);
  25. void MostrarDatos(struct Equipo Team);
  26. void OrdenarEquipos(struct Equipo *Team);
  27.  
  28. /*Programa principal*/
  29. int main()
  30. {
  31.   /*Bienvenida*/
  32.   /*Estructuras*/
  33.   struct Equipo Team[10];
  34.  
  35.   /*Declaración de mis variables principales*/
  36.   for(i=0; i<10; i++)
  37.   {
  38.     LeerDatos(&Team[i]);
  39.   }
  40.  
  41.   /*Inicialización de mis variables*/
  42.  
  43.   /*Declaración de mis arrays*/
  44.  
  45.   /*Parámetros de entrada*/
  46.  
  47.   /*Algoritmo principal*/
  48.  
  49.   OrdenarEquipos(Team);
  50.    
  51.   /*Parámetros de salida*/
  52.   for(i=0; i<10; i++)
  53.   {
  54.     MostrarDatos(Team[i]);
  55.   }
  56.  
  57.   /*Otros parámetros*/
  58.   getch();
  59.   return 0;
  60. }
  61.  
  62. /*Implementación de mis funciones*/
  63. /*Función 1*/
  64. void LeerDatos(struct Equipo *Team)
  65. {
  66.   printf("Nombre del equipo: ");
  67.   gets(Team->Nombre);
  68.   printf("nPuntos: ");
  69.   scanf("%d", &Team->Puntos);
  70.   fflush(stdin);
  71. }
  72.  
  73. /*Función 2*/
  74. void MostrarDatos(struct Equipo Team)
  75. {
  76.   printf("nNombre del equipo: %s", Team.Nombre);
  77.   printf("nPuntos obtenidos: %d", Team.Puntos);
  78. }
  79.  
  80. /*Función 3*/
  81. void OrdenarEquipos(struct Equipo Team[])
  82. {
  83.   int j, k, Temp;
  84.   char Nombre2[30];
  85.   for (j=0; j<10; j++)
  86.   {
  87.     for (k=10-1; k>j; k--)
  88.     {
  89.       if (Team[k-1].Puntos<Team[k].Puntos)
  90.       {
  91.         Temp=Team[k-1].Puntos;
  92.         Team[k-1].Puntos=Team[k].Puntos;
  93.         Team[k].Puntos=Temp;
  94.         strcpy(Nombre2, Team[k-1].Nombre);
  95.         strcpy(Team[k-1].Nombre, Team[k].Nombre);
  96.         strcpy(Team[k].Nombre, Nombre2);
  97.       }
  98.     }
  99.   }
  100. }
  101.