Слайд 1ПАСКАЛЬ
массивы и подпрограммы
Слайд 4МАССИВЫ
Массивы являются представителями структурирован-ных типов данных, то есть таких, переменные которых
составлены из более простых элементов согласно определённому порядку. Массив - объединяет несколько однородных (принадлежащих одному типу) данных в единую структуру. Данные, объединяемые в массив, называются элементами. Каждому элементу отводится своя ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки.
Все элементы массива имеют одно общее имя - имя массива, и один общий тип значений - тип элементов.
Слайд 5 Количество элементов в массиве называют его размером. Размер массива играет
большую роль в момент резервирования (отведения места) памяти для элементов массива. Для того чтобы отвести место в памяти для элементов массива, их количество должно быть известно.
Если отведение места в памяти осуществляется в момент трансляции и при исполнении алгоритма не изменяется, то такое распределение памяти называется статическим, а соответствующие им массивы - статическими.
Возможно динамическое распределение памяти, когда отведение места элементам происходит в момент выполнения программы (динамические массивы). В Паскале для их реализации используются указатели.
Слайд 6 Для того чтобы отыскать информацию об отдельном элементе массива, с каждым
из них связывается некоторое значение (несколько значений), называемое индексом (индексами). Комбинация имени массива и индекса (индексов) однозначно определяет элемент массива. Индекс указывает расположение конкретного элемента массива по отношению к его началу. Если в качестве значений индекса используется начальный отрезок натурального ряда, то индекс совпадает с номером элемента в массиве.
Обращение к элементу массива осуществляется через указание имени массива-переменной и индекса (порядкового номера) данного элемента.
Слайд 7 При использовании выражений в качестве индекса необходимо следить за тем,
чтобы значение индекса не вышло за объявленные пределы. Поскольку компиляторы Паскаля не отслеживают эту ситуацию, следить за ней приходится программисту, причем тщательно, так как выход значения индексного выражения за объявленные границы является очень серьезной и распространенной ошибкой.
◄
Чтобы обратиться в тексте программы к конкретному элементу массива, необходимо указать имя массива, а затем в квадратных скобках указать (перечислить через запятую) индекс (индексы) элемента.
Mas [ 3 ]
Индексы могут быть заданы выражением (переменной) соответствующего типа.
Mas [ i ]
Слайд 8 Массивы описываются следующим образом
(в разделе описаний — описание переменных Var):
<Имя массива-переменной> : ARRAY [ диапазоны
индексов ] OF <тип элементов массива>;
При необходимости массивы нумеруются не одним индексом, а двумя или более. Диапазоны индексов тогда представляются перечислением через запятую.
В качестве типа для элементов массива можно использовать любые типы кроме файловых, т.е. все числовые, символьный, строковый и логический типы данных.
Слайд 9 Если для обращения к элементу массива используется один индекс, то массив
называется одномерным. Его можно рассматривать как аналог (модель) вектора в математике.
Var
Mas : ARRAY [ 1 . . 30 ] OF Byte;
Если для обращения к элементу массива используется два индекса, массив называется двумерным. Его можно рассматривать как аналог (модель) матрицы в математике.
Var
Mas : ARRAY [ 1 . . 30, 1 . . 7 ] OF Byte;
Слайд 1010. Программа вычисления суммы элементов введенного одномерного числового массива:
Program SummaGrup;
Var
Mas :
ARRAY [ 1 .. 20 ] OF Real;
i, N : Integer;
Sum : Real;
Begin
Writeln;
Writeln (’ Вычисления суммы введенных чисел ’);
Write (’ Укажите количество чисел : ’);
Readln ( N );
Слайд 11 Writeln;
Writeln (’ Введите суммируемые числа ’);
FOR
i := 1 TO N DO
Begin
Write ( i, ’ - е число равно ’);
Readln ( Mas [ i ]);
End;
Sum := 0;
FOR i := 1 TO N DO
Sum := Sum + Mas [ i ];
Writeln;
Writeln (’ Значение суммы : ’ , Sum:0:2);
End.
Слайд 12ЭФФЕКТИВНАЯ РАБОТА С МАССИВАМИ
Главным отличием элементов массива от простых
переменных является использование одного имени и различных индексов. Массивы предназначены для обработки структурированных объемов данных. Именно представление массива в виде таблицы и наличие индексов задает структуру данных. Если обыкновенные переменные разрознены (индивидуальны), то элементы массива тесно связаны (обобщены) друг с другом именем массива.
Преимуществом объединения в массив является то, что для указания операций над всем массивом не нужно указывать эту операцию для каждого элемента в отдельности.
Слайд 13 Эти свойства позволяют составлять более удобные и эффективные алгоритмы обработки структурированных
данных. Ключевым инструментом такой обработки является использование вместе с массивами циклов. Для поэлементной обработки всего массива необходимо:
определить действие над одним элементом массива;
определить последовательность «обхода» элементов массива;
двигаясь по этой последовательности применить действие к очередному элементу.
Слайд 14Пример практической задачи:
Найти сумму элементов двумерного массива, лежащих выше
главной диагонали.
Для указания элемента массива необходимо использовать два числа – индекс строки и индекс столбца. Различают два способа обращения (работы) к элементам массива:
прямая адресация: Mas [ 1, 2 ] := 3 – указываются непосредственно индексы элемента массива;
косвенная адресация: Mas [ i, j ] := 3 , где i := 1,
j := 2 – указывается выражение , результатом которого является индекс элемента массива.
Слайд 15
Главной диагональю двумерного массива (матрицы), считается диагональ из левого
верхнего угла таблицы в правый нижний. При этом получается, что элементы, лежащие на главной диагонали будут иметь одинаковые индексы, а для элементов расположенных выше главной диагонали номер столбца будет всегда превышать номер строки.
Реализуя основные правила поэлементной обработки всего массива разработаем алгоритм, на основании которого составим фрагмент программы:
Слайд 16FOR i := 1 TO 10 DO
Begin
FOR j := 1 TO 10 DO
Begin
ReadLn ( Massiv [ i, j ] );
IF j > i THEN Sum := Sum + Massiv [ i, j ];
End;
End;
Фрагмент программы нахождения среди элементов одномерного массива (до 100) первого с конца элемента больше заданного:
Слайд 17Write ( ’ Введите целое число : ’ );
ReadLn ( Zadan
);
Flag := False; {элемент еще не найден}
FOR i := 100 DOWNTO 1 DO
Begin
IF Massiv [ i ] > Zadan THEN
Begin {проверка главного условия}
Flag := True; {элемент найден!}
Break; {досрочный выход из цикла}
End;
End;
Слайд 18Классификация задач с использованием массивов:
По способу обработки элементов массива:
поиск: нахождение элемента
большего, меньшего или равного заданному; нахождение минимального или максимального элемента;
накопление: нахождение суммы, разности, произведения, отношения или количества элементов;
соответствие: проверка упорядоченности массива или соответствия ключу заданной последовательности.
Слайд 19По способу «обхода» элементов массива:
направление: в сторону конца массива, в сторону
начала массива (в сторону увеличения, уменьшения индексов массива);
точка отсчета: с начального или с конечного элемента массива; с заданной позиции элемента массива (с первого, последнего, заданного индекса);
количество: все элементы, заданное количество элементов.
Слайд 20По дополнительному условию:
значение: только положительные или отрицательные, четные или нечетные
элементы массива;
кратные или равные заданному значению;
индекс: четный или нечетный позиционный номер элемента массива, кратный заданному числу индекс элемента;
характеристика накопления: пока сумма (разность) элементов положительна, больше, меньше или равна заданному значению.
Слайд 21 Пример варианта перебора основывающийся на линейном изменении индекса массива (линейная обработка
элементов массива):
Пусть, например, необходимо подсчитать количество вхождений всех букв русского алфавита в некоторый текст. Для решения задачи можно ввести 33 счетчика - по одному для каждой буквы алфавита. Все 33 счетчика выполняют одну и ту же логическую функцию. Их можно сгруппировать в массив, присвоив массиву имя ”СЧЕТЧИК”, содержащий 33 элемента.
Слайд 22 Индекс его изменяется от 1 до 33, что позволяет различать счетчики:
СЧЕТЧИК [1] содержит количество вхождений «А», СЧЕТЧИК [2] - количество вхождений «Б» и т.д. СЧЕТЧИК [33] содержит количество вхождений «Я».
В массиве одновременно можно обрабатывать один, два, три и т.д. элемента, причем, если обрабатывается больше одного элемента, то возможна обработка соседями или группами по N.
Слайд 23 При переборе группами по N обработанные элементы массива повторно
не обрабатываются. Например, при переборе массива Mas [ 1 ], Mas [ 2 ],
Mas [ 3 ], Mas [ 4 ], Mas [ 5 ], Mas [ 6 ] группами по два элемента обработка будет проведена в следующей последовательности: Mas [ 1 ] и Mas [ 2 ],
Mas [ 3 ] и Mas [ 4 ], Mas [ 5 ] и Mas [ 6 ].
При переборе элементов массива индекс может меняться в арифметической, геометрической прогрессии. Характер изменения индекса может быть и более сложным - нелинейным.
Слайд 24Пример фрагмента программы поиска максимального элемента в одномерном массиве:
{ выберем схему
просмотра массива по два элемента, тогда на каждом шаге цикла нужно будет выбрать максимальный элемент из трех: Max, Imas [ i ],
Imas [ i + 1 ] }
Const
MaxN = 100;
Type
Mas = ARRAY [ 1 .. MaxN ] OF Integer;
Var
Imas : Mas; {исходный массив}
N : Integer; {количество используемых элементов}
Слайд 25 i : Integer; {индекс массива}
Max
: Integer; {максимальный элемент массива}
Begin
Write (’ Укажите количество чисел : ’);
Readln ( N );
Max := Imas [ 1 ];
i := 1;
WHILE i <= N DO
Begin
IF Imas [ i ] < Imas [ i + 1 ] THEN
Begin
IF Max < Imas [ i + 1 ] THEN Max := Imas [ i + 1 ]
End
IF Max < Imas [ i ] THEN Max := Imas [ i ]
End;
i := i + 2;
End;
IF N MOD 2 = 1 THEN
IF Max < Imas [ N ] THEN Max := Imas [ N ];
Writeln ( ’ максимальный элемент массива ’ , Max);
End.
В данном алгоритме шаг цикла равен двум, поэтому массив будет просмотрен в два раза быстрее, чем при схеме перебора по одному элементу.
Слайд 27Пример фрагмента программы сортировки элементов в одномерном массиве:
{ рассмотрим простейший вариант
сортировки массива – сортировка выбором; пусть есть массив из N элементов, сначала примем первый элемент за эталонный и найдём самый маленький среди элементов с номерами 2, 3, ... N и поменяем местами с первым элементом (при необходимости), затем среди элементов с номерами 3, 4, ... N найдём наименьший и поменяем местами со вторым, и т. д., в результате наш массив окажется отсортированным по возрастанию }
Слайд 28Где: Mas – исходный массив, N – количество элементов в массиве,
jmin – номер наименьшего элемента массива, buf – переменная используемая при обмене значений двух элементов.
FOR i := 1 TO N – 1 DO
Begin
jmin := i;
FOR j := i + 1 TO N DO
IF Mas [ j ] < Mas [ jmin ] THEN jmin := j;
buf := Mas [ i ];
Mas [ i ] := Mas [ jmin ];
Mas [ jmin ] := buf;
End;
Слайд 29{ другой способ — пузырьковая сортировка, он работает быстрее; на первом
этапе двигаемся от N-го элемента до 2-го и для каждой пары элементов проверяем, не меньше ли текущий элемент предыдущего; если меньше, то меняем местами текущий и предыдущий; в итоге первый элемент станет наименьшим в массиве; на втором этапе также проходим элементы от N-го до 3-го, на третьем — от N-го до 4-го, и т. д.; в итоге массив также будет отсортирован по возрастанию }
Слайд 30Где: Mas – исходный массив, N – количество элементов в массиве,
buf – переменная используемая при обмене значений двух элементов.
FOR i := 2 TO N DO
FOR j := N DOWNTO i DO
IF Mas [ j ] < Mas [ j – 1 ] THEN
Begin
buf := Mas [ j ];
Mas [ j ] := Mas [ j – 1 ];
Mas [ j – 1 ] := buf;
End;
Слайд 31 Числовую информацию иногда проще и эффективнее обрабатывать, как строку.
Число, записанное в строковую переменную, естественно числом не является, но очень часто требуется его использовать в качестве числа. Для этого нужно произвести преобразование типа.
Str ( Dig [ : M [ : N]], St ) – преобразования числового значения в строковое, где Dig - число (либо арифметическое выражение), St - строковая переменная (где M число позиций для отображения числа, N – количество знаков после запятой, параметры M и N необязательные).
Слайд 32 Обратное преобразование:
Val ( St, Dig, C ) – перевод
строкового представления числа в числовое, где St - строка, содержащая число, Dig - числовая переменная, в которую будет помещен результат, С - переменная целочисленного типа (Integer).
Соответствующие преобразования необходимы, т.к. с символьной (строковой) информацией недопустимы математические операции, а обработка чисел, как ”символьного массива” эффективней и проще.
Слайд 33 При заполнении числовых одномерных массивов с большим количеством исходных значений, а
тем более многомерных, эффективней и проще использовать ”генератор случайных чисел” :
Randomize;
FOR i := 1 TO N DO
FOR j := 1 TO N DO
Begin
Mas [ i , j ] := Random ( chislo );
Write ( i , ’-я строка, ‘ , j , ’-й столбец ‘ , Mas [ i , j ] );
End;
Слайд 34Строка как массив
Строку (тип String) можно рассматривать как набор однотипных
символов (массив), к которым можно обращаться по их порядковому номеру. Номер первого элемента строки - 1, второго – 2, и т.д., номер последнего элемента строки можно определить функцией Length(Stroka).
Пример фрагмента программы:
Var
Stroka : String;
Begin
Writeln (’ Вывести по буквам слово ’);
Слайд 35 Stroka [ 4 ] := ’С’;
Stroka
[ 3 ] := ’Р’;
Stroka [ 2 ] := ’А’;
Stroka [ 1 ] := ’М’;
Writeln (’ Получилась строка : ’ , Stroka);
Writeln (’ Длина получившейся строки равна ’ , Length ( Stroka ));
End.
11. Программа вывода на экран “чётных” символов cтроки:
Program Chet;
Var
Stroka : String;
Слайд 36 i : Byte;
Begin
Writeln (’
Вывод на экран “четных” букв ’);
Writeln (’ Введите строку текста ’);
Readln ( Stroka );
FOR i := 1 TO Length ( Stroka ) DO
Begin
IF i MOD 2 = 0 THEN
Begin
Write ( i , ’-я буква: ’);
Writeln ( Stroka [ i ]);
End;
End;
End.
Слайд 3712. Программа проверки слова, как перевертыша (т.е. слово одинаково пишется слева-направо
и справа-налево):
Program Over;
Var
Slovo : String;
Dlina, i : Integer;
Flag : Boolean;
Begin
Writeln (’ Проверка слова на перевертыш ’);
Writeln;
Write (’ Введите слово : ’);
Readln ( Slovo );
Слайд 38 Dlina := Length ( Slovo );
i :=
1;
Flag := TRUE;
WHILE (i <= Dlina / 2) and Flag DO
Begin
Flag := (Slovo [ i ] = Slovo [ Dlina – i + 1 ]);
i := i + 1;
End;
Writeln;
Write (’ Слово ’ , Slovo);
IF Flag THEN Writeln (’ - перевертыш. ’)
ELSE Writeln (’ - не перевертыш. ’);
End.
Слайд 39Ряд стандартных функций и процедур для работы со строками:
Concat (st1,
st2, .., stn) – объединение строк (конкатенация), возращает строку st1+st2+..+stn ;
Copy (st, pz, lin) – возвращает фрагмент строки st, который начинается в позиции pz и имеет длину lin ;
Insert (pst, st, pz) – вставляет подстроку pst в строку st, начиная с позиции pz ;
Слайд 40 Delete (st, pz, lin) – удаляет из строки st фрагмент,
который начинается в позиции pz и имеет длину lin ;
Pos (pst, st) – ищет первое вхождение подстроки pst в строке st, и возвращает номер первого символа подстроки pst в строке st или 0 если вхождение не найдено .
Слайд 41Пример фрагмента программы замены текста:
Var
Stroka, St_ud, St_vs
: String;
Pozic, Dlina : Byte;
Begin
Writeln (‘ Введите строку текста : ‘);
Readln ( Stroka );
Writeln (‘ Введите, что заменить (в строке) : ‘);
Readln ( St_ud );
Writeln (‘ Введите, на что заменить : ‘);
Readln ( St_vs );
Слайд 42Dlina := Length ( St_ud );
WHILE Pos (
St_ud, Stroka ) < > 0 DO
Begin
Pozic := Pos ( St_ud, Stroka );
Delete ( Stroka, Pozic, Dlina );
Insert ( St_vs, Stroka, Pozic );
End;
Writeln ( Stroka );
Слайд 43 При компиляции для каждой переменной отводится свой участок памяти. Для всех
переменных типа String отводится по 256 байт, это может привести к тому, что при использовании достаточно большого их количества, памяти может не хватить.
Чтобы этого не происходило, при описании переменной типа String возможно указание максимального числа символов, которое можно занести в нее. Таким образом, экономится память и увеличивается быстродействие программ. Например:
Var
Stroka : String [ 30 ];
Слайд 46 Существуют динамические и статические переменные:
У
обычных переменных сразу после их описания резервируется область памяти, и эта область закрепляется за переменной на все время работы программы. Такого рода переменные называют - статическими переменными.
Но какая-то переменная нужна не на всё время выполнение программы, а только на какую-то часть этого времени. Переменные которые резервируют область памяти, а затем освобождают её во время выполнения программы, называют – динамическими переменными.
Слайд 47ПОДПРОГРАММЫ
Метод последовательной детализации позволяет составить алгоритм из действий, которые, не являясь
простыми, сами представляют собой достаточно самостоятельные алгоритмы. В этом случае говорят о вспомогательных алгоритмах или подпрограммах.
Использование подпрограмм позволяет сделать основную программу более наглядной, понятной, а в случае, когда одна и та же последовательность команд встречается в программе несколько раз, даже более короткой и эффективной.
Слайд 48Подпрограмма - это последовательность операторов, которые определены и записаны только
в одном месте программы (разделе описания), однако их можно вызвать для выполнения из одной или нескольких точек программы (разделе операторов) . Каждая подпрограмма определяется уникальным именем.
В языке ПАСКАЛЬ существуют два типа подпрограмм - процедуры и функции, определяемые программистом. Процедура и функция - это именованная последовательность описаний, операторов и инструкций, реализующая некоторое действие.
(разделе описания)
(разделе
операторов)
Слайд 49program ...
{раздел описаний}
const ...
type ...
var ...
{тело подпрограммы}
procedure MyProc;
begin
{действия}
end;
{раздел операторов - тело
основной программы}
begin
{действия}
end.
Слайд 50Процедуры и функции, используемые в программе, должны быть соответствующим образом описаны
до первого их упоминания. Вызов процедуры или функции производится по их имени.
Работа с процедурами и функциями состоит из двух частей:
1) описания процедуры или функции;
2) вызова ее на исполнение.
Процедура может возвращать в качестве ответа несколько значений, а функция только одно.
Процедура и функция может содержать такие - же разделы описаний, что и ПАСКАЛЬ - программа. А именно: разделы описания модулей, меток, констант, типов переменных, вложенных процедур и функций.
Слайд 51Таким образом синтаксически процедуры и функции состоят из заголовка (содержащего ключевое слово procedure или function, имени,
за которым может следовать описание передаваемых параметров в скобках, тип возвращаемого значения через символ двоеточия для функций и точки с запятой для процедур), после заголовка следует тело, после которого ставится символ - ; .
Тело процедуры или функции, как и программы, в свою очередь может содержать описания процедур и функций. Таким образом, процедуры и функции могут быть вложены друг в друга.
Слайд 52Procedure (:; < Имя формального
Параметра
2> : <Тип>; . . .);
{раздел описаний подпрограммы}
Label
{метки}
Const
{объявление констант}
Type
{определения типов данных}
Var
{объявления переменных}
Begin
{тело процедуры – раздел операторов}
End;
Имя формального
Параметра 2>:<Тип>; . . .) : <Тип результата>;
{раздел описаний подпрограммы}
Begin
{тело функции – раздел операторов}
End;
В теле функции обязательно должна быть команда присвоения такого вида:
<Имя функции> := <Выражение>; {результат}
Слайд 54 Подпрограммы в языке Паскаль могут иметь параметры (значения, передаваемые в процедуру
или функцию в качестве аргументов). При описании указываются так называемые формальные параметры (имена, под которыми будут фигурировать передаваемые данные внутри подпрограммы) и их типы. При вызове подпрограммы вместе с ее именем должны быть заданы все необходимые параметры в том порядке, в котором они находятся в описании. Значения, указываемые при вызове подпрограммы, называются фактическими параметрами.
Слайд 55Рассмотрим пример нахождения максимального из трёх чисел:
Program Max1;
Var
ch1, ch2, ch3, max : Integer;
Begin
Write (‘ Введите число: ‘ ); Readln ( ch1 );
Write (‘ Введите число: ‘ ); Readln ( ch2 );
Write (‘ Введите число: ‘ ); Readln ( ch3 );
IF ch1 > ch2 THEN max := ch1 ELSE max := ch2;
IF ch3 > max THEN max := ch3;
Writeln (‘ Максимальное число : ‘ , max);
Readln;
End.
Слайд 56 13. Перепишем его с использованием процедуры:
Program Max2p;
Var
ch1, ch2, ch3, max : Integer;
Procedure FindMax;
Begin
IF ch1 > ch2 THEN max := ch1 ELSE max := ch2;
IF ch3 > max THEN max := ch3;
End;
Begin
Write (‘ Введите число: ‘ ); Readln ( ch1 );
Write (‘ Введите число: ‘ ); Readln ( ch2 );
Write (‘ Введите число: ‘ ); Readln ( ch3 );
FindMax;
Writeln (‘ Максимальное число: ‘ , max);
End.
Слайд 5714. Перепишем его с использованием функции:
Program Max2f;
Var
ch1,
ch2, ch3 : Integer;
Function FindMax ( a, b: Integer ) : Integer;
{Описываем функцию FindMax с формальными параметрами A и B, которая принимает значение максимального из них}
Begin
IF a > b THEN FindMax := a ELSE FindMax := b;
End;
Begin
Write (‘ Введите число: ‘ ); Readln ( ch1 );
Write (‘ Введите число: ‘ ); Readln ( ch2 );
Write (‘ Введите число: ‘ ); Readln ( ch3 );
Writeln (‘ Максимальное число: ‘ , FindMax ( FindMax ( ch1, ch2), ch3 ));
End.
Слайд 58 Необходимо отметить краткость тела основной программы и на прозрачность действий внутри
функции. Формальные параметры A и B, используемые в подпрограмме, не имеют никакого отношения к переменным ch1 и ch2 (ch3), описанным в основной программе.
Максимум из трёх чисел определяется по ним однозначно, или, говоря математическим языком, является функцией этих трёх чисел.
Существует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке.
Слайд 59 В первом случае значение переменной-фактического параметра при вызове подпрограммы присваивается локальной
переменной, являющейся формальным параметром подпрограммы. Что бы потом ни происходило с локальной переменной, это никак не отразится на соответствующей глобальной. Передача параметров по ссылке отличается тем, что при описании подпрограммы перед именем переменной-формального параметра ставится служебное слово Var. Теперь использование в качестве фактических параметров выражений или непосредственных значений уже не допускается - они должны быть именами переменных.
Слайд 6015. Программа определения максимального из трёх чисел (процедурный вариант):
Program Max3;
Var
ch1, ch2, ch3, max : Real;
Procedure Title;
Begin
Writeln (‘ Программа определения большего из трех чисел. ‘);
End;
Слайд 61Procedure Input ( Var ch1, ch2, ch3 : Real );
Begin
Write (‘ Введите число: ‘ ); Readln ( ch1 );
Write (‘ Введите число: ‘ ); Readln ( ch2 );
Write (‘ Введите число: ‘ ); Readln ( ch3 );
Writeln;
End;
Procedure Find ( ch1, ch2 : Real; Var rez : Real );
Begin
IF ch1 > ch2 THEN rez := ch1 ELSE rez := ch2;
End;
Слайд 62Procedure Output ( max : Real );
Begin
Write
(‘ Большее из трех число равно: ‘, max);
End;
{ основное тело программы }
Begin
Title;
Input ( ch1, ch2, ch3 );
Find ( ch1, ch2, max );
Find ( max, ch3, max );
Output ( max );
End.
Слайд 63Задание - каков результат работы данной программы?:
Program Perem;
Var
S1, S2, S3 :
Integer;
Procedure Swap ( Var A, B : Integer );
Var C : Integer;
Begin
C := A; A := B; B := C;
End;
Begin
Writeln (‘ Введите три числа ‘);
Readln ( S1, S2, S3 );
IF S1 > S2 THEN Swap ( S1, S2 );
IF S2 > S3 THEN Swap ( S2, S3 );
IF S1 > S2 THEN Swap ( S1, S2 );
Writeln (’ … … … : ’, S1, S2, S3);
End.
Слайд 64При желании можно создать “нестандартные” подпрограммы:
Перевод угловой меры из радианной
в градусную:
Function Grad ( x : Real ) : Real;
Begin
Grad := x * 180 / Pi;
End;
Из градусной меры в радианную:
Function Rad ( x : Real ) : Real;
Begin
Rad := Pi * x / 180;
End;
Или полезным дополнением может являться функция тангенса, которую можно вычислить через стандартные функции.
Слайд 6516. Программа сравнения точности вычисления значения квадратного корня:
Program Geron_Sqrt;
Function
Geron ( ch : Real ) : Real;
Const
E = 1.0E-10;
Var
posl, pred : Real;
Begin
posl := 1.0;
WHILE Abs ( pred – posl ) >= E DO
Begin
pred := posl;
posl := (posl + ch / posl) / 2;
:= posl;
End;
Begin
Writeln (‘ Сравнение точности вычисления значения квадратного корня ‘);
Writeln;
Writeln (‘ Вычисление квадратного корня по формуле Герона: ‘, Geron ( 3.0 ) : 0 : 15);
Writeln (‘ Вычисление квадратного корня по стандартной функции: ‘, Sqrt ( 3.0 ) : 0 : 15);
Writeln;
End.