Difficoltà con esercizio c++

di il
30 risposte

Difficoltà con esercizio c++

Ho un esercizo che risolvo parzialmente poi arrivo ad un punto in cui non so che scrivere, il testo è questo:
Scrivere un programma che chiede all'utente di inserire una sequenza
di interi terminata quando l'utente immette il valore 0, poi stampa "OK" se la sequenza contiene un
valore positivo seguito da uno negativo, altrimenti stampa il messaggio "NO". A vostra scelta, la stampa
del messaggio "OK" può interrompere o meno l'inserimento dei valori. Risolvere questo esercizio senza
usare array.
Ecco il mio parziale codice:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int nprec;    //numero inserito ad ogni ciclo 
    int nsucc;   //numero successivo a quello inserito
    bool flag = false;  //variabile che avvisa quando si è verificato il caso che chiedeva il problema
    cout<<"Inserisci una sequenza di numeri\n";

    while(nsucc!=0)
    {
        cin>>nprec;
         //qui manca la parte che confronta il numero successivo e il numero precedente
        
        if(nprec>0 && nsucc<0)
            flag = true;

    }
    if(flag)
        cout<<"OK\n";
    else
        cout<<"NO\n";

    system("pause");
    return 0;
}

Mi manca la parte dove il numero precedente cioè quello inserito dall'utente ad ogni ciclo viene confrontato con quello successivo per vedere se è negativo.Non riesco proprio a capire come progreammare questa parte. Grazie in anticipo per l'aiuto.

30 Risposte

  • Re: Difficoltà con esercizio c++

    Prova ad usare solo una variabile n per l'input e una variabile stato per indicare cosa succede.

    stato è inizialmente 0, diventa 1 quando arriva un positivo, 2 quando arriva il negativo dopo il positivi
  • Re: Difficoltà con esercizio c++

    Io ho provato così ma proprio non capisco come faccio a spiegare che prima il numero deve essere maggiore di 0 e poi senza mandare di nuovo un input che controlla il numero successivo se è minore o maggiore. Mi verrebbe da dire di inserire n poi controllare se n è positivo poi inserire di nuovo n e controllare se è negativo e così via.. ma è sbagliato.
    
    while(n!=0)
        {
            cin>>n;
             if(n>0)
             {
                 flag=1;
             }
             
        }
    
  • Re: Difficoltà con esercizio c++

    Ti ho suggerito di usare anche una variabile stato ma non hai neanche tentato di seguire il suggerimento
  • Re: Difficoltà con esercizio c++

    Ho usato flag al posto di stato il concetto è uguale.Il problema è questo: io inserisco un numero e il programma deve controllare se è positivo o negativo e poi controllare il prossimo se è positivo o negativo ma io come lo programmo in modo che controlli il numero che metto e poi il successivo?
  • Re: Difficoltà con esercizio c++

    No ... non è uguale, flag è un bool mentre la variabile stato può assumere più valori (0, 1, 2 ...) ...

    Libero di non seguire i suggerimenti ma non ripetere in ogni risposta quello che devi fare e che non riesci a fare se poi fai di testa tua.
  • Re: Difficoltà con esercizio c++

    In realtà col flag avevo intenzione di fare come dici tu, quindi avevo già impostato lo 0 e 1 ma mi mancano le condizioni per il 2, se vuoi cambio il nome ma la variabile non è più bool, il problema principale non è questo ma un problema tecnico da risolvere magari combinando forse degli if-else ma comunque non ne ho la più pallida idea. Fare assumere un valore ad una variabile che sia chiamata flag o stato non è un problema.
  • Re: Difficoltà con esercizio c++

    Se non dici che da bool è diventata una int allora non ci possiamo mai capire. Te ne rendi conto?
  • Re: Difficoltà con esercizio c++

    Ok, scusami per non essere stato chiaro
  • Re: Difficoltà con esercizio c++

    Nella programmazione è fondamentale.

    Comunque, pensaci e spremiti le meningi ... la strada te l'ho data.
    Nella if devi testare anche flag (meglio si chiami stato dato che indica lo stato del programma) e il valore di n insieme prima di modificare il suo valore da 0 a 1 e da 1 a 2.

    Ovvero,

    a) se sei nello stato 0 e arriva un valore maggiore/uguale zero, allora vai nello stato 1

    b) se sei nello stato 1 e arriva un valore minore di zero, allora vai nello stato 2


    Alla fine del ciclo esamina il valore dello stato per capire cosa è successo.
  • Re: Difficoltà con esercizio c++

    Ho provato così ma non funziona
    
     while(n!=0)
        {
            cin>>n;
            if(stato==0 && n>0)
                stato=1;
            if(stato==1 && n<0)
                stato=2;
            if(stato==1 && n>=0)
                stato=0;
    
        }
        if(stato==2)
            cout<<"OK\n";
        if(stato==1 || stato==0)
            cout<<"NO\n";
    
        system("pause");
        return 0;
    }
    
    
  • Re: Difficoltà con esercizio c++

    Modifica così
    
    int n;
    int stato = 0;
    
    do
    {
    	cin >> n;
    	if (stato == 0 && n>0)
    		stato = 1;
    	if (stato == 1 && n<0)
    		stato = 2;
    } while (n != 0);
  • Re: Difficoltà con esercizio c++

    No, mi dispiace, non funziona, non vorrei fosse un errore del compilatore ma il codice mi sembra corretto, a te funziona?
  • Re: Difficoltà con esercizio c++

    No, no niente ora funziona mi ero dimenticato di cambiare da bool a int la variabile stato. Grazie mille per l'aiuto. Quindi dovrebbe funzionare anche solo con il while? Grazie di nuovo per la pazienza.
  • Re: Difficoltà con esercizio c++

    olegfresi ha scritto:


    mi ero dimenticato di cambiare da bool a int la variabile stato.
    Sì prego ma non puoi essere così disattento ... te l'avevo pure detto più volte del bool/int e ti sei fissato sul nome flag o stato.

    Se solo seguissi i suggerimenti in maniera attenta ...
Devi accedere o registrarti per scrivere nel forum
30 risposte