Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214

Создать стек на основе списка структур

14.04.2021, 14:08. Показов 4434. Ответов 31
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Задание такое: Создать стек на основе структур (в данном случае на основе односвязного списка), почти что закончила код, но не получается сделать удаление элемента стека, помогите, пожалуйста. И ещё, какие функции можно добавить в программу? Например, сейчас есть добавление элемента в стек, вывод всех элементов на экран и поиск и удаление выбранного элемента (нужна починка). Может можно добавить что-то ещё?
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <stdio.h>
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
struct comp { //Структура с именем comp
    char udknum[30];
    char fio[30];
    char bookname[40];
    int year;
    int kolvo;
    comp* next;//Указатель типа comp на следующий элемент
};
 
void s_push(comp** top) {
    comp* q; //Создаем новый указатель q, который приравниваем к вершине стека. По сути это и есть наш новый элемент
    q = new comp(); //выделяем память для нового элемента
    cout << "Введите УДК книги: ";
    cin.getline(q->udknum, 30);
    cout << "Введите ФИО автора книги: ";
    cin.getline(q->fio, 30);
    cout << "Введите название книги: ";
    cin.getline(q->bookname, 40);
    cout << "Введите год издания книги: ";
    cin >> q->year;
    cout << "Введите количество книг: ";
    cin >> q->kolvo;
    cout << endl;
    if (top == NULL) { //Если вершины нет, то есть стек пустой
        *top = q; //вершиной стека будет новый элемент
    }
    else //если стек не пустой
    {
        q->next = *top; //Проводим связь от нового элемента, к вершине. То есть кладем книжку на вершину стопки.
        *top = q; //Пишем, что вершиной теперь является новый элемент
    }
}
 
void s_delete_key(comp** top, char NewUdk[]) {//функция которая принимает вершину top и число которое нужно удалить
    comp* q = *top; //создаем указатель типа comp и приравниваем(ставим) его на вершину стека
    comp* prev = NULL;//создаем указатель на предыдущий элемент, с начала он будет пустым
    while (q != NULL) {//пока указатель q не пустой, мы его будем проверять, если он все же пусть цикл заканчивается
        if (q->udknum == NewUdk) {
            if (q == *top) {//если такой указатель равен вершине, то есть элемент, который нам нужно удалить - вершина
                *top = q->next;//передвигаем вершину на следующий элемент
                free(q);//очищаем ячейку
                q->udknum[30] = NULL; 
                q->fio[30] = NULL; 
                q->year = NULL;
                q->kolvo = NULL; 
                q->next = NULL;
            }
            else//если элемент последний или находится между двумя другими элементами
            {
                prev->next = q->next;//Проводим связь от предыдущего элемента к следующему
                free(q);//очищаем ячейку 
                q->udknum[30] = NULL; 
                q->fio[30] = NULL; 
                q->bookname[40] = NULL;
                q->year = NULL;
                q->kolvo = NULL; 
                q->next = NULL;
            }
        }
        prev = q; //запоминаем текущую ячейку как предыдущую
        q = q->next;//перемещаем указатель q на следующий элемент
    }
}
 
comp* FindPrev(comp* top, char NewUdk[]) //поиск узла
{
    comp* q = nullptr;
    while (top && strcmp(top->udknum, NewUdk) != 0)
    {
        q = top;
        top = top->next;
    }
    return q;
}
 
comp* Find(comp* top, char NewUdk[]) //поиск узла
{
    comp* q = FindPrev(top, NewUdk);
    return q ? q->next : top;
}
 
void s_print(comp* top) { //принимает указатель на вершину стека        
    comp* q = top; //устанавливаем q на вершину
    while (q) { //пока q не пустой (while(q) эквивалентно while(q != NULL))
        cout << "Номер УДК: " << q->udknum << endl;
        cout << "ФИО автора: " << q->fio << endl;
        cout << "Название книги: " << q->bookname << endl;
        cout << "Год издания: " << q->year << endl;
        cout << "Количество книг: " << q->kolvo << endl;
        cout << endl;
        q = q->next;//после того как вывели передвигаем q на следующий элемент(ячейку)
    }
}
 
int Choice()
{
    int answer;
    cout << endl;
    cout << "Главное меню:" << endl;
    cout << "1. Добавить новую книгу в список" << endl;
    cout << "2. Вывести всю информацию о книгах" << endl;
    cout << "3. Найти и удалить книгу из списка" << endl;
    cout << "4. Очистить экран" << endl;
    cout << "5. Выход" << endl;
    cout << endl;
    cout << "Выберите действие: ";
    (cin >> answer).get();
    cout << endl;
    if (answer >= 1 && answer <= 5)
        return answer;
    else
        return 0;
}
 
int main() 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    comp* top = NULL; //в начале программы у нас нет очереди, соответственно вершины нет, даем ей значение NULL
    //Дальше начинаем добавлять данные
    int ch; char del; int n;
    comp* q = NULL;
    while (1)
    {
        ch = Choice();
 
        if (ch == 1)
        {
                s_push(&top);
        }
        else if (ch == 2)
        {
                s_print(top);
        }
 
        else if (ch == 3)
        {
            char del;
            char udknum[256];
            cout << "Введите номер УДК для поиска: ";
            cin >> udknum;
 
            q = Find(top, udknum);
            if (q)
            {
                cout << "Номер книги: " << q->udknum << endl;
                cout << "ФИО: " << q->fio << endl;
                cout << "Название: " << q->bookname << endl;
                cout << "Год: " << q->year << endl;
                cout << "Количество: " << q->kolvo << endl;
                cout << endl;
                cout << "Вы хотите удалить эту запись? (y, n): ";
                cin >> del;
                if (del == 'y')
                {
                    s_delete_key(&top, udknum);
                }
                cout << endl;
            }
        }
 
        else if (ch == 4)
        {
            system("cls");
        }
 
        else if (ch == 5)
            exit(0);
    }
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Тут ошибка, думаю, но не знаю, как починить
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
q->udknum[30] = NULL;
                q->fio[30] = NULL;
                q->bookname[40] = NULL;
                q->year = NULL;
                q->kolvo = NULL;
                q->next = NULL;
Добавлено через 1 минуту
Если так написать, то ошибку выдаёт, что нельзя изменять левостороннее значение
C++
1
2
3
4
5
6
                q->udknum = NULL;
                q->fio = NULL;
                q->bookname = NULL;
                q->year = NULL;
                q->kolvo = NULL;
                q->next = NULL;
Добавлено через 35 минут
При нажатии на "3", мы вводим номер УДК, поиск работает, программа находит и выводит информацию о найденной книге, спрашивает, удалить ли её, если нажать удалить и вывести после это все элементы стека, то удаление не произошло, он там как был, так и остался

Добавлено через 21 минуту
Вообще, в предупреждении он пишет, что это индексы, но как тогда удалить не индекс, а именно весь элемент стека со всеми полями?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2021, 14:08
Ответы с готовыми решениями:

Стек на основе связанного списка C++
Привет:) Мне нужно разработать функции занесения и извлечения данных стека на основе связанного списка!на основе массива уже написала, а...

Стек на основе односвязного списка (доработать код)
Написать класс &quot;стек&quot; (первый пришел, последний ушел) на основе односвязного списка. Реализовать методы Push и Pop. Стек хранит структуру...

Создать динамическую структуру: список, а также очередь и стек на основе списка
Требуется создать список, стек и очередь на основе списка. С условием : всё должно опичываться в классах.

31
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 15:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
(известно, что при шифровке каждый символ сообщения заменялся
следующим за ним в деке по часовой стрелке через один)
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, А как сделать замену элементов через 1 для шифровки и дешифровки? Я чуть переделала, теперь я ввожу, например, 5 символов: г, р, у, ш, а (груша), из этих 5 символов происходит шифровка через 1 по кругу -> ушагр
А ты уверена, что это корректный пример, что шифруется просто циклическим сдвигом влево на 2 позиции?
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.05.2021, 17:47  [ТС]
oleg-m1973, ну по заданию известно, что при шифровке каждый символ сообщения заменялся
следующим за ним в деке по часовой стрелке через один. Я так понимаю, что мы записываем слово из символов, что каждый элемент дека это отдельный символ и шифруем вот этим сдвигом по часовой стрелке (я так понимаю, что по часовой стрелке мы сверху дека спускаемся вниз и так покругу). Полное задание: Дек содержит последовательность символов для шифровки сообщений.
Дан текстовый файл, содержащий зашифрованное сообщение. Пользуясь деком,
расшифровать текст. Известно, что при шифровке каждый символ сообщения заменялся
следующим за ним в деке по часовой стрелке через один.

Добавлено через 1 минуту
oleg-m1973, Я сначала сделала просто шифровке и расшифровку по Цезарю со сдвигом, используя весь алфавит, но тогда, получается, дек вообще не участвует в расшифровке, а так, вроде, соответствует заданию
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 18:07
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
Известно, что при шифровке каждый символ сообщения заменялся
следующим за ним в деке по часовой стрелке через один.
А примера там, в задании, случайно, нет? А то сдвиг, как-то не похож на шифрование. При сдвиге там достаточно просто два раза сделать pop_front-push_back, или наоборот pop_back-push_front
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.05.2021, 18:12  [ТС]
oleg-m1973, Да нет, примера нет, самой вот интересно, как именно делать это задание, но думаю, что так хотя бы сделать
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 18:12
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Я сначала сделала просто шифровке и расшифровку по Цезарю со сдвигом, используя весь алфавит,
В шифре Цезаря сдвигается алфавит, а не текст. И дек ни в этом шифре, ни в твоём задании вроде особо не нужен.
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.05.2021, 18:14  [ТС]
oleg-m1973, ну вот поэтому я и ушла от прежней шифровки Цезарем, потому что она без дека шифровала

Добавлено через 50 секунд
oleg-m1973, думаю тут просто так сделать и всё, скажу, что так поняла задание. Единственное, не понимаю, как эти сдвиги делать
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 18:33
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, думаю тут просто так сделать и всё, скажу, что так поняла задание. Единственное, не понимаю, как эти сдвиги делать
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
int main()
{
    std::string a1 = "ABCDEFGHIJKLMNOPQUSTUVWXYZ";
    std::string a2(a1.size(), 0);
    for (size_t i = 0; i < a2.size(); ++i)
        a2[i] = a1[(i + 2) % a1.size()];
 
    std::cout << "alph1: " << a1 << std::endl;
    std::cout << "alph2: " << a2 << std::endl;
 
    std::string text = "TEST";
    std::string encoded;
    for (size_t i = 0; i < text.size(); ++i)
        encoded += a2[text[i] - 'A'];
 
    std::cout << "src: " << text << std::endl;
    std::cout << "enc: " << encoded << std::endl;
 
    std::string decoded;
    for (size_t i = 0; i < encoded.size(); ++i)
        decoded += 'A' + (encoded[i] - 'A' - 2) % a1.size();
 
    std::cout << "dec: " << decoded << std::endl;
    system("pause");
}
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.05.2021, 18:44  [ТС]
oleg-m1973, а если делать обычный сдвиг, получается, я 2 раза делаю pop_front, извлекаю 2 элемента верхних, остаётся "уша" из слова груша, теперь я должна "гр" добавить после "уша", а как сделать, чтоб они не удалялись, а становились в конец?

Добавлено через 38 секунд
oleg-m1973, попробую сделать 2 варианта, нормальное шифрование и простой сдвиг, а там уже пойму какой из показывать
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 18:54
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, а если делать обычный сдвиг, получается, я 2 раза делаю pop_front, извлекаю 2 элемента верхних, остаётся "уша" из слова груша, теперь я должна "гр" добавить после "уша", а как сделать, чтоб они не удалялись, а становились в конец?
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
При сдвиге там достаточно просто два раза сделать pop_front-push_back, или наоборот pop_back-push_front
Здесь как дек раз подходит
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.05.2021, 22:37  [ТС]
oleg-m1973,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
При сдвиге там достаточно просто два раза сделать pop_front-push_back, или наоборот pop_back-push_front
Что-то не получается у меня сделать, я правильно понимаю, что я должна из файла, в который у меня записываются введённые символы (нешифрованные), их считать, пока что я делаю это в вектор, заполняю вектор этими символами, из него мне только 2 первых нужно использовать для сдвига, в функции я делаю 2 раза PopFront и должна после этого засунуть в дек из вектора эти 2 символа, но у меня не получается сделать последнее, пишет, что нельзя преобразовать string в PBook, или я сильно усложняю и можно проще?
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <iostream>
#include <vector>;
#include <fstream>
#include <string>
#include <Windows.h>
 
using namespace std;
 
struct CBook
{
    char symbol;
 
    CBook* next, * prev;
};
typedef CBook* PBook;
 
ofstream fo1, fo2;
ifstream fi1;
vector<PBook> z;
string m;
PBook r;
 
PBook CreateBook()
{
    PBook NewBook = new CBook; //Указатель на новый узел
    cin >> NewBook->symbol;       //
    fo1 << NewBook->symbol << endl;
    NewBook->next = NULL; //Следующего узла нет
    NewBook->prev = NULL;
    return NewBook; //адрес узла - результат функции
}
 
void AddFirst(PBook& Head, PBook& Tail, PBook NewBook)
{
    NewBook->next = Head;
    NewBook->prev = NULL;
    if (Head)
        Head->prev = NewBook;
    Head = NewBook;
    if (!Tail)
        Tail = Head;
}
 
void AddLast(PBook& Head, PBook& Tail, PBook NewBook)
{
    NewBook->next = NULL;
    NewBook->prev = Tail;
    if (Tail)
        Tail->next = NewBook;
    Tail = NewBook;
    if (!Head)
        Head = Tail;
}
 
 
PBook PopFront(PBook& Head, PBook& Tail)
{
    if (!Head)
        return nullptr;
 
    PBook p = Head;
    Head = Head->next;
    return p;
}
 
PBook PopBack(PBook& Head, PBook& Tail)
{
    if (!Head)
        return nullptr;
 
    PBook p = Tail;
    Tail = Tail->prev;
    if (!Tail)
        Head = nullptr;
    else
        Tail->next = nullptr;
    return p;
}
 
PBook zashifr(PBook& Head, PBook& Tail, PBook NewBook)
{
    PBook p = PopFront(Head, Tail);
    PBook p = PopFront(Head, Tail);
    AddLast(Head, Tail, NewBook);
    AddLast(Head, Tail, NewBook); ?
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int ch; int symb;
    PBook Head = NULL, Tail = NULL, p, q = NULL;
 
    while (1)
    {
        ch = Choice();
 
        if (ch == 1)
        {
            fo1.open("message.txt");
            cout << "Введите количество символов: ";
            cin >> symb;
            cout << endl;
            for (int i = 0; i < symb; i++)
            {
                cout << "Введите " << i + 1 << " символ: ";
                AddFirst(Head, Tail, CreateBook());
            }
            fo1.close();
        }
        else if (ch == 2)
        {
            fo1.open("message.txt");
            cout << "Введите количество символов: ";
            cin >> symb;
            cout << endl;
            for (int i = 0; i < symb; i++)
            {
                cout << "Введите " << i + 1 << " символ: ";
                AddLast(Head, Tail, CreateBook());
            }
            fo1.close();
        }
        else if (ch == 3)
        {
            PBook p = PopFront(Head, Tail);
            cout << "Первый элемент дека удалён: " << p->symbol<< endl;
            delete p;
        }
 
        else if (ch == 4)
        {
            PBook p = PopBack(Head, Tail);
            cout << "Последний элемент дека удалён: " << p->symbol << endl;
            delete p;
        }
 
        else if (ch == 5)
        {
            for (auto* p = Head; p; p = p->next)
            {
                cout << "Введённые сообщения для шифровки: " << p->symbol;
                cout << endl;
            }
        }
 
        else if (ch == 6)
        {
            empty(Head, Tail);
            cout << endl;
        }
 
        else if (ch == 7)
        {
            fi1.open("message.txt");
            fo2.open("remessage.txt");
 
            /*do
            {
                getline(fi1, m);
                if (m.size() > 0)
                {
                    r = m;
                    z.push_back(r);
                }
            } while (!fi1.eof());
 
            for (int i = 0; i < 2; i++)
                cout << z[i];
 
            zashifr(Head, Tail, z[1]);
            zashifr(Head, Tail, z[2]);
 
            cout << endl;
            fi1.close();
            fo2.close();*/
        }
 
        else if (ch == 8)
        {
            rashifr();
        }
 
        else if (ch == 9)
        {
            system("cls");
        }
 
        else if (ch == 10)
            exit(0);
    }
}
Добавлено через 9 минут
oleg-m1973, Я сделала иначе, просто PushFront и AddLast в цикле, первые 2 удаляются, но просит ввести для добавление в конец от руки символы, а как сделать так, чтоб они сами добавлялись?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.05.2021, 22:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    std::stringstream in;
    in << "ushagr";
 
    std::deque<char> deq;
    std::copy(std::istream_iterator<char>(in), std::istream_iterator<char>(), std::back_inserter(deq));
 
    for (auto ch: deq)
        std::cout << ch;
    std::cout << std::endl;
    
    for (size_t i = 0; i < 2; ++i)
    {   
        deq.push_front(deq.back());
        deq.pop_back();
    }
 
    for (auto ch: deq)
        std::cout << ch;
    std::cout << std::endl;
}
Добавлено через 1 минуту
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Я сделала иначе, просто PushFront и AddLast в цикле, первые 2 удаляются, но просит ввести для добавление в конец от руки символы, а как сделать так, чтоб они сами добавлялись?
Дек, это std::deque. Возможно там можно не пользоваться своими классами
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
04.05.2021, 00:25  [ТС]
oleg-m1973, Получилось сделать на основе дека, спасибо вам большое за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2021, 00:25

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

Стек на основе списка
Помогите организовать стек объектов Person на основе списка с функциями добавления , удаления и изменения элемента class Person {...

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

Стек на основе связного списка
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; const int FALSE = 0; const int TRUE = 1; struct Node { int value; struct...

Стек на основе односвязного списка
Ребят, помогите пожалуйста! Ошибка в функции push. Только я не знаю как ее исправить. Я в отчаянии stack.h typedef struct GRAD { ...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru