Il problem solving - Corsi di Laurea a Distanza

Programmazione in C
Il problem solving
Programmazione in C
Problem solving elementare su dati scalari
Il problem solving
Problemi numerici
Problemi di codifica/decodifica
Problemi testuali
Problemi di verifica e filtro di dati
Problemi di ordinamento
Sommario
2
© 2006 Politecnico di Torino
1
Programmazione in C
Il problem solving
Riferimenti al materiale
Testi
Kernighan & Ritchie
Cabodi, Quer, Sonza Reorda
Dietel & Dietel
Dispense
Scheda: “Problem solving elementare su dati
scalari”
3
Problem solving elementare su dati scalari
© 2006 Politecnico di Torino
2
Programmazione in C
Il problem solving
Il problem solving
Problem solving e algoritmi
Strategie di soluzione
Classificazione dei problemi
Problemi su dati scalari
5
Il problem solving
© 2006 Politecnico di Torino
3
Programmazione in C
Il problem solving
Problem solving e algoritmi
Con il termine “problem solving” si intende la
soluzione di problemi (computazionali) mediante
programmi (software)
Tale soluzione si concretizza mediante
Una codifica dei dati
La formalizzazione di un algoritmo
La scrittura di un programma C
Tipi e costanti
Variabili (globali, locali) e/o strutture dati dinamiche
Funzioni
7
Struttura dati
La scelta della struttura dati deve tener conto
Della natura del problema, delle informazioni
ricevute in input, dei risultati richiesti
Delle scelte algoritmiche
Scegliere una struttura dati significa decidere
quali (di che tipo) e quante variabili saranno
necessarie per immagazzinare le informazioni
(dati in input, intermedi e risultati)
Talvolta la struttura dati può essere scelta prima
di definire l’algoritmo, ma spesso è necessario
considerare dati e algoritmo insieme
8
© 2006 Politecnico di Torino
4
Programmazione in C
Il problem solving
Algoritmo
Un algoritmo (da Al-Huarizmi, matematico arabo
del IX secolo d.C.) è una sequenza finita di
istruzioni che:
Risolvono un problema
Soddisfano i seguenti criteri
Ricevono valori in ingresso
Producono valori in uscita
Sono chiare, non ambigue ed eseguibili
Terminano dopo un numero finito di passi
Operano su strutture dati
9
Algoritmo = strategia
Scegliere un algoritmo spesso significa
individuare la miglior strategia (= sequenza di
passi) per risolvere un problema
La scelta si basa su
Conoscenza delle operazioni elementari e delle
funzioni di libreria fornite dal linguaggio C
Conoscenza dei costrutti linguistici (tipi di dato,
costrutti condizionali e iterativi)
Esperienza su tipi diversi di problemi
10
© 2006 Politecnico di Torino
5
Programmazione in C
Il problem solving
Il problem solving
Strategia
La maggioranza dei problemi risolti mediante
programmi consiste nell’elaborazione di
informazioni ricevute in input, per produrre
risultati in output
La parte più rilevante è l’elaborazione, che
richiede
Individuazione di dati (risultati intermedi)
I dati possono essere scalari e/o aggregati
Formalizzazione di passi (operazioni) necessarie a
valutare i risultati intermedi (a partire da altri dati)
I passi intermedi sono spesso formalizzati in termini
di costrutti condizionali e/o iterativi. Possono poi
essere modularizzati mediante funzioni
12
© 2006 Politecnico di Torino
6
Programmazione in C
Il problem solving
In pratica !
L’esperienza è un requisito fondamentale (come
in molte altre discipline) per una efficace scelta di
strategie risolutive: un algoritmo (un programma)
è in definitiva un progetto
Lo studio di problemi classici già risolti è un buon
passo di partenza
Talvolta, in mancanza di altri strumenti, un valido
punto di partenza è
L’analisi della soluzione “a mano” o “su carta” del
problema, facendo corrispondere carta (o lavagna)
a variabili e calcoli ed espressioni
13
Scegliere la struttura dati
Scegliere la struttura dati consiste in
Individuare i tipi di informazioni da rappresentare
(input, dati intermedi, risultati): numeri (interi o
reali), caratteri o stringhe, struct?
Decidere se è necessario collezionare i dati in
vettori o matrici (aggregati numerabili) oppure se
sono sufficienti dati scalari (o struct)
Alcuni problemi si risolvono con poche istruzioni
(con costrutti condizionali) su dati scalari
Molti problemi richiedono iterazioni su dati
14
© 2006 Politecnico di Torino
7
Programmazione in C
Il problem solving
Problemi iterativi e vettori
Un problema iterativo non richiede un vettore
quando è sufficiente manipolare il generico (l’iesimo) dato, senza “ricordare” i precedenti
Es. sommatoria, ricerca del massimo
Un problema iterativo richiede un vettore se è
necessario raccogliere/collezionare (in variabili)
tutti i dati, prima di poterli manipolare
Es. input di dati, output in ordine inverso
15
Scegliere l’algoritmo
Individuare l’algoritmo (costrutti if – while –
for, eventualmente annidati, funzioni, ecc.) può
essere decisamente semplice (suggerito
direttamente dal problema)
Es. problemi numerici/matematici
In altri casi scegliere un algoritmo consiste nel
realizzare un vero progetto, confrontando
strategie diverse, valutando pro- e contro(vantaggi e costi)
Es. pianificazione di attività in funzione di criteri di
ottimalità
16
© 2006 Politecnico di Torino
8
Programmazione in C
Il problem solving
Il problem solving
Criteri di classificazione
In questa unità (e nelle successive) si
elencheranno problemi di varia natura, con le
relative soluzioni
I problemi sono solitamente presentati (nei testi
di programmazione) in base alle strutture dati e/o
ai costrutti di controllo utilizzati
I problemi possono essere classificati (in modo
più vicino all’utente, e più lontano dal
programmatore) in base all’ambito applicativo:
Es. problemi numerici, di geometria, di
elaborazione testi, di ricerca di dati, ecc.
18
© 2006 Politecnico di Torino
9
Programmazione in C
Il problem solving
Classificazione adottata
In questa unità (e nelle successive) si fornirà un
elenco (non esaustivo) di problemi classificati in
base a
Ambito applicativo: tipo di informazioni trattate e
classe di problema
Struttura dati scalare o vettoriale
Strategie algoritmiche: es. problemi non iterativi o
iterativi
Due unità tratteranno problemi elementari, una
terza unità problemi complessi (o composti) con
strutture dati o algoritmi che combinano
caratteristiche e/o strategie elementari diverse
19
Il problem solving
© 2006 Politecnico di Torino
10
Programmazione in C
Il problem solving
Dati scalari (1/2)
I dati scalari, trattati in questa unità, includono
numeri, caratteri/stringhe, aggregati eterogenei
(struct)
Sono esclusi vettori e matrici, come collezioni di
dati numerabili (e individuati da indici)
Sono incluse le stringhe, viste come dati unitari
(parole/frasi) e non vettori di caratteri
Sono incluse le struct, in quanto aggregati non
numerabili
21
Dati scalari (2/2)
Qualora la soluzione sia iterativa, è possibile
elaborare l’i-esimo dato senza ricordare tutti i
precedenti. Può essere necessario, ad es., il
penultimo dato, ma non serve un vettore
contenente tutti i dati
22
© 2006 Politecnico di Torino
11