Esercizio tra vettori

di il
10 risposte

Esercizio tra vettori

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

  • Re: Esercizio tra vettori

    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;
    }   
  • Re: Esercizio tra vettori

    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
  • Re: Esercizio tra vettori

    
            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
  • Re: Esercizio tra vettori

    Perchè senza i++? il mio for (j=i-2 ecc..) è sbagliato?
  • Re: Esercizio tra vettori

     #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í?
  • Re: Esercizio tra vettori

    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;
    }   
    
  • Re: Esercizio tra vettori

    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
  • Re: Esercizio tra vettori

    Riprova allora
  • Re: Esercizio tra vettori

    Weierstrass ha scritto:


    Riprova allora
    ok è uscito, posso chiederti perchè con il for non andava e con il while si? grazie mille
  • Re: Esercizio tra vettori

    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