che aggiorna la mappa dei conteggi (e che deve essere usata dal main);
una funzione
- una funzione
```
func findMaxKey(m map[int]int) int
```
...
...
@@ -190,7 +190,7 @@ nomefile: lunghezze.go
---
### Vocali (mappe)
Scrivere un programma vocali.go che analizza un testo e conta le occorrenze delle vocali (sia minuscole che maiuscole, ma non le accentate) nel testo e stampa, ma solo per le vocali presenti nel testo, il numero di volte che le vocali stesse sono presenti nel testo.
Scrivere un programma `vocali.go` che analizza un testo e conta le occorrenze delle vocali (sia minuscole che maiuscole, ma non le accentate) nel testo e stampa, ma solo per le vocali presenti nel testo, il numero di volte che le vocali stesse sono presenti nel testo.
In particolare il programma è dotato di:
- una funzione
...
...
@@ -243,8 +243,10 @@ nomefile: vocali.go
nomefile: vocali_bis.go
---
### Anagrammi (volendo mappe, ma anche slice)
Scrivere un programma anagrammi.go che legge due stringhe da linea di comando e valuta se le due stringhe sono una l'anagramma dell'altra (la seconda stringa è formata da una permutazione dei caratteri della prima)
Scrivere un programma `anagrammi.go` che legge due stringhe da linea di comando e valuta se le due stringhe sono una l'anagramma dell'altra (la seconda stringa è formata da una permutazione dei caratteri della prima)
In particolare il programma è dotato di:
...
...
@@ -266,14 +268,16 @@ NB: **che caratteristiche ha un anagramma?**
C'è in Go una struttura di dati (array, struct, slice, map) che
si presta a rappresentare i dati di una stringa s1 che servono
ad individuare se è un anagramma di un'altra stringa s2?
Se sì, quale e coma la uso? Se no, come imposto la soluzione?
Se sì, quale e come la uso? Se no, come imposto la soluzione?
In assenza di esattamente due parametri sulla linea di comando il programma stampa: `input errato`
nomefile: anagrammi.go
---
### NumToText (mappe)
Scrivere un programma num2text.go per convertire un numero intero non negativo nella sequenza delle parole corrispondenti alle sue cifre.
Scrivere un programma `num2text.go` per convertire un numero intero non negativo nella sequenza delle parole corrispondenti alle sue cifre.
Il programma legge un intero non negativo da standard input, per ogni nuova (non incontrata finora) cifra del numero chiede il nome corrispondente (e alimenta un dizionario), e infine stampa la sequenza delle parole corrispondenti alle sue cifre.
...
...
@@ -293,12 +297,14 @@ sei - due - due
nomefile: num2text.go
---
### Capoluoghi (mappe)
Scrivere un programma capoluoghi.go che legge da standard input (usate la ridirezione dal file [capoluoghi](Lab08/capoluoghi.csv)) una serie di informazioni sui capoluoghi organizzate su righe, nel seguente formato:
Scrivere un programma `capoluoghi.go` che legge da standard input (usate la ridirezione dal file [capoluoghi](Lab08/capoluoghi.csv)) una serie di informazioni sui capoluoghi di provincia organizzate su righe, nel seguente formato:
e memorizza Nome, Sigla, Regione, Superficie in modo sia possibile ottenere la stampa delle informazioni relative a capoluoghi, le cui sigle sono state passate da linea di comando.
e memorizza Nome, Sigla, Regione, Superficie in modo sia possibile ottenere la stampa delle informazioni relative a capoluoghi di provincia, le cui sigle sono state passate da linea di comando.
Nome, Sigla, Regione sono stringhe; Popolazione,Superficie, Densità, Altitudine sono sempre int.
...
...
@@ -316,8 +322,10 @@ $ ./capoluoghi MI < capoluoghi.csv
nomefile: capoluoghi.go
---
### Regioni (mappe)
Scrivere un programma regioni.go che che legge da standard input (usate la ridirezione dal file [capoluoghi](Lab08/capoluoghi.csv)) una serie di informazioni sui capoluoghi di provincia organizzate su righe, nel seguente formato:
Scrivere un programma `regioni.go` che che legge da standard input (usate la ridirezione dal file [capoluoghi](Lab08/capoluoghi.csv)) una serie di informazioni sui capoluoghi di provincia organizzate su righe, nel seguente formato:
@@ -326,7 +334,7 @@ e memorizza nome e regione in modo che sia possibile ottenere la stampa della li
nomefile: regioni.go
### Posizioni parole (mappe)
Scrivere un programma posizioni_parole.go che legge una sequenza di stringhe da standard input e produce su standard output, per ogni stringa, la lista delle posizioni in cui essa compare nella sequenza (partendo dalla posizione 0).
Scrivere un programma `posizioni_parole.go` che legge una sequenza di stringhe da standard input e produce su standard output, per ogni stringa, la lista delle posizioni in cui essa compare nella sequenza (partendo dalla posizione 0).
Nota: per terminare l’input da tastiera, premere invio e la combinazione di tasti Ctrl D, che corrisponde a EOF (end of file) per lo standard input.
In caso di dubbi su come gestire la fine dell’input nel programma, consultare la documentazione della funzione Scan, funzione che, oltre a salvare i valori letti, restituisce dei valori.
Creare un programma stack.go che gestisca uno stack (pila)
Creare un programma `stack.go` che gestisca uno *stack* (pila)
generico (numero arbitrario di posizioni) di valori float
Lo stack e` una struttura dati con le seguenti caratteristiche:
- mantiene nella prima posizione (detta testa) il valore piu' recente
- e` possibile accedere sempre e solo alla sua testa
Lo stack è una struttura dati con le seguenti caratteristiche:
- mantiene nella prima posizione (detta testa) il valore più recente
- è possibile accedere sempre e solo alla sua testa
Le operazioni disponibili sullo stack sono:
- push: aggiunge un valore in testa allo stack
- pop: rimuove il valore in testa allo stack e lo restituisce
- top (o peek): restituisce il valore in testa allo stack senza rimuoverlo
- empty: restituisce vero se lo stack e` vuoto, falso altrimenti
- empty: restituisce vero se lo stack è vuoto, falso altrimenti
Per ciascuna operazione creare una funzione, usando
nomi maiuscoli (Push, Pop, ...).
...
...
@@ -437,12 +445,8 @@ nomefile: stack.go
Creare una dir stack in cui spostare la versione 3 del programma `stack.go`, di cui dovete commentare la funzione main().
Creare nella stessa dir (stack) un programma RPN.go
e (con il comando go mod init RPN) un file go.mod con il seguente contenuto:
module RPN
go 1.17
Creare nella stessa dir (stack) un programma `RPN.go`
e (con il comando go mod init RPN) un file go.mod
Per compilare il tutto dovrete dare (nella dir stack) il comando
```
...
...
@@ -509,8 +513,10 @@ l'asterisco va messo tra apici ('*') o tra virgolette ("*").
nomefile: RPN.go
---
### Progetto Black Jack (slice)
Riprendere il progetto del Black Jack, dove una carta
Riprendere il progetto del Black Jack (`blackjack.go`), dove una carta
era una struct con i campi seme (string) e valore (string).
Definire una funzione main() per testare man mano le funzioni
...
...
@@ -536,10 +542,11 @@ Utilizzare come mazzo due mazzi da poker.
nomefile: blackjack.go
---
## Esercizi supplementari
### Stats temperature (ripasso slice)
Scrivere un programma temperature.go che legge delle temperature (int) da tastiera e termina quando il valore letto è 999.
Scrivere un programma `temperature.go` che legge delle temperature (int) da tastiera e termina quando il valore letto è 999.
Il programma deve stampare:
- la media
...
...
@@ -555,7 +562,7 @@ Nota 2: Utilizzare la funzione `Ints(a []int)` del pacchetto `sort` per ordinare
nomefile: temperature.go
### Appello (ripasso slice)
Scrivere un programma appello.go che legge da linea di comando una sequenza di nomi e li stampa in ordine alfabetico.
Scrivere un programma `appello.go` che legge da linea di comando una sequenza di nomi e li stampa in ordine alfabetico.
#### Esempio
```
...
...
@@ -567,7 +574,7 @@ Nota: Utilizzare la funzione `Strings(a []string)` del pacchetto `sort` per ordi
nomefile: appello.go
### Galleggianti (sfida per i più arditi)
Scrivete un programma galleggianti.go che legga da standard input due interi r, c, seguiti da una matrice di r righe e c colonne contenente lettere maiuscole e asterischi, e che stampi in output la matrice che si ottiene da quella in input mandando verso il basso le lettere e facendo "galleggiare" gli asterischi, cioè mandandoli verso l'alto.
Scrivete un programma `galleggianti.go` che legga da standard input due interi r, c, seguiti da una matrice di r righe e c colonne contenente lettere maiuscole e asterischi, e che stampi in output la matrice che si ottiene da quella in input mandando verso il basso le lettere e facendo "galleggiare" gli asterischi, cioè mandandoli verso l'alto.
Fornire in input una riga della matrice alla volta, e sfruttare la funzione `strings.Split(s, " ")` (vedi documentazione) per popolare le righe della matrice.
Si assuma che ogni riga di input contenga esattamente c caratteri, separati da spazi (non sono richiesti controlli in tal senso).