Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neron991 en 8 Julio 2015, 19:51 pm



Título: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 8 Julio 2015, 19:51 pm
Hola de nuevo aqui pidiendo ayuda con el siguiente enunciado:

En una escuela se almacena informacion sobre los alumnos, este se almacena en un arreglo unidimensional de registros, por cada alumno se almacena la siguiente informacion: cedula, nombre, sexo, edad, carrera, semestre, calificacion_promedio; por materia se almacena: codigo, nombre_materia, unidad de credito y calificacion. (cada alumno solo puede cursar 4 materias). Realice un programa en C que:

A)Listado General.
B) Liste todos los alumnos mostrando el nombre de las materias que cursa.
C)Muestre la cantidad de alumnos reprobados, y liste los datos personales de cada alumno.
D) Muestre la cantidad de alumno que hayan inscrito una amteria especifica.

esto es lo que llevo hasta ahora, corre pero me tira unos warning y algunas incoherencias, no tengo idea como empezar lo demas para poder terminar el codigo si me pudieran ayudar con  este les agradeceria mucho T_T:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define tam 2
  4. struct alumno {
  5.    char nombre[30];
  6.    char cedula [13];
  7. char carrera [30];
  8. char semestre[13];
  9. char sexo[13];
  10. };
  11.  
  12. struct materias{
  13. int codigo;
  14. char materia[30];
  15. int unidaddecredito;
  16. int calificacion;
  17. };
  18.  
  19.  struct alumnos
  20.  {
  21.  struct alumno datos;
  22.  struct materias mis_materias;
  23.  };
  24.  
  25.  struct alumnos escuela;
  26.  
  27. int main()
  28. {
  29.  
  30.    int i,opcion=1;
  31.    float sum=0,cont=0,peor;
  32.  
  33.  
  34.    for (i=0;i<tam;i++)
  35.    {
  36.     printf ("\n\t\tDatos de los alumnos. ");
  37.        printf("\nIntroduzca nombre alumno: ");
  38.        fgets(escuela.datos.nombre,30,stdin);
  39.        fgets(escuela.datos.nombre,30,stdin);
  40.        printf("Introduzca Cedula del alumno V-.");
  41.        fgets(escuela.datos.cedula,13,stdin);
  42.        printf("Introduzca Sexo: ");
  43.        fgets(escuela.datos.sexo,13,stdin);
  44.        printf("Introduzca la Carrera que cursa el alumno: ");
  45.        fgets(escuela.datos.carrera,30,stdin);
  46.        printf("Introduzca Semestre del alumno: ");
  47.        fgets(escuela.datos.semestre,30,stdin);
  48.  
  49.        printf ("\t\tINFORMACION DE MATERIAS: \n");
  50.  
  51.        for (i=0;i<4;i++)
  52.    {
  53.  
  54.        printf("Introduzca Codigo: ");
  55.        scanf ("%d",&escuela.mis_materias.codigo,tam,stdin);
  56.        printf("Introduzca nombre de la materia: ");
  57.        scanf ("%s",escuela.mis_materias.materia);
  58.        printf("Introduzca unidad de credito ");
  59.        scanf ("%d",&escuela.mis_materias.unidaddecredito);
  60.        printf("Introduzca nota: ");
  61.        scanf("%d",&escuela.mis_materias.calificacion);
  62.    }
  63. }
  64.  
  65.    while ((opcion==1 || opcion==2 || opcion==3) || (opcion!=4))
  66.    {
  67.  
  68.        printf("1- Buscar un alumno\n");
  69.        printf("2- Media de todas las notas\n");
  70.        printf("3- Alumno con peores notas\n");
  71.        printf("4- Salir\n");
  72.        printf("Introduzca una opción: ");
  73.        scanf("%d",&opcion);
  74.        switch (opcion)
  75.         {
  76.          case 1:
  77.  
  78.           printf("Introduzca un nombre: ");
  79.             scanf ("%d",&escuela.datos.nombre);
  80.           for(i = 0; i < tam;i++)
  81.           {
  82.             if (strcmp(escuela.datos.nombre[i],escuela.datos.nombre)==0)
  83.             {
  84.               printf("\nNombre: %s\n",escuela.datos.nombre[i]);
  85.               printf("Nota: %d\n",escuela.mis_materias.calificacion);
  86.               printf("\nCedula: %s\n",escuela.datos.cedula);
  87.               printf("\nSexo: %s\n",escuela.datos.sexo);
  88.               printf("\nCarrera: %s\n",escuela.datos.carrera);
  89.               printf("\nSemestre: %s\n",escuela.datos.semestre);
  90.             }
  91.         }
  92.  
  93.           printf("\n\n");
  94.           break;
  95.        }
  96.  
  97. }
  98.   while (getchar()!='\n');    
  99.    return 0;
  100. }


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: engel lex en 8 Julio 2015, 21:54 pm
esto es lo que llevo hasta ahora, corre pero me tira unos warning y algunas incoherencias, no tengo idea como empezar lo demas para poder terminar el codigo si me pudieran ayudar con  este les agradeceria mucho T_T:

Cuales warnings e incoherencias?


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 8 Julio 2015, 21:56 pm
Código:
C:\Users\ronald\Desktop\Sin Nombre1.c	In function 'main':
50 16 C:\Users\ronald\Desktop\Sin Nombre1.c [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast
1 0 C:\Users\ronald\Desktop\Sin Nombre1.c In file included from C:\Users\ronald\Desktop\Sin Nombre1.c
442 17 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\stdio.h [Note] expected 'char * __restrict__' but argument is of type 'int'
52 16 C:\Users\ronald\Desktop\Sin Nombre1.c [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast
1 0 C:\Users\ronald\Desktop\Sin Nombre1.c In file included from C:\Users\ronald\Desktop\Sin Nombre1.c
442 17 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\stdio.h [Note] expected 'char * __restrict__' but argument is of type 'char'

esos!!


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: ivancea96 en 8 Julio 2015, 21:59 pm
No puedes pasarle un int a fgets. fgets() guarda datos en char*. Si le pasas el int, estás convirtiendo el int a char*.


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 8 Julio 2015, 22:50 pm
wuao ._: esa parte se me paso por alto, no sabia ese pequeño detalle xD, otro detalle es que al buscar el nombre al querer usar esa opcion se me sale del programa D: al querer comparar con los otros nombres..


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: mester en 9 Julio 2015, 00:06 am
Yo lo haría con ficheros binarios y así puedes guardar el registro y no trabajas con la memoria, así no introducirás los datos todo el rato. Usa las funciones fread y fwrite. Te costará más, pero seguro que te aprueban jeje. EJEMPLO:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. FILE *fd;
  6. int edadLeida;
  7. char nomLeido[100];
  8. char dniLeido[15];
  9. struct TBinario
  10. {
  11. int edad;
  12. char nom[100];
  13. char dni[15];
  14. }persona[10];
  15.  
  16. persona[0].edad=20;
  17. strcpy(persona[0].nom,"Borja");
  18. strcpy(persona[0].dni,"454887965U");
  19.  
  20. fd=fopen("datosbin.dat","wb+");
  21. //fwrite (direcc_dato, tamaño_dato, numero_datos, punt_fichero);
  22. fwrite(&persona[0].edad,sizeof(int),1,fd);
  23. fwrite(&persona[0].nom,sizeof(char)*100,1,fd);
  24. fwrite(&persona[0].dni,sizeof(char)*15,1,fd);
  25. fclose(fd);
  26.  
  27. //fread (direcc_dato, tamaño_dato, numero_datos,punt_fichero);
  28. fd=fopen("datosbin.dat","rb+");
  29. fread(&edadLeida, sizeof(int),1,fd);
  30. fread(&nomLeido, sizeof(char)*100,1,fd);
  31. fread(&dniLeido, sizeof(char)*15,1,fd);
  32.  
  33. printf("\nLa edad leída es: %d y el nombre: %s y el DNI: %s\n",edadLeida,nomLeido,dniLeido);
  34.  
  35. fclose(fd);
  36. return 0;
  37.  
  38. }
  39.  


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 9 Julio 2015, 00:26 am
Yo lo haría con ficheros binarios y así puedes guardar el registro y no trabajas con la memoria, así no introducirás los datos todo el rato. Usa las funciones fread y fwrite. Te costará más, pero seguro que te aprueban jeje. EJEMPLO:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. FILE *fd;
  6. int edadLeida;
  7. char nomLeido[100];
  8. char dniLeido[15];
  9. struct TBinario
  10. {
  11. int edad;
  12. char nom[100];
  13. char dni[15];
  14. }persona[10];
  15.  
  16. persona[0].edad=20;
  17. strcpy(persona[0].nom,"Borja");
  18. strcpy(persona[0].dni,"454887965U");
  19.  
  20. fd=fopen("datosbin.dat","wb+");
  21. //fwrite (direcc_dato, tamaño_dato, numero_datos, punt_fichero);
  22. fwrite(&persona[0].edad,sizeof(int),1,fd);
  23. fwrite(&persona[0].nom,sizeof(char)*100,1,fd);
  24. fwrite(&persona[0].dni,sizeof(char)*15,1,fd);
  25. fclose(fd);
  26.  
  27. //fread (direcc_dato, tamaño_dato, numero_datos,punt_fichero);
  28. fd=fopen("datosbin.dat","rb+");
  29. fread(&edadLeida, sizeof(int),1,fd);
  30. fread(&nomLeido, sizeof(char)*100,1,fd);
  31. fread(&dniLeido, sizeof(char)*15,1,fd);
  32.  
  33. printf("\nLa edad leída es: %d y el nombre: %s y el DNI: %s\n",edadLeida,nomLeido,dniLeido);
  34.  
  35. fclose(fd);
  36. return 0;
  37.  
  38. }
  39.  

lo que pasa es que la profesora guardara todo cuando el programa este en ejecucion, si no usaria eso xD pero es algo complicado este programa que nos mando ._.'


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: mester en 9 Julio 2015, 00:50 am
No es complicado, es largo de hacer sobretodo con ficheros. Mañana lo tendré terminado, si quieres te paso el codigo con comentarios y tal, no me importa que lo uses para aprobar, te veo con ganas de aprender y además, no me importa compartir mi conocimiento, aunque sea poco, con los demas.


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 9 Julio 2015, 01:33 am
No es complicado, es largo de hacer sobretodo con ficheros. Mañana lo tendré terminado, si quieres te paso el codigo con comentarios y tal, no me importa que lo uses para aprobar, te veo con ganas de aprender y además, no me importa compartir mi conocimiento, aunque sea poco, con los demas.

gracias, si es muy largo T_T ya estoy tratando de hacer el case 2 gracias por tu ayuda me sirvio la parte que me pasaste y estoy completando lo otro, si quiero aprender lo que pasa es que fue mucha irresponsabilidad mia que deje esto para ultima hora ._., gracias muchas gracias!!


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: neron991 en 9 Julio 2015, 02:06 am
Otra duda para colocar contraseña al programa es asi:


Código:
 char contra='abc123';
   char clave;
 printf ("\nIngrese la contraseña: ");
    scanf ("%s",&clave);
    if (clave == contra)


pero al querer compilar me sale dos warning en el char contra='abc123';;
y al ejecutar el programa no me agarra la clave me salen estos dos warning:

Código:
27	21	C:\Users\ronald\Desktop\Sin Nombre1.c	[Warning] character constant too long for its type
27 21 C:\Users\ronald\Desktop\Sin Nombre1.c [Warning] overflow in implicit constant conversion [-Woverflow]


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: crack81 en 9 Julio 2015, 03:07 am
prueba esto

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.    const char *contrasena="abc123";
  7.    char clave[80];
  8.    printf("Ingrese sun contrasena: ");
  9.    scanf("%s",clave);
  10.  
  11.    if(strcmp(contrasena,clave)==0){
  12.        printf("\nson iguales");
  13.    }
  14.    else{
  15.        printf("son diferentes");
  16.    }
  17.  
  18.    getchar();
  19.    getchar();
  20.    return 0;
  21. }
  22.  


Título: Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
Publicado por: mester en 9 Julio 2015, 10:07 am
Otra duda para colocar contraseña al programa es asi:


Código:
 char contra='abc123';
   char clave;
 printf ("\nIngrese la contraseña: ");
    scanf ("%s",&clave);
    if (clave == contra)


pero al querer compilar me sale dos warning en el char contra='abc123';;
y al ejecutar el programa no me agarra la clave me salen estos dos warning:

Código:
27	21	C:\Users\ronald\Desktop\Sin Nombre1.c	[Warning] character constant too long for its type
27 21 C:\Users\ronald\Desktop\Sin Nombre1.c [Warning] overflow in implicit constant conversion [-Woverflow]

tienes que usar una función de Sting.h llamada strcmp() (Sting Compare), podrás encontrar referencias a esta librería aquí http://www.cplusplus.com/reference/cstring/