Università Statale di Milano - Dipartimento di Informatica: 8a lezione sul Linguaggio GO (Golang)


Esercizio n. 1: Cambiare le vocali in una frase

Scrivete un programma che legga una serie di righe in input. Dopo aver letto ogni riga, il programma la stampa sostituendo tutte le vocali con delle “u”. Il programma si deve fermare quando viene inserita la riga vuota, stampando la stringa: “Riga vuota, termino”.
Suggerimento
Utilizzate una funzione che accetti un carattere e lo restituisca trasformato opportunamente.
Tale funzione avrà segnatura:

func modificaCarattere(ch rune) rune
Esempio di funzionamento (in carattere grassetto le linee inserite dall’utente):
> go run garibaldi.go

Inserisci le righe:

mamma mia
mummu muu
bella aiuola
bullu uuuulu
Garibaldi fu ferito
Gurubuldu fu furutu

Soluzione esercizio n.1
package main

import (
"bufio"
"fmt"
"os"
"strings"
)

func main() {
        fmt.Println("Inserisci la frase: ")
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
riga := scanner.Text()
if riga != "" {
fmt.Println(modificaRiga(riga))
} else {
fmt.Println("Riga vuota, termino.")
break
}
}
}

func modificaCarattere(ch rune) rune {
if strings.ContainsRune("aeiouàèìòùúóíáé", ch) {
return 'u'
}
return ch
}

func modificaRiga(riga string) (garibaldi string) {
rigaInRune := []rune(riga)
for _, ch := range rigaInRune {
garibaldi = garibaldi + string(modificaCarattere(ch))
}
return

Esercizio 2 - Confronti
Scrivete un programma che chieda all’utente di inserire due numeri interi e stampi, utilizzando l’istruzione di selezione if{…}else{…}, un messaggio che spieghi quale delle seguenti asserzioni è vera:
• il primo numero è uguale al secondo;
• il primo numero è diverso dal secondo;
• il primo numero è minore del secondo;
• il primo numero divide esattamente il secondo;
• il primo numero è zero;
• il primo numero è un multiplo di tre.
• la cifra delle unità del primo numero è uguale alla cifra delle unità del secondo numero.

Soluzione esercizio n. 2
package main

import (
"fmt"
"math"
"strconv"
)

func main() {
var x, y int
var num1, num2 string
var msg string

x, y = leggi()
if x == y {
msg += "Il primo numero è uguale al secondo\n"
} else {
msg += "Il primo numero è diverso dal secondo\n"
}
if x < y {
msg += "Il primo numero è minore del secondo\n"
}
if math.Mod(float64(y),float64(x)) == 0 {
msg += "Il primo numero divide esattamente il secondo\n"
}
if x == 0 {
msg += "Il primo numero è zero\n"
} else if math.Mod(float64(x),3) == 0 {
msg += "Il primo numero è un multiplo di 3\n"
}

  num1 = strconv.Itoa(x)
num2 = strconv.Itoa(y)

if num1[len(num1)-1] == num2[len(num2)-1] {
msg += "La cifra delle unità del primo numero è uguale alla cifra delle unità del secondo numero"
}

stampa(msg)

}

func leggi() (x int, y int) {
fmt.Println("Inserire due numeri interi:")
fmt.Scan(&x,&y)
return x,y
}

func stampa(m string) {
fmt.Println(m)
return
}

Commenti