Buona sera a tutti. Ho letto il regolamento della sezione e non mi pare fosse contrario alla valutazione di un programma, in caso non avessi capito correttamente chiedo scusa in anticipo.

Ho fatto due programmi seguendo questi due testi (http://elite.polito.it/files/courses...0Turno%20A.pdf e http://areeweb.polito.it/didattica/f...0705_tCc2.docx)

Non sono riuscito a valutare da solo se funzionano perchè ho problemi a creare e aprire i file. Mi piacerebbe un vostro parere, se secondo voi sono corretti o ci sono errori. Ho l'esame la prossima settimana percui sto programmando come un pazzo, ma non vorrei fare errori e non accorgermene!

Grazie in anticipo!

codice:
#include <stdio.h>
#include <stdlib.h>
#define N 30

int main()
{
    FILE* fp;
    int mappa[N][N];
    char a_perdere;
    int i=0, j=0;
    int x1, x2, y1, y2;
    int max_altezza=0, min_altezza=0;
    int n_dati=0;
    int n_mare=0, n_terra=0, n_pianura=0, n_collina=0, n_montagna=0;
    float perc_mare, perc_pianura, perc_collina, perc_montagna;

    fp=fopen(mappa.dat, "r");
    if(fp==NULL)
    {
        printf("error1");
        return -1;
    }
    for(i=0; i<N; i++)
    {
        fscanf(fp,"%d", &mappa[i][0]);
        n_dati++;
        for(j=1; j<N; j++)
        {
            fscanf(fp, "%c%d", &a_perdere,&mappa[i][j]);
            n_dati++;
        }
    }
    if(n_dati!=(N*N))
    {
        printf("errore nel formato del file");
        return-4;
    }

    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            if(mappa[i][j]>3000||mappa[i][j]<3000)
            {
                printf("errore nel formato del file");
                return-3;
            }
        }
    }

    printf("Inserire le coordinate x1, y1, x2, y2 della porzione di mappa da esaminare\n");
    printf("x1 deve essere minore di x2 e y1 minore di y2");

    scanf("%d%d%d%d", &x1,&y1,&x2,&y2);
    if(x1>x2||y1>y2)
    {
        printf("error2");
        return -2;
    }

    min_altezza=mappa[x1][y1];
    for(i=x1; i<x2; i++)
    {
        for(j=y1; j<y2; j++)
        {
            if(mappa[i][j]>max_altezza)
                max_altezza=mappa[i][j];

            if(mappa[i][j]>0&&mappa[i][j]<min_altezza)
                min_altezza=mappa[i][j];

            if(mappa[i][j]==0)
                n_mare++;
            else n_terra++;
        }
    }
    perc_mare=(n_mare/(n_mare+n_terra))*100;

    for(i=x1; i<x2; i++)
    {
        for(j=y1; j<y2; j++)
        {
            if(mappa[i][j]>0&&mappa[i][j]<200)
                n_pianura++;
            else n_terra++;
        }
    }
    perc_pianura=(n_pianura/(n_pianura+n_terra))*100;

    for(i=x1; i<x2; i++)
    {
        for(j=y1; j<y2; j++)
        {
            if(mappa[i][j]>=200&&mappa[i][j]<=600)
                n_collina++;
            else n_terra++;
        }
    }
    perc_collina=(n_collina/(n_collina+n_terra))*100;

    for(i=x1; i<x2; i++)
    {
        for(j=y1; j<y2; j++)
        {
            if(mappa[i][j]>600)
                n_montagna++;
            else n_terra++;
        }
    }
    perc_montagna=(n_montagna/(n_montagna+n_terra))*100;
    printf("Altitudine massima: %d\nAltitudine minima: %d\nMare: %.2f%%\nPianura: %.2f%%\nCollina: %.2f%%\nMontagna:%.2f%%", max_altezza,min_altezza,perc_mare,perc_pianura,perc_collina,perc_montagna);

    return 0;
}
codice:
#include <stdio.h>
#include <stdlib.h>
#define filter "filter.txt"

int main(int argc, char*argv[])
{
    typedef struct cad
    {
        char nome[36];
        char cognome[36];
        char R[50];
    } a;

    typedef struct filt
    {
        int num_prova;
        char ris;
    } fil;

    FILE*fp;
    FILE*fp2;
    int k=0, i=0, j=0;
    a cadetto[k];
    char* a_perdere;
    int n_filtri=0;
    fil filtro[n_filtri];
    int risultato[k];
    int falliti[i];

    if(argc!=2)
    {
        printf("error1");
        return-1;
    }
    fp=fopen(argv[1], "r");
    if(fp==NULL)
    {
        printf("error2");
        return-2;
    }
    while(!feof(fp))
    {
        k++;
        fscanf(fp,"%s%s", &cadetto[k-1].nome,&cadetto[k-1].cognome);
        for(i=0; i<50; i++)
            fscanf(fp,"%c%c", &a_perdere,&cadetto[k-1].R[i]);
    }
    fp2=fopen(filter, "r");
    if(fp2==NULL)
    {
        printf("error3");
        return-3;
    }
    while(!feof(fp2))
    {
        n_filtri++;
        fscanf(fp2,"%d%c", filtro[n_filtri-1].num_prova, filtro[n_filtri-1].ris);

    }
    fclose(fp2);

    for(i=0; i<n_filtri; i++)
    {
        for(j=0; j<k; j++)
        {
            if(cadetto[j].R[filtro[i].num_prova]==filtro[i].ris);
            risultato[j]++;
        }
    }
    j=0;
    for(i=0; i<k; i++)
    {
        if(risultato[i]=0)
        {
            j++;
            falliti[j-1]=i;
        }
    }
    printf("I cadetti che non hanno superato nessun test sono %d\n", j);
    printf("essi sono:\n");
    for(k=0; k<j; k++)
        printf("cadetto %s %s\n",cadetto[falliti[k]].nome, cadetto[falliti[k]].cognome);

}