PDA

Visualizza la versione completa : [OT] Olimpiadi di informatica


gygabyte017
09-11-2005, 15:52
Essendo uno studente, mi sono iscritto alle selezioni scolastiche delle olimpiadi di informatica. Ebbene, i quesiti su cui sto esercitandomi sono un pò difficili x me (anche se programmo da 4 anni) xkè sono analisi di funzioni che non ho capito come si fanno...
Esempio di esercizio:

--------------------------
La risposta vale 6 punti
Si consideri il seguente frammento di programma.


type sequenza = array[1..100] of integer;

function calcola(vett:sequenza; n:integer): integer;
var i,y,x:integer;
begin
y:=0;
x:=vett[1];
for i:=1 to n-1 do
begin
if (x < vett[i+1]) then
begin
y:=vett[i+1]-x+y;
x:=vett[i+1]
end;
if (x-y > vett[i+1]) then
y:=x-vett[i+1];
end;
calcola:=y;
end;

Dire che cosa restituisce la funzione "calcola" assumendo che venga invocata passando un vettore di lunghezza n con n>2.
Risposta aperta.
----------------------------

La domanda è: come li devo risolvere? Qual'è il metodo? Non posso mica seguire riga x riga come se fossi un pc!
:ciauz: :ciauz: :ciauz:

Andrea1979
09-11-2005, 16:11
ed invece è proprio quello che devi fare:

Prendi carta e penna, un array piccolo (tipo 5 elementi) e vedi un po' che succede...

stai_tranquillo
09-11-2005, 16:31
i metodi sono 2: o fai come dice Andrea1979, o usi la sfera di cristallo...


se programmi da 4 anni e non sei in grado di simulare a mente 4 righe di codice mi domando cosa abbia fatto in 4 anni :master:

gygabyte017
09-11-2005, 16:35
il fatto è che anche se io mi faccio le 4 righe a mente non riesco poi a capire qual'è la soluzione... :madai!?: cioè nell'es di prima io mi faccio 2 vettori di esempio, mi seguo la funzione e poi ho 2 risultati ma che ci faccio?

Andrea1979
09-11-2005, 16:43
non fanno più fare il flow-chart e il tracciato del programma a scuola? Non parlo di controllo di correttezza formale, che anche per un programma banale è una bella rottura.

Nel tuo caso (e in molti altri), la regola generale è:

- Flow Chart del programma;
- Inventare dati (tipo vett = {3,6,-1,2,-3} con n = 5);
- Tracciato: ossia una tabellina in cui la prima colonna è il "passo" 1, 2, 3, ... nelle altre colonne metti i valori che ad ogni passo le variabili e condizioni (facile dal flowchart) assumono, e ? nel caso non sia ancora arrivato all'istruzione relativa:

esempio


passo x y vett i vett[i+1] (x < vett[i+1])? (x-y > vett[i+1])?
0 3 0 3,6,-1,2-3 ? ? ? ?
1 3 0 1 6 3 < 6 ? V ?
2 6 3 1 6 3 > -1 ? V


etc etc

king64
09-11-2005, 17:12
Ha ragione Andrea :carta e penna :D

Loading