Come descrivere il codice dell'Home Work??

A
AmritV (830 points)
6 8 11
asked Nov 19, 2019 in Info sul corso e sugli esami by AmritV (830 points)

Salve

Penso che sia capitato quasi a tutti nel porsi la seguente domanda: 

-è la descrizione del mio algoritmo troppo confusa? Oppure troppo chiara?

-Vorrei una volta e per tutte trovare una soluzione a questo rompicapo, nelle regole del corso c'è scritto che: Per incoraggiare lo scambio di idee (SENZA SCAMBIARE CODICE) e favorire la comprensione degli esercizi, vi facciamo suggerire l'un l'altro come migliorare la soluzione presentata.

Quindi la regola maggiormente da rispettare è scritta nelle parentesi tonde: " (SENZA SCAMBIARE CODICE)"...bene: infatti personalmente per descrivere il codice dei miei homework utilizzo un algoritmo scritto in uno pseudo-codice di mia fattura.

Vorrei fare un esempio, faciamo conto che dobbiamo descrivere l'algoritmo di una funzione che calcola la somma di due numeri soltanto se sono maggiori di 0,altrimenti ritornare None.

Inizio: Dati due numeri A e B calcolarne la somma e restituire il risultato C:

        Se A è minore di zero o B è minore di zero

                 ritorno il valore None

        altrimenti

                  calcolo la somma tra A e B e salvo il risultato in una variabile C

        ritorno C

Fine

Questo è il mio modo di descrivere gli HomeWork, pensate che può andare bene oppure la descrizione è troppo chiara? Aiutatemi

 :)

6 Answers

Best answer
LUPOSaymon (2730 points)
1 3 27
answered Nov 19, 2019 by LUPOSaymon (2,730 points)
selected Nov 20, 2019 by AmritV

Quello che hai scritto te è un algoritmo fin troppo dettagliato (si avvicina molto ad uno pseudo-codice, visto che indichi anche l'indentazione, le operazioni di controllo e i return);

L'algoritmo è semplicemente una descrizione scritta della tua risoluzione del problema, non una traduzione del codice.

Per esempio, riscriverei quello che hai scritto nella seguente maniera:

"Se A o B è minore di zero, il valore sarà None, altrimenti calcolo semplicemente la somma tra le due variabile e metto il risultato in una variabile"

Naturalmente, dipende tutto dal tuo algoritmo, non metterti a descrivere cose fin troppo evidenti insomma ;)

Personalmente, motivo (bastano anche poche parole) la scelta di alcune operazioni complesse o "strane a prima vista" nel mio algoritmo

andrea.sterbini (172780 points)
513 935 1789
answered Nov 19, 2019 by andrea.sterbini (172,780 points)
È un po' troppo dettagliata. Se ne era già parlato al PA precedente.
E
Edward (25950 points)
2 4 172
answered Nov 19, 2019 by Edward (25,950 points)
Devi descrivere l'algoritmo, non devi tradurre da python a pseudocodice
T
Trasciatti (1400 points)
10 20 34
answered Nov 19, 2019 by Trasciatti (1,400 points)
edited Nov 19, 2019 by Trasciatti
Penso che un buon modo sia usare poche righe ma che spieghino il concetto: il mio programma prende due numeri, controlla che siano maggiori di zero ed in quel caso effettua la somma
Un esempio un po' più concreto, l'algoritmo per vedere il minimo cammino tra due nodi in un grafo pesato: Dijkstra:
L'algoritmo parte da un nodo, vede i suoi nodi vicini che non ha mai salvato, tra di essi salva il vicino (e l'arco)  il cui arco che lo collega al nodo di partenza è di peso minore tra tutti gli archi. Ripeti, ma anziché vedere il solo nodo salvato, vedi i vicini di tutti i nodi che ho salvato. Fine
Posso specificare quali sono i vicini perché potrebbe non essere chiaro, ma non c'è bisogno di andare più in dettaglio di così, lo pseudocodice sarebbe venuto certamente più lungo di scarse 6 righe (sono da mobile). Dettagli che ometto: i nodi man mano li salvo in un set, il grafo è un dizionario con nodi:(nodo1, nodo 2, costo),  ritorno una lista con gli archi e i costi, all'inizio controllo che il grafo non abbia pesi negativi ecc...
plm (18850 points)
7 15 118
answered Nov 20, 2019 by plm (18,850 points)

Così sarebbe una trasformazione da linee di codice in parole, quello che devi fare è descrivere in maniera generale il tuo codice, ovvero in questo caso fare una cosa del tipo: "la funzione calcola la somma di due numeri soltanto se sono maggiori di 0,altrimenti ritorna None."

Antares (7770 points)
5 6 41
answered Nov 20, 2019 by Antares (7,770 points)

Credo sia troppo dettagliato scritto in questo modo, hai persino messo l'indentazione in stile Python, chiunque potrebbe facilmente tradurre il tuo pseudo codice in Python e prendere il tuo stesso voto senza fatica. L'importante è, a mio parere, far capire all'altra persona la logica generale seguita per la costruzione dell'algoritmo senza entrare troppo nei dettagli e tralasciando meccanismi ovvi come "ho creato la variabile C per mettere il risultato". Lo riscriverei in maniera simile a LUPOSaymon.

A
AmritV (830 points)
6 8 11
commented Nov 20, 2019 by AmritV (830 points)
Il problema è che una volta iniziato il PA, noi dobbiamo dare un voto all'EFFICIENZA e alla CORRETEZZA dell'algoritmo(oltre che alla chiarerezza). Se non abbiamo informazioni dettagliate, come possiamo dare un giudizio equo?

In un certo senso potrei confrontare il PA ad una sorta di Far West, dove ognuno utilizza le sue regole e le sue leggi per descrivere il proprio codice.

 Vorrei cercare di trovare una standardizzazione ed un metodo quasi univoco per la descrizione dell'algoritmo.

Questa sarebbe la tesi che supporta la mia scelta di utilizzare lo pseudo-codice. Ovviamente ci saranno anche una dozzina di  antitesi da analizzare: come il fatto che il codice può essere facilmente copiato.

"Ma molto probabilmente sono io che mi sto creando molta confusione al riguardo del PA".