Порядок выполнения задания к лабораторной работе № 6

1. На основании теоретических сведений составьте программу в соответствии с заданием к лабораторной работе № 6.

2. После составления своей программы для проверки правильности сравните ее с одним из возможных вариантов программы, приведенным ниже.

Program Example_1;

Const N = 12;

Type Vec = Array [1..N] Of Real;

Var T, Dt : Vec;

St : Real;

I : Integer;

Begin ---Ввод исходных данных--

WriteLn('Введите таблицу температур');

For I := 1 То N Do

Begin

Write(I : 2,':');

ReadLn(T[I])

End;

--Вычисление средней температуры--

St:=0;

For I:=1 To N Do

St:=St+T[I];

St:=St/N;

--Вычисление таблицы отклонений от среднего--

For I:=1 То N Do

Dt[I]:=StT[I];

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

WriteLn('Средняя температура равна ', St:6:2);

WriteLn;

WriteLn('Отклонения от средней температуры:');

For I := 1 То N Do

WriteLn(I:1,':',Dt[I]:6:2)

End.

По такой программе можно рассчитать среднее значение и век­тор отклонений от среднего значения для любого одномерного вещественного массива. Настройка размера массива осуществля­ется только редактированием раздела констант.

Лабораторная работа № 7П

Рекурсивные подпрограммы в ТурбоПаскале.

Задание к лабораторной работе № 7П

Набрать и отладить программу вычисления суммы элементов линейного массива. При решении использовать рекурсивную форму алгоритма в соответствии с утверждением: сумма равна нулю, если число элементов равно нулю, и равна сумме всех предыдущих элементов плюс последний, если число элементов не равно нулю.

Краткие теоретические сведения

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

НЕ нашли? Не то? Что вы ищете?

Приведем примеры рекурсивных определений некоторых ма­тематических функций.

Классическим примером рекурсии является определение фак­ториала. С одной стороны, факториал определяется в виде: n! = = 1 ∙ 2 ∙ 3 ... n, а с другой стороны, его можно определить следу­ющим образом:

Граничным в данном случае является условие n < 1.

Рекурсивное определение функции К(п), возвращающей ко­личество цифр в заданном натуральном числе n, имеет вид

Обращение к рекурсивной подпрограмме ничем не отличается от вызова любой другой подпрограммы. При этом при каждом новом рекурсивном обращении в памяти создается новая копия подпрограммы со всеми локальными переменными. Такие копии будут создаваться до момента выхода на граничное условие. Оче­видно, что в случае отсутствия граничного условия, неограни­ченный рост числа таких копий приведет к аварийному заверше­нию программы, т. е. переполнения стека.

Порождение все новых копий рекурсивной подпрограммы до выхода на граничное условие называется рекурсивным спуском. Максимальное число копий рекурсивной подпрограммы, одно - вренно находящихся в памяти компьютера, называется глубиной рекурсии. Завершение работы рекурсивных подпрограмм, вплоть до самой первой, инициировавшей рекурсивные вызовы, назы­вается рекурсивным подъемом.

Выполнение действий в рекурсивной подпрограмме может быть организовано одним из следующих способов:

Рекурсивный подъем

Рекурсивный спуск

Рекурсивный спуск и рекурсивный подъем

Begin

Begin

Begin

P;

операторы;

операторы;

операторы;

P

P;

End;

End;

операторы

End;

Здесь Р — рекурсивная подпрограмма.

Действия в рекурсивной подпрограмме могут выполняться либо на одном из этапов рекурсивного обращения, либо на обоих сразу. Способ организации действий диктуется логикой разрабатывае­мого алгоритма.

Порядок выполнения задания к лабораторной работе № 7П

1. На основании теоретических сведений составьте программу вычисления суммы элементов линейного массива ( см. раздел Задание к лабораторной работе № 7П).

2. После составления своей программы для проверки правильности сравните ее с одними из возможных вариантов программ, приведенных ниже.

Program SUM_LIN_MAS;

Type LinMas = Array[1..100] Of Integer;

Var A : LinMas;

I, N : Byte;

{Рекурсивная функция}

Function Summa(N : Byte; A : LinMas): Integer;

Begin

If N = 0

Then Summa := 0

Else Summa := A[N] + Summa(N - 1, A)

End;

{Основная программа}

Begin

Write('Количество элементов массива? ');

ReadLn(N);

Randomize;

For I := 1 To N Do

Begin

A[I] := -10 + Random(21);

Write(A[I] : 4)

End;

WriteLn;

WriteLn('Сумма: ', Summa(N, A))

End.

3. Произведите отладку своей программы и предъявите отлаженную программу преподавателю.

Лабораторная работа № 8П

Множества в ТурбоПаскале.

Задание к лабораторной работе № 8П

1. Набрать и отладить программу определения количества знаков препинания (. ─ , ; : ! ?) в символьной строке.

2. Самостоятельно написать и отладить вариант программы без применения множества, используя в операторе IF логическое выражение с проверкой условия вхождения каждого знака препинания в символьную строку.

3. Сравнить две программы по п. п. 1, 2 и сформулировать вывод о целесообразности использования множеств в программах.

Краткие теоретические сведения

Множеством называется совокупность однотипных элементов, рассматриваемых как единое целое. В Паскале могут быть только конечные множества. В ТурбоПаскале множество может содержать от 0 до 255 элементов.

В отличие от массива элементы множества не пронумерованы и не упорядочены. Каждый отдельный элемент множества не иден­тифицируется и с ним нельзя выполнять какие-либо действия. Действия могут выполняться только над множеством в целом.

Тип элементов множества называется базовым типом. Базовым может быть любой скалярный тип за исключением типа Real.

Конструктор множества. Конкретные значения множества за­даются с помощью конструктора множества, представляющего со­бой список элементов, заключенный в квадратные скобки. Сами элементы могут быть либо константами, либо выражениями базо­вого типа.

Приведем несколько примеров задания множеств с помощью конструктора:

[3, 4, 7, 9, 12] — множество из пяти целых чисел;

[1. .100] — множество целых чисел от 1 до 100;

['a', ' b', 'с'] множество, содержащее три литеры а, Ь, с;

['а'..'z','?','!'] множество, содержащее все строчные латинские буквы,
а также знаки ? и!.

Символом «[]» обозначают пустое множество, т. е. множество, не содержащее никаких элементов.

Не имеет значения порядок записи элементов множества вну­три конструктора. Например, [1, 2, 3] и [3, 2, 1] — это эквивален­тные множества.

Каждый элемент в множестве учитывается только один раз, поэтому множества [1, 2, 3, 4, 2, 3, 4, 5] и [1..5] эквивалентны.

Переменные множественного типа описываются следующим образом:

Var <идентификатор> : Set Of <базовый тип>.

Например:

Var A, D : Set Of Byte;

В : Set Of 'a'..'z';

С : Set Of Boolean;

Нельзя вводить значения в множественную переменную опера­тором ввода и выводить оператором вывода. Множественная пере­менная может получить конкретное значение только в результате выполнения оператора присваивания следующего формата:

<Множественная переменная> := Множественное выражение>

Например:

А := [50,100,150,200];

В := ['m','n1,'k'];

С := [True, False];

D := А;

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

Операции над множествами. В Паскале реализованы основные операции математической теории множеств: объединение, пере­сечение, разность. Во всех этих операциях операнды и результаты есть множественные величины одинакового базового типа.

Объединением двух множеств А и В называется множество, со­стоящее из элементов, входящих хотя бы в одно из множеств А или В. Знак операции объединения в Паскале — это «+».


На рис. 1, а схематически показан результат объединения двух множеств.

Рис. 2.27. Операции над множествами: аобъединение; бпересечение; вразность.

Например:

[1,2,3,4] + [3,4,5,6]®[1,2,3,4,5,6].

Пересечением двух множеств А и В называется множество, со­стоящее из элементов, одновременно входящих и в множество А, и в множество В (рис. 1, б). Например:

[1,2,3,4] * [3,4,5,6] ® [3,4] .

Разностью двух множеств А и В называется множество, состо­ящее из элементов множества А, не входящих в множество В (рис. 1, в). Например:

[1,2,3,4] – [3,4,5,6] ® [1,2]

[3,4,5,6] – [1,2,3,4] ® [5,6]

Очевидно, что операции объединения и пересечения переста­новочные, а разность множеств — операция неперестановочная.

Множества можно сравнивать между собой, т. е. для них опре­делены операции отношения. Результатом отношения, как извест­но, является логическая величина True или False. Для множеств применимы все операции отношения, за исключением «>» и «<».

В табл. 1 описаны операции отношения над множествами. При этом предполагается, что множества А и В содержат элементы одного типа.

Таблица 1

Операции отношения над множествами

Отношение

Результат

True

False

А = В

М ножества А и В совпадают

В противном случае

А <> В

Множества А и В не совпадают

То же

А <= В

Все элементы А принадлежат В

»

А >= В

Все элементы В принадлежат А

»

Приведем несколько примеров выполнения операций отноше­ния. Пусть переменная М описана в программе следующим образом:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8