elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Estructuras anidadas, registro. Lenguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Estructuras anidadas, registro. Lenguaje C  (Leído 9,645 veces)
neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
[Ayuda] Estructuras anidadas, registro. Lenguaje C
« 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. }


« Última modificación: 8 Julio 2015, 23:11 pm por neron991 » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #1 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?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #2 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!!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #3 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*.
En línea

neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #4 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..
En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #5 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.  
« Última modificación: 9 Julio 2015, 00:14 am por nonpromisc » En línea

Justicia es dar a cada uno lo que se merece
neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #6 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 ._.'
En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #7 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.
En línea

Justicia es dar a cada uno lo que se merece
neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #8 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!!
En línea

neron991

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [Ayuda] Estructuras anidadas, registro. Lenguaje C
« Respuesta #9 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]
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructuras anidadas, funciones y punteros
Programación C/C++
NathanD 9 10,406 Último mensaje 18 Marzo 2013, 08:56 am
por 85
Ayuda con borrado en estructuras anidadas
Programación C/C++
JHodges 8 3,414 Último mensaje 11 Junio 2015, 04:24 am
por rir3760
Estructuras anidadas en lenguaje C. -
Programación C/C++
NOB2014 3 4,101 Último mensaje 5 Febrero 2017, 18:42 pm
por ivancea96
Ayuda con estructuras anidadas
Programación C/C++
mari2diaz 3 1,850 Último mensaje 20 Julio 2018, 01:07 am
por engel lex
Estructuras Anidadas en C
Programación C/C++
Ghio97 5 2,421 Último mensaje 4 Septiembre 2019, 10:22 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines