La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

IL PROBLEMA DEL PROGETTO. Quali metodologie e tecniche usare? Come arrivare a intuire lalgoritmo che ci serve? Come si costruisce la soluzione a un problema?

Presentazioni simili


Presentazione sul tema: "IL PROBLEMA DEL PROGETTO. Quali metodologie e tecniche usare? Come arrivare a intuire lalgoritmo che ci serve? Come si costruisce la soluzione a un problema?"— Transcript della presentazione:

1 IL PROBLEMA DEL PROGETTO

2 Quali metodologie e tecniche usare? Come arrivare a intuire lalgoritmo che ci serve? Come si costruisce la soluzione a un problema?

3 IL PROBLEMA DEL PROGETTO Due dimensioni progettuali: Programmazione in piccolo (in-the-small) Programmazione in grande (in-the-large) Principi cardine: procedere per livelli di astrazione garantire al programma strutturazione e modularità

4 IL PROBLEMA DEL PROGETTO La descrizione del problema, in genere, non indica direttamente il modo per ottenere il risultato voluto Occorrono metodologie per affrontare il problema del progetto in modo sistematico per superare la sindrome del foglio bianco

5 METODOLOGIE

6 Procede per decomposizione del problema in sotto-problemi, per passi di raffinamento successivi

7 METODOLOGIE Procede per composizione di componenti e funziona- lità elementari, fino alla sintesi dellintero algoritmo (dal dettaglio allastratto)

8 METODOLOGIA TOP-DOWN Si parte dal problema e dalle proprietà note sul dominio dei dati Si disgrega il problema in sottoproblemi Si affronta ciascun sottoproblema (con la stessa metodologia) fino a raggiungere problemi risolubili con le mosse elementari

9 IL PROBLEMA DEL PROGETTO Dunque, dato un problema... iniziare subito a scrivere il programma..? NO ! così si scrivono a fatica programmi di dieci righe spesso sono errati, e non si sa perché nessuno capisce cosa è stato fatto (dopo un po, nemmeno lautore...)

10 IL PROBLEMA DEL PROGETTO Dato un problema... iniziare subito a scrivere il programma..? NO ! nessuno sa se questa soluzione sia la migliore o se ce ne fossero altre se domani occorre modificare qualcosa, non si sa dove mettere le mani se si deve cambiare linguaggio… meglio non pensarci!

11 IL PROBLEMA DEL PROGETTO Quando rischia di accadere tutto ciò? quando la specifica della soluzione coincide con la fase di codifica che invece sono, concettualmente, due momenti distinti e tali devono restare anche in pratica!

12 UN ESEMPIO Problema: Data una temperatura espressa in gradi Celsius, calcolare il corrispondente valore espresso in gradi Fahrenheit Approccio: si parte dal problema e dalle proprietà note sul dominio dei dati

13 UN ESEMPIO Problema: Data una temperatura espressa in gradi Celsius, calcolare il corrispondente valore espresso in gradi Fahrenheit Specifica della soluzione: Relazioni tra grandezze esistenti nello specifico dominio applicativo: c * 9/5 = f - 32 c = (f - 32) * 5/9 oppure f = 32 + c * 9/5

14 UN ESEMPIO LAlgoritmo corrispondente: Dato c calcolare f sfruttando la relazione f = 32 + c * 9/5 SOLO A QUESTO PUNTO si sceglie un linguaggio si codifica lalgoritmo in tale linguaggio

15 LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi di computazione Linguaggi di coordinazione Un particolare linguaggio di programmazione

16 LINGUAGGI DI COMPUTAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dellutente) quali istruzioni di controllo mette a disposizione (quali operazioni e in quale ordine di esecuzione) PROGRAMMA = DATI + CONTROLLO

17 IL LINGUAGGIO C Il Linguaggio di Programmazione C è costituito da un linguaggio di computazione (il C vero e proprio) un linguaggio di coordinazione fornito come allegato, sotto forma di librerie standard

18 IL LINGUAGGIO C UN PO DI STORIA definito nel 1972 (AT&T Bell Labs) per sostituire lassembler prima definizione precisa: Kernigham & Ritchie (1978) prima definizione ufficiale: ANSI (1983)

19 IL LINGUAGGIO C CARATTERISTICHE linguaggio sequenziale, imperativo, strutturato a blocchi usabile anche come linguaggio di sistema adatto a software di base, sistemi operativi, compilatori, ecc. portabile, efficiente, sintetico ma a volte poco leggibile...

20 IL LINGUAGGIO C Basato su pochi concetti elementari dati (tipi primitivi, tipi di dato) espressioni dichiarazioni / definizioni funzioni istruzioni / blocchi

21 DATI Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi –dominio dei numeri naturali e interi –dominio dei numeri reali (con qualche approssimazione) –dominio dei caratteri –dominio delle stringhe di caratteri

22 TIPI DI DATO Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico –un insieme di valori –la loro rappresentazione in memoria, e –un insieme di operazioni ammissibili permettere di effettuare controlli statici (al momento della compilazione) sulla correttezza del programma.

23 TIPI DI DATO PRIMITIVI IN C caratteri –charcaratteri ASCII interi con segno –short (int) –int??????? –long (int) naturali (interi senza segno) –unsigned short (int) –unsigned (int)??????? –unsigned long (int)

24 caratteri –charcaratteri ASCII interi con segno –short (int) –int??????? –long (int) naturali (interi senza segno) –unsigned short (int) –unsigned (int)??????? –unsigned long (int) TIPI DI DATO PRIMITIVI IN C ATTENZIONE: la dimensione di int non è fissa, dipende dal compilatore considerato. Unica certezza: short < int < long

25 caratteri –charcaratteri ASCII interi con segno –short (int) –int??????? –long (int) naturali (interi senza segno) –unsigned short (int) –unsigned (int)??????? –unsigned long (int) TIPI DI DATO PRIMITIVI IN C … e lo stesso vale per lunsigned int

26 TIPI DI DATO PRIMITIVI IN C reali –floatsingola precisione (32 bit) –doubledoppia precisione (64 bit) boolean –non esistono in C come tipo a sé stante –si usano gli interi: zero indica FALSO ogni altro valore indica VERO –convenzione: suggerito utilizzare uno per VERO

27 COSTANTI DI TIPI PRIMITIVI interi (in varie basi di rappresentazione) reali –in doppia precisione E E-1 –in singola precisione 24.0F 2.4E1F 240.0E-1F

28 COSTANTI DI TIPI PRIMITIVI caratteri –singolo carattere racchiuso fra apici 'A' 'C' '6' –caratteri speciali: '\n' '\t' '\'' '\\' '\"' –caratteri indicati tramite la loro codifica ASCII: '\ nnn ', '\0x hhh ' dove nnn = numero ottale, hhh = numero esadecimale '\041' '\0' '\0x31'

29 STRINGHE Una stringa è una collezione di caratteri delimitata da virgolette "ciao" "Hello\n" In C le stringhe sono semplici sequenze di caratteri di cui lultimo, sempre presente in modo implicito, è '\0' "ciao" = { 'c', 'i', 'a', 'o', '\0' }

30 ESPRESSIONI Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere sempli- ce o composta (tramite aggregazio- ne di altre espressioni)

31 ESPRESSIONI SEMPLICI Quali espressioni elementari? costanti – A ciao.... simboli di variabile –xpippo pigreco …. simboli di funzione –f(x) –concat(alfa,beta) –...

32 OPERATORI ED ESPRESSIONI COMPOSTE Ogni linguaggio introduce un insieme di operatori che permettono di aggregare altre espressioni (operandi) per formare espressioni composte con riferimento a diversi domini / tipi di dato (numeri, testi, ecc.)

33 ESPRESSIONI COMPOSTE Esempi 2 + f(x) 4 * % 2 + arcsin(0.5) strlen(concat(alfa,beta)) a && (b || c)...

34 CLASSIFICAZIONE DEGLI OPERATORI Due criteri di classificazione: –in base al tipo degli operandi –in base al numero degli operandi

35 ESPRESSIONI E OPERATORI ARITMETICI

36 ESPRESSIONI E OPERATORI RELAZIONALI Sono tutti operatori binari:

37 ESPRESSIONI E OPERATORI RELAZIONALI Attenzione: non esistendo il tipo boolean, in C le espressioni relazionali denotano un valore intero –0 denota falso (condizione non verificata) –1 denota vero (condizione verificata)

38 ESPRESSIONI E OPERATORI RELAZIONALI Quindi, –sono possibili, in astratto, espressioni miste come: (n != 0) = = n /* Vero se n vale 1 o 0 */ –orrende e da evitare!

39 ESPRESSIONI E OPERATORI LOGICI –Anche le espressioni logiche denotano un valore intero –da interpretare come vero (1) o falso (0)

40 ESPRESSIONI E OPERATORI LOGICI Anche qui sono possibili espres- sioni miste, utili in casi specifici 5 && 7 0 || 33 !5 Valutazione in corto-circuito –la valutazione dellespressione cessa appena si è in grado di determinare il risultato –il secondo operando è valutato solo se necessario

41 VALUTAZIONE IN CORTO CIRCUITO - ESEMPI –22 || x già vera in partenza perché 22 è vero –0 && x già falsa in partenza perché 0 è falso –a && b && c se a&&b è falso, il secondo && non viene neanche valutato –a || b || c se a||b è vero, il secondo || non viene neanche valutato

42 ESPRESSIONI CONDIZIONALI Una espressione condizionale è introdotta dalloperatore ternario condiz ? espr1 : espr2 Lespressione denota: –o il valore denotato da espr1 –o quello denotato da espr2 –in base al valore della espressione condiz

43 ESPRESSIONI CONDIZIONALI condiz ? espr1 : espr2 se condiz è vera, lespressione nel suo complesso denota il valore denotato da espr1 se condiz è falsa, lespressio- ne nel suo complesso denota il valore denotato da espr2

44 ESPRESSIONI CONDIZIONALI - ESEMPI –3 ? 10 : 20 denota sempre 10 (3 è sempre vera) –x ? 10 : 20 denota 10 se x è vera (diversa da 0), oppure 20 se x è falsa (uguale a 0) –(x>y) ? x : y denota il maggiore fra x e y

45 ESPRESSIONI CONCATENATE Una espressione concatenata è introdotta dalloperatore di concatenazione espr1, espr2, …, esprN tutte le espressioni vengono valutate (da sinistra a destra) lespressione esprime il valore denotato da esprN

46 ESPRESSIONI CONCATENATE - ESEMPI Supponiamo che –i valga 5 –k valga 7 Allora lespressione: i + 1, k - 4 denota il valore denotato da k-4, cioè 3.

47 OPERATORI INFISSI, PREFISSI, e POSTFISSI Le espressioni composte sono strutture formate da operatori applicati a uno o più operandi Ma.. dove posizionare loperatore rispetto ai suoi operandi?

48 OPERATORI INFISSI, PREFISSI, e POSTFISSI Tre possibili scelte: prima notazione prefissa Esempio: in mezzo notazione infissa Esempio: dopo notazione postfissa Esempio: 3 4 +

49 OPERATORI INFISSI, PREFISSI, e POSTFISSI Le notazioni prefissa e postfissa non hanno problemi di priorità e/o associatività degli operatori –non cè mai dubbio su quale operatore vada applicato a quali operandi La notazione infissa richiede regole di priorità e associatività –per identificare univocamente quale operatore sia applicato a quali operandi

50 ESEMPI Notazione prefissa: * –si legge come (4 + 5) * 6 –denota quindi 54 Notazione postfissa: * –si legge come 4 * (5 + 6) –denota quindi 44

51 PRIORITÀ DEGLI OPERATORI PRIORITÀ: specifica lordine di valutazione degli operatori quando in una espressione compaiono operatori (infissi) diversi Esempio: * 20 –si legge come 3 + (10 * 20) perché loperatore * è più prioritario di + NB: operatori diversi possono comunque avere egual priorità

52 ASSOCIATIVITÀ DEGLI OPERATORI ASSOCIATIVITÀ: specifica lordine di valutazione degli operatori quan- do in una espressione compaiono operatori (infissi) di egual priorità Un operatore può quindi essere associativo a sinistra o associativo a destra

53 ASSOCIATIVITÀ DEGLI OPERATORI ASSOCIATIVITÀ: specifica lordine di valutazione degli operatori quan- do in una espressione compaiono operatori (infissi) di egual priorità Esempio: –si legge come (3 - 10) + 8 perché gli operatori - e + sono equiprioritari e associativi a sinistra

54 PRIORITÀ E ASSOCIATIVITÀ Priorità e associatività predefinite possono essere alterate mediante luso di parentesi Esempio: (3 + 10) * 20 –denota 260 (anziché 203) Esempio: 30 - (10 + 8) –denota 12 (anziché 28)

55 ORDINE DI VALUTAZIONE DEGLI OPERANDI Priorità e associatività –dicono in che ordine saranno valutate le operazioni –NON in che ordine procurarsi gli operandi!

56 ORDINE DI VALUTAZIONE DEGLI OPERANDI Esempio: le due espressioni –(3 + f(x)) + g(y) – 3 + (f(x) + g(y)) possono essere entrambe valutate –o calcolando prima f(x) e poi g(y) –o viceversa

57 ORDINE DI VALUTAZIONE DEGLI OPERANDI Lordine di valutazione degli operandi è una regola semantica: Il C non la precisa ambiguità! –non cè modo di saperlo! –le parentesi non servono a nulla (è una regola semantica, non sintattica!) –compilatori diversi potrebbero fare scelte diverse

58 ORDINE DI VALUTAZIONE DEGLI OPERANDI Per imporre un ordine specifico, bisogna serializzare le operazioni Esempio: anziché –(3 + f(x)) + g(y) scrivere 1) z1 = f(x) 2) z2 = g(y) 3) (3 + z1) + z2

59 RIASSUNTO OPERATORI DEL C (1/2)

60 RIASSUNTO OPERATORI DEL C (2/2)

61 GRAMMATICA DELLE ESPRESSIONI Associatività e priorità degli operatori sono determinate dalle regole sintat- tiche definite dalla grammatica delle espressioni. Regole diverse possono comportare –diversa priorità fra gli operatori –diversa associatività fra operatori equiprioritari

62 GRAMMATICA DELLE ESPRESSIONI Alcune delle produzioni principali:

63 GRAMMATICA DELLE ESPRESSIONI La scelta di riscrivere come somma algebrica di come prodotto o rapporto di impone una gerarchia fra gli operatori corrispondenti, e dunque definisce la priorità degli operatori (*, / più prioritari)

64 GRAMMATICA DELLE ESPRESSIONI Esempio

65 GRAMMATICA DELLE ESPRESSIONI La scelta di scrivere una grammatica ricorsiva a sinistra rende gli operatori aritmetici associativi a sinistra, e dunque definisce la loro associatività In questo modo otteniamo operatori che si comportano come quelli della aritmetica a cui siamo abituati.

66 ALBERO SINTATTICO DELLESPRESSIONE 2 – * (6 % ( )) * 4% 6+ 23

67 GRAMMATICHE : UN CONTROESEMPIO Attenzione: una grammatica ricorsiva a destra –sarebbe lecita in astratto… –ma darebbe luogo a una matematica alquanto inusuale!

68 GRAMMATICHE: UN CONTROESEMPIO Ad esempio, qui verrebbe valutata come 2 - (5 + 6)…. !!!

69 UN ULTERIORE CONTROESEMPIO Con regole non ricorsive, non esiste associatività In effetti, espressioni come non sono possibili: occorrono sempre le parentesi!


Scaricare ppt "IL PROBLEMA DEL PROGETTO. Quali metodologie e tecniche usare? Come arrivare a intuire lalgoritmo che ci serve? Come si costruisce la soluzione a un problema?"

Presentazioni simili


Annunci Google