Sequenza

di il
15 risposte

Sequenza

Ciao! Volevo un parere su questa risoluzione, se l'esercizio mi chiede:

I. dichiara un vettore x di 500 int.
II. dichiara una variabile y di tipo int;
III. dichiara una variabile t di tipo int;
IV. leggere da standard input una sequenza di numeri interi e per ogni numero m della sequenza inserire m nel vettore x solo se m è maggiore del prodotto dei valori che progressivamente vengono inseriti nel vettore x.

è giusto risolverlo in questo modo?
int main()
{
	int x[500], y, t, m, i, prodotto = 1;

	do{
		cin >> m;
		prodotto = prodotto*m;
		if (m > prodotto)
		{
			x[i] = m;
			i++;
		}
	} while (!(m > prodotto));

15 Risposte

  • Re: Sequenza

    Ma tu non provi mai il tuo codice?
  • Re: Sequenza

    oregon ha scritto:


    Ma tu non provi mai il tuo codice?
    Si, ma dato che non mi usciva ho chiesto spiegazione (dato che credevo fosse giusto)
  • Re: Sequenza

    Che vuol dire "non ti usciva"? (anche in italiano, non capisco)

    Perché non dici esattamente cosa hai provato a fare, quali valori hai inserito in input e cosa ti ha dato in output.

    E' vero che qui diamo una mano, ma lo facciamo volontariamente e nel tempo disponibile, devi facilitare il compito, non siamo tutor a disposizione.

    Pensa alle prime tre linee che hai scritto

    cin >> m;
    prodotto = prodotto*m;
    if (m > prodotto)

    All'inizio inserirai un numero (diciamo 5) che moltiplichi per 1, risultato il numero m che hai inserito.
    Poi esegui una if con m>prodotto che non potrà MAI essere vera perché all'inizio m è uguale a prodotto.

    Quindi?
  • Re: Sequenza

    oregon ha scritto:


    Che vuol dire "non ti usciva"? (anche in italiano, non capisco)

    Perché non dici esattamente cosa hai provato a fare, quali valori hai inserito in input e cosa ti ha dato in output.

    E' vero che qui diamo una mano, ma lo facciamo volontariamente e nel tempo disponibile, devi facilitare il compito, non siamo tutor a disposizione.

    Pensa alle prime tre linee che hai scritto

    cin >> m;
    prodotto = prodotto*m;
    if (m > prodotto)

    All'inizio inserirai un numero (diciamo 5) che moltiplichi per 1, risultato il numero m che hai inserito.
    Poi esegui una if con m>prodotto che non potrà MAI essere vera perché all'inizio m è uguale a prodotto.

    Quindi?
    Non avevo visto la risposta, scusa!

    Allora inserisco un m=5, il prodotto (che avevo inizializzato a 1) diventa 5, m>prodotto? No quindi salto l'if... m è minore del prodotto? No..quindi inserisco un altro valore m=6, il prodotto diventa 30, m>prodotto? No quindi salto l'if...m è minore del prodotto?Si quindi esco dal do-while

    giusto?
  • Re: Sequenza

    Non vanno bene due cose

    1) i non ha valore all'inizio, devi azzerarlo

    2) l'esercizio parla di confrontare m con il prodotto dei valori inseriti in x, non con tutti
  • Re: Sequenza

    giulia18395 ha scritto:


    Ciao! Volevo un parere su questa risoluzione, se l'esercizio mi chiede:

    I. dichiara un vettore x di 500 int.
    II. dichiara una variabile y di tipo int;
    III. dichiara una variabile t di tipo int;
    IV. leggere da standard input una sequenza di numeri interi e per ogni numero m della sequenza inserire m nel vettore x solo se m è maggiore del prodotto dei valori che progressivamente vengono inseriti nel vettore x.
    Il codice che hai postato presenta sicuramente degli errori, per esempio oltre a quello segnalato da @oregon relativo allo sbagliato posizionamento dell'istruzione
    prodotto = prodotto*m;
    c'è anche il fatto che non inizializzi correttamente la variabile i, ma lasciamo perdere... vorrei invece approfittarne per ribadire che per me esercizi di questo genere, come altri assegnati dal tuo prof, sono inutilmente criptici e hanno scarsissimo valore didattico!
    Nel caso specifico:
    - i punti II e III a cosa servono se poi le variabili y e t non vengono menzionate nei punti successivi?!
    - quando il vettore x è ancora "vuoto", quanto vale il prodotto?
    - l'inserimento deve terminare appena si inserisce un valore di m che non sia maggiore del prodotto corrente (come mi sembra di capire tu abbia inteso) o fin quando il vettore x non viene riempito completamente?
    - in quest'ultimo caso sei cosciente del fatto che andrai incontro ad un overflow molto ma moooooooolto prima di inserire 500 elementi nel vettore x?
    - finora ho dato per scontato che vengano inseriti valori positivi, ma avendo a che fare con int, sono ovviamente ammessi anche zero e numeri negativi... a tal proposito ipotizziamo che il primo valore letto venga inserito nel vettore x senza essere sottoposto a nessun controllo e che la variabile che tu chiami prodotto venga inizializzata a tale valore... ebbene in una situazione del genere il vettore x può essere riempito completamente senza andare incontro all'overflow ricorrendo ad una sequenza del genere:
    a) 0 5 1 33 1 7 1 1 7 5 -14 1 ...
    b) -1 1 1 1 1 1 1 1 1 1 1 1 1 ...
  • Re: Sequenza

    oregon ha scritto:


    Non vanno bene due cose

    1) i non ha valore all'inizio, devi azzerarlo

    2) l'esercizio parla di confrontare m con il prodotto dei valori inseriti in x, non con tutti
    Quindi prodotto=prodotto*m; devo inserirlo nell'if?
    int main()
    {
       int x[500], y, t, m, i=0, prodotto = 1;
    
       do{
          cin >> m;
          
          if (m > prodotto)
          {
             prodotto = prodotto*m;
             x[i] = m;
             i++;
          }
       } while (!(m > prodotto));
  • Re: Sequenza

    Nippolo ha scritto:


    giulia18395 ha scritto:


    Ciao! Volevo un parere su questa risoluzione, se l'esercizio mi chiede:

    I. dichiara un vettore x di 500 int.
    II. dichiara una variabile y di tipo int;
    III. dichiara una variabile t di tipo int;
    IV. leggere da standard input una sequenza di numeri interi e per ogni numero m della sequenza inserire m nel vettore x solo se m è maggiore del prodotto dei valori che progressivamente vengono inseriti nel vettore x.
    Il codice che hai postato presenta sicuramente degli errori, per esempio oltre a quello segnalato da @oregon relativo allo sbagliato posizionamento dell'istruzione
    prodotto = prodotto*m;
    c'è anche il fatto che non inizializzi correttamente la variabile i, ma lasciamo perdere... vorrei invece approfittarne per ribadire che per me esercizi di questo genere, come altri assegnati dal tuo prof, sono inutilmente criptici e hanno scarsissimo valore didattico!
    Nel caso specifico:
    - i punti II e III a cosa servono se poi le variabili y e t non vengono menzionate nei punti successivi?!
    - quando il vettore x è ancora "vuoto", quanto vale il prodotto?
    - l'inserimento deve terminare appena si inserisce un valore di m che non sia maggiore del prodotto corrente (come mi sembra di capire tu abbia inteso) o fin quando il vettore x non viene riempito completamente?
    - in quest'ultimo caso sei cosciente del fatto che andrai incontro ad un overflow molto ma moooooooolto prima di inserire 500 elementi nel vettore x?
    - finora ho dato per scontato che vengano inseriti valori positivi, ma avendo a che fare con int, sono ovviamente ammessi anche zero e numeri negativi... a tal proposito ipotizziamo che il primo valore letto venga inserito nel vettore x senza essere sottoposto a nessun controllo e che la variabile che tu chiami prodotto venga inizializzata a tale valore... ebbene in una situazione del genere il vettore x può essere riempito completamente senza andare incontro all'overflow ricorrendo ad una sequenza del genere:
    a) 0 5 1 33 1 7 1 1 7 5 -14 1 ...
    b) -1 1 1 1 1 1 1 1 1 1 1 1 1 ...
    Questo "pezzo" di programma l'ho estrapolato io da un programma più grande,dato che avevo dubbi solo su questa parte Per le altre cose non posso che darti ragione (anche perchè il mio indirizzo di studio non è informatica )
  • Re: Sequenza

    giulia18395 ha scritto:


    Quindi prodotto=prodotto*m; devo inserirlo nell'if?
    int main()
    {
       int x[500], y, t, m, i=0, prodotto = 1;
    
       do{
          cin >> m;
          
          if (m > prodotto)
          {
             prodotto = prodotto*m;
             x[i] = m;
             i++;
          }
       } while (!(m > prodotto));
    - perchè dichiari le variabili y e t?
    - sei cosciente del fatto che !(m>prodotto) coincide con m<=prodotto?
    - non credi manchi qualche controllo circa la dimensione dell'array? Cosa succede se per ipotesi i assume valori maggiori di 499?

    giulia18395 ha scritto:


    Questo "pezzo" di programma l'ho estrapolato io da un programma più grande,dato che avevo dubbi solo su questa parte
    Per toglierci ogni dubbio sulla bontà della traccia potresti postare il testo completo dell'esercizio!

    giulia18395 ha scritto:


    Per le altre cose non posso che darti ragione (anche perchè il mio indirizzo di studio non è informatica )
    Non so quanto attentamente tu abbia letto il mio precedente post, ma ti rendi conto che inizializzando prodotto a 1 diventa assolutamente impossibile andare a riempire anche solo per metà il vettore x?
    Se posso chiedere, quale sarebbe il tuo indirizzo? In ogni caso non può essere una scusa per non ragionare sulle cose!
  • Re: Sequenza

    Nippolo ha scritto:


    giulia18395 ha scritto:


    Quindi prodotto=prodotto*m; devo inserirlo nell'if?
    int main()
    {
       int x[500], y, t, m, i=0, prodotto = 1;
    
       do{
          cin >> m;
          
          if (m > prodotto)
          {
             prodotto = prodotto*m;
             x[i] = m;
             i++;
          }
       } while (!(m > prodotto));
    - perchè dichiari le variabili y e t?
    - sei cosciente del fatto che !(m>prodotto) coincide con m<=prodotto?
    - non credi manchi qualche controllo circa la dimensione dell'array? Cosa succede se per ipotesi i assume valori maggiori di 499?

    giulia18395 ha scritto:


    Questo "pezzo" di programma l'ho estrapolato io da un programma più grande,dato che avevo dubbi solo su questa parte
    Per toglierci ogni dubbio sulla bontà della traccia potresti postare il testo completo dell'esercizio!

    giulia18395 ha scritto:


    Per le altre cose non posso che darti ragione (anche perchè il mio indirizzo di studio non è informatica )
    Non so quanto attentamente tu abbia letto il mio precedente post, ma ti rendi conto che inizializzando prodotto a 1 diventa assolutamente impossibile andare a riempire anche solo per metà il vettore x?
    Se posso chiedere, quale sarebbe il tuo indirizzo? In ogni caso non può essere una scusa per non ragionare sulle cose!
    Ogni volta che mi veniva chiesto di fare un prodotto io ho sempre inizializzato prodotto a 1... Per quanto riguarda !(m>prodotto),si ne sono cosciente...ora postol'esercizio completo (che non riesco a copiare nel testo la sommatoria)
  • Re: Sequenza

    La sommatoria l'ho scritta a parole che non so come inserirla qui
    TESTO:
    Scrivere un algoritmo codificato in linguaggio C/C++ che:
    definisce la funzione EstraiIndice con parametri:
    a di tipo vettore di 500 int;
    b di tipo int;
    c di tipo puntatore/riferimento ad un int.
    La funzione deve scrivere nell’area di memoria puntata riferita da c la posizione k di un qualsiasi elemento del vettore a tale che( la sommatoria per i che va da 0 a k-1 di a <b < sommatoria per i che va da k+1 a 499 di a). Se tale indice non esiste la funzione deve scrivere nell’area di memoria puntata riferita da c il valore -1.
    nella funzione main
    dichiara un vettore x di 500 int.
    dichiara una variabile y di tipo int;
    dichiara una variabile t di tipo int;
    leggere da standard input una sequenza di numeri interi e per ogni numero m della sequenza inserire m nel vettore x solo se m è maggiore del prodotto dei valori che progressivamente vengono inseriti nel vettore x.
    ripete le seguenti istruzioni che devono terminare quando l’esecuzione della funzione EstraiIndice() da come risultato il valore -1:
    inserire nella variabile y un valore intero letto da standard input;
    eseguire la funzione EstraiIndice() applicata al vettore x e al numero y inserendo il risultato nella variabile t;

    #include <iostream>
    using namespace std;
    
    void estraindice(int a[500], int b, int &c)
    {
    	int i, k, prima, dopo;
    	c = -1;
    
    	for (k = 1; k < 499; k++)
    	{
    		prima = 0;
    		for (i = 0; i < k - 1; i++)
    		{
    			prima = prima + a[i];
    		}
    		dopo = 0;
    		for (i = k + 1; i < 500; i++)
    		{
    			dopo = dopo + a[i];
    		}
    
    		if (prima < b && b < dopo)
    		{
    			c = k;
    			break;
    		}
    	}
    }
    int main()
    {
    	int x[500], i, y, t;
    
    	//.......
    
    	do{
    		cin >> y;
    		estraindice(x, y, t);
    
    	} while (!(t == -1));
    
    	return 0;
    }
  • Re: Sequenza

    E' cosi?
    prodotto = x[0];
    	for (i = 1; i < 500; i++)
    	{
    		do{
    			cin >> m;
    			if (m>prodotto)
    			{
    				x[i] = m;
    				prodotto = prodotto*m;
    			}
    		} while (m <= prodotto);
    	}
    
  • Re: Sequenza

    giulia18395 ha scritto:


    Ogni volta che mi veniva chiesto di fare un prodotto io ho sempre inizializzato prodotto a 1...
    Il mio consiglio è quello di ragionare e di non fare le cose meccanicamente.

    In ogni caso ti ho chiesto la traccia solo per verificare se la tua estrapolazione fosse corretta, e mi sembra che lo sia.
    Per ora tralasciamo la restante parte dell'esercizio e concentriamoci sulla questione iniziale!

    giulia18395 ha scritto:


    E' cosi?
    prodotto = x[0];
    	for (i = 1; i < 500; i++)
    	{
    		do{
    			cin >> m;
    			if (m>prodotto)
    			{
    				x[i] = m;
    				prodotto = prodotto*m;
    			}
    		} while (m <= prodotto);
    	}
    
    Per risponderti devi prima farmi capire quale sia la tua interpretazione dell'esercizio rispondendo alle seguenti domande che ti ho già posto in precedenza:
    - quando il vettore x è ancora "vuoto", quanto deve valere la variabile che tu chiami prodotto? 1 come nel tuo precedente codice (il che si traduce nel fatto che x potrà contenere solo valori maggiori di 1) oppure ritieni migliore la strada che ho ipotizzato io circa il fatto di porre prodotto=x[0]?
    - quando deve terminare la lettura da standard input? Quando si inserisce un valore di m che non sia maggiore del prodotto corrente o solo quando il vettore x è stato riempito completamente?
  • Re: Sequenza

    Nippolo ha scritto:


    giulia18395 ha scritto:


    Ogni volta che mi veniva chiesto di fare un prodotto io ho sempre inizializzato prodotto a 1...
    Il mio consiglio è quello di ragionare e di non fare le cose meccanicamente.

    In ogni caso ti ho chiesto la traccia solo per verificare se la tua estrapolazione fosse corretta, e mi sembra che lo sia.
    Per ora tralasciamo la restante parte dell'esercizio e concentriamoci sulla questione iniziale!

    giulia18395 ha scritto:


    E' cosi?
    prodotto = x[0];
    	for (i = 1; i < 500; i++)
    	{
    		do{
    			cin >> m;
    			if (m>prodotto)
    			{
    				x[i] = m;
    				prodotto = prodotto*m;
    			}
    		} while (m <= prodotto);
    	}
    
    Per risponderti devi prima farmi capire quale sia la tua interpretazione dell'esercizio rispondendo alle seguenti domande che ti ho già posto in precedenza:
    - quando il vettore x è ancora "vuoto", quanto deve valere la variabile che tu chiami prodotto? 1 come nel tuo precedente codice (il che si traduce nel fatto che x potrà contenere solo valori maggiori di 1) oppure ritieni migliore la strada che ho ipotizzato io circa il fatto di porre prodotto=x[0]? Meglio porre prodotto=x[0];
    - quando deve terminare la lettura da standard input? Quando si inserisce un valore di m che non sia maggiore del prodotto corrente o solo quando il vettore x è stato riempito completamente?
    Quando trovo un m che non sarà più > prodotto
Devi accedere o registrarti per scrivere nel forum
15 risposte