Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689

Объяснить код

11.12.2019, 21:29. Показов 4538. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста прописать, что происходит в данном коде по строкам

C++
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
63
64
65
66
67
68
69
70
71
72
73
#include <cstdio>
#include <vector>
#include <queue>
 
const int UNDEF = -1;
 
struct Process
{
    int in;
    int rem;
    int begin;
    int end;
 
    Process(const int in, const int rem)
        : in(in)
        , rem(rem)
        , begin(UNDEF)
        , end(UNDEF)
    {}
 
    static Process read() {
        int h, m, s, len;
        scanf("%d:%d:%d %d", &h, &m, &s, &len);
        return Process(h * 60 * 60 + m * 60 + s, len);
    }
};
 
int main()
{
    int n, packageSize;
    scanf("%d %d", &n, &packageSize); 
    int time = 0; 
    std::vector <Process> p;
    std::queue <int> q; 
    for (int i = 0; i < n; i++) 
    {
        q.push((int)p.size());
        p.push_back(Process::read());
        if ((int)p.size() == packageSize)
        {
            time = std::max(time, p.back().in);
            while (!q.empty())
            {
                int curI = q.front();
                q.pop();
                Process &cur = p[curI];
                if (cur.begin == UNDEF)
                {
                    cur.begin = time;
                }
                if (cur.rem <= 10)
                {
                    time = time + cur.rem;
                    cur.end = time;
                }
                else
                {
                    cur.rem = cur.rem - 10;
                    time = time + 10;
                    q.push(curI);
                }
            }
            for (const Process &cur : p)
            {
                printf("%02d:%02d:%02d %02d:%02d:%02d\n",
                    cur.begin / 60 / 60%24, cur.begin / 60 % 60, cur.begin % 60,
                    cur.end / 60 / 60%24, cur.end / 60 % 60, cur.end % 60);
            }
            p.clear();
        }
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2019, 21:29
Ответы с готовыми решениями:

Объяснить код
Может кто-нибудь смог бы закомментировать данные участок кода или объяснить что за что отвечает( можно еще и ссылки на сторонние ресуры...

Объяснить код
#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;locale.h&gt; #include &lt;stdlib.h&gt; int proverka(char *s, char *t) { int i,...

Объяснить код на С++
Прошу объяснить код на С++. Каким алгоритмом происходит распознание функций. Программа построения графиков функций. Разработка на visual...

13
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
11.12.2019, 21:31
Цитата Сообщение от Катя6 Посмотреть сообщение
Помогите пожалуйста прописать, что происходит в данном коде по строкам
без труда не выловишь рыбку из пруда? кушать хочешь?
https://www.cyberforum.ru/post1993739.html
0
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689
11.12.2019, 21:33  [ТС]
_stanislav, причем тут кушать? Я наверное прошу помочь, потому у меня не получается понять. Вроде как я в раздел для начинающих зашла, а не для продвинутых...
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
11.12.2019, 21:42
Цитата Сообщение от Катя6 Посмотреть сообщение
Я наверное прошу помочь, потому у меня не получается понять.
нужно книжки читать, а то что ты просишь дело хлопотное, нудное легкое и не интересное. коменты писать к чужому коду конечно скучно но еще куда не шло, а вот человеку объяснять элементарные вещи, это ад.
0
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689
11.12.2019, 21:47  [ТС]
_stanislav, ну не объясняйте, в чем проблема?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
11.12.2019, 21:48
еще добрый совет, лучше по чуть чуть много чем много и один раз. небольшие конкретные вопросы задавать проще и отвечать на них проще.

Добавлено через 25 секунд
Цитата Сообщение от Катя6 Посмотреть сообщение
в чем проблема?
добра желаю.
0
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689
11.12.2019, 22:19  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
лучше по чуть чуть много чем много и один раз
чет без запятых у меня тут не читается ничего
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
12.12.2019, 09:33
Цитата Сообщение от Катя6 Посмотреть сообщение
Помогите пожалуйста прописать, что происходит в данном коде по строкам
Вот первая строка, ты серьезно не знаешь что она делает?
если знаешь то распиши что знаешь и приведи строку которую не понимаешь
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.12.2019, 11:30
Цитата Сообщение от Катя6 Посмотреть сообщение
Помогите пожалуйста прописать, что происходит в данном коде по строкам
на самом деле это - очень безобразный код.
вопиющий пример наплевательского, халатного отношения к работе,
и к людям вообще.

алгоритмически то может быть код и не плох.
и может быть даже прекрасно справляется со своей задачей.
но вот что именно должна делать программа - вообще ни разу не очевидно.

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

программа просит ввести какие то данные.
какие данные?

неужели так трудно было вывести табличку,
которая объясняет, что именно нужно вводить?

например: "введите ваш возраст: "

здесь же только по коду можно догадываться,
что нужна какая то неведомая фигня в формате: "%d:%d:%d %d"
первые три цифры похожи на временную метку.
но что означает последняя цифра?

что тут вообще просят ввести?

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

не зная, какая решается задача,
расписывать как она решается построчно,
это по меньше мере глупо и бессмысленно.

итого:

https://lurkmore.to/%D0%9D%D0%... 0%BD%D1%8F
3
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689
12.12.2019, 20:01  [ТС]
hoggy, свой сайтик оставьте при себе!
Вообще-то, это задача с сайта acmp, где как-раз не засчитывается подобного рода ерунда!
Цитата Сообщение от hoggy Посмотреть сообщение
неужели так трудно было вывести табличку,
которая объясняет, что именно нужно вводить?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
13.12.2019, 06:56
Цитата Сообщение от Катя6 Посмотреть сообщение
Вообще-то, это задача с сайта acmp, где как-раз не засчитывается подобного рода ерунда!
копипаст, даже гугл бессилен, главное что бы в мозгу не было штампа

Добавлено через 56 секунд
Цитата Сообщение от Катя6 Посмотреть сообщение
свой сайтик оставьте при себе!
классный сайт
0
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248
13.12.2019, 22:13
Лучший ответ Сообщение было отмечено Катя6 как решение

Решение

если я правильно помню С++, то будет нечто такое:

C++
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
const int UNDEF = -1; // объявить переменную UNDEF типа int, присвоить значение -1, сделать неизменяемой
 
// объявить тип (структуру) Process (следует прочитать про классы и структуры  в С++)
struct Process
{
// имеются поля целочисленного типа:
    int in; 
    int rem;
    int begin;
    int end;
 
// конструктор, принимает 2 значения in и rem
    Process(const int in, const int rem)
// скопировать значения в поля перед созданием объекта
        : in(in)
        , rem(rem) 
        , begin(UNDEF) // begin = -1
        , end(UNDEF) // end = -1
    {}
 
    static Process read() { // объявить статический метод, возвращающий объект типа Process
        int h, m, s, len; // объявить переменные h, m, s, len 
        scanf("%d:%d:%d %d", &h, &m, &s, &len); // осуществить ввод значений с клавиатуры Например, 60 60 60 60 
        return Process(h * 60 * 60 + m * 60 + s, len); // вернуть объект типа Process с in = h * 60 * 60 + m * 60 + s, rem =  len, begin и end будут равны -1
    }
};
 
int main()
{
    int n, packageSize; // объявить переменные n и packageSize
    scanf("%d %d", &n, &packageSize);  // ввести данные с клавиатуры
    int time = 0;  // объявить переменную time и инициализировать значением 0
    std::vector <Process> p; // объявить вектор p каждый элемент которого типа Process
    std::queue <int> q;  // объявить очередь q каждый элемент которого типа int
    for (int i = 0; i < n; i++) 
    {
        q.push((int)p.size()); // добавить элемент в очередь, равный размеру вектора p
        p.push_back(Process::read()); // добавить в конец элемент типа Process
        if ((int)p.size() == packageSize) // если размер p и packageSize  равны
        {
            time = std::max(time, p.back().in); // в time записать максимальное значение равное либо time, либо in в последнем элементе вектора
            while (!q.empty()) // пока q не пустой
            {
                int curI = q.front(); // текущее значение curI присвоить значение первого элемента очереди
                q.pop(); // удалить элемент из очереди
                Process &cur = p[curI]; // получить из p элемент с индексом curI (вообще в переменную cur записывается адрес в памяти) 
                if (cur.begin == UNDEF) // если значение переменной begin в объекте cur  равно UNDEF (т.е -1)
                {
                    cur.begin = time; // записать в begin значение time
                }
                if (cur.rem <= 10) // если rem меньше или равен 10
                {
                    time = time + cur.rem; // время увеличить на значение переменной rem 
                    cur.end = time; // переменной end присвоить значение time
                }
                else // иначе
                {
 
                    cur.rem = cur.rem - 10; // rem уменьшить на 10
                    time = time + 10; // time увеличить на 10
                    q.push(curI); // добавить в очередь значение переменной curI
                }
            }
// пройтись по всем элементам в векторе p
            for (const Process &cur : p)
            {
// вывести в формате 00:00:00 00:00:00
                printf("%02d:%02d:%02d %02d:%02d:%02d\n",
 
                    cur.begin / 60 / 60%24, cur.begin / 60 % 60, cur.begin % 60, 
// строка 1
// 1) begin уменьшить 2 раза в 60 раз и взять остаток от деления на 24
// 2) begin разделить на 60 и взять остаток от деления на 60
// 3) begin разделить на 60 и взять остаток от деления
                    cur.end / 60 / 60%24, cur.end / 60 % 60, cur.end % 60);
// строка 2
// 1) end уменьшить 2 раза в 60 раз и взять остаток от деления на 24
// 2) end разделить на 60 и взять остаток от деления на 60
// 3) end взять остаток от деления на 60 
            }
// очистить вектор
            p.clear();
        }
    }
    return 0; // завершить выполнение с кодом 0
}
1
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 689
13.12.2019, 22:33  [ТС]
wolf1396, Спасибо большое!
0
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248
13.12.2019, 22:34
я на С++ не писал с универа, т.е года 3, тч лучше перепроверить написанное мной
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2019, 22:34
Помогаю со студенческими работами здесь

Объяснить код
Написать программу, которая вычисляет частичную сумму ряда \sum_{k=1}^{\infty}ln(1+\frac{1}{k}) Расчет должен производиться двумя...

Объяснить код
Двоичный поиск #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; using namespace std; int...

Объяснить код программы
Объясните пожалуйста, каждую строку,что где означает void main() { int **a,i,j,k,m,n,b; cout&lt;&lt; &quot;Vvedite...

Лабиринт. Объяснить код
Всем привет. Нашел на просторах вашего форума такой вот код: Проверил, все работает. Может кто объяснить, как эта программа устроена, мне...

Прошу объяснить код С++
здравствуйте, прошу объяснить как для полного нуба простейшими словами данный кусок кода: y=150 (10010110 в двоичной) int y=150; ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru