function s(a,b,c,h:real):real;
begin
writeln(Âûáåðèòå ôîðìóëó(n): "1"-åñëè âñå ñòîðîíû òðåóãîëüíèêà íåðàâíû, "2"-åñëè 2 ñòîðîíû òðåóãîëüíèêà ðàâíû, "3"-åñëè âñå ñòîðîíû òðåóãîëüíèêà ðàâíû, "4"- åñëè ïðÿìîóãîëüíûé òðåóãîëüíèê.);
readln(n);
if n>4 then
begin
clrscr;
writeln(Ïðîñòèòå íî âû ââåëè íåèçâåñòíóþ ôîðìóëó.Ïîïðîáóéòå ñíîâà!);
function P(a,b,c:real):real;
begin
writeln(ââåäèòå a,b,c-);
readln(a,b,c);
S:=a+b+c;
writeln(S,S-);
end;
writeln(Ñïàñèáî ÷òî ïîëüçîâàëèñü ýòîé ïðîãðàììîé!);
begin
writeln(âûáåðèòå 1 åñëè õîòèòå íàéòè ïåðèìåòð);
writeln(âûáåðèòå 2 åñëè õîòèòå íàéòè ïëîùàäü);
z:=readkey;
case z of
1:writeln(s(a,b,c));
2:writeln(P(a,b,c,h));
end;
Операторы.
Программа на языке Pascal ABC имеет следующий вид:
program имя программы;
раздел подключения модулей;
раздел описаний;
begin
операторы
end.
Первая строка называется заголовком программы и не является обязательной.
Раздел подключения модулей начинается со служебного слова uses, за которым следует список имен модулей, перечисляемых через запятую.
Раздел описаний может включать разделы описания переменных, констант, типов, процедур и функций, которые следуют друг за другом в произвольном порядке.
Раздел подключения модулей и раздел описаний могут отсутствовать.
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Процедуры в Паскале
Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin ). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).
Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.
Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале
procedure pr; var i:integer; begin for i:=1 to 60 do begin <тело подпрограммы>write(‘*’); writeln; end; end; <конец подпрограммы>begin pr; <вызов процедуры>end.
В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.
Процедуры с параметрами. Фактические и формальные параметры
Рассмотрим пример необходимости использования процедуры.
Особенность: Три похожие фигуры.
Алгоритм решения:
- выделить одинаковые или похожие действия (три фигуры);
- найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет);
- отличия записать в виде неизвестных переменных, они будут параметрами процедуры.
Решение на паскале:
Процедура:
Программа:
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 s:char; procedure pr(a:char); var i:integer; begin for i:=1 to 60 do begin write(a); writeln; end; end; begin writeln(‘simvol’); readln(s); pr(s); end.
В данном примере при вызове процедуры компилятор заменит формальный параметр a фактическим параметром s , т.е. тем символом, который будет введен с клавиатуры. Оба параметра имеют тип данных char .
- число фактических параметров должно быть равно числу формальных параметров;
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу данных.
Процедуры с параметрами. Параметр-переменная
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.
В примере формальные параметры a и b служат для помещения в них сравниваемых чисел, а параметр-переменная max — для сохранения в ней максимального из двух чисел. Параметр-переменная или выходной параметр передает свое значение в основную программу (фактическому параметру m ), т.е. возвращает значение, тогда как формальные параметры-значения (входной параметр), наоборот, принимают значения из основной программы (из фактических параметров x и y ). Для параметра-переменной ( max ) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m ).
Таким образом, сформулируем понятия:
Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр-значение или входной параметр ( a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра ( a и b должны попарно соответствовать типу данных x и y ).
Если перед именем формального параметра в объявлении процедуры стоит служебное слово var, то такой параметр называется параметром-переменной или выходным параметром ( max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры ( m ). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).
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; <второй параметр процедуры — b — всегда будет максимальным>end; end; begin writeln(‘введите два числа’); readln(x,y); exchange (x,y); writeln(‘max=’,y) end.
Используя данный способ решения задачи, мы обошлись без третьего параметра. Для этого в процедуре мы использовали еще одну локальную переменную c . Процедура меняет значения переменных a и b таким образом, чтобы b всегда была максимальной. Поэтому в 15 строке программы в качестве максимальной выводится второй параметр ( y ), соответствующий формальному параметру b .
- Необходимо определить наибольший общий делитель двух введенных чисел, используя цикл.
- Необходимо определить наибольший общий делитель двух введенных чисел, используя процедуру (два параметра-значения, один параметр-переменная).
Словесный алгоритм:
- Вводятся a и b (например, 18 и 24)
- В цикле повторяем действия:
- Если а 18
если b>a -> swap(a,b) 24/18 = 1(6) a=6, b=18 6 18/6 =3(0) a=0, b=6 6 128 и 56 128/56=2(16) a=16,b=56 16 56/16=3(8) a=8,b=16 8 16/8=2(0) a=0, b=8 8
0 do begin if a
В задачах на Паскале часто встречается необходимость заполнить массив данными и затем вывести значения на экран. Почему бы не автоматизировать данную задачу заполнения и вывода массива — т.е. оформить при помощи процедур, а в дальнейшем использовать данные процедуры при надобности.
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 ).
— вызов процедуры с двумя параметрами: количество элементов, массив.
Тело процедуры:
— вывод элементов массива с использованием параметров
Продолжим нашу задачу:
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.
Самостоятельная работа
Общее задание 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). Вызывать процедуру до тех пор, пока среди значений не появится ноль.