Domanda su ciclo for

di il
7 risposte

Domanda su ciclo for

Buongiorno a tutti,
ho una difficoltà legata ad una iterazione in ciclo for.
posto di seguito la parte di programma relativa:

int i;
int responses[20]={5,8,2,8,9,8,7,7,8,10,8,9,7,7,5,5,9,4,2};
int frequency[11]={0};

for(i=1;i<=20;i++)
++frequency[responses]

cosa vuol dire il comando riferito alla seconda riga? posso interpretare come:" prendi gli elementi del vettore responses per 20 volte, inseriscili all'interno di frequency avanzando di un elemento alla volta"
cosa accade esattamente, visto che il vettore frequency è composto di 11 elementi, e l'iterazione è di 20?
grazie.
SERENA

7 Risposte

  • Re: Domanda su ciclo for

    Intanto il ciclo è sbagliato ... come detto altre volte gli indici degli array in C vanno da 0 a n-1
    Quindi la corretta scrittura è

    for(i=0;i<20;i++)

    In questo caso l'indice varia tra 0 e 19 e l'elemento responses[20] non esiste.

    Per capire il resto, basta che tu scriva cosa fa il ciclo for ... questo esegue

    ++frequency[responses[0]]
    ++frequency[responses[1]]
    ++frequency[responses[2]]
    ++frequency[responses[3]]
    ...
    ++frequency[responses[18]]
    ++frequency[responses[19]]

    che corrisponde a

    ++frequency[5]
    ++frequency[8]
    ++frequency[2]
    ++frequency[8]
    ...
    ++frequency[4]
    ++frequency[2]

    Compreso ora?
  • Re: Domanda su ciclo for

    Ciao e grazie, credo di sì.
    il ciclo for successivo però parte da 1, come mai?

    for(j=1;j<=10;j++)
    printf("%d%17d",j,frequency[j])

    come mai risulta una tabella come sotto? cosa sto ordinando al pc, stampa che cosa?
    per esempio, se j=1, frequency[1] perchè risulta uguale a 2? scusate le domande banali ma sono super principiante.

    1 2
    2 2
    3 2
    4 2
    5 5
    6 11
    7 5
    8 7
    9 1
    10 3
  • Re: Domanda su ciclo for

    Anche questo è sbagliato. Deve partire da 0

    for(j=0;j<10;j++)
  • Re: Domanda su ciclo for

    perchè risulta uguale a 2?
    Perché quell'elemento del vettore è stato incrementato 2 volte
  • Re: Domanda su ciclo for

    serenazoso ha scritto:


    cosa accade esattamente, visto che il vettore frequency è composto di 11 elementi, e l'iterazione è di 20?
    grazie.
    SERENA
    probabilmente su un pc moderno, avendo a disposizione tanta memoria per immagazinare un semplice array, non accade nulla di strano, ma andare in overflow con gli indici degli array è uno degli errori più gravi e dannosi che si possano fare: giocare con la memoria è "bello" perchè ti permette di fare qualsiasi cosa, ma se sbagli...
    soprattutto evita assolutamente questo errore con array a più dimensioni, in quanto con questi sì che accade qualcosa anche con un pc con tanta memoria.
  • Re: Domanda su ciclo for

    Beh ma anche se hai tantissima memoria: sforare con gli indici può generare comunque situazioni inattese e comportamenti apparentemente inspiegabili (non necessariamente crash)
    int array[10];
    int miavar;
    
    miavar = 1;
    array[10] = 2;
    //...
    
    Nell'esempio qui sopra c'è la seria probabilità che in miavar ci sia un bel 2
  • Re: Domanda su ciclo for

    candaluar ha scritto:


    Beh ma anche se hai tantissima memoria: sforare con gli indici può generare comunque situazioni inattese e comportamenti apparentemente inspiegabili (non necessariamente crash)
    int array[10];
    int miavar;
    
    miavar = 1;
    array[10] = 2;
    //...
    
    Nell'esempio qui sopra c'è la seria probabilità che in miavar ci sia un bel 2
    certo, c'è comunque il rischio ed è una cosa da non fare.
    con le matrici invece se si va in overflow c'è sempre un errore.
Devi accedere o registrarti per scrivere nel forum
7 risposte