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

Параллельное программирование, библиотека pthread. Объединение, пересечение, разность множеств A, B, C

26.04.2020, 16:30. Показов 889. Ответов 14

Студворк — интернет-сервис помощи студентам
Приветствую всех! Возникла проблема, ума не приложу как ниже указанную задачу реализовать через библиотеку pthread. Форумчане, хелпаните пожалуйста.
Задача: Определить, является ли множество С объединением множеств A и B (AUB), пересечением множеств (A⋂B), разностью множеств А и B (A\B), разностью множеств В и А (В\А). Входные данные: множества целых положительных чисел A, B, C. Количество потоков определяется, исходя из мощностей множеств, и не является параметром задачи
Собственно, саму задачу я сделал, но хз как ее реализовать через библиотеку pthread
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
#include <iostream>
 
using namespace std;
 
void Sort(int* array, int N)
{
    int temp;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N - 1; j++) {
            if (array[j] > array[j + 1]) {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    return;
}
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int sA, sB, sC;
    int masA[30]; 
    int masB[30]; 
    int masC[30]; 
    int kolp=0, ko=1;
    int AB[60];
    int i,j,z;
    int x;
 
    cout << "Введите кол-во элементов множества A: ";
    cin >> sA;
    cout << "Заполните множество A" << endl;
    for (int i = 0; i<sA; ++i) cin >> masA[i];
    cout << endl;
    cout << "Введите кол-во элементов множества B: ";
    cin >> sB;
    cout << "Заполните множество B" << endl;
    for (int i = 0; i<sB; ++i) cin >> masB[i];
    cout << endl;
    cout << "Введите кол-во элементов множества C: ";
    cin >> sC;
    cout << "Заполните множество C" << endl;
    for (int i = 0; i<sC; ++i) cin >> masC[i];
 
                
// ПЕРЕСЕЧЕНИЕ 
    cout << endl;
    cout << "Является ли С пересечением А и В? " << endl;
 
    for ( j = 0; j < sC; j++)
        for (i = 0; i < sA; i++)
            for ( z = 0; z < sB; z++)
                if ((masA[i] == masC[j]) && (masA[i] == masB[z])) kolp++;
    
    if (kolp == sC) cout << "ДА, С является пересечением А и В " << endl;
    else cout << "НЕТ, С не является пересечением А и В " << endl;
    
    cout << endl;
    
 
// ОБЪЕДИНЕНИЕ 
    cout << endl;
 
    cout << "Является ли С объединением А и В? " << endl;
    x = sA + sB;
    for ( i = 0; i<sA; i++)
    {
        AB[i] = masA[i];
    }
    for ( i = sA; i<x; i++)
    {
        AB[i] = masB[i - sA];
    }
    Sort(AB, x);
 
 
    for (i = 0; i<x-1; i++)
        if (AB[i]==AB[i+1]) 
        {
            for (j = i + 1; j<x; j++) 
                AB[j - 1] = AB[j]; 
            x--; 
            i--; 
        }
 
 
    Sort(masC, sC);
    if (sC==x) 
        for (int i = 0; i < sC; ++i)
    {
            if (masC[i] != AB[i])
                ko = 0;
    }
    else ko = 0;
 
    if (ko == 1) cout << "ДА, С является объединением А и В " << endl;
    else cout << "НЕТ, С не является объединением А и В " << endl;
    cout << endl;
 
    // РАЗНОСТЬ А\В
    cout << endl;
 
    cout << "Разность А и В?" << endl;
    int rAB[30], sAB=sA;
    
    for (i = 0; i<sA; i++)
    {
        rAB[i] = masA[i];
    }
 
    for (i = 0; i<sAB; i++)
        for (j = 0; j<sB; j++)
        if (rAB[i] == masB[j])
        {
            for (z = i + 1; z < sAB; z++)
            {
                rAB[z - 1] = rAB[z];
                
            }
            sAB--;
            i--;
        }
    
    if (sAB==0)
        cout << "Множества А и В совпадают!" << endl;
    else
    {
        Sort(rAB, sAB);
        for (i = 0; i < sAB; i++)
            cout << rAB[i] << "   ";
    }
 
    cout << endl;
 
    // РАЗНОСТЬ B\A
    cout << endl;
 
    cout << "Разность B и A?" << endl;
    int rBA[30], sBA = sB;
    for (i = 0; i<sB; i++)
    {
        rBA[i] = masB[i];
    }
 
    for (i = 0; i<sBA; i++)
        for (j = 0; j<sA; j++)
            if (rBA[i] == masA[j])
            {
                for (z = i + 1; z < sBA; z++)
                {
                    rBA[z - 1] = rBA[z];
 
                }
                sBA--;
                i--;
            }
 
    if (sBA == 0)
        cout << "Множества B и А совпадают!" << endl;
    else
    {
        Sort(rBA, sBA);
        for (i = 0; i < sBA; i++)
            cout << rBA[i] << "   ";
    }
    cout << endl;
    cout << endl;
 
 
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2020, 16:30
Ответы с готовыми решениями:

Найти пересечение, объединение, разность, симметрическую разность множеств
Задание: Написать программу, которая проделывается операции над множествами (пересечение, объединение, разность, симметрическую разность) ...

Объединение, пересечение, разность, симметрическая разность множеств
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти:...

Объединение, пересечение, разность множеств
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;math.h&gt; ...

14
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 17:08
Цитата Сообщение от BoxHead Посмотреть сообщение
Собственно, саму задачу я сделал, но хз как ее реализовать через библиотеку pthread
Что именно не получается?
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 92
26.04.2020, 17:25  [ТС]
В принципе не понимаю как распараллелить эту задачу через библиотеку pthread. Пытался разобраться на ниже написанном примере но не понимаю строчки 22-23, а именно зачем NULL и что значит (void *)1), (void *)2)
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
#include <stdio.h>
#include <pthread.h>
#include <iostream>
int A[3][3] = { 1, -2, 0, 4, 6, 2, -3, 4, -2 };
int B[3][3] = { 0, 2, 0, 1, 1, 1, 5, -3, 10 };
int C[3][3]; //результирующая матрица
//стартовая функция для дочерних потоков 
void* func(void *HZ) //HZ – номер строки, заполняемой потоком 
{
// вычисление элементов результирующей матрицы, // стоящих в строке с номером HZ
     for (int i=0 ; i<3 ; i++) 
     { 
         C[(int)HZ][i]=0; 
         for (int j=0 ; j<3 ; j++) 
             C[(int)HZ][i]+=A[(int)HZ][j]*B[j][i]; 
     } 
     return C;
}
int main()
{ // создание дочерних потоков
    pthread_t mythread1, mythread2;
    pthread_create(&mythread1, NULL, func, (void *)1);
    pthread_create(&mythread2, NULL, func, (void *)2);
    // заполнение первой строки результирующей матрицы 
    func((void *)0) ;
    // ожидание завершения дочерних потоков 
    pthread_join(mythread1,NULL) ; pthread_join(mythread2,NULL) ;
    // вывод результата вычислений всех потоков 
    for (int i=0 ; i<3 ; i++) 
    { 
        fprintf(stdout,"\n");
    for (int j = 0; j<3; j++)
        fprintf(stdout, "%d ", C[i][j]);
    }
    system("pause");
return 1; 
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 17:35
Цитата Сообщение от BoxHead Посмотреть сообщение
Пытался разобраться на ниже написанном примере но не понимаю строчки 22-23, а именно зачем NULL и что значит (void *)1), (void *)2)
(void *)1 - это параметр функции func - поток вызовет func(1);
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 92
26.04.2020, 17:41  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
(void *)1 - это параметр функции func - поток вызовет func(1);
т.е. допустим у меня будет 4 функции то последняя будет pthread_create(&mythread4, NULL, func, (void *)4), и я так понимаю что NULL в любом случае должен использоваться?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 17:45
Цитата Сообщение от BoxHead Посмотреть сообщение
т.е. допустим у меня будет 4 функции то последняя будет pthread_create(&mythread4, NULL, func, (void *)4), и я так понимаю что NULL в любом случае должен использоваться?
NULL это атрибуты потока, к твоей функции они никакого отношения не имеют http://man7.org/linux/man-page... ate.3.html
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 92
26.04.2020, 19:13  [ТС]
Поясните дураку, что я не так делаю?
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
#include <iostream>
#include <pthread.h>
using namespace std;
 
void Sort(int* array, int N)
{
    int temp;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N - 1; j++) {
            if (array[j] > array[j + 1]) {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    return;
}
// ПЕРЕСЕЧЕНИЕ 
int Per(int* masA, int* masC, int* masB, int kolp, int sA, int sB, int sC)
{
    for (int j = 0; j < sC; j++)
        for (int i = 0; i < sA; i++)
            for (int z = 0; z < sB; z++)
                if ((masA[i] == masC[j]) && (masA[i] == masB[z]))
                {
                    kolp++;
                }
    return kolp;
}
// ОБЪЕДИНЕНИЕ 
int Ob(int* masA, int* masC, int* masB, int* AB, int sA, int sB, int sC, int ko)
{
    int x = sA + sB;
    for (int i = 0; i < sA; i++)
    {
        AB[i] = masA[i];
    }
    for (int i = sA; i < x; i++)
    {
        AB[i] = masB[i - sA];
    }
    Sort(AB, x);
 
 
    for (int i = 0; i < x - 1; i++)
        if (AB[i] == AB[i + 1])
        {
            for (int j = i + 1; j < x; j++)
                AB[j - 1] = AB[j];
            x--;
            i--;
        }
 
 
    Sort(masC, sC);
    if (sC == x)
        for (int i = 0; i < sC; ++i)
        {
            if (masC[i] != AB[i])
                ko = 0;
        }
    else ko = 0;
    return ko;
}
 
//РАЗНОСТЬ A/B
int Rass(int* masA, int* masB, int* rAB, int sA, int sB, int sAB)
{
    for (int i = 0; i < sA; i++)
    {
        rAB[i] = masA[i];
    }
 
    for (int i = 0; i < sAB; i++)
        for (int j = 0; j < sB; j++)
            if (rAB[i] == masB[j])
            {
                for (int z = i + 1; z < sAB; z++)
                {
                    rAB[z - 1] = rAB[z];
 
                }
                sAB--;
                i--;
            }
 
    if (sAB == 0)
        cout << "Множества А и В совпадают!" << endl;
    else
    {
        Sort(rAB, sAB);
        for (int i = 0; i < sAB; i++)
            cout << rAB[i] << "   ";
        return *rAB;
    }
}
 
//РАЗНОСТЬ B/A
int Ras(int* masA, int* masB, int* rBA, int sA, int sB, int sBA)
{
    for (int i = 0; i < sB; i++)
    {
        rBA[i] = masB[i];
    }
 
    for (int i = 0; i < sBA; i++)
        for (int j = 0; j < sA; j++)
            if (rBA[i] == masA[j])
            {
                for (int z = i + 1; z < sBA; z++)
                {
                    rBA[z - 1] = rBA[z];
 
                }
                sBA--;
                i--;
            }
 
    if (sBA == 0)
        cout << "Множества B и А совпадают!" << endl;
    else
    {
        Sort(rBA, sBA);
        for (int i = 0; i < sBA; i++)
            cout << rBA[i] << "   ";
    }
    return *rBA;
 
}
 
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int sA, sB, sC;
    int masA[30];
    int masB[30];
    int masC[30];
    int kolp = 0, ko = 1;
    int AB[60];
    int i, j, z;
    int x;
 
 
    pthread_t mythread1, mythread2, mythread3, mythread4;
    pthread_create(&mythread1, NULL, Per, (void *)1);
    
    // ожидание завершения дочерних потоков 
    pthread_join(mythread1, NULL);
 
    cout << "Введите кол-во элементов множества A: ";
    cin >> sA;
    cout << "Заполните множество A" << endl;
    for (int i = 0; i<sA; ++i) cin >> masA[i];
    cout << endl;
    cout << "Введите кол-во элементов множества B: ";
    cin >> sB;
    cout << "Заполните множество B" << endl;
    for (int i = 0; i<sB; ++i) cin >> masB[i];
    cout << endl;
    cout << "Введите кол-во элементов множества C: ";
    cin >> sC;
    cout << "Заполните множество C" << endl;
    for (int i = 0; i<sC; ++i) cin >> masC[i];
 
 
    // ПЕРЕСЕЧЕНИЕ 
    cout << endl;
    cout << "Является ли С пересечением А и В? " << endl;
 
    kolp = Per(masA, masC, masB, kolp, sA, sB, sC);
 
    if (kolp == sC) cout << "ДА, С является пересечением А и В " << endl;
    else cout << "НЕТ, С не является пересечением А и В " << endl;
 
    cout << endl;
 
 
    // ОБЪЕДИНЕНИЕ 
    cout << endl;
 
    cout << "Является ли С объединением А и В? " << endl;
    ko = Ob(masA, masC, masB, AB, sA, sB, sC, ko);
    if (ko == 1) cout << "ДА, С является объединением А и В " << endl;
    else cout << "НЕТ, С не является объединением А и В " << endl;
    cout << endl;
 
    // РАЗНОСТЬ А\В
    cout << endl;
 
    cout << "Разность А и В?" << endl;
    int rAB[30], sAB = sA;
 
    Rass(masA, masB, rAB, sA, sB, sAB);
    cout << endl;
 
    // РАЗНОСТЬ B\A
    cout << endl;
 
    cout << "Разность B и A?" << endl;
    int rBA[30], sBA = sB;
    Ras(masA, masB, rBA, sA, sB, sBA);
 
    cout << endl;
    cout << endl;
 
 
    system("pause");
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 19:17
Цитата Сообщение от BoxHead Посмотреть сообщение
Поясните дураку, что я не так делаю?
В pthread_create передаётся указатель на функцию с одним аргументом - void func(void *), а не с кучей разных, типа Per.
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.04.2020, 21:17
oleg-m1973, в pthread_create аргумент void *(*start_routine) (void *) как вообще понять? Это же по сути колбэк функции start_routine, но в упор не понимаю, как может быть тип возвращаемого значения и аргумент void*, если void говорит о том, что функция ничего не возвращает... Что такое void* ?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 21:20
Цитата Сообщение от Timurs Посмотреть сообщение
oleg-m1973, в pthread_create аргумент void *(*start_routine) (void *) как вообще понять? Это же по сути колбэк функции start_routine, но в упор не понимаю, как может быть тип возвращаемого значения и аргумент void*, если void говорит о том, что функция ничего не возвращает... Что такое void* ?
void * - это указатель.

C++
1
2
3
4
void *func(void *args)
{
    return nullptr;
}
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.04.2020, 21:24
oleg-m1973, указатель на nullptr или вообще хоть на что? Первый раз такое вижу
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 92
26.04.2020, 21:24  [ТС]
Ребят, я в принципе не пойму как мне все мои функции сделать с одним аргументом, а еще больше не понятно как распределить вычисления между потоками в зависимости от максимальной мощности какого либо из множеств
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.04.2020, 21:37
Цитата Сообщение от BoxHead Посмотреть сообщение
Ребят, я в принципе не пойму как мне все мои функции сделать с одним аргументом, а еще больше не понятно как распределить вычисления между потоками в зависимости от максимальной мощности какого либо из множеств
Сделай структуру с нужными полями и передавай указатель на неё.
Зачем тебе вообще понадобились pthreads, если ты не знаешь даже базовых вещей? Почему хотя бы не std::thread?
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 92
26.04.2020, 21:46  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Зачем тебе вообще понадобились pthreads, если ты не знаешь даже базовых вещей? Почему хотя бы не std::thread?
Потому что лабораторная такая, с std::thread я уже сделал, там проще дело было
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
27.04.2020, 01:58
Про
C++
1
void* foo(void*)
очень интересно тут написано https://softwareengineering.st... oid/254188 Никогда бы не подумал, что type "Object" отсюда и появился по сути. Также кучу примеров тут рассмотрели https://stackoverflow.com/ques... vs-foovoid
Про колбэки тут можно глянуть https://www.youtube.com/watch?v=jR_kFjxI-ZQ

Добавлено через 7 минут
Кстати в современном C++ не рекомендуется использоваться войд указатели ни при каких обстоятельствах https://docs.microsoft.com/ru-... ew=vs-2019
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2020, 01:58
Помогаю со студенческими работами здесь

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

Объединение, пересечение и разность множеств с помощью оператора SWITCH
Помогите пожалуйста написать программу объединение,пересечение и разность множеств с помощью оператора SWITCH ....ввод элементов с...

Описать класс "множество", позволяющий выполнять основные операции - добавления и удаление элемента, пересечение, множеств, объединение и разность мно
Люди помогите написать программу, очень нужно!!! Буду очень благодарный........ 1. Описать класс &quot;множество&quot;, позволяющий...

Объединение, пересечение, разность множеств
Это вполне стандартный алгоритм,может есть у кого готовый? Объединение, пересечение, разность множеств. Поверка на включение одного...

Объединение, пересечение и разность множеств
Доброго дня. Задание: 1) На вход подаются два упорядоченных множества A и B (вводятся с клавиатуры, элементы множеств – буквы...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru