DOMANDA Mimimo e massimo tra tre numeri in c++

Stato
Discussione chiusa ad ulteriori risposte.

MPG

Utente Attivo
544
4
Avete un listato in c++ piu' semplice di questo per arrivare a dire qual'è il minimo e il massimo tra 3 valori?:
C++:
#include <iostream>

using namespace std;

int main()
{
int N1, N2, N3, min,max;

cout << "Inserire il primo numero: ";
cin >> N1;

cout << "Inserire il secondo numero: ";
cin >> N2;

cout << "Inserire il terzo numero: ";
cin >> N3;


if (N1 < N2)
{
if (N1 < N3)
min=N1;
else
min=N3;

if(N2>N3)
max=N2;
else
max=N3;
}
else
{
if(N2<N3)
min=N2;
else
min=N3;

if(N1>N3)
max=N1;
else
max=N3;
}
cout<<"minimo: "<<min<<endl;
cout<<"massimo: "<<max;
}
 
Ultima modifica da un moderatore:

DevPre

Utente Attivo
356
43
CPU
Ryzen 2600
Scheda Madre
B450
RAM
2x4GB DDR4 3200Mhz
GPU
2x RX 480 8gb (KVM gpu passthrough, no crossfire)
Monitor
2x IPS 1080p@60Hz
PSU
Corsair CX650M
Case
NZXT s340
Periferiche
Dualshock 3
Net
FTTC 100/20
OS
Arch Linux + Win10 (Qemu/KVM with vfio gpu passthrough)
Codice:
#include <iostream>

using namespace std;

int main(){
    int temp, minimo, massimo;
    for(int i=0; i<3; i++){
        cout << "Inserisci un numero: ";
        cin >> temp;
        if(i==0){
            //Inizializzo minimo e massimo col primo valore inserito dall'utente
            minimo = temp;
            massimo = temp;
        }else{
            //Confronto i successivi con il minimo e col massimo
            if(temp<minimo){
                minimo = temp;
            }
            if(temp>massimo){
                massimo = temp;
            }
        }
    }
    cout << "Il minimo e': " << minimo << endl;
    cout << "Il massimo e': " << massimo << endl;
}

Potresti fare cosi. E' scalabile, basta cambiare il numero di volte che cicla (volendo puoi pure far inserire all'utente il numero di volte per cui ciclare).
 
Ultima modifica:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Avete un listato in c++ piu' semplice di questo per arrivare a dire qual'è il minimo e il massimo tra 3 valori?:

#include <iostream>



using namespace std;

int main()
{
int N1, N2, N3, min,max;

cout << "Inserire il primo numero: ";
cin >> N1;

cout << "Inserire il secondo numero: ";
cin >> N2;

cout << "Inserire il terzo numero: ";
cin >> N3;


if (N1 < N2)
{
if (N1 < N3)
min=N1;
else
min=N3;

if(N2>N3)
max=N2;
else
max=N3;
}
else
{
if(N2<N3)
min=N2;
else
min=N3;

if(N1>N3)
max=N1;
else
max=N3;


}
cout<<"minimo: "<<min<<endl;
cout<<"massimo: "<<max;
}
????? Scusa, ma non bastano due confronti???

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

Innominato00

Nuovo Utente
12
5
28b036bc2392d96f4db94bfcdaca9c60.jpg

Sei sei ancora alle basi, eccoti un'ottima soluzione.
 
Ultima modifica da un moderatore:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Dai, tre:

Metti in max e min i due tra a e b (1 confronto). poi confronti c con Max e min per vedere se più alto dell'uno o più basso dell'altro (altri 2 confronti, ma il secondo lo puoi evitare se vero il primo)

Sei sei ancora alle basi, eccoti un'ottima soluzione.
Nn puoi dare listati con soluzioni

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Ultima modifica da un moderatore:
  • Mi piace
Reazioni: MPG

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Scusami ma dovrei stampare a video solo il minimo e il massimo..... cosi' vengono solo ordinati....
If a>b max=a min=b else max=b min=a

If c>max max=c else if c<min min=c


Inviato dal mio Nexus 5 utilizzando Tapatalk
 

MPG

Utente Attivo
544
4
Ho messo questo mi da un errore (mi dice manca un if prima del primo else..) e poi un ho dubbio per la disposizionedelle parentesi graffe..
Codice:
if (N1 > N2)
        max=N1;
        min=N2;

    else
        max=N2;
        min=N1;

    if(N3>max)
    max=N3;
    else
        if
    N3<min;
      min=N3
 
Ultima modifica da un moderatore:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Ho messo questo mi da un errore (mi dice manca un if prima del primo else..) e poi un ho dubbio per la disposizionedelle parentesi graffe..
Ti ho scritto i confronti da fare, almeno la sintassi cerca di impararla da solo!!!

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Ultima modifica da un moderatore:

BAT

Moderatore
Staff Forum
Utente Èlite
22,655
11,440
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Effettivamente non dovremmo dare soluzioni ma qui sto leggendo cose strane;
in C++ esiste la libreria climits che contiene i valori minimi e massimi per i tipi usati; supponendo di usare gli int, non ha senso prima leggere e poi assegnare, si fa una preassegnazione in modo "furbo": al minimo si assegna direttamente il massimo int possibile, invece al massimo si associa il minimo int possibile (in questo modo è sicuro al 100% che verranno cambiati alla prima lettura;
dopodiché si fa un ciclo in base a quanti interi si vogliono inserire (3 nella versione "grezza", n in generale), quindi bastano 3, massimo 4 variabili (pure di meno, ma ricerchiamo la chiarezza).
E i test da fare sono solo 2 (per ogni numero letto ovviamente), come ha già evidenziato @rctimelines
Da notare che listati che ho postato SEMBRANO più lunghi SOLO PERCHE' ho messo diverse istruzioni di stampa e lettura per "frenare" la console di comando e dare il tempo di lèggere i risultati prima che si chiuda.

Versione brutta solo per 3 numeri:
Codice:
#include <iostream>
#include <climits> // limiti per costanti numeriche
using namespace std;

int main() {
    int min=INT_MAX, max=INT_MIN, temp; // ...in modo che min/max saranno cambiati
    for(int i=1; i<4; i++){
        cout << "\nInserisci il numero " << i << " --> ";
        cin >> temp;
        if(temp<min) min = temp;
        else if(temp>max) max = temp;
    }
    cout << "\n\nMinimo = " << min;
    cout << "\nMassimo = " << max << endl;
    cout << "\n\Inserisci un numero e poi premi INVIO per terminare --> "; // solo per leggere l'output
    cin >> temp;
    return 0;
}

Vesrsione per n numeri (n dato in input dall'utente):
Codice:
#include <iostream>
#include <climits> // limiti per costanti numeriche
using namespace std;

int main() {
    int min=INT_MAX, max=INT_MIN, temp; // ...in modo che min/max saranno cambiati
    unsigned int n = 1; // quanti numeri
    cout << "\nQuanti numeri vuoi inserire?  --> ";
    cin >> n; // supposto >0
    for(unsigned int i=1; i<=n; i++){
        cout << "\nInserisci il numero " << i << " --> ";
        cin >> temp;
        if(temp<min) min = temp;
        else if(temp>max) max = temp;
    }
    cout << "\n\nMinimo = " << min;
    cout << "\nMassimo = " << max << endl;
    cout << "\n\Inserisci un numero e poi premi INVIO per terminare --> "; // solo per leggere l'output
    cin >> n;
    return 0;
}
 
Ultima modifica:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Effettivamente non dovremmo dare soluzioni ma qui sto leggendo cose strane;
in C++ esiste la libreria climits che contiene i valori minimi e massimi per i tipi usati; supponendo di usare gli int, non ha senso prima leggere e poi assegnare, si fa una preassegnazione in modo "furbo": al minimo si assegna direttamente il massimo int possibile, invece al massimo si associa il minimo int possibile (in questo modo è sicuro al 100% che verranno cambiati alla prima lettura;
dopodiché si fa un ciclo in base a quanti interi si vogliono inserire (3 nella versione "grezza", n in generale), quindi bastano 3, massimo 4 variabili (pure di meno, ma ricerchiamo la chiarezza).
E i test da fare sono solo 2 (per ogni numero letto ovviamente), come ha già evidenziato @rctimelines
Da notare che listati che ho postato SEMBRANO più lunghi SOLO PERCHE' ho messo diverse istruzioni di stampa e lettura per "frenare" la console di comando e dare il tempo di lèggere i risultati prima che si chiuda.

Versione brutta solo per 3 numeri:
Codice:
#include <iostream>
#include <climits> // limiti per costanti numeriche
using namespace std;

int main() {
    int min=INT_MAX, max=INT_MIN, temp; // ...in modo che min/max saranno cambiati
    for(int i=1; i<4; i++){
        cout << "\nInserisci il numero " << i << " --> ";
        cin >> temp;
        if(temp<min) min = temp;
        if(temp>max) max = temp;
    }
    cout << "\n\nMinimo = " << min;
    cout << "\nMassimo = " << max << endl;
    cout << "\n\Inserisci un numero e poi premi INVIO per terminare --> "; // solo per leggere l'output
    cin >> temp;
    return 0;
}

Vesrsione per n numeri (n dato in input dall'utente):
Codice:
#include <iostream>
#include <climits> // limiti per costanti numeriche
using namespace std;

int main() {
    int min=INT_MAX, max=INT_MIN, temp; // ...in modo che min/max saranno cambiati
    unsigned int n = 1; // quanti numeri
    cout << "\nQuanti numeri vuoi inserire?  --> ";
    cin >> n; // supposto >0
    for(unsigned int i=1; i<=n; i++){
        cout << "\nInserisci il numero " << i << " --> ";
        cin >> temp;
        if(temp<min) min = temp;
        if(temp>max) max = temp;
    }
    cout << "\n\nMinimo = " << min;
    cout << "\nMassimo = " << max << endl;
    cout << "\n\Inserisci un numero e poi premi INVIO per terminare --> "; // solo per leggere l'output
    cin >> n;
    return 0;
}
Credo che tu sia fuori strada. Qui la questione è molto più semplice e non prevede l'utilizzo di funzionalità specifiche del linguaggio.

Algoritmo per determinare individuare il massimo e minimo tra tre numeri.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,655
11,440
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Perché funzioni specifiche?
Di specifico c'è solo il nome della libreria ed il modo di includerla; ogni linguaggio le prevede (per esempio in C in limits.h, Java nelle classi Wrapper dei tipi primitivi, c'erano perfino in Pascal), anzi è un modo di guardarle almeno una volta!
Preassegnare un valore convenzionale è un trucco vecchissimo, in questo caso assegni
min = +2 miliardi e spiccioli (+2^32-1)
max= -2 miliardi e spiccioli (-2^32)
già alla prima lettura, per esempio, se inserisci 100, ritrovi min=100, max=100
Altrimenti si fa come visto, prima leggi il primo numero (e lo assegni a min e max) e poi gli altri confronti... Ma davvero dobbiamo discutere per un esercizietto (non ho nemmeno il coraggio di chiamarlo "algoritmo") del genere?

Io ho fatto in quest'altro modo perché l'utente chiedeva "un numero di righe inferiore" e meno di così è difficile, avendo evitato i messaggi della lettura del primo numero.
C:
int min=INT_MAX, max=INT_MIN, temp; // ...in modo che min/max saranno cambiati
    for(int i=1; i<4; i++){
        cout << "\nInserisci il numero " << i << " --> ";
        cin >> temp;
        if(temp<min) min = temp;
        else if(temp>max) max = temp;
    }
    cout << "\n\nMinimo = " << min;
    cout << "\nMassimo = " << max << endl;[CODE]
 
Ultima modifica:

MPG

Utente Attivo
544
4
Ringrazio tutti quanti ma essendo all'inizio del c++ a scuola Bat00cent non ho ancora utilizzato alcune cose che hai scritto, ma ti ringrazio comunque!
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!