Sei sulla pagina 1di 8

Selezioni italiane IOI 2001 - Prima fase

Linguaggio Pascal
1

[3 punti] Cosa stampa il seguente programma?


type r = record

x,y: integer
end;
var x,z: integer;
y: r;
begin
z:=3;
with y do
begin
x:=3;
y:=5;
z:=5
end;
x:=4;
writeln(x+y.x+z)
end.

Risposta: ..............................................
2

[1 punto] Determinare quale la relazione che assume valore vero quando x esterno
all'intervallo [A,B] e y interno allo stesso intervallo?
1. (x<A) and (x>B) and (y>=A) and (y<B);
2. ((x<A) or (x>B)) and ((y>=A) and (y<=B));
3. ((x<A) or (x>B)) and ((y>=A) or (y<=B));
4. ((x<A) or (x>B)) or ((y>=A) or (y<=B));
5. ((x<A) and (x>B)) and ((y>=A) or (y<=B));
6. ((x<A) or (x>B)) or ((y>=A) and (y<B));
Risposta: ..............................................

[2 punti] Quale sar il contenuto del vettore V al termine del ciclo se


V={1,21,31,4,51,6} e n=6?
t:=n div 2;
for i:=1 to t do
begin
temp:=V[i];
V[i]:=V[n-i+1];
V[n-i+1]:=temp
end;

Risposta: ..............................................

[3 punti] Determinare T e X in modo tale che il programma renda uguali a 0 gli elementi
delle due diagonali di una matrice quadrata A di n x n interi. Ad esempio
A={{1
{2
{3
{3

2
3
4
4

3
4
5
5

4},
5},
6},
8}};

A={{0
{2
{3
{0

2
0
0
4

3
0
0
5

0},
5},
6},
0}};

deve diventare

for i:=1 to n do
begin
A[i,T]:=0;
A[i,X]:=0
end;

Risposta: T=.............. X=..............


5

[2 punti] Cosa stampa il seguente programma?


var x,y: ^integer;
begin
new(x); new(y);
y^:=3; x^:=2;
x:=y;
y^:=y^+1;
writeln(x^+y^)
end.

Risposta: ..............................................
6

[2 punti] Sia dato il seguente frammento di codice:


var a,b: integer;
....
if (a>0) then
if (b>0) then writeln('ok')
else writeln('ok');

Discutere l'effetto dell'esecuzione di tale istruzione al variare di a e b.


Risposta:......................................................................
........................................................................................
........................................................................................
........................................................................................
7

[3 punti] Considerate il seguente frammento di codice; cosa stampa?


var a,b: set of 1..200;
i,j: integer;

begin

end.

a:=[]; b:=[]; j:=0;


for i:=1 to 50 do
begin
if (i*i<200) then a:=a+[i*i];
if (i*i*i<200) then b:=b+[i*i*i]
end;
for i:=1 to 200 do
if (i in a*b) then j:=j+i;
writeln(j)

Risposta: ..............................................
8

[2 punti] Qual il ciclo corretto per calcolare in n il numero di elementi di valore intero e
dispari in un vettore dichiarato come v: array [1..MAX] of real; ?
1. for i:=1 to MAX do if (odd(v[i])) then n:=n+1;
2. for i:=1 to MAX do if (v[i] mod 2 <> 0) then n:=n+1;
3. for i:=1 to MAX do if (odd(trunc(v[i]))) and (v[i]=trunc(v[i]))
then n:=n+1;

4. for i:=1 to MAX do n:=n+odd(v[i]);


Risposta: ..............................................
9

[2 punti] Considerate la seguente struttura di programma:


procedure h;
var x,y,z: integer;
function f(var x: integer; y: integer): integer;
var z: integer;
function g(x: integer): integer;
begin
g:=x+y+z
end;
begin

z:=x;
x:=g(y);
f:=x+y

end;
begin
end;

x:=1; y:=2; z:=3;


z:=z+f(y,x)

Quale il contenuto della variabile z al termine dell'esecuzione della procedura h?


Risposta: ..............................................
10 [2 punti] Cosa fa il seguente frammento di programma?

var i: integer;
begin
i:=0;
while (i<50) do
if (i mod 2 <> 0) then write(i);
i:=i+1
end;

Risposta:......................................................................
........................................................................................
........................................................................................
........................................................................................
11 [1 punto] Sia data una variabile dichiarata come var c: char;. Ipotizzando che essa
contenga un carattere compreso tra '0' e '9', come si trasferisce in una variabile intera v
il valore decimale della cifra rappresentata da c?
1. v := c;
2. v := ord(c);
3. v := ord(c)-ord('0');
4. v := c[1];
Risposta: ..............................................
12 [3 punti] Sia definita la seguente funzione:
function cond(a: integer): boolean; begin cond:=cond(a)

end;

1. Cosa succede all'istruzione if (a>0) then if (cond(a)) then


writeln('ciao'); al variare di a?
2. Cosa succede all'istruzione if (cond(a)) then if (a>0) then
writeln('ciao'); al variare di a?
Risposta: 1 ...................................................................
.........................................................................................
2 ......................................................................................
.........................................................................................
13 [2 punti] Sia dichiarato un array var a: array [1..10] of integer;. Cosa succede
all'esecuzione del seguente codice:
i:=0;
repeat
i:=i+1;
a[i]:=2
until (i>10);

1. Tutto l'array viene inizializzato al valore 2;


2. Si superano i limiti dell'array. L'errore viene segnalato in fase di compilazione;

3. Si superano i limiti dell'array. L'errore viene segnalato all'esecuzione del codice;


4. Si superano i limiti dell'array. All'accesso all'undicesimo elemento, il sistema
operativo assegna altro spazio all'array a e l'esecuzione prosegue.
Risposta: ..............................................
14 [3 punti] Considerate il seguente frammento di codice:
var i: .....;
j: .....;
a: array [.....] of .....;
...
a[a[i]=j]:=a[a[j]=i];

possibile completare le dichiarazioni di variabile in modo tale che l'assegnamento non


dia luogo a errori di compilazione? Se s, indicate i tipi delle variabili i, j e a.
Risposta:........................................................................
........................................................................................
........................................................................................
........................................................................................
15 [2 punti] Dire quale dei programmi seguenti calcola in j l'indice dell'elemento massimo
del vettore di interi positivi v contenente n elementi, posto che j sia inizializzato a 1:
1. for i:=1 to n do if v[i]>j then j:= v[i];
2. for i:=1 to n do if v[i]>v[j] then j := i;
3. for i:=1 to n do if v[j]>i then j:= i;

Risposta: ..............................................
16 [2 punti] Dire quale dei programmi seguenti ordina il vettore di interi v contenente n
elementi:
1.

for i:=1 to n do
begin
m := i;
for j:=i+1 to n do
if v[j]<v[m] then m := j;
t := v[m];
v[m] := v[i];
v[i] := t

2.

end;
for i:=1 to n do
begin
m := v[i];
for j:=i+1 to n do
if j<m then m := j;
t := v[m];
v[m] := v[i];
v[i] := t

end;
3.

for i:=1 to n do
begin
m := i;
for j:=i+1 to n do
if v[j]<v[m] then m := j;
t := v[m];
v[m] := v[j];
v[j] := t
end;

Risposta: ..............................................
17 [5 punti] Considerate le seguenti definizioni:

un simbolo una cifra o una lettera;

un codice una sequenza (stringa) di simboli che inizia e termina con una lettera,
che contiene almeno una cifra, e che non contiene mai due cifre consecutive;

dato un codice, un suo sottocodice una sua sottostringa che sia a sua volta un
codice;

un codice minimo se non contiene sottocodici (a parte lui stesso).

Dire quali delle seguenti affermazioni sono vere ( possibile che pi di una affermazione
sia vera: occorre indicarle tutte):
1. ogni codice ha lunghezza maggiore o uguale a 3;
2. nessun codice contenente pi di due lettere minimo;
3. ogni codice ha lunghezza minore o uguale a 36;
4. il numero di sottocodici minimi di un codice dato uguale al numero di cifre che
esso contiene;
5. il numero di sottocodici minimi di un codice dato minore o uguale alla met del
numero di lettere che esso contiene;
6. nessun codice di lunghezza maggiore di 3 minimo.
Risposta: ..............................................
18 [5 punti] Considerate la seguente funzione:
function f (x: integer): integer;
begin
if (x<>0) then f:=0
else f:=(x mod 2)+f(x div 2);
end;

Tale funzione viene eseguita su tutti i valori di x compresi fra 100 e 500. Chiamate a il
minimo valore ottenuto in queste esecuzioni, e b il massimo valore; quanto valgono a e
b?
Risposta: a=............. b=.............

19 [2 punti] Considerate il seguente frammento di codice:


var i,f: real;
...
f:=1/50;
i:=0.0;
while (i<>1.0) do
begin
write('A');
i:=i+f
end;

Quale dei seguenti effetti ha il ciclo for indicato?


1. Stampa 50 volte il carattere A;
2. Stampa 51 volte il carattere A;
3. Stampa 49 volte il carattere A;
4. Il ciclo potrebbe non terminare, stampando infinite volte il carattere A;
5. Il compilatore segnala un errore;
6. Il ciclo non viene mai eseguito.
Risposta: ..............................................
20 [3 punti] Considerate il seguente frammento di programma:
var a,b: integer;
procedure f1(var p: integer; var c: integer);
begin
p:=c
end;
procedure f2(var p: integer; var c: integer);
begin
p:=b;
end;
procedure f3(var p: integer; var c: integer);
begin
p:=b;
end;
procedure f4(var p: integer; var c: integer);
begin
c:=b;
end;

Dite quale delle seguenti chiamate non ha lo stesso effetto delle altre sulle variabili a e b:
1. f1(a,b);
2. f2(a,b);
3. f3(b,a);

4. f4(a,a);
Risposta: ..............................................