Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    31

    PROBLEMA programma funziona e poi non funziona!

    salve a tutti, scusate ma mi trovo costretto a farvi un copia e incolla di tutto il codice perchè non riesco a capire cosa c'è di sbagliato..

    praticamente dovevo fare un programma che prendesse dei dati dei professori e dei relativi esami compresi crediti, periodo(semestre), e percentuale promossi.

    Il programma dovrà stampare a video:
    a. il nome della materia che assegna più crediti in assoluto (scriverle tutte se sono più di una con crediti max)
    b. per ciascun periodo didattico (considerandone al massimo 4), la
    materia più difficile da superare

    Il programma dovrà infine richiedere l’inserimento da tastiera di nome e
    cognome di un professore e stampare a video:
    c. la somma dei crediti assegnati dalle materie che insegna
    d. la media di superamento degli esami da lui tenuti.

    il punto A l'ho fatto subito e funzionava perfettamente! però ora ho fatto il punto c e d.. e il punto A non funziona più mi stampa 2faccine sorridenti al posto della materia e i crediti massimi sono uguali a 0!

    poi se metto tutta la parte dei punti C e D come se fosse un commento, il punto A funziona di nuovo perfettamente -.- però non riesco a capire dov'è sbagliato..

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    typedef struct nomi {
               char materia[20];
               char nome_prof[20], cognome_prof[20];
               int periodo, crediti, promossi;
                        } Struttura;
    
    int main(int argc, char *argv[])
    {
        FILE *fp;
        Struttura dati;
        char nomefile[20], materiamax[80][20], materiadiff[4][20], matmax[20], nome[20], cognome[20];
        int continuascrivere, righe=0, i, p;
        int creditimax[80], promossimin[4], periodimax=4, max, pos, totcrediti=0, totpromossi=0, numtot=0;
        float media=0;
    
        for(p=0; p<80; p++) {
                    creditimax[p]=-1;
                            }
    
        if(argc!=2) {
               printf("\n\nERRORE parametri");
               return 20;
                    }
        strcpy(nomefile, argv[1]);
    
    
        /*scrittura file*/
    
        fp=fopen(nomefile, "w");
        if(fp==NULL) {
                printf("\n\nERRORE all'interno del file");
                return 39;
                     }
        do {
            printf("\ninserisci materia:");
            scanf("%s", dati.materia);
            printf("\ninserisci nome prof:");
            scanf("%s", dati.nome_prof);
            printf("\ninserisci cognome prof:");
            scanf("%s", dati.cognome_prof);
            printf("\ninserisci semestre esame:");
            scanf("%d", &dati.periodo);
            while((dati.periodo<1)||(dati.periodo>4)) {
                    printf("\nERRORE digitazione. periodo non corretto");
                    printf("\ninserisci semestre esame:");
                    scanf("%d", &dati.periodo);
                            }
            printf("\ninserisci crediti:");
            scanf("%d", &dati.crediti);
            printf("\ninserisci percentuale superamento esame:");
            scanf("%d", &dati.promossi);
    
            fprintf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, dati.periodo, dati.crediti, dati.promossi);
            righe++;
            printf("\n\nVuoi immettere altro esame?");
            printf("\nse SI premi 1!    -   se NO premi 0!");
            scanf("%d", &continuascrivere);
            while((continuascrivere!=0)&&(continuascrivere!=1)) {
                       printf("\n\nERRORE digitazione.");
                       printf("\n\nVuoi immettere altro esame?");
                       printf("\nse SI premi 1!    -   se NO premi 0!");
                       scanf("%d", &continuascrivere);
    
                            }
    
    
           }
        while(continuascrivere!=0);
    
        fclose(fp);
        printf("\nscrittura file completata\n");
    
        /*utilizzo file*/
    
        fp=fopen(nomefile, "r");
        if(fp==NULL) {
                 printf("\n\nERRORE apertura file");
                 return 70;
                     }
        p=0;
        while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
    
                     creditimax[p]=dati.crediti;
                     strcpy(materiamax[p], dati.materia);
                     p++;
                    }
        max=0;
        for(p=1; p<80; p++) {
                    if(creditimax[p]>creditimax[p-1]) {
                                max=creditimax[p];
                                strcpy(matmax, materiamax[p]);
                                pos=p;
                                                      }
                            }
        printf("la materia con piu' crediti e' %s ---> %d\n", matmax, max);
        for(p=0; p<80; p++) {
                   if(p!=pos) {
                        if(creditimax[p]==max) {
                                       printf("la materia con piu' crediti e' %s ---> %d\n", materiamax[p], creditimax[p]);
                                               }
                                }
                            }
        fclose(fp);
    
    
        for(i=0; i<4; i++) {
                    promossimin[i]=101;
                           }
        for(i=0; i<periodimax; i++) {
            fp=fopen(nomefile, "r");
                 if(fp==NULL) {
                 printf("\n\nERRORE apertura file");
                 return 97;
                              }
    
                while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
    
                        if((dati.periodo==i+1)&&(dati.promossi<promossimin[i])) {
                                promossimin[i]=dati.promossi;
                                strcpy(materiadiff[i], dati.materia);
    
                                            }
                            }
                   fclose(fp);
    
                                    }
    
        for(i=0; i<periodimax; i++) {
                        if(promossimin[i]!=101) {
                                printf("\nmateria piu' difficile periodo %d: %s con %d percentuale promossi",
                                        i+1, materiadiff[i], promossimin[i]);
    
                                                }
                                    }
        /*
        printf("\n\nImmettere nome professore desiderato:");
        scanf("%s", nome);
        printf("\nimmettere cognome professore:");
        scanf("%s", cognome);
    
        fp=fopen(nomefile, "r");
        if(fp==NULL) {
                 printf("\n\nErrore file");
                 return 148;
                     }
        while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
    
                  if(strcmp(dati.nome_prof, nome)==0) {
                                     if(strcmp(dati.cognome_prof, cognome)==0) {
                                                               totcrediti=totcrediti+dati.crediti;
                                                               totpromossi=totpromossi+dati.promossi;
                                                               numtot++;
                                                                               }
                                                      }
    
                        }
        fclose(fp);
        media=(float)totpromossi/numtot;
        printf("\n\n        PROFESSORE RICHIESTO:  %s %s", nome, cognome);
        printf("\n\nTotale crediti delle sue materie: %d", totcrediti);
        printf("\n\nMedia superamento esami: %f percento\n\n", media);
    
            */
        return 0;
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,302

    Moderazione

    Originariamente inviato da ale392
    PROBLEMA programma funziona e poi non funziona!
    Per favore, usa titoli più significativi di questo, e in futuro indica anche il linguaggio.

    Qui ho corretto io, ma è già l'ennesimo richiamo per violazione del Regolamento, quindi fai più attenzione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    31
    scusa so che non era il titolo corretto ma l'ho messo cosi perchè non avevo la minima idea di come chiamarlo (a parte il linguaggio che so che ci va) e almeno sapevo che l'avreste cambiato subito voi mettendolo..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da ale392
    ... sapevo che l'avreste cambiato subito voi mettendolo..
    Il fatto che ci siano altri che lavorano correggendo gli errori non mi sembra un buon motivo per farli sapendo di farli ...

    In ogni caso, per il tuo problema, hai detto che commentando parte del codice, funziona la prima parte ... Ci mostri esattamente cosa commenti per fare funzionare il programma?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    31
    si l'avevo messo nel codice O.o..

    comunque è l'ultima parte quella che devo commentare per far ri-funzionare in modo corretto la prima parte.

    codice:
        /*
        printf("\n\nImmettere nome professore desiderato:");
        scanf("%s", nome);
        printf("\nimmettere cognome professore:");
        scanf("%s", cognome);
    
        fp=fopen(nomefile, "r");
        if(fp==NULL) {
                 printf("\n\nErrore file");
                 return 148;
                     }
        while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
    
                  if(strcmp(dati.nome_prof, nome)==0) {
                                     if(strcmp(dati.cognome_prof, cognome)==0) {
                                                               totcrediti=totcrediti+dati.crediti;
                                                               totpromossi=totpromossi+dati.promossi;
                                                               numtot++;
                                                                               }
                                                      }
    
                        }
        fclose(fp);
        media=(float)totpromossi/numtot;
        printf("\n\n        PROFESSORE RICHIESTO:  %s %s", nome, cognome);
        printf("\n\nTotale crediti delle sue materie: %d", totcrediti);
        printf("\n\nMedia superamento esami: %f percento\n\n", media);
    
            */

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    31
    nessuno sa qualcosa?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    31
    ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.