Чурилов / лаб 4
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра вычислительных систем и сетей
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
доцент _________________ Л.Н. Бариков
подпись, дата
ЛАБОРАТОРНАЯ РАБОТА №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.