
1 / лаба4
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА №44 Институт вычислительных систем и программирования
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
Доцент |
|
|
|
Л.Н.Бариков |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ЛАБОРАТОРНАЯ РАБОТА № 4
|
Статические одномерные массивы по курсу: Основы алгоритмизации и программирования на C/C++ |
по дисциплине: информатика |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z0411 |
|
|
|
Карелина М. В. |
|
номер группы |
|
подпись, дата |
|
фамилия инициалы |
Студенческий билет № |
2020/3477 |
|
|
|
Санкт-Петербург 2021
Цель лабораторной работы: изучение структурной организации массивов и способов доступа к их элементам; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки статических одномерных массивов.
Задание на программирование: используя технологию процедурного программирования, разработать программу обработки одномерных статических массивов в соответствии с индивидуальным заданием.
28. Дан массив y0, y1,…, yn-1. Определить произведение суммы отрицательных значений элементов массива, лежащих между элементами с наибольшим и наименьшим значениями, на их количество.
Математическая модель:
Решение задачи начинается с ввода исходных данных. Из формулировки задачи понятно, что исходный массив имеет n элементов. Следовательно, прежде всего, необходимо ввести значение m размера массива.
После этого необходимо задать значения всех элементов массива. Доступ к элементам массива осуществляется по их индексу (номеру данного элемента массива). Поэтому перебираем все индексы элементов массива от 0 до n-1 и задаём значения элементов с текущими номерами.
Для начала определяем максимальное и минимальное значение и их индексы. Для этого присваиваем переменной max y[0] и запускаем цикл, который сравнивает значения всех элементов массива и находит наибольшее, переменной indexmax присваивается значение индекса максимального элемента, аналогично для минимального значения элементов массива. Данные переменные определяют диапазон, в котором, в последующем, будут суммироваться отрицательные значения
Далее мы определяем расположение min и max относительно друг друга в зависимости от этого начинается цикл, либо от max, либо от min, который суммирует отрицательные элементы в данном диапазоне и подсчитывает их количество. После этого сумма отрицательных элементов умножается на их количество и выводится ответ.
Задача решена.
Схема алгоритма решения:
Ввод массива:
Поиск максимального и минимального значения и их индексов:
Вычисление произведения суммы отрицательных значений элементов массива, лежащих между элементами с наибольшим и наименьшим значениями, на их количество и вывод результатов вычислений:
Текст программы:
#include<iostream>
#include<cstdlib>
#include<math.h>
#include<stdio.h>
#include<locale.h>
using namespace std;
int main()
{
int* y = NULL;
int n;
bool fail = false;
int cnt = 0;
double average = 0.0;
do {
fail = false;
cout << "vvedite razmer massiva: ";
cin >> n;
if (cin.fail()) {
cout << "Nuznho vvesti chislo! Povtorite vvod " << endl;
fail = true;
}
cin.clear();
cin.ignore();
} while (fail);
y = (int*)malloc(sizeof(int) * n);
int max, indexmax, min, indexmin, neg, sum;
neg = 0;
sum = 0;
for (int i = 0; i < n; i++)
{
cout << "[" << i + 1 << "]" << ":";
cin >> y[i];
}
max = y[0];
min = y[0];
indexmin = 0;
indexmax = 0;
for (int i = 0; i < n; i++)
{
if (y[i] > max)
{
max = y[i];
indexmax = i;
}
}
cout << "Max: " << max << endl;
for (int i = 0; i < n; i++)
{
if (y[i] < min)
{
min = y[i];
indexmin = i;
}
}
cout << "Min: " << min << endl;
if (indexmax > indexmin)
{
for (int i = indexmin; i < indexmax + 1; i++)
{
if (y[i] < 0)
{
sum = sum + y[i];
neg = neg + 1;
}
}
}
else
{
for (int i = indexmax; i < indexmin + 1; i++)
{
if (y[i] < 0)
{
sum = sum + y[i];
neg = neg + 1;
}
}
}
cout << "chislo oticatel: " << neg << endl;
cout << "Summa: " << sum << endl;
sum = sum * neg;
cout << "Proizveden otricatel: " << sum << endl;
return 0;
}
Скриншот контрольного примера выполнения программы