/*
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