Professional Documents
Culture Documents
PARTE I ALGORITMI
Premessa ...................................................................................................................................................... 3
Indicazioni sul testo .................................................................................................................................................. 3
Convenzioni usate..................................................................................................................................................... 3
2.3 Rappresentare e manipolare i valori dei dati: variabili, costanti, espressioni .............................. 20
2.3.1 Variabili ......................................................................................................................................................... 20
2.3.2 Costanti .......................................................................................................................................................... 20
2.3.3 Espressioni ..................................................................................................................................................... 21
PARTE I ALGORITMI
APPROFONDIMENTI ....................................................................................................... 58
A 1.1 Scenario iniziale e scenario finale .......................................................................................... 59
A 1.2 Classe di problemi....................................................................................................................... 59
A 1.3 Soggetto esecutore ....................................................................................................................... 60
A 2.1 Tipo delle informazioni............................................................................................................. 61
A 2.2 Costanti ........................................................................................................................................ 61
A 2.3 Espressioni ................................................................................................................................... 62
A 2.4 Asserzioni..................................................................................................................................... 62
A 3.1 Condizioni.................................................................................................................................... 64
A 3.2 Divisione intera............................................................................................................................ 64
A 3.3 Assegnazione nella forma: X = X + 1 ........................................................................................ 65
A 3.4 Cicli iterativi ................................................................................................................................ 65
NOTE ................................................................................................................................ 68
N 2.1 Problemi che trattano di oggetti fisici ........................................................................................... 69
N 2.2 Operatore di assegnazione.......................................................................................................... 69
N 2.3 Linguaggio a blocchi ................................................................................................................... 70
N 3.1 Calcolo della radice quadrata ........................................................................................................ 71
N 3.2 Scenari finali di un problema..................................................................................................... 71
N 3.3 Tipo di dato intero ...................................................................................................................... 72
N 3.4 Validit formale di un algoritmo ............................................................................................... 73
II
PARTE II LINGUAGGIO C#
Premessa ................................................................................................ Errore. Il segnalibro non definito.
Breve accenno a .NET .......................................................................... Errore. Il segnalibro non definito.
Indicazioni sul testo .............................................................................. Errore. Il segnalibro non definito.
Convenzioni usate........................................................................................... Errore. Il segnalibro non definito.
3.3 Tipi di operatori e conversioni numeriche ................................... Errore. Il segnalibro non definito.
3.3.1 Conversioni tra tipi numerici ................................................................. Errore. Il segnalibro non definito.
3.3.2 Compatibilit tra i tipi int e double .................................... Errore. Il segnalibro non definito.
5.2 Ottimizzazione dei cicli: uso degli operatori di incremento/decrementoErrore. Il segnalibro non definito.
5.2.1 Operatore di incremento......................................................................... Errore. Il segnalibro non definito.
5.2.2 Operatore di decremento ........................................................................ Errore. Il segnalibro non definito.
6.7 Campi di classe contro variabili locali ...................................... Errore. Il segnalibro non definito.
6.7.1 Sovrapposizione dei contesti di validit................................................. Errore. Il segnalibro non definito.
7.5 Passaggio per riferimento degli argomenti: parametri out e refErrore. Il segnalibro non definito.
7.5.1 Parametri e argomenti out ............................................................... Errore. Il segnalibro non definito.
7.5.2 Requisiti nelluso di parametri e argomenti out .............................. Errore. Il segnalibro non definito.
7.5.3 Metodi che definiscono parametri out e valore di ritorno ............... Errore. Il segnalibro non definito.
7.5.4 Parametri e argomenti ref ............................................................... Errore. Il segnalibro non definito.
7.5.5 Uso di argomenti e parametri ref.................................................... Errore. Il segnalibro non definito.
7.5.6 Confronto tra parametri ref e parametri out............................. Errore. Il segnalibro non definito.
7.6 Array come argomenti di un metodo ............................................ Errore. Il segnalibro non definito.
7.6.1 Dichiarazione di un parametro array...................................................... Errore. Il segnalibro non definito.
7.6.2 Uso dei parametri array.......................................................................... Errore. Il segnalibro non definito.
7.6.3 Argomenti e parametri array .................................................................. Errore. Il segnalibro non definito.
8.2.6 Costanti definite dal tipo double .................................................... Errore. Il segnalibro non definito.
Capitolo 7 Metodi: parametri e valori di ritorno ........................... Errore. Il segnalibro non definito.
Capitolo 8 Approfondimento sui tipi di dati ................................... Errore. Il segnalibro non definito.
A 8.2 Metodi del tipo double ....................................................... Errore. Il segnalibro non definito.
VII
PREMESSA
Il testo introduce i fondamenti che stanno alla base di qualsiasi attivit di programmazione. Esso
rappresenta dunque una premessa fondamentale alla programmazione in generale e in particolare
allo studio del testo Linguaggio C#.
Il testo inizia con lintrodurre i due concetti fondamentali, quello di problema e quello di
algoritmo. Quindi li caratterizza in maggior dettaglio, introducendo contestualmente un
linguaggio grafico per la descrizione degli algoritmi il linguaggio a blocchi mettendolo alla
prova in alcuni semplici problemi di programmazione.
Poich il testo di carattere introduttivo, sia nella forma che nei contenuti affrontati, i problemi
proposti, nonch gli algoritmi che li risolvono, hanno il solo scopo di introdurre i concetti da
apprendere e dunque non rappresentano esempi realistici di programmazione.
Lo scopo dello studente non quindi quello di comprendere il perch un determinato
problema debba essere affrontato, ma perch funziona e come lalgoritmo che lo risolve.
Indicazioni sul testo
Per ogni capitolo:
1) una pagina introduttiva elenca i concetti principali;
2) alcuni argomenti presentano dei riferimenti a note e approfondimenti, collocati in una
sezione specifica al termine del testo;
3) dedicata una sezione esercizi e una sezione autovalutazione;
Inoltre, i primi tre capitoli sono terminati da un schema di riepilogo dei concetti principali.
Convenzioni usate
Nel testo vengono usate particolari notazioni e stili per:
a)
b)
c)
Nei primi due casi viene usato il carattere Curier new, 10pt (Questo testo scritto con
Curier new, 10pt). Nel terzo, viene usato il carattere Verdana 10pt (Questo testo scritto con
Verdana 10 pt.)
I riferimenti ad approfondimenti e note sono collocati ai margini sinistro o destro della pagina, e
sono identificati dal numero del riferimento e da unicona che ne caratterizza il tipo:
[A X.X]
[N X.X]
Problema
Scenario iniziale
Scenario finale
Algoritmo
Requisiti di un algoritmo
Concetti generali
1.1 INTRODUZIONE
Il termine algoritmo deriva dal nome del matematico arabo AlKhuwarizmi ed stato assunto in
passato come sinonimo di procedimento o metodo di calcolo usato nella risoluzione di
problemi matematici. Laccezione moderna del termine rimanda a un significato pi ampio, che lo
pone in relazione a problemi non solo di carattere matematico, ma il senso fondamentale resta
comunque il medesimo, che, nella sua forma pi generica, pu essere cos tradotto:
un algoritmo descrive una serie di azioni che risolve un certo problema.
Il termine algoritmo non da mettere in relazione con il solo termine problema (termine che sar
chiarito nel prossimo paragrafo), vi sono infatti altri concetti ad esso collegati:
1) il soggetto che idea e quindi produce lalgoritmo: soggetto ideatore;
2) il soggetto che lo mette in atto, cio che esegue le azioni prescritte dallalgoritmo: soggetto
esecutore;
3) la forma che assume lalgoritmo, e cio il modo in cui le azioni sono descritte e organizzate;
Nei paragrafi che seguono verranno chiariti tali termini, i quali ci forniranno il quadro concettuale
di base per apprendere gli elementi teorici fondamentali che definiscono lattivit e i risultati della
programmazione.
Capitolo 1
Esempio 1.2
Testo del problema: Calcolare larea di un triangolo rettangolo dati i due
cateti.
Scenario iniziale: lunghezza dei cateti
Scenario finale (risultato desiderato): valore dell'area del triangolo
rettangolo
Concetti generali
Azioni da compiere:
1) moltiplica i due cateti tra loro e dividi il risultato per due
Esempio 1.3
Testo del problema: Copiare un file dal disco fisso al dischetto.
Scenario iniziale: Computer acceso, dischetto inserito, sul desktop le icone del
disco fisso e del dischetto
Scenario finale: file copiato nel dischetto
Azioni da compiere:
1) fai doppioclic sull'icona del disco fisso
2) fai doppioclic sulla cartella che contiene il file
3) clicca sul file e, tenendo premuto il pulsante, trascina il mouse fino
all'icona del dischetto
4) lascia il pulsante del mouse
Un problema, nella definizione data in precedenza, dunque caratterizzato da uno scenario iniziale,
uno scenario finale da raggiungere e dallimplicita assunzione che esistano delle azioni che,
partendo dallo scenario iniziale, consentano di arrivare allo scenario finale.
[A 1.1]
Capitolo 1
1.3 ALGORITMI
La precedente definizione del termine algoritmo ne chiarisce lo scopo: esso rappresenta la soluzione
di un problema generale.
Occorre ora caratterizzarlo con maggior precisione, nonch definire i concetti ad esso collegati.
1.3.1 Soggetto ideatore e Soggetto esecutore dellalgoritmo
Quando viene preso in considerazione un problema e la sua soluzione un algoritmo
fondamentale comprendere che chi risolve il problema, cio chi produce lalgoritmo, devessere
considerato un soggetto distinto da chi esegue lalgoritmo, cio da chi applica le azioni in esso
descritte.
Ad esempio, consideriamo il famoso problema del lupo, della capra e del cavolo.
Esempio 1.4
Testo del problema:
Un contadino deve attraversare un fiume portando con s un lupo, una capra e un
cavolo. Egli dispone per di una barca che pu portare solo uno dei tre suddetti
"passeggeri" oltre a s stesso. Inoltre occorre considerare che, in assenza del
contadino, il lupo mangerebbe senz'altro la capra, mentre la capra mangerebbe
senz'altro il cavolo.
In che modo il contadino pu attraversare il fiume senza che ci accada?
Scenario iniziale: contadino, lupo, capra e cavolo su una sponda del fiume
Scenario finale: contadino, lupo, capra e cavolo sullaltra sponda del fiume
Algoritmo che risolve il problema:
1) porta la capra sull'altra sponda
2) torna indietro
3) porta il cavolo sull'altra sponda
4) porta indietro la capra
5) porta il lupo sull'altra sponda
6) torna indietro
7) porta la capra sull'altra sponda
Un contadino che dovesse affrontare un problema analogo potrebbe egli stesso formulare il
precedente algoritmo, per metterlo successivamente in pratica. Il fatto che, in questo caso, il
contadino rappresenterebbe sia lideatore dellalgoritmo che il suo esecutore irrilevante. Nel
momento in cui il contadino formula lalgoritmo, indossa i panni del soggetto ideatore. Nel
momento in cui lo esegue, indossa i panni del soggetto esecutore. I due restano concettualmente
soggetti distinti.
Tale distinzione fondamentale, infatti il soggetto esecutore non ha alcuna necessit di
conoscere la natura del problema, addirittura nemmeno lo scopo della sua soluzione. Egli, infatti, si
limita ad eseguire fedelmente le azioni descritte nellalgoritmo.
[A 1.3]
Concetti generali
Dato un problema, esistono dunque due processi distinti, prodotti da due soggetti distinti:
1) il processo di risoluzione del problema, attraverso il quale il soggetto ideatore produce
lalgoritmo che ne rappresenta la soluzione;
2) il processo di esecuzione dellalgoritmo, attraverso il quale il soggetto esecutore applica
lalgoritmo, eseguendo meccanicamente le azioni in esso descritte.
Per un dato problema, sar necessario effettuare il processo di risoluzione una volta soltanto.
Mentre il processo di esecuzione, cio lapplicazione dellalgoritmo, potr essere effettuato ogni
qualvolta sia necessario da chiunque sia in grado di comprendere ed eseguire le azioni descritte
nellalgoritmo.
SCENARIO
INIZIALE
SOGGETTO
ESECUTORE
SCENARIO
FINALE
APPLICA IL
PROCESSO DI
ESECUZIONE
ESECUZIONE
VENGONO ESEGUITE
LE AZIONI DESCRITTE
NELL'ALGORITMO
10
Capitolo 1
Essi dipendono principalmente dal concetto di esecutore meccanico (in un certo senso
stupido) introdotto nel paragrafo precedente, la cui sola capacit richiesta quella di eseguire
fedelmente le azioni e non di comprenderne o intuirne lo scopo, o addirittura di comprendere lo
scopo dellintero algoritmo. Ma per garantire che un simile esecutore possa eseguire correttamente
lalgoritmo, questo deve necessariamente rispettare alcune regole:
1) le azioni devono essere descritte nei termini di un ordine rivolto allesecutore. (moltiplica,
premi, porta, torna, etc). Tale forma di descrizione di unazione si chiama: istruzione;
2) posto dunque che unistruzione equivale alla descrizione di unazione, un algoritmo
devessere rappresentato da un elenco ordinato di istruzioni. Ci significa che lesecutore
dovr essere sempre in grado di:
sapere qual la prima istruzione dellalgoritmo;
distinguere unistruzione dalla precedente e dalla successiva (sapere dove termina
unistruzione);
sapere qual la prossima istruzione da eseguire;
riconoscere la fine dellalgoritmo;
3) le istruzioni devono essere non ambigue. Lesecutore deve cio essere in grado di
interpretarle senza alcun margine di errore, riconoscendo:
il tipo di azione da svolgere (cosa deve fare);
gli oggetti ai quali lazione rivolta;
4) le istruzioni devono essere eseguibili. Lesecutore deve cio essere in grado di metterle in
pratica;
Se consideriamo i primi tre esempi del capitolo, si vede che fatte le dovute assunzioni sulle
capacit dellesecutore rispettano le regole sopra esposte. Un presunto algoritmo che invece non
rispetta tali regole il seguente:
Esempio 1.5
Testo del problema: Preparare un piatto di spaghetti al burro.
Scenario iniziale: confezione di spaghetti, pentola piena d'acqua sul fornello,
confezione di burro, piatto
Scenario finale: piatto di spaghetti conditi con il burro
Algoritmo soluzione del problema:
Accendi il fornello sotto la pentola e quando l'acqua bolle aggiungi sale quanto
basta. Poi metti quanti spaghetti desideri nella pentola e aspetta finch gli
spaghetti non sono cotti al punto giusto. Infine servi gli spaghetti sul piatto
e mettici sopra un po' di burro.
Concetti generali
11
12
Capitolo 1
SCENARIO
INIZIALE
definito
da
PROBLEMA
SCENARIO
FINALE
definito
da
la sua soluzione
rappresentata da
ALGORITMO
prodotto da
SOGGETTO
IDEATORE
attraverso il
eseguito da
composto da
ELENCO DI
ISTRUZIONI
SOGGETTO
ESECUTORE
attraverso il
PROCESSO DI
PROCESSO DI
RISOLUZIONE
ESECUZIONE
ORDINATO
ISTRUZIONI NON
AMBIGUE
ESISTE UNA
PRIMA
ISTRUZIONE
SEMPRE POSSIBILE
STABILIRE QUAL LA
PROSSIMA ISTRUZIONE
ISTRUZIONI
EFFETTIVAMENTE
ESEGUIBILI
Concetti generali
13
Esercizi
1) Proponi due esempi di problemi specifici e due esempi di problemi generali.
3) In relazione ai primi tre esempi proposti nel testo, individua (proponi) le caratteristiche di
soggetti esecutori che non sarebbero in grado di eseguire le azioni descritte nei
corrispondenti algoritmi.
14
Capitolo 1
Autoverifica
Rispondi alle domande
SI
NO
17
2.1 INTRODUZIONE
Nel capitolo precedente sono stati introdotti, anche se in modo incompleto, due concetti
fondamentali, quello di problema e quello di algoritmo, che rappresenta appunto la soluzione di un
problema descritta in una forma eseguibile da un soggetto esecutore.
Entrambi i concetti sono validi a prescindere dal contesto (natura del problema e caratteristiche
dellesecutore) nel quale vengono considerati; di fatto, per, la loro applicazione risulta utile e
formalmente valida solo nella elaborazione di informazioni di natura simbolica, laddove, cio,
mediante simboli si possono rappresentare numeri, date, testi, immagini, etc.
Ci per i seguenti motivi:
i problemi di natura simbolica, e dunque i corrispondenti algoritmi risolutori, possono essere
definiti nella forma appropriata per essere trattati da esecutori automatici, cio da
computer. Ed ovviamente in questo ambito che lo studio e la realizzazione di algoritmi
mostra tutta le propria utilit;
molti problemi che trattano oggetti fisici possono essere ricondotti a problemi di natura
simbolica, laddove i simboli le informazioni corrispondenti rappresentano gli oggetti
fisici del problema originale;
attualmente non esistono esecutori automatici (e dunque nemmeno linguaggi formali) capaci
di eseguire algoritmi che rappresentano direttamente la soluzione di problemi che trattano
oggetti fisici.
[N 2.1]
Dora in avanti, quindi, prenderemo in considerazione soltanto problemi e algoritmi che trattano
dati; algoritmi, dunque, che possono essere definiti mediante linguaggi formali ed eseguiti da
esecutori automatici.
Figura 2-1. Rappresentazione schematica delle relazioni tra scenari e dati del problema.
VALORE INIZIALE
DEI DATI
VALORE FINALE
DEI DATI
(dati in ingresso)
(dati in uscita)
STATO INIZIALE
DEGLI OGGETTI
(SCENARIO INIZIALE)
PROBLEMA
STATO FINALE
DEGLI OGGETTI
(SCENARIO FINALE)
18
Capitolo 2
Ci non modifica comunque la definizione di problema cos come stata data nel capitolo
precedente, con la differenza che adesso gli oggetti del problema rappresentano informazioni dati
e non entit fisiche.
In questa accezione, i dati che rappresentano lo scenario iniziale sono chiamati dati iniziali o
dati in ingresso (al processo di esecuzione), mentre quelli che definiscono lo scenario finale, o
risultato, sono chiamati dati finali o dati in uscita (del processo di esecuzione).
19
Una tale ricchezza di tipi di dati non per rappresentabile da alcun linguaggio formale, e ci non
nemmeno necessario. Considerando gli esempi proposti, si intuisce infatti come sia sufficiente
avere a disposizione pochi tipi di dati base, con i quali rappresentare tutti gli altri.
Ad esempio, nomi, cognomi, codici fiscali, colori degli occhi, sono tutti tipi di dati che possono
essere rappresentati mediante sequenze di caratteri (lettere, cifre e altri simboli). Mentre pesi,
altezze, volumi, et, sono tutti tipi di dati che possono essere rappresentati mediante numeri.
Questi due tipi di dati base, mediante i quali rappresentare gli altri, si chiamano rispettivamente:
tipo stringa: qualsiasi sequenza (anche vuota) di caratteri;
tipo numero: qualsiasi valore numerico.
Nei successivi paragrafi faremo riferimento a tali tipi di dati, sorvolando per il momento sul fatto
che i linguaggi di programmazioni ne mettono a disposizione degli altri, nonch tipi analoghi ma
con nomi e caratteristiche leggermente diverse.
20
Capitolo 2
Anche negli algoritmi che elaborano dati, le istruzioni descrivono azioni che manipolano oggetti, i
quali in questo caso non rappresentano entit fisiche ma appunto i dati stessi.
Vi sono due classi di oggetti che consentono di fare riferimento ai dati da elaborare, le
variabili e le costanti.
2.3.1 Variabili
Una variabile pu essere immaginata come una scatola identificata da un nome, chiamato
identificatore della variabile. Il contenuto della scatola rappresenta il valore del dato
rappresentato
A
100
In questo esempio, A rappresenta il nome della variabile, mentre 100 rappresenta il suo
contenuto, e quindi il valore del dato.
Una variabile cos chiamata perch mentre il suo nome non cambia, il suo contenuto pu essere
modificato mediante unistruzione di assegnazione.
La maggior parte delle istruzioni di un algoritmo sono istruzioni di assegnazione, istruzioni, cio,
che modificano il contenuto di una variabile. Esse assumono la forma:
nome-variabile
nuovo-contenuto
Ad esempio:
A
200 + 200
2.3.2 Costanti
Negli esempi precedenti stato fatto uso dei valori 100 e 200, i quali identificano ovviamente dei
valori numerici. Ebbene, 100 e 200 e qualsiasi altro numero sono oggetti denominati costanti
letterali.
21
Essi sono detti costanti poich, come si intuisce, il valore che rappresentano non varia mai. Sono
inoltre definiti letterali perch il valore rappresentato espresso automaticamente dalla notazione
usata per riferirsi ad essi1 .
[A 2.2]
2.3.3 Espressioni
Unespressione una formula che combina uno o pi oggetti (costanti o variabili) con zero o pi
operazioni che operano su di essi.
Unespressione, nel momento in cui viene valutata dallesecutore, produce un valore, il cui tipo
dipende dal tipo degli oggetti e dalle operazioni in essa contenute.
Esempi di espressioni sono:
A + 100
100
A+A
A*B/2
[A 2.3]
espressione
Una tale precisazione pu apparire assolutamente ovvia, e quindi superflua. In realt necessaria poich esiste una
seconda classe di costanti, chiamate costanti simboliche, le quali si differenziano dalle costanti letterali per il fatto di
possedere un nome.
22
Capitolo 2
B (base); H (altezza)
Scenario finale:
A (area); P (perimetro)
dichiarazione delle
variabili usate
nell'algoritmo
INIZIO
<B, H sono forniti>
asserzione
A=B*H
istruzione
P = (B+H) * 2
istruzione
asserzione
FINE
nomevariabile
Se ci sono pi variabili dello stesso tipo, queste possono essere dichiarate allinterno della
stessa dichiarazione.(In questo caso le variabili sono tutte numeriche.)
1) Lalgoritmo comincia con la parola INIZIO e termina con la parola FINE.
2) Le istruzioni due in questo caso sono racchiuse in rettangoli, o blocchi.
23
24
Capitolo 2
pu essere descritto
mediante
SCENARIO
FINALE
ALGORITMO
INSIEME DEI
VALORI
definiscono
elabora
caratterizzati da
DATI IN USCITA
TIPI
caratterizzati da
OPERAZIONI
ESEGUIBILI SUI
appartengono
a
determinati
possono
essere
DATI
possono
essere
DATI IN
INGRESSO
appartengono
a
rappresentati
mediante
definiscono
rappresentati
mediante
VALORI
SCENARIO
INIZIALE
COSTANTI
si combinano in
VARIABILI
caratterizzate caratterizzate
da
da
NOME
CONTENUTO
ESPRESSIONI
modificato da
ISTRUZIONE DI
ASSEGNAZIONE
25
Esercizi
1) Con quali tipi di dati base rappresenteresti i seguenti tipi di informazione?
a) Giorni della settimana
numero
stringa
b) Mesi dellanno
numero
stringa
c) Anni
numero
stringa
numero
stringa
e) Volumi
numero
stringa
f) Altezze
numero
stringa
g) Distanze
numero
stringa
h) Codici fiscali
numero
stringa
i)
Partite iva
numero
stringa
j)
Sesso
numero
stringa
26
Capitolo 2
Autoverifica
Rispondi alle domande
SI
NO