1. Dati 3 numeri reali calcolarne la somma, il prodotto e la media.

Analisi con esempio

Si tratta di calcolare, a partire da tre numeri reali dati, la loro somma, il loro prodotto e la loro media con dei semplici calcoli.

Esempio: se X=2, Y=3, Z=10 allora S=2+3+10=15, P=2*3*10=60 e M=S/3=15/3=5.

Intestazione del sottoprogramma

I tre numeri dati (X, Y, Z) diventano tre parametri in ingresso e i tre valori calcolati (S, P, M) diventano tre parametri in uscita. (Una funzione non è adatta...)

procedure TRE(X, Y, Z: Real; Var S, P, M: Real);

Algoritmo risolutivo

Si tratta di semplici calcoli matematici e tutto si riduce a tre espressioni (una per ogni richiesta).

Codifica TP6

procedure TRE(X, Y, Z: Real; Var S, P, M: Real);
begin
   S:=X+Y+Z;
   P:=X*Y*Z;
   M:=S/3;
end;

2. Dato un numero naturale calcolare il numero dei sui divisori.

Analisi con esempio

Dato un numero naturale N, i suoi divisori sono quei numeri naturali che lo dividono senza resto (2 è un divisore di 10, 4 non è un divisore di 10, ...). La traccia chiede di contarli.

Esempio: i divisori di 10 sono 1, 2, 5, 10 (3, 4, 6, 7, 8, 9, 11, ... non vanno bene...) allora la risposta è 4.

Intestazione del sottoprogramma

Il problema presenta un parametro in ingresso, il numero del quale bisogna contare i divisori, e un risultato. Quando si ottiene un risultato è preferibile restituirlo come valore di una funzione.

function DIVISORI(N: Longint): Longint;

Algoritmo risolutivo

Un numero i è un divisore di N se il resto della divisione (N Div i) è zero, quindi bisogna utilizzare l'operatore Mod.

Per ognuno dei possibili divisori bisogna fare questo controllo e in caso positivo conteggiare il successo utilizzando una variabile contatore

if (N Mod i = 0) then Inc(CONTA);

Per scorrere i possibili divisori utilizziamo un for con valore iniziale 1 e valore finale N (si potrebbe anche partire da 2 e fermarsi a N Div 2 con CONTA inizializzato a 2..., oppure...).

Codifica TP6

function DIVISORI(N: Longint): Longint;
var i, CONTA: Longint;
begin
   CONTA:=0;
   for i:=1 to N do
      if(N Mod i = 0) then
         Inc(CONTA);
   DIVISORI:=CONTA;
end;

Commento

Il problema era stato risolto durante le lezioni sui numeri primi e sui numeri perfetti.

3. Quanti numeri interi consecutivi bisogna sommare per raggiungere (o superare) un certo valore?

Analisi con esempio

Si tratta di contare quanti numeri interi (positivi...) sono necessari perché la loro somma raggiunga o superi un certo valore dato.

Esempio 1: Sia N=10, allora 0+1=1, 1+2=3, 3+3=6, 6+4=10, STOP! Sono necessari 4 numeri interi consecutivi per raggiungere 10.

Esempio 2: Sia N=12, allora 0+1=1, 1+2=3, 3+3=6, 6+4=10, 10+5=15, STOP! Sono necessari 5 numeri interi consecutivi per raggiungere (superare) 12.

Intestazione del sottoprogramma

Un valore dato: un parametro in ingresso. Un valore da restituire: una funzione...

function SOMMARE(N: Longint): Longint;

Algoritmo risolutivo

Si parte sommando a una variabile accumulatore SOMMA il valore 1 e poi via via i suoi successori controllando a ogni passo che non sia stato raggiunto o superato il valore stabilito.

Codifica TP6

function SOMMARE(N: Longint): Longint;
var a, SOMMA: Longint;
begin
   SOMMA:=0;
   a:=0;
   while (SOMMA < N) do
      begin
         Inc(a);
         Inc(SOMMA, a);
      end;
   SOMMARE:=a;
end;

Commento

Si usa il while invece del for perché... Il problema era stato risolto durante le lezioni sulle istruzioni di controllo per i cicli.

- ApPuNtIdIuNiNfOrMaTiCo