16-04-1999 Classe 3Bi

Soluzione.

  1. Scrivere una funzione che confronta tra loro due stringhe in base alla loro lunghezza.
  2. 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;

  3. Scrivere una procedure che elimina da una stringa tutti i caratteri minuscoli.
  4. 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.

     

  5. Scrivere una funzione che restituisce la somma degli elementi contenuti in un vettore di interi.
  6. 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;

  7. Scrivere una funzione che restituisce il valore massimo di un vettore di numeri.
  8. 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;

     

  9. Scrivere una procedure che conteggi tutte le occorrenze delle lettere maiuscole contenute in una stringa.

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;