Autor
|
Tema: [Ayuda] Estructuras anidadas, registro. Lenguaje C (Leído 10,170 veces)
|
neron991
Desconectado
Mensajes: 17
|
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:#include <stdio.h> #include <stdlib.h> #define tam 2 struct alumno { char nombre[30]; char cedula [13]; char carrera [30]; char semestre[13]; char sexo[13]; }; struct materias{ int codigo; char materia[30]; int unidaddecredito; int calificacion; }; struct alumnos { struct alumno datos; struct materias mis_materias; }; struct alumnos escuela; int main() { int i,opcion=1; float sum=0,cont=0,peor; for (i=0;i<tam;i++) { printf ("\n\t\tDatos de los alumnos. "); printf("\nIntroduzca nombre alumno: "); fgets(escuela.datos.nombre,30,stdin); fgets(escuela.datos.nombre,30,stdin); printf("Introduzca Cedula del alumno V-."); fgets(escuela.datos.cedula,13,stdin); printf("Introduzca Sexo: "); fgets(escuela.datos.sexo,13,stdin); printf("Introduzca la Carrera que cursa el alumno: "); fgets(escuela.datos.carrera,30,stdin); printf("Introduzca Semestre del alumno: "); fgets(escuela.datos.semestre,30,stdin); printf ("\t\tINFORMACION DE MATERIAS: \n"); for (i=0;i<4;i++) { printf("Introduzca Codigo: "); scanf ("%d",&escuela.mis_materias.codigo,tam,stdin); printf("Introduzca nombre de la materia: "); scanf ("%s",escuela.mis_materias.materia); printf("Introduzca unidad de credito "); scanf ("%d",&escuela.mis_materias.unidaddecredito); printf("Introduzca nota: "); scanf("%d",&escuela.mis_materias.calificacion); } } while ((opcion==1 || opcion==2 || opcion==3) || (opcion!=4)) { printf("1- Buscar un alumno\n"); printf("2- Media de todas las notas\n"); printf("3- Alumno con peores notas\n"); printf("4- Salir\n"); printf("Introduzca una opción: "); scanf("%d",&opcion); switch (opcion) { case 1: printf("Introduzca un nombre: "); scanf ("%d",&escuela.datos.nombre); for(i = 0; i < tam;i++) { if (strcmp(escuela.datos.nombre[i],escuela.datos.nombre)==0) { printf("\nNombre: %s\n",escuela.datos.nombre[i]); printf("Nota: %d\n",escuela.mis_materias.calificacion); printf("\nCedula: %s\n",escuela.datos.cedula); printf("\nSexo: %s\n",escuela.datos.sexo); printf("\nCarrera: %s\n",escuela.datos.carrera); printf("\nSemestre: %s\n",escuela.datos.semestre); } } printf("\n\n"); break; } } while (getchar()!='\n'); return 0; }
|
|
« Última modificación: 8 Julio 2015, 23:11 pm por neron991 »
|
En línea
|
|
|
|
engel lex
|
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
Mensajes: 17
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 17
|
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
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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: #include <stdio.h> #include <string.h> int main(){ FILE *fd; int edadLeida; char nomLeido[100]; char dniLeido[15]; struct TBinario { int edad; char nom[100]; char dni[15]; }persona[10]; persona[0].edad=20; strcpy(persona [0]. nom,"Borja"); strcpy(persona [0]. dni,"454887965U"); fd =fopen("datosbin.dat","wb+"); //fwrite (direcc_dato, tamaño_dato, numero_datos, punt_fichero); fwrite(&persona [0]. edad,sizeof(int),1,fd ); fwrite(&persona [0]. nom,sizeof(char)*100,1,fd ); fwrite(&persona [0]. dni,sizeof(char)*15,1,fd ); //fread (direcc_dato, tamaño_dato, numero_datos,punt_fichero); fd =fopen("datosbin.dat","rb+"); fread(&edadLeida , sizeof(int),1,fd ); fread(&nomLeido , sizeof(char)*100,1,fd ); fread(&dniLeido , sizeof(char)*15,1,fd ); printf("\nLa edad leída es: %d y el nombre: %s y el DNI: %s\n",edadLeida ,nomLeido ,dniLeido ); return 0; }
|
|
« Ú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
Mensajes: 17
|
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: #include <stdio.h> #include <string.h> int main(){ FILE *fd; int edadLeida; char nomLeido[100]; char dniLeido[15]; struct TBinario { int edad; char nom[100]; char dni[15]; }persona[10]; persona[0].edad=20; strcpy(persona [0]. nom,"Borja"); strcpy(persona [0]. dni,"454887965U"); fd =fopen("datosbin.dat","wb+"); //fwrite (direcc_dato, tamaño_dato, numero_datos, punt_fichero); fwrite(&persona [0]. edad,sizeof(int),1,fd ); fwrite(&persona [0]. nom,sizeof(char)*100,1,fd ); fwrite(&persona [0]. dni,sizeof(char)*15,1,fd ); //fread (direcc_dato, tamaño_dato, numero_datos,punt_fichero); fd =fopen("datosbin.dat","rb+"); fread(&edadLeida , sizeof(int),1,fd ); fread(&nomLeido , sizeof(char)*100,1,fd ); fread(&dniLeido , sizeof(char)*15,1,fd ); printf("\nLa edad leída es: %d y el nombre: %s y el DNI: %s\n",edadLeida ,nomLeido ,dniLeido ); return 0; }
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
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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
Mensajes: 17
|
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
Mensajes: 17
|
Otra duda para colocar contraseña al programa es asi: 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: 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Estructuras anidadas, funciones y punteros
Programación C/C++
|
NathanD
|
9
|
10,743
|
18 Marzo 2013, 08:56 am
por 85
|
|
|
Ayuda con borrado en estructuras anidadas
Programación C/C++
|
JHodges
|
8
|
3,709
|
11 Junio 2015, 04:24 am
por rir3760
|
|
|
Estructuras anidadas en lenguaje C. -
Programación C/C++
|
NOB2014
|
3
|
4,332
|
5 Febrero 2017, 18:42 pm
por ivancea96
|
|
|
Ayuda con estructuras anidadas
Programación C/C++
|
mari2diaz
|
3
|
2,068
|
20 Julio 2018, 01:07 am
por engel lex
|
|
|
Estructuras Anidadas en C
Programación C/C++
|
Ghio97
|
5
|
2,706
|
4 Septiembre 2019, 10:22 am
por MAFUS
|
|