Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pub:labprog:2020-11-12 [2020/11/12 17:46] (current)
atrent created
Line 1: Line 1:
 +#  Note lezione (12/​11/​2020)
  
 +**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)
 +
 +## Argomenti
 +
 +* switch
 +* funzioni
 +
 +## TODO
 +
 +## Esercizi e note
 +
 +### `break` con label
 +Voglio interrompere il for superiore direttamente dallo switch. Se scrivessi `break` nello switch uscirebbe lo switch, invece con la label posso rompere il for superiore da lì. E dovrebbe funzionare con tutto. Molto bello
 +
 +```go
 +Loop:
 +    for {
 +        switch qualcosa {
 +        case 1:
 +           // ...
 +
 +        case 2:
 +          // ...
 +
 +        case 3:
 +          break Loop
 +        }
 +    }
 +```
 +
 +### ```Scanf``` rattoppata
 +
 +```go
 +package main
 +import "​fmt"​
 +
 +
 +func main() {
 +    ​
 +    var r rune;
 +    ​
 +    for{
 +        fmt.Println("​Inserire carattere"​)
 +        fmt.Scanf("​%c\n",​ &r) //in questo modo catturo l'​invio
 +        fmt.Printf("​Carattere inserito: %c\n", r)
 +        ​
 +    }
 +}
 +```
 +
 +### Variabili di ritorno nelle funzioni
 +
 +Caso: variabili nominate
 +```golang
 +func funz()(valore_restituito string){
 +    valore_restituito = "​ciao"​
 +    return
 +}
 +```
 +
 +Caso: non nominate
 +```golang
 +func funz()(string){
 +    valore_restituito := "​ciao"​
 +    return valore_restituito
 +}
 +```
 +
 +
 +### dal form delle esercitazioni
 +
 +### Es. 1
 +
 +(da uno studente)
 +
 +``` go
 +package main
 +
 +import (
 + "​fmt"​
 + "​unicode"​
 +)
 +
 +func main() {
 + var ordineFinale string = "hai ordinato"​
 + const MENU = "menu del giorno:​\n"​ +
 + "a. pizza\n"​ +
 + "b. penne al pomodoro\n"​ +
 + "c. cotoletta e patatine\n"​ +
 + "d. crostata e caffè"​
 + fmt.Println(MENU)
 +
 + fmt.Println("​ordinazione?​ schiacciare f e dare l'​invio per terminare l'​ordinazione"​)
 +
 + var scelta rune
 + for scelta != '​f'​ {
 + fmt.Scanf("​%c",​ &​scelta)
 +        ​
 +        // sarebbe più pulito con un unico switch?
 + if unicode.IsSpace(scelta) {
 + continue ​ // dove va? salta il resto di QUESTA iterazione
 + } else if scelta == '​f'​ {
 + break
 + } else if '​a'​ <= scelta && scelta <= '​d'​ {
 + var ordinazione string
 + switch scelta {
 + case '​a':​
 + ordinazione = "​pizza"​
 + case '​b':​
 + ordinazione = "penne al pomodoro"​
 + case '​c':​
 + ordinazione = "​cotoletta e patatine"​
 + case '​d':​
 + ordinazione = "​crostata e caffè"​
 + }
 + ordineFinale += ", " + ordinazione
 + } else {
 + fmt.Println(string(scelta),​ "non è valido e non è stato considerato"​)
 + }
 + }
 +
 + if ordineFinale == "hai ordinato"​ {
 + fmt.Println("​Non hai ordinato nulla"​)
 + } else {
 + fmt.Println(ordineFinale)
 + }
 +}
 +```
 +
 +
 +### Es.2
 +
 +
 +```go
 +/*
 + * Scrivi una funzione operazioni(n1,​ n2 int) (int, int, int) che
 + * accetta due interi e restituisce somma, prodotto e differenza.
 + * Scrivine una versione con variabili di ritorno nominate e una senza.
 + * Scrivi un main per invocare e testare la funzione.
 + * Il programma legge da standard input due int.
 + */
 +package main
 +
 +import "​fmt"​
 +
 +func main() {
 + fmt.Println(operazioni(4,​ 5)) // primo test "​hardcoded"​
 +}
 +
 +// è giusto mettere la funzione qui?
 +func operazioni(n1,​ n2 int) (int, int, int) {
 + somma := n1 + n2
 + prodotto := n1 * n2
 + differenza := n1 - n2
 + return somma, prodotto, differenza
 +}
 +```
 +
 +
 +
 +### Es. 3
 +
 +```go
 +/*
 +Vogliamo scrivere una funzione ​
 + giorniInMese(mese int) int
 +che, dato come parametro il numero corrispondente a un mese, restituisce il numero di giorni di quel mese (28 per febbraio).
 +*/
 +
 +```
 +
 +
 +
 +## Es. 5
 +
 +(da uno studente)
 +
 +```go
 +package main
 +
 +import (
 +    "​fmt"​
 +)
 +
 +func findVowel(s string) {
 +    for _, c := range s {
 +        if isVowel(c) {
 +            fmt.Println(string(c))
 +            return
 +        }
 +    }
 +    fmt.Println("​la parola non contiene vocali"​) // meglio non stampare da dentro una funzione, salvo esplicitamente richiesto dale specifiche
 +}
 +
 +func isVowel(c rune) bool {
 +    switch c {
 +        case '​a',​ '​e',​ '​i',​ '​o',​ '​u':​ return true
 +        default: return false
 +    }
 +}
 +
 +func main() {
 +    const K = 5
 +    var parola string
 +    for i := 0; i < K; i++ {
 +        fmt.Scan(&​parola)
 +        findVowel(parola)
 +    }
 +}
 +```
pub/labprog/2020-11-12.txt · Last modified: 2020/11/12 17:46 by atrent
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0