multiplication-table/main.go

76 lines
1.3 KiB
Go

package main
import (
"encoding/csv"
"fmt"
"log"
"os"
"strconv"
)
func main() {
fmt.Println("Enter Number:")
var number int
_, err := fmt.Scanf("%d", &number)
if err != nil {
log.Fatal(err)
}
matrice := make([][]int, number+1)
for i := 0; i <= number; i++ {
matrice[i] = make([]int, number+1)
for j := 0; j <= number; j++ {
matrice[i][j] = (j * i) % number
}
}
// Save it
if err := csvExport(matrice); err != nil {
log.Fatal(err)
}
// output it
fmt.Print("\t")
for i := 0; i <= number; i++ {
fmt.Print(i, "\t")
}
fmt.Println()
for rownumber, row := range matrice {
fmt.Print(rownumber, "\t")
for _, col := range row {
fmt.Print(col, "\t")
}
fmt.Println()
}
}
func csvExport(data [][]int) error {
file, err := os.Create("result.csv")
if err != nil {
return err
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
//Prepare
dataStrings := make([][]string, len(data))
for in := range data {
dataStrings[in] = make([]string, len(data[in]))
for in2, val2 := range data[in] {
dataStrings[in][in2] = strconv.Itoa(val2)
}
}
for _, value := range dataStrings {
if err := writer.Write(value); err != nil {
return err // let's return errors if necessary, rather than having a one-size-fits-all error handler
}
}
return nil
}