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;
}