
- •Основы программирования
- •Введение
- •1.Алгоритмизация вычислительных процессов.
- •1.1.Основные определения и понятия.
- •1.2.Средства изображения алгоритмов.
- •1.3.Базовые канонические структуры алгоритмов.
- •2.Введение в Турбо Паскаль.
- •2.1.Общая характеристика языка Паскаль.
- •2.2.Основные понятия языка Турбо Паскаль.
- •2.2.1.Алфавит языка.
- •Implementation | in | inherited | inline | interface |
- •2.2.2.Элементарные конструкции.
- •2.2.3.Типы данных.
- •Var a : Integer;
- •Var a : digit;
- •Var s,s1 : Tstring;
- •2.3.Операторы языка Паскаль.
- •2.3.1.Оператор присваивания.
- •2.3.2.Оператор перехода. Пустой оператор. Составной оператор.
- •2.3.3.Условный оператор.
- •2.3.4.Оператор выбора.
- •2.3.5.Операторы цикла.
- •Var a: array [1..N,1..M] of real;
- •I,j: integer;
- •Var X,y,e,u,z : real;
- •Var X: real; {аргумент }
- •Var a,k: integer;
- •Var a: array[1..30,1..30] of integer;
- •I,j : integer;
- •Var a:array [1.. 30] of integer;
- •I,n: Integer;
- •If not fl then Writeln(‘ нет чисел на 3‘);
- •3.Структурированные типы данных.
- •3.1.Свойства множеств.
- •3.2.Операции над множествами.
- •I,l:byte;
- •If fl then writeln('идентификатор')
- •I,j: integer;
- •If I in rez then
- •Var s,c:string;
- •I,ns:byte;
- •If not(s[I] in r) then
- •If f then writeln('no')
- •I,k:byte;
- •If I in cf then write(I:3);
- •3.3.Описание записи (record).
- •Var a: array[1..10] of ta;
- •Var c : record
- •Var mas:array[1..100] of zap;
- •3.4.Оператор присоединения.
- •Inc(k); readln(npp);
- •3.5.Запись с вариантами.
- •4.Использование подпрограмм в Турбо Паскале.
- •4.1.Структура программы на языке Паскаль.
- •4.2.Описание и вызов процедур.
- •4.3.Описание функции.
- •4.4.Формальные и фактические параметры.
- •Параметры-значения.
- •Параметры-переменные.
- •Var s,I : integer;
- •If f then
- •Параметры-константы.
- •Параметры-процедуры и параметры-функции .
- •4.5.Область действия имен.
- •4.6.Процедуры и функции без параметров.
- •4.7.Рекурсивные процедуры и функции.
- •Var m: integer;
- •Var m: integer;
- •Var q : real;
- •4.8.Предварительно-определенные процедуры.
- •Var X,y: integer;
- •4.9.Модули.
- •Interface
- •Implementation
- •I:byte;
- •5.Стандартные процедуры и функции.
- •5.1.Математические функции.
- •5.2.Функции округления и преобразования типов.
- •5.3.Функции порядкового типа.
- •5.4.Процедуры порядкового типа.
- •5.5.Строковые функции.
- •5.6.Строковые процедуры.
- •5.7.Прочие процедуры и функции.
- •5.8.Процедуры ввода данных.
- •Var b,a,d: Real;
- •Var a: Real;
- •5.9.Процедуры вывода данных.
- •5.9.1.Особенности вывода вещественных значений.
- •Var b,d:real;
- •Var a,b,c,d,e:integer;
- •Var a:array[1..10,1..10]of real;
- •6.Работа с файлами.
- •6.1.Общие сведения о файлах.
- •6.2.Процедуры и функции для работы с файлами.
- •6.3.Особенности обработки типизированных файлов.
- •Var f: file of real;
- •Var dan: file of st;
- •6.4.Особенности обработки текстовых файлов.
- •Var f1,f2: text;
- •6.5.Файлы без типа.
- •7.Динамическая память.
- •7.1.Указатель.
- •7.2.Стандартные процедуры размещения и освобождения динамической памяти.
- •7.3.Стандартные функции обработки динамической памяти.
- •Var p: pointer;
- •7.4.Примеры и задачи.
- •7.5.Работа с динамическими массивами.
- •I : integer;
- •I, nf : integer; Begin
- •I, nf : integer;
- •7.6.Организация списков.
- •7.7.4.Вставка элемента в начало списка.
- •Var First : el);
- •7.7.5.Включение элемента в конец списка.
- •7.7.6.Включение в середину (после I-ого элемента).
- •7.8.Задачи на удаление элементов из линейного однонаправленного списка без головного элемента.
- •7.8.1.Удаление элемента из начала списка.
- •7.8.2.Удаление элемента из конца списка.
- •7.8.3.Удаление элемента из середины списка (I-ого элемента).
- •7.8.4.Удаление всего списка с освобождением памяти.
- •7.8.5.Задачи на замену элементов в линейном однонаправленном списке без головного элемента.
- •7.9.Стеки, деки, очереди.
- •7.10.Использование рекурсии при работе со списками.
- •Var count:integer);
- •Inc(count);
- •7.11.Бинарные деревья.
- •7.12.Действия с бинарными деревьями.
- •7.12.1.Построение бинарного дерева.
- •7.13.Решение задач работы с бинарным деревом.
- •Inf1 : integer;
- •Inf2 : string ;
- •Inf2:string);
- •Var root : nd);
- •8.Основные принципы структурного программирования.
- •8.1.Понятие жизненного цикла программного продукта
- •8.2.Основные принципы структурной методологии.
- •8.3.Нисходящее проектирование.
- •8.4.Структурное кодирование.
- •8.5.Модульное программирование.
- •9.Список литературы.
4.6.Процедуры и функции без параметров.
В случае использования процедур и функций без параметров связь данных осуществляется через глобальные переменные.
Подпрограммы должны быть, по возможности, независимы от основной программы, поэтому все переменные, нужные только в пределах подпрограммы, должны описываться как локальные. Связь основной программы с процедурой или функцией должна осуществляться, как правило, через список параметров, что придает подпрограммам необходимую гибкость. Вместе с тем, слишком большое число параметров замедляет работу программы, поэтому переменные заведомо общие в основной программе и подпрограммах целесообразно использовать как глобальные.
4.7.Рекурсивные процедуры и функции.
Рекурсия- это способ организации вычислительного процесса, при котором процедура или функция в процессе выполнения входящих в ее состав операторов обращается сама к себе непосредственно, либо через другие процедуры и функции.
Рекурсия может быть прямой или косвенной. При прямой рекурсии оператор вызова подпрограммы содержится непосредственно в ее исполняемой части. Любую рекурсивную процедуру (функцию) можно сделать не рекурсивной. Рекурсивное описание обычно короче и нагляднее, но требует больших затрат машинного времени (за счет повторных обращений) и памяти машины (за счет дублирования переменных).
Рекурсивная подпрограмма однократно вызывается извне. Условие полного окончания работы рекурсивной процедуры или функции должно находиться в ней самой.
Рассмотрим пример. Вычислить значение F=M! Рекурсивное определение значение факториала можно записать следующим образом:
при М=1 F=1
при М> 1 F= M!= M*(M-1)!, т.е. М! определяется через (М-1)!
Рекурсивная функция
Program Main;
Var m: integer;
F:real;
Function FACT (N:integer): real;
Begin
If N=1 then
FACT:=1
Else
FACT:= N* FACT(N-1);
End;
Begin
Readln(M);
F:= FACT ( M );
Writeln (' M!=', F);
End.
Рекурсивная процедура
Program Main;
Var m: integer;
F:real;
Procedure FACT(N:integer; Var F: real);
Var q : real;
Begin
If N=1 then Q:=1
else FACT(N-1,Q);
F:=N*Q;
End;
Begin
Readln(M);
FACT ( M, F );
Writeln (' M!=', F);
End.
B варианте а) при м=4 выполняются следующие действия:
FACT:=4*FACT(3); FACT:=3*FACT(2); FACT:=2*FACT(1); FACT(1):=1.
При входе в функцию в первый раз отводится память под локальную переменную, соответствующую параметру-значению; ей присваивается значение фактического параметра (М). При каждом новом обращении строятся новые локальные переменные. Так как FACT(1)=1, то выполнение функции заканчивается. После этого выполняются действия:
FACT(1):=1; FACT:=2*FACT(1);
FACT(2):=2; FACT:=3*FACT(2);
FACT(3):=3*2=6; FACT:=4*FACT(3); т.е. FACT=24.