Semplice programma in C

di il
3 risposte

Semplice programma in C

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!

3 Risposte

  • Re: Semplice programma in C

    Puoi essere più specifico sui problemi che hai?
  • Re: Semplice programma in C

    oregon ha scritto:


    Puoi essere più specifico sui problemi che hai?
    Ciao, mi sembrava che desse risultati sballati, ma controllando meglio i risultati sono corretti quindi presumo che il codice sia giusto. E' possibile eliminare il thread? Grazie comunque per la disponibilità!
  • Re: Semplice programma in C

    No, non si cancellano i thread.

    Comunque ti suggerisco di scrivere

    110.0/30.0

    per evitare problemi di calcolo
Devi accedere o registrarti per scrivere nel forum
3 risposte