Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con un programa en C

Estas en el tema de Ayuda con un programa en C en el foro de C/C++ en Foros del Web. Buenas, Tengo un amigo con un problema en un programa en C y yo ya lo tengo un poco oxidado, no és de mis lenguajes ...
  #1 (permalink)  
Antiguo 12/11/2008, 02:31
 
Fecha de Ingreso: noviembre-2008
Mensajes: 1
Antigüedad: 15 años, 5 meses
Puntos: 0
Ayuda con un programa en C

Buenas,

Tengo un amigo con un problema en un programa en C y yo ya lo tengo un poco oxidado, no és de mis lenguajes favoritos xD si podeis hechar una mano...

El Programa lee las notas de los alumnos, y muestra los alumnos que han superado la nota de corte.

Compila pero no muestra los valores finales ordenados por nota media.
Creemos que el error puede estar en el índice de una tabla o en algún puntero.

Muchas gracias

------------------------

#include <stdio.h>
#include <stdlib.h>
#define MAXALUM 40
#define MAXASSIG 6
#define FISEQ -1

typedef enum {FALSE,TRUE} bool;

typedef struct {
int idAlumne;
float notaMig;
char opcio;
} tAlumne;

typedef struct {
char carrera;
float nota;
} tNotesTall;

typedef struct {
tAlumne alumnes[MAXALUM];
int numAlumnes;
} tClasse;

void inicialitzarClasse(tClasse *classe);
void llegirNotes(tAlumne *alumne);
void inserir(tAlumne alumne, tClasse *classe);
void mostrarResultats(tClasse classe,tNotesTall notes);

/*Pre: En el canal de entrada tenemos una secuencia del tipo
<codiCarrera notaTall idAlum1 preferencia1 nota11 nota12 nota13 nota14 nota15 nota16
... idAlumj preferenciaj notaj1 notaj2 notaj3 notaj4 notaj5 notaj6 ...
idAlumn preferencian notan1 notan2 notan3 notan4 notan5 notan6 -1>*/

int main()
{
tClasse classe;
tAlumne alumne;
tNotesTall notesTall;
/*Iniciamos los datos de clase*/
inicialitzarClasse(&classe);
/*Leemos de la secuencia de entrada las notas de corte y de los alumnos*/
scanf("%c",&notesTall.carrera);
scanf("%f",&notesTall.nota);
scanf("%d",&alumne.idAlumne);
while (alumne.idAlumne != FISEQ){
/*Leemos y guardamos los datos de un alumno*/
llegirNotes(&alumne);
/*Guardamos los datos del alumno*/
inserir(alumne,&classe);
scanf("%d",&alumne.idAlumne);
}
mostrarResultats(classe,notesTall);
/*system("PAUSE");*/
return 0;
}
/*Post: en el canal de salida hay una secuencia del tipo
<idAlum1 acceptat1 idAlum2 acceptat2 ... idAlumn acceptatn>
que indica los alumnos que han superado la nota de corte.
La secuencia esta ordenada por nota media de los alumnos}*/

void inicialitzarClasse(tClasse *classe)
{
classe->numAlumnes=0;
}

void llegirNotes(tAlumne *alumne)
{
float pesos[MAXASSIG];
int i;
float nota;
float n_assig;
char blanc;
pesos[0]=1.2;
pesos[1]=1.5;
pesos[2]=2.0;
pesos[3]=1.5;
pesos[4]=1.8;
pesos[5]=2.0;
nota=0.0;
scanf("%c",&blanc);
scanf("%c",&alumne->opcio);
for (i=0;i<MAXASSIG;i++){
scanf("%f.2",&n_assig);
nota=(nota+n_assig)*pesos[i];
}
alumne->notaMig=nota/10.0;

}

void inserir(tAlumne alumne, tClasse *classe)
{
bool trobat;
int i;
int j;
i=0;

if (classe->numAlumnes>0){
trobat=FALSE;
while (i<classe->numAlumnes && !trobat){
trobat=(classe->alumnes[i].notaMig)<(alumne.notaMig);
if (!trobat){
i++;
}
}
if (trobat){
for (j=classe->numAlumnes;j<i;j--){
classe->alumnes[j+1]=classe->alumnes[j];
}
}
}
classe->alumnes[i]=alumne;
classe->numAlumnes++;
}

void mostrarResultats(tClasse classe,tNotesTall notes)
{
int i;
if (classe.numAlumnes>0){
for (i=0;i<classe.numAlumnes;i++){
if ((classe.alumnes[i].opcio)==(notes.carrera)){
printf("%d ",classe.alumnes[i].idAlumne);
if ((classe.alumnes[i].notaMig)>(notes.nota)){
printf("%c",'s');
}else{
printf("%c",'n');
}
printf("%c",' ');
}
}
}
}

/*void mostrarResultats(tClasse classe,tNotesTall notes)
{
int i;
if (classe.numAlumnes>0){
for (i=0;i<classe.numAlumnes;i++){
if ((classe.alumnes[i].opcio)==(notes.carrera)){
printf("%d ",classe.alumnes[i].idAlumne);
if ((classe.alumnes[i].notaMig)>(notes.nota)){
printf("%c",'s');
}else{
printf("%c",'n');
}
printf("%c",' ');
}
}
}
}
*/

------------------------
  #2 (permalink)  
Antiguo 14/11/2008, 14:28
Avatar de post-it  
Fecha de Ingreso: noviembre-2008
Mensajes: 17
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Ayuda con un programa en C

Lo mejor para estos casos es realizar una traza del código, con paciencia, calma y utilizando casos simples de pocas iteraciones (entre 3 y 7 por ejemplo).

Lo podéis hacer en papel incluso (en una servilleta :D) pero os recomiendo que utilicéis el debugger GNU gdb

Saludos y ánimo que el código es muy pequeño!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.