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

Как разбить программу на функции?

07.04.2018, 14:52. Показов 3959. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<string> str;
    setlocale(LC_ALL, "ru");
    string path = "myfile.txt";
    ifstream fout;
    fout.open(path);
 
    int t = 0;
 
    if (!fout.is_open())
    {
        cout << "Ошибка открытия файла!" << endl;
        system("pause");
        return 0;
    }
 
    cout << "Содержание файла: \n";
    str.push_back("");
    while (!fout.eof())
    {
        fout >> path;
        str[str.size() - 1] += path;
        if (path[path.size() - 1] == '!' || path[path.size() - 1] == '.' || path[path.size() - 1] == '?') {
            cout << str[str.size() - 1] << endl;
            str.push_back("");
        }
        else str[str.size() - 1] += ' ';    
    }
    str.resize(str.size() - 1);
 
    cout << "\nЗапись прошла успешно!\t" << endl;
    fout.close();
 
 
    ofstream fin;
    path = "res.txt";
    fin.open(path);
    fin.clear();
    cout << "Файл для записи открыт или создан!" << endl;
 
    for (int i = str.size()-1; i >= 0; i--)
        fin << str[i] <<endl;
    cout << "Результат записан" << endl;
    fin.close();
 
    system("pause");
    return 0;
}
Подскажите, как разбить на меленькие функции? Можно хотя бы одну функцию для примера?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2018, 14:52
Ответы с готовыми решениями:

Как разбить программу на функции ?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; const int n=10; int _tmain(int argc, _TCHAR*...

Как разбить программу на функции ?
#include &lt;iostream&gt; using namespace std; struct student{ char FIO; int ball; }; void main(){ int n; ...

Дайте совет, как разбить данную программу на функции?
(в задании нужно было посчитать сумму ряда) #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; #include...

21
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
07.04.2018, 14:57
noname12345, подумай сколько отдельных задач решает твоя программа, каждую задачу оберни в функцию и вызывай их по мере необходимости.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
07.04.2018, 14:59
Прежде чем бить на функции нужно определиться, что именно будет выполнять функция, а потом переносить тот код, который отвечает за это в эту функцию.
Пример функции:
C++
1
2
3
4
5
6
7
8
int sum(int a, int b) { // Функция складывает два числа
    return a + b;
}
 
int main() {
    sum(5, 6); //вычисляем 5 + 6
    return 0;
}
0
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
08.04.2018, 11:58  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
каждую задачу оберни в функцию и вызывай их по мере необходимости.
Ну можно поделить на четыре функции: 1) 13-23 строка, 2) 25 - 40 строка, 3) 43 - 46, 4) 47 - 52 строка
Я просто не могу понять синтаксис, пишу, но выдает ошибки
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
08.04.2018, 12:06
Ну вот смотри, есть например задача: Купить огурец. Для того, чтобы купить огурец, нужно
1.одеться
2.прийти в магазин
3.взять огурец,
4.подойти к кассе, оплатить покупку
5. вернуться домой.
Это и есть подзадачи. Так же эти подзадачи можно разбивать ещё и ещё, если что-то сложное есть.
Обычно такие вот подзадачи используют в программировании, чтобы не писать одно и то же по 20 раз. Например, можно сделать функцию рисования квадратика, и использовать её везде.
В общем ищи, что у тебя такое однотипное и вставляй в функцию.

И да, когда я учил C++, ещё сталкивался с таки примерно
C++
1
2
3
4
5
6
7
8
9
10
11
void something(){
// ввод чисел
cout << "введите чиссло а:" << endl;
cout << "введите число б:" << endl;
...
 
//выводим
cout << a+b;
cout << a*b;
//
}
Эти 2 пункта можно занести в функкции, но лучше просто раазделить ентером. Думаю всё понятно, дальше проблемм не возникнет

Чтобы не путать одни задачи с другими, их разделяют файлами
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
08.04.2018, 20:11
noname12345, Если у тебя в коде нет последовательностей, которые повторяются, тогда нет смысла выносить их в функции. Функции нужны для того, чтоб не повторять код, т.е. если какая-то последовательность строк кода у тебя в программе повторяется, тогда есть смысл, либо запихнуть это в цикл (если повторения несколько раз подряд), либо написать функцию, если повторения не подряд
Давай на примерах: У меня есть массив чисел int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 }; которые я хочу попарно суммировать и вывести, я могу написать такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main(){
    int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
    int sum;
    
    sum = arr[0][0] + arr[0][1];
    cout << sum << endl;
    sum = arr[1][0] + arr[1][1];
    cout << sum << endl;
    sum = arr[2][0] + arr[2][1];
    cout << sum << endl;
    sum = arr[3][0] + arr[3][1];
    cout << sum << endl;
    sum = arr[4][0] + arr[4][1];
    cout << sum << endl;
    return 0;
}
Здесь явно видно, что можно задействовать цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main(){
    int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
    int sum;
    
    for (int i = 0; i < 5; i++) {
        sum = arr[i][0] + arr[i][1];
        cout << sum << endl;
    }
    return 0;
}
Код выполняет тоже самое но он уже короче, удобней читается и если нам что-то нужно изменить, например не суммировать, а вычесть, то не нужно переписывать все 5 строчек. Здесь мы использовали цикл, т.к. у нас повторения идут подряд.
А что если наш код выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main(){
    int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
    int sum;
    
    sum = arr[0][0] + arr[0][1];
    cout << sum << endl;
    // Делаем что-то еще
    sum = arr[3][0] + arr[3][1];
    cout << sum << endl;
    // Делаем что-то еще
    sum = arr[4][0] + arr[4][1];
    cout << sum << endl;
    // Делаем что-то еще
    sum = arr[2][0] + arr[2][1];
    cout << sum << endl;
    return 0;
}
Вот здесь нам на помощь и приходит функция, назовем её sumAndPrint и тогда наша программа будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
void sumAndPrint(int a, int b) {
    int sum = a + b;
    cout << sum << endl;
}
 
int main(){
    int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
    
    sumAndPrint(arr[0][0], arr[0][1]);
    // Делаем что-то еще
    sumAndPrint(arr[3][0], arr[3][1]);
    // Делаем что-то еще
    sumAndPrint(arr[4][0], arr[4][1]);
    // Делаем что-то еще
    sumAndPrint(arr[2][0], arr[2][1]);
    return 0;
}
Т.е. наш код стал намного меньше, в нашем примере это не сильно заметно, так как в функцию мы вынесли всего 2 строки, но ведь мы могли вынести и 20 строк кода, тогда наша программа сократится значительно!
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.04.2018, 20:16
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Если у тебя в коде нет последовательностей, которые повторяются, тогда нет смысла выносить их в функции.
Смысл выносить код в функции не только ради того что бы избежать дублирование кода, но еще и в том что бы код был более выразителен в плане декомпозиции. Облегчается понимание кода даже без комментариев из за того что функциям даются правильные имена.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
08.04.2018, 20:18
Цитата Сообщение от _stanislav Посмотреть сообщение
но еще и в том что бы код был более выразителен в плане декомпозиции
Ну давайте не будем забивать голову новичкам этим, он не может функцию написать, а вы ему про эстетику ИМХО
1
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
08.04.2018, 21:24  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
которые повторяются, тогда нет смысла выносить их в функции.
Ну я понимаю, у меня просто есть задание, разбить программу и когда пытаюсь разбить получаю поток ошибок
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.04.2018, 21:51
Цитата Сообщение от noname12345 Посмотреть сообщение
когда пытаюсь разбить получаю поток ошибок
Возьми учебник, найди раздел функции и начинай учиться.Литература C++
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
08.04.2018, 21:59
noname12345, Ну хотя бы код выложи с попытками
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,354
09.04.2018, 04:15
Все операции ввода/вывода обычно выносят в отдельные функции
0
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
11.04.2018, 16:02  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
, Ну хотя бы код выложи с попытками
Написал какой-то бред, пересмотрел кучу литературы и еще больше запутался, поясни, пожалуйста
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
 
void foutopen(ifstream fout, string path)
{
    ifstream fout;
    fout.open(path);
 
    if (!fout.is_open())
    {
        cout << "Ошибка открытия файла!" << endl;
        system("pause");
    }
}
 
int main()
{
 
    setlocale(LC_ALL, "ru");
    vector<string> str;
    string path = "myfile.txt";
    foutopen(fout,path);
    cout << "Содержание файла: \n";
    str.push_back("");
    while (!fout.eof())
    {
        fout >> path;
        str[str.size() - 1] += path;
        if (path[path.size() - 1] == '!' || path[path.size() - 1] == '.' || path[path.size() - 1] == '?') {
            cout << str[str.size() - 1] << endl;
            str.push_back("");
        }
        else str[str.size() - 1] += ' ';
    }
    str.resize(str.size() - 1);
 
    cout << "\nЗапись прошла успешно!\t" << endl;
    fout.close();
 
 
    ofstream fin;
    path = "res.txt";
    fin.open(path);
    fin.clear();
    cout << "Файл для записи открыт или создан!" << endl;
 
    for (int i = str.size() - 1; i >= 0; i--)
        fin << str[i] << endl;
    cout << "Результат записан" << endl;
    fin.close();
 
    system("pause");
    return 0;
}
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
12.04.2018, 09:50
noname12345, Весь код не проверял, только то, что связано с функцией. Смотри, у тебя функция принимает два параметра, но тут же ты внутри функции переопределяешь fout в строчке 12. Зачем? эту строчку тебе нужно перенести в строчку 24.
Далее, fout в функции ты принимаешь по значению, а значит передается копия и в строчке 31 ты не сможешь получить данные из файла. Должно быть так void foutopen(ifstream &fout, string path)
Третье, у тебя, по логике, функция открывает файл и проверяет его на корректность открытия, а дальше то ни чего полезного не происходит, даже если ты не смог открыть файл, ты все равно, пытаешь его прочитать в 33 строчке. Т.е. твоя функция должна возвращать результат, смогла ли она открыть файл. Т.е. твоя функция должна выглядеть так:
C++
1
2
3
4
5
6
7
bool foutopen(ifstream &fout, string path){
    fout.open(path);
    if (!fout.is_open())    {
        cout << "Ошибка открытия файла!" << endl;
        return false;
    } else return true;
}
А вызывать её в 28 строчке должен так:
C++
1
if(!foutopen(fout, path)) return 1;
Если не смог открыть, значит завершаем выполнение программы.
1
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
15.04.2018, 13:15  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Если не смог открыть, значит завершаем выполнение программы.
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
 
bool foutopen(ifstream &fout, string path) {
    fout.open(path);
    if (!fout.is_open()) {
        cout << "Ошибка открытия файла!" << endl;
        return false;
    }
    else return true;
}
void outputofcontents(ifstream &fout, string path, vector<string> str)
{
    while (!fout.eof())
    {
        fout >> path;
        str[str.size() - 1] += path;
        if (path[path.size() - 1] == '!' || path[path.size() - 1] == '.' || path[path.size() - 1] == '?') {
            cout << str[str.size() - 1] << endl;
            str.push_back("");
        }
        else str[str.size() - 1] += ' ';
    }
    str.resize(str.size() - 1);
    cout << "\nЗапись прошла успешно!\t" << endl;
}
 
 
int main()
{
    setlocale(LC_ALL, "ru");
    ifstream fout;
    vector<string> str;
    string path = "myfile.txt";
    cout << "Содержание файла: \n";
    str.push_back("");
    if (!foutopen(fout, path)) return 1;
    outputofcontents(ifstream  &fout, string path); // ????
 
 
    fout.close();
 
 
    ofstream fin;
    path = "res.txt";
    fin.open(path);
    fin.clear();
    cout << "Файл для записи открыт или создан!" << endl;
 
    for (int i = str.size() - 1; i >= 0; i--)
        fin << str[i] << endl;
    cout << "Результат записан" << endl;
    fin.close();
 
    system("pause");
    return 0;
}
Не подскажешь что нужно написать в списке аргументов в 44 строчке?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
15.04.2018, 14:25
Цитата Сообщение от noname12345 Посмотреть сообщение
Не подскажешь что нужно написать в списке аргументов в 44 строчке?
Ну, во-первых, при вызове функции типы данных передаваемых в функцию указывать нельзя.
Второе, у тебя функция принимает три параметра, а передаешь два.
Третье, &fout здесь ты передаешь адрес переменной а не саму переменную.
В итоге вызов должен быть таким:
C++
1
outputofcontents(fout, path, str);
1
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,354
15.04.2018, 16:48
Цитата Сообщение от Avaddon74 Посмотреть сообщение
ifstream &fout
забавно...
посмотри этот код, ни ничего не делает, кроме того, что переливает содержимое из файла в файл. Все i/o операции вынесены в универсальные функции. Они работают с вектором строк, который можно впоследствии преобразовать, как угодно. Для этого можно написать еще одну функцию по аналогии с теми, что уже есть. Важно, что переменные живут в своем именном пространстве и не прыгают из функции в функцию

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
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
bool LoadFromTextFile (vector<string> &ss, string fn) {
    
    ifstream fin(fn);
    
    if (!fin.is_open()) 
 
    return false;
 
    else {
        
    string str;   
       
        while(getline(fin, str)) { 
    
        //cout << str << endl;  
        
        ss.push_back(str);
    }
    
        fin.close();
        
        return true;
    }
}
 
bool SaveToTextFile (vector<string> &ss, string fn) {
    
    ofstream fout(fn);
    
    if (!fout.is_open())
    
    return false;
 
    else {
 
        for (int i = 0; i < ss.size(); i++)
             fout << ss[i] << endl;
 
        fout.close();
 
        return true;
    }
    
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    vector<string> strings; 
    
    string in_file_name  = "strings.txt";
    string out_file_name = "strings2.txt";    
    
    /* читаем в вектор из файла */ 
    if (!LoadFromTextFile(strings, in_file_name))
    
        cout << "Ошибка открытия файла " << in_file_name << "!" << endl;
        
    else {
        
        /* преобразуем строки в векторе strings */
        
        /* записываем вектор в файл */
        if (SaveToTextFile (strings, out_file_name))
            cout << "Результат записан в файл " << out_file_name << endl;
    }
    
        
    system("pause");
    return 0;
}
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
15.04.2018, 17:06
Цитата Сообщение от vlisp Посмотреть сообщение
Важно, что переменные живут в своем именном пространстве и не прыгают из функции в функцию
А такой вариант не я ТСу предложил, а он сам выбрал.
Кто я такой чтоб это оспаривать ) Если вы прочитаете эту тему с самого начала, то поймете, что у ТС что-то свое на уме, а то что ему советуют (по алгоритмам) он не слушает. Ему объясняешь, а он повторно задает те же вопросы и говорит что ни чего не понял. Я уже просто забил на это, пусть пишет как хочет, я просто указываю на грамматические ошибки.
0
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
15.04.2018, 19:06  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
В итоге вызов должен быть таким:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
 
bool foutopen(ifstream &fout, string path) {
    fout.open(path);
    if (!fout.is_open()) {
        cout << "Ошибка открытия файла!" << endl;
        return false;
    }
    else return true;
}
void outputofcontents(ifstream &fout, string path, vector<string> str)
{
    while (!fout.eof())
    {
        fout >> path;
        str[str.size() - 1] += path;
        if (path[path.size() - 1] == '!' || path[path.size() - 1] == '.' || path[path.size() - 1] == '?') {
            cout << str[str.size() - 1] << endl;
            str.push_back("");
        }
        else str[str.size() - 1] += ' ';
    }
    str.resize(str.size() - 1);
    cout << "\nЗапись прошла успешно!\t" << endl;
    fout.close();
}
 
void finopen(ofstream &fin, string path, vector<string> str)
{
    path = "res.txt";
    fin.open(path);
    fin.clear();
    cout << "Файл для записи открыт или создан!" << endl;
 
    for (int i = str.size() - 1; i >= 0; i--)
        fin << str[i] << endl;
    cout << "Результат записан" << endl;
    fin.close();
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    ifstream fout;
    vector<string> str;
    string path = "myfile.txt";
    cout << "Содержание файла: \n";
    str.push_back("");
 
    if (!foutopen(fout, path)) return 1; // 1 функция
 
    outputofcontents(fout, path, str); // 2 функция
 
    ofstream fin;
    finopen(fin, path, str); // 3 функция
 
    system("pause");
    return 0;
}
Ну более менее понял синтаксис функций, спасибо)
Только вот не могу понять почему файл для вывода пуст после выполнения программы
0
 Аватар для vlisp
1063 / 984 / 153
Регистрация: 10.08.2015
Сообщений: 5,354
15.04.2018, 20:11
Цитата Сообщение от noname12345 Посмотреть сообщение
не могу понять почему
напиши комментарий к каждой строчке программы. обычно это помогает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2018, 20:11
Помогаю со студенческими работами здесь

Разбить программу на 2 функции с++
----------------------------------------------------------------- Здравствуйте. Имеется программа написанная на с++ Помогите...

Разбить программу на функции
Нужно разбить программу на функции: // Структура индив.cpp: определяет точку входа для консольного приложения. // #include...

Разбить программу на функции
Помогите пожалуйста. Нужно разбить программу на функции. #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; ...

Разбить программу на функции
Как эту задачу разбить на функции? #include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstdio&gt; #include&lt;ctime&gt; ...

Разбить программу на функции
объясните, пожалуйста, как эту программу разбить на три функции: ввод, обработка, вывод. глобальные переменные использовать нельзя. в таком...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru