190 likes | 313 Views
Istruzioni Decisionali. Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari. Istruzione if Sintassi semplice. Si usa quando occorre eseguire un' azione secondo il verificarsi di una condizione
E N D
Istruzioni Decisionali Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari
Istruzione ifSintassi semplice • Si usa quando occorre eseguire un'azione secondo il verificarsi di una condizione • esempio:write('inserisci un numero'); readln(i);if i < 100 then writeln('i minore e'' di 100'); • sintassi semplificata: if <espressionelogica> then <istruzione> • <espressionelogica> denota una espressione booleana che può assumere i valori true o false;
Istruzione ifSintassi completa NB:senza separatore ; if <espressionelogica> then <istruzione1> [else <istruzione2>] • il ramo [else <istruzione2>] è opzionale vero espr.logica falso istruzione1 istruzione2
Uso di if-then-else program provaIf2(input, output); var i: integer; begin write('Inserisci un numero intero: '); readln(i); if i<100 then writeln('minore di 100') else writeln('maggiore o uguale a 100'); end.
Istruzioni composte • A volte è necessario effettuare una sequenza di istruzioni (ad esempio in base ad una condizione) esempio:if i < 100 then writeln('minore di 100');writeln('istruzione successiva'); oppure if i < 100 then writeln('minore di 100')else writeln('maggiore o uguale a 100'); writeln('istruzione successiva'); • writeln('istruzione successiva') viene eseguita indipendentemente dalla verità della condizione
Blocco di istruzioni program prova_if3 (input, output); var i: integer; mag_100: integer; min_100: integer; begin mag_100 := 0; min_100 := 0; write('Inserisci un numero intero: '); readln(i); if i<100 then begin writeln('minore di 100'); min_100 := 1; end else begin writeln(' maggiore o uguale a 100'); mag_100 := 1; end end.
Comporre con begin-end • Le parole chiave begin e end si usano come parentesi per delimitare un blocco di una o più istruzioni in sequenza • sarebbe errato scrivere: if i<100 then writeln('minore di 100'); min_100 := 1; else writeln(' maggiore o uguale a 100'); mag_100 := 1; • un blocco può comparire dovunque possa comparire un'istruzione semplice (indipendentemente dal particolare costrutto, es. if-then-else)
If annidati • if-then-else è a sua volta un'istruzione: può quindi comparire all'interno di un'altra if • esempio: if i < 100 thenif i > 0 thenwriteln('minore di 100 e maggiore di 0'); • se vogliamo anche il ramo else: if i < 100 thenif i > 0 thenwriteln('minore di 100 e maggiore di 0')elsewriteln('minore di 100 ma non maggiore di 0'); • NB: else si riferisce all'ultimo if incontrato!
If annidati (2) • se vogliamo anche il ramo else riferito al primo if: if i < 100 thenbeginif i > 0 thenwriteln('minore di 100 e maggiore di 0') end elsewriteln('maggiore o uguale a 100'); • volendo l'else anche per l'if interno begin-else son superflui: if i < 100 thenif i > 0 thenwriteln('minore di 100 e maggiore di 0') elsewriteln('minore di 100 ma non maggiore di 0') elsewriteln('maggiore o uguale a 100');
If annidati (3) • anche il ramo else può fare annidare un altro if: if i < 100 thenif i > 0 then writeln('minore di 100 e maggiore di 0') else writeln('minore di 100 ma non maggiore di 0') elseif i = 100 then writeln('uguale a 0') else writeln('maggiore di 100'); • si noti l'uso dell'operatore relazionale =
Variabili boolean • È possibile dichiarare variabili che assumono uno dei due valori logici true o false : • il tipo di queste variabili si denota con la keyword boolean • es. di dichiarazione:var a,b,c: boolean; • è consentito assegnare risultati di espressioni come:a := i < 100;b := x = y; • dato che la if testa una espressione logica si possono usare simili espressioni:if a = true then …ovveroif a then ...
Variabili booleantest di variabili logiche program provaIf4 (input, output); var i: integer; a: boolean; begin write('Immetti un numero intero: '); readln(i); a := i<100; if a=TRUE then writeln('minore di 100'); end.
Variabili booleanfunzioni predefinite • write(·) OK: stampa false o trueread(·) NO: in molti compilatori • odd(n) dispari su argomenti interi restituisce un valore booleanesempio:write('immettere un numero'); read(n); if odd(n) then write('numero dispari') else write('numero pari'); • vale la relazione false < true
Espressioni logiche • si possono definire utilizzando operatori relazionali:< (minore)> (maggiore)= (uguale)<> (diverso)>= (maggiore o uguale)<= (minore o uguale) • espressioni semplici possono essere concatenate con gli operatori logici:not a(negazione: tramuta nel valore duale)a and b(congiunzione: vero sse entrambi veri)a or b(disgiunzione: vero sse almeno uno vero) • non standard:a xor b(differenza: vero sse diversi)
Espressioni logiche • si possono utilizzare le parentesi ed anche relazioni su variabili di altri tipi:((nx1<>nx2) or (cx1>cx2)) and (presenti <524) • in istruzioni condizionali: if (x=y) and (alfa>beta) thenwriteln('x uguale a y e alfa maggiore di beta') elsewriteln('x diverso da y o alfa minore o uguale a beta'); • operandi misti: if i + 52 < x * a thenwriteln('espr. aritm. Nelle espr. logiche');
Variabili di tipo char • Tipo carattere alfanumerico • esempio:var x, y, z : char; • Occupazione in memoria:1 byte => 256 codici carattere distinti • assegnamento:x := 'A'; • operatori relazionali: si possono usare dato che è implicito un ordinamento (dato dal codice) • funzioni: ord() / chr(), pred() / succ() • '0' = chr(48) - 'Z' = chr(57) • 'A' = chr(65) - 'Z' = chr(90) • 'a' = chr(98) - 'Z' = chr(122)
Istruzione caseAbbreviazione di if in cascata • if <espressione logica1> then <istruzione 1>else if <espressione logica2> then <istruzione 2> else if <espressione logica3> then <istruzione 3> ... else <istruzione N> quando una stessa espressione (integer o char) viene confrontata con un insieme di espressioni costanti • case <espressione> of<lista costanti 1>: <istruzione 1>;<lista costanti 2>: <istruzione 2>;<lista costanti 3>: <istruzione 3>;…[else <istruzione N>;]end;
Istruzione caseesempio (1) program provaCase (input, output); var x: integer; begin write('Digita una cifra compresa fra 1 e 4: '); readln(x); case x of 1: writeln(' uno'); 2: writeln(' due'); 3: writeln(' tre'); 4: writeln(' quattro'); else writeln(' cifra fuori intervallo'); end end.
Istruzione caseesempio (2) program provaCase2 (input, output); var x: char; begin writeln('Ins. una cifra: '); read(x); case x of '0','2','4','6','8': writeln(' pari'); '1','3','5','7','9': writeln(' dispari'); else writeln(' non hai inserito una cifra'); end end.