DOMANDA positivonegativo e stampa ok

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità

MPG

Utente Attivo
Messaggi
566
Reazioni
4
Punteggio
55
"Scrivere un programma PositivoNegativo.cpp che chiede all’utente di inserire una sequenza di interi che termina quando l’utente immette il valore 0.
Il programma poi stampa "OK" se la sequenza contiene un valore positivo seguito da uno negativo, altrimenti stampa il messaggio "NO".
"

Ho fatto questo sinceramente aiutandomi anche su internet, sembrerebbe che va ma ho un dubbio su questo che ho trovato per risolvere:
"if((n>0 && nprec<0) || (n<0 && nprec>0))"
Non capisco esattamente come fa a funzionare , insomma vorrei capire altrimenti non riesco ad imparare bene.
Grazie come sempre a tutti,

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

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>n;
  

   while(n!=0){
         cin>>n;


     if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";



}
  
  }
 
Infatti non funziona.
Giustamente hai usato due variabili, ma ne usi solo una. Ad ogni numero che immetti, copi il contenuto di n in nprec, poi salvi in n il numero immesso.
L'if/else lo devi fare fuori dal ciclo. Quando immetti 0 allora devi scrivere ok o no, non ad ogni numero aggiunto.
 
Codice:
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>n;


   while(n!=0){
         cin>>n;





}
if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";


  }
Fatto cosi' ma non va...


Una alternativa è questa:

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

int main()
{
int n;
int stato;

do
{
   cin >> n;
   if (stato == 0 && n>0)
      stato = 1;
   if (stato == 1 && n<0)
      stato = 2;
} while (n != 0);
if(stato==2)
        cout<<"OK\n";
    if(stato==1 || stato==0)
        cout<<"NO\n";

   system("pause");
   return 0;
}

Puoi aiutarmi per entrambe?
INoltre non capisco bene "Ad ogni numero che immetti, copi il contenuto di n in nprec, poi salvi in n il numero immesso." Ma funzione anche se non ho posto tipo n=nprec...
 
Il secondo lascialo perdere.
Nel primo, tu continui a fare il cin in n, ma non usi mai nprec. Prima di fare il cin devi copiare in nprec il contenuto di n
 
Codice:
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   n=nprec;
   cin>>n;


   while(n!=0){
        cin>>n;





}
if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";


  }

Nemmeno cosi' va.... e ora anche se metto 0 non si stoppa..
 
Salvare il valore di n in nprec significa fare nprec=n, non il contrario.
E ovviamente questa istruzione devi farla ogni volta che fai il cin ( quindi quello che hai scritto tu non ha senso (visto che non hai assegnato nessun valore ad n), devi farlo dopo il while ).
 
Codice:
include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";

   cin>>n;


   while(n!=0){
        nprec=n;
        cin>>n;





}
if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";


  }

Fatto ma non va...
 
SCusa ma cosi' va:

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

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>n;


   while(n!=0){
       nprec=n;
         cin>>n;


     if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";



}

  }
 
SCusa ma cosi' va:

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

int main()
{

int n;
int nprec;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>n;


   while(n!=0){
       nprec=n;
         cin>>n;


     if((n>0 && nprec<0) || (n<0 && nprec>0)){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";



}

  }
Purtroppo mi sono accorto ora che quando immetti 0 lo salvi comunque in n. Userei 3 variabili: nprec, n e temp. Il cin lo fai sempre su temp: se temp = 0 esci dal ciclo, sennò nprec=n e n=temp.
 
Scusa sto un po' impazzendo me lo potresti cortesemente scrivere in toto il listato?
Inoltre non è che basti "if(n<0 && nprec>0)" anzichè "if((n>0 && nprec<0) || (n<0 && nprec>0)) " ?
 
Per l'if basterebbe la versione semplice. Ma visto che stai imparando maneggiare anche l'&& o l'|| non fa male.
Comunque
C++:
while() {
 cin>>temp;
 if(temp == 0)
    break;
 nprec=n;
 n=temp;
}
 
while() {
TRa le parentesi del while??
Versione corta di un while(true). Significa che il ciclo verrà eseguito all'infinito. Per fermarlo bisogna usare un break.
Altro codice che fa la stessa cosa:
C++:
while(temp!=0) {
 cin>>temp;
 if(temp != 0) {
   nprec=n;
   n=temp;
 }
}
 
Io non ne vengo fuori

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

int main()
{

int n;
int nprec;
int temp;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>n;


  while(temp!=0) {
 cin>>temp;
 if(temp != 0) {
   nprec=n;
   n=temp;
 }
}



     
    if(n<0 && nprec>0){
             cout<<"\nOk\n";
      }else
         cout<<"\nNo\n";



}

Hai provato? Cosi' mi fa scrivere numeri continuamente e non si ferma con lo 0...
 
C++:
int n=0;
int nprec=0;
int temp;

cout<<"Inserisci una serie di numeri, scrivi 0 se vuoi interromperti!\n";
   cin>>temp;
Modifica cosi e funziona.
 
Pubblicità
Pubblicità
Indietro
Top