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

соответствующие формальные и фактические параметры должны иметь один тип.

Рассмотрим алгоритм решения задачи. Составить программу для вычисления а": целые числа а и n (n>0) вводятся с клавиатуры.

Исходные данные: а и n (n>0) – основание и показатель степени (целый тип).

Результат: s Блок-схема:

Составим процедуру для вычисления степени целого числа.

Procedure Degree (x,y: Integer; Var st:Longint); Var i: Integer; {описательная часть} Begin {тело процедуры}

st:= 1;

For i:= 1 To у Do st :=t * x; End;

Первая строчка описания – это заголовок процедуры, который начинается со слова Procedure. Процедура названа именем Degree. В скобках записан список формальных параметров, то есть, перечислены переменные с указанием их типа. Мы используем три параметра: первый – основание степени, то есть число, которое надо возвести в степень; второй – показатель степени, третий – результат. Первые два формальных параметра – параметры-значения, третий – параметр-переменная, и перед ним указано слово Var. Все они описаны как целые (х и у – переменные типа Integer, a st – типа Longint, так как степенная функция быстро возрастает).

61

После заголовка процедуры идут разделы описаний. В нашем примере имеется только раздел описания переменных, в котором описывается одна переменная i (счетчик цикла).

Далее идет тело процедуры. Оно начинается служебным словом Begin и заканчивается служебным словом End, после которого стоит точка с запятой (в конце программы после последнего End ставится точка). В теле процедуры вычисляется степень числа х с помощью цикла For.

В программе процедуры и функции описываются после раздела описания переменных программы, но до начала е` основной части, то есть до Begin, начинающего эту часть.

Вся программа для решения нашей задачи может иметь следующий вид:

Program Example;

Var a, n: Integer; s: Longint;

Procedure Degree (x,y: Integer; Var st: Longint); Var i:Integer;

Begin st:=1;

For i:=l To у Do st: = st*x; End; Begin

Writeln ('Введите два числа – основание и показатель степени'); Readin (а, п);

Degree (a, n, s); {обращение к процедуре} Writeln ('Результат', s);

Readin;

End.

Тестирование. a=2, n=3, тогда s=8

Подпрограммы-функции. Мы уже пользовались встроенными функциями Паскаля. Кроме них, мы можем писать свои функции, которые отличаются от процедур тем, что:

функция возвращает при обращении к ней одно единственное значение, и это значение простого типа (массив или множество не могут быть значениями функции);

вызов подпрограммы-функции производится просто путем указания её имени в составе какого-либо выражения или в списке аргументов подпрограммы. Это может быть арифметическое выражение, если функция арифметическая. Имя функции в вызывающей программе может появиться только в правой части оператора присваивания.

62

Описание функции, создаваемой программистом, выглядит так: function имя_функции (параметр_1 : тип_1;

параметр_2 : тип_2;

. . . пapaметр_N : тип__М) : тип функции; раздел описаний функции

begin

раздел операторов функции имя_функции := выражение; end;

Слово function является зарезервированным словом языка Pascal. Имя функции выбирается программистом в соответствии с обычными правилами и используется для вызова функции в тексте программы. Параметры – это список переменных с указанием их типов. В отличие от стандартных функций параметров может быть сколько угодно.

Тип функции – это тип значения, которое вычисляет функция. Он обязан быть простым.

Вслед за заголовком располагается тело функции, которое устроено аналогично программе или процедуре. Есть важное требование – в теле функции должен присутствовать оператор присваивания:

Примеры: PROZ9

program kombinatorica; var a1,a2,a3:longint;

c,k,n:integer;

function factorial(n:integer):longint; var i:integer;

rez:longint; begin rez:=1;

for I:=1 to n do rez:=rez*i; factorial:=rez; end;

begin readln(n,k); a1:=factorial(n); a2:=factorial(k);

63

a3:=factorial(n-k); c:=a1 div(a2*a3); writeln(c); readln;

end.

PROZ10

Program example_10; var n1,n2:longint;

k1,k2:byte;

function Quant(x:longint):byte; var k:byte;

Begin k:=0;

while x<>0 do begin

inc(k); x:=x div 10;

end;

quant:=k;

end; Begin

writeln ('введите 2 числа'); readln(n1,n2); k1:=quant(n1); k2:=quant(n2);

if k1=k2 then writeln ('одинаковое кол-во цифр')

else if k1>k2 then writeln ('в первом числе цифр больше') else writeln ('во втором числе цифр больше');

readln;

end.

Практический блок

Изучите теоретический материал, введите на ПК программные коды всех примеров, протестируйте их и проанализируйте, как используются подпрограммы в качестве процедур и функций. Выявите их отличия.

64

Задания для самостоятельной работы

1.Какие проблемы возникают в практике программирования и как они решаются?

2.Каковы основные принципы структурного программирования?

3.Почему наличие полноценных процедур и функций является принципиально важным для структурно-ориентированного языка высокого уровня?

4.Назовите базовые алгоритмические структуры.

5.Из каких разделов состоит программа?

6.Является ли заголовок программы обязательным?

7.Какие разделы описаний вы уже знаете?

8.Каким служебным словом начинается раздел описания констант? Приведите пример описания константы.

9.Каким служебным словом начинается раздел описания типов? Приведите пример описания типа.

10. Каким служебным словом начинается раздел описания переменных? Приведите пример описания переменных.

11. Как оформляется тело основной программы?

12. Приведите примеры использования технологии структурного программирования в гуманитарных областях знаний.

13. В чем заключается метод пошаговой детализации?

14. Что называется вспомогательным алгоритмом? Как он реализован в программировании?

15. Что называется подпрограммой? В чём отличие от программы?

16. В чём сходство и различие подпрограмм-процедур и подпрограмм-функций в языке Turbo Pascal?

17. В чём различие между стандартными и определёнными пользователем подпрограммами? Приведите примеры.

18. Как осуществляется механизм передачи данных и результатов между программой и подпрограммой в Turbo Pascal?

19. Что называется параметром? Формальные и фактические параметры, взаимосвязь между ними?

20. Для чего используется исполнение программы в пошаговом режиме с заходом в процедуры, и как это осуществить?

21. Чем отличаются локальные и глобальные переменные? Какова область их действия?

65

22.В чём отличие между параметрами-переменными и параметрами-значениями и в каких ситуациях целесообразно использовать те и другие?

23.В чем, в принципе, заключается рекурсия, и как она реализована на Pascal?

Творческий блок

1. В приведенных примерах определите, какие алгоритмы выполняются в этих программах?

Пример 1. program maximum; var a,b,c,d:real;

function max2(x,y:real):real; begin

if x>y then max2:=x else max2:=y; end;

begin

write('vvedite 4 chisla:');readln(a,b,c,d); writeln('maximum is',a:5:2,b:5:2,c:5:2,d:5:2,'=', max2(max2(a,b),max2(c,d)):5:2);

readln;

end.

Пример 2. program treug1;

var x1,x2,x3,x4,y1,y2,y3,y4,s,pl,a,b,c:real; i:integer;

function dlina(x,y,x1,y1:real):real; begin dlina:=sqrt(sqr(x-x1)+sqr(y-y1)); end;

procedure plo(a,b,c:real;var pl:real); var p:real;

begin p:=(a+b+c)/2;

pl:=sqrt(p*(p-a)*(p-b)*(p-c)); end;

2. Даны фрагменты программ. Укажите, какие из параметров параметры-значения, какие – параметры-переменные?

66

Что будет выдано на печать при исполнении программ? Перечислите локальные и глобальные переменные.

program primer; var c,d:integer;

procedure A(x,y:integer); begin

y:=x+10;

end;

procedure A1(x:integer; var y:integer); begin

y:=x+10;

end;

procedure A2(var x,y:integer); begin

y:=x+10;

end; BEGIN c:=2; d:=0; A(c,d); writeln(d);

c:=2; d:=0; A1(c,d); writeln(d);

c:=2; d:=0; A2(c,d); writeln(d); readln; end.

3. Задача. Необходимо найти площадь выпуклого четырехугольника, заданного координатами своих вершин.

67

Тема 10. Структурированные типы данных, таблицы как способ организации данных.

Одномерный массив.

Теоретический блок

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

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

ВTurbo Pascal пять структурированных типов: массивы; строки; множества; записи; файлы;

Вобычной жизни основным средством структурирования являются таблицы – линейные (с одной строкой) и двумерные (состоящие из строк и столбцов). В программировании по аналогии с таблицами разработаны одномерные и двумерные массивы.

Массив – упорядоченная совокупность однотипных данных, предназначенная для хранения информации.

Одномерный массив – это массив, каждый элемент которого характеризуется одной мерой – его порядковым номером.

а

2

 

0

 

15

 

-5

1

 

2

 

3

 

n

 

Для

каждого

элемента одномерного массива характерно

:

 

 

 

 

 

a[3]:=15

 

 

 

имя массива

индекс элемента

значение элемента

Так как все элементы массива хранятся в памяти ПК последовательно, а память ПК ограничена, то перед началом работы

68

необходимо зарезервировать место под массив, т.е. описать его, используя служебное слово array. В данном описании зарезервируется 100 ячеек целого типа.

var a: array [1..100] of integer;

Другой способ связан с понятием типа данных. В Turbo Pascal предусмотрен механизм создания новых типов, которые принято называть пользовательскими или конструируемыми. Их можно создавать на основе стандартных и ранее созданных типов. Описание новых типов происходит в разделе TYPE. После этого можно в разделе Var создавать переменные этих типов. Также, можно сразу описывать новый тип при создании переменной в разделе Var.

type

имя типа = array [список индексов] of тип

Здесь имя типа – правильный идентификатор; список индексов

– список одного или нескольких индексных типов, разделенных запятыми; тип – любой тип данных.

const n = 5;

type

mas = array [1..n] of integer; var

a: mas; i: byte;

Три способа описания одного и того же типа массива: type {1} M1 = array [0..5] of integer;

M2 = array [char] of M1;

M3 = array [-2..2] of M2;

{2} M3 = array [-2..2] of array [char] of array [0..5] of integer; {3} M3 = array [-2..2,char,0..5] of integer;

var A:M3;

{Обращаться к элементам массива можно следующим образом:}

begin

read (A[-1,'a',3]); read (A[1]['x'][0]); A[1]['c',1]:=100; end.

Глубина вложенности, т.е. количество индексов, при определении массивов не ограничена. Играет роль только суммарный

69

объем данных в программе. В стандартном режиме работы Turbo Pascal этот объем ограничен размерами сегмента, т.е. 64 килобайта. Целиком над массивами допускается применение только операции присваивания массивов (подмассивов) одинаковых типов. Остальные операции должны выполняться поэлементно.

Заполнение одномерного массива.

Блок-схема алгоритма заполнения одномерного массива a[i], состоящего из n элементов.

Заполнение массива осуществляется 3 способами:

1.Заполнение константой (с помощью формулы) program tabl;

var i,n:integer;

a:array [1..50] of integer; begin

for i:=1 to 10 do a[i]:=100; (a[i]:= 2*i+1:

for i:=1 to 10 do write (a[i]:3); {вывод в строчку} writeln;

readln;

end.

2.Заполнение с клавиатуры

program tabl;

70

Соседние файлы в папке из электронной библиотеки