Esercizio tra vettori

di Anonimizzato28513 il
10 risposte
Ciao ragazzi ho un problema con un esercizio.
la traccia dice: inserire due numeri interi nelle prime due posizioni del vettore NUOVI, a partire dalla terza posizione inserire dei valori soltanto se questi valori sono compresi (estremi esclusi) tra gli ultimi due valori inseriti nel vettore. terminare la lettura appena la differenza in valore assoluto degli ultimi due valori inseriti in NUOVI è 1 oppure se il vettore è pieno. vi allego quello che ho fatto io, ma è un disastro.
 #include <iostream>
#define DIM 6
using namespace std;
int main()
{
	int nuovi[DIM], num, i,j;
	for (i = 0; i < 2; i++)
	{
		cin >> nuovi[i];
	}
	
	do
	{
		for (i = 0; i < DIM;)
		{
			for (j = 2; j < DIM; j++)
			{


				cin >> num;
				if (num > nuovi[i - 2] && num < nuovi[i - 1])
				{
					nuovi[j] = num;
					i++;
				}
			}
		}

					
	} while ((nuovi[i-2] - nuovi[i-1] != 1) || i!=5 );
	return 0;
}   

10 Risposte

  • Completa tu
    #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int i, num, distanza, max, min, nuovi[DIM];
    	
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	for (i = 2; i < DIM; ){
    	     [calcolo la distanza tra nuovi[i-1] e nuovi[i-2]]
    	     if(distanza <= 1)
    	         break;
    	     cin >> num;
    	     [calcolo il max e il min tra nuovi[i-1] e nuovi[i-2]]
    	     if(num > min && num < max){
    		 nuovi[i] = num;
    		 i++;
                 }
    	}
    	
    	return 0;
    }   
  • Weierstrass ha scritto:


    Completa tu
    #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int i, num, distanza, max, min, nuovi[DIM];
    	
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	for (i = 2; i < DIM; ){
    	     [calcolo la distanza tra nuovi[i-1] e nuovi[i-2]]
    	     if(distanza == 1)
    	         break;
    	     cin >> num;
    	     [calcolo il max e il min tra nuovi[i-1] e nuovi[i-2]]
    	     if(num > min && num < max){
    		 nuovi[i] = num;
    		 i++;
                 }
    	}
    	
    	return 0;
    }   
     #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int nuovi[DIM], num, i,j, distanza,min,max;
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	for (i=2; i < DIM;i++)
    			{
    				distanza = (nuovi[i - 2] - nuovi[i - 1]);
    				if (distanza == 1)
    				{
    					break;
    				}
    				cin >> num;
    				for (j = i - 2; j < i - 1; j++)
    				{
    					max = nuovi[j];
    					min = nuovi[j];
    
    					if (nuovi[i-2] > max)
    					{
    						max = nuovi[i-2];
    					}
    					else
    					{
    						max = nuovi[i - 1];
    					}
    					if (nuovi[i-2] < min)
    					{
    						min = nuovi[i-2];
    					}
    					else
    					{
    						min = nuovi[i - 1];
    					}
    				}
    				if (num > max && num < min)
    				{
    					nuovi[i] = num;
    				}
    		}	
    	return 0;
    }
    cosi????? credo di no
  • 
            if(nuovi[i - 2] > nuovi[i - 1]){
    	    distanza = nuovi[i - 2] - nuovi[i - 1];
    	    max = nuovi[i - 2];
    	    min = nuovi[i - 1];
    	 }
    	else{
    	    distanza = nuovi[i - 1] - nuovi[i - 2];
    	    max = nuovi[i - 1];
    	    min = nuovi[i - 2];   
    	 }
    	if (distanza <= 1)
    	    break;
    
    distanza minore o uguale a 1... la traccia ha dimenticato che potrei inserire due valori uguali all'inizio

    Le graffe non sono necessarie se l'istruzione è una sola, puoi comunque aggiungerle
    
    for (i = 2; i < DIM; )
    
    Senza i++. Puoi usare il while in alternativa se ti è più chiaro
  • Perchè senza i++? il mio for (j=i-2 ecc..) è sbagliato?
  •  #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int nuovi[DIM], num, i,j, distanza,min,max;
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	for (i=2; i < DIM;)
    			{
    				cin >> num;
    					if (nuovi[i - 2] > nuovi[i - 1]) {
    						distanza = nuovi[i - 2] - nuovi[i - 1];
    						max = nuovi[i - 2];
    						min = nuovi[i - 1];
    					}
    					else {
    						distanza = nuovi[i - 1] - nuovi[i - 2];
    						max = nuovi[i - 1];
    						min = nuovi[i - 2];
    					}
    					if (distanza <= 1)
    					{ 
    						break;
    					}
    
    				}
    				if (num > max && num < min)
    				{
    					nuovi[i] = num;
    					i++;
    				}
    			
    	return 0;
    }
    cosí?
  • Vabbè ricapitolo.

    Vedi tu poi come modificare secondo i tuoi gusti
    
    #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int i, num, distanza, max, min, nuovi[DIM];
    	
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	
    	i = 2;
    	while(i < DIM){
             if(nuovi[i - 2] > nuovi[i - 1]){
    	    distanza = nuovi[i - 2] - nuovi[i - 1];
    	    max = nuovi[i - 2];
    	    min = nuovi[i - 1];
    	 }
    	 else{
    	    distanza = nuovi[i - 1] - nuovi[i - 2];
    	    max = nuovi[i - 1];
    	    min = nuovi[i - 2];   
    	 }
    	
    	     if(distanza <= 1)
    	         break;
    	     cin >> num;
    	     if(num > min && num < max){
    		 nuovi[i] = num;
    		 i++;
                 }
    	}
    	
    	return 0;
    }   
    
  • Weierstrass ha scritto:


    Vabbè ricapitolo.

    Vedi tu poi come modificare secondo i tuoi gusti
    
    #include <iostream>
    #define DIM 6
    using namespace std;
    int main()
    {
    	int i, num, distanza, max, min, nuovi[DIM];
    	
    	cin >> nuovi[0];
    	cin >> nuovi[1];
    	
    	i = 2;
    	while(i < DIM){
             if(nuovi[i - 2] > nuovi[i - 1]){
    	    distanza = nuovi[i - 2] - nuovi[i - 1];
    	    max = nuovi[i - 2];
    	    min = nuovi[i - 1];
    	 }
    	 else{
    	    distanza = nuovi[i - 1] - nuovi[i - 2];
    	    max = nuovi[i - 1];
    	    min = nuovi[i - 2];   
    	 }
    	
    	     if(distanza <= 1)
    	         break;
    	     cin >> num;
    	     if(num > min && num < max){
    		 nuovi[i] = num;
    		 i++;
                 }
    	}
    	
    	return 0;
    }   
    
    ho provato ma non esce mai dal ciclo. Ho inserito 3 7 4 8 6 7 5
    ma non si blocca
  • Riprova allora
  • Weierstrass ha scritto:


    Riprova allora
    ok è uscito, posso chiederti perchè con il for non andava e con il while si? grazie mille
  • Il codice che ti ho postato funziona anche con for(i = 2; i < DIM; )
    Cerca di capire tu cosa hai modificato che non lo fa funzionare più.

    E in generale serve più concentrazione: se ti risulta errato anche codice che funziona, vuol dire che non presti molta attenzione a quello che fai...
Devi accedere o registrarti per scrivere nel forum
10 risposte