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;
BEGIN
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)
•
program EC;
•
{$APPTYPE CONSOLE}
•
•
uses
SysUtils;
•
var b, ris: integer;
•
•
•
•
•
Function funz(Var a: integer): integer;
begin
a:=2*a;
funz:=a;
end;
•
•
•
•
begin
b:=1;
ris:=2* funz(b);
writeln('Primo risultato: ', ris);
•
writeln;
•
•
•
b:=1;
•
•
readln;
end.
ris:= funz(b) + funz(b);
writeln ('Secondo risultato: ', ris);
Primo risultato: ris:=2*funz(B)
A:=2*A;
B 1
A
B 2
funz:=A;
A
B 1
La funzione funz(b) = 2
Risultato = 2 * 2 = 4
Secondo risultato: ris:=funz(B)+funz(B)
A:=2*A;
B1
funz:=A;
A
B 1
La funzione funz(B) = 2
B2
A
B 2
La funzione funz(B) = 4
A
B 2
Risultato = 2 + funz(B)
A
B 4
Risultato = 2 + 4 = 6
Fattoriale
function fatt (n: integer): integer;
begin
if n=0 then
fatt:=1
else
fatt:= n* fatt (n-1);
end;
Fattoriale di n=4
numero
n
Fatt(4)
4
4
4*fatt(3)
Fatt(3)
Fatt(2)
Fatt(1)
3*fatt(2)
2*fatt(1)
1*fatt(0)=1
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
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
BEGIN
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
•
i := k;
WHILE i < n DO
BEGIN
writeln(i);
i := i + 3;
END
•
i := k;
WHILE i < n DO
BEGIN
writeln(i);
i := i + 1;
readln(n);
END
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
x := x - 1;
y := y + 2;
end;
END
Fine
Scarica

Effetti collaterali