Форум программистов, компьютерный форум, киберфорум
Nikolay K
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Лабораторная работа № 8

Запись от Nikolay K размещена 29.01.2020 в 06:20
Показов 1652 Комментарии 0

Лабораторная работа: 8.
Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
Файл: Lab08_YaP_2019_1S.pdf

Обратите внимание:
В файлах Source.cpp, Source.cs и *.pas помимо прочего, так же имеются примечания к программам с различными комментариями и пояснениями.
При оформлении программ в сети Интернет я их удаляю, чтобы не нагромождать эти программы и тем самым не затруднять их восприятие.


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
Дан одномерный массив, состоящий из N целочисленных элементов.
1. Ввести массив с клавиатуры.
2. Найти максимальный отрицательный элемент.
3. Вычислить произведение отрицательных элементов массива.
4. Вывести ненулевые элементы на экран в обратном порядке.

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

ЛР № 8, задание № 5.1
1/7. Source.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. Дан одномерный массив, состоящий из N целочисленных элементов.
 *1. Ввести массив с клавиатуры.
 *2. Найти максимальный отрицательный элемент.
 *3. Вычислить произведение отрицательных элементов массива.
 *4. Вывести ненулевые элементы на экран в обратном порядке.
 *Написать программу с использованием динамических массивов, вводя размер массива с клавиатуры и используя имя массива как указатель,
 *     применить адресную арифметику для работы с элементами массива (каждое задание оформить отдельной функцией).
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN. //
#include "Header.h"
 
void main () {
     setlocale (LC_ALL, "Russian");
     int Dimension = 0;
     void (*PointerOnFunction []) (int*, int) = {InicializastionArrayFunction, MaxNegativesFunction, MultiplicationFunction,
          WriteArrayFunction};
     printf ("1. Введите размерность массива: ");
     cin >> Dimension;
     int *SourceArray = new int [Dimension];                         // Объявление SOURCEARRAY. //
     printf ("\n2. Элементы массива:\n");
     (*PointerOnFunction [0]) (SourceArray, Dimension);
     (*PointerOnFunction [1]) (SourceArray, Dimension);
     (*PointerOnFunction [2]) (SourceArray, Dimension);
     printf ("\n5. Ненулевые элементы в обратном порядке:\n");
     (*PointerOnFunction [3]) (SourceArray, Dimension);
     delete [] SourceArray;                                          // Деструктор SOURCEARRAY. //
     cout << endl << endl;
     ExitProgramFunction ();
}
2/7. Header.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
using namespace std;
 
void ExitProgramFunction ();                                             // Объявление EXITPROGRAMFUNCTION. //
void WriteArrayFunction (int *SourceArray, int Dimension);               // Объявление WRITEARRAYFUNCTION. //
void MultiplicationFunction (int *SourceArray, int Dimension);           // Объявление MULTIPLICATIONFUNCTION. //
void MaxNegativesFunction (int *SourceArray, int Dimension);             // Объявление MAXNEGATIVESFUNCTION. //
void InicializastionArrayFunction (int *SourceArray, int Dimension);     // Объявление INICIALIZATIONARRAYFUNCTION. //
3/7. InicializastionArrayFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                       // Требуется для PRINTF, CIN. //
#include <ctime>                                                          // Требуется для TIME. //
#include "Header.h"
 
void InicializastionArrayFunction (int *SourceArray, int Dimension) {     // Определение INICIALIZATIONARRAYFUNCTION. //
     srand (time (0));                                                    // TIME (0) - инициализация локального времени системы. //
     for (int i = 0; i < Dimension; i++) {
          *(SourceArray + i) = rand () % 199 - 99;                        // SOURCEARRAY E [-99..99]. //
          printf ("\n%d) А (%d) = %3d.", i + 1, i, *(SourceArray + i));
     }
}
4/7. MaxNegativesFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                              // Требуется для PRINTF. //
#include "Header.h"
 
void MaxNegativesFunction (int *SourceArray, int Dimension) {                    // Определение MAXNEGATIVESFUNCTION. //
     int MinElement = *(SourceArray);
     for (int i = 1; i < Dimension; i++) {
          if ((*(SourceArray + i) < 0) && (*(SourceArray + i) < MinElement)) {
               MinElement = *(SourceArray + i);
          }
     }
     if (MinElement == *(SourceArray)) {
          printf ("\n\n3. Отрицательные элементы в массиве отсутствуют.\n");     // Выводится на экран, если в SOURCEARRAY отрицательных
     }                                                                           // элементов нет. //
     else {
          printf ("\n\n3. Наибольший отрицательный элемент массива: %d.\n", MinElement);
     }
}
5/7. MultiplicationFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                            // Требуется для PRINTF. //
#include "Header.h"
 
void MultiplicationFunction (int *SourceArray, int Dimension) {                // Определение MULTIPLICATIONFUNCTION. //
     int Multiplication = 1;
     for (int i = 0; i < Dimension; i++) {
          if (*(SourceArray + i) < 0) {
               Multiplication *= *(SourceArray + i);                           // MULTIPLICATION = MULTIPLICATION * SOURCEARRAY [I]. //
          }
     }
     if (Multiplication == 1) {
          printf ("\n4. Отрицательные элементы в массиве отсутствуют.\n");     // Выводится на экран, если в SOURCEARRAY отрицательных
     }                                                                         // элементов нет. //
     else {
          printf ("\n4. Произведение отрицательных элементов массива равно: %d.\n", Multiplication);
     }
}
6/7. WriteArrayFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                     // Требуется для PRINTF. //
#include "Header.h"
 
void WriteArrayFunction (int *SourceArray, int Dimension) {             // Определение WRITEARRAYFUNCTION. //
     int Counter = 1;
     bool NullElementsBoolean = true;
     for (int i = (Dimension - 1); i >= 0; i--) {
          if (*(SourceArray + i) != 0) {
               printf ("\n%d) А (%d) = %3d.", Counter++, i, *(SourceArray + i));
               NullElementsBoolean = false;
          }
     }
     if (NullElementsBoolean == true) {
          printf ("\nНенулевые элементы в массиве отсутствуют.\n");     // Выводится на экран, если все элементы SOURCEARRAY равны
     }                                                                  // нулю. //
}
7/7. ExitProgramFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
Используя указатели на функцию вычислить значение функции в точке X в соответствии с выбором функции пользователем. При невозможности вычисления функции в точке X выдать соответствующее сообщение:
1. (1 + X) / (1 - X).
2. SIN (X)^(1 / 2).
3. ARCTG (1 / X).
4. LN^2 (X - 1 / X).

ЛР № 8, задание № 5.2
1/7. Source.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. Используя указатели на функцию вычислить значение функции в точке X в соответствии с выбором функции пользователем. При
 *     невозможности вычисления функции в точке X выдать соответствующее сообщение:
 *1. (1 + X) / (1 - X).
 *2. SIN (X)^(1 / 2).
 *3. ARCTG (1 / X).
 *4. LN^2 (X - 1 / X).
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN. //
#include "Header.h"
 
void main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0;
     void (*PointerOnFunction []) () = {ExitProgramFunction, FirstFunction, SecondFunction, ThirdFunction, FourthFunction};
     printf ("1. С помощью какой функции вы хотите вычислить значение?\n\n   1 + x              _               1           2      1\n1) "
          "-----.     2) Sin Vx.     3) Arctg -.     4) Ln  (x - -).\n   1 - x                              x                  x\n\nВаш в"
          "ыбор: ");
     cin >> Choice;
     if ((Choice < 1) || (Choice > 4)) {
          printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
          (*PointerOnFunction [0]) ();
     }
     (*PointerOnFunction [Choice]) ();
     (*PointerOnFunction [0]) ();
}
2/7. Header.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
using namespace std;
 
void ExitProgramFunction ();                                         // Объявление EXITPROGRAMFUNCTION. //
void FourthFunction ();                                              // Объявление FOURTHFUNCTION. //
void ThirdFunction ();                                               // Объявление THIRDFUNCTION. //
void SecondFunction ();                                              // Объявление SECONDFUNCTION. //
void FirstFunction ();                                               // Объявление FIRSTFUNCTION. //
3/7. FirstFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN. //
#include "Header.h"
 
void FirstFunction () {                                              // Определение FIRSTFUNCTION. //
     float X = 0;
     printf ("\n2. Область определения функции: X E (-oo, 1) U (1, +oo).\n\n3. Введите значение переменной X: ");
     cin >> X;
     if (X == 1) {
          printf ("\n4. При X = 1 функция не определена.\n\n");
          ExitProgramFunction ();
     }
     printf ("\n       1 + %.2f\n4. Y = -------- = %.3f.\n       1 - %.2f\n\n", X, (1 + X) / (1 - X), X);
}
4/7. SecondFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, SIN, SQRT. //
#include "Header.h"
 
void SecondFunction () {                                             // Определение SECONDFUNCTION. //
     float X = 0;
     printf ("\n2. Область определения функции: X E [0, +oo).\n\n3. Введите значение переменной X: ");
     cin >> X;
     if (X < 0) {
          printf ("\n4. При X E (-oo, 0) функция не определена.\n\n");
          ExitProgramFunction ();
     }
     printf ("            ____\n4. Y = Sin V%.2f = %.3f.\n\n", X, sin (sqrt (X)));
}
5/7. ThirdFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, ATAN. //
#include "Header.h"
 
void ThirdFunction () {                                              // Определение THIRDFUNCTION. //
     float X = 0;
     printf ("\n2. Область определения функции: X E (-oo, 0) U (0, +oo).\n\n3. Введите значение переменной X: ");
     cin >> X;
     if (X == 0) {
          printf ("\n4. При X = 0 функция не определена.\n\n");
          ExitProgramFunction ();
     }
     printf ("\n               1\n4. Y = Arctg ---- = %.3f.\n             %.2f\n\n", atan (1 / X), X);
}
6/7. FourthFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.2. Указатели на функцию.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, POW, LOG. //
#include "Header.h"
 
void FourthFunction () {                                             // Определение FOURTHFUNCTION. //
     float X = 0;
     printf ("\n2. Область определения функции: X E (-1, 0) U (1, +oo).\n\n3. Введите значение переменной X: ");
     cin >> X;
     if ((X <= -1) || ((X >=0) && (X <= 1))) {
          printf ("\n4. При X E (-oo, -1] U [0, 1] функция не определена.\n\n");
          ExitProgramFunction ();
     }
     printf ("\n         2           1\n4. Y = Ln  (%.2f - ----) = %.3f.\n                   %.2f\n\n", X, pow (log (X - (1 / X)), 2), X);
}
7/7. ExitProgramFunction.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
/*
 *Лабораторная работа: 8.
 *Тема: Указатели и ссылки. Имя массива как указатель. Динамические массивы.
 *Пункт: 5.1. Динамические массивы. Имя массива как указатель.
 *Файл: Lab08_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 29.11.2019.
 *Задание: БН. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
Вложения
Тип файла: rar 29.11.2019 - ЛР 8.rar (521.3 Кб, 1345 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru