-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.cpp
executable file
·91 lines (65 loc) · 3.87 KB
/
main.cpp
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
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
// Переход на кириллицу:
void cyrillic() {
// Эти строки нужны для правильного отображения кириллицы:
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
// Также надо изменить шрифт в консоли на Lucida Console.
// Для замены шрифта кликаете правой кнопкой на надписи «Командная строка» окна консоли.
// В открывшемся меню выбираете «Свойства».
// В появившемся окне выбираете вкладку «Шрифт» и там выбираете «Lucida Console».
}
// Рекурсивная функция для вывода сначала всех отрицательных, а потом – всех положительных чисел заданной последовательности:
void print(int *arr, int sz, int idx, bool neg) {
if (idx == 0) { // если индекс элемента равен нулю
if (neg) { // и поднят флаг вывода отрициальных чисел, то:
std::cout << "Вывод всех отрицательных чисел: " << std::endl;
}
} else if (idx == sz) { // если индекс элемента равен длине массива, то
if (neg) { // если ранее мы выводили отрицательные числа, то теперь начнем выводить положительные:
std::cout << std::endl << "Вывод всех положительных чисел: " << std::endl;
return print(arr, sz, 0, false);
} else { // иначе, если положительные числа уже выводились, то прекращаем работу функции:
std::cout << std::endl;
return;
}
}
if (neg) { // если сейчас выводим отрицательные числа:
if (arr[idx] < 0) {
std::cout << arr[idx] << " ";
}
} else { // иначе тогда выводим положительные числа:
if (arr[idx] >= 0) {
std::cout << arr[idx] << " ";
}
}
print(arr, sz, idx + 1, neg); // переход к следующему элементу массива.
}
int main(int argc, char** argv) {
int i; // счетчик.
int N; // размер массива.
int *array = 0; // массив.
cyrillic();
std::cout << "Введите размер массива: ";
std::cin >> N;
// Создание массива ненулевых целых чисел из N элементов:
array = new int[N];
std::cout << "Массив ненулевых целых чисел из " << N << " элементов: " << std::endl;
srand(time(0)); // автоматическая рандомизация генератора случайных чисел (чтобы всегда получать разные случайные числа).
for (i = 0; i < N; i++) {
array[i] = (rand() % 100) + 1; // генерация случайного целого числа в диапазоне [1; 100].
// Генерация знака для числа:
if (rand() % 2 == 0) { // генерируем случайное целое число в диапазоне [0; 1] и если выпало 0, то меняем знак на минус:
array[i] = -array[i];
}
std::cout << array[i] << " ";
}
std::cout << std::endl;
print(array, N, 0, true); // вызов рекурсивной функции для печати массива.
delete [] array; // освобождение ресурсов памяти занятых под массив.
system("pause");
return 0;
}