Lezione 7 di 7 · 15 min di lettura
Riepilogo e sfida finale
Tutto il modulo in una pagina, un quiz di controllo e un programma completo da scrivere da zero.
Guarda quanta strada
Sette lezioni fa non avevi nemmeno il compilatore. Adesso sai:
- installare
c3c, compilare un file e organizzare un progetto; - leggere un programma C3 riga per riga, sapendo cosa fa ogni parola;
- creare variabili dei tipi giusti e dar loro nomi che il compilatore accetta;
- fare calcoli, evitando la trappola della divisione intera;
- porre domande con i confronti e combinarle con la logica;
- stampare esattamente quello che vuoi, con le cifre e gli spazi che vuoi.
Non è poco. Sono le fondamenta su cui poggia tutto il resto del corso, e per questo motivo vale la pena consolidarle prima di andare avanti.
La pagina da tenere accanto
Questa tabella riassume tutta la sintassi del modulo. Tienila aperta mentre fai la sfida, e torna qui ogni volta che ti serve.
| Cosa | Come si scrive |
|---|---|
| Importare la stampa | import std::io; |
| Punto d’ingresso | fn void main() { ... } |
| Stampare (a capo) | io::printn(x); |
| Stampare formattato | io::printfn("%s is %d years old", name, age); |
| Variabile | int age = 34; |
| Costante | const double VAT = 0.22; |
| Interi | int (32 bit), long (64 bit), char (byte, 0–255) |
| Decimali | double (default), float |
| Vero/falso | bool ok = true; |
| Testo | String s = "hi"; con s.len per la lunghezza |
| Carattere | char c = 'A'; (vale 65) |
| Cast esplicito | int i = (int)7.9; |
| Aritmetica | + - * / %, con / che tronca tra interi |
| Scorciatoie | x += 5; x++; x--; |
| Confronti | == != < > <= >= |
| Logica | && \|\| ! |
| Segnaposto | %s tutto, %d interi, %.2f decimali, %c carattere, %% |
| Larghezza | %5d a destra, %-5d a sinistra, %05d con zeri |
| Commenti | // riga, /* blocco */, <* documentazione *> |
| Compilare e lanciare | c3c compile-run file.c3 oppure c3c run in un progetto |
Le regole dei nomi, in una riga
variabile_o_funzione, TipoDefinito, COSTANTE, modulo_minuscolo. Se te le ricordi, il compilatore ti lascerà in pace.
Quiz di controllo
Tre domande che mescolano tutto. Se le sbagli, non è grave: la spiegazione ti dice in quale lezione tornare.
Quiz
Cosa stampa questo frammento? int a = 10; double b = a / 4; io::printfn("%.1f", b);
Quiz
Quale riga compila senza errori?
Quiz
Con int x = 5;, quanto vale x % 2 == 1 && x > 3 || x == 0?
La sfida: cronaca di una maratona
Ora un programma intero, da zero, senza copiare. Usa tutto quello che sai: costanti, variabili, cast, divisione intera e resto, confronti e formattazione.
Esercizio · sul tuo computer
Cronaca di una maratona
Scrivi marathon.c3. Un’atleta ha corso una maratona in 3 ore, 45 minuti e 30 secondi. La distanza della maratona è 42 195 metri: mettila in una costante int chiamata DISTANCE_M.
Il programma deve calcolare e stampare, in questo ordine:
- la distanza in chilometri con 3 decimali;
- il tempo nel formato
3h 45m 30s, seguito tra parentesi dal totale in secondi; - la velocità media in km/h con 2 decimali (chilometri diviso ore; le ore sono i secondi totali diviso 3600, in decimale);
- il passo, cioè quanti secondi servono per un chilometro, espresso come
5 min 20 s per km: calcola i secondi totali diviso i chilometri, troncalo a intero con un cast, poi usa/ 60e% 60; - se il tempo è sotto le 4 ore, stampando un
bool.
L’output atteso, carattere per carattere:
Distance: 42.195 km
Time: 3h 45m 30s (13530 seconds)
Average speed: 11.23 km/h
Pace: 5 min 20 s per km
Under 4 hours: trueSuggerimento: parti dalle variabili int hours = 3; int minutes = 45; int seconds = 30; e calcola il totale in secondi come hours * 3600 + minutes * 60 + seconds. Ogni riga di output è una printfn con i segnaposto giusti.
Mostra una soluzione (prima prova da solo!)
import std::io;
const int DISTANCE_M = 42195;
fn void main()
{
int hours = 3;
int minutes = 45;
int seconds = 30;
int total_seconds = hours * 3600 + minutes * 60 + seconds;
double distance_km = DISTANCE_M / 1000.0;
double speed = distance_km / (total_seconds / 3600.0);
int pace = (int)(total_seconds / distance_km);
io::printfn("Distance: %.3f km", distance_km);
io::printfn("Time: %dh %dm %ds (%d seconds)", hours, minutes, seconds, total_seconds);
io::printfn("Average speed: %.2f km/h", speed);
io::printfn("Pace: %d min %d s per km", pace / 60, pace % 60);
io::printfn("Under 4 hours: %s", total_seconds < 4 * 3600);
}I punti delicati: DISTANCE_M / 1000.0 (e non / 1000, che darebbe 42), total_seconds / 3600.0 per le ore decimali, e il cast (int) per troncare il passo prima di scomporlo in minuti e secondi.
Cosa succede nel Modulo 2
Finora i tuoi programmi sono stati una lista di istruzioni eseguite dall’alto in basso. Il prossimo modulo è quello in cui i programmi cominciano a pensare: con if prenderanno decisioni, con for e while ripeteranno le cose, e con le funzioni imparerai a dare un nome a un pezzo di lavoro per riusarlo. È il modulo in cui si passa da “scrivere istruzioni” a “programmare”.
Prenditi una pausa, ripassa la tabella se serve, e quando sei pronto segna questa lezione come completata. Ci vediamo di là.