User Tools

Site Tools


pub:labprog:2020-11-12

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