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