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

Разработать схемы алгоритмов, структуру и текст программы для обработки структурных данных текстового и бинарного файлов

04.07.2023, 13:00. Показов 1545. Ответов 11

Студворк — интернет-сервис помощи студентам
Не удается создать временный файл
Всё перепробовал, ничего не получается. Прошу помощи!
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#include <iostream>
#include <iomanip>
#include <fstream>
#include <conio.h>
#include <cstring>
#include <string>
#include <stdio.h>
 
using namespace std;
 
// объявление структурного типа
struct stud {
    char fio[20];
    char gr[7];
    int no;
    double rs;
};
 
// внешняя структура
stud st;
 
// объявление файловых потоков
ifstream fin;
ofstream fout;
fstream fbin;
 
const int FIO_FIELD = 0;
const int GR_FIELD = 1;
const int NO_FIELD = 2;
const int RS_FIELD = 3;
const int CONTROL_FIELD = FIO_FIELD;
 
char* getField(stud* st, int field) {
    static char empty[] = " ";
    switch (field) {
    case FIO_FIELD:
        return st->fio;
    case GR_FIELD:
        return st->gr;
    case NO_FIELD:
        return (char*)&st->no;
    case RS_FIELD:
        return (char*)&st->rs;
    default:
        return empty;
    }
}
 
void setField(stud* st, int field, const char* value) {
    switch (field) {
    case FIO_FIELD:
        strncpy_s(st->fio, value, sizeof(st->fio));
        break;
    case GR_FIELD:
        strncpy_s(st->gr, value, sizeof(st->gr));
        break;
    case NO_FIELD:
        st->no = atoi(value);
        break;
    case RS_FIELD:
        st->rs = atof(value);
        break;
    default:
        break;
    }
}
//функция, которая удаляет пробельные символы в начале и конце строки
void trim(string& str) {
    // удаляем пробелы и символы табуляции в начале строки
    size_t startpos = str.find_first_not_of(" \t");
    if (startpos != string::npos) {
        str.erase(0, startpos);
    }
    // удаляем пробелы и символы табуляции в конце строки
    size_t endpos = str.find_last_not_of(" \t");
    if (endpos != string::npos) {
        str.erase(endpos + 1);
    }
}
// функция удаления пробелов в строке
void filtr(char* str) {
    int i = 0;
    while (str[i] == ' ') {
        i++;
    }
    if (i > 0) {
        memmove(str, str + i, strlen(str) + 1 - i);
    }
    i = strlen(str) - 1;
    while (i >= 0 && str[i] == ' ') {
        str[i] = '\0';
        i--;
    }
}
 
// перегрузка операции вывода структурных данных в поток
ostream& operator<<(ostream& out, stud& st) {
    out.setf(ios::left, ios::adjustfield);
    out << setw(20) << st.fio << setw(7) << st.gr << setw(8) << st.no << setw(7) << setprecision(2) << fixed << st.rs << endl;
    return out;
}
 
// перегрузка операции ввода структурных данных из потока
istream& operator>>(istream& in, stud& st) {
    in.getline(st.fio, 21);
    filtr(st.fio);
    in.getline(st.gr, 8);
    filtr(st.gr);
    in >> st.no >> st.rs;
    in.ignore(80, '\n');
    return in;
}
 
void fix_file(char* bin_file) {
    // открываем бинарный файл с записями структурных данных в режиме чтения-записи
    fstream bfile(bin_file, ios::in | ios::out | ios::binary);
    if (!bfile.is_open()) {
        cout << "Error opening binary file" << endl;
        return;
    }
    // создаем новый рабочий файл для записи данных в бинарном режиме
    fstream wfile("temp1.bin", ios::binary);
    if (!wfile.is_open()) {
        cout << "Error creating temp file" << endl;
        return;
    }
    // организуем цикл, в котором считываем по одной записи из бинарного файла в структуру st
    while (bfile.read((char*)&st, sizeof(st))) {
        // если значение контрольного поля в структуре st отличается от характерного значения (пустой строки), записываем структуру в рабочий файл
        if (strcmp("", getField(&st, CONTROL_FIELD)) != 0) {
            wfile.write((char*)&st, sizeof(st));
        }
    }
    // устанавливаем указатель в бинарном файле на начало
    bfile.seekg(0, ios::beg);
    // очищаем файл
    bfile.close();
    bfile.open(bin_file, ios::out | ios::trunc | ios::binary);
    bfile.close();
    bfile.open(bin_file, ios::in | ios::out | ios::binary);
    // копируем данные из рабочего файла в бинарный файл
    wfile.seekg(0, ios::beg);
    while (wfile.read((char*)&st, sizeof(st))) {
        bfile.write((char*)&st, sizeof(st));
    }
    // закрываем файлы
    bfile.close();
    wfile.close();
    // удаляем рабочий файл
    remove("temp1.bin");
}
// функция создания текстового файла данных
void sozdat(char* file) {
    fout.open(file);
    while (true) {
        cout << "Введите данные одной структуры" << endl;
        cin >> st;
        fout << st;
        cout << "Нажмите любую клавишу, если хотите продолжить запись и 0 – , если нет" << endl;
        char c = _getch();
        if (c == '0') {
            break;
        }
    }
    fout.close();
}
 
void createfile(const char* file) {
    fout.open(file);
    cout << "Введите данные поиска:" << endl;
    cin >> st;
    fout << st;
    cout << "Файл поиска создан";
    fout.close();
}
 
// функция создания бинарного файла
void create_binary(char* text_file, char* bin_file) {
    fin.open(text_file);
    fbin.open(bin_file, ios::out | ios::binary);
    while (fin >> st) {
        fbin.write((char*)&st, sizeof(st));
    }
    fin.close();
    fbin.close();
}
 
// функция удаления структур из бинарного файла по заданному полю
void delete_structures(char* bin_file, char* search_file) {
    // открываем файл с данными для удаления в режиме чтения
    ifstream sfile(search_file);
    if (!sfile.is_open()) {
        cout << "\nError opening search file" << endl;
        return;
    }
    // открываем бинарный файл с записями структурных данных в режиме чтения-записи
    fstream bfile(bin_file, ios::in | ios::out | ios::binary);
    if (!bfile.is_open()) {
        cout << "\nError opening binary file" << endl;
        return;
    }
    // создаем новый рабочий файл для записи данных в бинарном режиме
    ofstream wfile("temp.bin", ios::binary);
    if (!wfile.is_open()) {
        cout << "Error creating temp file" << endl;
        return;
    }
    // объявляем переменную, в которую будут читаться данные для удаления
    string search_value;
    // организуем цикл, пока не будет достигнут конец файла данных для удаления
    while (getline(sfile, search_value)) {
        // удаляем из строки пробелы, ведущие и замыкающие
        trim(search_value);
        // если значение для удаления отсутствует, переходим к следующей итерации цикла
        if (search_value.empty()) {
            cout << "\nNo search value provided" << endl;
            continue;
        }
        // устанавливаем указатель в бинарном файле с записями на начало файла
        bfile.seekg(0, ios::beg);
        // организуем вложенный цикл до конца бинарного файла
        while (bfile.read((char*)&st, sizeof(st))) {
            // проверяем совпадение контрольного поля структуры st со значением для удаления
            if (strcmp(search_value.c_str(), getField(&st, CONTROL_FIELD)) == 0) {
                // присваиваем этому полю структуры st характерное значение
                setField(&st, CONTROL_FIELD, "");
                // перезаписываем откорректированную структуру на старое место в бинарный файл
                bfile.seekp(sizeof(st), ios::cur);
                bfile.write((char*)&st, sizeof(st));
            }
        }
        // выводим фразу, что таких данных в бинарном файле нет, если по завершению внутреннего цикла совпадение полей не обнаружилось
        cout << "\nNo matching records found" << endl;
    }
    // устанавливаем указатель в бинарном файле на начало
    bfile.seekg(0, ios::beg);
    // организуем цикл, в котором считываем по одной записи из бинарного файла в структуру st
    while (bfile.read((char*)&st, sizeof(st))) {
        // если значение контрольного поля в структуре st отличается от характерного значения (пустой строки), записываем структуру в рабочий файл
        if (strcmp("", getField(&st, CONTROL_FIELD)) != 0) {
            wfile.write((char*)&st, sizeof(st));
        }
    }
    // закрываем файлы
    sfile.close();
    bfile.close();
    wfile.close();
    // удаляем бинарный файл с диска
    remove(bin_file);
    // переименовываем рабочий файл в бинарный файл
    rename("temp.bin", bin_file);
    // вызываем функцию коррекции файла данных
    fix_file(bin_file);
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    char file[] = "data";
    char binaryFile[] = "data.bin";
    char filename[] = "delete.txt";
    // создание текстового файла данных
    sozdat(file);
 
    // создание бинарного файла данных
    create_binary(file, binaryFile);
 
    createfile(filename);
    // чтение значения поля последней структуры из файла для удаления
    fin.open("delete.txt");
    char search_field[40];
    fin.getline(search_field, 40);
    fin.close();
 
    // удаление структур из бинарного файла
    delete_structures(binaryFile, filename);
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2023, 13:00
Ответы с готовыми решениями:

Составить схемы алгоритмов, разработать проект формы и программы алгоритмическим языком C++ для выполнения индивидуально
Поменять местами элементы первой строки матрицы вещественных чисел размерностью 4x4 и элементы ёё неглавной диагонали. Помогите...

Составить схемы алгоритмов, разработать проект формы и программы алгоритмическим языком C++ для выполнения индивидуально
В матрицы целых чисел размерностью 3x5 заменить отрицательные элементы нулями. Пожалуйста помогите написать код ( код должен быть в виде...

Разработать приложение для создания и обработки бинарного файла, выполняющего роль «базы данных»
Требуется разработать приложение на языке программирования C# для создания и обработки бинарного файла, выполняющего роль «базы данных»....

11
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 13:16
Цитата Сообщение от TerroFe4r Посмотреть сообщение
Не удается создать временный файл
А пачиму?
0
0 / 0 / 0
Регистрация: 04.07.2023
Сообщений: 6
04.07.2023, 13:17  [ТС]
а я не знаю
вот и хочу узнать. Может из-за того, что у меня перегружено "<<". Но при этом эта перегрузка должна быть в коде по заданию.
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 13:19
Цитата Сообщение от TerroFe4r Посмотреть сообщение
Но при этом эта перегрузка должна быть в коде по заданию.
Ну ты б показал задание-то?
Не читать же, в самом деле, полотенце твоего говнокода!
0
0 / 0 / 0
Регистрация: 04.07.2023
Сообщений: 6
04.07.2023, 13:21  [ТС]
1) Объявить структурный тип, для описания характеристик объекта вашего варианта. Объявить внешнюю структуру.
Например:
C++
1
struct stud { char fio [20]; char gr [7]; unsigned int no ; float rs; } st;
2) Объявить входной, выходной и двунаправленный файловые потоки.

3) Определить функцию (filtr()) для удаления пробелов (ведущих и замыкающих) в строковых данных.

4) Объявить функцию перегрузки операций вставки в поток "<<" (операции вывода) и извлечения из потока ">>" (операции ввода) для данного структурного типа по формату текстового файла данных, который будет программно создаваться.
При перегрузке операции вывода "<< " на каждое поле структуры выделять нужное количество позиций и производить вывод с левым выравниванием, вывод полей вещественных типов производить с двумя десятичными знаками.
Операция ввода данных из потока должна учитывать форматы файла данных.
Ниже приведены функции перегрузки операций ввода / вывода для структурного типа stud:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// перегрузка операции  вывода структурных данных в стандартный 
//выходной поток и во все  выходные потоки производных типов (напр., //файловые)
#include <iostream>
#include <iomanip>
using namespace std;
…
ostream &     operator <<    ( ostream & out , stud &st) { out.setf(ios::left,ios::adjustfield);    //сбросили правое выравнивание
                                                          //установили  левое
out << setw(20) << st.fio << setw(7) << 
st.gr << setw(8) <<st.no   << setw(7)<< setprecision(2) << st.rs<<endl;
return out;
 }
//--------------------------------------------------------------------------------------
// перегрузка операции ввода данных (“>>”) из стандартного потока, 
// наследуемая и файловыми входными потоки
istream &   operator >>   (istream & in , stud &st ) {  
char T[80]; 
in.getline (st.fio, 21);  filtr( st.fio); 
in.getline ( st.gr, 8) ;  filtr(st.gr ); 
in >> st.no >>st.rs ;
in.getline (T, 80);
return in; 
 }
5) Определить функцию создания текстового файла данных sozdat().
Каждая строка файла будет содержать элементы одной из структур, вводимых с клавиатуры.
Параметр функции - имя создаваемого текстового файла. В теле функции создается файл с данным именем для записи данных в текстовом режиме.
Далее алгоритм функции строится в диалоговом режиме:
Функция запрашивает данные. С клавиатуры вводятся значения полей и заносятся в оперативную память внешней структуры st. Значения введенных строковых полей “очищаются” от ведущих и завершающих пробелов. Ввод осуществляется с помощью перегруженной операции ввода данных из стандартного потока “>>”. Затем структура “целиком” из оперативной памяти копируется в текстовой файл, используя перегруженную операцию вывода
“ <<”.
Далее следует запрос о продолжении записи в файл. В случае положительного ответа, продолжается ввод/вывод данных, в противном случае, функция завершает свою работу с помощью оператора return, при этом, перед завершением закрывается созданный файл.

C++
1
2
3
4
5
6
7
8
9
10
void sozdat (char*file) { 
fout.open(file) ;                  // fout- файловый выходной поток
m: cout<< "введите данные одной структуры"<<endl ;
cin>> st;    fout<<st;
cout<<"Нажмите любую клавишу, если хотите продолжить запись и  " 
   " 0 – , если нет" <<endl
char c ;    c=getch();
 if(c=='0') {fout.close(); return;}
else  goto m; 
 }
6) Определить функцию создания бинарного файла.
Бинарный файл содержит плотно упакованные двоичные представления структур, при этом составляющие их элементы располагаются подряд без разделения и различные структуры также друг от друга ничем не разделяются, так, например, нет деления на строки, содержащие данные одной структуры как в текстовом файле.
Параметрами функции создания являются имена файлов: текстового файла с данными и создаваемого бинарного файла.
В теле функции открывается файл данных для чтения данных в текстовом режиме.
Новый файл создается для записи данных в файл в бинарном режиме.
Организуется цикл, в котором, пока не будет достигнут конец файла данных, из файла считываются построчно данные в переменную st, используя перегруженную операцию извлечения (">>") и “целиком” st записывается в бинарный файл, используя компонентную функцию выходных потоков write () для двоичного (бинарного) вывода данных.
Функция завершается закрытием файлов.

7) Создать с клавиатуры файл для тестирования функции удаления данных из бинарного файла. В каждую строку этого файла записать значение одного из полей структур, по которому будет производиться поиск удаляемых структур в бинарном файле.
Файл следует составить следующим образом:
- значение, равное полю последней структуры бинарного файла;
- отсутствие поискового признака (пустая строка);
- значение, не совпадающее с полями структур в бинарном файле;
- значение, совпадающее с полем первой структуры бинарного файла.

8) Определить функцию удаления записей из бинарного файла. Параметрами функции являются имена файлов: бинарного файла, в котором хранятся структурные данные и файла данных – с поисковыми данными для удаления.
Открыть файлы:
- файл данных для удаления в режиме текстового чтения;
- файл с записями структурных данных (бинарный) в режиме
бинарного чтения и записи;
- новый рабочий файл для записи данных в бинарном режиме.
Объявить переменную, в которую будут читаться данные для удаления.
Организовать цикл (пока не будет достигнут конец файла данных для удаления), в теле которого выполнять следующие действия:
- считывать значение для удаления;
- если значение для удаления представляет собой символьную строку, удалить из этой строки пробелы, ведущие и замыкающие;
- если значение для удаления отсутствуют (например, это пустая строка), вывести на экран (и в файл результатов) соответствующую фразу об отсутствии поискового признака и с помощью оператора continue перейти к следующей итерации цикла;
- в противном случае, если данное для удаления не пустое значение, выполнить следующие действия:
1. установить указатель в бинарном файле с записями на начало файла;
2. организовать вложенный цикл (до конца бинарного файла), в теле которого:
- считывать по одной структуре из файла в переменную st, используя компонентную функцию входных потоков read () для двоичного (бинарного) ввода данных;
- проверять совпадение контрольного поля структуры st со значением для удаления;
- в случае совпадения, надо присвоить этому полю структуры st характерное значение, например, пустую строку (“пометить” удаляемую структуру);
- и перезаписать откорректированную структуру на старое место в бинарный файл (для этого надо переместить указатель записи в файле “назад” на одну структуру);
3. если по завершению внутреннего цикла были прочитаны все записи бинарного файла, и совпадение полей не обнаружилось, вывести фразу, что таких данных в бинарном файле нет;
Когда завершится внешний цикл, следует опять установить указатель в бинарном файле на начало.
Организовать цикл, в котором считывать по одной записи из бинарного файла в структуру st, используя функцию read () двоичного чтения. Если значение контрольного поля в структуре st отличается от характерного значения (пустой строки), следует записывать структуру в рабочий файл, используя функцию write (). Цикл выполнять до конца бинарного файла.
Закрыть бинарный и рабочий файлы. Бинарный файл удалить с диска, а рабочему файлу дать имя бинарного файла.
Вызвать функцию коррекции файла данных.

9) Функция коррекции файла данных.
Параметры функции имена файлов: текстового файла данных и бинарного файла, содержащего записи структур.
Открыть бинарный файл в режиме бинарного чтения.
Открыть файл данных для записи данных в текстовом режиме (создается новый файл)
Организовать цикл (до конца бинарного файла), в котором считывать из бинарного файла по одной записи в оперативную память структуру st и выводить эту структуру “целиком” в файл данных, используя перегруженную операцию "<<".
Закрыть файлы.
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 13:26
TerroFe4r, ни хрена се, вайнаимир!
Я там не нашёл про временный файл.
0
0 / 0 / 0
Регистрация: 04.07.2023
Сообщений: 6
04.07.2023, 13:31  [ТС]
Временный файл нужен для того, чтобы сохранить структуры, которые не подошли под фильтр, созданный в файле "delete.txt". Потому что мы сохраняем в него эти структуры, удаляем файл "data.bin". А затем этот файл переименовываем в имя удаленного файла
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 13:35
Цитата Сообщение от TerroFe4r Посмотреть сообщение
Временный файл нужен для того, чтобы сохранить структуры, которые не подошли под фильтр, созданный в файле "delete.txt".
Чо за бред? Зачем файл-то? Не знаешь, зачем оперативная память в конпуктере нужна?
0
0 / 0 / 0
Регистрация: 04.07.2023
Сообщений: 6
04.07.2023, 13:40  [ТС]
Понимаешь... Преподы бывают такими душными, что придираются к каждой запятой и могут поставить Н/A из-за того, что ты сделал задание не так, как он сказал.. Так и живём
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 13:44
Цитата Сообщение от TerroFe4r Посмотреть сообщение
из-за того, что ты сделал задание не так, как он сказал
Но в задании нет ничего про временный файл. Я поиском просмотрел - не нашёл.
0
0 / 0 / 0
Регистрация: 04.07.2023
Сообщений: 6
04.07.2023, 13:48  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
оперативная память в конпуктере нужна
как тогда решить это через оперативную память?
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5772 / 1274
Регистрация: 12.03.2015
Сообщений: 26,668
04.07.2023, 14:01
Цитата Сообщение от TerroFe4r Посмотреть сообщение
как тогда решить это через оперативную память?
Все временные данные хранить и обрабатывать в ней. А файлы использовать только для ввода и/или вывода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2023, 14:01
Помогаю со студенческими работами здесь

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

Разработать схемы алгоритмов и программы приближения функции
Здравствуйте, помогите пожалуйста переделать данную функцию в квадратичную (y=ax^2+bx+c), методом наименьших квадратов, а то что-то я...

Разработать схемы алгоритмов и программы приближения функции
Здравствуйте, помогите пожалуйста переделать данную функцию в квадратичную (y=ax^2+bx+c), методом наименьших квадратов, а то что-то я...

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

Разработать модуль(схемы алгоритмов и программы), содержащие процедуры и функции
Разработать модуль(схемы алгоритмов и программы), содержащие процедуры и функции, решающие поставленную задачу: -Формирование элементов...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru