PDA

Visualizza la versione completa : [C++] Cerca i due numeri maggiori


mikalba
24-07-2008, 10:28
Salve a tutti! Sto cominciando da poco a studiare il c++ tramite il Deitel. Mi sono fermato all'esercizio in cui si richiede di trovare i due numeri maggiori data una serie di numeri (10) tramite ciclo while. Sono riuscito a risolvere l'esercizio senza inizializzare a 0 le variabili largest e largest2 (troppo facile l'esercizio, altrimenti :prrr:), in modo da supportare anche i numeri negativi. Può essere corretto il ragionamento usato nel seguente listato?

Numero.h



// Dichiarazione classe

class Numero
{
public:
void maxNum(void);
};



Numero.cpp



// Definizione classe

#include <iostream>
#include <iomanip>
#include "Numero.h"

using namespace std;

void Numero::maxNum(void)
{
int counter = 1;
double number;
double largest;
double largest2;

while(counter <= 10)
{
cout << "Inserisci numero: ";
cin >> number;

if(counter == 1)
{
largest = number; // il primo numero è sicuramente il più grande essendo unico
} else if(number > largest) { // se un numero è maggiore di largest, effettua uno "scalo"
largest2 = largest;
largest = number;
// al secondo turno, ci sono due numeri, uno maggiore e uno minore (che sarà largest2)
// assegno largest2 anche nel caso in cui number sia maggiore di largest 2 ma minore di
// largest
} else if((counter == 2 && number < largest) || (number > largest2 && number < largest)) {
largest2 = number;
}

counter++;
}

cout << "Numero maggiore: " << setprecision(2) << fixed << largest << endl;
cout << "Secondo numero maggiore: " << setprecision(2) << fixed << largest2 << endl;

return;
}



main.cpp



/* TROVA I DUE NUMERI MAGGIORI TRA GLI IMPUT INSERITI */

#include <iostream>
#include <cstdlib>
#include "Numero.h"

using namespace std;

int main()
{
Numero x;
x.maxNum();

system("PAUSE");
return 0;
}



(Nota: il programma funziona, almeno per quanto io abbia provato. Voglio sapere solo se il ragionamento da me usato è corretto).

Grazie a tutti e :ciauz:

MItaly
24-07-2008, 13:00
Il ragionamento e l'algoritmo utilizzato mi pare corretto, ma non vedo la necessità di creare una classe: non ti basta creare la semplice funzione maxNum()?

mikalba
24-07-2008, 13:13
Originariamente inviato da MItaly
Il ragionamento e l'algoritmo utilizzato mi pare corretto, ma non vedo la necessità di creare una classe: non ti basta creare la semplice funzione maxNum()?

Sì, hai ragione, per l'esempio basta e avanza. :D Grazie mille per la risposta e :ciauz:

MItaly
24-07-2008, 13:17
Originariamente inviato da mikalba
Sì, hai ragione, per l'esempio basta e avanza. :D
E anche non per l'esempio :) . Personalmente sono dell'idea che le classi vadano usate ogni volta e solo quando servono, per questo linguaggi tipo Java o C# mi fanno venire il nervoso: perché devo creare una classe quando mi serve solo una funzione helper?

Grazie mille per la risposta e :ciauz:
Prego; ciao! :ciauz:

MacApp
24-07-2008, 14:35
Originariamente inviato da MItaly
perché devo creare una classe quando mi serve solo una funzione helper?

Il tuo è un ragionamento molto "pericoloso"... generalizzando potrebbe essere:



template <typename XXX, typename YYY>
perché devo creare XXX quando mi serve solo YYY?


d'incanto scomparirebbero le classi, le strutture, le funzioni ecc..
;-)

MItaly
24-07-2008, 16:02
Dai, hai capito benissimo cosa intendo... :) sono un grande fan della STL e della programmazione object-oriented (soprattutto da quando ho trasformato un mio progetto non piccolissimo da C procedurale a C++ con ampio uso di classi e template STL e ho visto come sia più elegante e semplice da gestire), ma se devo scrivere delle funzioni helper utili per tutto il progetto non mi serve una classe, al massimo un namespace per raggrupparle. L'idea di scrivere una classe per raggrupparle mi infastidisce molto: una classe che le contenga come membri d'istanza sarebbe solo fastidiosa (perché istanziare un oggetto che di fatto non contiene dati?), mentre una classe statica è una contraddizione in termini: voglio dire, le classi vogliono generare oggetti!

Loading