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

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

10.11.2022, 03:17. Показов 3987. Ответов 62

Студворк — интернет-сервис помощи студентам
Приветствую всех. Очередное задание, над которым я буду биться не покладая рук несколько дней.
Как обычно от всех читающих рад буду получить любое пояснение / видение / список литературы и полезные ссылки / код / алгоритм к моему заданию, а так же пожелания удачи и терпения

Для начала прикладываю требования из методички, которым постараюсь следовать.

Общие требования:
файл состоит из записей определенной структуры, согласно варианту. Записи имеют ключ, уникальный в пределах файла.
Требования к подготовке и выполнению задания
1. Разработать структуру записи двоичного файла согласно варианту задания.
2. Подготовить тестовые данные в текстовом файле с кодировкой ASCII, в соответствии со структурой записи варианта. При открытии файла выполнить контроль его существования и открытия.
Примечание. Реализация операций по чтению данных из файла будет проще, если значение для каждого поля записи размещать на отдельной строке текстового редактора.
3. Имя файла вводит пользователь.
4. При открытии файла обеспечить контроль существования и открытия файла.
5. При применении механизма прямого доступа к записи файла выполнить контроль присутствия записи с заданным номером в файле.
6. Разработать функции для выполнения операций:
  • преобразование тестовых данных из текстового файла в двоичный файл;
  • сохранение данных двоичного файла в текстовом, так, чтобы используя их можно было восстановить двоичный файл;
  • вывод всех записей двоичного файла;
  • доступ к записи по ее порядковому номеру в файле, используя механизм прямого доступа к записи в двоичном файле;
  • удаление записи с заданным значением ключа, выполнить путем замены на последнюю запись.
  • Манипулирование записями в двоичном файле согласно дополнительным операциям, определенным в варианте;
7. Сохраните функции в новом модуле.
8. Разработать приложение, демонстрирующее выполнение всех операций, подключив к нему модуль с функциями.
9. Выполнить тестирование приложения, продемонстрировав выполнение всех операций.

То, что указано в задании 6 важно. Я обязательно напишу каждую функцию, но пока постараюсь сосредоточиться на основном задании и начну с него.
Дабы не усложнять жизнь и кидать сюда код, я всё буду делать в одном файле, потом разнесу и через switch case сделаю минюшку, чтобы удобно всё это тестить.


Само же задание(основная функция) звучит так:


Структура записи:
Учет техосмотра автомобилей.
Структура записи об автомобиле:
Номер (код региона, цифровой код, буквенный код), Модель, Цвет, Сведения о владельце (Фамилия, Имя, Адрес), дата последнего техосмотра.

Доп. Операция:
1. Заменить дату техосмотра у автомобиля с заданным номером на новую дату.
2. Сформировать список авто одной модели, прошедших техосмотр в заданную дату.



P.S Пока не могу задать какого-то конкретного вопроса, а просить чтобы растолковали что там вообще в условии написано как-то неловко (хотя я был бы рад). В общем буду писать конкретные вопросы как только смогу их составить. Пока же рад любой информации по теме. Главное — не сдать, а разобраться. Сейчас же постараюсь дойти хотя бы до какой-то части этого процесса. Начну, видимо со структуры и работы с ней. Надеюсь на твоё понимание, дорогой читатель)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2022, 03:17
Ответы с готовыми решениями:

Управление двоичными файлами с записями фиксированной длины.Разбиаение записи на команды
Имеется задача. Честно говоря, не знаю как подступиться ни с точки зрения кода ни алгоритмически. Очень плохо даётся всё связанное с...

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

Создать текстовый файл с записями фиксированной длины.
Создать текстовый файл с записями фиксированной длины. Файл содержит информацию о стоимости 10 наименований товаров в различных...

62
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
13.11.2022, 18:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SmallEvil Посмотреть сообщение
В смысле решение были одинаковыми ? )
Угу. Ответы перетекали от старшекурсников к младшим еще до того как я поступил. А задания не меняются

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
сравнить две Си строки - strcmp
Всё заработало. Теперь функция походу даже выполняет всё, что должна

C++
1
2
3
4
5
6
7
8
9
10
int replaceData(Car car, char num[12], char newData[12]) {
    Car carBuf = car;
    if(strcmp(carBuf.carNum, num) == 0) {
        strcpy(carBuf.data, newData);
        cout << carBuf.data << "Вот такие пироги" << endl;
    } else {
        cout << "Все плохо" << endl;
    }
    return 0;
}
Добавлено через 2 минуты
Приступаю ко второй функции

Добавлено через 54 секунды
И функцию смены даты всё же void сделаю. По смыслу лучше походит
0
Заблокирован
13.11.2022, 18:41
Так покажите как это задание решали "деды". Интересно же.
Цитата Сообщение от daniil_novel Посмотреть сообщение
Теперь функция походу даже выполняет всё, что должна
Я в этом сомневаюсь.

Цитата Сообщение от daniil_novel Посмотреть сообщение
Car carBuf = car;
Это копия "Машины".
Все изменения с carBuf после выхода из функции не применяться к car.
Передавайте "Машины" по ссылке.
И работайте с ее полями.

C++
1
2
3
4
5
6
7
8
9
int replaceData(Car &car, const char *num, const char *newData) {
    if(strcmp(car.carNum, num) == 0) {
        strcpy(car.data, newData);
        cout << car.data << "Вот такие пироги" << endl;
    } else {
        cout << "Все плохо" << endl;
    }
    return 0;
}
1
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
13.11.2022, 18:42  [ТС]
А. То есть мы исходную структуру меняем. Я немного по-другому условие понял
0
Заблокирован
13.11.2022, 18:43
И не data, а все же date, если это означает Дата
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
13.11.2022, 19:29  [ТС]
А вот касаемо второго задания "Сформировать список авто одной модели, прошедших техосмотр в заданную дату". Я должен сделать массив наших структур изначально, чтобы потом уже по нему выборку сделать?

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
И не data, а все же date
Да,точно. Спасибо). Я дату с данными перепутал

Добавлено через 43 минуты
Попробовал я сделать такой цикл, но опять что-то пошло не так

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
void generateListCar(Car &carList , const char *compareDate, const char *model) {
    int i = 0;
    while((strcmp(.carList[i].date, compareDate) == 0) && (strcmp(carList[i].model, model) == 0)) {
        
    }
}
 
int main() {
    setlocale(LC_ALL, "rus");
    Car c1{"97", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-20k1", "03.08.2022"};
    char num[] = "97";
    char newDate[] = "01.01.2022";
    //replaceDate(c1, num, newDate);
    Car carList[6] = {"11-123-ABC", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-21k1", "01.08.2022",
                             "23-120-CAW", "Lada", "black", "Petrov-Maksim-Msk-Stroiteley-22k1", "02.08.2022",
                             "66-154-WER", "Crysler", "yellow", "Petrov-Pavel-Msk-Stroiteley-23k1", "03.08.2022",
                             "41-178-MWD", "UAZ", "magenta", "Sidorov-Ivan-Msk-Stroiteley-24k2", "04.08.2022",
                             "78-223-MIG", "Crysler", "white", "Sidorov-Makar-Msk-Stroiteley-28k3", "03.08.2022",
                             "97-666-APO", "Crysler", "green", "Egorov-Nikita-Msk-Stroiteley-29k4", "03.08.2022"};
    char compareDate[] = "03.08.2022";
    char model[] = "Crysler";
 
    generateListCar(*carList, compareDate, model);
}
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
15.11.2022, 19:01  [ТС]
Ну собственно с этим я и застрял по сей день
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
15.11.2022, 21:17
Цитата Сообщение от daniil_novel Посмотреть сообщение
с этим я и застрял по сей день
По вашему заданию вы даже еще и не начинали. с 2 по 6 пункт это работа с файлами перенос данных из текстового в бинарный, и далее работа с бин файлом
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
15.11.2022, 21:25  [ТС]
Я писал, что делаю основное задание. То, что упомянули вы у всех общее. Не составит труда взять у кого-нибудь, чтобы сдать. Сейчас мне надо разобраться с заданием по моему варианту. То, как сделать остальные я всегда смогу посмотреть и разобраться. Это не так сложно.
0
Заблокирован
15.11.2022, 23:02
Цитата Сообщение от daniil_novel Посмотреть сообщение
Ну собственно с этим я и застрял по сей день
Ну так это не вопрос, и даже не указание места затруднения/непонимания.
Что на такое можно ответить, ничего.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
15.11.2022, 23:43  [ТС]
Добил прогу. Она компилируется. Но почему-то выводит крокозябры такого вида:

0
Dе/☺?о♥zШЦ?↔▲

z¶и/☺☺/☺↔
►∟й/☺?
lк/☺ШTщy?к/☺0dрy?TщyШTщy?к/☺р-цyяяяя?к/☺>крy"cЫJ?к/☺?к☺☺┐к/☺►-цyяяяяёк/☺ымрy▬cЫJ?Tщy☺



Вот сам код в последней его инстанции

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
Car* generateListCar(Car *carList , const char *compareDate, const char *model) {
    int i = 0;
    int j = 0;
    Car newCarList[6] = {"0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
    };
    while((strcmp(carList[i].date, compareDate) == 0) && (strcmp(carList[i].model, model) == 0)) {
        strcpy(newCarList[i].date, carList[i].date);
        strcpy(newCarList[i].carNum, carList[i].carNum);
        strcpy(newCarList[i].model, carList[i].model);
        strcpy(newCarList[i].color, carList[i].color);
        strcpy(newCarList[i].infoForHolder, carList[i].infoForHolder);
        i++;
    }
    return newCarList;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    Car c1{"97", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-20k1", "03.08.2022"};
    char num[] = "97";
    char newDate[] = "01.01.2022";
    //replaceDate(c1, num, newDate);
    Car carList[6] =        {"11-123-ABC", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-21k1", "01.08.2022",
                             "23-120-CAW", "Lada", "black", "Petrov-Maksim-Msk-Stroiteley-22k1", "02.08.2022",
                             "66-154-WER", "Crysler", "yellow", "Petrov-Pavel-Msk-Stroiteley-23k1", "03.08.2022",
                             "41-178-MWD", "UAZ", "magenta", "Sidorov-Ivan-Msk-Stroiteley-24k2", "04.08.2022",
                             "78-223-MIG", "Crysler", "white", "Sidorov-Makar-Msk-Stroiteley-28k3", "03.08.2022",
                             "97-666-APO", "Crysler", "green", "Egorov-Nikita-Msk-Stroiteley-29k4", "03.08.2022"};
    char compareDate[] = "03.08.2022";
    char model[] = "Crysler";
    
    Car *newCarList = generateListCar(carList, compareDate, model);
    for(size_t i = 0; i < 6; i++) {
        cout << newCarList[i].model << endl;
    }
 
}
Походу где-то косяк в памяти. Не могу понять какой(
0
Заблокирован
15.11.2022, 23:49
daniil_novel, положи (под спойлер) структуры.
Я ничего не понимаю, что у вас там происходит и почему. То есть вообще ничего.
C++
1
return newCarList;
Нельзя возвращать указатель/ссылку на локальные данные.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
15.11.2022, 23:58  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Нельзя возвращать указатель/ссылку на локальные данные.
А что можно? Массив структур?
0
Заблокирован
16.11.2022, 00:05
Цитата Сообщение от daniil_novel Посмотреть сообщение
Массив
Нельзя

Добавлено через 4 минуты
Не помню, что бы я решал такие задачи, такими примитивными средствами. Либо память плохая.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
16.11.2022, 00:13  [ТС]
Ну все тогда
printf("функция не работает, программист застрелилс.............................. ..");

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Не помню, что бы я решал такие задачи, такими примитивными средствами
Если её можно решить не примитивными средствами, я же только за. Скажите какие средства прогуглить лии как вообще к этому подойти и я попробую это сделать. Пока исходил из того, что знал и до чего смог дотумкать, но походу этого оказалось мало

Добавлено через 1 минуту
Чем больше общих и вообще различных советов по теме, тем лучше. Как минимум я теперь знаю такие офигенные функции, как seek, sekp, strcmp, strcpy

Добавлено через 3 минуты
Да и даже в своём решении функция generateListCar уже подгоняет условие под себя. В условии было сказано
"Сформировать список авто одной модели, прошедших техосмотр в заданную дату"

Но при этом моя функция принимает и модель и дату. По-правильному же сначала мы должны составлять список авто, которые прошли техосмотр в заданную дату, а находить одинаковые машины
0
Заблокирован
16.11.2022, 00:19
Для работы с неопределенным количеством данных, очень удобно работать с динамическими структурами данных.
Такими как :
последовательные : vector, list, stack, очереди
ассоциативные, set, map, хеш-таблицы, наверное, очередь по приоритетам.

Есть два варианта :
1. Научится использовать vector, с ним такие задачи пойдут как по маслу.
2. Более низкий уровень, как сейчас, только на динамических массивах.
При этом все операции выборки, поиска, будут возвращать лишь указатели/индексы на элементы из базы(массива)/файла.

На какой вариант показать пример ?
И еще раз, покажите структуры (Car и так далее), для теста.

Добавлено через 1 минуту
Цитата Сообщение от daniil_novel Посмотреть сообщение
"Сформировать список авто одной модели, прошедших техосмотр в заданную дату"
С такими формулировками можно вывих извилины получить
Одной модели ? Какой ? Естественно что вы включили и модель в фильтр поиска.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
16.11.2022, 00:25  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Одной модели ? Какой ? Естественно что вы включили и модель в фильтр поиска.
О, получается я молодец. Спасибо

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
И еще раз, покажите структуры (Car и так далее), для теста.
Вот весь код, непосильным трубом написанный

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
struct Car {
    char carNum[12];
    char model[32];
    char color[12]; 
    char infoForHolder[256];
    char date[12];
 
};
 
int replaceDate(Car &car, const char *num, const char *newDate) {
    if(strcmp(car.carNum, num) == 0) {
        strcpy(car.date, newDate);
        cout << car.date << "Вот такие пироги" << endl;
    } else {
        cout << "Все плохо" << endl;
    }
    return 0;
}
 
void generateListCar(Car *carList , const char *compareDate, const char *model) {
    int i = 0;
    int j = 0;
    Car newCarList[6] = {"0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
                        "0","0","0","0","0",
    };
    while((strcmp(carList[i].date, compareDate) == 0) && (strcmp(carList[i].model, model) == 0)) {
        strcpy(newCarList[i].date, carList[i].date);
        strcpy(newCarList[i].carNum, carList[i].carNum);
        strcpy(newCarList[i].model, carList[i].model);
        strcpy(newCarList[i].color, carList[i].color);
        strcpy(newCarList[i].infoForHolder, carList[i].infoForHolder);
        i++;
    }
 
    for(size_t i = 0; i < 6; i++) {
        cout << newCarList[i].model << endl;
    }
 
}
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    Car c1{"97", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-20k1", "03.08.2022"};
    char num[] = "97";
    char newDate[] = "01.01.2022";
    //replaceDate(c1, num, newDate);
    Car carList[6] =        {"11-123-ABC", "BMW", "red", "Petrov-Petr-Msk-Stroiteley-21k1", "01.08.2022",
                             "23-120-CAW", "Lada", "black", "Petrov-Maksim-Msk-Stroiteley-22k1", "02.08.2022",
                             "66-154-WER", "Crysler", "yellow", "Petrov-Pavel-Msk-Stroiteley-23k1", "03.08.2022",
                             "41-178-MWD", "UAZ", "magenta", "Sidorov-Ivan-Msk-Stroiteley-24k2", "04.08.2022",
                             "78-223-MIG", "Crysler", "white", "Sidorov-Makar-Msk-Stroiteley-28k3", "03.08.2022",
                             "97-666-APO", "Crysler", "green", "Egorov-Nikita-Msk-Stroiteley-29k4", "03.08.2022"};
    char compareDate[] = "03.08.2022";
    char model[] = "Crysler";
 
    generateListCar(carList, compareDate, model);
}
Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
На какой вариант показать пример ?
Хороший вопрос. Я не знаю. Ну с указателями хоть как-то знаком, хотя через них, насколько я знаю, можно сделать куда большее количество задач, чем через вектор. Оставляю на ваш выбор. Через что лучше, того и пример
0
Заблокирован
16.11.2022, 00:28
Цитата Сообщение от daniil_novel Посмотреть сообщение
хотя через них
Вы на простой задаче намучаетесь прилично, а на сложной вообще можно загнуться.
Напишу пока на векторе, если что завтра сделаем и на указателях.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
16.11.2022, 00:45  [ТС]
Иисус, ты ли это?

Добавлено через 40 секунд
0
Заблокирован
16.11.2022, 00:46
Что то, явно пошло не так
Мне легче сделать метод для бинарной записи нормальной структуры, чем вот это вот все ...
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
16.11.2022, 00:58  [ТС]
А, ой

Добавлено через 1 минуту
Ну сделайте как считаете правильным. Я дальше уже подстроюсь, изучу что есть и попробую продолжить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2022, 00:58
Помогаю со студенческими работами здесь

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

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

Работа с двоичными файлами
Дан файл координат вершин ломаной линии на плоскости. Определить, имеет ли ломаная линия самопересечения, если да, то записать в файл G...

Работа с двоичными файлами
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все положительные компоненты файла.

Работа с двоичными файлами
Задачи на использование двоичных и текстовых файлов . Условие вида &quot;дан файл&quot; означает, что пользователем вводится количество элементов и...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru