Analizzare sequenza di numeri c++

di Anonimizzato28513 il
20 risposte
Salve ragazzi ho bisogno di una mano, ho un importante esame di programmazione c++
il testo dell'esercizio dice: data una sequenza (non si sa di quanti numeri) se è crescente inserire nella variabile x il valore 1, altrimenti inserire in valore 0.
io ho provato a svolgerla ma quando inserisco i numeri: 2 3 6 5 4 3 2 mi da come risultato 1 (ovvero crescente) credo che il problema sia che il codice che inserisco analizza solo i primi numeri.. qualcuno può spiegarmi come devo fare??? vi prego
int i,t1,t2,x;

cin >> t1;
cin >> t2;
if (t1 < t2)
{
x = 1;
}
else if (t1 > t2)
{
x = 0;
}
while (t2 !=0)
{
t1 = t2;
cin >> t2;
if (x > 0)
{
if (!(t1 < t2))
{
x = 0;
}
}
else if (x < 0)
{
if (!(t1 > t2))
{
x = 0;
}
}
}

20 Risposte

  • Intanto usa i tag code per il codice
  • int i,t1,t2,x;
    
    cin >> t1;
    cin >> t2;
    if (t1 < t2)
    {
    x = 1;
    }
    else if (t1 > t2)
    {
    x = 0;
    }
    while (t2 !=0)
    {
    t1 = t2;
    cin >> t2;
    if (x > 0)
    {
    if (!(t1 < t2))
    {
    x = 0;
    }
    }
    else if (x < 0)
    {
    if (!(t1 > t2))
    {
    x = 0;
    }
    }
    }
  • Complimenti per l'indentazione!
  • Io ho esposto un quesito e speravo di trovare una risposta o almeno poter ragionare in merito ad un mio dubbio, ma a quanto pare si inviano risposte a caso su questo forum
  • La questione è che senza indentazione non c'è proprio modo di ragionare su quel codice. Ovvero non si capisce nulla. Quindi le polemiche non servono nulla.
  • Io non sto facendo nessuna polemica. Siccome sono una nuova iscritta non so bene come formulare le domande, quindi non mi sembrava opportuno ironizzare sulla questione ma consigliarmi come rendere agevole la comprensione.
  • Hai detto "sì inviano risposte a caso" e questa è polemica. Se indenti correttamente si ragiona altrimenti già è abbastanza tardi... buonanotte
  •   int i,t1,t2,x;
    
           cin >> t1;
           cin >> t2;
          if (t1 < t2)
          {
               x = 1;
          }
          else if (t1 > t2)
           {
            x = 0;
           }
     while (t2 !=0)
       {
             t1 = t2;
              cin >> t2;
              if (x > 0)
               {
                           if (!(t1 < t2))
                             {
                                   x = 0;
                             }
               }
                      else if (x < 0)
                        {
                               if (!(t1 > t2))
                              {
                                      x = 0;
                              }
                        }
      }   
  • Quando si interrompe la sequenza di input? Dal codice mi sembra di capire quando si inserisce uno zero, ma a questo punto la domanda sorge spontanea: lo zero va analizzato come parte della sequenza?
  • No non si dovrebbe contare, lo uso soltanto per poter uscire dal ciclo
  • Ho rifatto il codice utilizzando questa volta il ciclo for e analizzando punto punto sembra essere giusto, l'unica cosa che non so come fare è: come escludere quello 0 che mi permette di chiudere il ciclo, dalla verifica di (t1<t2). vi invio il codice che ho fatto ora
    
    #include <iostream>
    using namespace std;
    int main()
    {
    	int x=-1, t1, t2,i;
    	cin >> t1;
    	t2=t1;
    	cin >> t2;
    	if (t1 < t2)
    	{
    		x = 1;
    	}
    	
    	for (i=3;t2!=0;i++)
    	{
    		t1=t2;
    		cin >> t2;
    
    		if (x > 0)
    		{
    			if (!(t1 < t2))
    			{
    				x = -1;
    			}
    		}
    		else if (x < 0)
    		{
    			if (!(t1 > t2))
    			{
    				x = 1;
    			}
    		}
    	}
    	
    	
    	return 0;
    } 
  • Secondo me ti stai complicando inutilmente la vita...

    Il mio consiglio è di lasciar perdere quel codice e ragionare diversamente:
    - innanzitutto se hai un minimo di dimestichezza con le espressioni logiche, ti faccio notare che
    x = t1 <= t2;
    coincide con
    if(t1 <= t2)
    {
        x = 1;
    }
    else
    {
        x = 0;
    }
    - quindi supponendo che la sequenza debba contenere minimo due elementi possiamo impostare il problema nel seguente modo:
    int main()
    {
    	int t1;
    	int t2;
    	cin >> t1;
    	cin >> t2;
    	int x = t1 <= t2;
    	while(t2)
    	{
    	    ...
    	}
    	cout << x;
    }
    a questo punto per completare il programma bastano 4 righe di codice da inserire all'interno del while.
    Ragionaci un po' e fammi sapere!
  • Eccomi ho fatto così, va bene?
    #include <iostream>
    using namespace std;
    int main()
    {
    	int t1, t2;
    	cin >> t1;
    	cin >> t2;
    	int x = t1 <= t2;
    	while (t2 != 0)
    	{
    		t1 = t2;
    		cin >> t2;
    		if (x == 1)
    		{
    			x = t1 <= t2;
    		}
    		
    	}
    	return 0;
    } 
  • Va bene, ma se vuoi che lo 0 non venga considerato come parte della sequenza devi aggiungere qualcosa nella condizione dell'if.
Devi accedere o registrarti per scrivere nel forum
20 risposte