La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Sommario UNIVAC Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly (gli stessi costruttori dellENIAC)

Presentazioni simili


Presentazione sul tema: "1 Sommario UNIVAC Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly (gli stessi costruttori dellENIAC)"— Transcript della presentazione:

1 1 Sommario UNIVAC Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly (gli stessi costruttori dellENIAC) per lUfficio Centrale di Statistica degli Stati Uniti. Lalgebra di Boole truefalse Fu teorizzata dal matematico inglese George Boole ( ) nel lavoro Analisi Matematica della Logica, pubblicato nel Include un insieme di operazioni su variabili logiche (o variabili booleane), che possono assumere i due soli valori true e false, indicati da 1 e 0. Le tecniche sviluppate nellalgebra booleana possono essere applicate allanalisi ed alla progettazione dei circuiti elettronici, poiché essi sono realizzati con dispositivi che possono assumere solo due stati. tabella di verità Su insiemi di costanti e variabili logiche possono essere definite funzioni che hanno esse stesse la caratteristica di assumere due soli valori. La definizione di una funzione booleana può essere effettuata per mezzo di una tabella di verità, che indica il valore della funzione in corrispondenza di ogni possibile configurazione dei valori degli argomenti. Le funzioni booleane possono essere scritte e manipolate anche con metodi algebrici, dato un insieme di funzioni (o operazioni) elementari tramite le quali poter esprimere ogni altra funzione. UNIVAC Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly (gli stessi costruttori dellENIAC) per lUfficio Centrale di Statistica degli Stati Uniti. Lalgebra di Boole truefalse Fu teorizzata dal matematico inglese George Boole ( ) nel lavoro Analisi Matematica della Logica, pubblicato nel Include un insieme di operazioni su variabili logiche (o variabili booleane), che possono assumere i due soli valori true e false, indicati da 1 e 0. Le tecniche sviluppate nellalgebra booleana possono essere applicate allanalisi ed alla progettazione dei circuiti elettronici, poiché essi sono realizzati con dispositivi che possono assumere solo due stati. tabella di verità Su insiemi di costanti e variabili logiche possono essere definite funzioni che hanno esse stesse la caratteristica di assumere due soli valori. La definizione di una funzione booleana può essere effettuata per mezzo di una tabella di verità, che indica il valore della funzione in corrispondenza di ogni possibile configurazione dei valori degli argomenti. Le funzioni booleane possono essere scritte e manipolate anche con metodi algebrici, dato un insieme di funzioni (o operazioni) elementari tramite le quali poter esprimere ogni altra funzione. Gli algoritmi Analisi e programmazione Algoritmi e loro proprietà Esempi di algoritmi Costanti e variabili, istruzioni, proposizioni e predicati I linguaggi per la formalizzazione di algoritmi I diagrammi a blocchi Gli algoritmi iterativi I vettori La pseudocodifica Introduzione ai linguaggi di programmazione di alto livello

2 2 Gli algoritmi

3 3 Analisi e programmazione 1 Tramite un elaboratore si possono risolvere problemi di varia natura: emissione di certificati anagrafici, gestione dei c/c di un istituto di credito, prenotazioni ferroviarie, etc. Il problema deve essere formulato in modo opportuno, perché sia possibile utilizzare un elaboratore per la sua soluzione analisi e programmazione Per analisi e programmazione si intende linsieme delle attività preliminari atte a risolvere problemi utilizzando un elaboratore, dalla formulazione del problema fino alla predisposizione dellelaboratore Scopo dellanalisi:algoritmo Scopo dellanalisi: definire un algoritmo Scopo della programmazione: programma Scopo della programmazione: tradurre lalgoritmo in un programma

4 4 Algoritmo Algoritmo elenco finito di istruzioni che specificano le operazioni eseguendo le quali un operatore umano risolve una classe di problemi Un particolare problema della classe viene risolto utilizzando lapposito algoritmo sui dati che lo caratterizzano Un algoritmo non può essere eseguito direttamente dallelaboratore Programma Programma ricetta che traduce lalgoritmo ed è direttamente comprensibile, pertanto eseguibile, da parte di un elaboratore Linguaggio di programmazione Linguaggio di programmazione linguaggio rigoroso che permette la formalizzazione di un algoritmo in un programma Analisi e programmazione 2

5 5 Analisi e programmazione 3 Esempio Problema: Problema: Effettuare un accredito su un c/c bancario Soluzione: Soluzione: Utilizzare un programma che serva per predisporre il calcolatore allaccredito di una qualunque cifra su un qualunque c/c; cifra da accreditare e numero di c/c sono i dati caratteristici del problema Analogie tra le azioni che devono essere eseguite da un operatore umano e, in modo automatico, tramite un elaboratore Programma + datiAlgoritmo + dati Elaboratore Uomo + Calcolatrice Risultati

6 6 Le fasi del procedimento di analisi e programmazione Risultati Problema ANALISI ELABORAZIONE ELABORAZIONE Dati PROGRAMMAZIONE PROGRAMMAZIONE Algoritmo Programma Relazioni tra problema, analisi, algoritmo, programmazione, programma, dati ed elaborazione

7 7 Algoritmo: definizione AlgoritmoAl Khuwarizmi Algoritmo deriva dal nome del matematico arabo Al Khuwarizmi, vissuto nel IX secolo d.C.; esempi di algoritmo sono presenti su tavolette babilonesi risalenti al a.C. istruzionipassi classe di problemi Un algoritmo è una successione di istruzioni o passi che definiscono le operazioni da eseguire sui dati per ottenere i risultati; un algoritmo fornisce la soluzione ad una classe di problemi schema di esecuzione Lo schema di esecuzione di un algoritmo specifica che i passi devono essere eseguiti in sequenza, salvo diversa indicazione esplicita Ogni algoritmo è concepito per interagire con lambiente esterno per acquisire dati e comunicare messaggi o risultati; i dati su cui opera ogni singola istruzione sono forniti dallesterno o sono frutto di istruzioni eseguite in precedenza Ambiente esterno Algoritmo Risultati o messaggi Dati

8 8 Esempio 1 Il gioco dellundici Problema: Problema: Undici fiammiferi sono disposti su un tavolo Il primo giocatore (A) può raccogliere da 1 a 3 fiammiferi Il secondo giocatore (B) ne raccoglie a sua volta 1, 2 o 3 I giocatori alternano le loro mosse finché sul tavolo non ci sono più fiammiferi Il giocatore che è costretto a raccogliere lultimo fiammifero è il perdente Algoritmo: Algoritmo: strategia vincente per il giocatore A che gioca per primo prima mossa: A raccoglie 2 fiammiferi mosse successive: se B raccoglie k fiammiferi ( k 3 ), allora A raccoglie 4 k fiammiferi

9 9 Problema: Problema: Sia dato un mazzo da 40 carte da ordinare in modo che le cuori precedano le quadri, che a loro volta precedono fiori e picche; le carte di uno stesso seme sono ordinate dallasso al reAlgoritmo: Si suddivida il mazzo in 4 mazzetti, ciascuno costituito da tutte le carte dello stesso seme Si ordinino le carte di ciascun mazzetto dallasso al re Si prendano nellordine i mazzetti delle cuori, quadri, fiori e picche Esempio 2 Ordinamento di un mazzo di carte

10 10 Problema: Problema: Calcolo delle radici reali dellequazione di secondo grado ax 2 +bx+c=0Algoritmo: 1) Acquisire i coefficienti a, b, c 2) Calcolare = b 2 4ac 3) Se <0 non esistono radici reali, eseguire listruzione 7) 4) Se = 0, x 1 = x 2 = b/2a, poi eseguire l'istruzione 6) 5) Porre x 1 = ( b + )/2a, x 2 = ( b )/2a 6) Comunicare i valori x 1, x 2 7) Fine Esempio 3 Radici di equazioni di 2 ° grado

11 11 Affinché una ricetta, un elenco di istruzioni, possa essere considerato un algoritmo, devono essere soddisfatti i seguenti requisiti: Finitezza: Finitezza: ogni algoritmo deve essere finito, cioè composto da un numero finito di istruzioni, ciascuna delle quali deve essere eseguita in tempo finito ed un numero finito di volte Generalità: insieme di definizionedominio dellalgoritmo insieme di arrivocodominio Generalità: ogni algoritmo deve fornire la soluzione per una classe di problemi; deve pertanto essere applicabile a qualsiasi insieme di dati appartenenti allinsieme di definizione o dominio dellalgoritmo e deve produrre risultati che appartengono allinsieme di arrivo o codominio Non ambiguità: Non ambiguità: devono essere definiti in modo chiaro i passi successivi da eseguire; devono essere evitati paradossi, contraddizioni ed ambiguità; il significato di ogni istruzione deve essere univoco per chiunque esegua lalgoritmo Proprietà degli algoritmi 1

12 12 Proprietà degli algoritmi 2 Inoltre, sono proprietà essenziali (se non caratterizzanti) degli algoritmi... correttezza...la correttezza efficienza...e lefficienza corretto Un algoritmo è corretto se perviene alla soluzione del compito cui è preposto, senza difettare di alcun passo fondamentale efficiente Un algoritmo è efficiente se perviene alla soluzione del problema nel modo più veloce possibile e/o usando la minor quantità di risorse fisiche, fatta salva la correttezza

13 13 Il gioco dellundici (continua…) gioco dellundici La strategia vincente per il gioco dellundici è un algoritmo in quanto... …è finito, perché termina sempre dopo 6 mosse …è generale, perché permette al giocatore A di vincere, qualunque sia la strategia utilizzata da B …è non ambiguo, perché tutte le situazioni possibili sono prese in considerazione e per ognuna sono ben specificate le azioni da compiere

14 14 Un algoritmo deve poter essere eseguito da chiunque, senza che lesecutore sia stato necessariamente coinvolto nella formulazione del problema o nella descrizione del metodo risolutivo Gli algoritmi devono essere formalizzati per mezzo di appositi linguaggi, dotati di strutture linguistiche che garantiscano precisione e sintesi I linguaggi naturali non soddisfano questi requisiti, infatti... ambigui pesca …sono ambigui: la stessa parola può assumere significati diversi in contesti differenti (pesca è un frutto o unattività sportiva) ridondanti …sono ridondanti: lo stesso concetto può essere espresso in molti modi diversi, ad es. somma 2 a 3, calcola 2+3, esegui laddizione tra 2 e 3 Ancora sugli algoritmi...

15 15 Costanti e variabili 1 costantivariabili I dati su cui opera un algoritmo sono costanti e variabili costante Un dato è costante quando il suo valore non può essere aggiornato durante lesecuzione dellalgoritmo, né cambia per esecuzioni diverse variabile Una variabile è una coppia : può essere immaginata come una scatola sulla quale è scritto un nome e che può contenere un valore Rappresentazione di una variabile NomeValore

16 16 insieme di definizione Il valore di una variabile deve appartenere allinsieme di definizione, su cui si opera mediante regole opportune, specifiche dellinsieme nome valore attuale Data una variabile, x è il nome della variabile e v è il suo valore attuale; le variabili sono indeterminate in fase di definizione dellalgoritmo, ma corrispondono a valori ben precisi durante ogni esecuzione Esempio Esempio: Nellalgoritmo di risoluzione delle equazioni di 2° grado, a, b, c non corrispondono a nessun valore finché non si esegue lalgoritmo per trovare le soluzioni di una specifica equazione, ad esempio x 2 9x 4=0 : in fase di esecuzione, a=1, b= 9, c= 4 ; nellistruzione =b 2 4ac, è la variabile che contiene il valore del discriminante Costanti e variabili 2

17 17 Assegnazione 1 assegnazione Listruzione di assegnazione definisce il valore attuale di una variabile, che resta inalterato fino allassegnazione successiva Lassegnazione si rappresenta con il simbolo : nome di variabile espressione nome di variabile espressione nome di variabile espressione che si legge assegna alla variabile nome di variabile il valore di espressione ; lespressione a destra di è costituita da variabili, costanti e operatori Lassegnazione viene così eseguita: si valuta lespressione a destra di, sostituendo ai nomi di variabile i loro valori attuali; il risultato deve appartenere allinsieme di definizione della variabile a sinistra di il valore calcolato diventa il nuovo valore della variabile il cui nome appare a sinistra di

18 18 I nomi delle variabili possono essere scelti in modo arbitrario, ma è opportuno selezionare nomi significativi del contenuto della variabile regola dellordinamento Viceversa, è necessario rispettare la regola dellordinamento: Quando una variabile appare, in unassegnazione, a destra di, deve essere già istanziata cioè le deve essere già stato assegnato un valore Assegnazione 2

19 19 Esempi Assegnazione 3 x x+3 c 4 x 14 x 17 Dopo lassegnazione Prima dellassegnazione a b+c b 6 Prima dellassegnazione 4 c a 10 b 6 Dopo lassegnazione

20 20 Istruzioni operative Istruzioni operative, che producono risultati Istruzioni di controllo Istruzioni di controllo, che controllano il verificarsi di condizioni specificate e, in base al risultato del controllo, determinano il flusso di istruzioni da eseguire Istruzioni di salto Istruzioni di salto, che alterano il normale flusso di esecuzione delle istruzioni di un algoritmo, specificando quale sia la successiva istruzione da eseguire salto condizionato nelle istruzioni di salto condizionato, leffettiva esecuzione del salto è condizionata al verificarsi di una ipotesi specificata salto incondizionato listruzione di salto incondizionato produce sempre un salto Istruzioni di ingresso/uscita Istruzioni di ingresso/uscita, che specificano come debba essere effettuata una trasmissione di dati o messaggi fra lalgoritmo e lambiente esterno Istruzioni di inizio/fine esecuzione Istruzioni di inizio/fine esecuzione, che indicano linizio/la fine dellalgoritmo Le istruzioni 1

21 21 Esempio Calcolo delle radici di equazioni di 2 ° grado Esempio: Calcolo delle radici di equazioni di 2 ° grado acquisire i coefficienti a, b, c è unistruzione di lettura (ingresso) calcolare =b 2 4ac è unistruzione operativa se =0, x 1 =x 2 = b/2a è unistruzione di controllo, infatti lassegnazione x 1 =x 2 = b/2a viene eseguita solo se =0 comunicare i valori x 1, x 2 è unistruzione di scrittura (uscita) eseguire l'istruzione 6) è unistruzione di salto incondizionato se <0 eseguire listruzione 7) è unistruzione di salto condizionato, perché 7) è la prossima istruzione da eseguire solo se <0 Le istruzioni 2

22 22 Proposizioni e predicati 1 proposizione Una proposizione è un costrutto linguistico del quale si può asserire o negare la veridicitàEsempi falsaRoma è la capitale della Gran Bretagna falsa vera 3 è un numero intero vera valore di verità Il valore di verità di una proposizione è il suo essere vera o falsa predicato Una proposizione è un predicato se il suo valore di verità dipende dallistanziazione di alcune variabiliEsempi la variabile età è minore di 30 la variabile base è maggiore della variabile altezza

23 23 valutazione di un predicato La valutazione di un predicato è loperazione che permette di determinare se il predicato è vero o falso, sostituendo alle variabili i loro valori attuali verofalsovalori logicibooleani I valori vero e falso sono detti valori logici o booleani operatori relazionali Proposizioni e predicati possono essere espressi concisamente per mezzo degli operatori relazionali: = (uguale) (diverso) > (maggiore) < (minore) (maggiore o uguale) (minore o uguale) semplici I predicati che contengono un solo operatore relazionale sono detti semplici Proposizioni e predicati 2

24 24 pnotpoppostonegazione logicap p Dato un predicato p, il predicato not p, detto opposto o negazione logica di p, ha i valori di verità opposti rispetto a p pqcongiunzione logicapqp and q pq Dati due predicati p e q, la congiunzione logica di p e q, p and q, è un predicato vero solo quando p e q sono entrambi veri, e falso in tutti gli altri casi pqdisgiunzione logicapqp or q pq Dati due predicati p e q, la disgiunzione logica di p e q, p or q, è un predicato falso solo quando p e q sono entrambi falsi, e vero in tutti gli altri casi not andorcomposti I predicati nei quali compare almeno uno fra gli operatori logici not, and, or sono detti composti tavola di verità La tavola di verità di un predicato composto specifica il valore del predicato per ognuna delle possibili combinazioni dei suoi argomenti Proposizioni e predicati 3

25 25 Proposizioni e predicati 4 Esempio pand qp or q Le tavole di verità per i predicati p and q e p or q sono le seguenti:pq p and q p or q falso verofalsovero falso vero

26 26 Esempio not not (base > altezza) è vero solo quando il valore di base è minore o uguale del valore di altezza and età > 30 and età < 50 è vero solo quando il valore di età è compreso tra 30 e 50 or base > altezza or base > 100 è vero quando il valore di base è maggiore del valore di altezza, o quando il valore di base è maggiore di 100, o quando entrambe le condizioni sono verificate Proposizioni e predicati 5

27 27 I linguaggi per la formalizzazione di algoritmi

28 28 I diagrammi a blocchi 1 diagrammi a blocchi flowchart Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi; il diagramma a blocchi, o flowchart, è una rappresentazione grafica dellalgoritmo flusso Un diagramma a blocchi definisce il flusso di operazioni da eseguire per realizzare la trasformazione dai dati iniziali ai risultati, descritta nellalgoritmo blocco elementare Un particolare simbolo grafico, un blocco elementare, è associato ad ogni tipo di istruzione; ovvero, ogni istruzione è rappresentata allinterno di un blocco la cui forma grafica è determinata dal tipo di istruzione linee di flusso I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari

29 29 I diagrammi a blocchi 2 Blocchi elementari X Blocco di lettura/scrittura leggi/scrivi leggi/scrivi begin begin A Blocco iniziale Blocco azione end end Blocco finale Blocco di scrittura C scrivi X scrivi X Blocco di controllo falsovero

30 30 Un diagramma a blocchi è un insieme di blocchi elementari composto da: un blocco iniziale un blocco finale un numero finito n ( n 1 ) di blocchi di azione e/o di blocchi di lettura/scrittura un numero finito m ( m 0 ) di blocchi di controllo I diagrammi a blocchi 3

31 31 Linsieme dei blocchi elementari che costituiscono un algoritmo deve soddisfare le seguenti condizioni: ciascun blocco di azione o di lettura/scrittura ha una sola freccia entrante ed una sola freccia uscente ciascun blocco di controllo ha una sola freccia entrante e due frecce uscenti ciascuna freccia entra in un blocco oppure si inserisce in unaltra freccia raggiungibile ciascun blocco è raggiungibile dal blocco iniziale raggiungibile il blocco finale è raggiungibile da qualsiasi altro blocco raggiungibile Un blocco B è raggiungibile a partire da un blocco A, se esiste una sequenza di blocchi X 1,X 2,…,X n, tali che A=X 1, B=X n e X i, i=1,…, n 1, X i è connesso con una freccia a X i+1 I diagrammi a blocchi 4

32 32 I diagrammi a blocchi 5 Diagramma a blocchi dellalgoritmo per il calcolo delle radici dellequazione di 2° grado ax 2 + bx + c = 0 end Leggi a,b,c delta b 2 4ac delta=0 delta<0 x 2 ( b sqrt(delta))/2a x 1 ( b+sqrt(delta))/2a x 2 b/2a x 1 b/2a scrivi x 1 e x 2 scrivi non ci sono radici reali begin Vero Falso Vero Falso

33 33 schemi fondamentali di composizione Fra tutti i possibili schemi di flusso ne esistono alcuni che sono detti schemi fondamentali di composizione Schema di sequenza: Schema di sequenza: è uno schema elementare o uno schema di sequenza Schemi di composizione 1 end A begin S 1, S 2,…, S n schemi di flusso

34 34 Schemi di composizione 2 Schema di selezione: Schema di selezione: un blocco di controllo subordina lesecuzione di due possibili schemi di flusso al verificarsi di una condizione Nel primo caso, lo schema S viene eseguito solo se la condizione C è vera; se C è falsa, non viene eseguita alcuna azione Nel secondo caso, viene eseguito solo uno dei due schemi S v o S f, in dipendenza del valore di verità della condizione

35 35 Schema di iterazione: Schema di iterazione: si itera lesecuzione di un dato schema di flusso Nel primo caso, S può non venire mai eseguito, se la condizione C è subito falsa; nel secondo caso, S viene eseguito almeno una volta iterazione per veroiterazione per falso Quando lo schema S viene eseguito finché la condizione C si mantiene vera si parla di iterazione per vero; si ha uniterazione per falso quando S viene eseguito finché C è falsa Schemi di composizione 3

36 36 Gli schemi di flusso sono… aperti …aperti quando consentono una sola esecuzione di una sequenza di blocchi elementari chiusi …chiusi quando permettono più di uniterazione della sequenza di blocchi Gli schemi di sequenza e di selezione sono aperti, lo schema di iterazione è chiuso Schemi di composizione 4

37 37 Gli algoritmi iterativi 1 Note Note: somma La variabile somma è un contenitore di somme parziali, finché non si ottiene la somma totale richiesta La soluzione del problema viene raggiunta eseguendo azioni simili per un numero opportuno di volte Accade spesso che, per risolvere un problema, un certo insieme di operazioni debba essere eseguito un dato numero di volte Esempio Esempio: Calcolare la somma di tre interi consecutivi

38 38 cicloloop Il ciclo o loop è uno schema di flusso per descrivere, in modo conciso, situazioni in cui uno gruppo di operazioni deve essere ripetuto più volte Gli algoritmi iterativi 2 condizione di fine ciclo esce dal ciclo La condizione di fine ciclo viene verificata ogni volta che si esegue il ciclo; se la condizione assume valore vero (falso), le istruzioni vengono reiterate, altrimenti si esce dal ciclo La condizione di fine ciclo può essere verificata prima o dopo lesecuzione delliterazione istruzioni di inizializzazione Le istruzioni di inizializzazione, assegnano valori iniziali ad alcune variabili (almeno a quella che controlla la condizione di fine ciclo) Ciclo con controllo in coda Ciclo con controllo in testa

39 39 Gli algoritmi iterativi 3 Problema Problema: Calcolare la somma di tre interi consecutivi Note Note: La fase di inizializzazione riguarda la somma e lindice del ciclo Il controllo di fine ciclo viene effettuato in coda

40 40 definito enumerativo Un ciclo è definito quando è noto a priori il numero di iterazioni: un ciclo definito è detto anche enumerativo contatore del ciclo Un contatore del ciclo tiene memoria di quante iterazioni sono state effettuate; può essere utilizzato in due modi: incremento del contatore incremento del contatore: il contatore viene inizializzato ad un valore minimo (ad es. 0) e incrementato ad ogni esecuzione del ciclo; si esce dal ciclo quando il valore del contatore eguaglia il numero di iterazioni richieste decremento del contatore decremento del contatore: il contatore viene inizializzato al numero di iterazioni richiesto e decrementato di uno ad ogni iterazione; si esce quando il valore del contatore raggiunge 0 Gli algoritmi iterativi 4

41 41 indefinito Un ciclo è indefinito quando non è possibile conoscere a priori quante volte verrà eseguito La condizione di fine ciclo controlla il valore di una o più variabili modificate da istruzioni che fanno parte delliterazione terminazione Comunque, un ciclo deve essere eseguito un numero finito di volte, cioè si deve verificare la terminazione dellesecuzione del ciclo Gli algoritmi iterativi 5

42 42 Gli algoritmi iterativi 6 Problema Problema: Calcolo della media di un insieme di numeri; non è noto a priori quanti sono i numeri di cui deve essere calcolata la media I numeri vengono letti uno alla volta fino a che non si incontra un x = 0, che segnala la fine dellinsieme

43 43 nome, valore scalari Le variabili, definite come coppie, sono scalari nome, insieme di valori vettorearray elementocomponente Una coppia è una variabile vettore o array e può essere immaginata come un contenitore diviso in scomparti; ciascun scomparto può contenere un valore, detto elemento o componente del vettore indice Ciascuna componente è individuata dal nome del vettore, seguito dal relativo numero progressivo, racchiuso fra parentesi tonde: lindice del vettore dimensione La dimensione di un vettore è il numero dei suoi elementi I vettori sono particolarmente utili per collezionare dati fra loro correlati, sui quali devono essere effettuate le stesse operazioni I vettori 1

44 44 Lutilizzo di variabili vettoriali, in un algoritmo, presuppone la dichiarazione esplicita della loro dimensione La dimensione del vettore costituisce un limite invalicabile per la selezione delle componenti del vettore Esempio Esempio: v(100) asserisce che il vettore v è costituito da 100 elementi; possono essere selezionati v(12), v(57), v(89), ma non v(121) o v(763), che non esistono I vettori 2 v(4) v(1) v(2) v(3) Vettore v, costituito dai 4 elementi v(1), v(2), v(3), v(4)

45 45 I vettori 3 Esempio Esempio: Calcolare il vettore somma di due vettori di uguale dimensione n a(4) a(1) a(2) a(3) 3570 b(4) b(1) b(2) b(3) c(4) c(1) c(2) c(3)

46 46 Esempio Esempio: algoritmo per calcolare il vettore somma di due vettori Note Note: L'utilità dei vettori consiste nel- limpiego della tecnica iterativa in modo da effettuare la stessa operazione su tutti gli elementi del vettore Usando la variabile contatore di un ciclo come indice degli elementi di un vettore è possibile considerarli tutti, uno alla volta, ed eseguire su di essi loperazione desiderata I vettori 4

47 47 I vettori 5 Esempio Esempio: Algoritmo per il calcolo del massimo elemento di un vettore vero

48 48 La pseudocodifica 1 pseudocodifica PASCAL like La pseudocodifica è un linguaggio per la descrizione di algoritmi PASCAL like La descrizione di un algoritmo mediante pseudocodifica si compone di due parti... dichiarazione delle variabili la dichiarazione delle variabili usate nellalgoritmo descrizione delle azioni la descrizione delle azioni dellalgoritmo

49 49 Tipo delle variabili tipo Il tipo di una variabile indica linsieme dei valori che possono essere assegnati a quella variabile Su costanti e variabili di un tipo è possibile effettuare le operazioni che sono proprie di quel tipo e tutte le operazioni di confronto (utilizzando gli operatori relazionali) integerrealboolean string q Sono permessi i seguenti 4 tipi: integer, real, boolean, string q La pseudocodifica 2

50 50 integer integer: sono le variabili cui possono essere assegnati numeri interi; le costanti di tipo integer sono numeri interi, ad es. 1, 3, 150 real notazione scientifica real: sono le variabili cui possono essere assegnati numeri razionali; le costanti real possono essere rappresentate in notazione decimale, con un. che separa la parte intera dalla parte decimale (ad es., 5.17, , 123., 0.005) o in notazione scientifica (23.476E+2=2347.6, E 4= ) boolean truefalse boolean: sono le variabili cui possono essere assegnati i valori logici; le costanti logiche sono true e false string q stringhe string q: sono le variabili cui possono essere assegnate parole (o stringhe) costituite da q caratteri; le costanti string q sono costituite da parole di q caratteri racchiusi tra apici (che non fanno parte della costante); ad es., FABIO è una costante string 5,+ è una costante string 1 e 124 string 3 La pseudocodifica 3

51 51 Dichiarazione delle variabili var La dichiarazione delle variabili è un elenco, preceduto dalla parola var, delle variabili sulle quali lalgoritmo opera Le variabili sono suddivise per tipo: quelle dello stesso tipo sono separate luna dallaltra da una,; lelenco delle variabili dello stesso tipo è seguito dai : e dallindicazione del tipo; gli elenchi di variabili di tipo diverso sono separati dal ;, lultimo elenco è seguito da un. Esempio Esempio: varinteger var i, j, a(20): integer; real p, q: real; string 20 nome: string 20; boolean sw: boolean. La pseudocodifica 4

52 52 Descrizione delle azioni Gli schemi di flusso fondamentali sono descritti utilizzando convenzioni linguistiche: ad ogni schema di composizione corrisponde una convenzione linguistica La descrizione di un algoritmo deve soddisfare le seguenti regole: begin a)La prima azione dellalgoritmo è preceduta dalla parola begin; end b)Lultima azione dellalgoritmo è seguita dalla parola end; read c)Lazione di lettura è rappresentata dalla parola read; write d)Lazione di scrittura è rappresentata dalla parola write; e)Lo schema di sequenza di n flussi S 1, S 2,…, S n è rappresentato da S 1 ; S 2 ; S n ; La pseudocodifica 5 …

53 53 f)Gli schemi di selezione sono rappresentati come: g)Gli schemi di iterazione sono rappresentati come: La pseudocodifica 6 S, S f, S v, sono schemi

54 54 Esistono convezioni linguistiche alternative in relazione a particolari schemi di flusso Esempio Esempio: Ciclo enumerativo La pseudocodifica 7 step forendfor Nel caso che il valore di incremento sia 1, la partestep incremento della frase for...endfor può essere omessa

55 55 Esempio Esempio: Algoritmo per il calcolo del vettore somma di due vettori di numeri razionali La pseudocodifica 8 var real var a(100), b(100), c(100) : real; integer i, n : integer. begin read read n ; forfromtodo for i from 1 to n do read read a(i), b(i) ; c(i) a(i) + b(i) ; write write c(i) endfor end

56 56 Esempio Esempio: Algoritmo per il calcolo del massimo elemento di un vettore di numeri razionali La pseudocodifica 9 varreal var max, v(100) : real; integer i, n : integer.begin read read n ; forfromtodo for i from 1 to n do read read v(i) endfor max v(1) ; for from todo for i from 2 to n do if if max < v(i) then then max v(i) endif endfor write write maxend

57 57 La pseudocodifica 10 Esempio Esempio: Algoritmo per il calcolo delle radici di equazioni di 2° grado varreal var x1, x2, a, b, c, delta : real.begin read read a, b, c ; delta b 2 4ac ; if if delta < 0 then write then write non esistono radici reali else if else if delta = 0 then then x1 b/2a ; x2 x1 else else x1 ( b + delta)/2a ; x2 ( b delta)/2a endif write write x1, x2 endif end

58 58 Introduzione ai linguaggi di programmazione di alto livello

59 59 Benché siano macchine in grado di compiere operazioni complesse, i calcolatori devono essere guidati per mezzo di istruzioni appartenenti ad un linguaggio specifico e limitato, a loro comprensibile set di istruzioni linguaggio macchina A livello hardware, i calcolatori riconoscono solo comandi semplici, del tipo copia un numero, addiziona due numeri, confronta due numeri : questi comandi definiscono il set di istruzioni della macchina e i programmi che li utilizzano direttamente sono i programmi in linguaggio macchina In linguaggio macchina ogni operazione richiede lattivazione di numerose istruzioni base (il linguaggio riflette lorganizzazione della macchina più che la natura del problema da risolvere); inoltre, qualunque entità istruzioni, variabili, dati è rappresentata da numeri binari: i programmi sono difficili da scrivere, leggere e mantenere Cenni storici 1

60 60 assembly assembler Negli anni `50, tutti i programmi erano scritti in linguaggio macchina o in assembly (o assembler) assembly In assembly ogni istruzione è identificata da una sigla piuttosto che da un numero e le variabili sono rappresentate da nomi piuttosto che da numeri Esempio Esempio: carica il numero 8 nel primo registro libero della CPU LOAD 8 assemblatore I programmi scritti in assembly necessitano di un apposito programma assemblatore per tradurre le istruzioni tipiche del linguaggio in istruzioni macchina Cenni storici 2 Assembly Linguaggio macchina Codice istruzione

61 61 Cenni storici 3 Lassembly definisce una notazione simbolica che è in stretta relazione con i codici in linguaggio macchina LOAD R1, MEM1 CMP R1, R2 BEQ RISZERO STORE R1, MEM1 RISZERO: LOAD R2, MEM2 Assemblatore OPCODE (LOAD) registro

62 62 linguaggi di alto livello Oggi si utilizza lassembly solo se esistono vincoli stringenti sui tempi di esecuzione; viceversa si usano linguaggi più vicini al linguaggio naturale, i linguaggi di alto livello I linguaggi di alto livello sono elementi intermedi di una varietà di linguaggi ai cui estremi si trovano il linguaggio macchina, da un lato, ed i linguaggi naturali, come litaliano e linglese, dallaltro Cenni storici 4 I linguaggi di programmazione, progettati per manipolare informazioni, differiscono dai linguaggi naturali: sono infatti meno espressivi ma più precisi (non ambigui)

63 63 I linguaggi di programmazione di alto livello consentono al programmatore di trattare oggetti complessi senza doversi preoccupare dei dettagli della particolare macchina sulla quale il programma viene eseguito compilatoreinterprete Richiedono un compilatore o un interprete che sia in grado di tradurre le istruzioni del linguaggio di alto livello in istruzioni macchina di basso livello eseguibili dal calcolatore Un compilatore è un programma simile ad un assemblatore, ma più complesso, infatti… esiste una corrispondenza biunivoca fra istruzioni in assembler ed istruzioni macchina ogni singola istruzione di un linguaggio di alto livello corrisponde a molte istruzioni in linguaggio macchina: quanto più il linguaggio di programmazione si discosta dal linguaggio macchina, tanto più il lavoro di traduzione del compilatore è difficile Scopi e caratteristiche 1

64 64 Scopi e caratteristiche 2 Esempio PASCAL Esempio: In PASCAL, lassegnazione e := (a+b) (c+d) ; calcola lespressione e, ottenuta eseguendo una serie di operazioni aritmetiche sulle variabili a, b, c, e d, salvando opportunamente il risultato nella posizione di memoria etichettata da e ; in linguaggio assembly la stessa istruzione potrebbe essere riscritta nel modo seguente: LOAD LOAD a, %r0 LOAD LOAD b, %r1 ADD ADD %r0, %r1 LOAD LOAD c, %r2 LOAD LOAD d, %r3 ADD ADD %r2, %r3 MULT MULT %r1, %r3 STORE STORE %r3, e

65 65 I linguaggi che non dipendono dallarchitettura della macchina offrono due vantaggi fondamentali: i programmatori non devono cimentarsi con i dettagli architetturali di ogni calcolatore i programmi risultano più semplici da leggere e da modificare portabilitàleggibilitàmantenibilità portabilità, leggibilità, mantenibilità Scopi e caratteristiche 3

66 66 Scopi e caratteristiche 4 Portabilità Portabilità: i programmi scritti per un calcolatore possono essere utilizzati su qualsiasi altro calcolatore, previa ricompilazione Leggibilità Leggibilità: la relativa similitudine con i linguaggi naturali rende i programmi più semplici, non solo da scrivere, ma anche da leggere Mantenibilità Mantenibilità: con questo termine si intende far riferimento a modifiche di tipo correttivo, perfettivo, evolutivo e adattivo; i programmi scritti in linguaggi di alto livello sono più semplici da modificare e da correggere analisi di correttezza La possibilità di codificare algoritmi in maniera astratta si traduce in una migliore comprensibilità del codice e quindi in una più facile analisi di correttezza astrazione Lessenza della programmazione di alto livello, ovvero delluso di linguaggi di elevata potenza espressiva, risiede nella capacità di astrazione, cioè nella possibilità di prescindere dai dettagli considerati inessenziali ai fini della soluzione di un problema, favorendo con ciò la concentrazione sugli elementi fondamentali. Un linguaggio di programmazione deve fornire all'utente buoni meccanismi per definire autonomamente tutte le astrazioni di cui ha bisogno: il programmatore, deve disporre di strumenti sufficienti per spiegare al calcolatore tutte le operazioni che intende effettuare. La funzione svolta da un programma ben strutturato in un linguaggio di programmazione di alto livello può essere facilmente compresa da un lettore: i simboli e le istruzioni utilizzate si avvicinano più ai simboli ed alle istruzioni di uso comune che non a quelle interne del calcolatore. astrazione Lessenza della programmazione di alto livello, ovvero delluso di linguaggi di elevata potenza espressiva, risiede nella capacità di astrazione, cioè nella possibilità di prescindere dai dettagli considerati inessenziali ai fini della soluzione di un problema, favorendo con ciò la concentrazione sugli elementi fondamentali. Un linguaggio di programmazione deve fornire all'utente buoni meccanismi per definire autonomamente tutte le astrazioni di cui ha bisogno: il programmatore, deve disporre di strumenti sufficienti per spiegare al calcolatore tutte le operazioni che intende effettuare. La funzione svolta da un programma ben strutturato in un linguaggio di programmazione di alto livello può essere facilmente compresa da un lettore: i simboli e le istruzioni utilizzate si avvicinano più ai simboli ed alle istruzioni di uso comune che non a quelle interne del calcolatore.

67 67 riduzione di efficienza Eventuale svantaggio delluso dei linguaggi di alto livello è la riduzione di efficienza: È possibile utilizzare istruzioni macchina diverse per scrivere programmi funzionalmente equivalenti: il programmatore ha un controllo limitato sulle modalità con cui il compilatore traduce il codice Tuttavia… i compilatori attuali ricorrono a trucchi di cui molti programmatori ignorano lesistenza La ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale la leggibilità e la portabilità sono cruciali Scopi e caratteristiche 5

68 68 Un esempio di programma PASCAL Problema run time Problema: Si legga una lista di valori, la cui lunghezza non è nota a priori (è un dato in ingresso), stampando un opportuno messaggio se un certo valore, anchesso letto a run time, appartiene o non appartiene alla lista trovato un numero uguale Falso leggi ncorr trovato FALSE i 1 begin Falso ncorr = ncomp Vero leggi n, ncomp i i+1 trovato TRUE i n Vero trovato = TRUE non trovato un numero uguale Vero Falso end

69 69 PROGRAM PROGRAM Search(input,output); (* Ricerca di un valore desiderato in una lista *)VAR INTEGER n : INTEGER; (* lunghezza della lista *) INTEGER ncomp : INTEGER; (* termine di paragone *) INTEGER ncorr : INTEGER; (* valore nella lista *) BOOLEAN trovato : BOOLEAN; (* TRUE se si è trovato *) INTEGER i : INTEGER; (* contatore dei valori della lista *)BEGIN READ READ( n ); WRITELN WRITELN(Ci sono, n, valori.); READ READ( ncomp ); WRITELN WRITELN(Ricerca di, ncomp,.); FALSE trovat o := FALSE; (* non ancora trovato alcun valore *) FORTODO FOR i = 1 TO n DO BEGIN BEGIN READ READ( ncorr ); WRITELN WRITELN( ncorr ); IF IF ncorr = ncomp THENTRUE THEN trovato := TRUE; (* trovato un valore uguale *) END END (* fine ciclo for *) IF IF trovato THEN WRITELN THEN WRITELN (Trovata corrispondenza) ELSE WRITELN ELSE WRITELN (Non trovata corrispondenza); END END (* fine programma Search *)


Scaricare ppt "1 Sommario UNIVAC Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly (gli stessi costruttori dellENIAC)"

Presentazioni simili


Annunci Google