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

ЛР№2-Вариант 8

.docx
Скачиваний:
18
Добавлен:
09.05.2015
Размер:
238.84 Кб
Скачать

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

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

высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра компьютерных систем в управлении и проектировании (КСУП)

ОТЧЕТ

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

по дисциплине “программирование”

по учебно-методическому пособию Потаповой Е.А.

Выполнил студент

2015 г.

СОДЕРЖАНИЕ

1. Введение 3

2. Анализ задачи № 1 4

3. Решение задачи №1 5

3.1. Описание используемых переменных, обоснование выбора типа данных 5

3.2. Описание алгоритма 6

3.3. Блок-схема программы 7

4. Анализ задачи № 2 8

5. Решение задачи №2 9

5.1. Описание используемых переменных, обоснование выбора типа данных 9

5.2. Описание алгоритма 10

5.3. Блок-схема программы 11

6. Заключение 12

Приложение 1. Листинг программ 13

Задача 1. 13

Задача 2. 14

Приложение 2. Распечатки тестов 15

Задача 1. 15

Задача 2. 16

1. Введение

Лабораторная работа № 2 посвящена созданию программ с использованием массивов (одномерных и матриц) и множеств.

Каждое значение регулярного типа (массива) состоит из фиксированного числа элементов одного и того же базового типа (т. е. значение содержит фиксированное число однотипных компонент).

Способ образования позволяет обозначать значения этих типов одним групповым именем, а доступ к отдельным элементам массивов посредством указания этого группового имени и порядкового номера (индекса) необходимого элемента.

Для корректного определения регулярного типа необходимо задать две характеристики: тип элементов массива, количество и ≪способ нумерации≫ элементов.

Чтобы ввести в язык Паскаль вычислительную структуру множеств, используют множественный тип. Значения множественного типа, так же, как и массивы, строятся из нескольких значений одного (базового) типа. Однако в отличие от массивов значение множественного типа может содержать любое количество различных элементов базового типа — от нуля элементов (пустое множество) до всех возможных значений базового типа. Иными словами, возможными значениями переменных множественного типа являются все подмножества значений базового типа.

Множественный тип задается с помощью двух служебных слов: set и of и следующего за ним базового типа.

2. Анализ задачи № 1

Задача 1

Дана последовательность из n целых чисел. Определить количество инверсий в этой последовательности (т.е. таких пар элементов, в которых большое число находится слева от меньшего: xi > xj при i < j).

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

3. Решение задачи №1

3.1. Описание используемых переменных, обоснование выбора типа данных

Переменные:

N – количество чисел, целочисленный тип integer;

i, j – счетчики циклов, целочисленный тип integer;

k – количество инверсий, целочисленный тип integer.

mas – массив чисел, целочисленного типа integer.

3.2. Описание алгоритма

  1. Вводим значение переменной n. Так как пользователь может случайно ввести отрицательное число, то необходимо дать ему возможность для повторного ввода значения переменной n. Поэтому организуем цикл с постусловием;

  2. Организуем цикл по переменной «i». В цикле запрашиваем ввод чисел;

  3. Организуем ещё один цикл по переменной «i» от 1 до N-1. В нем ещё один подцикл по «j» от i+1 до N. Так чтобы при сравнении чисел с индексами «i» и «j», индекс «i» всегда был меньше индекса «j»;

  4. Сравниваем числа с индексами «i» и «j»;

  5. Когда условие выполняется, выводим эти числа и увеличиваем количество инверсий k;

  6. Выводим значение k.

3.3. Блок-схема программы

4. Анализ задачи № 2

Задача 2

Дана строка. В алфавитном порядке напечатайте (по разу) все строчные латинские согласные буквы, входящие в эту строку. Указание: гласные буквы — а, e, i, o, u; остальные — согласные. Решение задачи простое, если вы будете использовать множества.

Для решения задачи будем использовать такой тип данных как множество символов set of char. Установим необходимое множество строчных согласных латинских букв. Введем строку и будем проверять на принадлежность символов строки установленному множеству.

5. Решение задачи №2

5.1. Описание используемых переменных, обоснование выбора типа данных

Переменные:

Res – множество символов с результатом выборки, тип set of char;

Sogl – множество символов строчных латинских согласных букв, тип set of char;

str – переменная для ввода строки, тип string;

i – счетчик цикла, целочисленный тип integer;

с – счетчик цикла, символьный тип char.

5.2. Описание алгоритма

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

  2. Вводим строку str.

  3. Организуем цикл с параметром «i» от 1 до длины строки str. В цикле проверяем каждый символ строки str на принадлежность множеству Sogl. Если условие выполняется, то добавляем этот символ строки str в множество результата Res.

  4. Если множество элементов Res пустое, то выводим соответствующее сообщение, иначе выводим элементы множества в алфавитном порядке.

  5. Для этого используем цикл с параметром «с» от ‘a’ до ‘z’. В котором проверяем принадлежность символа переменной «c» множеству результата Res.

5.3. Блок-схема программы

6. Заключение

В ходе лабораторной работы были проанализированы и разработаны алгоритмы решения задач с использованием массивов и множества. Был написан программный код и проведены тесты программ на работоспособность. Таким образом были усвоены базовые методы работы с регулярными и множественными типами данных.

Приложение 1. Листинг программ

Задача 1.

Program Lab2_Var8_z1;

Var N, // количество чисел

i,j, // счетчики цикла

k:integer; // количество инверсий

mas: array [1..100] of integer; //массив чисел

Begin

//цикл постпроверки для ввода корректных данных

Repeat

Writeln('Введите число N>1 (количество чисел) :');

Readln(N);

until N>1;

Writeln('Введите числа:');

//цикл для заполнения массива числами

For i:=1 to N do

Read(mas[i]);

//сравнение чисел согласно условия задачи

For i:=1 to N-1 do

For j:=i+1 to N do

if mas[i]>mas[j] then

begin

writeln('Инверсия: ',mas[i],'>',mas[j]);

Inc(k); //увеличение количества инверсий на 1

end;

//вывод результата

Writeln('Количество инверсий: ',k);

End.

Задача 2.

program Lab2_Var8_z2;

var

Res, Sogl: set of char; // sogl - множество символов строчных латинских согласных букв

// Res - множество символов с результатом выборки

str: string; //строка для ввода

i: integer;

c: char;

begin

// наполняем множество строчными латинскими согласными буквами

Sogl := ['a'..'z'] - ['a', 'e', 'i', 'o', 'u'];

WriteLn('Введите строку:');

ReadLn(str); // вводим строку

Write('Результат: ');

// проверяем элементы строки на принадлежность множеству

for i := 1 to Length(str) do

if str[i] in sogl then include(Res, str[i]); //встреченные согласные добавляем в множество Res

// Если множество элементов Res пустое, то выводим соответствующее сообщение,

// иначе выводим элементы множества в алфавитном порядке

if Res = [] then write('Латинских согласных букв в строке нет') else

for c := 'a' to 'z' do

if c in Res then write(c, ' ');

end.

Приложение 2. Распечатки тестов

Задача 1.

1. Ввод N≤1:

2. N=3

:

Задача 2.

1. Произвольная строка символов:

2. Произвольная строка символов:

Соседние файлы в предмете Основы алгоритмизации и программирования