Scrivere un programma C++ i dati relativi ad un insieme di 100 rettangoli con i lati paralleli agli assi cartesiani. Ogni rettangolo e' rappresentato da due coppie di interi, che rappresentano le coordinate cartesiane dei vertici in basso a sinistra e in alto a destra. I dati relativi all'insieme dei rettangoli devono essere memorizzati in un opportuno array bidimensionale 100x4.
Il programma deve:
calcolare e stampare a video la somma dei perimetri dei rettangoli dell'insieme
verificare che l'area del primo rettangonolo sia uguale all'area dell'ultimo rettangolo, l'area del secondo rettangolo sia uguale all'area del penultimo rettangolo, e cosi' via. Se la condizione e' verificata per tutti i rettangoli, il programma deve stampare a video il messaggio "Condizione verificata per tutti i rettangoli"; altrimenti, il programma deve stampare il numero di rettangoli per i quali la condizione non e' verificata (se ad esempio la condizione non e' verificata perche' solo il primo e l'ultimo rettangolo hanno area diversa, il programma deve stampare "2 rettangoli non soddisfano la condizione").
Per una buona organizzazione del codice devono essere definiti e utilizzati i seguenti sottoprogrammi (dove N e' una opportuna costante simbolica):
int calcolaArea(int v1x, int v1y, int v2x, int v2y) ritorna il valore dell'area del rettangolo le cui coordinate dei vertici sono passate come parametro
int calcolaPerimetro(int rettangoli[N][4], int i) ritorna il valore del perimetro dell'i-esimo rettangolo tra quelli memorizzati nell'array bidimensionale passato come parametro
int calcolaPerimetroTotale(int rettangoli[N][4]) ritorna il valore della somma di tutti i perimetri dei rettangolo memorizzati nell'array bidimensionale passato come parametro
bool stessaArea(int rettangoli[N][4], int i, int j) ritorna true se l'area del rettangolo i e' uguale a quella del rettangolo j nell'array bidimensionale passato come parametro
void leggiRettangoli(int rettangoli[N][4])
void stampaRettangoli(int rettangoli[N][4])
questo è il testo dell esercizio.. il mio problema è che non riesco a capire come far funzionare il sottoprogramma stessaArea ; metto a confronto le aree ma non funziona ne il contatore e ne la condizione
#include <iostream>
using namespace std;
const int N=4;
void leggiRettangoli(int rettangoli[N][4]) {
int i;
for(i=0;i<N;i++) {
cout << "------------------------------------------";
cout << "rettangolo" << i << endl;
cout << "inserire le coordinate x e y del primo vertice: ";
cin>> rettangoli [i][0];
cin>> rettangoli [i][1];
cout << "inserire le coordinate x e y del secondo vertice: ";
cin>> rettangoli [i][2];
cin>> rettangoli [i][3];
}
return;
}
void stampaRettangoli( int rettangoli[N][4]) {
int i;
for(i=0;i<N;i++) {
cout << "-------------------------------------------";
cout << " rettangolo " << i << " vertici: " << endl;
cout << "\t(" << rettangoli[i][0] << ",\t" << rettangoli[i][1] << ")";
cout << "\t(" << rettangoli[i][2] << ",\t" << rettangoli[i][3] << ")";
cout << endl;
}
return;
}
int calcolaPerimetro (int rettangoli[N][4] , int i) {
int perimetro=0;
int base[N], altezza[N];
int j;
for(j=0;j<N;j++) {
base[j] = rettangoli[i][2] - rettangoli[i][0];
altezza[j] = rettangoli[i][3] - rettangoli[i][1];
perimetro =(base[j]+ altezza[j]+base[j]+altezza[j]);
}
return perimetro;
}
void stampavettorePerimetri( int vperimetri[N]) {
int i;
for(i=0;i<N;i++) {
cout << vperimetri[i] << "\t" ;
}
return;
}
int calcolaPerimetroTotale ( int rettangoli [N][4]) {
int perimetroTot=0;
int i;
int base [N] , altezza[N];
for(i=0;i<N;i++){
base[i] = rettangoli[i][2] - rettangoli[i][0];
altezza[i] = rettangoli[i][3] - rettangoli[i][1];
perimetroTot+=(base[i]+altezza[i]+base[i]+altezza[i]);
}
return perimetroTot;
}
int calcolaArea (int v1x, int v1y, int v2x, int v2y) {
int base, altezza;
int area;
base= v2x-v1x;
altezza=v2y-v1y;
area= base*altezza;
return area;
}
void stampaArea (int varea[N]) {
int i;
cout << " valori area " << endl;
for(i=0;i<N;i++) {
cout << varea[i] << "\t";
}
return;
}
bool stessaArea( int rettangoli[N][4], int i, int j) {
j=N-1-i;
bool uguale= true;
int varea[N];
int conta=0;
for(i=0;i<N;i++) {
if(varea[i]!=varea[j]) {
uguale=false;
conta++;
}
}
return uguale;
}
int main () {
int rettangoli[N][4];
int i, j;
int vperimetri[N];
int v1x, v2x, v1y, v2y;
int varea[N];
int conta =0;
leggiRettangoli(rettangoli);
stampaRettangoli(rettangoli);
for(i=0;i<N;i++) {
vperimetri[i] = calcolaPerimetro(rettangoli , i);
}
cout<< endl;
cout << " valori perimetri" << endl;
stampavettorePerimetri(vperimetri);
cout << endl;
cout<< " il perimetro totale : " << calcolaPerimetroTotale(rettangoli) << endl;
for(i=0;i<N;i++) {
v1x= rettangoli[i][0];
v2x= rettangoli[i][2];
v1y= rettangoli[i][1];
v2y= rettangoli[i][3];
varea[i]=calcolaArea(v1x, v1y, v2x, v2y);
}
stampaArea(varea);
if(stessaArea(rettangoli[N][4], i, j)== true) {
cout << " condizione soddisfatta " << endl;
}else {
cout << conta << " rettangoli non soddisfano la condizione " << endl;
}
system("pause");
}