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

2 сем / OP_L4

.docx
Скачиваний:
4
Добавлен:
04.07.2024
Размер:
1.66 Mб
Скачать

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

ФЕДЕРАЦИИ

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

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

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

КАФЕДРА

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

ОЦЕНКА

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

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

должность, уч. степень, звание подпись, дата инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ

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

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

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

СТУДЕНТКА ГР.

№ номер группы подпись, дата инициалы, фамилия

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

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

Лабораторная работа №4

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

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

Задание на программирование: используя технологию процедурного программирования, разработать программу обработки одномерных статических массивов в соответствии с индивидуальным заданием.

Порядок выполнения работы:

  1. Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные, их ограничения.

  2. Разработать математическую модель: описать с помощью формул и рисунков структуру массивов и процесс их преобразования.

  3. Построить схемы алгоритмов основных функций и задачи в целом.

  4. Составить программу на языке ​C/C++​.

  5. Входные данные на этапах тестирования и демонстрации работы преподавателю должны задаваться либо с использованием специально подобранных арифметических формул, либо вводиться с клавиатуры по запросу. ​Датчики псевдослучайных чисел использовать запрещается​. Если это явно не оговорено в конкретном варианте задания, значения элементов в каждом исходном массиве ​должны быть разными​.

Выходные данные должны выводиться на экран с пояснениями.

  1. Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.

  2. Использовать стандартные потоковые объекты ввода/вывода ​cin​ и ​cout​.

  3. Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры (скриншоты).

  4. Вариант задания определяется как две последних цифры номера зачетной книжки (цц), взятых по модулю 50, плюс 1 (цц mod 50 + 1). Например, 00 – 1-й вариант, 01 – 2-ой вариант, 49 – 50-ый вариант, 60 – 11-ый вариант, и т.д.

Вариант № 49

    1. Постановка задачи.

Дан массив z0 , z1 , …, z2n−1 . Построить новый массив с элементами, значения которых соответственно равны zn , , , …, z2n−1 , zn−1 , zn−2 , …, z0 . Исходный массив оставить без изменения .

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

Первым делом мы просим пользователя ввести половину размера массива и присваиваем его переменной n, далее создаем переменную m, которая будет размером нашего массива(2n).

После этого выполняется функция ​ArrInput, в ходе выполнения которой​ пользователь вводит исходный массив.

Затем начинает свое исполнение функция ​ArrOutput, она заполняет​ результирующий массив благодаря двум циклам for, один от n-ного до m-мого элемента, другой от n-1 элемента до нулевого. Внутри цикла мы только приравниваем элемент результирующего массива к определенному элементу исходного.

После чего идет функция ​PrintArr. В ней происходит печать массива. Для​ читабельности результата сделано выделение под каждый элемент 4

символов в консоли (​cout.width(4))​​. Во второй раз (при печати​ результирующего массива) перегружаем функцию, чтобы не делать отдельную для каждого массива.

  1. Схема алгоритма.

  1. Код.

#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. Тестовые примеры.

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