1 семестр / Лаболаторная 2 / Лабораторная работа №2_Вариант_12 - Отчёт
.docxМинистерство науки и высшего образования РФ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
ОТЧЕТ
Лабораторная работа № 2
по дисциплине «Программирование»
Выполнил студент:
Сергеев-Смирнов Сергей Николаевич
специальности 09.03.01
группа з-431П10-2
СОДЕРЖАНИЕ
1. Введение 3
2. Решение задачи №1 3
2.1. Описание используемых переменных 3
2.2. Описание алгоритма 3
2.3. Блок-схема алгоритма 4
2.4. Тестирование программы 5
3. Решение задачи №2 6
3.1. Описание используемых переменных 6
3.2. Описание алгоритма 6
3.3. Блок-схема алгоритма 7
3.4. Тестирование программы 8
ЛИСТИНГ ПРОГРАММЫ №1 10
ЛИСТИНГ ПРОГРАММЫ №2 11
1. Введение
Лабораторная работа №2 посвящена создание программ с использованием массивов и множеств. В этих программах полезно использовать подпрограммы. Программы должны быть написаны с использованием языка Паскаль в рамках структурного программирования. Массивом является последовательность элементов, одного и того же базового типа, расположенных в памяти непосредственно друг за другом. При этом доступ к отдельным элементам массива осуществляется с помощью индексации, то есть ссылки на массив с указанием номера (индекса) нужного элемента.
Подпрограмма — обособленная именованная часть программы со своим собственным локальным контекстом имен. Подпрограмма может многократно вызываться из разных частей программы.
2. Решение задачи №1
const n = ...;
var x, y : array [1..n] of real;
Дано k (1 <= k <= n–1). Преобразовать массив x по следующему правилу (воспользоваться массивом y как вспомогательным): элементы массива x циклически сдвинуть на k позиций влево.
Подсказка: определить процедуру для сдвига массива на 1 позицию влево и применить ее k раз.
2.1. Описание используемых переменных
x, y – массивы чисел;
n – размер массива константа;
i, j, L – переменные цикла;
k – переменная величины сдвига;
Shift – процедура;
2.2. Описание алгоритма
Вывод массива x до сдвига элементов. Элементы массива выбираются из случайных чисел от 0 до 9.
Вводим число k, значение которого показывает на сколько позиций нужно сдвинуть элементы массива.
Проверяем k на условие 1 <= k <= n-1.
Передаем процедуре Shift значение k в качестве параметра и запускаем процедуру на выполнение.
При выполнении процедуры, последовательно переносим элементы от первого до L из первого массива x, во второй массив y.
Последовательно переносим элементы от n до L+1 из первого массива x, во второй массив y.
Выводим содержимое массива Y после сдвига элементов.
2.3. Блок-схема алгоритма
Рис.
2.3
2.4. Тестирование программы
Величина сдвига k=1:
Рис.
2.4.1
Величина сдвига k=3:
Рис.
2.4.2
Величина сдвига k=5:
Рис.
2.4.3
3. Решение задачи №2
Во второй задаче нужно определить каких букв во введенной строке больше: латинских строчных согласных или гласных, при этом гласные буквы – a, e, i, o, u; остальные – согласные. Для упрощения задачи можно использовать множества.
3.1. Описание используемых переменных
Str – переменная вводимой строки;
count_lett, count_vow – переменные цикла;
vow, cons, no_lett – переменные гласных, согласных и не латинских букв.
3.2. Описание алгоритма
Задаем множество из латинских букв и множество латинских гласных букв.
Обнуляем переменные vow, сons и no_lett.
Вводим строку и присваиваем значение переменнй Str.
Запускаем цикл от первого символа строки до последнего с условием, если символ строки Str не принадлежит множеству letters, увеличиваем переменную no_lett на 1.
Если переменная no_lett равна 0, все символы строки Str принадлежат множеству латинских букв, то запускаем цикл от первого символа строки до последнего с условием, если символ строки Str принадлежит множеству vowels, переменную vow увеличиваем на 1, иначе cons увеличиваем на 1.
Сравниваем переменные vow и cons, если vow больше, то выводим на экран сообщение «Гласных больше», если vow и cons равны, то «Количество согласных и гласных одинаково», иначе «Согласных больше». А если переменная no_lett больше 0, т.е. в введенной строке присутствуют не латинские символы, то выводим сообщение «Введено некорректное значение».
3.3. Блок-схема алгоритма
Рис.
3.3
3.4. Тестирование программы
Вводим “qwerty”
Рис.
3.4.1
Вводим “ aeroprofi ”
Рис.
3.4.2
Вводим “ home”
Рис.
3.4.3
Вводим “doг”
Рис.
3.4.4
ПРИЛОЖЕНИЕ А
ЛИСТИНГ ПРОГРАММЫ №1
program Lab2_1_var12;
const
n=5; {колличество элементов в массиве}
var
x,y:array [1..n]of real; {два массива с вещественным типом}
i,L,k:integer; {переменные для цикла}
procedure Shift(val:integer); {процедура сдвига элементов}
var i:integer; {}
begin
L:=n-k; {блок переноса элементов массива}
for i:=1 to L do
begin
y[i]:=x[i+k]; {добавляем в массив y, эелементы массива x со смещением}
end;
for i:=n downto L+1 do
begin
y[i]:=x[i-L]; {добавляем последние элеменя массива x в массив y}
end;
end;
begin
writeln ('Массив до сдвига: '); {формирование массива x}
randomize; {функция случайных чисел}
for i:=1 to n do {цикл от 1 до n}
begin
x[i]:=random(10); {заполняем массив x случайными числами}
write (x[i]:2) {выводим на экран элементы массива x}
end;
begin
writeln;
writeln('Введите величину сдвига: '); {запрашиваем величину сдвига}
readln(k); {величину сдвига присваиваем переменной k}
if (1<=k) and (k<=(n-1)) then {проверка на условие переменной k}
begin
Shift(k);
writeln ('Массив после сдвига: '); {вывод массива Y}
for i:=1 to n do write (y[i]:2) {вывод массива y}
end
else writeln ('k не подходит'); {вывод если k не удовлетворяет условию}
end;
end.
ПРИЛОЖЕНИЕ B
ЛИСТИНГ ПРОГРАММЫ №2
program Lab2_2_var12;
const
letters=['A'..'Z','a'..'z']; {массив всех латинских букв}
vowels=['a','e','i','o','u']; {гласные}
var
Str:string; {строка}
count_lett, count_vow, vow, cons, no_lett:integer;
begin
vow := 0; {обнуляем переменную гласных}
cons := 0; {обнуляем переменную согласных}
no_lett := 0; {обнуляем переменную не латинских букв}
writeln ('Введите строку -->'); {запрашиваем строку}
readln (Str);
for count_lett:=1 to length(Str) do {проверка на пренадлежность}
{к множеству латинских букв}
begin
if not(Str[count_lett] in letters) then {если символ строки}
{не принадлежит массиву}
{латинских букв}
no_lett := no_lett + 1; {увеличиваем переменную не латинских букв}
end;
if no_lett = 0 then {если не латинских букв нет, то запускается проверка}
{на пренадлежность к множеству гласных букв}
begin
for count_vow := 1 to length(Str) do
begin {сравнения символа строки с множеством гласных}
if Str[count_vow] in vowels then {если символ строки}
{принадлежит массиву}
{гласных букв}
vow := vow + 1 {увеличиваем переменную гласных}
else cons := cons +1;{увеличиваем переменную согласных}
end;
if (vow > cons) then writeln('Гласных больше') {сравнение гласных и согласных букв}
else if (vow = cons)then writeln('Количество согласных и гласных одинакого')
else writeln('Согласных больше');
end
else writeln ('Введено некорректное значение');
{если в введенном значении не все буквы принадлежат}
{множеству латинских букв, то программа}
{попросту завершиться с соответствующим сообщением}
end.
2022 г.