Problema con un ciclo for "particolare"

di il
8 risposte

Problema con un ciclo for "particolare"

Salve, mi stavo esercitando sui cicli e c'è una cosa che proprio non riesco a capire:

Si tratta di uno specifico ciclo for (il primo nel seguente codice) del quale faccio fatica a comprenderne il significato e il funzionamento.

Una volta chiarito come funziona, quali potrebbero essere le sue applicazioni pratiche?
Premetto che in generale l'utilizzo dei cicli in C mi è abbastanza chiaro.

In basso, dopo la funzione main ho scritto un commento che specifica i diversi output del programma.

Grazie per la pazienza.

#include <stdio.h>

#define N 10

int main(void) {

	int a[N] = {0}, i, j, flag = 1, *p;


	i=0;

	for(j=i-1; j>i/2; j--) //non capisco il comportamento di questo ciclo, soprattutto la SECONDA ESPRESSIONE.
       a[j] = flag;       
    
	for(p=a; p < a+N; p++) //su questo invece non ho alcun dubbio; so esattamente che si occupa di stampare le celle dell'array a.
       printf(" %d ", *p);
    

return 0;
}

/*

Il codice, al variare del valore di i, genera i seguenti output:

per i=0
STAMPA:    0  0  0  0  0  0  0  0  0  0  

per i=1
STAMPA:    0  0  0  0  0  0  0  0  0  0

per i=2
STAMPA:    0  0  0  0  0  0  0  0  0  0  

per i=3
STAMPA:    0  0  1  0  0  0  0  0  0  0

per i=4
STAMPA:    0  0  0  1  0  0  0  0  0  0 

per i=5
STAMPA:    0  0  0  1  1  0  0  0  0  0

per i=6
STAMPA:     0  0  0  0  1  1  0  0  0  0

per i=7
STAMPA:    0  0  0  0  1  1  1  0  0  0    

per i=8
STAMPA:    0  0  0  0  0  1  1  1  0  0

per i=9
STAMPA:    0  0  0  0  0  1  1  1  1  0

per i=10
STAMPA:    0  0  0  0  0  0  1  1  1  1    

	*** PER i>10 GENERA UN ERRORE DI SEGMENTAZIONE ***
	
*/

8 Risposte

  • Re: Problema con un ciclo for "particolare"

    Quel for non fa niente perché -1 > 0 è falso...
  • Re: Problema con un ciclo for "particolare"

    Non è difficile da capire… se si scrive decentemente quel programma [CODE] for (int j = i - 1; j > i / 2; j—) a[j] = 1; L’array a è inizializzato a 1 per tutti gli indici compresi tra i - 1 e i / 2 (divisione intera)
  • Re: Problema con un ciclo for "particolare"

    Non capisci

    j>i/2 ?

    Ma cosa c'è da capire?
  • Re: Problema con un ciclo for "particolare"

    No, più che altro mi interessava sapere perché a seconda dei valori assunti da i venivano modificate alcune celle dell' array ed altre no.
    Con quale criterio il ciclo seleziona quelle determinate celle di a. (alla fine del programma ho scritto un commento con tutte le stampe dell'array; esse sono diverse per ogni valore assunto da i).

    Volevo sapere come "tradurre" in pseudo codice quel ciclo for e magari riuscire a ragionarci meglio, per capire effettivamente come agisce durante le sue iterazioni...

    Ci tengo a ringraziare tutti coloro che finora mi hanno dato una risposta e mi scuso se non sono stato abbastanza chiaro fin da subito.
  • Re: Problema con un ciclo for "particolare"

    Adesso mi sono perso ... cosa non capisci dunque?
  • Re: Problema con un ciclo for "particolare"

    Per fare un esempio se ho un istruzione tipo: " for(i=0; i<N; i++) ", la "traduco" in " per i che va da 0 ad N-1 esegui il corpo del ciclo, poi incrementa i e vai avanti. "

    Questo "ragionamento" non riesco a farlo con quel ciclo, perché non so tradurre in pseudo codice quelle istruzioni.

    ( in realtà il mio obiettivo originario era riscrivere quel ciclo con l'aritmetica dei puntatori ( e quindi anche " j > i/2 " ), ma poi ho pensato che prima di arrivare a questo, forse avrei dovuto "ragionarci" meglio e ho pensato di chiedere qui ).
  • Re: Problema con un ciclo for "particolare"

    Per j che va da i-1 a i/2 (estremo escluso) contando al contrario ... Sia i-1 che i/2 rappresentano valori prefissati dato un valore di i.
  • Re: Problema con un ciclo for "particolare"

    Perfetto, questo era quello che volevo.
    Grazie mille.
Devi accedere o registrarti per scrivere nel forum
8 risposte