100
fond. di informatica 1 parte 4 1 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna maria carminelli gregori [email protected] Ancora linguaggio C & C++

Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

Embed Size (px)

Citation preview

Page 1: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 1

fondamenti di informatica parte 4appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008dianna maria carminelli [email protected] linguaggio C & C++

Page 2: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 2

Esercizi propostiOra che le frasi più importanti del C e C++ …calcolo del M.C.D. e del m.c.m. di 2 interi; //calcolo del M.C.D. di 2 numeri interi con //algoritmo di Euclide: lettura di 2 interi dei quali

uno maggiore dell’altro e inizializza resto =1; // Fintantochè il resto è diverso da 0 fai: // { dividi il più grande (dividendo) per il più piccolo (divisore) // analizza il resto della divisione // assegna al dividendo il valore del divisore ed al divisore il valore del resto } // Il divisore dell’ ultima divisione è il M.C.D.

Page 3: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 3

Prima di proseguire ancora qualche riflessione utile.E’ gia’ stato detto che lo schema di flusso puo’

essere di notevole aiuto quando la logica del programma da costruire non e’ semplice. Altrimenti puo’ bastare indicare nei commenti gli obiettivi nel linguaggio naturale (pseudocodice).

Se nel tema dell’ esame (applicativo) gli obiettivi sono posti con la stesura stessa (come appare anche dal testo seguente relativo all’ esame del 17.10.2000) lo schema di flusso non occorre e non e’ richiesto.

Page 4: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 4

Tema del 17.10.2000Scrivere in C++ un programma, strutturato

in sottoprogrammi, che letti da tastiera 3 dati numerici, positivi e ciascuno <1

_ ne valuti il minimo e il massimo;_ se il minimo e’ inferiore a 0.25 proceda a

moltiplicare per 1.1 i dati e a rivalutarne il minimo e il massimo, ripetendo tali operazioni fintantoche’ il minimo risulti maggiore o uguale a 0.25;

(segue)

Page 5: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 5

Tema ..._ visualizzi sul video o i dati modificati, o la stringa ”Non occorre modificare i valori letti”;

_ (memorizzi in una tabella in Memoria Centrale e) visualizzi sul video i dati originali.

N.B. E' SCONSIGLIATO L' USO DI VARIABILI GLOBALI.

L’ uso delle tabelle sara’ mostrato +oltre quindi nell’ ultima domanda attualmente e’ considerata solo la richiesta di visualizzazione.

Page 6: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 6

Considerazioni e ...I 3 dati numerici, sono positivi e ciascuno

<1: per memorizzarli occorreranno 3 variabili di tipo …. Di questi 3 dati si deve valutare il minimo e il massimo, NON l’ ordinamento !

Per valutare il minimo occorre considerare una variabile dello stesso tipo dei dati e chiamarla per esempio min. Per il massimo la variabile dello stesso tipo sara’ max.

La rivalutazione del minimo implica un procedimento iterativo che si puo’ realizzare con una funzione contenente la frase while.

Page 7: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 7

<condizione>Nella sintassi delle frasi if, while et similia

compare una condizione o asserzione logica che puo’ essere vera (True) o falsa (False). Sono due possibili valori di stato che vengono assunti da una qualsiasi asserzione logica nel caso che essa si verifichi o no. Potendo contrassegnare un’ asserzione logica con un identificatore di variabile, questa assumera’ il valore vero se l’ asserzione logica si verifica, falso in caso contrario. Pero’ il significato della variabile diventa quello di una variabile logica

Page 8: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 8

Il discorso quindi si apre verso una nuova direzione che e’ la

logica, trattata da molteplici studiosi ed autori gia’ nel periodo greco-romano (1 es. Aristotele)

La logica matematica studia i possibili mezzi matematici atti a descrivere la logica delle proposizioni. Tra i suoi studiosi c’ e’ per esempio il filosofo Leibnitz. Un logico-matematico molto importante e’ George Boole che nel 1847 publico’ un trattato di logica matematica che da lui prese il nome di Algebra di Boole.

A questo tipo di algebra ci introducono anche: ...

Page 9: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 9

Gli operatori logici del C e C++ :

Negazione not !Prodotto logico and &&Somma logica or ||Il loro significato sara’ chiarito proprio dall’

algebra di Boole ed anche dall’ esempio seguente che puo’ facilitarne l’ introduzione. L’ es. si riferisce al prg. project15 di programm4 che converte minuscole in maiuscole. La frase if che li’ si usa e’ simile alla seguente:

Page 10: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 10

&& = and e inoltre if (car>=‘a’){if (car<=‘z’) putchar (car+’A’-’a’) }else putchar (car);Significato: se car e’ compreso nell’intervallo a-z

allora scrivi car dopo averlo convertito in maiuscolo se no scrivilo cosi’ come e’. (Remember: A=6510 , a=9710 in pratica è una traslazione nella scala dei codici.) Con gli operatori logici la frase puo’ essere cosi’ riscritta:

if ((car>=‘a’) && (car<=‘z’)) putchar (car+’A’-’a’) else putchar (car); // 65=A________90=Z__97=a________121=z come è in project23. Si deduce dunque che: …

Page 11: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 11

il collegamento tra espressioni relazionali

puo’ avvenire con operatori logici in modo da costruire espressioni logiche.

Preciso significato logico dell’ operatore && di collegamento nell’esempio precedente:

se car >’a’ e inoltre car < ‘z’ allora convertilo.L’ espressione car >’a’ && car < ‘z’ e’ di tipo

logico. Il C non prevedeva alcun tipo di dato logico e occorreva usare il tipo int con i 2 valori 0 e 1 per rappresentare 0 False (Falso) e 1 True (Vero). Il C++ nelle ultime versioni, prevede il tipo bool per rappresentare variabili logiche. Vedere project71 in programm2 dove ripeti è stata dichiarata variabile logica ossia bool ripeti;

Page 12: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 12

Il significatodegli operatori logici del C e C++ e’ il

seguente:Negazione not ! => opposto diProdotto logico and && => e inoltreSomma logica or || => oppureLe costanti logiche True=Vero=1 e

False=Falso=0 (che puo’ assumere ogni variabile e/o espressione logica) sono tipiche dell’ algebra di Boole, non del C dove venivano definite con

#define True 1#define False 0

Queste definizioni appaiono nei prg. per compatibilità col C

Page 13: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 13

Come tradurre costanti ed operazioni dell’ A.d.B. in C++

Per prima cosa si considerano le costanti True e False. In C++ la definizione esiste già, in C puo’ avvenire con la direttiva al precompilatore già vista:

#define True 1 // in C basta che sia positiva 0#define False 0Stabilito che True = 1 si capisce il significato del

ciclo infinito while(1) ed anche alcune condizioni del tipo: if (ripeti) cout<< “ch”; ….

O NO ? Se NO cfr. programm1 e provare

Page 14: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 14

True e Falsesono le 2 uniche costanti logiche dell’ algebra

di Boole con valori: False=0 True 0 posta = 1Le variabili booleane o logiche sono simili alle

variabili numeriche usate nell’ algebra classica, ma possono assumere solo questi 2 valori ossia sono binarie. Oggetto dell’ algebra di Boole sono insiemi di variabili con nomi diversi e contenenti False = 0 o True =1.

Sulle 2 entita’ 0 e 1 si possono introdurre le 3 operazioni basilari dell’ algebra di Boole.

Page 15: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 15

Algebra di BooleL’ idea di G. Boole era quella di automatizzare

il ragionamento umano. Punto di partenza del suo discorso sono le proposizioni con significato di osservazioni e/o ‘asserzioni logiche’. Es. Oggi piove; Prendo un taxi; Sono ricco; Socrate e’ un uomo; .…Di ciascuna di queste si puo’ dire che e’ vera o falsa. (Quali altre non hanno questo significato? Per es. le ingiunzioni: Non uscire!)

Ad ogni asserzione logica si puo' associare una variabile a 2 valori (binaria) contenente uno dei 2 valori Vero o Falso, (True , False), 1 o 0. Si tratta delle variabili booleane o logiche.

Page 16: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 16

Operazioni di base dell’ algebra booleana sono:

il prodotto logico o congiunzione = and , la somma logica o disgiunzione = or ,la complementazione o negazione = not. La definizione di ogni operazione avviene

tramite una tabellina: in quelle del prodotto e della somma compaiono due variabili indipendenti ed una variabile dipendente che contiene il risultato; in quella della negazione la variabile indipendente e’ solo una come la variabile dipendente.

Page 17: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 17

Tabellina di Prodotto (congiunzione = and )

X Y X Y con X e Y var. indipend. e X Y var. dipend. 0 0 0 1 0 0 0 1 0 1 1 1

Tabellina di Somma (disgiunzione = or ) X Y X+Y con X e Y var. indipend. e X+Y var. dipend. 0 0 0 1 0 1 ARITMETICA ELEMENTARE, MA PARTICOLARE 0 1 1 perche’ 1 e’ il tetto oltre il quale non si va !!! 1 1 1

Page 18: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 18

Tabellina di negazione e … funzioni elementari !

A not (A)=Ā con A var. indipend. e not(A) var. dipend. 0 1 not (A) e’ indicata anche con A barrato 1 0 ossia A negato o -A

Ogni operazione puo’ essere considerata come una funzione elementare di 1 o 2 variabili

G.Boole, evidenziando la correlazione tra le var. binarie e le proposizioni logiche associabili ad esse, sottolinea come anche le operazioni booleane su tali proposizioni logiche assumono un significato logico.

Page 19: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 19

Significato logico delle operazioni booleane (esempi)

Operazione logica congiunzione = and = . = ‘e inoltre’ Piove Ho soldi Prendo taxi X Y X Y (come in algebra e’ omesso il . ) 0 0 0 1 0 0 0 1 0 1 1 1 Oper. logica complementazione Fa freddo Non Fa freddo se la var. vale 1 il risultato e’ 0 A not (A)=Ā “ “ “ “ 0 “ “ “ 1 0 1 1 0

Page 20: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 20

Operazioni algebriche ==>operazioni logiche

Operazione logica disgiunzione = or = + = ‘oppure’ Piove Fa fresco Metto impermeabile X Y X + Y 0 0 0 1 0 1 0 1 1 1 1 1

Altro esempio: sia b = oggi piove ed e’ tempo brutto; c = oggi e’ tempo bello; se b = true (=1) deve essere c = false (=0) e viceversa, e

poi non puo’ essere che sia b=c=true

Page 21: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 21

Conclusioni:1a conclusione: l’ A.d.B. definisce operazioni di

tipo matematico che permettono di interpretare operazioni logiche;

2a conclusione: gli operatori dell’ A.d.B. possono effettuare automaticamente le proposizioni logiche tipiche dell’ intelligenza umana … primo passo verso la programmazione logica (Prolog);

3a conclusione: data la semplicita’ dell’ A.d.B. e’ possibile l’ automazione dei suoi calcoli con circuiti elettronici.

Page 22: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 22

Gli operatori logici del C e C++ (come gia’ visto) collegano le variabili logiche o le

espressioni relazionali e permettono di ottenere cosi’ un’ espressione logica.

Complementazione not !Prodotto logico and &&Somma logica or ||Es. di uso in project23 di programm4.Con questi operatori o simili, ma di uguale significato,

il C, C++ e gli altri linguaggi di programmazione come il Pascal, il Basic, ... possono essere usati per costruire programmi con analisi di tipo logico (per es. gli Expert System per le diagnosi automatiche.)

Page 23: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 23

A proposito della variabile logica da usare in project22… riprendermo il discorso alla fine di parte 4

Page 24: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 24

A.d.B. e dualita’ L’ A.d.B. si puo’ definire in modo molto rigoroso

introducendo il concetto di reticolo caro ai matematici. In questo approccio elementare si introdurrano le Proprieta’ degli elementi, degli operatori logici e delle operazioni logiche.

a) l’ elemento 0 si dice duale dell’ elemento 1, l’ operatore + duale dell’ operatore . e vale la seguente legge di dualita’:

b) da qq. identita’ booleana se ne puo’ trarre un’ altra per dualita’ sostituendo i rispettivi duali agli elementi 0 e 1 ed a ogni operatore.

Page 25: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 25

c) proprieta’ delle operazioni logiche: si dimostrano con

tabelline dette tabelle di verita’ e si possono estendere a n variabili.

1) associativa della somma: (A+B)+C = A+(B+C)NOTA: la somma di 2 o piu’ variabili assume il valore 0

solo se tutte la var. sono 0 e assume 1 negli altri casi2) associativa del prodotto: (A B)C = A(BC)NOTA: il prodotto di 2 o piu’ variabili assume il val. 1

solo se tutte la var. sono 1 e assume 0 negli altri casi

Page 26: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 26

Proprieta’ delle operazioni dell’ Algebra di Boole

3) doppia negazione: not (not A) = A 4) distributiva del prodotto: A (B+C) = AB + AC5) distributiva della somma: A+(BC) = (A+B)(A+C) (piove o (c’e’ vento e

inoltre fa freddo) = (piove o c’e’ vento) e inoltre (piove o fa freddo))

6) assorbimento AA = A A+A = A7) proprieta’ del complemento: A+Ā =1

Page 27: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 27

Proprieta’ fondamentali & Legge di de Morgan:

not (A+B) = not(A)not(B) il negato della somma logica = prodotto dei negati (ossia il negato di piove o fa fresco = non piove e inoltre non fa fresco)

duale: not(AB) = not(A) + not(B)Fa comodo per le esclusioni, per es. se si vuole inviare

posta in UE, ma non in Belgio né in Francia, si può scrivere in entrambi i modi seguenti:

if ( !(stato== “Belgio” || stato==“Francia”) ) invia(p); if (!(stato== “Belgio”) && !(stato==“Francia”))inv(p);Altro esempio in project233 programm4 e di

seguito.

Page 28: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 28

main (){ /* Inizio programma */ char car; cout<<"\ndammi un carattere:"; while ((car = getchar()) != EOF)

{ //not( A + B )//if (( car >= 'f') && ! ((car >= 't')||(car == 'h')))putchar(car);

if (( car >= 'f')&& !(car >= 't')&& !(car == 'h')) putchar(car); //not A and not B } return 0;} /* Fine programma */

Page 29: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 29

Saltare fino a 30 compresode Morgan (continua)

Legge di de Morgan estesa: (chiarisce la dualita’ )

se in un’ espressione booleana si sostituisce ogni variabile col suo complemento, ogni operatore + con l’operatore prodotto, ogni operatore prodotto con l’operatore + si ottiene il complemento dell’ espressione data.

Page 30: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 30

Applicazione alla legge di de Morgan duale che e’:not(AB) = not(A) + not(B) (il negato del

prodotto = somma dei negati) Se in not(AB) (1o menbro) si sostituisce A con not(A), B con not(B) e l’ operatore . con +

si ottiene: not(not(A) + not(B)) ossia il complemento di

not(A) + not(B) (2o menbro) che e’ uguale a not(AB)!! quindi il complemento di not(AB)=AB,

o come si indichera’ tra 2 diapo, nand(AE) = (Ā+Ē).

Page 31: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 31

Operazioni algebriche ==> circuiti logici

Come si e’ gia’ visto, ogni operazione eseguibile su variabili booleane (somma, prodotto, complementazione ed altre da queste deducibili) puo' essere definita tramite una tabella con variabili indipendenti e dipendenti detta tabella di verita’ .

E per ciascuna di queste tabelle di verita' esiste il corrispondente circuito elementare …=>Importanza delle tabelle di verita’

Page 32: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 32

Tabelle di verita’ delle Operazioni fondamentali

che sono: not or and ed anche: xor or esclusivo nand and negato nor or negatoPer le relative tabelle ed i corrispondenti

circuiti elementari (detti porte logiche = gate) vedere la diapo seguente tratta dal Bishop.

Meo 1 lez.9 e seg.

Meo 1 lez.9 e seg.

Page 33: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 33

Page 34: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 34

Realizzazione circuitale del calcolo binario

Per rappresentare grandezze binarie si usa di norma la tensione elettrica come grandezza di riferimento con valori convenzionali: alto =1 basso =0.

Un circuito elettronico elementare che rappresenti un’ operazione fondamentale dell’ A.d.B. e’ detto porta (gate). Esso riceve in ingresso uno o due impulsi elettrici da 1 o da 2 punti di ingresso e fornisce 1 uscita nel punto di uscita: le tensioni sui 2 punti di ingresso rappresentano i valori delle variabili indipendenti; la tensione sul punto di uscita il valore della variabile dipendente.

Page 35: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 35

Grafici dei circuiti elementari = porte

I simboli dei circuiti elementari (porte) riportati in diapo 33 sono tratti dal Bishop.

In ogni circuito elettronico di E.E. sono utilizzate le porte.

I circuiti logici ottenuti combinando le porte logiche corrispondono a funzioni dell’ A.d.B. e si dicono circuiti combinatori.

SALTARE FINO A DIAPO 42 compresa

Page 36: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 36

Funzioni di variabili booleane SALTARE FINO A DIAPO 42

Con solo 2 valori discreti (e non un' infinita' di valori continui come 0.001, 0.011, 0.111 … 0.990 ...) anche le Funzioni dell’ A.d.B. si possono rappresentare in forma tabellare.

Per esempio siano 2 variabili booleane A, E col significato di: A = oggi piove; E = ho l' ombrello; la funzione f(A,E) (col

significato di: f(A,E) = esco in auto), si potra' scrivere cosi’: A E f(A,E) 0 0 0 oggi piove=ho l’ombrello=esco in auto=falso 1 0 1 “ “ vero “ “ falso “ “ “ vero 0 1 0 etc. 1 1 1

Page 37: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 37

Tabelle di verita' delle f(x,y)La tabella precedente e' la tabella di verita'

della funzione f(A,E). La sua espressione booleana si costruisce "elencando" tutte le condizioni che portano f(A,E) ad assumere valore VERO.

Nell’ esempio: f(A,E) e’ vera (ossia esco in auto) se A e’ vera e inoltre E e’ falsa (oggi piove e non ho l’ ombrello) oppure se A e’ vera e inoltre E e’ vera (oggi piove e inoltre ho l’ ombrello). ANCHE: f(A,E) e’ vera se: A e’ vera e inoltre Ē e’ vera oppure se A e inoltre E sono vere.

Page 38: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 38

L’ espressione booleana di f e’ quindi: f(A,E) = AĒ + AE = A(Ē+E) = AQuesto e’ il modo di costruire l’ espressione

booleana di una qualunque funzione f(X,Y,Z …) dove X, Y, Z… sono variabili booleane

(L’ "elenco" di tutte le condizioni che portano f ad assumere SOLO il valore VERO =1, e’ costruito con le righe della tabella di verita’ in cui f=1: su ogni riga le variabili sono legate da operatori and mentre le righe sono legate da operatori or).

Page 39: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 39

SemplificazioneL’ espressione ottenuta puo’ poi essere

tradotta in un circuito logico equivalente: se pero’ non e’ semplice e’ meglio semplificarla applicando le fondamentali proprieta’ dell' algebra di Boole.

Si arriva ad un' espressione booleana semplificata che si traduce in un circuito logico piu’ semplice e quindi piu’ economico di quello che si otterrebbe utilizzando l' espressione non semplificata.

Page 40: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 40

Esempio:

A E U f 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1

A parole: f e’ VERA se A,E,U

sono tutte FALSE oppure se A e E sono FALSE e inoltre U e’ VERA oppure se A,E,U sono tutte VERE oppure se A e inoltre U sono VERE e inoltre E e’ FALSA.

Page 41: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 41

Semplificazione

L' espressione booleana corrispondente e’: f= ĀĒŪ + ĀĒU + AĒU + AEU 1a espressione

da semplificare1o passo ĀĒŪ + ĀĒU = ĀĒ (Ū+U) = ĀĒ proprieta’

dist. del prodotto e del complemento (U+ Ū)=1 2o passo AĒU + AEU = AU(E+Ē) = AU proprieta’

dist. del prodotto e del complemento (E+Ē)=1 Quindi: f= ĀĒ + AU f

...

...

Page 42: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 42

Il circuito corrispondente(molto piu’ semplice di quello relativo all’

espressione non semplificata) e’ elementare:i 2 segnali A e U entrano direttamente in una

porta and mentre i segnali A e E prima di entrare in una porta and devono essere complementati o possono entrare direttamente in una porta nor. Riflettere su questo: per quale legge ? Le uscite delle 2 porte and e nor entrano poi in una porta OR da cui esce il segnale risultante, valore della f(A,E,U).

Page 43: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 43

Conclusioni: i circuiti logici che si ottengono combinando le porte

logiche, corrispondono a funzioni dell' algebra booleana ciascuna caratterizzata da una Tabella di Verita’ e rappresentata da un' espressione che si semplifica usando le relazioni fondamentali, per es. la proprieta’ distributiva del prodotto: A(B+C) = AB + AC; o la proprieta’ distributiva della somma: A+(BC) = (A+B)(A+C); (fa freddo o (nevica e piove)) o anche usando la proprieta’ di assorbimento:

A+A = A; AA = A o le leggi di de Morgan, di dualita’ … tutte le leggi

dell’ A.d.B.

Page 44: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 44

Circuiti logici Combinatori: smemorati

I Circuiti logici Combinatori che si ottengono combinando le porte logiche, corrispondono a funzioni dell' algebra booleana ed hanno la caratteristica di essere "smemorati":

i valori di uscita sono funzione dei soli valori di ingresso in un dato istante.

Page 45: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 45

Altro tipo di circuiti logici sono i circuiti sequenziali

con memoria: i valori di uscita sono funzione dei valori di ingresso e dello Stato del circuito.

Per Stato di un sistema si intende in generale il valore della situazione in cui il sistema si trova.

Esempio del prof. Mezzalama e’ il sistema "apriporta” a 2 Stati: porte aperte-porte chiuse e relativi comportamenti diversi.

Esempio tipico di Circuiti Combinatori e’ il Decodificatore; Esempio tipico di Circuiti Sequenziali

e’ il Registrino di Memoria detto Flip-Flop.Tutti questi Circuiti si trovano nella CPU di E.E.

Page 46: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 46

Decodificatori SALTARE FINO A DIAPO 51 compresa

Per la conversione dei dati da un formato all' altro sono necessari appositi DECODIFICATORI.

Un semplice esempio di DECODIFICATORE elementare e’ formato da un circuito con 2 morsetti di ingresso (su cui scrivere un codice da 0 a 3) e 4 morsetti di uscita di cui solo uno deve essere attivo in un certo istante. Il codice scritto sui 2 morsetti di ingresso indica il morsetto di uscita che si vuole rendere attivo nell' istante considerato. Queste sono le specifiche del circuito DECODIFICATORE.

Page 47: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 47

L’ esempio di decodificatore (saltare fino 51 compresa)

presentato appare inizialmente come una scatola nera qui sotto rappresentata che per ogni segnale di input ha un segnale di output.

A _____ ______0_ ______1_ E _____ ______2_ ______3_

Page 48: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 48

Sui morsetti di ingresso si scrive un codice con:

segnale su: A E 0 0 basso su A basso su E 0 1 " " " alto " " 1 0 alto " " basso " " 1 1 " " " alto " "Dei morsetti di uscita solo uno deve essere

attivo in un cero istante.Il circuito attua quattro funzioni booleane

distinte.

Page 49: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 49

Per ciascuna funzione booleana di uscita

si puo’ scrivere una tabella di verita’. Per es. per l'uscita 0 si ha: A E USC.0

0 0 1 0 1 0 1 0 0 1 1 0Dalla prima riga della tabella si deduce: USC.0 = ĀĒ

quindi il DECODIFICATORE prima visto come una scatola nera contiene al suo interno anche porte nor: in una di queste entrano i segnali A ed E (teorema di de Morgan).

Page 50: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 50

Sintesi di circuitiSi e’ arrivati alla sintesi del circuito USC.0

tramite l' ispezione della tabella della verita’ che descrive la funzione logica USC.0 per ogni combinazione di valori delle due variabili A e E. E' questa una tecnica usata per la sintesi di circuiti combinatori semplici; la sintesi di ogni circuito combinatorio complesso si ottiene con la descrizione delle funzioni (= operazioni) che il circuito stesso deve realizzare. La descrizione viene espressa in un linguaggio simile ad un linguaggio di programmazione. (Corso di Reti logiche)

Page 51: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 51

Perche’ ?L’ispezione delle tabelle di verita’ che

descrivono funzioni logiche per ogni combinazione di valori delle variabili di ingresso, diventa pesante all’ aumentare del numero N delle variabili. Il numero delle righe di una tabella di N var. e’ pari a 2N (num. di combinazioni diverse) ossia di tipo esponenziale e quindi al crescere di N (= 10, 20, 30 ...) si deve usare un altro metodo.

Page 52: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 52

Flip-Flop Set-Reset = FF_SRCircuito elementare di memoria che

memorizza un BIT = BInary digiT = cifra binaria => informazione elementare

E’ realizzato con 2 porte nor retroazionate come si vede nel grafico di Meo-Mezzalama dove Q indica lo stato attuale del circuito.

E’ detto anche multivibratore bistabile …Domanda: che tipo di circuito e’ ?

Sequenziale!Saltare fino 55 compresa

Page 53: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 53

Q= STATO del SISTEMA circuito FF_SR : o 0 o 1 Saltare a 56Se in ingresso S = R = 0 risulta se Q=0 allora not(Q)=1 e Q restera’ 0 in uscita se Q=1 allora not(Q)=0 e Q restera’ 1 Il RISULTATO e’ diverso pur avendo lo stesso

ingresso: cio’ dipende dallo STATO del circuito => il valore di uscita e’ funzione dell’ ingresso e inoltre dello STATO del circuito … sequenziale

Page 54: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 54

Altre situazioni: Se in ingresso S = 1 (SET) e R = 0 risulta: se attualmente Q=0 allora nor(QS)=0=not(Q) quindi Q = nor(not(Q)R) diventa 1; 0 0

invece se Q=1 allora nor(QS) = 0 = not(Q) quindi Q = nor(not(Q)R) resta 1. Se in ingresso S = 0 e R =1 (RESET) risulta:se attualmente Q=0 allora nor(QS)=1=not(Q)

quindi Q = nor(not(Q)R) resta 0; ed anche se Q=1 nor(QS) = 0 = not(Q) quindi Q=nor(not(Q)R) diventa 0. In definitiva: ...

0 1

Page 55: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 55

FF_SR: 8 situazioni possibili = 4 input X 2 stati attuali (Q_ora)

X Y nor(X+Y) 0 0 1 1 0 0 0 1 0 1 1 0

S R Q_ora Q_poi 0 0 0 0 S=R=0 no modifiche 0 0 1 1 Q_poi=Q_ora 1 0 0 1 S=1 forza Q_poi a 1 1 0 1 1

0 1 0 0 R=1 forza Q_poi a 0 0 1 1 0

1 1 0 0 o 1 Ambiguita’ da 1 1 1 0 o 1 togliere con

modifiche nella struttura (FF tipo D o JK)

Page 56: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 56

La Dipendenza dal tempodeve essere introdotta in tutti i circuiti

collegandovi il segnale di clock come ingresso ulteriore: e’ il segnale periodico che cadenza il funzionamento dei circuiti e permette la sincronizzazione di tutte le operazioni.

Es. i Flip-Flop non sono usati singolarmente, ma aggregati a gruppi di 4 o di 8 (=byte) o di 32 (registro). Le 2 linee portanti l’ informazione entrano in porte and col segnale di clock: le uscite delle porte and diventano gli ingressi dei Flip-Flop => Tutti FF sono temporizzati nello stesso modo e sono attivi solo quando e’ attivo il segnale di clock.

Page 57: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 57

MemorieI Flip-Flop vengono usati negli elementi di

memoria di E.E. ossia nella RAM e nei registri della CPU.

La memoria principale o C.M. di E.E. (composta con circuiti denominati RAM =Random Access Memory) ha come parametri significativi il tempo di ciclo TC e la capacita’ C (dimensione).

TC = intervallo tra la richiesta di un dato da parte della CPU e la fine della risposta della memoria che torna allo stato di ricezione.

Page 58: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 58

SRAM e DRAM:sono 2 tipi di circuiti. TC 10 nsecSRAM = Static RAM C << C(DRAM) + veloci, ma + costose e

. + voluminose TC 50 nsecDRAM = Dinamic RAM C 20 Milioni di

bit / chip + usate

Legenda: il simbolo significa dell’ ordine di; il chip e’ … il “nostro centopiedi”

Page 59: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 59

ROM (Read Only Memory)

Circuiti con informazione memorizzata in modo permanente

1) programmabili 1 sola volta in fabbrica Tipi 2) “ “ “ “ dall’ utente 3) cancellabili e riprogrammabili “ “ .

+volte1) ROM, 2) PROM, 3) EPROM

Page 60: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 60

Emulazione della C.M.Della C.M. di E.E. fu detto (parte 1) che nel

Modello di von Neumann la memoria e’ di tipo lineare ossia: successione di locazioni (posizioni, celle, byte, parole) numerate (e quindi indirizzabili) sequenzialmente !

Problema1: sua emulazione con un programma in C e C++.

Problema2: memorizzare le tavole dell’ A.d.B.Soluzione: utilizzo di tabelle o array o altro ?

Page 61: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 61

ArrayE’ un tipo di variabile composta, strutturataImportante perche’ permette di:mantenere in memoria un insieme di elementi

omogenei (dello stesso tipo, detto tipo base);tutti presenti contemporaneamente, posti in

memoria consecutivamente a partire da un indirizzo iniziale, ma accessibili in modo casuale o diretto usando la loro posizione;

accessibili +volte tramite appositi indici interi che in C e C++ assumono uno tra i valori compresi in un dato intervallo a partire da 0 (a cui corrisponde il primo elemento dell’ array);

Richiede un’ opportuna definizione in cui sia dichiarata al compilatore la sua dimensione.

Page 62: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 62

Esempi di definizione di array o tabelle a + dimensioni in C++

int a[5] array monodimensionale o vettore di 5 componenti intere memorizzabili in:

a[0], a[1], a[2], a[3], a[4]. Necessario 1 indice per individuare la componente iesima a[i]

float f[2][3] array bidimensionale o matrice di 2 righe e 3 colonne memorizzabili in:

f[0][0], f[0][1], f[0][2], (tipo base=float)f[1][0], f[1][1], f[1][2] Necessari 2 indici per

individuare la componente i,jesima f[i][j]int c[2][3][4] array tridimensionale di tipo intero

(4 matrici di 2 righe e 3 col.: necess. 3 indici).

Page 63: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 63

Possibili inizializzazioni: In fase di compilazione:float f[5] = {0.0, 1.0, 2.0, 3.0, 4.0};int g[100] = {7}; // si inizializza solo g[0]=7; int dedo [] = { 2, 3};//inizializzazione obbligatoria:

NON c’ e’ dimensione => il compilatore la calcola automaticamente in base al numero di valori di inizializzazione: UNico caso ammesso senza dimension.

In fase di esecuzione con cicli a ripetizione notare:es. for (i=0; i<5; i++) f[i] = (float) i ; for (i=0; i<100; i++) g[i] = 0;// g azzerata

Page 64: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 64

Creazione-stampa di vettoriIl primo esempio d’uso di vettori e’ in program5

il project24 (qui di seguito) dove si notano i vettori tab e cop dichiarati di MAX componenti o elementi. Il vettore tab e’ creato nel main con un for mentre in cop (non inizializzato) sono letti, con la procedura leggi, e sempre con un for, i valori degli elementi del vettore, uno dopo l’ altro; la sua copia e’ fatta nella procedura copia, la visualizzazione nella procedura scrivi;

in tutti i sottoprogrammi il passaggio di vettori (e array in generale) e’ fatto per indirizzo.

Page 65: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 65

Uno spezzone di project24#define MAX 2 // Si può cambiare MAX come si

vuole // Dichiarazione dei Prototipi dei MODULI usati void attendi(); void scrivi(int*); void leggi (int []); void copia (int [],int []); main() /* Inizio Modulo principale */ { int n, tab[MAX], cop[MAX]; /* definizione vettori

di MAX elementi senza inizializzazione e INIZIO Parte esecutiva */ clrscr();

for (n=0; n<MAX; n++) //creazione di tab tab[n] = MAX-n;cout<<"\nho costruito tab e vado a

scriverla"<<endl;scrivi(tab); // tab inizializzata

Page 66: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 66

continuacout<<"\nnon ho costruito cop ma vado a

scriverla"<<endl;scrivi(cop); // cop non inizializzatacout<<"\nora vado a leggere

cop"<<endl; leggi (cop); cout<<"\nora vado a copiare cop in

tab"<<endl; copia(tab,cop); // tab=cop cout<<"\nho copiato cop in tab e vado

a scriverla"<<endl; scrivi(tab); attendi(); return (0);

Page 67: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 67

Il nome del vettore o tabella e’sinonimo dell’ indirizzo del primo elemento del

vettore => Si puo’ scrivere: float ris[10]; float *p; p=ris; /*oppure*/ p=&ris[0]; ris e’ un puntatore, ma costante perche’

sigillato a puntare sempre allo stesso vettore.Es. char* puni =“sono un’ idea”; // puni e’

inizializzato con l’ indirizzo di s, ma poi avendo: puni =“punto un oggetto”; // a puni si assegna un altro indirizzo: quello di p.

Non si puo’ mai invece modificare l’ indirizzo in ris, il contenuto SI !!!

Meo 1 lez. 37Meo 1 lez. 37

Page 68: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 68

Allocazione in memoria di tabelleSia: int tab[3] = {25, 53, 64};tab nome ed indirizzo iniziale della tabella; tabtab è “sinonimo“ di10000;25 và in tab[0] 53 “ “ tab[1]64 “ “ tab[2]da 1000C c’ è altro.

Central Memory 10000

10004

10008

1000C

11111

25

53

64

altro

Page 69: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 69

Esempi di vettori in...program5 PROBLEMA: calcolare la frequenza di caratteri

alfabetici contenuti in una frase terminante col punto. Alla fine: visualizzare tutte le frequenze !=0

Progetto logico: n.o caratteri alfabeto ingl. =26;n.ocontatori di frequenza=26=n.oelementi vett.

da inizializzare a zero; int freq[26]={0,0,… 0};lettura e calcolo: fintantoche’ il carattere

letto non e’ il punto, aggiungi 1 all’ elemento che indica la frequenza del carattere letto; poi fai la visualizzazione.

Page 70: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 70

Progetto logico: continuaCome si puo’ trovare questo elemento? Nel vettore freq[26] si trova tramite l’ indice intero

corrispondente nel codice ASCII al carattere letto, ma: ‘A’=65; … ‘Z’=90; ‘a’=97; … ‘z’= 122 Occorre fare una traslazione di scala ossia riportare i

valori dei codici ASCII nell’ intervallo 0-25 => per i caratteri minuscoli basta fare: car_letto - ‘a’;

e poi incrementare il contatore freq[car_letto- ‘a’]++; invece per i maiusc. occorre prima convertirli a

minus. con: car_letto = car_letto - ‘A’ + ‘a’ (cfr. project15-16) e incrementare il contatore freq [car_letto-‘a’]++; (come sopra).

Page 71: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 71

La visualizzazioneSi puo’ fare con un for dove la var. di controllo

e’ ancora il codice ASCII del carattere:for (char ch = ‘a’; ch<=‘z’; ch++) if (freq(ch- ‘a’) != 0) // non è nulla!cout << “\nIl car.”<< ch<<“ ha la frequenza:

” << freq[ch- ‘a’];Con questo progetto logicofare il programma monoblocco prima e poi

strutturato a moduli.

Page 72: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 72

Non confondere stringhe costanti con tabelle di caratteriLa stringa char *pst= “buonino”; e’

costante. C e C++ la vedono come una sequenza di caratt. terminanti con \0. Questo è il segnale di fine stringa!!! Essa non e’ copiata in pst: a pst e’ assegnato l’ indirizzo del suo primo car. b.

Dovendo leggere o inizializzare una stringa di caratteri qualunque e’ responsabilita’ del programmatore riservarle adeguato spazio in memoria. Una tabella (vettore) di caratteri puo’ servire a questo scopo, ma non e’ l’ unica soluzione.

Page 73: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 73

programma leggiora (prj25) /*Il programma lavora con stringhe. Dapprima usa la funzione sizeof ("IO") che ritorna la

dimensione di IO ossia il suo numero di caratteri che sarà 3 dato che ogni stringa termina con '/0';

poi usa un puntatore a stringa che permette di visualizzare la stringa, ma non il suo numero di caratteri;

poi ancora in leggi chiede la stringa che deve leggere nell' array ora.*/

/* Variabili del main */ char ora[15]; int n; char* ps ="bello";

clrscr(); n = (int)sizeof("IO"); cout<<"Numero di caratteri della stringa: "<<n<<endl; n= (int)sizeof(*ps); cout<<"Stringa puntata da ps: "<< ps <<" Numero di car. della stringa puntata da ps: "<<n; leggi(ora); scrivi(ora); attendi(); return (0);

Page 74: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 74

Es. char riga[40];Ogni elemento della tabella riga e’ di tipo char

e quindi disponibile a contenere un carattere. Per assegnare una stringa di caratteri ad una

tabella ci sono varie possibilita’: leggercela da tastiera (e per un es. di cio’ vedere il prg. project25 in program5) oppure occorre copiare la stringa carattere per carattere …

Come? Cfr. diapo seguente! Ma intanto: per la lettura di tutti i caratteri spazi bianchi compresi, in project25 (leggiora) si usa la funz. del C++ get(char*,...) collegata al flusso cin ossia cin.get(char*,... ). (In C cio’ si ottiene con la funz. gets() ).

Page 75: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 75

Copiare stringhe: oltre il prg. project24 ecco la proc. strcp

void strcp(char *s, char *t) /* s, t: puntatori a carattere e quindi a stringa; la proc. strcp copia la stringa puntata da t in quella puntata da s */

while ((*s=*t) != ‘\0’) /*fintantoche’ il contenuto di t assegnato alla cella puntata da s e’ diverso da ‘\0’ (=fine stringa) fai*/

{s++; t++}; // + sintetica ?!{while (*s++=*t++);//perche’ manca !=‘\0’ ??};

Page 76: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 76

Come si scrive una procedura?L’ esempio precedente vuole mostrare anche

questo: fissati i parametri formali del sottoprogramma basta scrivere il suo corpo usandoli in modo corretto e coerente col progetto logico fatto.

La procedura strcp potra’ essere attivata da qualunque altro modulo usando come parametri effettivi o puntatori a stringa o nomi di vettori contenenti caratteri (cfr. es.)

Visti gli esempi modificare in project24 la proc. copia in modo simile alla proc. strcp.

Page 77: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 77

Esempichar *ps2,*ps1 = “stringa12”;char s1[10], str[10]=“abcdefghi”;strcp(str,ps1);//si puo’ strcp(ps2, s1)? Meglio NOstrcp(s1,str); // strcp(ps1,s1) puo’ dare errore;Ricordare il significato del nome di un vettore(!)

(sinonimo dell’ indirizzo) e che le array sono sempre trasmesse tra moduli per indirizzo come indicato nel programma project24. Nel programma project28 invece si usano vettori nel main e in 2 o 3 procedure: renderlo tutto modulare!

Attenzione poi al project27 che vuole ampliare array e produce errore in esecuzione …!

Il più interessante è il project26 che ordina un vettore di interi: usare lo stesso algoritmo (selezione descritto nei commenti del programma) per ordinare un vettore di caratteri. E… vedere diapo seguenti!

Page 78: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 78

SORT (Ordinamento)

Si riprende il project26 che ordina un vettore di interi usando l’algoritmo di selezione o scelta diretta.

Con questo algoritmo l‘ ordinamento di una tabella di n elementi si ottiene in n-1 passi come indicato nella diapo seguente.

Page 79: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 79

SORT & Algoritmo di Scelta diretta.

Con questo metodo l'ordinamento di una tabella di N elementi si ottiene in N-1 passi.• Al passo 1 si ricerca il minimo tra gli N elementi con N confronti (il CONFRONTO è l’ operazione dominante!) e trovatolo si scambia (di posto) col primo elemento;• al passo 2 si ricerca il minimo tra gli N-1 elementi (dal secondo all'ennesimo con N-1 confronti ) e trovatolo si scambia (di posto) col secondo elemento ;• cosi' di seguito fino al passo N-1 quando si potranno scambiare di posto l' elemento N-1 con l'elemento N.•Ad ogni passo #confronti N•#passi N#operazioni effettuate dall'algoritmo è dell' ordine di N*N ... QUINDI da usare se N <10.

Page 80: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 80

void ordina(int x[], int n) /* x è “orlata” cioè l’ elemento x[0] è trascurato: Effettua l' ordinamento di x (tabella di n elementi) con Scelta Diretta Variabili locali usate: i,j,k,min; Parametri in ingresso: n,x; per es. n=3, x[1] =3, x[2] = 4 x[3] =1 Parametri che escono definiti: x; x[1] =1, x[2] = 3, x[3] = 4 */ { int i,j; /* var. di controllo cicli */ int k; /* indice del minimo */ int min; /* var. contenente il minimo */

Page 81: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 81

/* Inizio parte esecutive di ordina */for (i = 1; i <= n-1; i++){ min = x[i]; k = i; // se i=1 allora min = 3 e k =1; for (j = i+1; j <= n; j++) /* ciclo di ricerca del minimo */{ if (x[j] < min) // solo per j=3 questa condizione è vera (1<3) { k= j; min = x[j]; /* per i=1 si ha: k=3. e min= 1 “ i=2 “ “ k=3. e min= 3*/ } }// fine del for su j x[k] = x[i]; /* scambio tra x[3] e x[1]ottenendo 1, 4, 3 per i=1 e 1, 3, 4 per i=2*/x[i] = min; /* per ricerche del min. senza successo queste due frasi non hanno effetto */ } //fine del for su i }/* fine di ordina */

Page 82: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 82

E… …cercare altri algoritmi di SORT per esempio da pag. 503

del testo di Franco Crivellari: “Elementi di programmazione con il C++”, Franco Angeli; (primo riferimento in Bibliografia) dove sono descritti

ALGORITMI (metodi) DI ORDINAMENTO come: 1) selezione (per minimi successivi) complessita’ = O(n2) 2) scambi (bubble sort) complessita’ = O(n2) 3) inserzione complessita’ = O(n2) 4) ad albero: doppio indice (quicksort) heap-sort 5) distribuzione e fusione o MergeSort

Per la Complessità …corso successivo, ma intuitivamente = N.o di operazioni necessarie per raggiungere la soluzione di un problema

complessita’ =

O(n log(n))

Page 83: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 83

Precisazioni ed esercizi Gli esempi in Program6 si riferiscono ad

array a 2 dimensioni: il project29, letta una matrice, esegue qualche calcolo e la passa alla procedura di visualizzazione, project30 crea la Tavola Pitagorica della moltiplicazione e la passa alla procedura di visualizzazione.

Li ho lasciati perché sono semplici e possono essere sempre utili. A voi però lascio il compito di completare il tema in diapo 3-4.

Page 84: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 84

Break e altroLa frase break si può usare anche in cicli while,

do… while, for: vedere project 20 - 22 di programm4 dove si esce con un break da un ciclo infinito come qui riportato CON : bool attiva = false;

forever { switch (menu(!attiva)) { case 1: cout <<"\nnumero 1 e ris: "; ris = elabora(menu(attiva)); cout <<ris; break; case 2: cout <<"\nnumero 2 e ris: "; ris = elabor1(menu(attiva)); cout <<ris; break; case 99: cout<< " Un numero 99 =>fine forever”; break; default: cout <<"\n intero non previsto\n";}//fine switch if (menu(attiva) == 99) break; // fine forever }

Page 85: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 85

A proposito della variabile logica da usare in project22… riprendiamo il discorso?Ossevare i project 21 e 22. Quando la funzione

menu() viene attivata nella frase switch e’ giusto che richiami la funzione leggi(n) in quanto n deve dirottare il controllo al caso ennesimo; invece quando la funzione menu() viene attivata nelle 2 funzioni di elaborazione non occorrera’ una nuova lettura purche’ n sia ancora disponibile. Questo e’ il punto: n e’ ancora disponibile? NO se in menu non si dichiara:

static int n;

Page 86: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 86

Significato delle variabili automatiche e statiche

In C e C++ ogni variabile e’ caratterizzata oltre che dal tipo dalla sua classificazione rispetto alla sua allocazione in memoria ed alla sua durata. Le variabili finora trattate sono dette automatiche perche’ iniziano ad esistere (sono allocate in memoria) quando la funzione in cui sono definite e’ attivata e “spariscono” all’ uscita dalla funzione. Non conservano il loro valore tra una attivazione e l’ altra della funzione. Per conservarlo devono essere dichiarate static: senza questo attributo sono automatiche.

Meo 1 lez.33Meo 1 lez.33

Page 87: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 87

Static => protezioneTutte la variabili (locali o globali) definite

static sono create ed inizializzate prima che il main inizi l’ esecuzione e sono distrutte solo al termine dell’ esecuzione del main program: la loro inizializzazione e’ eseguita una sola volta, se manca sono inizializzate a 0.

Anche una var. globale (o esterna) puo’ essere dichiarata static: in tal caso diventa visibile e usabile solo all’ interno delle funzioni definite nello stesso file sorgente in cui essa e’ definita, ma diventa invisibile ad altri file: è un tipo di protezione.

Page 88: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 88

Conclusione per menu()Per salvare il valore di n letto solo la prima volta

bisogna dichiarare n static (non solo int) e quindi scrivere menu cosi’ (come in project22):

int menu (int attiva) /* attiva param. formale di tipo logico che deve essere True solo al primo richiamo e False ai richiami successivi in cui si potrà usare !attiva senza cambiarlo in false*/

{static int n; // n inizializzata a 0if (attiva) leggi(&n) /*se attiva = True in n va il

valore digitato che resta immutato fino a nuova lettura che non si verifica se attiva = False */

return n; }

Page 89: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 89

E … per emulare la memoria?Le matrici non bastano: per i dati occorrerebbe

una zona a dimensione variabile (che si puo’ ottenere con l’uso di funzioni come malloc o new) di int ove porre valori interi e poi un’ altra zona di float, una di char …; una per gli indirizzi e le istruzioni in linguaggio macchina e poi ancora occorrerebbe un’ altra zona per gli interi unsigned, etc. Insomma un contenitore di elementi di tipo diverso, non omogenei (come invece avviene per le matrici) ed anche a dimensione variabile.

Un tipo di variabile strutturata che permette di mantenere in memoria un insieme fisso di elementi non omogenei e’ la struct del C e C++ simile al record del Pascal.

Page 90: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 90

Esempio di struct in C e C++struct studente{char nome[20];char cognome[25];int eta;float peso;float altezza;}; Concettualmente con la keyword

struct si definisce un tipo di tabella non omogenea con elementi di vari tipi che in C e C++ possono essere anche funzioni: cosi’ fatta la struct puo’ servire a introdurre la class del C++…ma questa e’ un’ altra storia …

Page 91: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 91

Appendice a): perplessita’ 1

RICORDARSI: l’ operatore >> preleva un dato dal un flusso di input: che tipo di dato? Il tipo che e’ stato dichiarato: char, int, float, ...

2) RICORDARSI: non abusare di matrici e/o vettori; usarli solo quando esiste la necessita’ di tenere memoria dei valori calcolati o letti: se tale necessita’ manca allora usare il valore letto per i calcoli necessari e passare al successivo valore da leggere.

Page 92: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 92

Appendice a): perplessita’ 2-1

Ricordare che gli indici di un array sono SEMPRE di tipo “discreto”, MAI floating-pont!!!

NON CONFONDERE INDICE CON CONTENUTO DI UN ELEMENTO !!!

Ed ancora array e strutture sono passati a procedure per indirizzo, ma il loro indirizzo è rappresentato dal loro NOME e NON da &nome o da *nome!!!

Page 93: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 93

Ancora su array: perplessita’ 2-2se si vuole fare una ricerca in un array ad

una dimensione (vettore) si può usare il metodo lineare esaminando un elemento dopo l’ altro con un for oppure il metodo della bisezione (dividendo il vettore a metà e poi a metà delle metà e così via) accelerando la ricerca.

In array a 2 dimensioni (matrici) il modo più semplice da usare è il metodo lineare: si esamina una riga alla volta e dentro ogni riga un elemento dopo l’ altro con 2 for nidificati.

Page 94: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 94

Appendice a): perplessita’ 23) La funzione elabora usata in tanti esempi di

programmi indica col suo nome una elaborazione di tipo generale. Quando l’ elaborazione e’ di un tipo specificato e’ meglio usare nomi di funzioni pertinenti, come fatto nell’ esempio sulla valutazione del minimo e del massimo (parte 4) dove si usavano nomi come minimo, massimo, rivaluta e memovis. Cosi’ il programma diventa +comprensibile e -generico Come ulteriore esempio, se in un programma ...

Page 95: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 95

Appendice a): perplessita’ 3… se in un programma e’ richiesto di leggere

una matrice di valori interi e ricercarvi un certo valore (letto anch’esso da tastiera) le funzioni da usare e costruire saranno:

leggi(matrice); cin>> valore;if (ricerca(valore, matrice, &riga, &colonna))

visualizza(“\ntrovo valore in ”, riga,colonna);else cout<< “\nIl valore non c’e’ !”<<endl; QUI la funzione elabora e’ la ricerca che

ritorna un valore bool!

Page 96: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 96

Appendice a): perplessita’ 4

4) RICORDARE: la codifica F.P. normalizzata fa riferimento alla base 2 e quindi il valore dell’ esponente riguarda la base 2. Col metodo delle moltiplicazioni successive ogni moltiplicazione per la base isola una nuova cifra nella nuova base. Per es. =3.1410 avra’ 112 come parte intera e 00100011112 come parte decimale. Normalizzando +.1100100011112 E+102 con S=0, M=1100100011112, E=0102 .

Page 97: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 97

Appendice a): perplessita’ 55) RICORDARSI di fare attenzione alle

specifiche di progetto di un programma: IN PARTICOLARE alle specifiche di progetto del programma da costruire all’ esame che stanno nelle relative richieste. Analizzarle e riflettere!

UN CONSIGLIO per l’ esame: scrivere il programma in modo semplice e chiaro, con qualche commento, ma senza fronzoli, badando a rispondere a tutte e sole le richieste. Privilegiare la sostanza ! Se resta tempo aggiungere … i “fiorellini” !

Page 98: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 98

Appendice a): perplessita’ 66)RICORDARE quanto detto in fondinf3 diapo 48

e seg. “Primo motivo per l' introduzione dei sottoprogrammi: Si inserisce una sola volta il codice del sottoprogramma (per es. la printf ….”)

Se si devono leggere 10 matrici si scrive una procedura di lettura di una matrice generica e si richiama 10 volte per leggere le 10 matrici una alla volta!!! NON scrivere una procedura con la lettura di 10 matrici … (e capita anche che qualcuno la richiami 10 volte!!!)

Page 99: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 99

Appendice a): perplessita’ 7Attenzione al significato del while che è:fin tanto che, per tutto il tempo che è vera la

condizione tra parentesiE NON: fino al momento in cui diventerà vera!!!Se si deve leggere un valore <0 si scriverà:cin>> comodo; while (comodo >=0) cin>> comodo;ed anche, se A e B sono array: if (tot<soglia) cout<<"\n Soglia non raggiunta da tot =

"<<tot<<endl; else { while ((tot=somma (A,B))>=

soglia) diminuisci(A,B); …. }e ricordarsi l’ else, ma solo quando occorre !!!

Page 100: Fond. di informatica 1 parte 41 fondamenti di informatica parte 4 appunti per la laurea in Ingegneria Civile, Edile, Ambientale a.a. 2005-2008 di anna

fond. di informatica 1 parte 4 100

Appendice a): continua perplessita’ 7

ed inoltre: usare il while appropriatamente!

NON si deve scrivere:cin>> comodo; while (comodo >=0){ }va in loop !!!