Skip to content
Snippets Groups Projects
Unverified Commit 22658c87 authored by Andrea Trentini's avatar Andrea Trentini
Browse files

alcune soluzioni lab03

parent caab2c86
Branches
No related tags found
No related merge requests found
Showing
with 438 additions and 0 deletions
package main
import "fmt"
func main() {
//leggi K numeri e di ciascuno stampa il doppio
const K = 5
var n, doppio int
for i := 1; i <= K; i++ {
fmt.Print("un numero: ")
fmt.Scan(&n)
doppio = n * 2
fmt.Println(doppio)
}
}
/*
Scrivere un programma 05_somma.go che genera 10 numeri interi casuali
tra 0 e 10, li stampa, e stampa la somma dei valori generati.
*/
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
const MAX = 10
rand.Seed(time.Now().Unix())
sum := 0
for i := 0; i < 10; i++ {
num := rand.Intn(MAX + 1)
fmt.Println(num)
sum += num
}
fmt.Println("la somma è", sum)
}
//legge un numero n e stampa la tabellina di n (cioè n*1, n*2, ..., n*10)
package main
import "fmt"
func main() {
var n int
fmt.Print("un numero: ")
fmt.Scan(&n)
for i := 1; i <= 10; i++ {
fmt.Print(n*i, " ")
}
fmt.Println()
}
package main
import "fmt"
func main() {
//Scrivere qui le specifiche per questo programma e caricarlo su upload
/*
Legge un numero n e stampa n asterischi (stampa 1 asterisco n volte)
*/
var n int
fmt.Print("un numero: ")
fmt.Scan(&n)
for i := 1; i <= n; i++ {
fmt.Print("*")
}
fmt.Println()
}
package main
import "fmt"
func main() {
/*
Scrivere qui le specifiche per questo programma
Sostituire il nome della variabile s con un nome più significativo
Caricare il programma su upload
legge K = 5 numeri e stampa la loro somma
s -> somma
*/
const K = 5
var n int
s := 0
for i := 1; i <= K; i++ {
fmt.Print("un numero: ")
fmt.Scan(&n)
s = s + n
}
fmt.Println(s)
}
package main
import "fmt"
func main() {
/*
Scrivere qui le specifiche per questo programma e caricare il file su upload
*/
var n int
fmt.Print("un numero: ")
fmt.Scan(&n)
for i := 0; i <= n; i = i + 2 {
fmt.Print(i, " ")
}
fmt.Println()
}
/*
Scrivere un programma andamento.go che legge da tastiera
una serie (di almeno un elemento) di numeri > -1 e stampa "+" ogni volta che il nuovo valore
e` maggiore o uguale al precedente e "-" altrimenti.
Si ferma quando il numero in input e` -1 e stampa la somma di tutti i numeri letti (escluso -1).
Esempio
-------
go run andamento.go
2 4 7 3 9 1 5 -1
++-+-+
somma: 31
*/
package main
import "fmt"
func main() {
var previous, current, sum int
fmt.Scan(&current)
for {
sum += current
previous = current
fmt.Scan(&current)
if current == -1 {
break
}
if current >= previous {
fmt.Print("+")
} else {
fmt.Print("-")
}
}
fmt.Println()
fmt.Println("somma:", sum)
}
/*
Scrivere un programma bin2ten.go che converte un intero, letto da standard
input e composto di soli 0 ed 1, nel corrispondente valore "binario" (es. 101 -> 5).
Nel caso il numero contenga altre cifre, il programma stampa un messaggio di errore.
*/
package main
import (
"fmt"
)
func main() {
var binario int
fmt.Print("un numero binario: ")
fmt.Scan(&binario)
potenzaDi2 := 1
value := 0
for binario != 0 {
bit := binario % 10
if bit == 1 {
value += potenzaDi2
} else if bit != 0 {
fmt.Println("dato non valido")
return
}
potenzaDi2 *= 2
binario /= 10
}
fmt.Println(value)
}
/*
Scrivere un programma cifra_pari.go che, dato un intero da standard input,
determina e stampa in che posizione (procedendo da destra a sinistra, 1 per le prima posizione) si trova la prima cifra pari del numero.
Se il numero non contiene cifre pari, il programma stampa -1.
*/
package main
import "fmt"
func main() {
var num, cifra int
fmt.Print("un numero intero positivo: ")
fmt.Scan(&num)
pos := 1
posPari := -1
for num != 0 {
cifra = num % 10
if cifra%2 == 0 {
posPari = pos
break
}
num /= 10
pos++
}
fmt.Print("la prima cifra pari (", cifra, ") è in posizione ", posPari, "\n")
}
/*
Scrivere un programma differenze.go che legge una serie di
valori da tastiera e stampa le differenze, cioe` la differenza
tra il secondo e il primo, tra il terzo e il secondo, e cosi' via.
Il programma termina con input = 0.
*/
package main
import (
"fmt"
)
func main() {
var prev, next float64
fmt.Print("scrivi un numero ")
fmt.Scan(&next)
for next != 0 {
prev = next
fmt.Print("scrivi un numero ")
fmt.Scan(&next)
fmt.Println("diff = ", next-prev)
}
}
/*
1. Scrivere un programma euclide.go che, dati due interi a, e b, con a >= b, calcola il MCD tra i due numeri con l'algoritmo di Euclide:
Algoritmo di Euclide:
Dati due numeri naturali a e b,
1. si controlla se b e` zero.
2. se lo è, a è il MCD.
3. se non lo è, si assegna ad r il resto della divisione a / b, si assegna a = b e b = r e si ripete da 1.
*/
package main
import "fmt"
func main() {
var a, b, r int
fmt.Print("due numeri di cui vuoi il MCD: ")
fmt.Scan(&a, &b)
if a < b {
a, b = b, a
}
p := a
q := b
for q != 0 {
r = p % q
p, q = q, r
}
MCD := p
fmt.Println("il MCD tra", a, "e", b, "è", MCD)
}
/*
Scrivere un programma indovina_numero.go che chiede all'utente di indovinare
un numero random x tra 1 e MAX, (dove MAX e` una costante definita nel programma)
e ripete la richiesta fino a che l'utente indovina, oppure effettua MAX/2 tentativi.
Il programma stampa il numero di tentativi che sono stati necessari per indovinare
oppure il messaggio "hai perso, il numero era x".
Se il numero digitato dall'utente è fuori dall'intervallo [1,MAX],
il tentativo non viene considerato e viene visualizzato il messaggio "n. fuori intervallo!",
senza interrompere l'esecuzione.
Utilizzare la funzione rand.Intn del package "math/rand" per fissare il numero da indovinare.
*/
package main
import (
"fmt"
"math/rand"
"time"
)
const MAX = 10
func main() {
rand.Seed(time.Now().Unix())
var count, guess int
numToGuess := rand.Intn(MAX) + 1
stop := MAX / 2
for count = 1; count <= stop; count++ {
fmt.Print("indovina il numero: ")
fmt.Scan(&guess)
if guess < 1 || guess > MAX {
count--
fmt.Println("n. fuori intervallo")
} else if guess == numToGuess {
fmt.Println("hai indovinato! N. di tentativi:", count)
break
}
}
if count > stop {
fmt.Println("hai perso, il numero era", numToGuess)
}
}
/*
Scrivere un programma massimo.go che genera 10 numeri interi casuali
tra 10 e 30, li stampa, e stampa il massimo valore generato.
*/
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
const (
MAX = 30
MIN = 10
)
rand.Seed(time.Now().Unix())
max := MIN
for i := 0; i < 10; i++ {
num := rand.Intn(MAX-MIN+1) + MIN
fmt.Println(num)
if num > max {
max = num
}
}
fmt.Println("il massimo è", max)
}
/*
Scrivere un programma primo.go che, dato un numero intero su standard input,
determina se il numero e` primo.
Suggerimento: occorre determinare il primo numero che e` un divisore (se c'è).
*/
package main
import (
"fmt"
"math"
)
func main() {
var n, div int
isPrime := true
fmt.Print("un numero: ")
fmt.Scan(&n)
stop := int(math.Sqrt(float64(n)))
for div = 2; div <= stop; div++ {
if n%div == 0 {
isPrime = false
break
}
}
if isPrime {
fmt.Println(n, "è primo")
} else {
fmt.Println(n, "è divisibile per", div)
}
}
/*
Scrivere un programma somma_cifre.go che calcola la somma delle cifre
di un numero intero positivo fornito da standard input.
*/
package main
import "fmt"
func main() {
var num int
fmt.Print("un numero intero positivo: ")
fmt.Scan(&num)
quoto := num
sommaCifre := 0
for quoto != 0 {
sommaCifre += quoto % 10
quoto /= 10
}
fmt.Println("la somma delle cifre di", num, "è", sommaCifre)
}
/*
Scrivere un programma vicino.go che, data su standard input
una serie di 5 valori tra 0 e 20, trova il valore piu' vicino a TARGET,
dove TARGET e` una costante definita nel programma.
*/
package main
import (
"fmt"
"math"
)
const (
TARGET = 8
COUNT = 5
)
func main() {
var n, closest int
fmt.Print("scrivi ", COUNT, " valori tra 0 e 20: ")
fmt.Scan(&n)
closest = n
for i := 2; i <= COUNT; i++ {
fmt.Scan(&n)
if math.Abs(float64(TARGET-n)) < math.Abs(float64(TARGET-closest)) {
closest = n
}
}
fmt.Print("il valore più vicino al target (", TARGET, ") è ", closest, "\n")
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment