Порядок выполнения задания к лабораторной работе № 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]:=St—T[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 Операции отношения над множествами
|
Приведем несколько примеров выполнения операций отношения. Пусть переменная М описана в программе следующим образом:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


