16-04-1999 Classe 3Bi
Soluzione.
Obiettivo: confrontare due stringhe in base alla lunghezza
Risultati: numero negativo se prima stringa più corta della seconda, 0 se hanno la stessa lunghezza, numero negativo se la prima è più corta della seconda.
Dati: due stringhe
Struttura dati: stringa=ARRAY[0..128] of CHAR; stringa è terminata da *.
Algoritmo:
restituisci: lunghezza stringa 1 - lunghezza stringa 2.
Codifica:
Function confronto(s1, s2:stringa):integer;
begin
confronto:=strlen(s1) - strlen(s2);
end;
Function strlen(x:stringa):integer;
var
i:integer;
begin
i:=0;
while (x[i]<>'*') do
i:=i+1;
strlen:=i;
end;
Obiettivo: ottenere una stringa senza caratteri minuscoli
Risultati: stringa senza caratteri minuscoli
Dati: una stringa
Struttura dati: stringa=ARRAY[0..128] of CHAR; stringa è terminata da *.
Algoritmo:
Copiare i caratteri diversi da quelli minuscoli in una nuova stringa.
Ricopiare la stringa così ottenuta al posto della vecchia.
Codifica
Procedure elimina(var s:stringa);
var
x : stringa;
i, j : integer;
begin
i:=0; j:=0;
while(s[i]<>0) do begin
if(s[i]<'a') or (s[i]>'z') then begin
x[j]:=s[i]; j:=j+1
end;
i:=i+1
end;
x[j]:='*';
strcpy(s, x);
end;
strcpy copia x in s.
Obiettivo: calcolare la somma degli elementi di un vettore
Risultato: somma
Dati: vettore di numeri; alla cella 0 lunghezza del vettore
Struttura dati: numeri=ARRAY[0..100] of real;
algoritmo: percorri tutto il vettore aggiungendoogni valore trovato ad un accumulatore opportunamente predisposto.
Codifica:
Function somma(n:numeri):real;
var
s:real;
i:integer;
begin
s:=0;
for i:=1 to trunc(n[0]) do begin
s:=s+n[i];
somma:=s;
end;
Obiettivo: determinare valore massimo di un vettore
Risultato: massimo
Dati: vettore di numeri
Struttura dati: numeri=ARRAY[0..100] of real; Alla cella 0 dimensione del vettore.
Algoritmo:
suppongo che il massimo sia il primo valore del vettore; lo confronto con tutti gli altri e quando ne trovo uno più grande sostituisco il valore del massimo con il nuovo massimo.
Codifica:
Function massimo(n:numeri):real;
var
i:integer;
max:real;
begin
max:=n[1];
for i:=1 to trunc(n[0] do
if(max < n[i]) then max:=n[i];
massimo:=max;
end;
Obiettivo: contare il numero di A, il numero di B, il numero di C .... di una stringa
Risultato: un vettore di contatori
Dati: una stringa
Struttura dati:
Stringa=ARRAY[0..128] of CHAR;
Contatori=ARRAY[A..Z] of INTEGER;
algoritmo:
percorro tutta la stringa e per ogni carattere maiuscolo incremento il contatore corrispondente.
Codifica:
procedure contatori(s:stringa; var c:contatori);
var
i:integer;
begin
i:=0;
while(s[i]<>'*') do begin
if(s[i] >= 'A') and (s[i] <='Z') then
c[s[i]]:=c[s[i]] + 1;
i:=i+1;
end
end;