Chi è così gentile da aiutare un povero sventurato???...Ho creato un prog con quincy in linguaggio C.
Questa è la traccia dell'esercizio:
Un programma riceve sull’unita di input standard i dati relativi ad alcuni esami universitari. Ogni riga
contiene un dato che pu`o essere in uno dei due seguenti formati:
• il carattere C seguito da uno spazio e dalla sigla del corso (composta da 7 caratteri alfanumerici);
• il carattere S seguito da uno spazio, la matricola di uno studente (6 caratteri numerici), uno
spazio ed il voto (numero intero compreso tra 18 e 31 se lo studente ha superato l’esame, 0 se
lo studente `e iscritto ma non ha superato l’esame).
Ad esempio:
C 06AZNDI
S 000999 0
S 111222 29
C 01FQTCX
S 000111 18
S 111222 30
I dati di un corso si intendono implicitamente terminati quando inizia un altro corso o quando terminano
i dati in input.
Il programma deve leggere i dati forniti in input e per ogni corso presentare in output la sua sigla e le
relative statistiche: numero di studenti iscritti, numero e percentuale di studenti promossi, voto medio
dei promossi (con una sola cifra dopo la virgola). Ad esempio se il programma ricevesse i dati sopra
elencati dovrebbe produrre il seguente output:
Corso 06AZNDI:
- 2 studenti iscritti
- 1 studente promosso (50 %)
- 29.0 voto medio
Corso 01FQTCX:
- 2 studenti iscritti
- 2 studenti promossi (100 %)
- 24.0 voto medio
Se il programma trova una riga con formato errato (come sintassi o come logica, ad esempio un voto
maggiore di 31) deve scartarla e segnalare errore, indicando anche il numero della riga errata.
Premetto che sn 2 settimane che stud ogni giorno e ormai anche la notte,tuttavia ancora nn mi sento padrone degli strumenti di programmazione in linguaggio C
Ad ogni modo io l'ho sviluppato così:
#include <stdio.h>
#include <stdlib.h>
#define MAXBC 127
#define MAXCHAR 8 /*Valore max. caratteri */
int main ()
{
const char NULLCHAR = '\0';
const int EOL = '\n';
char buf [MAXBC+1];
char corso [MAXCHAR+1];
char c, s;
int subj, grade;
int iscr=1;
int prom=0;
int grades=0;
while (gets (buf)!= NULL)
{
if (sscanf (buf, "%c %s", &c, &corso) != 2)
{
fprintf (stderr, "Errore nel corso\n");
exit (1);
}
else if (c == tolower ('C'))
{
gets(buf);
while (gets (buf)!= NULL)
{
if ((sscanf (buf, "%c%d%d", &s, &subj, &grade ) ==3) && (s == tolower('S')))
{
iscr++;
if ((grade >= 18) && (grade <= 31))
{
prom++;
grades=(grades+grade);
}
}
}
}
printf ("Corso %s:\n- %d studenti iscritti\n- %d studenti promossi (%3.0lf%%)\n- %3.1lf voto medio\n",
toupper(corso), iscr, prom, (float)prom/iscr*100, (float) (grades/prom) );
}
return 0;
}
Infine preciso che ho inteso:
grade=voto esame
grades=voti tot
subj=materia
Se mi date una mane ve ne sarei grato perchè nn so proprio da dv iniziare la correzione!
Grazie