Лекции по "Языкам и методам программирования" (PascalABC)

Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций

Описание работы

Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных

Работа содержит 10 файлов

Лекция 1.Представление алгоритмов на языке программирования Паскаль..doc

— 120.50 Кб (Открыть, Скачать)

Лекция 10. Интуитивное понятие алгоритма.doc

— 366.50 Кб (Открыть, Скачать)

Лекция 2. Построение линейных алгоритмов.doc

— 209.50 Кб (Открыть, Скачать)

Лекция 3. Алгоритмы, содержащие структуру ветвления..doc

— 68.00 Кб (Открыть, Скачать)

Лекция 4. Алгоритмы, содержание циклы.doc

— 343.50 Кб (Открыть, Скачать)

Лекция 5.Процедуры и функции пользователя..doc

— 95.50 Кб (Скачать)

Лекция 5.

Процедуры и функции пользователя.

В лекции рассматриваются следующие вопросы:

1.Зачем нужны процедуры  и функции пользователя.

2. Общий вид процедуры пользователя.

3. Процедуры без параметров

4. Процедура с входными, но без выходных параметров.

5. Процедуры с входными и выходными параметрами.

6.Общий вид функции  пользователя.

7.Пример использования  функции пользователя числового  типа.

8.Пример использования  функции пользователя логического  типа.

9.Пример использования  в программе и функций и  процедур пользователя.

10.Рекурсия прямая  и косвенная.

 

1. Зачем нужны  процедуры и функции пользователя.

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

При создании процедур или  функций пытаются достичь следующих целей:

- разделения некоторой  общей задачи на несколько  меньших по объему и сложности  частных задач;

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

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

 

2. Общий вид процедуры пользователя.

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

1.Заголовок

2.Объявление данных

3.Исполняемая часть

Существенные отличия  процедуры и вообще программы  в заголовке. Заголовок процедуры  пользователя начинается служебным словом Procedure, после него идет имя процедуры (которое дает пользователь), далее в круглых скобках указываются формальные параметры и их типы). Формальные параметры заголовка делятся на входные и выходные. Входные формальные параметры процедуры пользователя – это те параметры, которые получают свое значение из основной программы. Выходные формальные параметры свое значение передают в основную программу. Входные параметры записываются сразу после открытой круглой скобки в заголовке процедуры. Выходные формальные параметры записываются после служебного слова Var в заголовке процедуры, затем круглая скобка закрывается.

Формат заголовка:

 

Procedure имя процедуры (входные формальные параметры : их типы; Var выходные формальные параметры : их типы);


 

Для обращения к процедуре в  основной программе записывается процедурный  оператор, который состоит: из имени процедуры, и в круглых скобках перечисляются фактические параметры через запятую.

Между формальными и  фактическими параметрами должно быть взаимно однозначное соответствие. Это значит, что:

1.Должно быть одинаковое  количество формальных параметров  в заголовке процедуры и фактических  параметров в процедурном операторе.

2.Должен соблюдаться  порядок следования фактических  параметров в процедурном операторе и формальных параметров в заголовке процедуры.

3.Типы соответственных параметров  должны быть одинаковыми.

3. Процедуры без параметров

Пример. Дана функция . Построить таблицу значений функции на отрезке [a,b]с шагом h. Таблицу оформить в следующем виде:

_______________________________     Так как в таблице нужно  все 

:          Х              :              У                :    время рисовать подчеркиваю-

: 2 ___6.1____ 2 : 2 ____6.1_____ 2  :    щие полоски, то рисование ее

:_____________:_________________:    оформим  в виде процедуры 

:_____________:_________________:    пользователя. 

 

Procedure lin;

    Var i:Integer;

     Begin

     For i:=1 to 23 do Write(‘_’);

     Writeln;

     End;

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

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

В данной процедуре используется переменная i. Эта переменная используется только внутри процедуры и никакого отношения к основной программе она не имеет. Такие переменные называются локальными переменными и их тип указывается после заголовка процедуры в разделе Var.

В целом программа  будет иметь следующий вид:

Program tabl;

Var a,b,h,x,y : Real;

{Процедура  пользователя}

Procedure lin;

    Var i:Integer;

     Begin

     For i:=1 to 23 do Write(‘_’);

     Writeln;

     End;

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

Begin

    Writeln(‘Ввести концы отрезка”);

    Readln(a,b);

    Writeln(‘Ввести шаг’);

    Readln(h);

    Lin;   {оператор обращения к процедуре}

    Writeln(‘:       X       :               Y              :);

     Lin;

     X:=a;

     While x<=b do

             Begin

             Y:=Sin(x)+exp(x);

              Writeln(‘:  ‘,x:6:1,’  :  ‘,Y:6:1,’  :’);

              Lin;

              X:=x+h;

              End;

Readln;

End.

 

4. Процедура с входными, но без выходных параметров.

Пример. Даны три разных целых числа. Указать для каждого составное оно или простое.

Сначала предположим, что  у нас имеется одно целое число. Составим процедуру определения  это число простое или составное.

Procedure Prost(x:Integer);

     Var d,k : Integer;

Begin

      K := 0; {К –это счетчик делителей}

{В цикле переменная d – это числа, которые могут быть делителями данного числа х}

      For d := 1 to x do If x mod d=0 Then k := k+1;

{Если делителей меньше или равно 2, то число простое, т.е. оно делится только на 1 и само на себя}

      If k<=2

            Then Writeln(x,’простое число’)

            Else Writeln(x,’число составное’);

End;

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

Исходя из этого считаем, что  х – это входной параметр процедуры. Так как ответ для числа  простое оно или составное выводится внутри тела процедуры, то выходных параметров в данной процедуре не будет, т.е. в основную программу не передается ни одно значение. Основная программа примет вид:

Program chislo;

Var a,b,c : Integer;

 

{Процедура пользователя}

Procedure Prost (x : Integer) ;

 Var d,k : Integer; 

{d,k – локальные параметры, которые используются только внутри тела процедуры и в основную программу не передаются, поэтому они записаны не в заголовке, а в отдельном разделе Var}

Begin

      K := 0;

      For d := 1 to x do If x mod d=0 Then k := k+1;

      If k<=2

            Then Writeln(x,’простое число’)

            Else Writeln(x,’число составное’);

End;

 

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

Begin

Writeln(‘Ввести три целых числа’);

Readln(a,b,c);

Prost(a); {а – фактический параметр, значение которого передается в процедуру вместо х}

Prost(b);  {b – фактический параметр, который свое значение передает в процедуру в переменную х}

Prost( c );  {с – фактический параметр, значение которого передается в переменную х в процедуру}

Readln;

End.

 

5. Процедуры с входными и выходными параметрами.

Пример. Даны 3 целых числа a, b, c. Найти наибольший общий делитель этих чисел.

В математике имеется следующее  соотношение НОД(НОД(а,в),с). Для двух целых чисел НОД находится  по алгоритму Евклида. Оформим его в виде процедуры.

 

Procedure NOD (x,y : Integer; Var s : Integer);

Begin

While x<>y do If x>y Then x := x-y Else y := y-x;

S:=x;

End;

 

В этой процедуре х, у – это  два числа, для которых находим  НОД. Сам НОД мы обозначили через s. Таким образом х, у – это входные параметры процедуры, которые будут передаваться из основной программы в процедуру, а параметр s – выходной параметр, который передается из процедуры в основную программу.  Основная программа примет вид:

Program aa;

Var a,b,c, r,t : Integer;

 

{Процедура пользователя}

Procedure NOD (x,y : Integer; Var s : Integer);

{х,  у – входные формальные параметры}

{s – выходной формальный параметр}

{в процедуре  других параметров нет, поэтому  локальных параметров нет, поэтому  и раздела Var в процедуре нет}

Begin

While x<>y do If x>y Then x := x-y Else y := y-x;

S:=x;

End;

 

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

Begin

Writeln(‘’);

Readln(a, b, c);

NOD(a,b,r);  {a,b – фактические параметры, их значения передаются переменным x, y в процедуру,   r – тоже фактический параметр, но он свое значение получает из процедуры из переменной s}

NOD(r, c, t);  {r, c – фактические параметры, их значения передаются переменным x, y в процедуре,   t – фактический параметр, свое значение он получает из процедуры из переменной s}

Writeln(‘NOD(‘,a, ‘,’, b, ‘,’, c, ‘)=’,t);

Readln;

End.

 

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

 

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

Создадим процедуру для ответа на вопрос задачи для одного числа, а затем 4 раза обратимся к этой процедуре.

 

Program aa2;

Var a,b,c,d,m:Integer; {Это переменные, которые будут встречаться в основной программе. Они являются фактическими параметрами.}

 

{Процедура пользователя}

Procedure yes(n:Integer: Var k:Integer);

{Переменная k – это счетчик четных цифр в числе, переменная n – это само число, в котором ищем, сколько оно имеет четных цифр. Переменные n,k – это формальные параметры. N – это входной формальный параметр, k – выходной формальный параметр}

Var c:Integer;

{с – формальный локальный параметр, он встречается только в процедуре}

Begin

K:=0;

Repeat

C:=n mod 10;

If c mod 2=0 Then k:=k+1;

N:=n div 10;

Until n=0;

End;

 

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

Begin

Writeln(‘Ввести 4 целых числа’);

Readln(a,b,c,d);

 

{Ответ на вопрос задачи для 1 числа а}

Yes(a,m);

If m<>0

   Then Writeln(‘В числе’, а,’ есть четные цифры ’)

   Else Writeln(‘В числе’, а,’ нет четных цифр ’);

 

{Ответ на вопрос задачи для второго числа b}

Yes(b,m);

If m<>0

   Then Writeln(‘В числе’, b,’ есть четные цифры ’)

   Else Writeln(‘В числе’, b,’ нет четных цифр ’);

 

{Ответ на вопрос задачи для третьего числа с}

yes(с,m);

If m<>0

   Then Writeln(‘В числе’, с,’ есть четные цифры ’)

   Else Writeln(‘В числе’, с,’ нет четных цифр ’);

 

{Ответ на вопрос задачи для четвертого числа d}

Yes(d,m);

If m<>0

   Then Writeln(‘В числе’, d,’ есть четные цифры ’)

   Else Writeln(‘В числе’, d,’ нет четных цифр ’);

 

Readln;

End.

 

6.Общий вид  функции пользователя.

Функции пользователя –  это другой вид подпрограмм. Функции  пользователя очень похожи на процедуры  пользователя, но имеют свои особенности:

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

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

Лекция 6. Символьные и строковые переменные.doc

— 69.00 Кб (Открыть, Скачать)

Лекция 7.Структурный тип данных (массивы).doc

— 128.50 Кб (Открыть, Скачать)

Лекция 8.Комбинированный тип данных.doc

— 62.00 Кб (Открыть, Скачать)

Лекция 9.Файловый тип данных.doc

— 114.50 Кб (Открыть, Скачать)

Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)