[Risolto]Un problema sulle condizioni degli "if" (C++)

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Emrom
Prode Principiante
Messaggi: 18
Iscrizione: giovedì 1 novembre 2018, 15:19
Desktop: UBUNTU
Distribuzione: Ubuntu 18.04.1 LTS x86_64
Sesso: Maschile

[Risolto]Un problema sulle condizioni degli "if" (C++)

Messaggio da Emrom »

Salve a tutti, sto appena imparando a programmare in c++ e facendo uno dei primi esercizi sul Deitel&Deitel mi è successa una cosa strana. Lo scopo del programma è introdurre tre interi e dire qual è il maggiore e quale il minore, PERO' utilizzando solo l' if semplice, senza altri costrutti. La stranezza è che con alcuni numeri (ad esempio 1, 2, 3, in qualsiasi ordine) il programma funziona, con altri (ad esempio 11, 12, 13) invece no.
Questo è il codice:

Codice: Seleziona tutto

#include <iostream>
using namespace std;

int main ()
{
  int a,b,c;
  cout << "immetti tre numeri interi: \n";
  cin >> a>>b>>c;

  if (a>=b>=c)
     cout << "il maggiore è:"<<a<<endl<<"il minore è:"<<c<<endl;
  if (a>=c>=b)
     cout << "il maggiore è:"<<a<<endl<<"il minore è:"<<b<<endl;
  if (b>=a>=c)
     cout << "il maggiore è:"<<b<<endl<<"il minore è:"<<c<<endl;
  if (b>=c>=a)
     cout << "il maggiore è:"<<b<<endl<<"il minore è:"<<a<<endl;
  if (c>=a>=b)
     cout << "il maggiore è:"<<c<<endl<<"il minore è:"<<b<<endl;
  if (c>=b>=a)
     cout << "il maggiore è:"<<c<<endl<<"il minore è:"<<a<<endl;

return 0;
}
Ultima modifica di Emrom il martedì 6 novembre 2018, 21:52, modificato 2 volte in totale.
Dahman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1013
Iscrizione: mercoledì 31 ottobre 2007, 8:29
Località: Torino

Re: Arcano su un programmino stupido

Messaggio da Dahman »

Non devi concatenare i confronti in quel modo

Supponiamo che i numeri a, b e c siano 30, 20 e 10
facendo in questo modo
if (a>=b>=c)
tu ti aspetti che il risultato sia true cioè che a è il maggiore e c è il minore

in realtà ecco cosa succede,
il programma fa il primo confronto

Codice: Seleziona tutto

(if (a>=b)
cioè 30 >= 20?
il risultato, ovviamente, è true (cioè 1)

dopo fa il secondo confronto
ma non fa

Codice: Seleziona tutto

if (b>=c)
ma bensì

Codice: Seleziona tutto

if (true>=c)
cioè

Codice: Seleziona tutto

if (1>=10)
perché sostituisce il primo confronto con il relativo risultato
come puoi intuire il risultato è false.

Per avere sempre il risultato che ti aspetti, devi dividere i confronti

Codice: Seleziona tutto

if  (a>=b && b>=c)
Spero che sia chiaro.

ciao
dahman
Emrom
Prode Principiante
Messaggi: 18
Iscrizione: giovedì 1 novembre 2018, 15:19
Desktop: UBUNTU
Distribuzione: Ubuntu 18.04.1 LTS x86_64
Sesso: Maschile

Re: Arcano su un programmino stupido

Messaggio da Emrom »

Grazie, molto chiaro! Correggo subito. Tra l'altro questo spiega anche perché il programma funziona con 3, 2, 1: all'ultimo passaggio viene 1>=1, che è true!
In effetti avevo pensato anch'io di fare in quel modo, ma il problema è che il libro gli operatori logici ancora non li ha spiegati in quel punto, pensavo di doverne fare a meno. Comunque non intendo sviscerare oltre la questione: correggo e vado avanti.

Grazie di nuovo! Ciao!
Avatar utente
tokijin
Moderatore Globale
Moderatore Globale
Messaggi: 4610
Iscrizione: mercoledì 3 giugno 2009, 23:10
Desktop: plasma 5.27.4
Distribuzione: Kubuntu 23.04
Località: Abruzzo

Re: Arcano su un programmino stupido

Messaggio da tokijin »

@Emrom
modifica il titolo del primo messaggio, mettendone uno meno generico che spieghi meglio la situazione; se poi hai risolto il problema (sinceramente non l'ho capito), nel titolo aggiungi anche il prefisso [Risolto].

Ciao :ciao:
Sei abbruzzese se dopo che ti sei strafogato un chilogrammo di pasta, hai il coraggio di dire alla cuoca "cacc ch'è cott" - Se entra un piccione in casa..chiudi le finestre!
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
Emrom
Prode Principiante
Messaggi: 18
Iscrizione: giovedì 1 novembre 2018, 15:19
Desktop: UBUNTU
Distribuzione: Ubuntu 18.04.1 LTS x86_64
Sesso: Maschile

Re: Arcano su un programmino stupido

Messaggio da Emrom »

@tokijin, ok
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti