Lezione1:
Introduzione alla Programmazione
Michele Nappi, Ph.DDipartimento di Matematica e Informatica
Università degli Studi di Salerno
biplab.unisa.it
089-963334
10/6/2014 Michele Nappi 2
Algoritmi e Programmi
Problema → Algoritmo → Programma
• Definizione del problema
• Dati iniziali (input)
• Dati intermedi (se necessari)
• Dati finali (output)
• Definizione di un insieme di passi logici che trasformano i
dati iniziali in dati finali
• Il risultato è un algoritmo, un insieme finito di istruzioni che, se
eseguite ordinatamente, sono in grado di risolvere il problema di
partenza.
algoritmo deriva dalla nisba
al-Khuwarizmi del matematico
Muhammad ibn Musa del 9° sec.
10/6/2014 Michele Nappi 3
Algoritmi e Programmi
• Proprietà dell’algoritmo
• Non Ambiguità (delle istruzioni)
• Eseguibilità (delle istruzioni)
• Finitezza (deve terminare)
10/6/2014 Michele Nappi 4
Algoritmo del Caffé
• Dati Iniziali:
– Acqua, Caffé, Fornello,Gas, Macchinetta
• Procedura:1. Riempire la caldaia della Macchinetta con l’Acqua;
2. Riempire il filtro della Macchinetta con il Caffé;
3. Montare i dispositivi della Macchinetta del Caffé;
4. Posizionare la Macchinetta sul Fornello e accendere il Gas;
5. Attendere l’ebollizione dell’Acqua;
6. Spegnere il Gas quando il Caffè è disponibile in forma liquida nella
Macchinetta
10/6/2014 Michele Nappi 5
Esempio (1)[(1.5+2.5)x[(-4)x(-2)]]:2
1. Tipi di Dati Reali: 1.5, 2.5
2. Tipi di Dati Relativi: (-)4, (-)2
3. Tipi di Dati Relativi: (+)2
• Sviluppo:
[4x8]:2• Tipi di dati Relativi: 4,8,2
• Sviluppo:
32:2• Tipi di dati Relativi: 32,2
• Sviluppo:
16• Tipi di dati Relativi:16
10/6/2014 Michele Nappi 6
Esempio (1.2)[(1.5+2.5)x[(-4)x(-2)]]:2
1. Memorizza i Dati Reali: 1.5, 2.5
2. Memorizza i Dati Relativi: -4, -2
3. Memorizza il Dato Relativo: (+)2
• Somma 1.5 con 2.5 e memorizza il risultato in un Dato Reale
• Moltiplica -4 e -2 e memorizza il risultato in un Dato Relativo
[4x8]:2
• Moltiplica 4 e 8 e memorizza il risultato in un Dato Relativo
32:2
• Dividi 32 per due e memorizza il risultato in un Dato Relativo
16
10/6/2014 Michele Nappi 7
• Problema
– Un college ha una lista di risultati di test (1 = promosso, 2 = bocciato) per 10 studenti. Scrivere un programma che analizza i risultati. Se più di 8 studenti sono stati promossi, visualizzare “Aumentare le tasse”
• Nota che
– Il programma deve elaborare 10 risultati di test• Sarà usato un ciclo controllato da contatore
– Due contatori possono essere usati• Uno per il numeno di promossi, uno per il numero di bocciati
– Ogni risultato di test è un numero (1 o 2)• Se il numero non è un 1, assumiamo che è un 2
Esempio (2)
10/6/2014 Michele Nappi 8
• Descrizione ad alto livelloAnalizzare i risultati dell’esame e decidere se debbano essere
aumentate le tasse scolastiche
• Primo raffinamentoInizializzare le variabili
Prendere in input 10 valutazioni della prova e contare le promozioni e le bocciature
Visualizzare un sommario dei risultati dell’esame e decidere se le tasse scolastiche debbano essere aumentate
• Secondo raffinamento: Inizializzare le variabiliInizializzare le promozioni a zero
Inizializzare le bocciature a zero
Inizializzare gli studenti a uno
Esempio (2)
10/6/2014 Michele Nappi 9
• Terzo raffinamento : Prendere in input 10 valutazioni della prova e contare le promozioni e le bocciatureFinchè il contatore degli studenti è inferiore o uguale a dieci
prendere in input il prossimo risultato d’esameSe lo studente è stato promosso
Aggiungere uno ai promossi
altrimenti
Aggiungere uno ai bocciati
Aggiungere uno al contatore degli studenti
• Quarto raffinamento : Visualizzare un sommario dei risultati dell’esame e decidere se le tasse scolastiche debbano essere aumentate
Visualizzare il numero delle promozioni Visualizzare il numero delle bocciature
Se più di otto studenti sono stati promossi Visualizzare il messaggio “aumentare le tasse
Esempio (2)
10/6/2014 Michele Nappi 10
Esempio (3)
Il Fattoriale di n: n!=n*(n-1)*(n-2)*…..*3*2*1
• Prendere in input il numero n e considerare una variabile
fact inizializzata ad 1
– Se n=0 or n=1 allora il risultato è fact
– Finchè n non risulta uguale ad 1effettuare le seguenti operazioni:
• Moltiplicare n e fact e memorizzare il risultato in fact (fact=n*fact)
• Decrementare n di un’unità (n=n-1)
– Quando n risulta uguale ad 1 il risultato è fact
10/6/2014 Michele Nappi 11
Algoritmi e Programmi
• L'algoritmo dovrà essere specificato in un linguaggio che
l'elaboratore è in grado di interpretare in modo corretto e
contenere istruzioni che possono essere eseguite dal computer
stesso.
• Un programma può quindi essere definito come un insieme di
istruzioni espresse in un linguaggio formale (sintassi e semantica)
chiamato linguaggio di programmazione.
• I computer però non sono in grado di capire nemmeno il
linguaggio programmazione in quanto il microprocessore sa
elaborare solo in linguaggio binario: ecco pertanto che i
programmi dovranno essere ulteriormente tradotti da appositi
applicazioni quali interpreti o compilatori.
10/6/2014 Michele Nappi 12
Algoritmi e Programmi
10/6/2014 Michele Nappi 13
Algoritmi e Programmi
10/6/2014 Michele Nappi 14
Algoritmi e Programmi
10/6/2014 Michele Nappi 15
Algoritmi e Programmi
10/6/2014 Michele Nappi 16
Sintassi e Semantica di un LP
• Sintassi
– Specifica come costruire un programma nel
linguaggio di programmazione
– Grammatiche context-free (notazione BNF
Backus Naur Form)
• Semantica
– Specifica il significato del linguaggio
10/6/2014 Michele Nappi 17
Sintassi e Semantica di un LP
• Esempio:
– Sintassi: ‹data›=CC / CC / CCCC
• C è un abbreviazione per ‹cifra›
– Semantica: 01/02/2003
• In Italia → 1° Febbraio 2003
• Negli USA → 2° Gennaio 2003
10/6/2014 Michele Nappi 18
Linguaggi di Programmazione
• Ad oggi (2008) esistono circa 2500
Linguaggi di Programmazione (LP) più o
meno noti e diffusi
• I LP sono normalmente classificati in tre
grandi famiglie basate sul concetto di
istruzione, i linguaggi imperativi, quelli
funzionali e quelli logici;
10/6/2014 Michele Nappi 19
Linguaggi di Programmazione
• Nei linguaggi imperativi l'istruzione è un comando esplicito, che opera su una o più variabili oppure sullo stato interno della macchina, e le istruzioni vengono eseguite in un ordine prestabilito.
• Scrivere un programma in un linguaggio imperativo significa essenzialmente occuparsi di cosa la macchina deve fare per ottenere il risultato che si vuole, e il programmatore è impegnato nel mettere a punto gli algoritmi necessari a manipolare i dati.
• Esempio:– Ada
– C
– Modula-2
– Oberon
– Pascal
10/6/2014 Michele Nappi 20
Linguaggi di Programmazione
• I linguaggi funzionali sono basati sul concetto matematico di funzione. In un linguaggio funzionale puro l'assegnazione esplicita risulta addirittura completamente assente (si utilizza soltanto il passaggio dei parametri).
• In tale modello rivestono particolare importanza la ricorsione, e, come struttura dati, la lista (sequenza ordinata di elementi).
• Esempio:– Lisp
– Logo
– Scheme
– Standard ML
– Caml
– OCaml
10/6/2014 Michele Nappi 21
Linguaggi di Programmazione
• Nei linguaggi logici l'istruzione è una clausola che descrive una relazione fra i dati: programmare in un linguaggio logico significa descrivere l'insieme delle relazioni esistenti fra i dati e il risultato voluto, e il programmatore è impegnato nello stabilire in che modo i dati devono evolvere durante il calcolo.
• Non c'è un ordine prestabilito di esecuzione delle varie clausole, ma è compito dell'interprete trovare l'ordine giusto.
• Esempio:– Mercury
– Prolog
10/6/2014 Michele Nappi 22
Paradigmi di Programmazione
• Paradigma funzionale
– Programma = (insieme di) funzioni
• Funzione: dati risultato
– Scheme, Lisp, ML …
• Paradigma imperativo
– Programma = sequenza di istruzioni
– Pascal, C, Java …
10/6/2014 Michele Nappi 23
Linguaggi di Programmazione
• Tre tipi di linguaggi di programmazione– 1. Linguaggi Macchina
• – Stringhe di numeri che danno istruzioni specifiche della macchina
• – Esempio :
– +1300042774 +1400593419 +1200274027
– 2. Linguaggi Assembly• – Abbreviazioni che rappresentano operazioni di calcolo
elementari (tradotte via assemblatori)
• – Esempio: LOAD BASEPAY
» ADD OVERPAY STORE GROSSPAY
10/6/2014 Michele Nappi 24
Linguaggi di Programmazione
3.Linguaggi ad alto livello
– Simili all’Inglese e usano notazioni
matematiche (tradotti via compilatori)
– Esempio: grossPay = basePay + overTimePay;
10/6/2014 Michele Nappi 25
Linguaggi di Programmazione
10/6/2014 Michele Nappi 26
Algoritmi e Programmi:
Interpreti e Compilatori
L’ interprete è un programma che traduce, istruzione per
istruzione, il programma sorgente. Ogni istruzione è sottomessa
alla CPU appena è stata tradotta. Anche se una se istruzione è
contenuta 10 volte in un programma verrà tradotta ogni volta che
si presenterà al traduttore.
Il compilatore, invece, traduce tutto il programma in una sola
volta e poi lo sottomette alla CPU. Se una stessa istruzione
compare 10 volte, viene tradotta solo la prima volta e poi
memorizzata in maniera tale che possa essere ripresa dal
compilatore e inserita nelle restanti nove righe di programma
10/6/2014 Michele Nappi 27
Algoritmi e Programmi
• E' possibile così riassumere le diverse fasi che portano dall'analisi
del problema all'ottenimento di una soluzione:
1. Analisi
2. Formalizzazione
3. Programmazione
4. Traduzione
5. Esecuzione
6. Verifica
10/6/2014 Michele Nappi 28
Algoritmi e Programmi
• Analisi
Viene analizzato il problema in tutti i suoi aspetti e si cercano i fattori sui quali fare leva
per risolverlo. Il risultato è una soluzione informale
• Formalizzazione
La soluzione trovata nel passo precedente è riformulata in maniera da utilizzare una
sintassi e una semantica corrette, per produrre un algoritmo di risoluzione (Le relazioni tra
costrutti dei linguaggio ed azioni sono univocamente definite). Il linguaggio utilizzato
sarà di tipo formale, ma necessiterà di ulteriori passi per essere reso utilizzabile dalla
macchina
• Programmazione
Il risultato di questa fase è un programma di alto livello che utilizza un linguaggio di
programmazione costituito da segni matematici e parole chiave e non da una successione
indecifrabile di 0 e 1. Questa fase però non produce ancora un programma che possa
essere compreso dalla macchina: si necessita della fase seguente
10/6/2014 Michele Nappi 29
Algoritmi e Programmi
• Traduzione
In questa fase il programma di alto livello viene tradotto da
appositi software in linguaggio macchina
• Esecuzione
Il programma viene sottoposto al microprocessore che lo
esegue e fornisce la soluzione al problema
• Verifica
Tramite un test pratico di funzionamento ed un’analisi
teorica del programma dovrebbe si verifica che il software
realizzato corrisponda alle sue aspettative e svolga le
funzioni per cui è stato elaborato
10/6/2014 Michele Nappi 30
Algoritmi e Programmi
• A questo punto è necessaria la formazione degli utenti, per
impartire loro le istruzioni che occorrono per servirsi dei nuovo
software: essa può avvenire secondo diverse modalità.
• Nella fase di implementazione, infine, tutti gli utenti interessati
possono servirsi dei programma elaborato (versione beta del
programma).
• Gli aggiornamenti successivi sono detti "versioni", o release, e
sono identificati da un numero progressivo.
10/6/2014 Michele Nappi 31
Il Software
Software di Base (Sistema Operativo)
Software Applicativo (Office Automation)
Software di Sviluppo (Ambiente di Programmazione)
10/6/2014 Michele Nappi 32
Il Software
Il software di base: racchiude in sé sia il software di sistema,
necessario a far funzionare l'elaboratore, sia quello utilizzato
dagli sviluppatosi di programmi per facilitare il loro lavoro;
Il software applicativo: comprende invece tutti quei programmi
utilizzati dagli utenti per gestire, per esempio, la posta, la
contabilità di casa, per redigere una lettera, creare una
presentazione, telefonare via Internet, ecc., oppure applicativi
creati ad hoc per risolvere un determinato problema.
10/6/2014 Michele Nappi 33
Il Software
Hardware
Software di Base
Sistema Operativo
10/6/2014 Michele Nappi 34
Interpretare ed eseguire comandi elementari e tradurre i
comandi degli applicativi in operazioni della macchina
Organizzare la struttura della memoria di massa
Ripartire le risorse del sistema tra gli utenti.
(Multiuser – Multitasking)
Il Sistema Operativo
10/6/2014 Michele Nappi 35
Ambiente di Programmazione
Editor
Compilatore
Linker
Debugger
Per Scrivere fisicamente il programma
Traduce i programmi in codice oggetto, eseguibile dal
calcolatore
Collega diversi moduli di un programma, e le cosiddette
librerie, producendo il vero e proprio eseguibile
Permette di interrompere l’esecuzione del programma dopo ogni istruzione per correggere eventuali errori (bug)
10/6/2014 Michele Nappi 36
Ambiente di Programmazione
• Fasi di Programmi C:
1. Editing
2. Preprocessing
3. Compilazione
4. Linking
5. Caricamento
6. Esecuzione
Top Related