Vai al contenuto

Appunti del 08-03-2023⚓︎

esercizio⚓︎

relazzare pseudocodice di una funzione che riceve in input una matrice (contiene solo 0, 1, 2)

n righe m colonne

righe giornate e colonne le squadre

Text Only
1
2
3
4
  G/S A B C D
   1  0 1 1 2
   2  0 2 1 1
   3  2 0 1 1

dove G è giornata e S è squadra.

individuare capolista per ogni giornata

Text Only
1
2
3
G1 D
G2 B D
G3 D

non conviene usare delle lettere per le giornate ma un numero, così diventa:

Text Only
1
2
3
4
  G/S 1 2 3 4
   1  0 1 1 2
   2  0 2 1 1
   3  2 0 1 1

come prima idea di soluzione ci si limita a scandire riga per riga (GxG). per ogni giornata devo calcolare punteggio di ogni squadra fino alla G esaminata

Trovare iìvalore massimo dei punteggi calcolati.

La base dell'algoritmo è la seguente:

Text Only
1
2
3
per ogni giornata
    calcolare il punteggio di ogni squadra fino alla gioranta esaminata
    trovare il valore massimo dei punteggi calcolati

il vv LeCapolista che conterrà le squadre in testa è un array a 1dim di int > 0.

si potrebbe

Text Only
1
2
3
per ogni giornata
    A = calcolare il punteggio di ogni squadra fino alla gioranta esaminata
    LeCapolista = trovare iìvalore massimo dei punteggi calcolati

magari un nome migliore di A. A è un array coi punteggi già sommati per ogni squadra

riscriviamo l'alg meglio

Algoritmo generale⚓︎

INPUT:

risultati
contiene i risultati di ogni squadra (sulle colonne) di tutte le giornate (righe) del campionato. I ris sono i valori 0, 1, 2. Array a 2dim di interi nell'intervallo \([0,\, 2]\).
NumSquadre
numero di squadre che partecipano al campionato, intero maggiore di zero
NumGiornate
numero di giornate disputate, intero maggiore di 0

OUTPUT:

LeCapolista
contiene il nome delle squadre capolista di ogni giornata del campionato. Array a una dimensione di interi, 0 < LeCapolistaNumSquadre. Ha dim pari a NumGiornate.

LAVORO:

g
giornata

ALGORITMO:

Text Only
g := 1
MENTRE (q <= NumGiornate)
    ClassificaGiornata := CalcolareClassificaGiornata(
        risultati, NumSquadre, NumGiornate, g
    )
    LeCapolista in posizione g := TrovareMassimo(
        ClassificaGiornata, g, NumSquadre
    )
    g := g + 1
FINE

TrovareMassimo⚓︎

INPUT:

Classifica
punteggio di tutte le squadre, array a 1dimm di interi maggiori o uguali a zero.
Dimensione
numero di squadre che partecipano al campionato, intero maggiore di 1

OUTPUT:

Capolista
la squadra in testa al campionato, intero, 0 < Capolista <= NumSquadre.

LAVORO:

i
contatore

ALGORITMO:

Text Only
MAX := primo elemento di classifica
Capolista := 1
i := 2
MENTRE (i <= Dimensione)
    SE (elemento di Classifica in posizione i > MAX) ALLORA
        MAX := elemento di Classifica in posizione i
        Capolista := i
    FINE
    i := i + 1
FINE

In questo caso se la prima squadra questo è inutile. Aggiungendo Capolista := 1, si ovvia a questo errore.

un appunto stilistico è che la funzione è generale, al posto di Classifica sarebbe meglio avere InsiemeDiNumeri ad esempio. L'algoritmo è troppo legato a quello delle squadre, conviene slegarli. È solo una questione di leggibilità etc.

CalcolareClassificaGiornata⚓︎

INPUT:

Risultati
come già detto precedentemente.
NumGiornate
come sopra.
NumGiornate
come sopra.
Giornata
giornata in cui calcolare la classifica, intero, 0 < Giornata <= NumGiornate.

OUTPUT:

ClassificaGiornata
contiene i punteggi delle squadre fino alla giornata Giornata. Array a 1dim di interi maggiori o uguali a zero. sarà di dim NumSquadre (non ci serve per l'output).

LAVORO:

boh

ALGORITMO:

Text Only
1
2
3
4
5
i := 1
MENTRE (i <= NumSquadre)
    ClassificaGiornata in posizione i := SommarePunti(Risultati, i, Giornata)
    i := i + 1
FINE

SommarePunti⚓︎

INPUT:

Risultati
già data
Squadra
squadra di cui si vuole calcolare il punteggio, intero 0 < Squadra <= NumSquadre.
Giornata
già data

OUTPUT:

Punti
punti ottenuti da sommare fino alla giornata Giornata, intero meggiore o uguale a zero, minore o uguale di 2 * Giornata.

ALGORITMO:

Text Only
1
2
3
4
5
6
Punti := 0
i := 1
MENTRE (i <= Giornata)
    Punti := Punti + elemento di risultato in posizione i e Squadra
    i := i + 1
FINE

Test su Valori Limite

test per classi di equivalenza.


VALIDI \(]0,\, \text{NumGiornate}]\)

NON VALIDI \(]-\infty,\, 0]\), \(]\text{NumGiornate},\, +\infty[\).