Advertisement
ogrezem

sets.go

Mar 5th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 4.65 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "strconv"
  6.     "strings"
  7.     "regexp"
  8. )
  9.  
  10. const (
  11.     isDebug bool = false
  12. )
  13.  
  14. var (
  15.     notations = map[int]bool {
  16.         2 : true,
  17.         10 : true,
  18.     }
  19. )
  20.  
  21. func main(){
  22.     var num int
  23.     /*
  24.     fmt.Print("Введите число входных переменных: ")
  25.     fmt.Scanf("%d", &num)
  26.     MakeTable(num)
  27.     fmt.Printf("Кол-во наборов: %d", NaturStepen(2, num))
  28.     bufio.NewReader(os.Stdin).ReadBytes('\n')
  29.     //fmt.Println()
  30.     */
  31.     start:
  32.     for {
  33.         fmt.Print("Введите число входных переменных: ")
  34.         fmt.Scanf("%d\n", &num)
  35.         //fmt.Println("Первый шаг: " + strconv.Itoa(num))////
  36.         var amountSets int = NaturStepen(2, num)
  37.         sets := make(map[string]int)
  38.         // Убрать!!!
  39.         for i := 0; i < amountSets; i++ {
  40.             sets[IntToBinaryWithSize(num, i)] = 0
  41.         }
  42.         if isDebug {
  43.             fmt.Println(sets)
  44.         }
  45.         var notation int
  46.         for {
  47.             fmt.Print("В какой системе счисления собираетесь выбирать наборы? ")
  48.             fmt.Scanf("%d\n", &notation)
  49.             if !notations[notation] {
  50.                 fmt.Println("Вы не можете выбрирать наборы в этой системе счисления. Попробуйте ещё раз.")
  51.                 continue
  52.             } else {
  53.                 break
  54.             }
  55.         }
  56.         for {
  57.             var selectedSet string
  58.             fmt.Print("Напишите номер набора, который хотите просмотреть: ")
  59.             fmt.Scanf("%s\n", &selectedSet)
  60.             //fmt.Println("Второй шаг: " + selectedSet)//////
  61.             var intSelectedSet int
  62.             if selectedSet == "exit" {
  63.                 break
  64.             } else {
  65.                 hasLiterals, err := regexp.MatchString(`[a-z]|[A-Z]|\.|\,+`, selectedSet)
  66.                 if err != nil {
  67.                     panic(err)
  68.                 } else if hasLiterals {
  69.                     fmt.Println("Ошибка. Можно вводить только числа!")
  70.                     continue
  71.                 } else {
  72.                     fmt.Println("Выбранный набор: " + selectedSet)
  73.                     if notation == 10 {
  74.                         intSelectedSet, err = strconv.Atoi(selectedSet)
  75.                         if err != nil {
  76.                             panic(err)
  77.                         } else if intSelectedSet >= amountSets {
  78.                             fmt.Println("Такого набора нет в заданной коллекции наборов")
  79.                             continue
  80.                         }
  81.                     } else if notation == 2 {
  82.                         if len(selectedSet) > num {
  83.                             fmt.Println("Такого набора нет в заданной коллекции наборов")
  84.                             continue
  85.                         } else if len(selectedSet) < num {
  86.                             selectedSet = ConvertToSize(num, selectedSet)
  87.                         }
  88.                     }
  89.                 }
  90.             }
  91.             var binarySeenSet string
  92.             if notation == 10 {
  93.                 binarySeenSet = IntToBinaryWithSize(num, intSelectedSet)
  94.             } else if notation == 2 {
  95.                 binarySeenSet = selectedSet
  96.             }
  97.             fmt.Print("Набор: ", binarySeenSet, ". Задайте значение функции при данном наборе, введя 0 или 1.",
  98.                 "\nЕсли вы уже определились со значениями на каждом из наборов, то введите exit: ")
  99.             var answer string
  100.             fmt.Scanf("%s\n", &answer)
  101.             fmt.Println("Ваш ответ:", answer)
  102.             if answer == "0" || answer == "1" {
  103.                 sets[binarySeenSet], _ = strconv.Atoi(answer)
  104.                 fmt.Println(binarySeenSet, sets[binarySeenSet])
  105.             } else {
  106.                 fmt.Println("Неверная команда")
  107.             }
  108.         }
  109.         fmt.Println("Я вышел, сука!")
  110.         for key, value := range sets {
  111.             fmt.Println(key, value)
  112.         }
  113.         var answer string
  114.         fmt.Print("Вы хотите составить ещё таблицу? ")
  115.         for {
  116.             fmt.Scanf("%s", &answer)
  117.             switch answer {
  118.             case "да":
  119.                 goto start
  120.             case "нет":
  121.                 goto exit
  122.             default:
  123.                 fmt.Println("Неверно введена команда. Попробуйте ещё раз: ")
  124.                 continue
  125.             }
  126.         }
  127.     }
  128.     exit:
  129. }
  130.  
  131. func ConvertToSize(neededSize int, lowSizeString string) string {
  132.     if len(lowSizeString) < neededSize {
  133.         var difference int = neededSize - len(lowSizeString)
  134.         return strings.Repeat("0", difference) + lowSizeString
  135.     }
  136.     return lowSizeString
  137. }
  138.  
  139. func IntToBinaryWithSize(neededSize int, number int) string {
  140.     return ConvertToSize(neededSize, strconv.FormatInt(int64(number), 2))
  141. }
  142.  
  143. func PrintTable(num int) {
  144.     var iters int = NaturStepen(2, num)
  145.     for i := 0; i < int(iters); i++ {
  146.         fmt.Printf("%" + "00" + strconv.Itoa(num) + "b\n", i)
  147.     }
  148. }
  149.  
  150. func MakeTable(num int) {
  151.     var iters int = NaturStepen(2, num)
  152.     //numSet := []string{}
  153.     for i := 0; i < int(iters); i++ {
  154.         fmt.Printf("%" + "00" + strconv.Itoa(num) + "b\n", i)
  155.     }
  156. }
  157.  
  158. func NaturStepen(a int, b int) int {
  159.     var result int = 1
  160.     for i := 0; i < b; i++ {
  161.         result *= a
  162.     }
  163.     return result
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement