Disperazione post esame

di il
15 risposte

Disperazione post esame

Salve a tutti,sono appena uscito dal mio primo esame all'uni :info 1;
giovedì ho l'orale e devo portare il programma corretto e perfettamente funzionante.

un file contiene informazioni sui risultati di un conconrso da parte di candidati.la prima riga contiene il numero di prove(massimo 10),la seconda i punteggi massimi di ciascuna prova(separati da spazi) e quelle successive i punteggi dei candidati alle prove.I punteggi sono tutti valori interi.
le prove essenziali sono contrassegnate con un asterisco prima del punteggio massimo.Il formato è:

Esercizi: 3
Punteggio: *40 *30 30
1. Mario, Rossi, 30 30 15
2 Paola, De neri, 29 21 17
3. Francesca Maria, Verdi, 31 19 20

si noti che nome e cognome(max 40 caratteri)possono contenere spazi bianchi.si scriva una funzione c che riceva come parametri il nome di un file nel formato illustrato e il nome di un file output.la funzione deve scrivere nel file di out i candidati che abbiamo preso almeno 7/10 del punteggio su ciascuna prova essenziale.Per i candidati selezionati deve scrivere,nel file di out, Cognome,Nome, somma-punteggi-prove-fondamentali

15 Risposte

  • Re: Disperazione post esame

    Quindi la domanda qual'è?
  • Re: Disperazione post esame

    Volevo sapere voi come avreste risolto l'esercizio
  • Re: Disperazione post esame

    Tu come l'hai risolto?
  • Re: Disperazione post esame

    La brutta copia non ce l'ho qui.su questo es devo dire che ho avuto delle notevoli difficoltà:non sapevo esattamente cosa fare,come gestire il fatto che il numero di esami fosse definito nella prima riga,che non tutti fossero necessari per il calcolo dei 7/10.Immagino debba essere fatto con un for ma davvero non ne venivo fuori.
    Io non sono iscritto ad informatica e davvero trovo molto ostica questa materia
  • Re: Disperazione post esame

    Procedendo dall'inizio la prima cosa che incontri è il numero dei esercizi.
    Esercizi: 3
    Quidi ti serve un int che contiene il numero dei esercizi.
    
    int numEsercizi = 3;
    
    la successiva riga contiene i voti massimi dei esercizi. Quindi un esercizio si può definire come un struct così
    
    struct esercizio
    {
        int votoMassimo;
        bool provaEssenziale;
    };
    
    se incontri l'asterisco prima del numero significa che è una prova essenziale altrimenti no.

    Dovresti aver previsto un array di questo tipo di struct allocato dinamicamente.
    
    //se in C
    esercizio *arrayEsercizi = (esercizio *)malloc(sizeof(esercizio) * numEsercizi);
    //se in C++
    esercizio *arrayEsercizi = new esecizio[numEsercizi];
    
    Non prosseguo oltre perche non so cosa hai fatto.
  • Re: Disperazione post esame

    Purtroppo di questo esercizio ho fatto davvero poco,causa tempo e causa difficoltà da me incontrate.Come posso dichiarare variabili booleane?Esistono in c++ non in c;almeno da quanto mi risulta.Malloc non so cosa faccia...
    Io non sono iscritto ad ingegneria informatica ma a meccanica quindi non sono molto pratico,le uniche funzioni che abbiamo visto per leggere i file sono le fscanf e getc.
  • Re: Disperazione post esame

    Ooops scusa errore mio. Si può risolvere con un typedef.
    
    typedef enum{FALSE,TRUE} BOOL;
    
    se non hai imparato l'allocazione dinamica dovresti tenere fede all'esercizio che dice che non possono eserci + di 10 prove. Quindi il tutto si semplifica con
    
    #define MAX_PROVE 10
    ....
    esercizio arrayEsercizi[MAX_PROVE];
    
  • Re: Disperazione post esame

    Mi dispiace ma non ho fatto nemmeno quello;è solamente un corso base di programmazione..
  • Re: Disperazione post esame

    Ma li struct li hai fatti?
  • Re: Disperazione post esame

    Si si quelli si.
  • Re: Disperazione post esame

    
    struct esercizio
    {
        int votoMassimo;
        int provaEssenziale; //sarà == 1 se esenziale
    };
    
    così ti garba di +?
  • Re: Disperazione post esame

    Ok questo è comprensibile.quindi poi dovrò fare un vettore di struct no?in cui metterò di dati dei vari candidati
  • Re: Disperazione post esame

    Si. Poi dovresti riuscire a ricavare i dati e metterli su output.
  • Re: Disperazione post esame

    Questo è il testo che ho consegnato al prof.Ho provato a farlo girare ma non funziona bene,legge il fileInput solo in modo parziale


    #include <stdio.h>
    #include <stdlib.h>
    struct Dati
    {
    int valore;
    char simbolo;
    };
    void Punteggio(char nomefile[],char file_out[]);
    int main(int argc,char *argv[])
    {
    if(argc!=3)
    {
    printf("Errore linea comando\n");
    exit(1);
    }
    else
    Punteggio(argv[1],argv[2]);
    return 0;
    }
    void Punteggio(char nomefile[],char file_out[])
    {
    struct Dati v[4];
    char nome[31];
    char cognome[31];
    char ch;
    int i,n_es,voto,conta=0,somma=0;
    FILE *fp1;
    FILE *fp2;
    fp1=fopen(nomefile,"r");
    fp2=fopen(file_out,"w");
    fscanf(fp1,"%*s%d",&n_es);
    fscanf(fp1,"%*s");
    for(i=0;i<n_es;i++)
    fscanf(fp1,"%d%c",&v.valore,&v.simbolo);
    while((ch=getc(fp1))!=EOF)
    {
    getc(fp1);
    getc(fp1);
    i=0;
    while((ch=getc(fp1))!=',')
    {
    nome=ch;
    i++;
    }
    nome='\0';
    i=0;
    getc(fp1);
    while((ch=getc(fp1))!=',')
    {
    cognome=ch;
    i++;
    }
    cognome='\0';
    i=0;
    getc(fp1);
    for(i=0;i<n_es;i++)
    {
    fscanf(fp1,"%d",&voto);
    if(v.simbolo=='*')
    {
    if(voto>(v.valore/10)*6)
    {
    conta++;
    somma+=voto;
    }
    }
    else
    {
    conta++;
    somma+=voto;
    }
    if(conta==n_es)
    {
    fprintf(fp2,"%s,%s, %d\n",cognome,nome,somma);
    }
    }
    }
    fclose(fp1);
    fclose(fp2);
    }
Devi accedere o registrarti per scrivere nel forum
15 risposte