Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion golang/.golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ linters:
- containedctx
# - deadcode
- decorder
- depguard
# - depguard
- dogsled
- dupl
- durationcheck
Expand Down
Binary file added golang/informatics2022.exe
Binary file not shown.
8 changes: 4 additions & 4 deletions golang/lab4/lab4.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package laba4
package lab4

import (
"fmt"
Expand All @@ -18,22 +18,22 @@ func CompleteTaskA(xMin, xMax, xDelta float64) []float64 {
return result
}

func CompleteTaskB(x []float64) []float64 { // Удалили лишний аргумент float64
func CompleteTaskB(x []float64) []float64 {
var result []float64
for _, i := range x {
result = append(result, CalculateFunction(i))
}
return result
}

func CompleteLaba4() {
func CompleteLab4() {
var xMin float64 = 1.25
var xMax float64 = 3.25
var xDelta float64 = 0.4
var x []float64 = []float64{1.84, 2.71, 3.81, 4.56, 5.62}

var resultA []float64 = CompleteTaskA(xMin, xMax, xDelta)
fmt.Println(resultA)
var resultB []float64 = CompleteTaskB(x) // Удалили лишний аргумент x
var resultB []float64 = CompleteTaskB(x)
fmt.Println(resultB)
}
36 changes: 36 additions & 0 deletions golang/lab6/lab6.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package lab6

import "fmt"

type Person struct {
Name string
Age int
Height float64
}

func NewPerson(name string, age int, height float64) *Person {
p := new(Person)
p.Name = name
p.Age = age
p.Height = height
return p
}

func (p *Person) SetAge(age int) {
p.Age = age
}

func (p Person) GetAge() int {
return p.Age
}

func (p Person) GetHeight() float64 {
return p.Height
}

func CompleteLab6() {
dima := NewPerson("Дима", 20, 1.78)
dima.SetAge(20)

fmt.Printf("Имя: %s\nВозраст: %d\nРост: %.2f\n", dima.Name, dima.GetAge(), dima.GetHeight())
}
52 changes: 52 additions & 0 deletions golang/lab7/car.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package lab7

import "errors"

var ErrColor error = errors.New("invalid color")
var ErrMaxSpeed error = errors.New("the wrong maxSpeed value")

type Color string

const (
Red Color = "красный"
Green Color = "зелённый"
White Color = "белый"
Black Color = "чёрный"
)

type car struct {
product
color Color
maxSpeed float64
}

func (c *car) SetColor(color Color) error {
for _, standardColor := range []Color{Red, Green, White, Black} {
if color == standardColor {
c.color = color
return nil
}
}
return ErrColor
}

func (c *car) SetSpeed(maxSpeed float64) error {
if maxSpeed < 0 || maxSpeed > 250 {
return ErrMaxSpeed
}
c.maxSpeed = maxSpeed
return nil
}

func NewCar(id int, name string, price float64, color Color, maxSpeed float64) *car {
c := &car{
product: newProduct(id, name, price),
}
if err := c.SetColor(color); err != nil {
return nil // Или обработка ошибки
}
if err := c.SetSpeed(maxSpeed); err != nil {
return nil // Или обработка ошибки
}
return c
}
12 changes: 12 additions & 0 deletions golang/lab7/food.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package lab7

type food struct {
product
}

func NewFood(id int, name string, price float64) *food {
f := &food{
product: newProduct(id, name, price),
}
return f
}
39 changes: 39 additions & 0 deletions golang/lab7/furniture.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package lab7

import "errors"

var ErrMaterial error = errors.New("invalid material")

type Material string

const (
Skin Material = "кожа"
Wood Material = "дерево"
Plywood Material = "Фанера"
Dsp Material = "дсп"
)

type furniture struct {
product
material Material
}

func (f *furniture) SetMaterial(material Material) error {
for _, standardMaterial := range []Material{Skin, Wood, Plywood, Dsp} {
if material == standardMaterial {
f.material = material
return nil
}
}
return ErrMaterial
}

func NewFurniture(id int, name string, price float64, material Material) *furniture {
f := &furniture{
product: newProduct(id, name, price),
}
if err := f.SetMaterial(material); err != nil {
return nil // Или обработка ошибки
}
return f
}
51 changes: 51 additions & 0 deletions golang/lab7/lab7.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package lab7

import (
"fmt"
"log"
)

func CompleteLab7() {
var err error

audi := NewCar(0, "ауди", 80000, Red, 240)
if audi == nil {
log.Fatal("Ошибка создания автомобиля")
}

desk := NewFurniture(1, "офисный стол", 1200, Wood)
if desk == nil {
log.Fatal("Ошибка создания стола")
}

chair := NewFurniture(2, "кресло", 300, Skin)
if chair == nil {
log.Fatal("Ошибка создания кресла")
}

apple := NewFood(3, "огурец", 5)

var ProductList []Product = []Product{
audi,
desk,
chair,
apple,
}

fmt.Printf("Общая стоимость товара до скидок: %.2f\n", GetTotalPrice(ProductList))
for _, product := range ProductList {
if err = product.SetDiscount(10); err != nil {
log.Fatal(err)
}
}
fmt.Printf("Общая стоимость товара после скидок в 10 процентов: %.2f\n", GetTotalPrice(ProductList))

if err = audi.SetColor(White); err != nil {
log.Fatal(err)
}
if err = desk.SetMaterial(Plywood); err != nil {
log.Fatal(err)
}

displayListProducts(ProductList)
}
43 changes: 43 additions & 0 deletions golang/lab7/product.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package lab7

import "errors"

var ErrPercentageValue error = errors.New("the wrong percentage value")

type product struct {
id int
name string
price float64
discount float64
}

func (p product) GetPrice() float64 { return p.price }

func (p product) GetName() string { return p.name }

func (p product) GetDiscount() float64 { return p.discount }

func (p *product) SetDiscount(percent float64) error {
if percent < 1 || percent > 100 {
return ErrPercentageValue
}
p.discount = percent

change := (p.price / 100) * percent

if change > p.price {
p.price = 0
return nil
}
p.price -= change
return nil
}

func newProduct(id int, name string, price float64) product {
return product{
id: id,
name: name,
price: price,
discount: 0,
}
}
28 changes: 28 additions & 0 deletions golang/lab7/productInterface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package lab7

import "fmt"

type Product interface {
SetDiscount(float64) error
GetDiscount() float64
GetPrice() float64
GetName() string
}

func displayListProducts(PList []Product) {
fmt.Println("____список товаров_____")
for _, p := range PList {
fmt.Printf(
"________________________\nтовар \"%v\" стоит %v$ благодоря скидке в %v процентов\n",
p.GetName(), p.GetPrice(), p.GetDiscount())
}
}

func GetTotalPrice(ProductList []Product) float64 {
var totalPrice float64

for _, product := range ProductList {
totalPrice += product.GetPrice()
}
return totalPrice
}
11 changes: 9 additions & 2 deletions golang/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,17 @@ package main
import (
"fmt"

laba4 "isuct.ru/informatics2022/lab4"
lab4 "isuct.ru/informatics2022/lab4"
lab6 "isuct.ru/informatics2022/lab6"
lab7 "isuct.ru/informatics2022/lab7"
)

func main() {
fmt.Println("Lopatin Dmitry Alekseevich")
laba4.CompleteLaba4()
fmt.Println("Лабороторная 4:")
lab4.CompleteLab4()
fmt.Println("Лабороторная 6:")
lab6.CompleteLab6()
fmt.Println("Лабороторная 7:")
lab7.CompleteLab7()
}