Chiarimento su una iterazione di un programma

di il
4 risposte

Chiarimento su una iterazione di un programma

Salve a tutti come vedete sono nuovo del forum e ne approfitto per salutarvi tutti e facendovi i complimenti per l'ottimo forum che avete creato; detto questo, ultimamente sto iniziando a programmare in c e mi trovo difronte a qualche difficoltà, in particolare non riesco a capire come viene eseguita una certa istruzione:

int x=7,y=4,t=1;
for(;--x>0;y--);
y=y-x--;

A quanto ho capito partendo dal for , viene decrementata la x di uno(7-1=6) e viene verificata la condizione x>0 che se vera fà eseguire l'istruzione y=y-x--, cioè in questo caso y=4-6=-2 e dopo di che viene decrementata la x di 1 quindi (6-1=5), dopo di che viene decrementata y di 1 quindi(4-1=3) e successivamente si ricomincia tutto da capo fino a quando non è più verificata la condizione x>0....ora vorrei sapere da voi esperti se ho messo i valori correttemente e soprattutto se il ragionamento è giusto..cosa ne pensate???
Il fatto è che compilando il programma mi viene un output che non riesco a riprodurre facendo i conti manualmente. aiutatemi please GRAZIE


Un'altra cosa...volevo sapere se nel compilatore DEV c++ oppure in qualche altro compilatore ci fosse la possibilità di visualizzare oltre al risultato finale del programma compilato quindi l'output ma anche tutte le iterazioni una ad una che hanno portato all'output finale, per permettermi di capire come si svolge ogni iterazione in modo da sapere come sia venuto fuori l'output finale, spero di essere stato chiaro.

4 Risposte

  • Re: Chiarimento su una iterazione di un programma

    I costrutti di iterazione e le istruzioni condizionali non richiedono il punto e virgola come terminatore di istruzione.
    Nel tuo caso non viene eseguita nessuna operazione o meglio non è presente nessuna istruzione tra for e punto e virgola. All'uscita della condizione per 'x>0' viene eseguita l'istruzione 'y=y-x--;'
    Un'altra cosa...volevo sapere se nel compilatore DEV c++ oppure in qualche altro compilatore ci fosse la possibilità di visualizzare oltre al risultato finale del programma compilato quindi l'output ma anche tutte le iterazioni...
    Esistono i debugger, programmi che consentono di controllare il programma passo-passo analizzando le variabili e molto altro. Quando non esistevano si utilizzavano delle printf poste nei punti critici per visualizzare valori temporanei. Programmi complessi hanno tuttavia al loro interno istruzioni di debug che normalmente scrivono 'malfunzionamenti' sullo stream stderr e molto spesso usano anche file di log per tracciare eventuali anomalie.

    Saluti,
    Max
  • Re: Chiarimento su una iterazione di un programma

    costrutti di iterazione e le istruzioni condizionali non richiedono il punto e virgola come terminatore di istruzione.
    Hai pienamente ragione, infatti è stato un mio errore di trascrizione perchè rivedendo il programma ho visto che il ; non è presente, però vorrei sapere se il mio ragionamento sull'istruzione y=y-x-- è giusta cioè: valutata la condizione x>0 come vera, viene eseguita l'istruzione, quindi prima viene eseguita la parte y-x e poi viene decrementata la x di 1 giusto?? a questo punto viene rivalutata la condizione x>0, ma in questo caso la x che viene rivalutata è sempre la stessa che ho decrementato un'attimo fà? oppure sono 2 x diverse? Anche perchè nella condizione abbiamo --x>0 quindi se fosse la stessa gni volta che si esegue l'istruzionela x si decrementa 2 volte: 1 volta nella condizione e 1 volta nell'istruzione y=y-x--. In pratica ho dei dubbi su queste maledette decrementazioni che mi confondono .

    La parte giusta di programma è questa:
    int x=7, y=4, t=1;
    for(; --x>0: y--)
    y=Y-x--;
    t+=2*x+y;
    printf...........ecc ecc


    un'altra cosa che significa x%2?
    nell'istruzione t+=funz (a) dove a=t e t=2, funz che operazione esegue??
  • Re: Chiarimento su una iterazione di un programma

    valutata la condizione x>0 come vera, viene eseguita l'istruzione, quindi prima viene eseguita la parte y-x e poi viene decrementata la x di 1 giusto??
    giusto. (tieni presente che prima di verificare la condizione x viene decrementata)
    a questo punto viene rivalutata la condizione x>0, ma in questo caso la x che viene rivalutata è sempre la stessa che ho decrementato un'attimo fà? oppure sono 2 x diverse?
    è sempre la stessa
    Anche perchè nella condizione abbiamo --x>0 quindi se fosse la stessa gni volta che si esegue l'istruzionela x si decrementa 2 volte: 1 volta nella condizione e 1 volta nell'istruzione y=y-x--.
    infatti x viene decrementata in 2 punti.
    un'altra cosa che significa x%2?
    è l'operatore modulo. Restituisce il resto della divisione tra x e 2
    nell'istruzione t+=funz (a) dove a=t e t=2, funz che operazione esegue??
    esegue un'addizione equilavalente a t=t+funz (a). Per sapere il risultato bisogna conoscere il valore restituito dalla funz (a).

    Saluti,
    Max
  • Re: Chiarimento su una iterazione di un programma

    Max sei un grande!!! grazie mille!!!


    Per sapere che valore restituisce la funz(A) ?

    il programma è così:

    int funz (int)
    main()
    {
    int a=7, t=2;
    t+=funz(a);
    printf("t=%d.... ecc ecc
Devi accedere o registrarti per scrivere nel forum
4 risposte