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.

CosaCome si scrive
Importare la stampaimport std::io;
Punto d’ingressofn void main() { ... }
Stampare (a capo)io::printn(x);
Stampare formattatoio::printfn("%s is %d years old", name, age);
Variabileint age = 34;
Costanteconst double VAT = 0.22;
Interiint (32 bit), long (64 bit), char (byte, 0–255)
Decimalidouble (default), float
Vero/falsobool ok = true;
TestoString s = "hi"; con s.len per la lunghezza
Caratterechar c = 'A'; (vale 65)
Cast esplicitoint i = (int)7.9;
Aritmetica+ - * / %, con / che tronca tra interi
Scorciatoiex += 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 lanciarec3c 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:

  1. la distanza in chilometri con 3 decimali;
  2. il tempo nel formato 3h 45m 30s, seguito tra parentesi dal totale in secondi;
  3. la velocità media in km/h con 2 decimali (chilometri diviso ore; le ore sono i secondi totali diviso 3600, in decimale);
  4. 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 / 60 e % 60;
  5. se il tempo è sotto le 4 ore, stampando un bool.

L’output atteso, carattere per carattere:

output
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: true

Suggerimento: 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!)
marathon.c3
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à.