PDA

View Full Version : [C++/Identificazione due numeri interi maggiori] Il programma non li identifica


unslee
28-06-2008, 11:42
Ciao a tutti,
sono sempre alle prese con la mia bibbia di c++ con gli esercizi senza soluzione :confused:

L'esercizio richiesto è apparentemente semplice: digita dieci interi ed evidenzia i due interi maggiori digitati. I valori 1 e 2 non si possono in nessun caso digitare.

Per ore e ore ho riguardato il codice :muro: , ma il programma non fa quello che deve fare (come compilatore uso Visual C++ 2008 Express Edition).

Ringrazio anticipatamente chi riuscirà a darmi una mano!!!!

Codice:
[
// Esercizio 419.cpp : definisce il punto di ingresso dell'applicazione console.

#include "stdafx.h"

#include<iostream>
using std::cin;
using std::cout;
using std::endl;


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

int main()
{
int counter = 1;
int number = 0;
int largest1 = 0;
int largest2 = 0;

cout << "inserisci un numero intero: " ;
cin >> number;

while ( counter <= 10)
{

if ( number == 1)
{
while (number == 1)
{
{cout << "Inserisci un valore valido: ";
cin >> number;}
while (number == 2)
{cout << "Inserisci un valore valido: ";
cin >> number;}
}
}
if ( number == 2)
{
while (number == 2)
{
{cout << "Inserisci un valore valido: ";
cin >> number;}
while (number == 1)
{cout << "Inserisci un valore valido: ";
cin >> number;}
}
}

if (number > largest1)
{
largest2 = largest1;
largest1 = number;
}
else
if (number > largest2)
{
largest2 = number;
}
else
{counter += 1;

cout << "inserisci un numero intero: " ;
cin >> number;}
}

cout << "I due numeri interi maggiori inseriti sono: " << largest1 << " e " << largest2 << endl;

return 0;
}
]

variabilepippo
28-06-2008, 12:21
L'hai fatta troppo complicata! :)

Scrivo direttamente qui (modificando il tuo codice) senza testare:


#include<iostream>

using namespace std;

int main(void)
{
int counter = 1;
int number = 0;
int largest1 = 0;
int largest2 = 0;

while ( counter <= 10)
{
// Continua a chiedere i numeri se <= 2
do {
cout << "Inserisci il " << counter << "o numero (diverso da 1 e 2): ";
cin >> number;
} while (number <= 2); // Se non ti piace puoi cambiare questa condizione

counter++;

// E' importante il >= altrimenti rischi di avere 2 numeri uguali in output
if (number >= largest1)
largest1 = number;
else
if (number > largest2)
largest2 = number;
}

cout << "I due numeri interi maggiori inseriti sono: " << largest1 << " e " << largest2 << endl;

return 0;
}

unslee
28-06-2008, 12:39
Purtroppo non ci sono ancora. Nel manuale il do non l'ho studiato ancora ecco perché per evitare 1 e 2 ho inserito dei sottocicli di while (che in output funzionano perfettamente). La mia perplessità sta nella logica matematica che governa questo costrutto:

Codice:
[
if (number > largest1)
{
largest1 = largest2;
largest1 = number;
}
else
if (number > largest2)
{
largest2 = number;
}
]

In questa maniera dovrei potermi portare avanti le variabili con i valori maggiori man mano inseriti. Se provo ad inserire >= l'inserimento dei valori si blocca.

Non riesco a trovare il problema. Effettivamente in output mi da valori uguali.

Grazie a tutti anticipatamente per l'aiuto che vorrete darmi.

unslee
28-06-2008, 12:53
Problema risolto!

Il problema era nel costrutto if...else nidificato. Infatti avevo sbagliato ad inserire l'ultima condizione else seguita dall'aumento del contatore e dalle altre istruzioni.

Tolto l'else il programma gira correttamente.

Di seguito il codice corretto:

Codice:
[
// Esercizio 419.cpp : definisce il punto di ingresso dell'applicazione console.

#include "stdafx.h"

#include<iostream>
using std::cin;
using std::cout;
using std::endl;


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

int main()
{
int counter = 1;
int number = 0;
int largest1 = 0;
int largest2 = 0;

cout << "inserisci un numero intero: " ;
cin >> number;

while ( counter <= 10)
{

if ( number == 1)
{
while (number == 1)
{
{cout << "Inserisci un valore valido: ";
cin >> number;}
while (number == 2)
{cout << "Inserisci un valore valido: ";
cin >> number;}
}
}
if ( number == 2)
{
while (number == 2)
{
{cout << "Inserisci un valore valido: ";
cin >> number;}
while (number == 1)
{cout << "Inserisci un valore valido: ";
cin >> number;}
}
}

if (number > largest1)
{
largest2 = largest1;
largest1 = number;
}
else
if (number > largest2)
{
largest2 = number;
}

counter += 1;

cout << "inserisci un numero intero: " ;
cin >> number;
}

cout << "I due numeri interi maggiori inseriti sono: " << largest1 << " e " << largest2 << endl;

return 0;
}
]