Le fasi del problem solving
- Analizzare il problema: capire che cosa è dato (input), che cosa si vuole (output) e quali sono le regole.
- Costruire un algoritmo: scrivere la soluzione in passi chiari e ordinati.
- Programmare: trasformare l'algoritmo in un programma in un linguaggio come Python.
- Testare: eseguirlo con molti dati diversi, compresi i casi limite (0, numeri negativi, valori molto grandi).
- Fare il debug: trovare e correggere gli errori; poi testare di nuovo.
Un algoritmo deve avere: input e output chiari, un numero finito di passi (deve fermarsi), passi precisi (senza dubbi) e deve dare il risultato corretto.
Diagrammi di flusso
Un diagramma di flusso è il disegno di un algoritmo, fatto con simboli standard uniti da frecce.
- Ovale (terminale): inizio / fine.
- Parallelogramma: input / output.
- Rettangolo: elaborazione (un calcolo o un'assegnazione).
- Rombo: decisione; una freccia entra, due escono (Sì/No).
- Freccia: direzione del percorso.
I diagrammi di flusso si capiscono bene a colpo d'occhio, ma diventano enormi quando il problema è grande.
Pseudocodice
Il pseudocodice scrive un algoritmo con frasi semplici, simili al linguaggio di tutti i giorni, e parole chiave come INPUT, COMPUTE, PRINT, IF…ELSE, WHILE. Non è un vero linguaggio, quindi non servono regole di scrittura rigide.
INPUT A, B
IF A > B THEN
PRINT A
ELSE
PRINT BGli algoritmi possono avere sequenza (passi uno dopo l'altro), selezione (decisioni con IF) e ripetizione (cicli).
Scomposizione
La scomposizione significa dividere un problema complesso in problemi più piccoli e semplici. Ogni parte viene risolta (spesso da una persona o da una funzione diversa) e poi le parti si uniscono.
Esempio: un sistema di prenotazione dei treni si scompone in: cercare i treni, controllare i posti, prenotare il biglietto, incassare il pagamento, stampare il biglietto.
Vantaggi: si capisce meglio, il lavoro si può dividere, gli errori si trovano più facilmente e le parti si possono riutilizzare.
Cosa chiedono a scuola e all'esame
Di solito si chiede di: disegnare un diagramma di flusso o scrivere il pseudocodice di compiti semplici (il maggiore tra due numeri, la somma dei primi n numeri, pari/dispari, un voto a partire dal punteggio), dare il nome ai simboli, elencare le fasi del problem solving e spiegare la scomposizione con un esempio.
Formule e definizioni chiave
- Problem solving: Analyse → Algorithm → Code → Test → Debug
- Algoritmo = passi finiti, precisi e ordinati, con input e output
- Ovale = inizio/fine; Parallelogramma = I/O; Rettangolo = elaborazione; Rombo = decisione
- Blocchi base: sequenza, selezione, ripetizione
Esempi svolti
1. Scrivi un algoritmo per trovare l'area di un rettangolo.
1. Inizio. 2. Input lunghezza L e larghezza B. 3. Area = L × B. 4. Stampa Area. 5. Fine.
2. Scrivi il pseudocodice per controllare se un numero è pari o dispari.
INPUT N IF N MOD 2 = 0 THEN PRINT "Pari" ELSE PRINT "Dispari"
3. Descrivi un diagramma di flusso che stampa la somma dei numeri da 1 a 10.
Inizio → elaborazione: sum = 0, i = 1 → decisione: i <= 10? → Sì: elaborazione sum = sum + i, i = i + 1, freccia che torna alla decisione → No: output sum → Fine.
4. Scomponi il problema 'organizzare una giornata sportiva a scuola'.
Sotto-problemi: elencare le gare, iscrivere gli studenti, preparare il campo e le attrezzature, fare il calendario, giudicare e registrare i risultati, consegnare i premi. Ogni parte può essere gestita da un gruppo e poi tutto si unisce.
5. Segui il diagramma di flusso del numero maggiore per A = 5, B = 12.
Inizio → input A = 5, B = 12 → 5 > 12? No → stampa B = 12 → Fine.
6. Scrivi il pseudocodice per stampare il voto: punteggio ≥ 90 → A, ≥ 75 → B, altrimenti C.
INPUT M IF M >= 90 THEN PRINT "A" ELSE IF M >= 75 THEN PRINT "B" ELSE PRINT "C"
Errori comuni
- Usare un rettangolo per una decisione. Le decisioni usano sempre un rombo con uscite Sì/No.
- Scrivere un algoritmo che non finisce mai. Un algoritmo deve essere finito.
- Non testare il programma con dati insoliti come 0 o numeri negativi.
- Confondere input/output (parallelogramma) con elaborazione (rettangolo).