diff --git a/golang/labs/lab4/lab4.go b/golang/labs/lab4/lab4.go index 630d8763..ea7d6f8f 100644 --- a/golang/labs/lab4/lab4.go +++ b/golang/labs/lab4/lab4.go @@ -14,7 +14,7 @@ func calculate (b, x float64) float64 { } -func compliteTaskA (b, xbegin, xend, xdelta float64) []float64 { +func CompliteTaskA (b, xbegin, xend, xdelta float64) []float64 { var ys []float64 for x := xbegin; x < xend; x += xdelta { ys = append(ys, calculate(b, x)) @@ -22,7 +22,7 @@ func compliteTaskA (b, xbegin, xend, xdelta float64) []float64 { return ys } -func compliteTaskB (b float64, xs []float64) []float64 { +func CompliteTaskB (b float64, xs []float64) []float64 { var ys []float64 for _, x := range xs { ys = append(ys, calculate(b, x)) @@ -36,8 +36,8 @@ func AnsLab4 () { var xend float64 = 3.28 var xdelta float64 = 0.4 var xs []float64 = []float64{1.1, 2.4, 3.6, 1.7, 3.9} - var for_a = compliteTaskA(b, xbegin, xend, xdelta) - var for_b = compliteTaskB(b, xs) + var for_a = CompliteTaskA(b, xbegin, xend, xdelta) + var for_b = CompliteTaskB(b, xs) fmt.Println("Решение задания А:") for i, y := range for_a { diff --git a/golang/labs/lab5/lab5.go b/golang/labs/lab5/lab5.go new file mode 100644 index 00000000..b5daec25 --- /dev/null +++ b/golang/labs/lab5/lab5.go @@ -0,0 +1 @@ +package lab4_test \ No newline at end of file diff --git a/golang/labs/lab7/main.go b/golang/labs/lab7/main.go index 037c8107..206d35b6 100644 --- a/golang/labs/lab7/main.go +++ b/golang/labs/lab7/main.go @@ -2,7 +2,7 @@ package lab7 import "fmt" -func AnsLab() { +func AnsLab7() { var product1 car = car{"Тойота Камри 2021", 1450000, 4, "Легковые машины"} var product2 motorbike = motorbike{"ElectroTown Citycoco X7 2000W PRO", 94500, 10, "Электромотоциклы"} var product3 tire = tire{"Зимняя резина", 5000, 0, "Шины для машин"} diff --git a/golang/labs/lab8/createFile.go b/golang/labs/lab8/createFile.go new file mode 100644 index 00000000..e07b8ed1 --- /dev/null +++ b/golang/labs/lab8/createFile.go @@ -0,0 +1,37 @@ +package lab8 + +import ( + "fmt" + "os" +) + +func createFile(str string) (int) { + file, err := os.Create(str) + if err != nil { + fmt.Println("Не удалось создать файл, ошибка: ", err) + return 0 + } + fmt.Print("Файл успешно создан\n") + defer file.Close() + return 1 +} + +func create() { + var str string + + fmt.Print("Ведите название файла: ") + fmt.Scan(&str) + num := createFile(str) + if num == 1 { + var openChoose string + fmt.Print("Желаете записать в этот файл что-нибудь?\nДа/нет ") + fmt.Scan(&openChoose) + if openChoose == "Да" { + file, _ := os.OpenFile(str, os.O_RDWR, 0666) + defer file.Close() + writeToFile(file) + } else { + fmt.Print("\n") + } + } +} \ No newline at end of file diff --git a/golang/labs/lab8/lab8.go b/golang/labs/lab8/lab8.go new file mode 100644 index 00000000..c01d2831 --- /dev/null +++ b/golang/labs/lab8/lab8.go @@ -0,0 +1,9 @@ +package lab8 + +func AnsTask1 () { + ansTask1() +} + +func AnsTask2 () { + ansTask2() +} \ No newline at end of file diff --git a/golang/labs/lab8/numbersFromLab4 b/golang/labs/lab8/numbersFromLab4 new file mode 100644 index 00000000..b5ff8194 --- /dev/null +++ b/golang/labs/lab8/numbersFromLab4 @@ -0,0 +1,9 @@ +2.5 +1.28 +3.28 +0.4 +1.1 +2.4 +3.6 +1.7 +3.9 \ No newline at end of file diff --git a/golang/labs/lab8/readFile.go b/golang/labs/lab8/readFile.go new file mode 100644 index 00000000..d0616644 --- /dev/null +++ b/golang/labs/lab8/readFile.go @@ -0,0 +1,33 @@ +package lab8 + +import ( + "fmt" + "io" + "os" +) + +func read(str string) { + file, err := os.Open(str) + if err != nil { + fmt.Println(err) + } + defer file.Close() + + data := make([]byte, 64) + + for { + n, err := file.Read(data) + if err == io.EOF { + break + } + fmt.Print(string(data[:n])) + } +} + +func readFile() { + var str string + + fmt.Print("Введите название файла, который надо открыть: ") + fmt.Scan(&str) + read(str) +} \ No newline at end of file diff --git a/golang/labs/lab8/search.go b/golang/labs/lab8/search.go new file mode 100644 index 00000000..ca87057e --- /dev/null +++ b/golang/labs/lab8/search.go @@ -0,0 +1,74 @@ +package lab8 + +import ( + "bufio" + "errors" + "fmt" + "io" + "io/fs" + "os" +) + +func search(file *os.File, search string) { + var searchCopy []rune = []rune(search) + var count int + var countRune int + + reader := bufio.NewReader(file) + + for { + line, err := reader.ReadString('\n') + var lineUse []rune = []rune(line) + if err != nil { + if err == io.EOF { + break + } else { + fmt.Println(err) + return + } + } + + for _, lineRune := range(lineUse) { + for _, searchRune := range(searchCopy) { + if searchRune == lineRune { + countRune++ + if countRune == len([]rune(search)) { + countRune = 0 + count++ + searchCopy = []rune(search) + } else { + searchCopy = append(searchCopy[:0], searchCopy[1:]...) + break + } + } else { + countRune = 0 + } + } + } + } + fmt.Println("Количество найденных слов: ", count) +} + +func searchingTextIntoFile () { + var strFile string + var strSearch string + + + fmt.Print("Введите название файла, в котором будет поиск: ") + fmt.Scanln(&strFile) + file, err := os.OpenFile(strFile, os.O_RDONLY, 0444) + if err != nil { + if errors.Is(err, fs.ErrNotExist) { + fmt.Print("Файла не существует, выбирите другой файл") + } else{ + fmt.Print("Не удалось открыть файл, ошибка:", err) + fmt.Print("\n") + } + } + defer file.Close() + + fmt.Print("Введите искомый текст: ") + fmt.Scanln(&strSearch) + + search(file, strSearch) +} \ No newline at end of file diff --git a/golang/labs/lab8/task1.go b/golang/labs/lab8/task1.go new file mode 100644 index 00000000..15f9222c --- /dev/null +++ b/golang/labs/lab8/task1.go @@ -0,0 +1,69 @@ +package lab8 + +import ( + "fmt" + + "io" + + "os" + + "strconv" + + "isuct.ru/informatics2022/labs/lab4" +) + +func getNumbers() (b, xbegin, xend, xdelta float64, xs []float64) { + file, err := os.OpenFile("labs/lab8/numbersFromLab4", os.O_RDONLY, 0666) + if err != nil{ + fmt.Println(err) + os.Exit(1) + } + defer file.Close() + + data := make([]byte, 1) + var buf []string + var str string + + for{ + _, err := file.Read(data) + if err == io.EOF{ + buf = append(buf, str) + break + } else if string(data) == "\n" { + buf = append(buf, str) + str = "" + continue + } + str += string(data) + } + + b, _ = strconv.ParseFloat(buf[0], 64) + buf = append(buf[:0], buf[1:]...) + xbegin, _ = strconv.ParseFloat(buf[0], 64) + buf = append(buf[:0], buf[1:]...) + xend, _ = strconv.ParseFloat(buf[0], 64) + buf = append(buf[:0], buf[1:]...) + xdelta, _ = strconv.ParseFloat(buf[0], 64) + buf = append(buf[:0], buf[1:]...) + for _, num := range buf { + numfloat, _ := strconv.ParseFloat(num, 64) + xs = append(xs, numfloat) + } + return b, xbegin, xend, xdelta, xs +} + +func ansTask1 () { + b, xbegin, xend, xdelta, xs := getNumbers() + var for_a = lab4.CompliteTaskA(b, xbegin, xend, xdelta) + var for_b = lab4.CompliteTaskB(b, xs) + + fmt.Println("Решение задания А:") + for i, y := range for_a { + fmt.Printf("y%d = %f\n", i+1, y) + } + + fmt.Println("Решение задания B:") + for i, y := range for_b { + fmt.Printf("y%d = %f\n", i+1, y) + } +} \ No newline at end of file diff --git a/golang/labs/lab8/task2.go b/golang/labs/lab8/task2.go new file mode 100644 index 00000000..6705b244 --- /dev/null +++ b/golang/labs/lab8/task2.go @@ -0,0 +1,32 @@ +package lab8 + +import ( + "fmt" +) + +func ansTask2 () { + for { + var mainChoose int = 0 + + fmt.Println("Что вы желаете сделать?") + fmt.Println("1 - Создать файл/пересоздать") + fmt.Println("2 - Записать в файл") + fmt.Println("3 - Вывести файл в консоль") + fmt.Println("4 - Найти текст в файле") + fmt.Println("5 - Выйти из программы") + fmt.Scan(&mainChoose) + + if mainChoose == 1 { + create() + } else if mainChoose == 2 { + write() + } else if mainChoose == 3 { + readFile() + } else if mainChoose == 4 { + searchingTextIntoFile() + } else if mainChoose == 5 { + break + } + fmt.Print("\n") + } +} \ No newline at end of file diff --git a/golang/labs/lab8/writeToFile.go b/golang/labs/lab8/writeToFile.go new file mode 100644 index 00000000..736cfbb2 --- /dev/null +++ b/golang/labs/lab8/writeToFile.go @@ -0,0 +1,58 @@ +package lab8 + +import ( + "errors" + "fmt" + "io/fs" + "os" +) + +func writeToFile (file *os.File) () { + var str string + var strBuf string + fmt.Print("Введите желаемый текст (чтобы прекратить запись введите \"QAWSED\" после пробела): ") + for { + fmt.Scan(&str) + if str == "QAWSED" { + break + }else { + strBuf += " " + str + } + } + _, err := file.WriteString(fmt.Sprint(strBuf[1:], "\n")) + if err != nil { + fmt.Println("Не удалось записать, ошибка: ", err) + return + } + fmt.Print("Запись успешна\n") + return +} + +func ifNotExists (str string) { + var createChoose string + fmt.Print("Файла не существует, желаете создать?\nДа/нет ") + fmt.Scan(&createChoose) + if createChoose == "Да" { + createFile(str) + } else { + fmt.Print("\n") + } +} + +func write() { + var str string + + fmt.Print("Введите название файла, в который хотите записать текст: ") + fmt.Scan(&str) + file, err := os.OpenFile(str, os.O_RDWR, 0666) + if err != nil { + if errors.Is(err, fs.ErrNotExist) { + ifNotExists(str) + } else{ + fmt.Print("Не удалось открыть файл, ошибка: ", err) + fmt.Print("\n") + } + } + defer file.Close() + writeToFile(file) +} \ No newline at end of file diff --git a/golang/main.go b/golang/main.go index 2697d843..5d02b65c 100644 --- a/golang/main.go +++ b/golang/main.go @@ -8,14 +8,25 @@ import ( "isuct.ru/informatics2022/labs/lab6" "isuct.ru/informatics2022/labs/lab7" + + "isuct.ru/informatics2022/labs/lab8" ) func main() { - fmt.Printf("Бейлин Алексей Борисович") + fmt.Printf("Бейлин Алексей Борисович\n") + print("\n") lab4.AnsLab4() + print("\n") lab6.AnsLab6() + print("\n") + + lab7.AnsLab7() + print("\n") + + lab8.AnsTask1() + print("\n") - lab7.AnsLab() + lab8.AnsTask2() }