Matrice Territorio 

Run Settings
LanguageC
Language Version
Run Command
/* Sia dato il file mappa.dat che contiene una mappa di dimensione N x N. La mappa descrive l’altitudine in metri di un territorio. I valori possibili variano da 0 a 3000. N è una costante nota a priori e definita attraverso una direttiva define. Ogni riga del file descrive una riga della mappa, ovvero N interi separati da uno spazio: <h 1,1> <h 1,2> <h 1,3> … <h 1,N> <h 2,1> <h 2,2> <h 2,3> … <h 2,N> … <h N,1> <h N,2> <h N,3> … <h N,N> Scrivere un programma in C per esaminare porzioni della mappa. Il programma riceve 4 interi sulla linea di comando che rappresentano gli estremi di un rettangolo all’interno della mappa <x1> <y1> <x2> <y2> dove (<x1>, <y1>) sono le coordinate dell’angolo in alto a sinistra del rettangolo mentre (<x2>, <y2>) sono le coordinate dell’angolo in basso a destra. La casella (0, 0) è in alto a sinistra, quindi x1 <= x2 e y1 <= y2. Il programma deve fornire in uscita le seguenti informazioni • Altitudine massima all’interno del territorio in esame • Altitudine minima (maggiore di 0) all’interno del territorio in esame • Percentuale di mare all’interno del territorio in esame (altezza == 0) • Percentuale di pianura all’interno del territorio in esame (0 < altezza < 200) • Percentuale di collina all’interno del territorio in esame (200 <= altezza <=600) • Percentuale di montagna all’interno del territorio in esame (altezza > 600) Tutte le percentuali vanno fornite con esattamente due cifre dopo la virgola. In caso di errore nel formato del file (interi non compresi tra 0 e 3000, o un numero insufficiente di dati nel file) il programma deve produrre il messaggio “Errore nel formato del file” ed interrompere l’esecuzione. Ad esempio (N pari a 4), se il file contiene la seguente matrice: 210 630 22 102 240 500 35 923 0 611 152 883 14 57 64 613 Se il programma viene chiamato con parametri 0 0 1 2 deve restituire: Altitudine massima: 630 Altitudine minima: 210 Mare: 16.67% Pianura: 0.00% Collina: 50.00% Montagna: 33.33% //FILE FOUND ON CODEBLOCKS //arguments and file */ #include <stdio.h> #include <stdlib.h> #define N 4 int main(int argc, char*argv[]) { char s[2]={'%'}; int elementi; int flag,flag1,flag2,flag3; int max=0,min=0; int maxriga=0,minriga=0; int x1,y1,x2,y2; int i,j; int differenzarighe=0,differenzacolonne=0; int m[N][N]; if(argc!=5){ printf("Errore in ingresso parametri\n"); return -1; } FILE *f1; f1=fopen("mappa.txt","r"); if(f1==NULL){ printf("Errore in apertura del file\n"); return -2; } for(i=0;i<N;i++) for(j=0;j<N;j++) fscanf(f1,"%d",&m[i][j]); /* for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%d\t",m[i][j]); } printf("\n"); } */ fclose(f1); x1=atoi(argv[1]); y1=atoi(argv[2]); x2=atoi(argv[3]); y2=atoi(argv[4]); differenzarighe=x2-x1+1; differenzacolonne=y2-y1+1; int mpiccola[differenzarighe][differenzacolonne]; i=0; j=0; for(i=y1;i<=y2;i++) for(j=x1;j<=x2;j++) mpiccola[i][j]=m[i][j]; /* for(i=y1;i<=y2;i++){ for(j=x1;j<=x2;j++){ printf("%d\t",mpiccola[i][j]); } printf("\n"); } */ i=0; j=0; flag=0; flag1=0; flag2=0; flag3=0; for(i=y1;i<=y2;i++){ for(j=x1;j<=x2;j++){ if(mpiccola[i][j]>maxriga) maxriga=mpiccola[i][j]; if(mpiccola[i][j]<minriga) minriga=mpiccola[i][j]; if(mpiccola[i][j]==0) flag++; if(mpiccola[i][j]>0 && mpiccola[i][j]<200) flag1++; if(mpiccola[i][j]>=200 && mpiccola[i][j]<=600) flag2++; if(mpiccola[i][j]>600) flag3++; } if(maxriga>max) max=maxriga; if(minriga>min) min=minriga; } elementi= differenzacolonne*differenzarighe; printf("Altitudine massima:%d\n",max); printf("Altitudine minima:%d\n",min); printf("Mare:%.2f %s\n",(float)flag*100/elementi,s); printf("Pianura:%.2f %s\n",(float)flag1*100/elementi,s); printf("Collina:%.2f %s\n",(float)flag2*100/elementi,s); printf("Montagna:%.2f %s\n",(float)flag3*100/elementi,s); return 0; } //Antonino Trapani
Editor Settings
Theme
Key bindings
Full width
Lines