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

1 семестр / Лаболаторная 2 / Лабораторная работа №2_Вариант_12 - Отчёт

.docx
Скачиваний:
33
Добавлен:
17.03.2022
Размер:
730.95 Кб
Скачать

Министерство науки и высшего образования РФ

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

ОТЧЕТ

Лабораторная работа № 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. Описание алгоритма

  1. Вывод массива x до сдвига элементов. Элементы массива выбираются из случайных чисел от 0 до 9.

  2. Вводим число k, значение которого показывает на сколько позиций нужно сдвинуть элементы массива.

  3. Проверяем k на условие 1 <= k <= n-1.

  4. Передаем процедуре Shift значение k в качестве параметра и запускаем процедуру на выполнение.

  5. При выполнении процедуры, последовательно переносим элементы от первого до L из первого массива x, во второй массив y.

Последовательно переносим элементы от n до L+1 из первого массива x, во второй массив y.

  1. Выводим содержимое массива 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. Описание алгоритма

  1. Задаем множество из латинских букв и множество латинских гласных букв.

  2. Обнуляем переменные vow, сons и no_lett.

  3. Вводим строку и присваиваем значение переменнй Str.

  4. Запускаем цикл от первого символа строки до последнего с условием, если символ строки Str не принадлежит множеству letters, увеличиваем переменную no_lett на 1.

  5. Если переменная no_lett равна 0, все символы строки Str принадлежат множеству латинских букв, то запускаем цикл от первого символа строки до последнего с условием, если символ строки Str принадлежит множеству vowels, переменную vow увеличиваем на 1, иначе cons увеличиваем на 1.

  6. Сравниваем переменные 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 г.

Соседние файлы в папке Лаболаторная 2