DOMANDA [C++] Come poter controllare se 4 variabili sono uguali?

U

Utente cancellato 366168

Ospite
Buonasera a tutti, sto svolgendo un esercizio per casa, che mi chiede di creare un programma on C++, che mi permetta di verificare (attraverso una funzione che poi nel corso del programma chiamerò più volte) se il dato inserito è uguale a i dati precedentemente inseriti. Ho provato a pensarci un po', ma non mi viene niente di concreto, riuscireste a darmi una mano?
 

ZioPao

Utente Attivo
189
58
CPU
i5 2500k @4.2 GHz
Dissipatore
Cooler Master Hyper 212 EVO
Scheda Madre
AsRock P67 PRO B3
HDD
WD Blue 2012 1 TB + Seagate Barracuda 7200.11 + Samsung Spinpoint M7
RAM
12 GB G.Skill Ripjaws 1600MHz
GPU
Gigabyte Nvidia GTX 970 G1
Audio
FiIO Olympus 2
Monitor
ASUS VE248
PSU
Cooler Master GX 750W
Case
Corsair Carbide 400C
Periferiche
SuperLux HD 681 EVO, Aukey Blue Mech Keyboard, Logitech G502
OS
Windows 10
Buonasera a tutti, sto svolgendo un esercizio per casa, che mi chiede di creare un programma on C++, che mi permetta di verificare (attraverso una funzione che poi nel corso del programma chiamerò più volte) se il dato inserito è uguale a i dati precedentemente inseriti. Ho provato a pensarci un po', ma non mi viene niente di concreto, riuscireste a darmi una mano?
Fammi capire, tu arrivi a 4 dati in input e poi dopo te li dovrebbe controllare?
 
U

Utente cancellato 366168

Ospite
Ok, non mi dice se dopo che li ho inseriti tutti o ogni volta che ne inserisco uno, però posso supporre che il controllo avvenga man man che inserisco i dati. Anche perché se il dato è uguale, il programma le lo richiede stampando prima un messaggio di errore.
Post automatically merged:

Codice:
#include <iostream>
#include <math.h>
using namespace std;

int controllo(){
int n;
do{
    cin>>n;
if (n<0){

    cout<<"ERRORE\nInserire di nuovo il dato: ";

};}while(n<0);
return n;
}



int main()
{int a,b,c,d;

    cout<<"Inserire A: ";
    a=controllo();
    cout<<"Inserire B: ";
    b=controllo();

    if(b==a){
     do{   cout<<"Dato inserito uguale al precedente\nInserire di nuovo il dato: ";
        b=controllo();
    }while(b==a);}

    cout<<"Inserire C";
    if(c==a||c==b){
     do{   cout<<"Dato inserito uguale al precedente\nInserire di nuovo il dato: ";
        b=controllo();
    }while(b==a);}
    c=controllo();

    

    return 0;
}

Io ho provato così, ma a me serve proprio una funzione da richiamare ogni volta, dopo avere inserito il dato. Come ho fatto per verificare se il dato era maggiore di zero.
 

ZioPao

Utente Attivo
189
58
CPU
i5 2500k @4.2 GHz
Dissipatore
Cooler Master Hyper 212 EVO
Scheda Madre
AsRock P67 PRO B3
HDD
WD Blue 2012 1 TB + Seagate Barracuda 7200.11 + Samsung Spinpoint M7
RAM
12 GB G.Skill Ripjaws 1600MHz
GPU
Gigabyte Nvidia GTX 970 G1
Audio
FiIO Olympus 2
Monitor
ASUS VE248
PSU
Cooler Master GX 750W
Case
Corsair Carbide 400C
Periferiche
SuperLux HD 681 EVO, Aukey Blue Mech Keyboard, Logitech G502
OS
Windows 10
Ok, non mi dice se dopo che li ho inseriti tutti o ogni volta che ne inserisco uno, però posso supporre che il controllo avvenga man man che inserisco i dati. Anche perché se il dato è uguale, il programma le lo richiede stampando prima un messaggio di errore.
Post automatically merged:

Codice:
#include <iostream>
#include <math.h>
using namespace std;

int controllo(){
int n;
do{
    cin>>n;
if (n<0){

    cout<<"ERRORE\nInserire di nuovo il dato: ";

};}while(n<0);
return n;
}



int main()
{int a,b,c,d;

    cout<<"Inserire A: ";
    a=controllo();
    cout<<"Inserire B: ";
    b=controllo();

    if(b==a){
     do{   cout<<"Dato inserito uguale al precedente\nInserire di nuovo il dato: ";
        b=controllo();
    }while(b==a);}

    cout<<"Inserire C";
    if(c==a||c==b){
     do{   cout<<"Dato inserito uguale al precedente\nInserire di nuovo il dato: ";
        b=controllo();
    }while(b==a);}
    c=controllo();

   

    return 0;
}

Io ho provato così, ma a me serve proprio una funzione da richiamare ogni volta, dopo avere inserito il dato. Come ho fatto per verificare se il dato era maggiore di zero.

Sarò stordito pesantemente, ma non mi è chiaro :boh:
Ho fatto sto aborto in tipo 20 secondi (è praticamente la prima volta che metto mano su c++), ma non credo che sia questo quello che ti serva, vero?
C++:
#include <iostream>

using namespace std;
bool compare(int i, int j, int l, int m);

int main() {

    int i = NULL, j = NULL, l = NULL, m = NULL;
    int turn = 0;
    bool flag = false;
    while(1){

        cout << "Inserisci value\n";
        if (turn == 0)
            cin >> i;
        if (turn == 1)
            cin >> j;
        if (turn == 2)
            cin >> l;
        if (turn == 3)
            cin >> m;

        turn++;
        if (turn == 4)
            turn = 0;

        flag = compare(i,j,l,m);
        if(flag)
            return 0;


    }

    return 0;
}

bool compare(int i, int j, int l, int m) {

    if (i != 0 && j != 0 && l != 0 && m != 0) {
        if (i == j)
            if (j == l)
                if (l == m)
                    return true;
    }
    return false;

}
 
U

Utente cancellato 366168

Ospite
Sciallo sono io che mi spiego male.
Allora..
L'utente inserisce a poi inserisce b, se b è uguale ad A, il programma richiede b.
poi si inserisce c e si verifica se c sia uguale a A o a B, se è uguale si richiede.
poi si chiede D che se è uguale ad A o B o C, si richiede.
Ora è un po' più chiaro?:brindiamo:
 

Andretti60

Utente Èlite
4,721
3,302
Non dichiarare quattro variabili, dichiara un vettore di quattro (o quanti ne vuoi) elementi.
La funzione non deve fare altro che iterare il vettore fino al numero di elementi entrati a quel punto, e tornare un valore (true o false, decidi tu) appena trova che il valore appena entrato e' simile a uno presente nel vettore.
 
U

Utente cancellato 366168

Ospite
Non dichiarare quattro variabili, dichiara un vettore di quattro (o quanti ne vuoi) elementi.
La funzione non deve fare altro che iterare il vettore fino al numero di elementi entrati a quel punto, e tornare un valore (true o false, decidi tu) appena trova che il valore appena entrato e' simile a uno presente nel vettore.

Ho pensato la stessa cosa, ma il compito vieta l'uso di array:look::muro:, scusate se non vi ho avvisato prima.
 

Andretti60

Utente Èlite
4,721
3,302
ok allora visto che le variabili devono essere maggiori di zero, inizializzale tutte con un valore negativo, poi quando fai il confronto confrontale tutte purche' siano positive, ossia se la nuova variabile e' 'd'

if ((a > 0 && a == d) || (b > 0 && b == d) ....)
 

_Achille

Utente Èlite
3,064
722
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Sarò stordito pesantemente, ma non mi è chiaro :boh:
Ho fatto sto aborto in tipo 20 secondi (è praticamente la prima volta che metto mano su c++), ma non credo che sia questo quello che ti serva, vero?
C++:
#include <iostream>

using namespace std;
bool compare(int i, int j, int l, int m);

int main() {

    int i = NULL, j = NULL, l = NULL, m = NULL;
    int turn = 0;
    bool flag = false;
    while(1){

        cout << "Inserisci value\n";
        if (turn == 0)
            cin >> i;
        if (turn == 1)
            cin >> j;
        if (turn == 2)
            cin >> l;
        if (turn == 3)
            cin >> m;

        turn++;
        if (turn == 4)
            turn = 0;

        flag = compare(i,j,l,m);
        if(flag)
            return 0;


    }

    return 0;
}

bool compare(int i, int j, int l, int m) {

    if (i != 0 && j != 0 && l != 0 && m != 0) {
        if (i == j)
            if (j == l)
                if (l == m)
                    return true;
    }
    return false;

}
Cavolo, apparte quei (void *)0 per inizializzare delle variabili non puntatore è un bel codice.
 
  • Like
Reactions: ZioPao

Andretti60

Utente Èlite
4,721
3,302
Io credo di non averlo capito bene :sisi:.
Infatti non funziona, fa il test solo quando tutte le variabili sono inizializzate (invece che una alla volta) e controlla se tutte le variabili hanno lo stesso valore (invece che almeno due abbiano lo stesso valore). Probabilmente ha capito male l'esercizio.
Assegnare un NULL (ossia un puntatore nullo) a una variabile di tipo intero e' una cosa che si puo' fare solo in C, in qualsiasi liguaggio moderno tale assegnazione genera errore.
 
  • Like
Reactions: ZioPao
U

Utente cancellato 366168

Ospite
Infatti non funziona, fa il test solo quando tutte le variabili sono inizializzate (invece che una alla volta) e controlla se tutte le variabili hanno lo stesso valore (invece che almeno due abbiano lo stesso valore). Probabilmente ha capito male l'esercizio.
Assegnare un NULL (ossia un puntatore nullo) a una variabile di tipo intero e' una cosa che si puo' fare solo in C, in qualsiasi liguaggio moderno tale assegnazione genera errore.

Ah ok. Tu cosa mi consiglieresti di fare?
 

ZioPao

Utente Attivo
189
58
CPU
i5 2500k @4.2 GHz
Dissipatore
Cooler Master Hyper 212 EVO
Scheda Madre
AsRock P67 PRO B3
HDD
WD Blue 2012 1 TB + Seagate Barracuda 7200.11 + Samsung Spinpoint M7
RAM
12 GB G.Skill Ripjaws 1600MHz
GPU
Gigabyte Nvidia GTX 970 G1
Audio
FiIO Olympus 2
Monitor
ASUS VE248
PSU
Cooler Master GX 750W
Case
Corsair Carbide 400C
Periferiche
SuperLux HD 681 EVO, Aukey Blue Mech Keyboard, Logitech G502
OS
Windows 10
Cavolo, apparte quei (void *)0 per inizializzare delle variabili non puntatore è un bel codice.
Infatti non funziona, fa il test solo quando tutte le variabili sono inizializzate (invece che una alla volta) e controlla se tutte le variabili hanno lo stesso valore (invece che almeno due abbiano lo stesso valore). Probabilmente ha capito male l'esercizio.
Assegnare un NULL (ossia un puntatore nullo) a una variabile di tipo intero e' una cosa che si puo' fare solo in C, in qualsiasi liguaggio moderno tale assegnazione genera errore.
Era letteralmente la prima volta che scrivevo codice su C++ che facesse qualcosa oltre a semplici test del genere:asd: Ora so qualcosa in più
 
Ultima modifica:

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 37 22.8%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 103 63.6%
  • Square Enix

    Voti: 14 8.6%
  • Capcom

    Voti: 7 4.3%
  • Nintendo

    Voti: 21 13.0%
  • Altro (Specificare)

    Voti: 15 9.3%