• Non ci sono risultati.

Esame di Algoritmi e Strutture di Dati I Luned`ı 9 Giugno 2003

N/A
N/A
Protected

Academic year: 2021

Condividi "Esame di Algoritmi e Strutture di Dati I Luned`ı 9 Giugno 2003"

Copied!
3
0
0

Testo completo

(1)

Esame di Algoritmi e Strutture di Dati I Luned`ı 9 Giugno 2003

Nome:

Cognome:

Matricola:

Scrivere in forma leggibile il proprio nome, cognome e matricola sul testo del compito e su ogni foglio consegnato;

Consegnare solo la bella copia e il testo del compito;

Non ` e possibile consultare alcun tipo di materiale didattico;

Non ` e possibile uscire dopo l’inizio dello scritto.

Esercizio 1 (Punti 30)

Il Consiglio di Corso di Laurea ha deliberato il seguente metodo per il calcolo della media di laurea:

Per il calcolo della media di laurea si scartando i 40 crediti con voto pi`u basso. Si procede quindi al calcolo della media ponderata, rispetto al credito, dei rimanenti esami. Il risultato viene rivalutato del 4%

e infine espresso in 110esimi.

1. Rappresentare mediante una opportuna struttura di dati l’informazione necessaria per il calcolo della media.

2. Scrivere una procedura che calcola la media di laurea secondo quanto de- liberato dal Consiglio utilizzando la struttura di dati scelta al punto 1.

Soluzione

Ogni esame viene rappresentato da un oggetto con tre campi: Corso, Cred- ito, Voto. La procedura che calcola la media prende in ingresso un vettore A che contiene i puntatori agli oggetti che rappresentano gli esami superati dallo studente.

1

(2)

Algoritmo 1 Media(A) Media(A)

1:

soglia ← 40

2:

coriv ← 1.04

3:

// Ordino gli esami in senso crescente di voto

4:

InsertionSort(A)

5:

scarto ← 0

6:

i ← 0

7:

// Scarto i crediti con voto pi` u basso

8:

while scarto < soglia do

9:

if i = length[A] then

10:

error La soglia `e superiore al numero di crediti

11:

end if

12:

i ← i + 1

13:

scarto ← scarto + Credito[A[i]]

14:

end while

15:

// Tengo conto dell’eventuale frazione da considerare dell’ultimo esame scartato

16:

creditot ← scarto − soglia

17:

media ← V oto[A[i]] ∗ (scarto − soglia)

18:

// Calcolo la media ponderata

19:

for j ← i + 1 to length[A] do

20:

media ← media + V oto[A[j]] ∗ Credito[A[j]]

21:

creditot ← creditot + Credito[A[j]]

22:

end for

23:

media ← media/creditot

24:

// Calcolo la media rivalutata

25:

mediaplus ← media ∗ coriv

26:

// Calcolo la media in 110esimi

27:

media110 ← mediaplus ∗ (11/3)

28:

return media110

2

(3)

La procedura InsertionSort deve essere modificata come segue:

Algoritmo 2 InsertionSort(A) InsertionSort(A)

1:

for j ← 2 to length(A) do

2:

pkey ← A[j]

3:

i ← j − 1

4:

while (i > 0) and (V oto[pkey] < V oto[A[i]]) do

5:

A[i + 1] ← A[i]

6:

i ← i − 1

7:

end while

8:

A[i + 1] ← pkey

9:

end for

3

Riferimenti

Documenti correlati

Come si vede, nell’algoritmo cerchiamo prima di ottenere un sistema equivalente all’originale in cui tutti i coefficienti tranne al massimo uno nella prima co ; , poi, usando

Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna ipotesi sul tipo degli elementi della sequenza

Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna ipotesi sul tipo degli elementi della sequenza

Si definisce grado di squilibrio di un nodo il valore assoluto della differenza tra la somma delle chiavi nei nodi foglia del sottoalbero sinistro e la somma delle chiavi dei

Scrivere la funzione ricorsiva printGreaterKeys(u, a) che, data la radice u di un BST, un valore a di chiave, stampa in ordine tutte le chiavi dell’albero maggiori della chiave

Si progettino un algoritmo euristico di tipo greedy ed uno di ricerca locale per risolvere il problema della BISEZIONE in forma di ottimizzazione: “Dato un grafo non orientato G =

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva

la lista che rappresenta l’insieme `e ordinata (cio`e gli oggetti nella lista sono inseriti in ordine crescente di chiave).. In entrambi i casi, si scriva la procedura SubSet(A, B)