Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант 18 / ПР-6.docx
Скачиваний:
1
Добавлен:
07.12.2024
Размер:
215.17 Кб
Скачать

2 Блок–схема алгоритма

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

Рисунок 2.1 – Блок-схема алгоритма программы

3 Исходный код

Программная реализация алгоритма для решения задачи представлена ниже.

Листинг 3.1 – Процедура выполнение кода по поставленной задачи

#include <iostream>

using namespace std;

void input(int* &a, int &n); // Ввод массива

void output(int* a, int n); // Вывод массива

int countInRange(int* a, int n, int x, int y); // Счет чисел в диапазоне

void addAfterMax(int* &a, int &n, int x); // Добавление числа после максимального

void menu();

int main() {

int n = 0; // количество элементов

int* a = nullptr; // динамический массив

menu();

int choice;

while (true) {

cout << "Укажите пункт меню: ";

cin >> choice;

switch (choice) {

case 1:

input(a, n);

break;

case 2:

cout << "Массив: " << endl;

output(a, n);

break;

case 3: {

int x, y;

cout << "Введите диапазон [x, y]: ";

cin >> x >> y;

int count = countInRange(a, n, x, y);

cout << "Количество чисел в диапазоне [" << x << ", " << y << "]: " << count << endl;

break;

}

case 4: {

int x;

cout << "Введите число для добавления: ";

Продолжение Листинга 3.1

cin >> x;

addAfterMax(a, n, x);

break;

}

case 5:

delete[] a; // Освобождение памяти

return 0;

default:

cout << "Неверный выбор. Повторите ввод!" << endl;

}

}

}

void input(int* &a, int &n) {

cout << "Введите количество элементов массива (n <= 100): ";

cin >> n;

if (n > 100 || n <= 0) {

cout << "Ошибка: количество элементов должно быть от 1 до 100." << endl;

n = 0;

return;

}

a = new int[n];

cout << "Введите элементы массива:" << endl;

for (int i = 0; i < n; i++) {

cin >> a[i];

}

}

void output(int* a, int n) {

for (int i = 0; i < n; i++) {

cout << a[i] << " ";

}

cout << endl;

}

int countInRange(int* a, int n, int x, int y) {

int count = 0;

for (int i = 0; i < n; i++) {

if (a[i] >= x && a[i] <= y) {

count++;

}

}

return count;

}

void addAfterMax(int* &a, int &n, int x) {

if (n == 0) {

cout << "Ошибка: массив пуст." << endl;

return;

}

int maxIndex = 0;

for (int i = 1; i < n; i++) {

if (a[i] > a[maxIndex]) {

maxIndex = i;

}

}

int* newArray = new int[n + 1];

for (int i = 0; i <= maxIndex; i++) {

newArray[i] = a[i];

}

newArray[maxIndex + 1] = x; // adding the new element

for (int i = maxIndex + 1; i < n; i++) {

newArray[i + 1] = a[i];

}

delete[] a; // освобождаем старый массив

a = newArray; // заменяем указатель на новый массив

n++; // увеличиваем размер

}

void menu() {

cout << "1. Ввод массива" << endl;

cout << "2. Вывод массива" << endl;

cout << "3. Количество чисел в диапазоне" << endl;

cout << "4. Добавление числа после последнего максимального" << endl;

cout << "5. Завершение работы" << endl;

}

Продолжение Листинга 3.1

Соседние файлы в папке Вариант 18