This shows you the differences between two versions of the page.
— |
pub:labprog:2020-11-19 [2020/11/19 18:11] (current) atrent created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | # Note lezione (19/ | ||
+ | lezione precedente su wiki: https:// | ||
+ | |||
+ | wiki del lab: https:// | ||
+ | |||
+ | link esercizi: https:// | ||
+ | |||
+ | link upload: https:// | ||
+ | |||
+ | **Attenzione a non sovrascrivere il testo esistente** | ||
+ | |||
+ | ## MEMO | ||
+ | * scrivete tanto codice e fate saltar fuori gli errori | ||
+ | * usate molto il prompt | ||
+ | * non abbiate paura di fare domande (o scrivere commenti) | ||
+ | * INDENTATE!!! (comando ```go fmt < | ||
+ | |||
+ | |||
+ | |||
+ | ## FAQ | ||
+ | ### Esercizio 1 | ||
+ | |||
+ | La funzione ```rand.Intn(n int)``` ritorna un intero generato casualmente tra [0,n). Documentazione: | ||
+ | Nota (che non serve per questo esercizio in particolare): | ||
+ | Questa istruzione è **necessaria**, | ||
+ | |||
+ | --- | ||
+ | |||
+ | Ragionate sulla retta dei numeri per capire come modificare l' | ||
+ | ```lancio := rand.Intn(7)``` | ||
+ | per generare numeri nell' | ||
+ | |||
+ | In quali aspetti differiscono i due segmenti [0,6] e [1,6]? | ||
+ | (Il secondo è più corto e inizia più a destra) | ||
+ | |||
+ | --- | ||
+ | |||
+ | |||
+ | ### Esercizio 2 | ||
+ | |||
+ | Per la domanda "Di che tipo è la variabile data?" si intende quella nel main. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ### Esercizio 3 | ||
+ | |||
+ | Lo switch da riga 20 a 27 può e deve essere sostituito da una sola istruzione | ||
+ | |||
+ | --- | ||
+ | |||
+ | Per stampare un ```%```: | ||
+ | - con Printf scrivere ```fmt.Printf(" | ||
+ | |||
+ | Ecco cosa succede se non mettete entrambi i %: | ||
+ | ```golang | ||
+ | fmt.Printf(" | ||
+ | ``` | ||
+ | ```shell | ||
+ | ./ | ||
+ | ``` | ||
+ | Questo accade dato che dopo il ```%``` la printf si aspetta di dover interpretare qualcosa, ad esempio: ```fmt.Printf(" | ||
+ | |||
+ | |||
+ | - cont Println basta ```%```: ```fmt.Println(" | ||
+ | |||
+ | --- | ||
+ | |||
+ | ### Esercizio 4 | ||
+ | |||
+ | L' | ||
+ | |||
+ | --- | ||
+ | |||
+ | |||
+ | ### Esercizio 5 | ||
+ | |||
+ | I significati dell' | ||
+ | - ``` n * m ``` con n e m numeri: è l' | ||
+ | - altrimenti si riferisce a un puntatore | ||
+ | |||
+ | Contesti: | ||
+ | ```golang | ||
+ | package main | ||
+ | |||
+ | import " | ||
+ | |||
+ | //la dicitura (x *int) significa che la funzione prende in input un puntatore ad un intero | ||
+ | func StampaPuntatore(x *int) { | ||
+ | fmt.Printf(" | ||
+ | fmt.Printf(" | ||
+ | } | ||
+ | |||
+ | func main() { | ||
+ | x := 1 //dichiaro un intero x | ||
+ | StampaPuntatore(& | ||
+ | } | ||
+ | ``` | ||
+ | Output: | ||
+ | ``` | ||
+ | Valore del puntatore: 1 | ||
+ | Indirizzo di memoria di x: c000100010 | ||
+ | ``` | ||
+ | |||
+ | Proviamo ora a scrivere una funzione che modifica il valore di x: | ||
+ | |||
+ | ```golang | ||
+ | func modificaPuntatore(x *int, nuovoValore int){ | ||
+ | *x = nuovoValore | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | Per invocare la funzione: ```modificaPuntatore(& | ||
+ | |||
+ | Non sarebbe andato a buon fine il seguente tentativo: | ||
+ | |||
+ | ```golang | ||
+ | |||
+ | func modificaSbagliata(x int, nuovoValore int){ //non prende in input un puntatore ma un int | ||
+ | x = nuovoValore | ||
+ | } | ||
+ | |||
+ | func main() { | ||
+ | x := 1 //dichiaro un intero x | ||
+ | modificaSbagliata(x, | ||
+ | StampaPuntatore(& | ||
+ | } | ||
+ | ``` | ||
+ | Output: | ||
+ | ``` | ||
+ | Valore del puntatore: 1 | ||
+ | Indirizzo di memoria di x: c00002c008 | ||
+ | ``` | ||
+ | |||
+ | --- | ||
+ | La funzione ```newPunto``` deve restituire una variabile di tipo Punto avente come coordinate x e y passate in input alla funzione | ||
+ | |||
+ | |||
+ | --- | ||
+ | |||
+ | Per modificare i campi di una struttura di cui abbiamo il puntatore: | ||
+ | |||
+ | ```golang | ||
+ | type Struttura struct{ | ||
+ | campo int | ||
+ | } | ||
+ | |||
+ | func modificaCampo(s *Struttura, n int) { | ||
+ | (*s).campo = n | ||
+ | } | ||
+ | |||
+ | func main() { | ||
+ | s := Struttura{1} | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | ``` | ||
+ | Output: | ||
+ | ``` | ||
+ | {campo:2} | ||
+ | ``` | ||
+ | --- | ||
+ | ### Esercizio CIFRE | ||
+ | |||
+ | Per verificare se una carattere è una cifra potete usare la funzione | ||
+ | |||
+ | ```unicode.IsDigit(r Rune)``` | ||
+ | |||
+ | Documentazione: | ||
+ | |||
+ | Per ottenere l'int corrispondete a una runa c che rappresenta una cifra: | ||
+ | |||
+ | c - ' | ||
+ | |||
+ | --- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | . |