libri-javascript-python

In questa lezione svilupperemo un algoritmo per la successione di Fibonacci in C. La successione di Fibonacci è un classico esempio di sequenza numerica che si basa sulla somma dei due numeri precedenti. Iniziamo con una breve spiegazione di cosa sia la successione di Fibonacci e poi procediamo a sviluppare un programma in linguaggio C che chieda all’utente il numero di termini della successione che desidera visualizzare e poi li mostri a video.

Ricordiamo che la successione di Fibonacci è una sequenza di numeri interi positivi in cui ciascun numero, a partire dal terzo, è la somma dei due numeri precedenti. I primi due numeri della successione sono 1, 1. Quindi, la sequenza procede come segue: 1, 1, 2, 3, 5, 8, 13, 21, 34 e così via.

La successione di Fibonacci in C

#include <stdio.h>

int main() {
    int i, N, primo = 1, secondo = 1, terzo;

    // Chiediamo all'utente quanti numeri della successione desidera visualizzare
    printf("Quanti numeri della successione vuoi visualizzare? ");
    scanf("%d", &N);

    // Se N è minore o uguale a 0, non c'è nulla da visualizzare
    if (N <= 0) {
        printf("N deve essere un numero positivo maggiore di zero.\n");
        return 1; // Segnaliamo un errore al sistema operativo
    }

    // Visualizziamo i primi due numeri della successione (se N >= 1)
    if (N >= 1)
        printf("%d\n", primo);
    if (N >= 2)
        printf("%d\n", secondo);

    // Calcoliamo e visualizziamo i restanti numeri della successione
    for (i = 2; i < N; i++) {
        terzo = primo + secondo;
        primo = secondo;
        secondo = terzo;
        printf("%d\n", terzo);
    }

    return 0;
}

In questo programma, chiediamo all’utente di inserire il numero di termini della successione di Fibonacci che desidera visualizzare. Successivamente, utilizziamo un ciclo for per calcolare e visualizzare i numeri della successione fino al termine desiderato. Da notare anche che abbiamo aggiunto controlli per gestire casi speciali, come quando l’utente inserisce un valore non valido per N.

Spiegazione passo passo dell’algoritmo:

Forniamo adesso una spiegazione passo-passo dell’algoritmo implementato per generare i primi N numeri della successione di Fibonacci:

  1. Inizializzazione delle variabili: All’inizio del programma, dichiariamo le variabili necessarie per gestire il programma. Queste includono i (un contatore per il ciclo), N (il numero di termini della successione da visualizzare), primo e secondo (i primi due numeri della successione), e terzo (il terzo numero della successione).
  2. Input dell’utente: Chiediamo all’utente quanti numeri della successione desidera visualizzare e memorizziamo questa informazione nella variabile N utilizzando la funzione scanf().
  3. Gestione dei casi speciali: Verifichiamo se il valore inserito dall’utente per N è valido. Se N è minore o uguale a 0, stampiamo un messaggio di errore e terminiamo il programma restituendo un codice di errore al sistema operativo. Questo garantisce che l’algoritmo gestisca correttamente casi in cui l’utente inserisce un valore non valido.
  4. Visualizzazione dei primi due numeri della successione: Utilizziamo due istruzioni printf() per visualizzare i primi due numeri della successione di Fibonacci (primo e secondo). Questo è fatto indipendentemente dal valore di N. Se N è uguale a 1, visualizziamo solo il primo numero; se N è uguale a 2, visualizziamo entrambi.
  5. Calcolo dei restanti numeri della successione: Utilizziamo un ciclo for per calcolare e visualizzare i restanti numeri della successione. Iniziamo da i = 2, poiché abbiamo già visualizzato i primi due numeri. Il ciclo continua fino a quando i è inferiore a N. Ad ogni iterazione del ciclo, calcoliamo il valore del successivo numero di Fibonacci terzo sommando i valori di primo e secondo. Quindi aggiorniamo primo e secondo con i valori correnti di secondo e terzo rispettivamente. Infine, stampiamo il valore di terzo.
  6. Conclusione del programma: Terminiamo il programma restituendo 0, indicando che il programma è stato eseguito correttamente.

La successione di Fibonacci in C – versione con il while

Possiamo utilizzare anche un ciclo while per sviluppare l’algoritmo sulla successione di Fibonacci.

Ecco dunque una possibile soluzione:

#include <stdio.h>

int main() {
    int i = 2, N, primo = 1, secondo = 1, terzo;

    // Chiediamo all'utente quanti numeri della successione vuole visualizzare
    printf("Quanti numeri della successione vuoi visualizzare? ");
    scanf("%d", &N);

    // Controllo dei casi speciali
    if (N <= 0) {
        printf("N deve essere un numero positivo maggiore di zero.\n");
        return 1; // Segnaliamo un errore al sistema operativo
    }
    
    // Visualizziamo i primi due numeri della successione
    printf("%d\n", primo);
    printf("%d\n", secondo);

    // Calcoliamo e visualizziamo i restanti numeri della successione
    while (i < N) {
        terzo = primo + secondo;
        primo = secondo;
        secondo = terzo;
        printf("%d\n", terzo);
        i++;
    }

    return 0;
}

In questa versione, utilizziamo un ciclo while per calcolare e visualizzare i numeri della successione di Fibonacci. L’approccio è simile a quello utilizzato con il ciclo for, l’algoritmo continua ad eseguire il ciclo while finché i è minore di N, e ad ogni iterazione calcola visualizza il successivo numero di Fibonacci.

Questo approccio è altrettanto valido e produce lo stesso risultato dell’algoritmo basato su for, offrendo una diversa prospettiva sulla gestione dei cicli in C.

Conclusioni

In questa lezione, abbiamo sviluppato un semplice programma in linguaggio C per visualizzare i primi N numeri della successione di Fibonacci. Questo esempio illustra come sia possibile utilizzare il concetto di sequenza di Fibonacci in un contesto pratico di programmazione. Implementare algoritmi classici come questo può aiutare a migliorare la comprensione dei concetti di base della programmazione e delle strutture dei dati.

Link utili

Corso linguaggio C

Fibonacci

Numero primo

Somma di 10 numeri

Media dei numeri in un array

Selection sort

Insertion sort

Quick sort

Merge sort