soulsitg Posted July 5, 2012 Report Share Posted July 5, 2012 (edited) hola necesito ayuda para presentar el trabajo en programacion y tengo que compilar lo siguienteusando float, for, gets,do y iteracion indicando asignaturanombrerutnota ponderacion de la nota ej 30% nota 1promediosi esta aprovado la asignatura o reprovadoy tener una opcion de guardar en un txt y tambien la posibilidad de modificar uff es una nota para programacion la estructura no entiendo mcuho como va...La tarea consiste en escribir un programa en C que permita llevar el control de las calificaciones de los ramos de un alumno durante un semestre.Lo anterior significa que el programa debe ser capaz de registrar y modificar calificaciones de las asignaturas que tiene el alumno y entregar opciones para que se calculen las notas finales cuando todas las calificaciones estén registradas.Considere que el máximo de asignaturas a manejar es 6 y que el máximo de calificaciones por asignatura es 10. Cada asignatura requiere un número de calificaciones (cada una con su respectiva ponderación) para determinar la nota final.El programa debe ser capaz de realizar las siguientes tareas:· Cargar las asignaturas, ponderaciones y calificaciones desde un archivo de texto.· Realizar modificaciones, eliminaciones y cambios de cualquier especie.· Grabar asignaturas, ponderaciones y calificaciones hacia un archivo de texto.· Leer el archivo y ingresar notas que no fueron ingresada y no sobreescribir notas que estan guaradadaun saludo Edited July 12, 2012 by soulsitg Link to comment Share on other sites More sharing options...
AshWilliams Posted July 5, 2012 Report Share Posted July 5, 2012 Movido a Aplicaciones de Escritorio ;) Link to comment Share on other sites More sharing options...
nycko[!] Posted July 5, 2012 Report Share Posted July 5, 2012 postea aqui lo que tienes, a ver en que se te puede corregir.. de partida usaria varios struct (dependiendo si vas a usar una lista unica o varias listas dependiendo cada materia) tambien.. vas a leer desde archivo de texto ? Link to comment Share on other sites More sharing options...
AshWilliams Posted July 5, 2012 Report Share Posted July 5, 2012 Exacto....con structs, y puedes usar arreglos o listas, o bien una mezcla de ambos ;) Link to comment Share on other sites More sharing options...
soulsitg Posted July 6, 2012 Author Report Share Posted July 6, 2012 (edited) #include <stdio.h> #include <stdlib.h> typedef struct { char nombre[50]; char nom[50]; char rut[50]; char fechaNac[50]; char carrera[50]; char ingreso[50]; }Contacto; typedef struct { char nombre[50]; char nom[50]; char rut[50]; char fechaNac[50]; char carrera[50]; char ingreso[50]; }Cont; int main(){ int x; printf("1. INGRESAR DATO DEL ALUMNO \n"); printf("2. LISTAR ALUMNOS \n"); printf("3. COPIAR ARCHIVO \n"); printf("4. LISTAR POR NOMBRE \n"); printf("\n\n\n"); printf("ingrese opcion : "); scanf("%d",&x); printf("\n\n"); while (x>4 || x<1){ printf("error ingrese una opcion del menu :\n\n"); printf("1. INGRESAR DATO DEL ALUMNO \n"); printf("2. LISTAR ALUMNOS \n"); printf("3. COPIAR ARCHIVO \n"); printf("4. LISTAR POR NOMBRE \n"); printf("\n\n\n"); printf("ingrese opcion : "); scanf("%d",&x); printf("\n\n"); } switch (x){ case 1: ingresar(); break; case 2: mostrar(); break; case 3 : copiar(); break; case 4 : ordenar(); break; } system("PAUSE"); return 0; } int mostrar(){ FILE *fuente; Contacto c; fuente= fopen("fuente.txt", "r"); if (fuente== NULL) printf("Error al abrir archivo..\n"); else { fread(&c, sizeof©, 1, fuente); while (! feof(fuente)){ fread(&c, sizeof©, 1, fuente); printf("%s\n",c.nombre ); printf("Nombre : %s\n",c.nom ); printf("RUN : %s\n",c.rut); printf("Carrera : %s\n",c.carrera); printf("Fecha de Nacimiento : %s\n",c.fechaNac); printf("\n\n"); fread(&c, sizeof(Contacto), 1, fuente); } fclose(fuente); main(); } } int ingresar(){ Contacto c; // abro el archivo FILE *fuente; fuente=fopen("fuente.txt","a"); //creo el archivo txt fuente.txt if (fuente==NULL)//verifico si el archivo txt se abrio o se creo exitosamente printf("Error al Abrir el Archivo \n"); //imprimo el mensaje de error else{ fread(&c, sizeof(Contacto), 1, fuente); gets(c.nombre ); printf("NOMBRE : "); gets(c.nom ); printf("RUT : "); gets(c.rut ); printf("ASIGNATURA : "); gets(c.carrera ); printf("NOTAS : "); gets(c.fechaNac ); printf("ponderacion : "); fwrite(&c, sizeof(Contacto), 1, fuente); printf("\n\n\n"); } fclose(fuente);//cierro el archivo fuente.txt main(); } //-------------------------------------------- int copiar(){ FILE *fuente, *copia; Contacto c; Cont r; fuente= fopen("fuente.txt", "r"); copia= fopen("paso.txt","w"); if (fuente== NULL || copia==NULL) printf("Error al abrir uno de los archivos..\n"); else { fread(&c, sizeof(Contacto), 1, fuente); while (!feof(fuente)){ fwrite(&c,sizeof(Contacto),1,copia); fread(&c, sizeof(Contacto), 1, fuente); } fclose(fuente); fclose(copia); } printf("el archivo fuente se copio con exito\n\n\n"); ordenar(); } //----------------------------------------------------------- int ordenar(){ /* FILE *fuente, *copia; Contacto c; Cont r; fuente= fopen("fuente.txt", "r"); copia= fopen("paso.txt","r"); if (fuente== NULL || copia==NULL) printf("Error al abrir uno de los archivos..\n"); else { fread(&c, sizeof(Contacto), 1, fuente); fread(&r, sizeof(Contacto), 1, copia); while (!feof(fuente)&& !feof(copia)){ while(c.rut>r.rut){ fread(&r, sizeof(Cont), 1, copia); } printf("nombre : %s\n",c.nombre); printf("rut : %s\n",c.rut); printf("fecha nac : %s\n",c.fechaNac); printf("carrera : %s\n",c.carrera); fread(&r, sizeof(Cont), 1, copia); fread(&c, sizeof(Contacto), 1, fuente); } fclose(fuente); fclose(copia); } */ main(); } Edited July 7, 2012 by soulsitg Link to comment Share on other sites More sharing options...
nycko[!] Posted July 6, 2012 Report Share Posted July 6, 2012 de partida.. 1.- no caché por qué definiste 2 estructuras iguales. :mellow:2.- no declaraste ninguna de las funciones que utilizaste ( salvo que lo hubieses hecho en un archivo .h que es lo mas comodo para lo que quieres hacer)3.- despues cuando las usaste.. las pusiste como int, almenos el mostrar.. deberias usar un void.. (persepcion personal, pero solo vas a mostrar.. no vas a modificar ni nada.. como no retornas un dato en especifico.. un VOID es lo qe debes usar :sipis: , de hecho, podrias hacer casi todo eso con voids :mellow: 4.- encontre mas dramas.. pero con eso para empezar.. vas a usar una lista ? onda.. son 45 alumnos.. y hacer un struct con los alumnos ? o es solamente individual? Link to comment Share on other sites More sharing options...
AshWilliams Posted July 6, 2012 Report Share Posted July 6, 2012 (edited) Te voy a dejar un enlace para que entiendas mejor lo que estás haciendo:http://bzkgaming.wor...tructuras-en-c/ Ten en cuenta los consejos del nycko....lo primero antes de empezar a desarrollar es modelar la aplicación y tu modelo no está muy bien encaminado que digamos. Yo en estos casos cargaba el contenido del txt a una lista simple enlazada y trabajaba con la lista....una vez cerraba el programa guardaba la lista en el txt(sobreescribia el txt)...tenía el inconveniente de que si se caia el programa no alcanzaba a guardar los nuevos cambios, pero a mi forma de ver era más práctico.... lo otro, define bien tus estructuras: yo usaria una para alumnos, otra para asignaturas y otra para notas...asi usaria struct de struct....voy a tratar de hacer un ejemplo ;)PS: Logré hacer un ejemplo funcional de lo que estaba diciendo.....solo con structs y arreglos de structs; está un poco cutre, pero años que no programaba en C :tonto: #include <stdio.h> #include <stdlib.h> typedef struct{ char asignatura[50]; int nota[3]; int promedio; }Notas; typedef struct{ char nombre[80]; char rut[12]; Notas notas[2]; } Alumno; int main() { int opcion,cont,posicion; Alumno arreglo_alumnos[100]; cont = 0; do{ printf("\nMenu de Opciones\n"); printf("Ingresar Alumno 1\n"); printf("Mostrar Datos Alumno 2\n"); printf("Salir 3\n"); scanf("%d",&opcion); switch (opcion) { case 1: { printf("Ingreso Alumno\n"); if(cont < 99) { printf("Nombre Alumno : "); gets(arreglo_alumnos[cont].nombre); gets(arreglo_alumnos[cont].nombre); printf("Rut Alumno : "); gets(arreglo_alumnos[cont].rut); printf("Asignatura 1 : \n"); printf("Nombre Asignatura : "); gets(arreglo_alumnos[cont].notas[0].asignatura); printf("Nota 1 : "); scanf("%d",&arreglo_alumnos[cont].notas[0].nota[0]); printf("Nota 2 : "); scanf("%d",&arreglo_alumnos[cont].notas[0].nota[1]); printf("Nota 3 : "); scanf("%d",&arreglo_alumnos[cont].notas[0].nota[2]); arreglo_alumnos[cont].notas[0].promedio = (arreglo_alumnos[cont].notas[0].nota[0] + arreglo_alumnos[cont].notas[0].nota[1] + arreglo_alumnos[cont].notas[0].nota[2]) / 3; printf("Asignatura 2 : \n"); printf("Nombre Asignatura : "); gets(arreglo_alumnos[cont].notas[1].asignatura); gets(arreglo_alumnos[cont].notas[1].asignatura); printf("Nota 1 : "); scanf("%d",&arreglo_alumnos[cont].notas[1].nota[0]); printf("Nota 2 : "); scanf("%d",&arreglo_alumnos[cont].notas[1].nota[1]); printf("Nota 3 : "); scanf("%d",&arreglo_alumnos[cont].notas[1].nota[2]); arreglo_alumnos[cont].notas[1].promedio = (arreglo_alumnos[cont].notas[1].nota[0] + arreglo_alumnos[cont].notas[1].nota[1] + arreglo_alumnos[cont].notas[2].nota[2]) / 3; cont = cont + 1; } else { printf("Imposible completar operación\n"); } } case 2: { if(opcion == 2){ printf("Ingrese el numero de lista del alumno : "); scanf("%d",&posicion); if(posicion-1 < cont) { printf("Datos del alumno : \n"); printf("Nombre Completo : %s \n", arreglo_alumnos[posicion-1].nombre); } else { printf("Alumno no existe...."); } } } } }while(opcion < 3); return 0; } Saludos :krider: Edited July 6, 2012 by AshWilliams Link to comment Share on other sites More sharing options...
soulsitg Posted July 6, 2012 Author Report Share Posted July 6, 2012 (edited) ' timestamp='1341558314' post='17908133']de partida..1.- no caché por qué definiste 2 estructuras iguales. :mellow:2.- no declaraste ninguna de las funciones que utilizaste ( salvo que lo hubieses hecho en un archivo .h que es lo mas comodo para lo que quieres hacer)3.- despues cuando las usaste.. las pusiste como int, almenos el mostrar.. deberias usar un void.. (persepcion personal, pero solo vas a mostrar.. no vas a modificar ni nada.. como no retornas un dato en especifico.. un VOID es lo qe debes usar :sipis: , de hecho, podrias hacer casi todo eso con voids :mellow: 4.- encontre mas dramas.. pero con eso para empezar.. vas a usar una lista ? onda.. son 45 alumnos.. y hacer un struct con los alumnos ? o es solamente individual? 4.- la idea es ingresar alumnos A quisas >30 pero lo que trato de hacer es que cuando ingrese la nota de cada alumno se repita hasta tener una ponderacion = a 100 eso no logro hacer aun Edited July 6, 2012 by soulsitg Link to comment Share on other sites More sharing options...
nycko[!] Posted July 6, 2012 Report Share Posted July 6, 2012 (edited) ' timestamp='1341558314' post='17908133']de partida..1.- no caché por qué definiste 2 estructuras iguales. :mellow:2.- no declaraste ninguna de las funciones que utilizaste ( salvo que lo hubieses hecho en un archivo .h que es lo mas comodo para lo que quieres hacer)3.- despues cuando las usaste.. las pusiste como int, almenos el mostrar.. deberias usar un void.. (persepcion personal, pero solo vas a mostrar.. no vas a modificar ni nada.. como no retornas un dato en especifico.. un VOID es lo qe debes usar :sipis: , de hecho, podrias hacer casi todo eso con voids :mellow: 4.- encontre mas dramas.. pero con eso para empezar.. vas a usar una lista ? onda.. son 45 alumnos.. y hacer un struct con los alumnos ? o es solamente individual? 4.- la idea es ingresar alumnos A quisas >30 pero lo que trato de hacer es que cuando ingrese la nota de cada alumno se repita hasta tener una ponderacion = a 100 eso no logro hacer aunno cacho a que te refieres con ponderacion = a 100.. 100% ? onda.. 1 nota vale 20% otra nota = 30% y otra 40% hasta completar los 100?eso tendrias qe definirlo dependiendo de cada asignatura ps.. deberias ingresar la cantidad de notas.. y la ponderacion de cada 1 manualmente.. dsps en una funcion cualquiera hacer algo asi: con un for leer las x cantidad de notas;for (i=0;i<=x;i++){notas.asignatura[w].nota= "nota aqui";despues leer las ponderacionesnotas.asignatura[w].ponderacion="ponderacion aqui"}para sacar el final.. teni que comprobar que las ponderaciones sean correctas.. ( con un If dentro de un for )validar=0;for (i=0;i<=x;i++){validar=validar+notas.asignatura[w].ponderacion;}if (validar!=100) nose ps.. repites la accion o pegas error.. despues para sacar el promedio es cosa de que la ponderacion la multipliques por 0.01 y despues por la nota.. despues sumas las notas y voilá.. te sale el promedio final :) (asi por lo menos sacabamos las ponderaciones nosotros.. alla uds como lo hacen será pajero pero es efectivo :sipis: ) algo asi? Edited July 6, 2012 by nycko[!] Link to comment Share on other sites More sharing options...
soulsitg Posted July 6, 2012 Author Report Share Posted July 6, 2012 (edited) gracias ashwilliams por tu estructura es mucho mejor que el que tenia yo, pero como meto esto en tu estructura de las notas y ponderacion me imgino que deveria ser una matriz de 3x3 asignatura[] nota[] ponderacion[] void main() { // definicion de variables int asig = 1, nota, nota_mayor, nota_menor, notaf, pond, i, k, celda, n, t, pondacumulada; // int asig_a = 0; asig_r = 0, asig_p = 0; //inicializar arreiglo. while ( asig != 0 ) { printf("Ingrese codigo de asignatura (numero entero) : "); scanf( "%d", &asig ); if ( asig != 0 ) { i = 0; pondacumulada = 0; notaf = 0.0; while ( pondacumulada < 100 ) { i++; printf("nota(%d) = ", i); scanf("%d", ¬a); printf("pond(%d) = ", i); scanf("%d", &pond); while( pond > (100 - pondacumulada) ) { printf("Debe ingresar un valor < a %dn", 100-pondacumulada); printf("pond(%d) = ", i); scanf("%d", &pond); } notaf = notaf + ( (float)nota/100 * (float)pond/100 ); pondacumulada += pond; printf("Ingrese Numero (entero) (con 0 termina):");scanf("%d",&n); } printf("Asignatura : %dn-----------------nn", asig ); printf("Nota Final %1.2fnnnn", notaf); // faltan los criterios de arobacion/reprobacion. } } } Edited July 7, 2012 by soulsitg Link to comment Share on other sites More sharing options...
Recommended Posts