//XXX corretto a parte la scelta dei tipi di dato // autore: <GALLINARI> <DANIELE>, <110604>,<DIS13> // <18/06/2003> - esame di Fondamenti di Informatica, corso di laurea in Ingegneria elettronica #include <iostream.h> #include <fstream.h> #include <stdlib.h> ifstream fin ("percorso.txt"); main () { int dist1; int dist; int h1; int h; int disldist=0; // distanza tra due punti di cui misuro il dislivello float dislh=0; // dislivello int salita=0; // viene incrementata del valore del dislivello (se dislivello positivo) int discesa=0; // viene incrementata del valore del dislivello (se dislivello negativo) float pendsalita=0; // pendenza del tratto considerato in salita float penddiscesa=0; // pendenza del tratto considerato in discesa float pendsalitamax=0; // viene aggornata ogni volta che ho un tratto con pendenza in salita maggiore float penddiscesamax=0;// viene aggornata ogni volta che ho un tratto con pendenza in discesa maggiore int hmin=0; // valore dell'altezza minore nel tratto di max pendenza in salita int hmax=0; // valore dell'altezza minore nel tratto di max pendenza in salita int distmin=0; // valore del punto di arrivo nel tratto a max pendenza in salita int distmax=0; // valore del punto di partenza nel tratto a max pendenza in salita int dist1min=0; // valore del punto di arrivo nel tratto a max pendenza in salita int dist1max=0; // valore del punto di partenza nel tratto a max pendenza in discesa int h1min=0; // valore dell'altezza maggiore nel tratto di max pendenza in discesa int h1max=0; // valore dell'altezza minore nel tratto di max pendenza in discesa if (!fin) { cerr << "Errore: file percorso.txt non puo venire aperto\n"; exit (1); } fin >> dist1; fin >> h1; while (fin>>dist>>h) { disldist = dist-dist1; dislh = h-h1; //XXX si poteva anche evitare di utilizzare un float per dislh dislh+=0.0; //XXX inutile if (dislh>=0) {salita += dislh; pendsalita = (dislh/disldist); if(pendsalita>=pendsalitamax) { pendsalitamax=pendsalita; distmax=dist1; distmin=dist; hmin=h1; hmax=h;}} if (dislh<0) {discesa += dislh; penddiscesa = (dislh/disldist); if(penddiscesa<=penddiscesamax) { penddiscesamax=penddiscesa; dist1max=dist1; dist1min=dist; h1min=h1; h1max=h; }} dist1 = dist; h1 = h; } cout << "dislivello in salita: " << salita << " metri" << endl; cout << "dislivello in discesa: " << -(discesa) << " metri" << endl; cout << "maggior pendenza in salita tra " << distmax << " (" << hmin <<") e " << distmin <<" (" << hmax << ") metri " <<endl; cout << "maggior pendenza in discesa tra "<< dist1max <<" (" << h1min <<") e " << dist1min <<" (" << h1max << ") metri " <<endl; }