- Molte volte nel testo dell'esercizio si specificano dei vincoli sull'input. Occorre verificarne sempre la veridicità. Nel caso in cui l'input inserito non rispetti il vincolo, stampare un messaggio di errore e chiederne il reinserimento, fino a quando non viene fornito un input valido. Ad esempio, se il programma \texttt{pippo.go} attende in input un numero pari, un possibile scenario potrebbe essere il seguente:
```console
$./pippo
Inserire un numero n pari:
3
Numero non valido
Inserire un numero n pari:
5
Numero non valido
Inserire un numero n pari:
2
```
## Esercizio 1 (exp.go)
Dati due interi *n* e *b* in input, verificare se esiste un intero *e*>0 tale per cui vale la seguente formula: $n=b^{e}$.
Se esiste, stampare a schermo il valore *e*, altrimenti stampare un messaggio di errore.
if(b!= 1) { //controllo che b non sia 1 in modo da evitare un ciclo infinito
forpotenza<n{
//for{
potenza*=b
e++
//if...break//moltomenobello
}
}
ifpotenza==n{
fmt.Print("n: ",n," è uguale a: ",b,"^",e,"\n")
}else{
fmt.Print("non esiste una e intera tale che: ",b,"^e = ",n,"\n")
}
}
}
```
## Esercizio 2 (dario.go)
Dario, che frequenta la prima elementare, non ha ancora imparato a eseguire le sottrazioni. Infatti, quando deve decrementare un numero, esegue la seguente mossa:
+ se l'ultima cifra del numero da decrementare **non** è zero, allora viene decrementata correttamente. Ad esempio, se il numero è 123, diventa 122.
+ se l'ultima cifra è zero, allora viene eliminata. Ad esempio, 120 diventa 12.
Dato in input un intero *n*>1 e un numero *d*>0, calcolare *(n dariosottrazione d)* usando il metodo appena indicato.
### Esempio di esecuzione
```console
$./dario
612
4
60
```
```console
$./dario
10
2
-2
```
*Nota*: i passaggi che sono stati eseguiti sono i seguenti:
<center>612 -> 611 -> 610 -> 61 -> 60</center>
### Una possibile soluzione
```
packagemain
import"fmt"
funcmain(){
varn,dint
fmt.Println("Inserisci n")
fmt.Scan(&n)
fmt.Println("Inserisci d")
fmt.Scan(&d)
ifn>1&&d>0{
fori:=0;i<d;i++{
if(n%10==0&&n!=0) {
fmt.Println(n/10)
n=n/10
}else{
fmt.Println(n-1)
n=n-1
}
}
}else{
fmt.Println("Valori non validi")
}
}
```
## Esercizio 3 (vocali.go)
Data una stringa in input, contare quante vocali sono contenute in essa.
*Cosa succede se la stringa non fosse di soli caratteri minuscoli? Cercate una funzione adeguata all'interno del modulo "strings" per non dover eseguire 10 controlli differenti*
Dato un intero *h*>0 in input, stampare a schermo una piramide di asterischi avente altezza *h*.
### Esempio di esecuzione
```console
$./pir1
4
*
**
***
****
```
### Ipotesi soluzione
```
packagemain
import"fmt"
funcmain(){
varhint
fmt.Scan(&h)
fori:=1;i<=h;i++{
foru:=1;u<=i;u++{
fmt.Print("*")
}
fmt.Println()
}
}
```
```
packagemain
import"fmt"
funcmain(){
varnint
varsstring
s="*"
fmt.Println("Inserire altezza")
fmt.Scan(&n)
fori:=0;i<n;i++{
fmt.Println(s)
s+="*"
}
}
```
## Esercizio 5 (pir2.go)
Dato un intero *h*>0 in input, stampare a schermo una piramide di altezza *h* composta unicamente da linee aventi un numero dispari crescente di asterischi.
### Esempio di esecuzione
```console
$./pir2
4
*
***
*****
*******
```
## Esercizio 6 (pir3.go)
Dato un intero *h* in input, stampare a schermo una piramide di altezza *h* composta unicamente da linee aventi un numero dispari crescente di asterischi.
*Nota* che se *h* è 0, la priamide non possiede alcun asterisco. Invece, se *h* è negativo, la piramide risulta "rovesciata"