Dubbio sul for/if

di il
4 risposte

Dubbio sul for/if

Ciao!
Ho questo esercizio: definire due vettori a[10] intero e b[5] intero. Inserire in ogni posizione del vettore a un valore letto da standard input copia poi il valore al posto 0 del vettore a nel posto 0 di b.
Analizzando sequenzialmente il vettore a (partendo dal secondo posto), copia l'elemento del vettore a nel vettore b solo se è maggiore dell'elemento precedente. L'operazione termina quando sono stati esaminati tutti gli elementi del vettore a oppure quando sono stati copiati 5 valori in b.


io l'ho risolto così:
#include <iostream>
using namespace std;

int main()
{
	int i, j=0;
	int a[10], b[5];

	for (i = 0; i < 10; i++)
	{
		cout << "inserire valore nel vettore a: ";
		cin >> a[i];
	}
	a[0] = b[0];

	do
	{
		for (i = 1; i < 10; i++)
		{
			if (a[i]>a[i - 1])
			{
				b[j] = a[i];
				j++;
			}
		}
	} while (i < 10 && j < 5);

	for (j = 0; j < 5; j++)
	{
		cout << "vettore b: " << b[j] << endl;
	}

	system("pause");
	return 0;
}
Guardando la soluzione mi accorgo che il prof invece nel do-while non ha messo il ciclo for ma solo:
do{
if (a[i]>a[i-1])
{
b[j]=a[i];
i++;
}
j++;
} while (i < 10 && j < 5);
inizializzando sia i che j a 1, dite che il mio va bene lo stesso? Anche perchè compila giusto (almeno per me)

4 Risposte

  • Re: Dubbio sul for/if

    giulia18395 ha scritto:


    copia poi il valore al posto 0 del vettore a nel posto 0 di b
    Se scrivi a[0]=b[0]; non stai facendo l'esatto contrario?!
    Inoltre se fai partire j da 0 allora il suddetto passaggio diventa inutile...

    Per quanto riguarda il codice del prof è sbagliato, a meno che tu non abbia commesso qualche errore nel ricopiarlo qui sul forum. In pratica le istruzioni i++ e j++ andrebbero scambiate di posto.

    giulia18395 ha scritto:


    dite che il mio va bene lo stesso?
    No, non va bene e ti spiego il perchè... all'uscita del for i è uguale a 10 e quindi nel momento in cui verrà valutata la condizione del while, il ciclo do/while verrà interrotto senza che la condizione j<5 venga mai valutata. Quindi con questo codice corri il rischio di andare a sovrascrivere aree di memoria che non competono all'array b, in quanto j può assumere valori anche maggiori di 4.
  • Re: Dubbio sul for/if

    Nippolo ha scritto:


    giulia18395 ha scritto:


    copia poi il valore al posto 0 del vettore a nel posto 0 di b
    Se scrivi a[0]=b[0]; non stai facendo l'esatto contrario?!
    Inoltre se fai partire j da 0 allora il suddetto passaggio diventa inutile...

    Per quanto riguarda il codice del prof è sbagliato, a meno che tu non abbia commesso qualche errore nel ricopiarlo qui sul forum. In pratica le istruzioni i++ e j++ andrebbero scambiate di posto.

    giulia18395 ha scritto:


    dite che il mio va bene lo stesso?
    No, non va bene e ti spiego il perchè... all'uscita del for i è uguale a 10 e quindi nel momento in cui verrà valutata la condizione del while, il ciclo do/while verrà interrotto senza che la condizione j<5 venga mai valutata. Quindi con questo codice corri il rischio di andare a sovrascrivere aree di memoria che non competono all'array b, in quanto j può assumere valori anche maggiori di 4.
    1- per quanto riguarda a[0]=b[0] l'ho messo perchè era una richiesta dell'esercizio (anche il prof ha fatto così)
    2- Si errore mio! le istruzuini i++ e j++ vanno invertite.
    3- Quindi quando mi ricapita un'esercizio del genere meglioevitare di mettere il for all'interno del do-while ma inserire solo le condizioni dell'if?

    Grazie mille!
  • Re: Dubbio sul for/if

    giulia18395 ha scritto:


    1- per quanto riguarda a[0]=b[0] l'ho messo perchè era una richiesta dell'esercizio (anche il prof ha fatto così)
    La richiesta dice (anche se in un italiano discutibile) copia poi il valore al posto 0 del vettore a nel posto 0 di b. Io ho inteso che bisogna copiare a in b e in tal caso il codice corretto è b[0]=a[0] e non a[0]=b[0] che invece fa il contrario.
    In ogni caso il fatto che il prof abbia fatto così non significa niente... magari sbaglio io, ma in tal caso fammi capire quale parte del mio ragionamento non ti convince.

    giulia18395 ha scritto:


    3- Quindi quando mi ricapita un'esercizio del genere meglioevitare di mettere il for all'interno del do-while ma inserire solo le condizioni dell'if?
    Mi dispiace, ma non esiste una regola generale... bisogna ragionare volta per volta su quello che si sta facendo!

    P.S.
    Se posso chiedere, superiori o università?
  • Re: Dubbio sul for/if

    Nippolo ha scritto:


    giulia18395 ha scritto:


    1- per quanto riguarda a[0]=b[0] l'ho messo perchè era una richiesta dell'esercizio (anche il prof ha fatto così)
    La richiesta dice (anche se in un italiano discutibile) copia poi il valore al posto 0 del vettore a nel posto 0 di b. Io ho inteso che bisogna copiare a in b e in tal caso il codice corretto è b[0]=a[0] e non a[0]=b[0] che invece fa il contrario.
    In ogni caso il fatto che il prof abbia fatto così non significa niente... magari sbaglio io, ma in tal caso fammi capire quale parte del mio ragionamento non ti convince.

    giulia18395 ha scritto:


    3- Quindi quando mi ricapita un'esercizio del genere meglioevitare di mettere il for all'interno del do-while ma inserire solo le condizioni dell'if?
    Mi dispiace, ma non esiste una regola generale... bisogna ragionare volta per volta su quello che si sta facendo!

    P.S.
    Se posso chiedere, superiori o università?
    Concordo con il b[0]=a[0], ho appena guardato esercizi vecchi e anche io ho sempre fatto così hai ragione! L'ho trascritto male scusa

    Ultimo esame perenne dell'università
Devi accedere o registrarti per scrivere nel forum
4 risposte