Ciao a tutti, sono nuovo sia del forum che della programmazione e ho qualche problema con un programma in C che utilizza istruzioni switch, while e if annidate. La consegna è:
Scrivere un programma che calcoli la media degli esami pesata rispetto al numero di crediti sostenuti, escludendo i due peggiori voti. Il programma dovrà acquisire tramite scanf il numero di anni del corso di laurea, il voto e i crediti di ogni esame. Il programma tramite l'istruzione switch dovrà capire se si tratta di corso di laurea Triennale o Magistrale. Il programma dovrà teminare se il numero di crediti inseriti è maggiore di 177 o 105 rispettivamente nel caso di corso di laurea triennale o magistrale o in alternativa se viene inserito come voto 0. Il programma dovrà inoltre calcolare il voto in centodiecesimi e stampare a schermo il numero di esami sostenuti e i rispettivi crediti, i due esami peggiori e i rispettivi crediti.
Media pesata = sommatoria(voto*credito)/sommatoria(crediti)
Il codice che ho scritto è:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int anni, voto, crediti, s_voti=0, s_crediti=0, i=1, vmin1=31, vmin2=31, cmin1=0, cmin2=0;
int vxcrediti, vxcreditimin1=0, vxcreditimin2=0, sommvoti=0, sommcrediti=0;
float media, voto110;
printf("Inserire in numero degli anni del corso di laurea: ");
scanf("%d", &anni);
printf("\n");
switch(anni)
{
case 3:
printf("Il corso di laurea %c triennale.\n\n", 138);
while(s_crediti<177 && voto!=0)
{
printf("Inserire il voto %d%c esame (inserire voto 0 per terminare): ", i, 248);
scanf("%d", &voto);
printf("Inserire i crediti del %d%c esame: ", i, 248);
scanf("%d", &crediti);
vxcrediti = voto * crediti;
s_voti = s_voti + vxcrediti;
s_crediti = s_crediti + crediti;
if(voto<vmin1 && voto!=0)
{
vmin2=vmin1;
vmin1=voto;
cmin2=cmin1;
cmin1=crediti;
vxcreditimin1=voto*crediti;
}
else if(voto<vmin2 && voto!=0)
{
vmin2=voto;
cmin2=crediti;
vxcreditimin2=voto*crediti;
}
i++;
}
sommvoti = s_voti - (vxcreditimin1 + vxcreditimin2);
sommcrediti = s_crediti - (cmin1 + cmin2);
media = (float)sommvoti / sommcrediti;
voto110 = media*110/30;
printf("\n\nLa media ponderata degli esami %c %.2f/100.\n", 138, media);
printf("Hai sostenuto %d esami corrispondenti a %d crediti.\n", i-1, s_crediti);
printf("I due voti peggiori sono %d e %d, corrispondenti rispettivamente a %d e %d crediti.\n", vmin1, vmin2, cmin1, cmin2);
printf("La votazione pre-tesi %c uguale a %.2f/110.\n\n", 138, voto110);
break;
case 2:
printf("Il corso di laurea %c magistrale.\n\n", 138);
while(s_crediti<105 && voto!=0)
{
printf("Inserire il voto %d%c esame (inserire voto 0 per terminare): ", i, 248);
scanf("%d", &voto);
printf("Inserire i crediti del %d%c esame: ", i, 248);
scanf("%d", &crediti);
vxcrediti = voto * crediti;
s_voti = s_voti + vxcrediti;
s_crediti = s_crediti + crediti;
if(voto<vmin1 && voto!=0)
{
vmin2=vmin1;
vmin1=voto;
cmin2=cmin1;
cmin1=crediti;
vxcreditimin1=voto*crediti;
}
else if(voto<vmin2 && voto!=0)
{
vmin2=voto;
cmin2=crediti;
vxcreditimin2=voto*crediti;
}
i++;
}
sommvoti = s_voti - (vxcreditimin1 + vxcreditimin2);
sommcrediti = s_crediti - (cmin1 + cmin2);
media = (float)sommvoti / sommcrediti;
voto110 = media*110/30;
printf("\n\nLa media ponderata degli esami %c %.2f/100.\n", 138, media);
printf("Hai sostenuto %d esami corrispondenti a %d crediti.\n", i-1, s_crediti);
printf("I due voti peggiori sono %d e %d, corrispondenti rispettivamente a %d e %d crediti.\n", vmin1, vmin2, cmin1, cmin2);
printf("La votazione pre-tesi %c uguale a %.2f/110.\n\n", 138, voto110);
break;
default:
printf("Il numero inserito non %c accettabile. Riprova.\n\n", 138);
}
return 0;
}
il quale sembra funzionare per quanto riguarda l'individuazione dei due voti peggiori, dei rispettivi crediti e del numero di esami, ma da problemi con il calcolo della media e del voto. Secondo voi cosa dovrei correggere? Grazie mille in anticipo!