Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Чурилов / лаб 4

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

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

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

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

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

Кафедра вычислительных систем и сетей

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

доцент _________________ Л.Н. Бариков

подпись, дата

ЛАБОРАТОРНАЯ РАБОТА №4

Статические одномерные массивы

по дисциплине «Основы программирования»

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов

подпись, дата

Студенческий билет № 2019/3684

Санкт-Петербург 2020г.

Цель работы:

Изучение структурной организации массивов и способов доступа к их элементам; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки статических одномерных массивов.

Индивидуальное задание на лабораторную работу:

Дан массив z0, z1,…, zn-1. Если значения элементов этого массива не образуют убывающую арифметическую последовательность, то заменить отрицательные значения его элементов единицами, а положительные значения удвоить.

Математическая модель:

Решение задачи начинается с ввода исходных данных. Для удобства тестирования сразу укажем максимальное количество элементов массива RAZ и будем тестировать программу при значениях размера массива n, не превышающих RAZ.

После этого необходимо задать значения всех элементов массива. Доступ к элементам массива осуществляется по их индексу (номеру данного элемента массива). Поэтому перебираем все индексы элементов массива от 0 до n (нумерация элементов массива начинается с 0) и задаём значения элементов с текущими номерами с клавиатуры, то есть вручную.

Для наглядности и удобства отслеживания работы программы выведем наш массив z на экран.

Далее для решения поставленной задачи создадим две отдельные функции: в одной будем проверять, является ли введенный массив убывающей арифметической прогрессией, а во второй выполнять замену элементов, если это требуется.

Чтобы узнать, представляет ли собой набор элементов убывающей арифметической прогрессии, найдём разность арифметической прогрессии d, вычитая из второго элемента a[1] первый a[0]. Далее в цикле for проверим, является ли массив арифметической прогрессией. Если значение d меньше нуля и массив есть арифметическая прогрессия, то выводим сообщение, что имеем убывающую арифметическую прогрессию, и исходный массив без изменений.

Если же массив представляет собой просто набор значений без определенной закономерности, то воспользуемся второй функцией, в которой отрицательные значения элементов заменим единицами, положительные удвоим. Соответственно, чтобы проверить верность выполнения программы, выводим полученный массив.

Задача решена.

Блок-схема алгоритмов преобразования массива:

функция proverka_mas

функция zamena_mas

Текст программы:

#include<iostream>

#include<stdlib.h>

#include<locale.h>

#include <iomanip>

using namespace std;

const int RAZ = 30; //предельный размер массива

typedef float telem; //определение типа элементов массива

typedef telem tmas[RAZ]; //определение типа массива

void inputmas(tmas, int); //функция ввода массива

void outputmas(const tmas, int); //функция выводы массива

bool proverka_mas(tmas, int); //функция преобразования массива

void zamena_mas(tmas, int); //функция замены элементов массива

bool fl=true;

int main()

{

tmas z; //массив

int n; //размер массива

setlocale(LC_ALL, "Russian");

cout << "Введите размер массива (число должно не превышать " << RAZ << ") : ";

cin >> n;

while (n> RAZ || n <= 0) //проверка параметра n

{

cout << "Данный параметр должен быть положительным числом, не превышающим " << RAZ << " !" << endl;

cout << "Введите параметр n." << endl;

cin >> n;

}

inputmas(z, n); //Ввод исходного массива

cout << "\n\nИсходный массив:" << endl;

outputmas(z, n); //Вывод исходного массива

proverka_mas(z, n); //Проверка массива, является ли он убывающей арифметической прогрессией

if (fl)

cout << "\n\nИсходный массив является убывающей арифметической прогрессией." << endl;

else

{

cout << "\n\nИсходный массив не является убывающей арифметической прогрессией." << endl;

cout << "Новый массив: " << endl;

zamena_mas(z, n);

outputmas(z, n);

}

cout << endl << endl;

system("pause");

return 0;

}

void inputmas(tmas a, int n)

{

cout << "\nВведите в одной строке элементы массива, состоящего из " << n << " чисел, и нажмите <Enter>." << endl;

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

cin >> a[i];

}

void outputmas(const tmas a, int n)

{

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

{

cout << a[i] << setw(4);

}

}

void zamena_mas(tmas a, int n)

{

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

{

if (a[i] < 0)

a[i] = 1;

else if (a[i] > 0)

a[i] = a[i] * 2;

}

}

bool proverka_mas(tmas a, int n)

{

telem d = 0;

d = a[1] - a[0]; //разность арифметической прогрессии

if (d < 0)

{

for (int i = 1; i < n - 1; i++) //проверяем, что массив является арифметической прогрессией

{

if ((a[i + 1] - a[i]) != d)

{

fl = false;

break;

}

}

}

return(fl);

}

Контрольные примеры выполнения программы:

Пример №1.

Пример №2.

Пример №3.