Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 / лаба4

.docx
Скачиваний:
0
Добавлен:
16.05.2025
Размер:
167.02 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА №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;

}

Скриншот контрольного примера выполнения программы

Соседние файлы в папке 1