1. Цель работы
Целью работы является изучение структуры данных одномерный массив.
2. Задание
Согласно варианту №1 в одномерном массиве, состоящем из n вещественных элементов,
вычислить:
1. сумму отрицательных элементов массива;
2. произведение элементов массива, расположенных между максимальным и
минимальным элементами;
3. упорядочить элементы массива по возрастанию.
3. Описание созданных функций
Для реализации задания нам потребуются следующие функции:
Имя: sum_neg
Назначение: вычислить сумму отрицательных элементов массива
Входные данные:
m – массив вещественных элементов;
n – количество элементов в массиве.
Выходные данные:
sum – сумма отрицательных элементов массива.
Побочный эффект: отсутствует.
Тестовые данные:
Прототип: double sum_neg(const double m[], const size_t n);
Алгоритм:
псевдокод
Сумма = 0
Для каждого элемента в массиве
Если он отрицательный
То прибавить его значение к сумме
блок-схема
Имя: prod_minmax
Назначение: произведение элементов массива, расположенных между максимальным и
минимальным элементами.
Входные данные:
m – массив вещественных элементов;
n – количество элементов в массиве.
Выходные данные:
prod – произведение элементов массива, расположенных между максимальным и
минимальным элементами.
Побочный эффект: отсутствует.
Тестовые данные:
Прототип: double prod_minmax(const double m[], const size_t n);
Алгоритм: 69
псевдокод
Вставить псевдокод.
блок-схема
Вставить блок-схему.
Имя: sort
Назначение: упорядочить элементы массива по возрастанию.
Входные данные:
m – массив вещественных элементов;
n – количество элементов в массиве.
Выходные данные:
m – упорядоченный массив.
Побочный эффект: отсутствует.
Тестовые данные:
Прототип: void sort(double m[], const size_t n);
Алгоритм:
псевдокод
Вставить псевдокод.
блок-схема
Вставить блок-схему.
4. Листинг программы
#include
using namespace std;
double sum_neg(const double m[], const size_t n);
double prod_minmax(const double m[], const size_t n);
void sort(double m[], const size_t n);
int main()
{
setlocale(LC_ALL, "russian");
70
size_t n;
cout << "Введите размер массива: ";
cin >> n;
double *m = new double[n];
for (size_t i=0; i
{
cout << "Введите m[" << i << "]: ";
cin >> m[i];
}
cout << "Сумма отрицательных элементов равна " << sum_neg(m, n) << endl;
cout << "Произведение чисел между минимумом и максимумом равно " <<
prod_minmax(m, n) << endl;
cout << "Отсортированный массив: " << endl;
sort(m, n);
for (size_t i=0; i
cout << "m[" << i << "] = " << m[i] << endl;
return 0;
}
double sum_neg(const double m[], const size_t n)
{
double sum = 0;
for (size_t i=0; i
if (m[i] < 0)
sum += m[i];
return sum;
}
double prod_minmax(const double m[], const size_t n)
{
size_t pos_min = 0;
for (size_t i=1; i
if (m[i] < m[pos_min])
pos_min = i;
size_t pos_max = 0;
for (size_t i=1; i
if (m[i] > m[pos_max])
pos_max = i;
if (pos_min > pos_max)
{
size_t t = pos_min;
pos_min = pos_max;
pos_max = t;
}
if (pos_min == pos_max - 1)
return 0;
double prod = 1;
for (size_t i=pos_min+1; i<=pos_max-1; i++) 71
prod *= m[i];
return prod;
}
void sort(double m[], const size_t n)
{
bool is_swap;
do
{
is_swap = false;
for (size_t i=0; i
if (m[i] > m[i+1])
{
double t = m[i];
m[i] = m[i+1];
m[i+1] = t;
is_swap = true;
}
}
while (is_swap);
}
5. Пример выполнения программы
Ниже показан пример выполнения программы.
Рис. 1. Пример выполнения программы
Видно, что результаты расчётов совпадают с тестовыми данными.
6. Анализ результатов и выводы
К достоинствам программы можно отнести:
Программа выполняет поставленную задачу и работает без ошибок (для корректных
тестовых данных). 72
Каждое задание реализовано в виде отдельной функции, что позволяет эти функции
в других проектах.
За счёт динамического выделения памяти программа использует минимальное
количество оперативной памяти.
Из недостатков можно отметить:
Не производится проверка входных данных.
Сортировка реализована не самым быстрым алгоритмом, что на больших массивах
приводит к более медленной работе. |