36
Lezione1: Introduzione alla Programmazione Michele Nappi, Ph.D Dipartimento di Matematica e Informatica Università degli Studi di Salerno [email protected] biplab.unisa.it 089-963334

Lezione1: Introduzione alla Programmazione

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lezione1: Introduzione alla Programmazione

Lezione1:

Introduzione alla Programmazione

Michele Nappi, Ph.DDipartimento di Matematica e Informatica

Università degli Studi di Salerno

[email protected]

biplab.unisa.it

089-963334

Page 2: Lezione1: Introduzione alla Programmazione

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.

Page 3: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 3

Algoritmi e Programmi

• Proprietà dell’algoritmo

• Non Ambiguità (delle istruzioni)

• Eseguibilità (delle istruzioni)

• Finitezza (deve terminare)

Page 4: Lezione1: Introduzione alla Programmazione

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

Page 5: Lezione1: Introduzione alla Programmazione

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

Page 6: Lezione1: Introduzione alla Programmazione

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

Page 7: Lezione1: Introduzione alla Programmazione

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)

Page 8: Lezione1: Introduzione alla Programmazione

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)

Page 9: Lezione1: Introduzione alla Programmazione

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)

Page 10: Lezione1: Introduzione alla Programmazione

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

Page 11: Lezione1: Introduzione alla Programmazione

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.

Page 12: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 12

Algoritmi e Programmi

Page 13: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 13

Algoritmi e Programmi

Page 14: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 14

Algoritmi e Programmi

Page 15: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 15

Algoritmi e Programmi

Page 16: Lezione1: Introduzione alla Programmazione

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

Page 17: Lezione1: Introduzione alla Programmazione

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

Page 18: Lezione1: Introduzione alla Programmazione

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;

Page 19: Lezione1: Introduzione alla Programmazione

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

Page 20: Lezione1: Introduzione alla Programmazione

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

Page 21: Lezione1: Introduzione alla Programmazione

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

Page 22: Lezione1: Introduzione alla Programmazione

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 …

Page 23: Lezione1: Introduzione alla Programmazione

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

Page 24: Lezione1: Introduzione alla Programmazione

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;

Page 25: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 25

Linguaggi di Programmazione

Page 26: Lezione1: Introduzione alla 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

Page 27: Lezione1: Introduzione alla Programmazione

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

Page 28: Lezione1: Introduzione alla Programmazione

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

Page 29: Lezione1: Introduzione alla Programmazione

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

Page 30: Lezione1: Introduzione alla Programmazione

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.

Page 31: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 31

Il Software

Software di Base (Sistema Operativo)

Software Applicativo (Office Automation)

Software di Sviluppo (Ambiente di Programmazione)

Page 32: Lezione1: Introduzione alla 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.

Page 33: Lezione1: Introduzione alla Programmazione

10/6/2014 Michele Nappi 33

Il Software

Hardware

Software di Base

Sistema Operativo

Page 34: Lezione1: Introduzione alla Programmazione

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

Page 35: Lezione1: Introduzione alla Programmazione

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)

Page 36: Lezione1: Introduzione alla Programmazione

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