Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/50: Рейтинг темы: голосов - 50, средняя оценка - 4.80
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493

Построение функции принадлежности нечеткого множества

10.09.2014, 14:30. Показов 10013. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет =)))
Столкнулся с такой задачей: написать программу построения графика функции принадлежности нечеткого множества.
У меня задача, связанная с Z-образной функцией или сплайн-функцией и в общем случае может быть задана аналитически следующим выражением, которое представлено на изображении внизу (a и b - некоторые числовые параметры, принимающие произвольные действительные значения и упорядоченные отношением: а<b.).
Также есть пример, на картинке 1.4 приведен график Z-образной функции принадлежности с параметрами a=0,4 и b=0,8.
Нужно написать программу, чтобы я вводил параметры a,b и она мне вырисовывала график функции. Примерный интерфейс программы на 3-м рисунке, только там для многих функций (треугольной, трапецевидной, гаусовской и т.д.), а мне нужно только для одной Z-образной и параметры только a и b.
Кто с графикой разбирается в VIsual Studio помогите пожалуйста простенькую программку замутить, буду очень благодарен)))
Миниатюры
Построение функции принадлежности нечеткого множества   Построение функции принадлежности нечеткого множества  
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2014, 14:30
Ответы с готовыми решениями:

Множества set, проверка принадлежности множеству
Доброго времени суток, ув. форумчане :) Для лабораторной работы необходимо реализовать множество и выполнять проверку принадлежности...

Построение нечеткого регулятора
здравствуйте. очень нужна помощь при построении нечеткого регулятора с экспортом СНВ типа мамдани в рабочую область. Краткая суть: ...

Построение функций принадлежности
Никак не пойму как сделать.

28
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
10.09.2014, 17:18  [ТС]
кто в курсе как сделать эту графику?

Добавлено через 1 час 16 минут
неужели никто не сталкивался? мне кажется там в проге будет не такой уж и большой код
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
10.09.2014, 17:29
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
Кто с графикой разбирается в VIsual Studio
Технологии:
WinAPI
MFC
C++/CLI
C#
Что из этого?
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
10.09.2014, 17:39  [ТС]
IrineK, С++, ну и C# можно, но лучше C++, и хотя бы в кратце комментарии что за что отвечает, я имею ввиду строчки кода)
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
10.09.2014, 17:57
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
но лучше C++
WinAPI, MFC или CLI?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.09.2014, 18:05
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
Кто с графикой разбирается в VIsual Studio
А обязательно в Visual Studio? А то тут по фреймворку Qt целый раздел на форуме.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
10.09.2014, 18:08
Кстати, если Visual Studio не обязателен, то можно обратиться к старому доброму CBuilder.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
10.09.2014, 19:30
Вот сделал на WIN API
*.cpp файл
Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include "resource.h"
 
HINSTANCE hInst;      // handle программы
const int DataLength=1000; // Длина массива
double x[DataLength],y[DataLength]; // сами массивы
 
void Graph(HWND hwnd) // функция построения графика
{
    HWND hwndHist=GetDlgItem(hwnd,IDC_GRAF);
    HDC hdc=GetDC(hwndHist);      // Контекст окна, на котором рисуюем график
    RECT rc;
    const int padd=35; // отступ от края окна
    GetClientRect(hwndHist,&rc); // размер окна
    IntersectClipRect(hdc,0,0,rc.right,rc.bottom); // ограничим область рисования этими размерами
    // Рисуем оси координат
    Rectangle(hdc,0,0,rc.right,rc.bottom);
    MoveToEx(hdc,padd,rc.top+padd,NULL);
    LineTo(hdc,padd,rc.bottom-padd);
    LineTo(hdc,rc.right-padd,rc.bottom-padd);
 
    SetTextAlign(hdc,TA_LEFT | TA_BASELINE);
    TextOut(hdc,padd/2, padd/2,"Y(X)",4);
// для определения масштаба найдем экстремумы
    int i;
    double dMaxx=x[0];
    double dMinx=x[0];
    double dMaxy=y[0];
    double dMiny=y[0];
    for(i=1;i<DataLength;i++)
    {
        dMaxx=max(dMaxx,x[i]);
        dMaxy=max(dMaxy,y[i]);
        dMinx=min(dMinx,x[i]);
        dMiny=min(dMinx,y[i]);
    }
// вывод меток по осям  
    const int COLLS=5;
    SetTextAlign(hdc,TA_LEFT | TA_BASELINE);
    int labWidth=(rc.right-2*padd)/COLLS;
    int labHeight=(rc.bottom-2*padd)/COLLS;
    double Deltay=(dMaxy-dMiny)/COLLS;
    for(i=0;i<COLLS;i++)
    {
        double t=dMiny+Deltay*(i+1);
        char buf[16];
        sprintf(buf,"%4lg\0",t);
        int yp=rc.bottom-padd-(i+1)*labHeight;
        TextOut(hdc,0,yp,buf,strlen(buf));
        MoveToEx(hdc,padd-3,yp,NULL);
        LineTo(hdc,padd+3,yp);
    }
 
    SetTextAlign(hdc,TA_RIGHT | TA_BASELINE);
    double Deltax=(dMaxx-dMinx)/COLLS;
    for(i=0;i<COLLS;i++)
    {
        double t=dMinx+Deltax*(i+1);
        char buf[16];
        sprintf(buf,"%4lg\0",t);
        int xp=padd+labWidth*(i+1);
        TextOut(hdc,xp,rc.bottom-padd/2,buf,strlen(buf));
        MoveToEx(hdc,xp, rc.bottom-padd,NULL);
        LineTo(hdc,xp, rc.bottom-padd+5);
    }
    SetTextAlign(hdc,TA_LEFT | TA_BASELINE);
    TextOut(hdc,rc.right-padd+1,rc.bottom-padd+5,"X",1);
 
    HPEN p1=CreatePen(PS_SOLID,1,RGB(0,128,0)); // рисуем пером зеленого цвета
    HPEN pOld=(HPEN)SelectObject(hdc,p1);
    int xp,yp;
    if(dMaxx==dMinx)
        xp=padd;
    else
        xp=padd+int((x[0]-dMinx)/(dMaxx-dMinx)*(rc.right-2*padd)); // пересчитали начальное значение x
    if(dMaxy==dMiny)
        yp=rc.bottom-padd;
    else
        yp=rc.bottom-padd-int((y[0]-dMiny)/(dMaxy-dMiny)*(rc.bottom-2*padd));// пересчитали начальное значение y
    MoveToEx(hdc,xp,yp,NULL);
    for(i=0;i<DataLength;i++)
    {
        if(dMaxx==dMinx)
            xp=padd;
        else
            xp=padd+int((x[i]-dMinx)/(dMaxx-dMinx)*(rc.right-2*padd));// пересчитали очередное значение x
        if(dMaxy==dMiny)
            yp=rc.bottom-padd;
        else
            yp=rc.bottom-padd-int((y[i]-dMiny)/(dMaxy-dMiny)*(rc.bottom-2*padd));// пересчитали очередное значение y
 
        LineTo(hdc,xp,yp);           //Провели линию от i до i+1й точек
    }
    SelectObject(hdc,pOld);
    DeleteObject(p1);
    ReleaseDC(hwndHist,hdc);
}
 
// заполнение массивов x,y
void ReadDataFile(HWND hwnd)
{
 
    char buf[32];
    GetDlgItemText(hwnd,IDC_MAXX,buf,32);
    double max_x;sscanf(buf,"%lf",&max_x);  // получили значение max_x из поля IDC_MAXX диалога
    GetDlgItemText(hwnd,IDC_A,buf,32);
    double a;sscanf(buf,"%lf",&a);                 // получили значение a из поля IDC_A диалога
    GetDlgItemText(hwnd,IDC_B,buf,32);
    double b;sscanf(buf,"%lf",&b);
    for(int i=0;i<DataLength;i++)
    {
// вычисление x[i] и y[i]
        x[i]=double(i)/DataLength*max_x; 
        if(x[i]<a)
        {
            y[i]=1.0;
        }else if(x[i]<b)
        {
            y[i]=0.5*(1.0+cos((x[i]-a)/(b-a)*M_PI));
        }else
        {
            y[i]=0;
        }
    }
}
 
//  функция обработчик сообщений окна
BOOL WINAPI fnObr(HWND hwnd,WORD msg,WPARAM wp,LPARAM lp)
{
    switch(msg)
    {
    case WM_COMMAND: // нажатие кнопок и пунктов меню
    {
        switch(LOWORD(wp))
        {
        case ID_HELP_ABOUT: // меню about
            MessageBox(hwnd,
            "Программа для вывода функции принадлежности\n(С) Задорожный С.С. 2014",
            "О программе",MB_OK);
            return 1;
        case ID_CREATE: // кнопка Построить
        {
            ReadDataFile(hwnd); // заполнить X,y
            InvalidateRect(hwnd,NULL,true); // перерисовать окно
            return 1;
        }
        case ID_FILE_EXIT: // кнопка Выход
            SendMessage(hwnd,WM_CLOSE,0,0);
            return 1;
        }// end switch WM_COMMAND
        return 0; // остальные команды не обрабатываем
    }
    case WM_INITDIALOG: // открытие окна
        SetClassLong(hwnd,GCL_HICON,(LONG)LoadIcon(hInst,"STAT")); // установить логотип программы
        SetDlgItemText(hwnd,IDC_A," 0.5"); // заполнить параметры стандартными значениями
        SetDlgItemText(hwnd,IDC_B," 0.75");
        SetDlgItemText(hwnd,IDC_MAXX," 1.0");
        ReadDataFile(hwnd); // заполнить x,y
        return 1;
    case WM_SIZE: // изменение размеров окна
        InvalidateRect(hwnd,NULL,true); // перерисовать
        return 1;
    case WM_PAINT: // сообщение о необходимости перерисовки окна
    {
        PAINTSTRUCT ps;
        HDC hdc=BeginPaint(hwnd,&ps);
        Graph(hwnd);   //  нарисовать график
        EndPaint(hwnd,&ps);
        return 1;
 
    }
    case WM_CLOSE: // закрытие окна
        EndDialog(hwnd,1);
        return 1;
    } // end switch
    return 0;
}
 
 
// точка входа в программу
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int)
{
    hInst=hi;
    return DialogBox(hi,"STAT32",0,(DLGPROC)fnObr); // открываем диалог "STAT32"
}


resource.h файл (содержит константы, используемые в rc и cpp файлах
C++
1
2
3
4
5
6
7
8
9
#define  IDC_STATIC                     -1
 
#define ID_CREATE                       1006
#define IDC_GRAF                        1007
#define IDC_MAXX                        1008
#define IDC_A                           1009
#define IDC_B                           1010
#define ID_FILE_EXIT                    1011
#define ID_HELP_ABOUT                   1012
*.rc файл ресурсов
Bash
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 "windows.h"
#include "resource.h"
 
// диалоговое окно
STAT32 DIALOGEX 0, 0, 613, 308
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "  Statistics"
MENU IDR_MENU1
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "Выход",ID_FILE_EXIT,7,7,50,14
    PUSHBUTTON      "Построить",ID_CREATE,7,29,52,14,NOT WS_TABSTOP
    RTEXT           "Max x:",IDC_STATIC,21,47,22,10
    EDITTEXT        IDC_MAXX,7,55,52,12,ES_AUTOHSCROLL
    CONTROL         "",IDC_GRAF,"Static",SS_GRAYFRAME | SS_SUNKEN | WS_BORDER,66,7,540,294
    RTEXT           "a:",IDC_STATIC,23,69,17,10
    EDITTEXT        IDC_A,7,81,52,12,ES_AUTOHSCROLL
    RTEXT           "b:",IDC_STATIC,26,95,12,10
    EDITTEXT        IDC_B,7,105,52,12,ES_AUTOHSCROLL
END
 
// Menu
IDR_MENU1 MENU 
BEGIN
    MENUITEM "&Выход",     ID_FILE_EXIT
    MENUITEM "&Перестроить",ID_CREATE
    MENUITEM "&О программе",ID_HELP_ABOUT
END
 
// Icon
STAT  ICON  "icon1.ico"
Проект надо создавать win32 application (пустой)
и к нему добавить cpp и rc файлы
1
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 03:11  [ТС]
IrineK, обязательно нужно Visual Studio и с++, и чтоб ФОРМОЧКА была как в примере показал. А вот насчет этого я не знаю WinAPI, MFC или CLI (((

Добавлено через 15 секунд
zss, а у вас без формочки да код?

Добавлено через 38 секунд
zss, можете этот проект, который вы сделали, архивом сюда залить и мне скинуть или в личку как там правильнее, чтоб я сам ничего не цеплял)
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 09:28
У меня VS 2008 может быть несовместимость с Вашей версией.
Сделайте так.
1. Создайте папку для проекта.
2. Скопируйте первый текст в файл ff.cpp
3. Скопируйте второй файл в resource.h
4. Скопируйте 3 файл в ff.rc
5. Создайте пустой проект Win32 Application в этой папке.
6. Добавьте к проекту файлы ff.cpp и ff.rc.

Формочка внесена в файл ресурсов ( диалог STAT32 ) и открывается прямо из WinMain
1
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 10:20  [ТС]
zss, куча ошибок, че то я не так видимо сделал.
Во-первых, я зашел в "визуал студио", там выбрал "Win32", далее "Консольное приложение Win32", ввел имя проекта, нажал "готово", далее вылезло окно в котором нажал "далее", затем поставил галочку на "пустом проекте" и выбрал "приложение Windows" - всё верно? Далее прицепил 2 файла ff.cpp и ff.rc, от файла ff.rc какая то ошибка вылезла связанная видимо с иконкой какой то "icon1.ico". А для чего файл resource.h, куда его цеплять?
А вы не можете мне проект в архиве скинуть, что б всё уже работало, а то я ща наделаю делов(
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 10:26
Да НЕ консольное, а просто Win32
А иконку сделайте любую и обзовите ее icon1.ico
или уберите из cpp файла 156 строчку
SetClassLong(hwnd,GCL_HICON,(LONG)LoadIc on(hInst,"STAT"));
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 10:55  [ТС]
zss, а файл RESOURSE.H куда его цеплять? в папку с проектом?

Добавлено через 26 секунд
zss, как правильно запустить то?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 10:56
Он подключаемся сам в 6 строке cpp кода
#include "resource.h"

Если компилируется, то должен запускаться.
Сразу же выводится кривая для a=0.5 b=0.75
Можете изменить их и нажать кнопку "Перестроить"
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 11:03  [ТС]
zss, блин всё равно выдает 12 ошибок каких-то типа: "Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции"
1>c:\documents\visual studio 2008\projects\график функции принадлежности\ff.cpp(66) : error C2664: TextOutW: невозможно преобразовать параметр 4 из 'char [16]' в 'LPCWSTR'
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 11:09
Вторая ошибка - отключите в проекте уникод.
Проект->свойства->Свойства конфигурации->Набор знаков->Не задано(Not Set)
По первой - укажите какие строки
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 11:18  [ТС]
zss, так, всё заработало, спасибо огромное, а теперь можно вас попросить кое-что убрать из программы вашей и по новой залить текст кода. Нужно убрать следующее:
1) о программе
2) кнопки построить и перестроить помоему одно и тоже делает, оставить нужно построить только наверное.
3) убрать "выход" слово
проще говоря убрать верхнее меню.
и вообще вы можете хотя бы самое основное в коде .cpp прокомментировать что и как делается, что за что отвечает?

Добавлено через 1 минуту
zss, а что значит Max X ??
И можн овсе поля для заполнения пустыми сделать)
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 11:34
Мах X - максимальное значение x(крайняя правая точка на графике).

Меню убирается удалением в rc файле 7 строки:
MENU IDR_MENU1

about естественно пропадет после удаления меню,
но можете еще удалить из cpp файла строки
C++
1
2
3
4
5
case ID_HELP_ABOUT:
            MessageBox(hwnd,
            "Программа для вывода функции принадлежности\n(С) Задорожный С.С. 2014",
            "О программе",MB_OK);
            return 1;

Выход удалять как-то неприлично, но если хочется, то можете удалить 10 строку в rc файле:
Bash
1
   DEFPUSHBUTTON   "Выход",ID_FILE_EXIT,7,7,50,14
Название программы (Statistics) можете поменять в 10 строке rc файла:
Bash
1
CAPTION "  Statistics"
1
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
11.09.2014, 12:22  [ТС]
А прокомментировать можно хотя бы самое основное в каждом из файлов с кодом пожалуйста, а то я не в курсе что за что отвечает

Добавлено через 30 минут
zss, и что вообще каждый из 3-х файлов означает, для чего каждый, об этом тоже расскажите пожалуйста)
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.09.2014, 12:27
Комментарии внес непосредственно в пост №8
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2014, 12:27
Помогаю со студенческими работами здесь

Сглаживание функции принадлежности
есть функция принадлежности x= y= в fuzzy logic toolbox она наиболее похожа на функцию zmf как с помощью метода наименьших...

Массив и функции пользователя (замена элементов по принадлежности к промежутку)
Помогите плз написать прогу на одномерный динамический массив. Массив может заполнятся рандомом, но главное, это чтобы в программе были...

Графики функций (Полярные системы,параметрические функции,знак принадлежности)
Здравствуйте. Помогите пожалуйста, уже второй час сижу , пытаюсь понять как поставить знак принадлежности, ничего нашел в интернете. ...

Разработать программу для определения принадлежности точки графику функции
Точка плоскости с координатами x, y принадлежит графику функции y=x^3+0.5x+5.6 . Результат работы программы – сообщение о...

Построение множества графиков
Есть таблица stringrid в ней количество столбцов изменяется путем редактирования edita...т.е. может быть любое количество. в таблице 12...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru