Primo esercizio Scrivere un programma che legge da input le misure dei lati di tre diversi parallelepipedi. vol1 := largh1 * prof1 * alt1 vol2 := largh2 * prof2 * alt2 vol3 := largh3 * prof3 * alt3
Simulazione Si simuli “manualmente” l'esecuzione del seguente programma al fine di dedurre l'output prodotto. VAR x, y: integer; PROCEDURE piu5 (a: integer; VAR b: integer); BEGIN writeln ('All''inizio dell''esecuzione di piu5: ',a:4,b:4); a := a + 5; b := b + 5; writeln ('Alla fine dell''esecuzione di piu5: ',a:4,b:4) END; x := 10; y := 20; piu5(x,y); writeln ('Al rientro, dopo l''esecuzione di piu5: ',x:4, y:4); readln; END.
Debug Procedura simulazione Procedure annidate Programma EC Procedura ricorsiva (fattoriale)
Function funz(Var a: integer): integer; begin a:=2*a; funz:=a; end; program EC; {$APPTYPE CONSOLE} uses SysUtils; var b, ris: integer; Function funz(Var a: integer): integer; begin a:=2*a; funz:=a; end; b:=1; ris:=2* funz(b); writeln('Primo risultato: ', ris); writeln; ris:= funz(b) + funz(b); writeln ('Secondo risultato: ', ris); readln; end.
Primo risultato: ris:=2*funz(B) A:=2*A; funz:=A; B 1 A B 1 A B 2 La funzione funz(b) = 2 Risultato = 2 * 2 = 4
Secondo risultato: ris:=funz(B)+funz(B) A:=2*A; funz:=A; B 1 A B 1 A B 2 La funzione funz(B) = 2 Risultato = 2 + funz(B) B 2 A B 2 A B 4 La funzione funz(B) = 4 Risultato = 2 + 4 = 6
Fattoriale function fatt (n: integer): integer; begin if n=0 then else fatt:= n* fatt (n-1); end;
Fattoriale di n=4 numero n Fatt(4) Fatt(3) Fatt(2) Fatt(1) 4 4*fatt(3) 2*1=2 3*2=6 4*6=24 Risultato: 24
Prova del 21 settembre 2004 Si scriva una funzione che, presa in ingresso una matrice A, restituisca il numero delle colonne i cui elementi sono tutti dispari.
Scacchiera (7 Febbraio 2005 ) Considerare una matrice quadrata di ordine n come una scacchiera. Scrivere una procedura (o funzione) che calcoli la somma degli elementi in posizione “nera”, la somma degli elementi in posizione “bianca”, e dica a quale colore appartiene la maggiore. 1 2 3 4
Esercizio Trovare il numero di occorrenze di una parola in una frase, senza usare POS.
Sostituire While con Repeat VAR a,b: integer; BEGIN write ('Inserisci il primo numero: '); readln(a); write ('Inserisci il secondo numero: '); readln(b); WHILE (a<=b) AND (a<100) DO writeln(a); a:=a+1 END; END
Con repeat VAR a,b: integer; BEGIN write ('Inserisci il primo numero: '); readln(a); write ('Inserisci il secondo numero: '); readln(b); if (a<= b) and (a<100) then repeat writeln(a); a:=a+1; until (a>b) or (a>=100); writeln ('Fine!'); readln; END.
Quali While si possono sostituire con For Per ognuno dei seguenti frammenti di programma dire se è possibile sostituire i cicli WHILE con cicli FOR motivando la risposta. In caso affermativo, riscrivere il codice dopo la sostituzione. i := k; WHILE i <n DO BEGIN writeln(i); i := i + 1; END WHILE i < n DO i := i + 3; readln(n);
Da Repeat a While VAR x,y: integer; BEGIN write ('Inserisci il primo numero: '); readln(x); write ('Inserisci il secondo numero: '); readln(y); REPEAT x := x - 1; y := y + 2 UNTIL (x <= 0) AND (y > x); END;
Con While VAR x,y: integer; BEGIN write ('Inserisci il primo numero: '); readln(x); write ('Inserisci il secondo numero: '); readln(y); x := x - 1; y := y + 2; while (x > 0) or (y <= x) do begin end; END
Fine