Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.99/135: Рейтинг темы: голосов - 135, средняя оценка - 4.99
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 60

Неблокирующая функция

15.05.2020, 09:54. Показов 28324. Ответов 94
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня задача: написать функцию func test(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) в package main.
она
n раз сделать следующее

1. прочитать по одному числу из каждого из двух каналов in1 и in2, назовем их x1 и x2.
2. вычислить f(x1) + f(x2)
3. записать полученное значение в out
Функция test должна быть неблокирующей, сразу возвращая управление.
Функция f может работать долгое время, ожидая чего-либо или производя вычисления.

Формат ввода
Количество итераций передается через аргумент n.
Целые числа подаются через аргументы-каналы in1 и in2.
Функция для обработки чисел перед сложением передается через аргумент f.

Код на go - вопрос как сделать функцию неблокирующей? в чем у меня ошибка?
еще при сборке ругается cannot be extracted via extract ()

Go
1
2
3
4
5
6
7
8
9
10
11
12
package main
 
// this is a comment
func test(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) {
 
    for i := 0; i < n; i++ {
        var x1 int = <- in1
        var x2 int = <- in2
        var res int = f(x1) + f(x2)
        out <- res
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2020, 09:54
Ответы с готовыми решениями:

Неблокирующая запись в файл
Есть код на perl работающий на Windows, который пишет данные в файл. use warnings; use feature 'say'; open(FH, '&gt;',...

Неблокирующая запись файла
Добавил в программу функцию журналирования своих действий и столкнулся с тем, что пока программа работает, пишет действия в текстовый файл,...

Неблокирующая работа с каналами
Пытаюсь написать программу, крутящуюся в своем цикле и изредка проверяющую входной канал (pipe) на наличие новых данных. Если они есть и их...

94
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.05.2020, 15:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ColdSkull Посмотреть сообщение
Проверял решение своё?
Ваши школьные задачи - нет. В реальных программах все именно так: если есть конкурентность, есть проблемы синхронизации доступа к общим переменным. И решаются они блокировками или атомарными операциями.
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
26.05.2020, 15:25
Цитата Сообщение от Neko-neko Посмотреть сообщение
Ещё интересно, можно ли самому писать в Stderr?
C++
1
log.Println
Добавлено через 5 минут
Цитата Сообщение от aoanima Посмотреть сообщение
два теста ок а на третьем тесте падает в неверный ответ
а там их 9
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
26.05.2020, 15:43
Цитата Сообщение от Garry Galler Посмотреть сообщение
У вас всех неправильные суммы из-за конкурентного доступа к одной переменной разных горутин.
К какой переменной?
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
26.05.2020, 17:32
Garry Galler, Ок, в таком случае, если задача школьная - ждём твоё решение, иначе - сам знаешь кто Так же ждём определение что такое "реальная программа" и её отличия от других
0
1 / 1 / 0
Регистрация: 25.05.2020
Сообщений: 12
26.05.2020, 17:36
Цитата Сообщение от ColdSkull Посмотреть сообщение
Neko-neko, Я имел ввиду что ты ждёшь когда из выходного всё прочитают, потом закрываешь, поэтому TL.
Убрал закрытие выходного канала.
Попробовал добавить свой промежуточный буферизованный канал размера n, из которого ещё одна го-рутина читает и пишет уже в главный out -- всё равно TL.
(Доступ к мэпам -- с мьютекесами, мьютексы передаются по ссылке ^_^.
На какие грабли я ещё не наступил?)

Цитата Сообщение от ColdSkull Посмотреть сообщение
Порядок можно сохранить если в канал писать например слайс с результатом и итерацией
Но потом их всё равно же надо будет переупорядочивать. Чем это лучше?
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
26.05.2020, 17:40
Neko-neko, По поводу граблей не скажу, просто своими наблюдениями делюсь Ни чем не лучше, просто как альтернатива
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.05.2020, 18:17
Garry Galler, так вот я вроде блокировал получение ссуммы, пока обе переменные не возьмут свои значения, с помощью WaitGroup
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.05.2020, 19:06
Цитата Сообщение от korvin_ Посмотреть сообщение
К какой переменной?
C
1
x1, x2 := 0, 0
В остальные коды я не вчитывался. Откуда мне знать какое именно решение они обсуждают?

Цитата Сообщение от ColdSkull Посмотреть сообщение
ждём твоё решение

Не по теме:

Жди.

Цитата Сообщение от ColdSkull Посмотреть сообщение
сам знаешь кто
Ну и? Ты кто такой вообще, что бы мне предъявлять? Заплати - получишь решение. Нет - тусуйся.



Добавлено через 2 минуты
Цитата Сообщение от lokilo Посмотреть сообщение
так вот я вроде блокировал получение ссуммы, пока обе переменные не возьмут свои значения, с помощью WaitGroup
WaitGroup это ожидание завершения горутин. Но переменные то изменяются внутри них.

Добавлено через 5 минут
Впрочем, сам код примера Merge2Channels очень странный. И непонятно, что вы там вообще ожидаете получить.
Там на каждой итерации переменным присваивается 0. В чем смысл?
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.05.2020, 19:08
Garry Galler, прописал вот такое решение, видимо я, что то не так понял, но данное решение тоже выдает WA
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
 
import (
    "sync"
    "sync/atomic"
    "runtime"
)
 
func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) {
    go func() {
        for i := 0; i < n; i++ {
            var x1 int32 = 0
            var x2 int32 = 0
 
            var w sync.WaitGroup
 
            w.Add(2)
 
            go func(in1 <-chan int) {
                atomic.AddInt32(&x1, int32(f(<-in1)))
                runtime.Gosched()
                w.Done()
            }(in1)
 
            go func(in2 <-chan int) {
                atomic.AddInt32(&x2, int32(f(<-in2)))
                runtime.Gosched()
                w.Done()
            }(in2)
 
            w.Wait()
 
            out <- int(atomic.LoadInt32(&x1)) + int(atomic.LoadInt32(&x2))
        }
    }()
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
26.05.2020, 19:54
Цитата Сообщение от Garry Galler Посмотреть сообщение
C
1
x1, x2 := 0, 0
Если ты про код lokilo, то там x1 и x2 записывают только по одной горутине и ещё одна — читает, а синхронизация обеспечивается с помощью WaitGroup. Там всё в порядке с этим.

Смотри:
сначала идёт инициализация x1, x2 и wg, только после этого запускаются две горутины для записи, на момент их запуска x1 и x2 уже проинициализированы, так что тут всё норм. Далее запустившая их горутина блочится на wg пока те две записывающие горутины не завершатся, а значит и завершат запись x1 и x2.
Миниатюры
Неблокирующая функция  
0
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
26.05.2020, 20:00
korvin_
а зачем здесь вообще две дополнительные грутины и WaitGroup?
разве без этого программа не будет работать точно так же - блокировать тред, пока не получит сначала <-in1, потом <-in2 ?

Go
1
2
3
4
5
6
7
8
9
package main
 
func Merge2Channels(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {
    go func() {
        for i := 0; i < n; i++ {
            out <- f(<-in1) + f(<-in2)
        }
    }()
}
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
26.05.2020, 20:08
mplain, функция f работать может долго, поэтому нужно точно знать, что мы получили значения. Ну это я так понял

Добавлено через 4 минуты
korvin_, и все равно, все мои решения выдают WA, уже рельно даже не знаю в какую сторону капнуть, на локалке как уже только не тестил
0
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
26.05.2020, 20:14
lokilo

А на что это влияет?
поток будет блокировать, пока не получит число из <-in1
затем будет блокировать, пока не расчитает функцию от этого числа
потом будет блокировать, пока не получит число из <-in2
потом опять блокирует пока считает функцию
и наконец блокирует пока канал out не примет получившееся значение
после чего цикл идёт по новой.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
26.05.2020, 20:23
Цитата Сообщение от lokilo Посмотреть сообщение
и все равно, все мои решения выдают WA
Я понятия не имею, что такое WA.

Цитата Сообщение от mplain Посмотреть сообщение
а зачем здесь вообще две дополнительные грутины и WaitGroup?
Это не мой код, так что не ко мне вопрос. Но могу сказать, что в этом случае f(<-in1) и f(<-in2) выполняются «параллельно», а не последовательно, в отличие от простого f(<-in1) + f(<-in2)

Впрочем, большого прироста это не даст всё равно. Я сделал небольшой бенчмарк:
Slow — простая функция с f(<-in1) + f(<-in2), Fast* — несколько моих вариантов, lokilo соответсвенно, его функция с WaitGroup.

delay — сколько времени выполняется f
число во второй колонке — сколько раз успела отработать функция за отведённое время (чем больше, тем лучше)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
delay = 10ms, n = 10
BenchmarkSum/Slow-8                   52     239053359 ns/op         171 B/op          3 allocs/op
BenchmarkSum/Fast-8                  994      11863540 ns/op        2387 B/op         24 allocs/op
BenchmarkSum/Fast2-8                 534      23461459 ns/op        4894 B/op         24 allocs/op
BenchmarkSum/Fast3-8                 537      23655812 ns/op        1905 B/op         24 allocs/op
BenchmarkSum/lokilo-8                 97     117921759 ns/op        1696 B/op         52 allocs/op
 
delay = 50ms, n = 10
BenchmarkSum/Slow#01-8                10    1053845943 ns/op         160 B/op          3 allocs/op
BenchmarkSum/Fast#01-8               225      53390590 ns/op        2360 B/op         24 allocs/op
BenchmarkSum/Fast2#01-8              100     106230169 ns/op        4893 B/op         24 allocs/op
BenchmarkSum/Fast3#01-8              100     106205736 ns/op        1906 B/op         24 allocs/op
BenchmarkSum/lokilo#01-8              21     531294473 ns/op        1696 B/op         52 allocs/op
 
delay = 100ms, n = 10
BenchmarkSum/Slow#02-8                 5    2057148504 ns/op         160 B/op          3 allocs/op
BenchmarkSum/Fast#02-8               100     103214236 ns/op        2352 B/op         24 allocs/op
BenchmarkSum/Fast2#02-8               58     205198564 ns/op        4905 B/op         24 allocs/op
BenchmarkSum/Fast3#02-8               57     204412066 ns/op        1916 B/op         24 allocs/op
BenchmarkSum/lokilo#02-8              10    1028971074 ns/op        1696 B/op         52 allocs/op
 
delay = 10ms, n = 50
BenchmarkSum/Slow#03-8                 9    1186773776 ns/op         496 B/op          3 allocs/op
BenchmarkSum/Fast#03-8              1015      11851856 ns/op        8191 B/op        104 allocs/op
BenchmarkSum/Fast2#03-8              519      23713951 ns/op       11629 B/op        104 allocs/op
BenchmarkSum/Fast3#03-8              127      94699260 ns/op        8643 B/op        104 allocs/op
BenchmarkSum/lokilo#03-8              20     592644657 ns/op        8432 B/op        252 allocs/op
 
delay = 50ms, n = 50
BenchmarkSum/Slow#04-8                 2    5322247195 ns/op         496 B/op          3 allocs/op
BenchmarkSum/Fast#04-8               225      54029808 ns/op        8150 B/op        104 allocs/op
BenchmarkSum/Fast2#04-8              100     111045435 ns/op       11686 B/op        104 allocs/op
BenchmarkSum/Fast3#04-8               26     441599385 ns/op        8624 B/op        104 allocs/op
BenchmarkSum/lokilo#04-8               4    2800517706 ns/op        8432 B/op        252 allocs/op
 
delay = 100ms, n = 50
BenchmarkSum/Slow#05-8                 1    10471766390 ns/op        496 B/op          3 allocs/op
BenchmarkSum/Fast#05-8               100     105378892 ns/op        8213 B/op        104 allocs/op
BenchmarkSum/Fast2#05-8               56     211067884 ns/op       11757 B/op        105 allocs/op
BenchmarkSum/Fast3#05-8               14     829593644 ns/op        8624 B/op        104 allocs/op
BenchmarkSum/lokilo#05-8               2    5152277624 ns/op        8432 B/op        252 allocs/op
 
delay = 10ms, n = 100
BenchmarkSum/Slow#06-8                 5    2386367521 ns/op         976 B/op          3 allocs/op
BenchmarkSum/Fast#06-8              1011      11923438 ns/op       15556 B/op        204 allocs/op
BenchmarkSum/Fast2#06-8              517      23474819 ns/op       20167 B/op        204 allocs/op
BenchmarkSum/Fast3#06-8               69     187936097 ns/op       17220 B/op        205 allocs/op
BenchmarkSum/lokilo#06-8               9    1189790379 ns/op       16912 B/op        502 allocs/op
 
delay = 50ms, n = 100
BenchmarkSum/Slow#07-8                 1    10603926435 ns/op        976 B/op          3 allocs/op
BenchmarkSum/Fast#07-8               223      53586301 ns/op       15518 B/op        204 allocs/op
BenchmarkSum/Fast2#07-8              100     105741774 ns/op       20207 B/op        205 allocs/op
BenchmarkSum/Fast3#07-8               13     849317660 ns/op       17163 B/op        204 allocs/op
BenchmarkSum/lokilo#07-8               2    5346662067 ns/op       16912 B/op        502 allocs/op
 
delay = 100ms, n = 100
BenchmarkSum/Slow#08-8                 1    20495988919 ns/op        976 B/op          3 allocs/op
BenchmarkSum/Fast#08-8               100     103252001 ns/op       15655 B/op        205 allocs/op
BenchmarkSum/Fast2#08-8               56     204724215 ns/op       20196 B/op        205 allocs/op
BenchmarkSum/Fast3#08-8                7    1642683391 ns/op       17296 B/op        206 allocs/op
BenchmarkSum/lokilo#08-8               1    10293790022 ns/op      16912 B/op        502 allocs/op
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.05.2020, 22:45
Ок. Я понял, что не понимаю задание.
Атомики тут не нужны, ибо конкуренции никакой нет - одна же горутина всего.

Откуда будет ввод данных в каналы?
Что должна считать функция складывающая значения? Кумулятивную сумму всех операций или каждый раз индивидуально для двух значений из двух каналов?

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
 
import (
    "fmt"
    //"sync"
    //"runtime"
)
 
 
func test(f func(int) int, 
    in1 <-chan int, 
    in2 <-chan int, 
    out chan<- int, 
    n int) {
    
    res := 0
    for i := 0; i < n; i++ {
       res += f(<-in1) + f(<-in2)
       out <- res    
       //out <- f(<- in1) + f(<- in2) // без инкремента    
    }
    
    close(out) // чтобы прекратить цикл чтения из канала
    
}
 
 
func f(x int) int {
    return x
}
 
func main() {
    
    n:= 10
    in1 := make(chan int) 
    in2 := make(chan int) 
    out := make(chan int) 
    
    go test(f, in1, in2, out, n)
    
    // ввод данных в каналы - асинхронно, чтобы не было блокировки
    for i := 0; i < n; i++ {
        go func(ch chan int){ch <- 100 + i}(in1)
        go func(ch chan int){ch <- 200 + i}(in2)
        //runtime.Gosched()
    }
    // просто читаем из канала по мере поступления данных
   // по сути это аналог ожидания через WaitGroup
    for res := range out {
        fmt.Println(res)
    }
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
26.05.2020, 22:59
Цитата Сообщение от Garry Galler Посмотреть сообщение
Атомики тут не нужны, ибо конкуренции никакой нет - одна же горутина всего.
Это зависит от имплементации функции, наверняка можно написать такую, где атомики нужну.

Цитата Сообщение от Garry Galler Посмотреть сообщение
Откуда будет ввод данных в каналы?
Из тестового сервиса, уда они постят свои функции.

Цитата Сообщение от Garry Galler Посмотреть сообщение
каждый раз индивидуально для двух значений из двух каналов
this.

Наример с канала in1 приходят числа [1,2,3], с канала in2 — [4,5,6], а функция f = func(x int) int { return x * x }, тогда в канал out нужно записать числа [1*1 + 4*4, 2*2 + 5*5, 3*3 + 6*6], т.е. [17, 29, 45].

То что ты написал уже было в самом начале.
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
26.05.2020, 23:04
Цитата Сообщение от Garry Galler Посмотреть сообщение
Откуда будет ввод данных в каналы?
Это неважно. Там лежит большое количество данных. И вероятно, что количество данных в двух каналах одинаковое.

Цитата Сообщение от Garry Galler Посмотреть сообщение
Что должна считать функция складывающая значения? Кумулятивную сумму всех операций или каждый раз индивидуально для двух значений из двух каналов?
По одному значению передаётся в функцию, и сумма результатов выполнения двух вызовов от соответствующих аргументов кладётся в выходной канал.
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.05.2020, 23:20
Цитата Сообщение от korvin_ Посмотреть сообщение
То что ты написал уже было в самом начале
М.б. Точно такой же я не видел. В любом случае как ТС описал - так я и реализовал. Слово в слово
Цитата Сообщение от _FoCuS Посмотреть сообщение
она
n раз сделать следующее
Добавлено через 1 минуту
Цитата Сообщение от Joker5555 Посмотреть сообщение
Это неважно.
А как я должен делать ввод? Я не из школы изучения XXX. Мне все всегда важно.

Добавлено через 11 минут
P.S. Вообщем, c учениками разных школ программирования всегда одна и та же проблема: они не дают нормальных описаний задач, не знают как будет происходить (или как его делать) ввод и свои проблемы описывают одинаково: RuntimeError (или любая другая ни о чем не говорящая ошибка).
А ведь могли бы и кураторов уточнить...

Я же предпочитаю решать реальные, а не надуманные задачи.
Вот нужно было мне для коммерческого приложения сделать корректное завершение работающих горутин по Ctrl+C - сделал. Задача реальная? Реальная. А тут...
0
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
27.05.2020, 00:15
Garry Galler
Слушай ну я уже не могу сдержаться
Я понимаю, ты на этом форуме завсегдатай... with all due respect
но ё-маё, ты пришел в этот тред и лечишь тут народ что у них задача неправильная
ну не нравится тебе, ну неинтересны тебе школьный задачи - ну пройди ты мимо ну ёпт, ну чего ты ворчишь как старый дед ну
no offence

Добавлено через 6 минут
Сейчас уже по сути вопрос не то том, как решить поставленную задачу, а скорее в том, как нам, участникам контеста, понять, чего в условии НЕ сказано, понять как её-таки победить

Я написал в поддержку ещё вчера, но они молчат

Мы знаем следующее:
- если сделать функцию блокирующей - будет паника: функция должна быть неблокирующей
- если передать слишком мало чисел (цикл i<n-1) - будет паника: все горутины спят, дедлок
- если передать слишком много чисел (цикл i<n+1) - будет паника: в канале 69 элементов, а должно быть 70 (??)
- если передать неправильное (произвольное) число - будет паника: вы передали 12345, а надо было 67890
- если функция спит секунду - получаем idleness-limit-exceeded (IL)
- если делаем всё вроде бы правильно - получаем wrong answer (WA)

- если передать f(<-in1) + f(<-in2) или наоборот f(<-in2) + f(<-in1) - разницы нет, паники не получаем, из чего можно сделать вывод что функция f не имеет state

- методом перебора я установил что в первом тесте n = 30 (кажется)

кто-нибудь прошёл хотя бы первый тест?
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
27.05.2020, 00:15
Цитата Сообщение от mplain Посмотреть сообщение
Слушай ну я уже не могу сдержаться
ору

Вообще появилась одна идея и заключается она в том, что бы например, завести структуру и инициализировать её двумя значениями. Ну и как-то отталкиваться от этой структурки. Например, завести третье поле и хранить там результат, а затем класть в out. Таким, образом, не будет условной гонки по считыванию и всё будет одновременно скажем так выполнятся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2020, 00:15

Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Написать функцию поиска максимального элемента, передать в неё указатель на начало и конец поиска и возвращать указатель на найденный...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru