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

№ номер группы подпись, дата инициалы, фамилия
Студенческий билет №
Санкт-Петербург 2020
Лабораторная работа №4
Статические одномерные массивы
Цель лабораторной работы: изучение структурной организации массивов и способов доступа к их элементам; совершенствование навыков процедурного программирования на языке C/C++ при решении задач обработки статических одномерных массивов.
Задание на программирование: используя технологию процедурного программирования, разработать программу обработки одномерных статических массивов в соответствии с индивидуальным заданием.
Порядок выполнения работы:
Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные, их ограничения.
Разработать математическую модель: описать с помощью формул и рисунков структуру массивов и процесс их преобразования.
Построить схемы алгоритмов основных функций и задачи в целом.
Составить программу на языке C/C++.
Входные данные на этапах тестирования и демонстрации работы преподавателю должны задаваться либо с использованием специально подобранных арифметических формул, либо вводиться с клавиатуры по запросу. Датчики псевдослучайных чисел использовать запрещается. Если это явно не оговорено в конкретном варианте задания, значения элементов в каждом исходном массиве должны быть разными.
Выходные данные должны выводиться на экран с пояснениями.
Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.
Использовать стандартные потоковые объекты ввода/вывода cin и cout.
Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры (скриншоты).
Вариант задания определяется как две последних цифры номера зачетной книжки (цц), взятых по модулю 50, плюс 1 (цц mod 50 + 1). Например, 00 – 1-й вариант, 01 – 2-ой вариант, 49 – 50-ый вариант, 60 – 11-ый вариант, и т.д.
Вариант № 49
Постановка задачи.
Дан массив z0 , z1 , …, z2n−1 . Построить новый массив с элементами, значения которых соответственно равны zn , , , …, z2n−1 , zn−1 , zn−2 , …, z0 . Исходный массив оставить без изменения .
Математическая модель.
Первым делом мы просим пользователя ввести половину размера массива и присваиваем его переменной n, далее создаем переменную m, которая будет размером нашего массива(2n).
После этого выполняется функция ArrInput, в ходе выполнения которой пользователь вводит исходный массив.
Затем начинает свое исполнение функция ArrOutput, она заполняет результирующий массив благодаря двум циклам for, один от n-ного до m-мого элемента, другой от n-1 элемента до нулевого. Внутри цикла мы только приравниваем элемент результирующего массива к определенному элементу исходного.
После чего идет функция PrintArr. В ней происходит печать массива. Для читабельности результата сделано выделение под каждый элемент 4
символов в консоли (cout.width(4)). Во второй раз (при печати результирующего массива) перегружаем функцию, чтобы не делать отдельную для каждого массива.
Схема алгоритма.
Код.
#include<iostream>
#include<locale.h> using namespace std; const int SIZE = 20; typedef int telem; typedef telem tmas[SIZE];
void ArrInput(tmas, int); //Ввод исходного массива void ArrOutput(tmas, tmas, int, int);//заполнение результирующего массива
void PrintArr(tmas, int);//вывод массива int main() { int n,m; setlocale(LC_ALL, "Rus"); tmas arrIn, arrOut;
cout << "Введите половину размера массива(n<= " << SIZE /
2 << "): ";
cin >> n;
if ((SIZE / 2) < n || n < 1) {
cout << "Данные введены
некорректно!\nПерезапустите программу.";
return 0;
} m = 2 * n; ArrInput(arrIn, m);
ArrOutput(arrIn, arrOut, m, n);
cout << endl << "Исходный массив:" << endl; PrintArr(arrIn, m);
cout << endl << "Результирующий массив:" << endl; PrintArr(arrOut, m);
return 0;
}
void ArrInput(tmas arrIn, int m) {//вводим исходный массив cout << "Введите исходный массив, состоящий из " << m <<
" элементов, через пробел:" << endl;
for (int i = 0; i < m; i++) { cin >> arrIn[i];
}
}
void ArrOutput(tmas arrIn, tmas arrOut, int m, int n) { int j = 0;
for (int i = n; i < m; i++, j++) { arrOut[j] = arrIn[i];
}
for (int i = (n - 1); i >= 0; i--, j++) { arrOut[j] = arrIn[i];
}
}
void PrintArr(tmas arrIn, int m) { for (int i = 0; i < m; i++) { cout.width(4);
cout << arrIn[i];
}
}
5. Тестовые примеры.