Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/89: Рейтинг темы: голосов - 89, средняя оценка - 4.57
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446

Распарсить выражение, состоящее из чисел, скобок и знаков сложения и вычитания, и вывести результат

05.11.2014, 20:11. Показов 17891. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сложение и вычитание
Имя входного файла: evalpm.in
Имя выходного файла: evalpm.out
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мебибайт

Выведите значение заданного арифметического выражения, состоящего из чисел, скобок и знаков сложения и вычитания.

Формат входных данных

В первой строке входного файла задано выражение, состоящее из чисел, скобок и знаков бинарных операций. Каждое число в выражении — это целое неотрицательное число в промежутке от 0 до 10000, включительно, записанное без ведущих нулей. Скобки бывают открывающие (`(') и закрывающие (`)'). Операции задаются символами `+' и `-'. Гарантируется, что заданное выражение математически корректно, и результаты всех промежуточных операций — целые числа, не превышающие по модулю 10000. Выражение не содержит каких-либо других символов, в частности, пробелов. Длина выражения не меньше 1 и не больше 1000 символов
Учтите, что операции при отсутствии скобок выполняются слева направо. Например, выражение a - b - c вычисляется как (a - b) - c.

Формат выходных данных

В первой строке выходного файла выведите одно число — значение заданного выражения.

Примеры

evalpm.in evalpm.out
48-13 35
5-(52+3) -50

Добавлено через 48 минут
Я придумал такой алгоритм. Сохранить арифметическое выражение в массив символов, запоминая при этом позиции открывающихся и закрывающихся скобок. Потом начать вычисления с самой правой открывающей скобки до закрывающей скобки. Затем пойти налево и сосчитать все выражения в скобках. Ну а потом уже сосчитать выражения без скобок.
Только я не представляю, как идентифицировать знаки '+' и '-', да и к тому же надо как-то конвертировать символы в числа, как это сделать я не понимаю и не воображаю...

Добавлено через 14 минут
Вот начало:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
#define LIM 1001        /* максимальное число элементов в массиве */
 
int main()
{
    int c, i, j, k;
    char str[LIM];      /* массив для хранения арифметического выражения */
    char pos1[LIM];     /* массив для хранения позиций открывающих скобок */
    char pos2[LIM];     /* массив для хранения позиций закрывающих скобок */
    
    i = j = k = 0;
    while ( ( str[i] = getchar() ) != '\n' ) {
        if ( str[i] == '(' )
            pos1[j++] = i;
        else
            if ( str[i] == ')' )
                pos2[k++] = i;
        i++;
    }
    return 0;
}
Осталось придумать ещё кучу кода

Добавлено через 19 минут
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
#include <stdio.h>
 
#define LIM 1001        /* максимальное число элементов в массиве */
 
int main()
{
    int c, i, j, k;
    char str[LIM];      /* массив для хранения арифметического выражения */
    char pos1[LIM];     /* массив для хранения позиций открывающих скобок */
    char pos2[LIM];     /* массив для хранения позиций закрывающих скобок */
    
    i = j = k = 0;
    while ((str[i] = getchar()) != '\n') {
        if ( str[i] == '(' )
            pos1[j++] = i;
        else
            if ( str[i] == ')' )
                pos2[k++] = i;
        i++;
    }
    str[i] = pos1[j] = pos2[k] = '\0';
    
    int sum = 0;
    j = k = 0;
    for (i = pos1[j]; pos1[j] != '\0' && pos2[k] != '\0'; j++, k++)
        /* здесь нужно вычислять значения в скобках, т. е. между pos1[j] и pos2[k]
        и присваивать их в переменную sum
        sum += выражение между pos1[j] и pos2[k], но пробелема в том, что даже
        функция atoi() не сможет вычленить числа из разных элементов массива */;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2014, 20:11
Ответы с готовыми решениями:

Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков
Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–»). Выражение...

Напишите программу, которая вычисляет выражение, состоящее из чисел, знаков (допускаются знаки «+», «–», «*» и
Напишите программу, которая вычисляет выражение, состоящее из чисел, знаков (допускаются знаки «+», «–», «*» и «/») и круглых скобок....

Распарсить арифметическое выражение и вывести результат
добрый день, нужно написать программу, на ввод которой посылается математическое выражение (например:&quot;4*(5-2/3)&quot;)а на выводе...

31
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
05.11.2014, 20:26
Dennis Ritchie, для этого есть даже целый алгоритм, для вычисления арифметических выражений. Попробуйте набрать в поиске "Разбор алгебраических выражений" или что-то в этом роде. Реализация довольно простая, используются стеки, будет проблема только в разбиении строки на отдельные слова (число, скобка или знак)
http://master.virmandy.net/per... aya-zapis/ вот, например. Или этот алгоритм не подойдёт?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
05.11.2014, 20:34  [ТС]
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Реализация довольно простая, используются стеки
Не, со стеками в C++ я ещё не сталкивался, если только в assembler'е.
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
будет проблема только в разбиении строки на отдельные слова (число, скобка или знак)
Проблем разбиения на знаки и скобки нет, а вот как разбить на числа - это уже трудно сказать.

Добавлено через 4 минуты
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Или этот алгоритм не подойдёт?
Подойдёт (там даже знаки деления и умножения рассматриваются), но я не разберусь в этом алгоритме...
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
06.11.2014, 09:14
Dennis Ritchie, стеки вы можете использовать и стандартные, а вот разбиение сильно трудного не предствляет, все числа будут поделены знаками. Сейчас вам напишу код

Добавлено через 25 минут
Dennis Ritchie,
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
bool parseLine(string text, vector <string> &v) {
    int i = -1; // Счётчик
    string buff; // Для сохранения чисел
    while ((++i) < text.length()) {
        if (text[i] == ' ') continue; // Пробелы пропускаем
        if (text[i] == ')' || text[i] == '(' || text[i] == '+' || text[i] == '-') { // Знаки добавляем сразу же
            if (buff != "") {
                v.push_back(buff);
                buff = "";
            }
            buff = text[i];
            v.push_back(buff);
            buff = "";
        }
        else if (text[i] <= '9' && text[i] >= '0') buff += text[i]; // Число запихиваем в буфер
        else return false;
    }
    if (buff != "") v.push_back(buff);
    return true;
} 
 
int main(int argc, char *argv[])
{
    vector <string> res;
    parseLine("800+6-(4-2)", res);
    for (int i = 0; i < res.size(); ++i)
        cout << res[i] << endl;
    return 0;
}
1
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
06.11.2014, 11:43  [ТС]
А зачем эта строка:
C++
1
if (text[i] == ' ') continue; // Пробелы пропускаем
В условии же написано:
Выражение не содержит каких-либо других символов, в частности, пробелов.
Спасибо за код. Теперь буду придумывать, как всё это посчитать...
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
06.11.2014, 12:54
Dennis Ritchie, ну можно и не включать эту строку, если известно точно, что пробелов не будет. А дальше переводите выражение в постфиксную форму и вычисляете. Если не ошибаюсь, по схеме "встретил число - положил в стек, встретил знак - вытащил из стека 2 числа, сложил результат в стек"
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
06.11.2014, 13:22  [ТС]
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Если не ошибаюсь, по схеме "встретил число - положил в стек, встретил знак - вытащил из стека 2 числа, сложил результат в стек"
Я ещё недостаточно знаю синтаксис C. Я прочитал только 80 страниц K&R из 180-ти. Наверное, я рано начал пытаться решать эту задачу. Нужно сначала хотя бы дочитать книгу до конца, а потом уже пробовать...
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
06.11.2014, 14:20
Dennis Ritchie, стек - класс в С++, реализующий механизм "положил - вытащил", причем достается первым всегда последний положенный туда объект (число, строка, указатель и тд). Это не входит в состав языка
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
06.11.2014, 16:38  [ТС]
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
число, строка, указатель и тд
Ну вот, а ещё не умею работать с указателями.
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
стек - класс в С++, реализующий механизм "положил - вытащил"
Поэтому я и закончу сначала изучение C, а потом возьмусь уже за C++, т. е. последовательно. Просто я хотел как-нибудь реализовать эту задачу без стека, более элементарными методами.
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
06.11.2014, 18:36
Dennis Ritchie, как знаете. Более элементарным методом, чем через стеки, вряд ли получится решить...
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
06.11.2014, 22:03
Лучший ответ Сообщение было отмечено Dennis Ritchie как решение

Решение

Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Более элементарным методом, чем через стеки, вряд ли получится решить...
Ну, рекурсивно можно:
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
/////////////////////////////////////////////////////////////////////////////////////////
//Выведите значение заданного арифметического выражения, состоящего из чисел, скобок 
//и знаков сложения и вычитания.
//
//ФОРМАТ ВХОДНЫХ ДАННЫХ
//
//В первой строке входного файла задано выражение, состоящее из чисел, скобок и знаков 
//бинарных операций. Каждое число в выражении — это целое неотрицательное число в промежутке 
//от 0 до 10000, включительно, записанное без ведущих нулей. Скобки бывают открывающие 
//(`(') и закрывающие (`)'). Операции задаются символами `+' и `-'. Гарантируется, что 
//заданное выражение математически корректно, и результаты всех промежуточных операций — 
//целые числа, не превышающие по модулю 10000. Выражение не содержит каких-либо других 
//символов, в частности, пробелов. Длина выражения не меньше 1 и не больше 1000 символов
//Учтите, что операции при отсутствии скобок выполняются слева направо. Например, 
//выражение a - b - c вычисляется как (a - b) - c.
//
//ФОРМАТ ВЫХОДНЫХ ДАННЫХ
//
//В первой строке выходного файла выведите одно число — значение заданного выражения.
//
//ПРИМЕРЫ
//
//evalpm.in     evalpm.out
//48-13     35
//5-(52+3)  -50
/////////////////////////////////////////////////////////////////////////////////////////
#include <cctype>
#include <iostream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
int     calc_and_get_result( T_str  &  expr );
/////////////////////////////////////////////////////////////////////////////////////////
int     calc_and_get_expr_in_brackets( T_str  &  expr )
{
    expr.erase( 0, 1 );
    int     result  =   calc_and_get_result( expr );
    expr.erase( 0, 1 );
    return  result;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     calc_and_get_operand( T_str  &  expr )
{
    static  const   char    LEFT_BR     =   '(';
    int                     result      =   0;
 
    if  (
            isdigit (
                        expr.front()
                    )
        )
    {
        std::istringstream  ssin( expr );
        ssin    >>  result;
        ssin    >>  expr;
    }
    else
    {
        if  (
                expr.front()    ==  LEFT_BR
            )
        {
            result  =   calc_and_get_expr_in_brackets( expr );
        }
    }//else
 
    return  result;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool    successfully_read_and_set_operation
    (
        T_str   &   expr,
        char    &   operatoin
    )
{
    bool    bool_res    =       expr.front()    ==  '+'
                            ||  expr.front()    ==  '-';
 
    if( bool_res )
    {
        operatoin   =   expr.front();
        expr.erase( 0, 1 );
    }
 
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     calc_and_get_result( T_str  &  expr )
{
    int     result      =   calc_and_get_operand( expr );
    char    operatoin   =   0;
 
    while   (
                    !expr.empty()
 
                &&  successfully_read_and_set_operation
                        (
                            expr,
                            operatoin
                        )
            )
    {
        switch( operatoin )
        {
        case    '+':
            result  +=  calc_and_get_operand( expr );
            break;
 
        case    '-':
            result  -=  calc_and_get_operand( expr );
            break;
 
        default:
            ;
        }
    }//while
 
    return  result;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    for(;;)
    {
        std::cout   <<  "Введите арифметическое выражение с натуральными операндами, "
                    <<  std::endl
                    <<  "знаками + и - и круглыми скобками:"
                    <<  std::endl;
 
        T_str   expr;
        std::cin    >>  expr;
 
        std::cout   <<  calc_and_get_result( expr )
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
1
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
06.11.2014, 22:59  [ТС]
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, рекурсивно можно:
Как всегда, круто!!! Решение даже тестирующую систему прошло с первого раза.

Если это нетрудно, то покажите, пожалуйста, решение со стеком...
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
06.11.2014, 23:08
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
решение со стеком...
Это с переводом в обратную польскую запись что ли? Там алгоритм не такой очевидный. Не так давно я тут публиковал решение парсинга логических выражений, там он применяется.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
06.11.2014, 23:36  [ТС]
Цитата Сообщение от Mr.X Посмотреть сообщение
Это с переводом в обратную польскую запись что ли? Там алгоритм не такой очевидный.
Как оказалось, он весьма очевидный...

Не по теме:

Ещё совет - не надо так писать:

C++
1
<<  std::endl;
Лучше писать так:
C++
1
<< '\n';
Ну или добавлять такую строку в начало программы (и тогда писать просто "endl" без "std::"):
C++
1
#define endl '\n'
Причина - скорость выполнения программы.

0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
07.11.2014, 07:03
Dennis Ritchie, endl это более обстоятельная обработка переноса строки, нежели \n (насколько я помню). Так что если не нужно выжимать максимум производительности, лучше всё-таки использовать endl
Вот что нашёл тут:
Распространено мнение, что строки:

cout<<"String\n";
и

cout<<"String"<<endl;
эквивалентны.

Это не так. Команда endl:

Записывает в поток (stream) символ перевода строки;
Выполняет flush для буферизированного потока.
В некоторых случаях это может привести к существенной потере производительности. Например, программа выводит большой объем данных. Если её вывод перенаправить в файл, то после каждой строки данные будут записываться на диск.
0
07.11.2014, 08:51

Не по теме:

Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Ну или добавлять такую строку в начало программы (и тогда писать просто "endl" без "std::"):
препроцессор ничего не знает о std::, областях видимости и других прелестях, он тупо заменяет подстроки на соответствующие ему значения
Посмотрите сами:
C++
1
2
3
4
5
6
7
#include <iostream>
#define endl '\n'
 
int main() {
    std::cout << "test" << std::endl;
    return 0;
}
http://ideone.com/XeIAqs
если очень хочется, то лучше объявить константу а на define
C++
1
const char endl = '\n';

0
07.11.2014, 10:52  [ТС]

Не по теме:

Цитата Сообщение от Cra3y Посмотреть сообщение
препроцессор ничего не знает о std::, областях видимости и других прелестях, он тупо заменяет подстроки на соответствующие ему значения
Посмотрите сами:
Так я и написал, что нужно писать "endl" без "::std". Конечно, он просто тупо заменяет подстроки на соответствующие ему значения.
Поэтому можете писать так:
C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
#define endl '\n'
 
int main() {
    cout << "test" << endl;
    return 0;
}
А лучше всего так:
C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
 
int main() {
    cout << "test" << '\n';
    return 0;
}
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Так что если не нужно выжимать максимум производительности, лучше всё-таки использовать endl
По-моему, производительность важнее:
C
1
2
3
4
5
6
#include <stdio.h>
 
int main() {
    printf("test\n");
    return 0;
}
Так будет ещё быстрее :)

0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
07.11.2014, 11:29
Dennis Ritchie, имхо, при текущей производительности компьютеров гораздо важнее безопасность, нежели -0.01 секунда ко времени работы программы. Такое никто попросту не заметит. Кстати, слышал о том, что разницы в скорости printf и streams почти нет

Добавлено через 14 минут
Хотя насчёт безопасности я был не особо прав, эта функция полезна лишь в некоторых случаях. Но мне куда больше нравится endl, как-то приличнее выглядит
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
07.11.2014, 13:28  [ТС]
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
Такое никто попросту не заметит.
Тестирующая система всё заметит
Прочитайте комментарии в этой теме, тогда поймёте, насколько критичным может быть использование "endl" вместо "\n":
Бинарный поиск. Мутанты
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
07.11.2014, 15:22
Dennis Ritchie, пишите тогда на асме, чего уж мелочиться то? До сих пор я не встретил хоть какой-нибудь весомой доли программ, которые требовали бы максимальной производительности. И среди них почти все программы требовали именно быстрой обработки данных, где печать на экран не являлась главенствующей. Так что я не знаю... Если вам лишь бы побыстрее, то не ограничивайтесь выводом строк, зажимайте всё по максимуму, оптимизацию поставьте самую жёсткую. Мне же, например, без разницы, +-0.01 секунды роли никак не сыграет в 99.9% программ, которые приходится писать, а вот endl выглядит куда приятнее, чем \n.
Спорить не буду. Ваше мнение услышал, но останусь при своём.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2014, 15:22
Помогаю со студенческими работами здесь

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

Вычислить выражение, состоящее из трех чисел и двух знаков
Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/»). Выражение...

Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков
Pascal ABC Буду очень благодарен, если поможете с решением программы) вот само задание: &quot;Напишите программу, которая вычисляет...

Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков
Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–»). Выражение...

Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/»)
Здравствуйте. Прошу помощи. Уровень C. Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru