Ciao a tutti, nonostante abbia postato poco, seguo spesso questo forum e quindi mi sento in dovere di ringraziarvi per i numerosi aiuti che, anche inconsapevolmente mi avete dato
detto ciò... domani devo andare a sostenere l'esame di informatica e avrei un esercizio che non riesco a completare, da sottoporvi...
mi rendo conto che forse è un pò tardi, ma speravo di riuscire a non scocciarvi
di seguito copio il testo dell'esercizio e i sottoprogrammi che ho scritto:
Scrivere un programma C++ che legge dal file "dati.txt" (da console per chi non fosse in grado di gestire I/O su file) 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:
1. calcolare e stampare a video la somma dei perimetri dei rettangoli dell'insieme
2. 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])
e i sottoprogrammi:
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 calcolaArea(int v1x, int v1y, int v2x, int v2y) {
int area;
area = abs((v2x - v1x) * (v2y - v1y));
return area;
}
int calcolaPerimetro(int rettangoli[N][4], int i) {
int perimetro;
perimetro = abs(((rettangoli[i][2]) - rettangoli[i][0]* 2) + ((rettangoli[i][3] - rettangoli[i][1]) * 2));
return perimetro;
}
int calcolaPerimetroTotale(int rettangoli[N][4]) {
int perimetroTotale;
for (i<0; i=N; i++) {
perimetroTotale += abs(((rettangoli[i][2]) - rettangoli[i][0]* 2) + ((rettangoli[i][3] - rettangoli[i][1]) * 2));
}
return perimetroTotale;
}
bool stessaArea(int rettangoli[N][4], int i, int j) {
bool stessaArea;
int x1i, y1i, x2i y2i, x1j, y1j, x2j y2j;
x1i = rettangoli[i][0];
y1i = rettangoli[i][1];
x2i = rettangoli[i][2];
y2i = rettangoli[i][3];
x1j = rettangoli[j][0];
y1j = rettangoli[j][1];
x2j = rettangoli[j][2];
y2j = rettangoli[j][3];
if (calcolaArea(x1i, y1i, x2i, y2i) == calcolaArea(x1j, y1j, x2j, y2j)) {
stessaArea=true;
}
return stessaArea;
}
ora...
ammesso che tutti i sottoprogrammi siano corretti, ho qualche dubbio su
calcolaPerimetroTotale e
stessaArea, spero che qualcuno di voi mi aiuti a capire il funzionamento del programma principale, principalmente la parte in cui devo uguagliare le aree (la prima con l'ultima, la seconda con la penultima, ecc), eventualmente anche con l'aiuto dei codici che scrivereste.
grazie ancora!