Pascal: Занятие № 7. Подпрограммы: процедуры в Pascal
![]()
На занятии будет объяснен алгоритм работы с процедурами на Паскале. Будут разобраны примеры использования процедуры с параметрами и без параметров. Познакомитесь с понятиями: формальные и фактические параметры, параметр по значению и параметр по ссылкее
Процедуры в Паскале
Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin ). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).
Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.
Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале
var …; procedure название (параметры); var …; begin … end; begin … end.
Пример: Процедура без параметров, которая печатает 60 звездочек, каждую с новой строки
1 2 3 4 5 6 7 8 9 10 11
procedure pr; var i:integer; begin for i:=1 to 60 do begin write('*'); writeln; end; end; begin pr; end.
procedure pr; var i:integer; begin for i:=1 to 60 do begin write(‘*’); writeln; end; end; begin pr; end.
В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.
Процедуры с параметрами. Фактические и формальные параметры
Рассмотрим пример необходимости использования процедуры.

Пример:
Построить фигуру
Особенность: Три похожие фигуры.
Алгоритм решения:
- выделить одинаковые или похожие действия (три фигуры);
- найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет);
- отличия записать в виде неизвестных переменных, они будут параметрами процедуры.


Решение на паскале:
Процедура:

Программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
uses GraphABC; procedure Tr( x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.
uses GraphABC; procedure Tr( x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.
Рассмотрим синтаксис объявления и описания процедуры с параметрами в Паскале.
var …; procedure pr(параметр1, параметр2: integer; параметр3:char); var …; begin … end; begin … pr (параметр1, параметр2, параметр3); end.
Задание procedure 1: Написать процедуру рисования N вертикальных линий. N задается параметром процедуры.
Задание procedure 2: Написать процедуру рисования N окружностей, сдвинутых по горизонтали. N, радиус R и отступ O задаются параметрами процедуры (всего 3 параметра).
Пример: Написать процедуру, которая печатает 60 раз указанный символ (введенный с клавиатуры), каждый с новой строки
Параметры процедуры (в некоторых языках они называются аргументами) указываются в скобках после ее имени (в объявлении).
В данном примере в качестве введенного символа будем использовать параметр процедуры. Формальный параметр процедуры указывается в скобках при ее описании. Обязательно необходимо указать тип формального параметра через двоеточие.
Фактический параметр — это то значение, которое указывается в скобках при вызове процедуры. Фактическим параметром может быть конкретное значение (литерал: число, символ, строка…) либо переменная, которые компилятор подставит вместо формального параметра. Поэтому тип данных у формального и фактического параметра процедуры должен быть одинаковым.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
var s:char; procedure pr(a:char); var i:integer; begin for i:=1 to 60 do begin write(a); writeln; end; end; begin writeln('введите символ'); readln(s); pr(s); end.
var s:char; procedure pr(a:char); var i:integer; begin for i:=1 to 60 do begin write(a); writeln; end; end; begin writeln(‘введите символ’); readln(s); pr(s); end.
1 2 3 4 5 6 7 8 9 10 11
procedure pr(a:char); begin loop 60 do begin println(a); end; end; begin writeln('введите символ:'); var s:= readchar; pr(s); end.
procedure pr(a:char); begin loop 60 do begin println(a); end; end; begin writeln(‘введите символ:’); var s:= readchar; pr(s); end.
В данном примере при вызове процедуры компилятор заменит формальный параметр a фактическим параметром s , т.е. тем символом, который будет введен с клавиатуры. Оба параметра имеют тип данных char .
- число фактических параметров должно быть равно числу формальных параметров;
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу данных.
Задача procedure 3. Написать процедуру, которая складывает два любых числа (два параметра).
Процедуры с параметрами. Параметр по ссылке
(передача параметра по ссылке)
Пример: Программа поиска максимума из двух целых чисел при помощи процедуры
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var x,y,m,n:integer; procedure MaxNumber(a,b:integer;var max:integer); begin if a>b then max:=a else max:=b; end; begin write('vvedite x,y'); readln(x,y); MaxNumber(x,y,m); writeln('max=',m) end.
var x,y,m,n:integer; procedure MaxNumber(a,b:integer;var max:integer); begin if a>b then max:=a else max:=b; end; begin write(‘vvedite x,y’); readln(x,y); MaxNumber(x,y,m); writeln(‘max=’,m) end.
1 2 3 4 5 6 7 8 9 10 11
procedure MaxNumber(a,b:integer;var maximum:integer); begin maximum:=max(a,b); end; begin var (x,y):=readInteger2('введите x,y'); var m:integer; MaxNumber(x,y,m); writeln('max=',m) end.
procedure MaxNumber(a,b:integer;var maximum:integer); begin maximum:=max(a,b); end; begin var (x,y):=readInteger2(‘введите x,y’); var m:integer; MaxNumber(x,y,m); writeln(‘max=’,m) end.
В примере параметры a и b служат для хранения в них сравниваемых чисел, а параметр по ссылке max — для сохранения в ней максимального из двух чисел. Параметр по значению — параметр, принимаемый по значению, или выходной параметр передает свое значение в основную программу (фактическому параметру m ), т.е. возвращает значение. Тогда как параметры по ссылке — параметры, принимаемые по ссылке, (входные параметры), наоборот, принимают значения из основной программы (из фактических параметров x и y ). Для параметра по ссылке ( max ) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m ), именно поэтому такой параметр называется параметром, передаваемым по ссылке.
Таким образом, сформулируем понятия:
Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр, передаваемый по значению, или входной параметр ( a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра ( a и b должны попарно соответствовать типу данных x и y ).
Если перед именем формального параметра в объявлении процедуры стоит служебное слово var, то такой параметр называется параметром, передаваемым по ссылке, или выходным параметром ( max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры ( m ). А передача такого параметра называется передачей по ссылке (ссылка на ту же ячейку в памяти). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).
Использование параметров-переменных позволяет тратить меньше памяти
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var x,y:integer; procedure exchange(a: integer;var b:integer); var c:integer; begin if a>b then begin c:=a; a:=b; b:=c; end; end; begin writeln('введите два числа'); readln(x,y); exchange (x,y); writeln('max=',y) end.
var x,y:integer; procedure exchange(a: integer;var b:integer); var c:integer; begin if a>b then begin c:=a; a:=b; b:=c; end; end; begin writeln(‘введите два числа’); readln(x,y); exchange (x,y); writeln(‘max=’,y) end.
1 2 3 4 5 6 7 8 9 10 11
procedure exchange(a: integer;var b:integer); begin b:=max(a,b); end; begin var (x,y):=readInteger2('введите x,y'); var m:integer; exchange (x,y); writeln('max=',y) end.
procedure exchange(a: integer;var b:integer); begin b:=max(a,b); end; begin var (x,y):=readInteger2(‘введите x,y’); var m:integer; exchange (x,y); writeln(‘max=’,y) end.
Задача procedure 4.
- Необходимо определить наибольший общий делитель двух введенных чисел, используя цикл.
- Необходимо определить наибольший общий делитель двух введенных чисел, используя процедуру (два параметра по значению, один параметр по ссылке).

Словесный алгоритм:
- Вводятся a и b (например, 18 и 24)
- В цикле повторяем действия:
- Если а< b, то меняем переменные местами (1 шаг: a=24, b=18; 2 шаг: a=18, b=6)
- Переменной a присваиваем остаток от деления a на b (1 шаг: a=6, b=18; 2 шаг: a=0, b=6)
- Когда остаток равен 0, выводится результат (значения переменной b) (b=6)
Алгоритм решения поиска НОД:
| числа | a и b | остаток | результат | |
| 1 | a=18, b=24 24>18 |
если b>a → swap(a,b) a=24, b=18 |
24/18 = 1(6) | a=6, b=18 |
| 2 | a=6, b=18 18>6 |
если b>a → swap(a,b) a=18, b=6 |
18/6 =3(0) | a=0, b=6 6 |
| 128 и 56 | ||||
| 1 | a=128,b=56 a>b |
нет a=128,b=56 |
128/56=2(16) | a=16,b=56 |
| 2 | a=16,b=56 b>a |
если b>a → swap(a,b) a=56, b=16 |
56/16=3(8) | a=8,b=16 |
| 3 | a=8,b=16 b>a |
если b>a → swap(a,b) a=16,b=8 |
16/8=2(0) | a=0, b=8 8 |
0 do begin if a
Задача procedure 5. Используя процедуры, построить фигуру:
Задача procedure 6. Даны 3 различных массива целых чисел (размер каждого 15 элементов). В каждом массиве найти сумму элементов и среднее арифметическое значение.
Для формирования элементов массива и подсчета суммы и среднего арифметического использовать одну процедуру (среднее арифметическое и сумму оформить как параметры-переменные).
В задачах на Паскале часто встречается необходимость заполнить массив данными и затем вывести значения на экран. Почему бы не автоматизировать данную задачу заполнения и вывода массива — т.е. оформить при помощи процедур, а в дальнейшем использовать данные процедуры при надобности.
Пример: Создать процедуру для вывода десяти элементов массива (два параметра: количество элементов, массив)
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
const n = 10; var i:integer; a, b: array[1..n] of integer; procedure arr_out (k:integer; arr: array[1..n] of integer); var i: byte; begin write ('вывод массива: '); for i := 1 to k do write (arr[i]:4); writeln; end; begin for i:=1 to n do a[i]:=random(10); arr_out (n, a); end.
const n = 10; var i:integer; a, b: array[1..n] of integer; procedure arr_out (k:integer; arr: array[1..n] of integer); var i: byte; begin write (‘вывод массива: ‘); for i := 1 to k do write (arr[i]:4); writeln; end; begin for i:=1 to n do a[i]:=random(10); arr_out (n, a); end.
Пояснение:
Тело основной программы:
— формирование элементов массива (с функцией random ).
— вызов процедуры с двумя параметрами: количество элементов, массив.
Тело процедуры:
— вывод элементов массива с использованием параметров
Продолжим нашу задачу:
Пример: Создать процедуру для заполнения массива с использованием функции random
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
const n = 10; var a, b: array[1..n] of integer; procedure arr_rand (k:integer; var arr: array[1..n] of integer); var i: byte; begin write ('Заполнение массива случайными числами '); randomize; for i := 1 to k do arr[i]:=random(100); end; begin arr_rand (n, a); end.
const n = 10; var a, b: array[1..n] of integer; procedure arr_rand (k:integer; var arr: array[1..n] of integer); var i: byte; begin write (‘Заполнение массива случайными числами ‘); randomize; for i := 1 to k do arr[i]:=random(100); end; begin arr_rand (n, a); end.
Задача procedure 7. Объедините обе решенные задачи (для заполнения и вывода массива).
Задача procedure 8. Добавьте в задачу процедуру для заполнения значений массива пользователем (ввод значений с клавиатуры). Оформите вывод двух разных массивов: один — со значениями, сформированными случайным образом, другой — со значениями, введенными пользователем.
Задача procedure 9. Составить программу с процедурой для вычисления степени числа (входные параметры: число и степень). Для вывода результата использовать параметр по ссылке.
Задача procedure 10. Составить программу на Паскале с процедурой для вычисления факториала числа. (0!=1, 1!=1, 2!=2, 3!=6 …)
Передача аргументов по значению и по ссылке
-
Рассмотрим более подробно два этих понятия:
1 2 3 4 5 6 7 8 9 10
procedure p(a: integer); begin a := 666; // изменяется только формальный параметр! end; begin var x := 555; p(x); Print(x); // 555 end.
procedure p(a: integer); begin a := 666; // изменяется только формальный параметр! end; begin var x := 555; p(x); Print(x); // 555 end.
1 2 3 4 5 6 7 8 9 10
procedure p(var a: integer); begin a := 666; end; begin var x := 555; p(x); Print(x); // 666 – фактический параметр изменился тоже! end.
procedure p(var a: integer); begin a := 666; end; begin var x := 555; p(x); Print(x); // 666 – фактический параметр изменился тоже! end.
Короткая запись
Если тело процедуры состоит только из одного оператора, PascalABC.NET позволяет использовать при описании сокращенный синтаксис, без ключевых слов begin и end :
1 2 3 4 5 6
## procedure SqrtX(x: real) := print(sqrt(x)); // основная программа begin SqrtX(9); //3 end;
## procedure SqrtX(x: real) := print(sqrt(x)); // основная программа begin SqrtX(9); //3 end;
Самостоятельная работа
Общее задание 1: Написать процедуру рисования N прямоугольников сдвинутых по горизонтали. N, координаты точек x1, y1, x2, y2 и отступ O задаются параметрами процедуры (всего 6 параметров).
Общее задание 2: Описать процедуру Mean(X, Y, AMean, GMean) , вычисляющую:
- среднее арифметическое AMean = (X+Y)/2
- и среднее геометрическое GMean = √X*Y двух положительных вещественных чисел X и Y .
X и Y — входные параметры, AMean и GMean — выходные параметры вещественного типа.
В основной программе: Для заданных A, B, C, D найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), используя созданную процедуру.
1 вариант: для 5 одномерных массивов определять произведение элементов каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр по ссылке — для вывода произведения.
2 вариант: для 5 одномерных массивов определять минимальный элемент каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр по ссылке — для вывода минимального элемента.
* сложное С помощью процедуры формировать случайным образом одномерные массивы из 10 элементов (значения от -20 до +20). Вызывать процедуру до тех пор, пока среди значений не появится ноль.
Pascal: Занятие № 8. Подпрограммы: функции в Pascal
![]()
На занятии будет объяснен алгоритм работы с функциями на Паскале, рассмотрены стандартные функции. Будут разобраны примеры использования функций с параметрами и без параметров.
Стандартные функции языка Pascal
Арифметические функции (основные)
| Функция | Назначение | Тип результата |
|---|---|---|
| abs (x) | абсолютное значение аргумента | совпадает с типом аргумента |
| sqr (x) | квадрат аргумента | совпадает с типом аргумента |
| sqrt (x) | квадратный корень аргумента | вещественный |
| cos (x) | косинус аргумента | вещественный |
| sin (x) | синус аргумента | вещественный |
| arctan (x) | арктангенс аргумента | вещественный |
| exp (x) | ex | вещественный |
| ln (x) | натуральный логарифм | вещественный |
| int (x) | целая часть числа | вещественный |
| frac (x) | дробная часть числа | вещественный |
Функции преобразования типов
| round (x) | — округляет вещественное число до ближайшего целого. |
| trunc (x) | — выдает целую часть вещественного числа, отбрасывая дробную. |
Пользовательские функции Pascal
Функция в Паскале — это подпрограмма, которая в отличие от процедуры всегда возвращает какое-либо значение. Для этого в теле функции её имени присваивается вычисленное значение — результат, который она возвращает.
- Функция – это подпрограмма, результатом работы которой является определенное значение.
- Функции используются для:
- выполнения одинаковых расчетов в различных местах программы;
- для создания общедоступных библиотек функций.






var …; function название (параметры): тип результата; var…; begin … название:=результат; end; begin … end.
Пример: написать функцию, которая вычисляет наибольшее из заданных двух значений
Решение:


Вызов функции:
PascalABC.NET :
Правила описания функции:1. Мы должны написать тип значения, которое возвращает функция.
2. Переменная Result хранит результат функции.function f(x: real): real; begin Result := x * x + 1; end;
function f(x: real): real; begin Result := x * x + 1; end;
Вызов функции стоит в выражении:
// основная программа begin var x := 5; var r := Sqrt(x) + f(x); end.
// основная программа begin var x := 5; var r := Sqrt(x) + f(x); end.
Задача function 0. Написать функцию, которая вычисляет наибольшее из заданных трех значений. Функция с тремя параметрами.
Введите три числа: 4 1 6 наибольшее = 6
Пример: Написать функцию на Паскале, которая складывает два любых числа
первое число: 2 второе число: 5 сумма = 7
1 2 3 4 5 6 7 8 9 10 11 12
var x,y:integer; function f(a,b:integer):integer; begin f:= a+b; end; begin writeln('первое число:'); readln(x); writeln('второе число:'); readln(y); writeln('сумма= ',f(x,y)); end.
var x,y:integer; function f(a,b:integer):integer; begin f:= a+b; end; begin writeln(‘первое число:’); readln(x); writeln(‘второе число:’); readln(y); writeln(‘сумма= ‘,f(x,y)); end.
В рассмотренном примере использования функции в Паскале: функция f имеет два целочисленных параметра — a и b . Через двоеточие в заголовке функции (строка 2) указано, что значение, вычисляемое функцией, будет тоже целочисленным. В теле функции вычисляемая сумма присваивается имени функции. А в основной программе вызов функции осуществляется в качестве параметра оператора writeln .
Таким образом, главное отличие функции от процедуры — это то, что функция производит какие-либо вычисления и выдает в программу результат в виде значения, в то время как процедура чаще всего выполняет какие-либо действия с результатом, например, выводит его на экран (функция этого делать не может).
Задача function 1. При помощи функции найти среднее арифметическое двух чисел (функция с двумя параметрами).
Введите два числа: 4 7 среднее арифметическое = 5,5
Пример: Составить программу с функцией для вычисления факториала числа.
Показать решение:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var x:integer; function fact(a:integer):integer; var i: integer; begin if a=1 then begin fact:=1;exit; end; result:=2; for i:=3 to a do result:=result*i; fact:=result; end; begin writeln('число:'); readln(x); writeln(fact(x)); end.
1 2 3 4 5 6 7 8 9 10
function Fact(n: integer): integer; begin Result := 1; for var i:=1 to n do Result *= i end; begin var x:= readInteger('число:'); println(x,'! = ',fact(x)); end.
function Fact(n: integer): integer; begin Result := 1; for var i:=1 to n do Result *= i end; begin var x:= readInteger(‘число:’); println(x,’! = ‘,fact(x)); end.
В рассмотренном примере функция имеет один параметр — a . Вычисляемое функцией значение имеет целочисленный тип, это указывается в заголовке функции (строка 2). В теле функции в цикле for вычисляется факториал числа. Результат вычисления присваивается имени функции (строка 9). В теле программы для вывода результата функции она вызывается в операторе writeln (строка 14), который и выводит результат на экран.
PascalABC.NET :
Короткое определение функции:function Sq(x: real) := x * x + 1; begin var x := 10; var r := Sq(x) + Sq(2) end.
function Sq(x: real) := x * x + 1; begin var x := 10; var r := Sq(x) + Sq(2) end.
Короткая запись
Если тело функции состоит только из одного оператора, PascalABC.NET позволяет использовать при описании сокращенный синтаксис, без ключевых слов begin и end :
1 2 3 4 5 6
## function SumXY(x,y: real) := x + y; // основная программа begin Print (SumXY(9,2)); //11 end;
## function SumXY(x,y: real) := x + y; // основная программа begin Print (SumXY(9,2)); //11 end;
Задача function 2. Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. N — параметр функции.
Пример:
Введите число: 100 сумма = 5050
Задача function 3. Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна (в два раза больше предыдущего результата), на 3-ю – 4 зерна, на 4-ю – 8 зерен…). N — параметр функции.
Пример:
Введите номер клетки: 28 На 28-ой клетке 134217728 зерен.
Задача function 4. Описать функцию IsDigit(A) , которая возвращает истину, если целое число A представляет цифру (то есть A лежит в диапазоне 0–9). В основной программе вывести значение этой функции для N (N ≥ 0) данных чисел.
Введите N: 3 Введите число: 2 >>> true Введите число: 34 >>> false Введите число: 4 >>> true
Задача function 5. Вычисление степени числа с помощью функции на языке Паскаль.
Пример:
Введите число: 3 Введите степень числа: 2 Результат 3^2 = 9
Задача function 6. Описать функцию Calc(A, B, Operation) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Operation : 1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1 , N2 , N3 .
Пример:
Введите два числа: 5 7 Введите номер операции (1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение): 2 Результат 5*7 = 35
* Из задачника М. Э. Абрамян (Proc22)
Самостоятельная работа
1 вариант: Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R ( R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S=π∗R 2 . В качестве значения Пи использовать 3.14 .
* Из задачника М. Э. Абрамян (Proc18)
Пример:
Введите радиус: 5.2 Площадь круга = 16,328 ___ Введите радиус: 6.3 Площадь круга = 19,782 ___ Введите радиус: 7.1 Площадь круга = 22,294
2 вариант: Описать функцию TriangleP(a, h) , находящую периметр равнобедренного треугольника по его основанию a и высоте h , проведенной к основанию ( a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты (периметр = сумме длин всех сторон). Для нахождения боковой стороны b треугольника использовать теорему Пифагора: b 2 =(a/2) 2 +h 2 .
* Из задачника М. Э. Абрамян (Proc20)
Пример:
Введите основание треугольника: 6 Введите высоту треугольника: 5 Периметр треугольника = 17,83095 ___ Введите основание треугольника: . Введите высоту треугольника: . Периметр треугольника = . ___ Введите основание треугольника: . Введите высоту треугольника: . Периметр треугольника = .
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
Урок 13. Процедуры и функции в Pascal. Часть 2

Итак, сегодня мы с вами на learnpascal.ru продолжаем изучать функции и процедуры — важнейшую часть структурного программирования. В этом уроке мы рассмотрим только процедуры и функции. И даже не будем практиковаться, оставим это для последующих уроков.
Структура программы.
Программы на языке Паскаль состоят из заголовка программы, раздела описаний и тела программы. Раздел описаний может включать следующие подразделы: меток, констант, типов, переменных, процедур и функций. Последовательность подразделов в структуре программы произвольная, но естественно, что если вводится переменная нового типа, заданного в Туре, то подраздел Туре предшествует подразделу Var. Принцип нашего языка программирования «то, что используется, должно быть описано» сохраняется и для раздела описаний.
program ; label ; const ; type ; var ; ; begin ; end.
Структура процедуры и функции
Структура процедуры.
До этого момента времени мы использовали из раздела описаний только описание переменных и типов. На этом занятии мы начнем изучать процедуры. Структура процедуры повторяет структуру программы. Отличия выделены «полужирным» шрифтом.
procedure (); label ; const ; type ; var ; ; begin ; end;
Напишу простую программу с процедурой, складывающей два числа.
var a, b, c: integer; procedure sum(x, y: integer; var z: integer); begin z := x + y; end; begin write('Введите два числа: '); readln(a, b); sum(a, b, c); writeln(c); end.Итак, что вы видите? Точнее, что вам не понятно в данной программе? Я думаю, что вы не можете понять, почему перед z стоит var, а перед x, y — нет. Но всему свое время.

Обратимся к примеру, приведенному на рисунке выше. Слева приведен фрагмент текста основной программы, справа — процедура. Как только в теле программы объявляется имя процедуры с параметрами, выполнение «главного» тела прекращается, и управление вычислительными процессами передается процедуре. После выполнения процедуры осуществляется возврат на оператор основной программы, следующий за вызовом процедуры.
Немножко теории:
В любой программе все переменные делятся на два типа: локальные и глобальные. В нашей программы переменные а, b, с — глобальные, а х, у, z — локальные. Глобальные переменные — это переменные из раздела описаний основной части программы, а локальные — из раздела описаний процедур и функций. Локальные переменные существуют только в течение времени работы процедуры, определяются (создаются) при её вызове и исчезают после завершении работы процедуры.В программе определены переменные a, b, c. В процедуре x, y, z — её параметры, и они являются переменными процедуры. Причем между х, у и z существует большая разница.
Поясню ее очередным рисунком.

Параметры.
При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре, к нему можно обращаться только в пределах данной процедуры (в нашем примере х, у, z — формальные параметры). Фактические параметры — это параметры, которые передаются процедуре при обращении к ней (а, b, с — фактические параметры). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
Параметры-значения.
Другими словами, передача параметров по значению. Копия фактического параметра становится значением соответствующего формального параметра. Внутри процедуры можно производить любые действия с данным формальным параметром (допустимые для его типа), но эти изменения никак не отражаются на значении фактического параметра, то есть каким он был до вызова процедуры, то таким же и останется после завершения ее работы (х, у — параметры-значения).
Параметры-переменные.
Другими словами, передача параметров по ссылке. Это те формальные параметры, перед которыми стоит идентификатор var. Передается адрес фактического параметра (обязательно переменной), после этого формальный
параметр становится его синонимом. Любые операции с формальным параметром выполняются непосредственно над фактическим параметром.Структура функции
Функция выглядит почти так же, как и процедура. Почти единственное отличие в том, что заголовок функции начинается с ключевого слова Function и кончается типом возвращаемого данной функцией значения.
function (): ;
Кроме того, в теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции или переменная result, а в правой — ее значение.
var a, b, c: integer; function sum(x, y: integer): integer; begin sum := x + y; end; begin readln(a, b); writeln(sum(a, b)); end.
var a, b, c: integer; function sum(x, y: integer): integer; begin result := x + y; end; begin readln(a, b); writeln(sum(a, b)); end.
Небольшое послесловие:
Каждая процедура должна иметь одну точку входа и одну точку выхода (то есть использование goto, break, exit нежелательно), использование глобальных переменных в процедуре следует свести к минимуму, взаимодействие с процедурой должно осуществляться (по возможности) только через параметры.
Постепенно вы должны отказаться от технологии неструктурированного программирования. Сегодня мы с вами осваиваем структурную технологию разработки программ, при этом на каждом этапе текущая задача разбивается на ряд подзадач, определяя тем самым некоторое количество отдельных подпрограмм. Концепция процедур и функций — один из механизмов второго витка развития технологий программирования, а именно, структурного проектирования.Как осуществляется просмотр результата программы в pascal
Компьютерные программы обрабатывают (изменяют) различные данные. Программа получает данные, что-то делает с ними и выводит их в измененной форме или выводит другие данные.
Следовательно, любой язык программирования должен иметь инструменты как для ввода данных, так и их вывода. В Паскале ввод осуществляется с помощью процедур read() и readln() , а вывод — благодаря write() и writeln() . Процедуры, которые имеют окончание ln , после своего выполнения переводят указатель на новую строку.
Откуда или с помощью чего можно ввести данные в программу? Обычно это можно сделать с помощью клавиатуры или из файлов.
Куда можно вывести данные? На экран, в файл, на принтер и др.
Стандартным устройством ввода является клавиатура, а вывода — монитор. Стандартные — значит «работающие по-умолчанию»; т.е. если не указано ничего иного, то программа будет считывать данные с клавиатуры, а выводить их на монитор. Вместе клавиатуру и монитор называют консолью. Таким образом консоль представляет собой стандартное устройство ввода-вывода.
Вывод данных на экран. Форматированный вывод
Вывод данных на экран и в файл в языке программирования Pascal осуществляется с помощью процедур write ( ) и writeln ( ) . Здесь будет рассмотрен вывод только на экран.
Допустим, нам требуется отобразить на экране пару фраз. Если мы хотим, чтобы каждая из них начиналась с новой строки, то надо использовать writeln() , если нет – то write() .

Write() чаще используется, когда надо вывести для пользователя сообщение на экран, после чего получить данные, не переводя курсора на новую строку. Например, выводим на экран «Введи число: » и не переводим курсор на новую строку, а ждем ввода.
Еще один пример. В памяти компьютера хранятся данные. Из программы мы обращаемся к ним с помощью переменных num, fl и st. Вывести их значения на экран можно по-разному.

Во втором случае мы видим, что процедуры вывода (как write() так writeln() ) позволяют конструировать выводимую информацию из различных компонент (строк-констант и переменных).
В третьем случае был осуществлен так называемый форматированный вывод. При этом для выводимого значения указывается ширина поля вывода (количество знакомест). Если мы выводим вещественное (дробное) число, то вторым числом через двоеточие указывается количество знаков после запятой. Если для вещественных чисел не осуществлять форматирование, то они отобразятся так, как определено для данного компьютера. Если указать только число знакомест без фиксирования дробной части, то вывод будет в экспоненциальной форме.
Ввод данных с клавиатуры
Ввод данных в языке программирования Паскаль обеспечивается процедурами read() и readln() . Ввод данных осуществляется либо с клавиатуры, либо из файла. Здесь рассматривается только ввод с клавиатуры.
Когда данные вводятся, то они помещаются в ячейки памяти, доступ к которым обеспечивается с помощью механизма переменных. Поэтому, когда в программе на Pascal используется процедура read() (или readln() ), то в качестве фактического параметра (аргумента) ей передается имя переменной, которая будет связана с вводимыми данными. Потом эти данные можно будет использовать в программе или просто вывести на экран.

В процедуры ввода можно передавать не один фактический параметр, а множество.

При вводе данных их разделяют пробелом, табуляцией или переходом на новую строку (Enter). Данные символьного типа не разделяются или разделяются переходом на новую строку.
Существуют особенности ввода данных с помощью операторов read() и readln() . Если используются подряд несколько операторов read() , то вводимые данные можно разделять всеми допустимыми способами. При использовании нескольких вызовов readln() каждый последующий срабатывает только после нажатия Enter. Программа ниже иллюстрирует это. Комментарии поясняют последовательность возможных действий при вводе данных.
Язык паскаль онлайн

Для выполнения различных задач в паскале нам понадобится выводить определенную информацию на экран.
Информация , которую мы будем выводить может быть абсолютно разной. Она может быть текстом , переменной и даже выражением вроде ( a + b ).
В языке программирования паскаль предусмотрен тот случай , когда нам нужно вывести на экран какую либо информацию , например результат работы программы или значение какой-либо переменной. Вывод в паскале можно осуществить за счет двух операторов вывода : write и writeln , прочитать о которых вы можете ниже.
Writeln
Первый оператор вывода — это writeln ( write — писать , ln — сокр. линия ). Благодаря нему и осуществляется вывод информации на экран. Давайте разберем это на примере :
Допустим , мы хотим вывести приветствие на экран в формате «Привет друг !» Код такой программы выглядит так :
Давайте разберем данную программу. После выполнения кода , на экран будет выведено сообщение — «Привет друг !» как раз то , что мы хотели.
Оператор вывода writeln выводит то , что находится в круглых скобках и одинарных кавычках. Запомните ! Чтобы выводить текст на экран , его следует заключать в кавычки.Для вывода чисел на экран можно пользоваться кавычками , а можно и не пользоваться.

В обоих случаях на экран будет выведено число 17 , поэтому можно утверждать , что вывод чисел на экран не зависит от кавычек.
А теперь о том , почему нельзя выводить тест на экран без кавычек. Почему нельзя выводить текст на экран в паскале без кавычек ? Это сделано специально для того , чтобы программа могла различать текст от переменной.
Если вы имеете познания в языке паскаль , то наверняка понимаете что такое переменные , если нет , то вам сюда .
Если в операторе вывода writeln() в круглых скобках будет стоять слово hello без кавычек , то программа выведет на экран значение переменной hello ( если она существует ).
Но иногда нам нужно вывести на экран и текст и переменную. Чтобы вывести на экран сообщение — «Привет Марина !» , где текст «Марина» содержится в переменной Name ( имя ) , нам потребуется изменить оператор writeln() так :
Просмотр результатов выполнения программы
Результат выполненной программы можно увидеть нажав комбинацию клавиш — Alt + F5. Вернуться в окно редактирования клавиша Esc.
Сохранение программы
- Активизируйте верхнее меню – F10. Выберите пункт меню File, затем пункт «Save as…» нажимая клавишу Tab перейти на свой диск А: и записать имя файла.
- Клавиша F2. Нажимая клавишу Tab перейти на свой диск А: и записать имя файла.
Открытие ранее сохраненной программы
- Активизируйте верхнее меню – F10. Выберите пункт меню File, выберите пункт подменю Open. Перейдите на свой диск А: выберите ранее сохраненный файл.
- Клавиша F3. Перейдите на свой диск А: выберите ранее сохраненный файл.
Завершение работы
- Активизируйте верхнее меню – F10. Выберите пункт меню File, выберите пункт подменю Exit.
- Комбинация клавиш Alt – X.
2. Выполните следующие упражнения:
Задания уровня 1
Упражнение 1. Создать программу, вычисляющую длину гипотенузы c и величины двух углов α и β прямоугольного треугольника, если заданы длины двух его катетов a и b. Значения катетов вести с клавиатуры.
1. Наберите текст программы:
var
Begin
Write(‘a=’);
Write(‘b=’);
Writeln(‘c=’, c:6:2);
Writeln(‘Радианы’);
Writeln(‘alf=’, alf:6:2, ‘bet=’, bet:6:2);
End.
2. Запустите программу на выполнение и проверьте её работу:Ctrl-F9
3. Для просмотра результатов выполненной программы необходимо нажать:Alt-F5
4. Сохраните программу на своем диске: A:\P1PR1
Упражнение 2. Закрепление навыков набора и редактирования текста.
1. Отредактируйте текст программы, добавив вывод значений углов в градусах:
Writeln(‘Градусы’);
Writeln(‘alf=’, alf*180/ pi :3:0, ‘bet=’, bet*180/ pi :3:0);
2. Запустите программу на выполнение и проверьте её работу:Ctrl-F9
3. Для просмотра результатов выполненной программы необходимо нажать:Alt-F5
4. Сохраните программу на своем диске: A:\P1PR2
3. Выполнить самостоятельно:
Задания уровня 2
1. Заданы радиус основания и высота цилиндра. Вычислить площадь основания и объем. Площадь основания вычисляется по формуле, объем цилиндра равен V=S*h. Сохраните как P1PR3.
2.Вычислите среднее арифметическое (a+b)/2. Сохраните программу как P1PR4.
3. Составить программу вычисления площади и периметра прямоугольника по двум введенным сторонам. Предусмотреть вывод на экран сообщения о результате. Сохраните как P1PR5.__——ж
4.За решение четырех задач студент получил оценки (от 1 до 5). Составьте программу, которая определит среднее значение оценок, полученных студентом за задачи. Сохраните программу как P1PR6.
Задания уровня 3
5. Четыре человека пообедали в ресторане. Официант подал каждому счет. Они решают оставить официанту чаевые в размере 15% от счета. Составить программу, которая выведет на экран сумму чаевых, которую получил официант. Сохраните программу как P1PR7.
6. Составить программу, которая определяет, сколько времени в минутах затратит школьник на дорогу из школы до стадиона, если известна длина этого расстояния S км и средняя скорость движения школьника v км/ч? Сохраните программу как P1PR8.
7. Три четверти пассажиров самолета имеют билеты второго класса стоимостью X рублей каждый. Остальные пассажира имеют билеты первого класса, которые стоят в два раза дороже билетов второго класса. Напишите программу, которая выведет сумму денег, получаемую авиакомпанией от продажи билетов на этот рейс, если салон самолета рассчитан на V пассажиров. Сохраните программу как P1PR9.
4. Окончание работы:
1. Сохранить созданные программы.
2. Подготовить ответы на контрольные вопросы.
3. Показать работу преподавателю.
4. Завершить работу TURBO PASCAL.
Контрольные вопросы:
1. Как запустить среду программирования TURBO PASCAL?
2. В чем заключается назначение следующих опций пункта меню File: Save As, Save, Open, Exit?
3. Как просмотреть результаты выполнения программы в окне пользователя?
Как откомпилировать файл программы?
ПРАКТИЧЕСКАЯ РАБОТА №2
СТРУКТУРА ПРОГРАММЫ. ОПИСАНИЕ ПЕРЕМЕННЫХ В TURBO PASCAL
Цель работы Изучить структуру программы. Освоить работу пользователя по описанию переменных различных типов при работе в интегрированной среде TURBO PASCAL 7.0.
Задачи работыНаучиться составлять программы по определению TURBO PASCAL и описывать переменные различных типов.
Обеспечивающие средства Сборник описаний практических работ, персональный компьютер, конспект лекций.
Задание Составить программы к предложенным заданиям, отладить их и сохранить.
Требования к отчету Итоги практической работы представить в виде блок-схемы алгоритма и текста программы, привести значения исходных данных и значения полученных результатов (при необходимости вывести на печать).
Технология работы
1. Ознакомьтесь с теоретическим материалом, необходимым для выполнения работы:
Данные, обрабатываемые программой, могут быть разных типов. Тип определяет область допустимых значений, а также операции и функции, применяемые к величинам этого типа.
Типы данных в Turbo Pascal можно разделить на скалярные и структурированные. Существует также возможность вводить пользовательские типы данных.
В скалярных типах можно выделить следующие группы.
Целые тип данных
Целый тип присваивается данным (переменным и константам), которые во время работы программы могут принимать лишь целочисленные значения. В таблице 1 представлена классификация целочисленных типов данных.
Целочисленные типы данных
Идентификатор Длина, байт Диапазон (множество) значений Знак числа Integer от -32768 до 32767 Целое со знаком Byte от 0 до 255 Целое без знака Word от 0 до 65535 Целое без знака Shorting от –128 до 127 Целое со знаком Пример описания переменных целочисленного типа:
Var
a, b: byte;
f: word;
Вещественный тип данных
Данные вещественного типа – это вещественные значения, записанные в памяти в виде чисел с плавающей (например, 3.2Е-6, -6.42Е+2) и фиксированной (например, 4.12, -17.548) точкой. Область возможного изменения значений определяется размером (в байтах), отводимым под конкретную реализацию типа. В таблице 2 представлена классификация целочисленных типов данных.
Вещественные типы данных
Идентификатор Длина, байт Диапазон (множество) значений Знак числа Real от 2,9*10 до 1,7*10 11-12 Single от 1,5*10 до 3,4*10 7-8 Double от 5*10 до 1,7*10 15-16 Extended от 3,4*10 до 1,1*10 19-20 Пример описания переменных вещественного типа:
Var
a, b, c: real;
d, f: double;
k: single;
Символьный тип данных
Данные стандартного символьного типа представляют собой символы раскладки ASCII. Переменная или константа символьного типа занимает 1 байт памяти. Пример описания переменных символьного типа:
Var
a, b: char;
Логический тип данных
Данные логического типа (Boolean) в стандарте языка могут принимать одно из двух значений: True или False. Переменная или константа логического типа занимает 1 байт, в который записывается 1, если переменная или константа имеет значение True, и 0 в противном случае. Пример описания переменных символьного типа:
Var
a, b: boolean;
Кроме стандартных скалярных типов в Turbo Pascal можно вводить такие скалярные типы, как перечислимый и интервальный.
1. 5 Перечислимый типзадается непосредственным перечислением значений, которые может принимать переменная данного типа, например:
Var
a, c: (red, blue, green);
b: (dog, cat);
Можно сначала ввести перечислимый тип данных, а затем описать его переменные. Для создания нового типа используется служебное слово type:
Type
color= (red, blue, green);
Var
a, b: color;
1. 6 Интервальный тип данныхпозволяетзадавать две константы, которые определяют границы изменения переменных данного типа. Значение первой константы должно быть меньше второй. Сами же они являются целочисленными или символьными, например:
Var
a, b, c: -7. . 4;
Как и в случае перечислимого типа, можно предварительно ввести тип данных с помощью служебного слова type, а затем описывать переменные. Например:
Type
x = 0 . . 9;
Var
a, b: x;
Каждая переменная интервального типа занимает 1 байт.
Арифметические операции
К арифметическим типам данных относятся группы вещественных и целых типов. К ним применимы арифметические операции и операции отношений. Арифметические операции стандартного Паскаля описаны в таблице 3.
Использование program, begin…end, write, readln, Uses Crt, Clrscr.
В этом уроке мы напишем самую простую программу, состоящую всего из пяти строк. Эта программа будет выводить сообщение на экран. Для написания программы нам необходимо знать как работают операторы Write, Readln, а также понять для чего нужны зарезервированные в Паскаль слова Program, Begin, End.
В строке №1 записывается заголовок программы. Все программы, написанные на языке Pascal, начинаются со служебного слова program. Слово program зарезервировано в Pascal, т.е. оно может использоваться только для объявления имени программы. Далее, через пробел записывается название программы, которое мы придумываем сами. Для примера назовем нашу первую программу «number1». В конце первой строки ставится точка с запятой.
Строка №2. Тело программы начинается с зарезервированного в Pascal слова begin. После него не ставится точка с запятой. Заканчивается программа зарезервированным словом end. (строка №5). После слова end ставится точка. Конструкция begin…end является разделом операторов. Внутри этого раздела находятся операторы, которые будут выполняться программой. В любой программе должны присутствовать слова begin…end.
В строке №3 записывается первый оператор, который будет выполнять программа. Оператор Write служит для вывода на экран какого-либо сообщения. Текст этого сообщения записывается после слова Write, заключается в круглые скобки и в апострофы. В конце обязательна точка с запятой (все операторы в программе должны отделяться друг от друга точкой с запятой). Таким образом, в результате работы оператора Write на экран будет выведено сообщение «Привет.»
В строке №4 записывается оператор readln. Этот оператор служит для задержки экрана, чтобы мы могли увидеть результаты выполнения программы на экране. Если его не использовать, то после того как программа будет выполнена экран сразу свернется и мы не успеем увидеть выводимое на экран сообщение. Кстати, оператор Readln можно не использовать. А для того чтобы увидеть результаты выполнения программы можно нажать Alt+F5. После оператора Readln у нас не стоит точка с запятой т. к. далее идет оператор end. (перед End. точка с запятой не обязательна). Теперь наберем нашу программу в Паскале.

Сохраним, нажав F2 (или в командной строке File-Save) и запустим ее, нажав Ctrl+F9 (либо в панели команд Run-Run).
Получим следующий результат.Самая нижняя строка и есть наш результат.
Теперь нажмем Enter (для завершения выполнения программы) и еще раз запустим программу.
Получим следующий результат.Этим примером я хочу показать Вам, что каждый раз при запуске программы старые результаты программы тоже будут выводиться на экран. Для того чтобы этого избежать, используется оператор очистки экрана clrscr (сокращенно от англ. Clear Screen (очистить экран)), который ставится вначале программы после слова begin. Для того чтобы этот оператор работал необходимо подключить модуль CRT с помощью команды USES.
Программа будет выглядеть так:
Заметьте, что после Uses Crt и после Clrscr ставится точка с запятой.
После запуска (ctrl+F9) окно вывода сообщения будет иметь вид:Дополнение к материалу.
1. Программа, запущенная в Free Pascal обрабатывается какое-то количество времени. Поэтому после запуска необходимо подождать несколько секунд. Вы увидите сообщение о том, что выполняется программа, а через несколько секунд (1-20) увидите результат выполнения программы.
2. При запуске программ, которые должны выводить на экран текст на русском языке может возникнуть проблема с кодировкой. В консольном окне вы увидите непонятные символы. Для того чтобы этого избежать небходимо кликнуть правой кнопкой мыши по верхней части консольного окна (там, где написано C:\FPC\2.2.2\bin\i386-win32\fp.exe), выбрать «Свойства» и перейти на вкладку «Шрифт». Здесь выбираем «точечные шрифты» и нажимаем Ok.
3. Компилятору Pascal абсолютно безразлично какими буквами Вы будете набирать программу, заглавными или строчными, т.е. регистр при наборе программ роли не играет.
4. Имя программы (в нашем случае «number1») не играет какой-либо роли в программе, поэтому не обязательно объявлять имя программы с помощью слова «Program». Таким образом, первую строку программы можно не писать и это никак не повлияет на работу программы.
5. Как уже было сказано, слово «Program» является зарезервированным словом в Pascal. Зарезервированные слова можно использовать только по их прямому назначению. При наборе программ в редакторе Pascal все зарезервированные слова подсвечиваются белым цветом. Название программы «number1» является идентификатором (именем). Идентификаторы – это последовательности символов, которые придумывает сам программист. В нашем примере нам необходимо было придумать название программы. При написании идентификаторов используются определенные правила:
- Идентификатор начинается с буквы, или знака подчеркивания.
- Содержит только буквы, цифры или знак подчеркивания.
- Между двумя идентификаторами должен стоять разделитель.
- Максимальная длина 127 символов. Все символы значимы.
- Идентификатор не может повторять зарезервированное слово.
Комментарии
Zhenko! Боюсь тут тебе не помогут никак. Большая часть народа либо просто хвастается либо умеет но делать такие простейшие программы как a:=1+1; Обратись лучше на какой нибудь форум, а лучше изучи сам.
Вот один не плохой форум: http://www.cyberforum.ru/
Желаю удачки тебе! Творческих успехов
Вот программа, которая меняет системную дату и время. никак не могу сделать так, чтобы ClrScr заработала. помогите кто в этом шарит.
uses Crt;
Uses Dos;
CONST
days:ARRAY [0..6] of string [11] = (‘Voskr.’, ‘Ponedel.’, ‘Vtornik’, ‘Sreda’, ‘4etverg’, ‘Pyatnica’, ‘Subbota’);
VAR
year, month, day, day_of_week : WORD;
VAR hour, minute, second, hund : WORD;BEGIN
Writeln (‘_________________________________________’);
Writeln (‘————- ————— ————-‘) ;
ClrScr;
Write(‘Cleared Screen!’);PROCEDURE Get_Date;
BEGIN
GetDate (year, month, day, day_of_week);
Writeln (‘Segodnya: ‘, days[day_of_wee k], ‘,’, day,’/’, month,’/’,year);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Set_Date;
BEGIN
Writeln(‘Vvedit e daty: ‘);
Readln(day, month, year);
SetDate (year, month, day);
Writeln (‘_________________________________________’);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Get_Time;
BEGIN
GetTime (hour, minute, second, hund);
Writeln (‘Sey4as: ‘, hour,’:’, minute,’:’, second,’:’, hund);
Writeln (‘————- ————— ————-‘) ;
END;
PROCEDURE Set_Time;
BEGIN
Writeln (‘Vvedite vremya’);
Readln(hour, minute, second, hund);
SetTime(hour, minute, second, hund);
END;
BEGIN
Get_Date;
Set_Date;
Get_Time;
Set_Time;
Get_Time;
Writeln (‘OK!’);
Writeln;
Writeln (‘Najmite Enter dlya vihoda . ‘);
Readln;
End.подскажите, переписал все один в один как тут написано, все точки с запятой и все такое. но при запуске программы выскакивает такое сообщение
Error: Identifier not found «readIn»
гуглил не помогло, не смог найти причины.
var
p7, p4, p1, p8, p5, p2, p9, p6, p3, st1, st2, st3, vod1, vod2, ind,ind2,pam, shet, shet1: integer;hod, ris1, ris2, ris3, ris4, ris5, ris6, ris7, ris8, ris9: string;begin
write(‘Игра башня!’);
writeln(‘Цель игры:пирамидку из левой части перетащить в правую!’);
writeln(‘Как играть! Вы вводите два числа от 1 до 3. ПЕРВОЕ число означает столбец откуда будет взята часть. ВТОРОЕ число означает в какой столбец будет положена.’);
ind2:=1;
while ind2=1 do
begin
shet:=0;
ris1 := ‘(0000)’;ris2 := ‘__|__ ‘;ris3 := ‘__|__ ‘;ris4 := ‘ (00) ‘;ris5 := ‘ | ‘;ris6 := ‘ | ‘;ris7 := ‘ () ‘;ris8 := ‘ | ‘;ris9 := ‘ | ‘;
p1 := 4;p2 := 0;p3 := 0;p4 := 2;p5 := 0;p6 := 0;p7 := 1;p8 := 0;p9 := 0;
writeln(‘Начнем !’);
writeln(‘ () | | ‘);
writeln(‘ (00) | | ‘);
writeln(‘(0000) __|__ __|__ ‘);
writeln(‘ 1 2 3 ‘);
writeln();
ind:=0;
while ind = 0 do
begin
st1 := p7 + p4 + p1;
st2 := p8 + p5 + p2;
st3 := p9 + p6 + p3;
vod1 := 0;
vod2 := 0;
writeln(‘Вводит е ПЕРВОЕ число!’);
while (vod1 > 3) or (vod1 = 0) do
begin
if vod1 > 3 then writeln(‘Число должно быть от 1 до 3,вводите еще раз.’);
readln(vod1);
end;
writeln(‘Вводит е ВТОРОЕ число!’);
while (vod2 > 3) or (vod2 = 0) or (vod2 = vod1) do
begin
if (vod2 > 3) or (vod1 = vod2) then writeln(‘Число должно быть от 1 до 3 и не равно 1 числу,вводите еще раз.’);
readln(vod2);
end;
case vod1 of
1:
begin
case st1 of
1:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
2: begin p5 := p1;p1 := 0;shet := shet + 1; end;
4: begin p5 := p1;p1 := 0;shet := shet + 1; end;
6: begin p8 := p1;p1 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
2: begin p6 := p1;p1 := 0;shet := shet + 1; end;
4: begin p6 := p1;p1 := 0;shet := shet + 1; end;
6: begin p9 := p1;p1 := 0;shet := shet + 1; end;
end;
end;
2:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p5 := p1;p1 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p6 := p1;p1 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
end;
3:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0; shet := shet + 1; end;
4: begin p5 := p4;p4 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0;shet := shet + 1; end;
4: begin p6 := p4;p4 := 0;shet := shet + 1; end;
end;
end;
4:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p1;p1 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0; shet := shet + 1; end;
2: begin p5 := p4;p4 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0; shet := shet + 1; end;
2: begin p6 := p4;p4 := 0; shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 2) then
case st2 of
0: begin p2 := p4;p4 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p4;p4 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
7:
begin
if (vod2 = 2) then begin p2 := p7;p7 := 0;shet := shet + 1; end; if (vod2 = 3) then begin p3 := p7;p7 := 0; shet := shet + 1; end;
end;end; end;
2:
begin
case st2 of
1:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
2: begin p4 := p2;p2 := 0; shet := shet + 1; end;
4: begin p4 := p2;p2 := 0;shet := shet + 1; end;
6: begin p7 := p2;p2 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
2: begin p6 := p2;p2 := 0;shet := shet + 1; end;
4: begin p6 := p2;p2 := 0;shet := shet + 1; end;
6: begin p9 := p2;p2 := 0;shet := shet + 1; end;
end; end;
2:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p4 := p2;p2 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p6 := p2;p2 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end; end;
3:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
4: begin p4 := p5;p5 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
4: begin p6 := p5;p5 := 0;shet := shet + 1; end;
end; end;
4:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p2;p2 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
2: begin p4 := p5;p5 := 0;shet := shet + 1; end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
2: begin p6 := p5;p5 := 0;shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p5;p5 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 3) then
case st3 of
0: begin p3 := p5;p5 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
7:
begin
if (vod2 = 1) then begin p1 := p8;p8 := 0;shet := shet + 1; end;if (vod2 = 3) then begin p3 := p8;p8 := 0;shet := shet + 1; end;
end;end; end;
3:
begin
case st3 of
1:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
2: begin p4 := p3;p3 := 0; shet := shet + 1; end;
4: begin p4 := p3;p3 := 0;shet := shet + 1; end;
6: begin p7 := p3;p3 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
2: begin p5 := p3;p3 := 0; shet := shet + 1; end;
4: begin p5 := p3;p3 := 0;shet := shet + 1; end;
6: begin p8 := p3;p3 := 0;shet := shet + 1; end;
end; end;
2:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p4 := p3;p3 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так!’); end;
4: begin p5 := p3;p3 := 0;shet := shet + 1; end;
5: begin writeln(‘Нельзя так!’); end;
end; end;
3:
begin
if (vod1 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
4: begin p4 := p6;p6 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
4: begin p5 := p6;p6 := 0;shet := shet + 1; end;
end; end;
4:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p3;p3 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
2: begin writeln(‘Нельзя так’); end;
3: begin writeln(‘Нельзя так’); end;
end; end;
5:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
2: begin p4 := p6;p6 := 0;shet := shet + 1; end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
2: begin p5 := p6;p6 := 0;shet := shet + 1; end;
end; end;
6:
begin
if (vod2 = 1) then
case st1 of
0: begin p1 := p6;p6 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end;
if (vod2 = 2) then
case st2 of
0: begin p2 := p6;p6 := 0;shet := shet + 1; end;
1: begin writeln(‘Нельзя так’); end;
end; end;
end;end;
end;
if p1 = 1 then ris1 := ‘ () ‘;
if p2 = 1 then ris2 := ‘ () ‘;
if p3 = 1 then ris3 := ‘ () ‘;
if p4 = 1 then ris4 := ‘ () ‘;
if p5 = 1 then ris5 := ‘ () ‘;
if p6 = 1 then ris6 := ‘ () ‘;
if p7 = 1 then ris7 := ‘ () ‘;
if p8 = 1 then ris8 := ‘ () ‘;
if p9 = 1 then ris9 := ‘ () ‘;if p1 = 2 then ris1 := ‘ (00) ‘;
if p2 = 2 then ris2 := ‘ (00) ‘;
if p3 = 2 then ris3 := ‘ (00) ‘;
if p4 = 2 then ris4 := ‘ (00) ‘;
if p5 = 2 then ris5 := ‘ (00) ‘;
if p6 = 2 then ris6 := ‘ (00) ‘;if p1 = 4 then ris1 := ‘(0000)’;
if p2 = 4 then ris2 := ‘(0000)’;
if p3 = 4 then ris3 := ‘(0000)’;if p1 = 0 then ris1 := ‘__|__ ‘;
if p2 = 0 then ris2 := ‘__|__ ‘;
if p3 = 0 then ris3 := ‘__|__ ‘;
if p4 = 0 then ris4 := ‘ | ‘;
if p5 = 0 then ris5 := ‘ | ‘;
if p6 = 0 then ris6 := ‘ | ‘;
if p7 = 0 then ris7 := ‘ | ‘;
if p8 = 0 then ris8 := ‘ | ‘;
if p9 = 0 then ris9 := ‘ | ‘;writeln(ris7, ris8, ris9);
writeln(ris4, ris5, ris6);
writeln(ris1, ris2, ris3);
writeln(»);
st3 := p9 + p6 + p3;
if st3 = 7 then
begin
writeln(‘ВЫ ПОБЕДИТЕЛЬ. ‘) ;
shet1 := shet mod 10;
case shet1 of
1:hod:=’ ход.’;
2, 3, 4: hod:=’ хода.’;
5, 6, 7, 8, 9: hod:=’ ходов.’;
end;
writeln(‘Было сделано ‘, shet,hod);
shet1 := pam mod 10;
case shet1 of
1:hod:=’ ход.’;
2, 3, 4: hod:=’ хода.’;
end;
if pam>0 then
begin
if pamshet then writeln(‘В этот раз было лучше.До этого было ‘,pam,hod);
if pam=shet then writeln(‘Число ходов не отличается от того что было.’);
end;
pam:=shet;
ind := 2;
writeln(‘Хотите сыграть еще раз?’);
writeln(‘Да-1’) ;
writeln(‘Нет-2’ );
readln(ind2);
end;
end;
end;
end.Похожие публикации:
- Как сделать картинки по центру в css
- Как сделать картинку черно белой css
- Как сделать кнопку по центру css
- Как сделать круг вокруг иконки css
