Il problema FizzBuzz in C e C++
In questa lezione stamperai Fizz, Buzz o FizzBuzz per i numeri da 1 a 15 usando un ciclo e le istruzioni condizionali.
Introduzione
FizzBuzz è un esercizio di programmazione classico: per ogni numero da 1 a 15, stampa Fizz se è divisibile per 3, Buzz se è divisibile per 5, FizzBuzz se è divisibile per entrambi e, negli altri casi, il numero stesso. L'esercizio allena i cicli, il resto della divisione e l'ordine delle condizioni.
Punti importanti
- Attiva gli avvisi del compilatore (compiler warning) e correggili tutti.
- Comprendi bene il tipo di dato e la durata (lifetime) di ogni valore.
- Controlla sempre i dati in ingresso e i limiti degli indici degli array.
Esempi di codice C e C++
#include <stdio.h>
int main(void) {
for (int n = 1; n <= 15; ++n) {
// Check the most specific condition first.
if (n % 15 == 0) puts("FizzBuzz");
else if (n % 3 == 0) puts("Fizz");
else if (n % 5 == 0) puts("Buzz");
else printf("%d\n", n);
}
}
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
#include <iostream>
int main() {
for (int n = 1; n <= 15; ++n) {
// Check the most specific condition first.
if (n % 15 == 0) std::cout << "FizzBuzz\n";
else if (n % 3 == 0) std::cout << "Fizz\n";
else if (n % 5 == 0) std::cout << "Buzz\n";
else std::cout << n << '\n';
}
}
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
Confronto tra C e C++
La condizione n % 15 == 0, cioè divisibile sia per 3 sia per 5, va controllata per prima. Se controllassi prima la divisibilità per 3, il 15 verrebbe stampato come Fizz e non arriverebbe mai al ramo FizzBuzz. Ordinare le condizioni dalla più specifica alla più generale è il punto chiave di questo esercizio.
C usa piccole funzioni procedurali e mostra apertamente come i dati sono rappresentati in memoria.
C++ continua a permettere il lavoro a basso livello, ma aggiunge tipi di libreria e astrazioni più sicure.
Esercizi di approfondimento
Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.
- Prova input non validi e valori ai limiti.
- Compila con i flag -Wall -Wextra -Wpedantic per attivare più avvisi.
- Sposta le dichiarazioni condivise in un file header e l'implementazione in un altro file.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
Tutte le sfide