Лекции по "Языкам и методам программирования" (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 Кб (Скачать)

3.Из функции пользователя  можно передать в основную программу только одно значение – это значение самой функции.

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

Формат объявления функции  пользователя следующий:

Function имя_функции (Список получаемых параметров: их_типы) : Тип_функции;

Begin

Тело_функции (т.е. любые операторы  языка Паскаль)

End;

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

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

Пример. Найти количество размещений из n элементов по m элементов.

Решение. В математике известна формула, по которой вычисляется  количество размещений: a=n!/(n-m)! Таким образом, видно, что для вычисления количества размещений необходимо дважды вычислять факториал некоторых выражений: сначала n!, а затем (n-m)! Поэтому вычисление факториала проведем с помощью функции пользователя.

Program a1;

Var    n,m : Integer;  a : Real;

{Функция пользователя}

Function Fact(k : Integer) : Longint;

Var   i : Integer;  p : Real;

Begin

p := 1;

For  i := 1  to  k  do  p := p*i;

Fact := p;

End;

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

Begin

Writeln(‘ Ввести значения чисел n и m’);

Readln(n, m);

A := Fact( n ) / Fact(n – m);

Writeln(‘Число размещений из n элементов по m  =’, a : 7 : 0);

End.

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

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

Пример. Даны три целых  положительных числа a, b, c. Вывести на экран сначала все три целых числа с заголовком: исходные числа;  затем вывести простые числа из данных, если они есть, с заголовком: простые числа; если среди данных чисел нет простых, то вывести сообщение об этом.

Решение. Создадим функцию  пользователя, которая будет принимать  значение true, если число простое, значение false , если число составное. Кроме этого введем дополнительную переменную n, которая будет считать, сколько простых чисел среди данных. Она нужна для того, чтобы вывести сообщение «простых чисел нет», если среди данных простых чисел не будет.

Program a2;

Var   a,  b,  c : Integer;

{Логическая функции пользователя}

Function  Chislo ( w : integer) : Boolean;

Var  k,  x : integer;

Begin

   k :=0;

   {k – счетчик количества делителей числа w}

   { x – числа, претенденты на делители числа w}

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

   If    k>2   Then   Chislo := False  Else  Chislo := True;

End;

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

Begin

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

Readln(a, b, c);

Writeln(‘ Исходные числа: ‘);

Writeln(a :7,  b:7,  c:7);

{Сначала определим, сколько будет простых чисел среди данных}

n := 0;

If    Chislo( a )=True  Then    n := n + 1;

If    Chislo( b )=True  Then    n := n + 1;

If   Chislo( c )=True   Then    n:= n + 1;

{Выводим ответ}

If  n=0

   Then  Writeln (‘ Простых чисел нет  ‘)

   Else   Begin

             Writeln(‘Простые числа:  ‘);

             If  Chislo( a ) = True  Then  Write ( a : 7);

             If  Chislo( b ) = True  Then  Write ( b : 7);

             If  Chislo( c ) = True   Then  Write ( c : 7);

             End;

End.

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

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

Пример. Даны координаты вершин четырехугольника ABCD: A(xa,ya),  B(xb, yb),  C(xc,yc),  D(xd, yd).Найти периметр четырехугольника.

Решение. Нахождение длины стороны оформим в виде функции пользователя. Ввод координат вершин оформим в виде процедуры пользователя.

Program  a3;

Var  xa, ya,  xb,  yb,  xc,  yc,  xd,  yd : Real;

        ab,  bc,  cd,  ad,  p : real;

{Процедура ввода координат одной точки}

Procedure   Wwod( Var  x,  y : Real);

Begin

    Writeln(‘Ввести абсциссу точки’);

     Readln(x);

     Writeln(‘Ввести ординату точки’);

     Readln(y);

End;

{Функция нахождения расстояния между двумя точками}

Function  Dlin(x1, y1, x2, y2 : Real) : Real;

Begin

     Dlin := Sqrt( sqr(x1-x2) + sqr(y1 – y2));

End;

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

{Для ввода координат четырех точек обратимся к процедуре ввода координат четыре раза}

Wwod(xa, ya);   Wwod(xb,  yb);  Wwod(xc,  yc);  Wwod(xd,  yd);

{Для нахождения расстояний между точками обратимся к функции Dlin}

ab := Dlin(xa,  ya,  xb,  yb);

bc := Dlin(xb,  yb,  xc,  yc);

cd := Dlin(xc,  yc,  xd,  yd);

ad := Dlin(xd,  yd,  xa,  ya);

{Находим периметр}

p := ab + bc + cd + ad;

{Вывод на экран длин сторон и периметра четырехугольника}

Writeln( ‘ab=’,ab:6:1,’  bc=’,bc:6:1,’ cd=’,cd:6:1, ‘ ad=’,ad:6:1,’ p=’,p:6:1);

End.

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

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

Пример. Вычислить значение n!=1*2*3*…*n  при помощи рекурсии.

Решение. Вычисление n! можно записать и в обратном порядке, т.е.

 n!=n*n-1*…*2*1=n*(n-1)! Запишем программу с помощью рекурсивной функции.

Program a22;

Var n:Integer; b:LongInt;

Function Fact(a:Integer):LongInt;

     Begin

     If a=0 Then Fact:=1

            Else Fact:=a*Fact(a-1);

{Здесь для вычисления  значения Fact используется функция Fact. Это и есть рекурсия.}

    End;

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

Begin

   Writeln(‘Ввести значение n ‘);      Readln(n);

    B:=Fact(n);

{Обращение к рекурсивной  функции Fact. Здесь n является фактическим параметром, значение которого передается в функцию.}

   Writeln(n,’!=’,b);

{Вывод полученного  результата}

End.

Пусть по данной программе  необходимо вычислить 4! Представим процесс рекурсии в виде таблицы.

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

(погружение)

N:=4

Fact(4)

A:=4

Fact:=4*Fact(3)

A:=3

Fact:=3*Fact(2)

A:=2

Fact:=2*Fact(1)

A:=1

Fact:=1*Fact(0)

A:=0

Fact:=1

Рекурсивное возвращение

(всплывание)

A:=1

Fact:=1*1=1

A:=2

Fact:=2*1

A:=3

Fact:=3*2*1

A:=4

Fact:=4*3*2*1


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

Решим ту же задачу с помощью  рекурсивной процедуры.

Program a22а;

Var n:Integer; b:LongInt;

Procedure Fact(a:Integer; P:LongInt);

Var m:Longint;

     Begin

     If a=0 Then p:=1

             Else Begin

                  Fact(a-1,m);

                  P:=m*a;

                  End;

{Здесь для вычисления  значения P используется процедура Fact. Это и есть рекурсия.}

    End;

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

Begin

   Writeln(‘Ввести значение n ‘);    

   Readln(n);

   Fact(n, b);

{Обращение к рекурсивной процедуре Fact. Здесь n является фактическим параметром, значение которого передается в функцию. Параметр b тоже фактический параметр, который свое значение получает из процедуры.}

   Writeln(n,’!=’,b);

{Вывод полученного  результата}

End.




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

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

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

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

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

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

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

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

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