ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Функции пользователяСинтаксис заголовка функции: Function <имя функции> (описание параметров): тип; Для передачи основной программе результата в теле функции необходимо имени функции присвоить значение вычисления.
Синтаксис функции Function <имя_функции>(<параметры>): <тип результата>; Label <метки>; Const <константы>; раздел объявления меток, констант, типов данных, Type <типы данных>; переменных (может отсутствовать) Var <переменные>; Begin <операторы, составляющие тело функции>; End; Для того, чтобы значение функции было определено и передано в основную программу, в теле функции обязательно должен быть хотя бы один оператор присваивания вида: <имя_функции>:=<значение>. Вызов функции, определенной пользователем, осуществляется так же, как и любой стандартной функции Паскаля.
Пример 1. Создать функцию пользователя, вычисляющую х!
Program primer; Var x: integer; y: real; Function Fact(x: integer): real; Var i: integer; f: real; begin f:=1; for i:=1 to x do f:=f*i; {вычисляем произведение} Fact:=f; {имени функции присваиваем полученное значение} end; begin {основная программа} Write (‘x=’); Readln(x); {ввод значения х} y:=Fact(x); {вызов функции с аргументом х } Writeln(‘y=’, y:4:0); {вывод результата} Readln; end. Пример 2. Вычислить, используя функцию нахождения знаменателя: (n слагаемых)
Program primer; Var s: real; i, n: integer; Function Fakt(x: integer): real; {функция вычисления факториала} Var i: integer; f: real; begin f:=1; for i:=1 to x do f:=f*i; Fakt:=f; end; Begin write('n= '); Readln(n); {вводим количество слагаемых суммы} s:=0; For i:=1 to n do {перебираем i от 1 до n} s:=s+i/Fakt(i+1); {добавляем к сумме очередную дробь, вызывая} { функцию для вычисления знаменателя} writeln('s=',s:6:4); {вывод результата} Readln; end.
Пример 3. Два треугольника заданы длинами своих сторон. Определить, площадь какого из них больше (создать функцию для вычисления площади треугольника по длинам его сторон). Для решения задачи используем формулу Герона , где x, y, z – стороны треугольника, p – полупериметр)
Program primer; var a1, b1, с1, s1, a2, b2, с2, s2: real; Function PlTr(x,y, z: real): real; Var p: real; Begin p:= (x + y + z)/2; {полупериметр треугольника} PlTr:=Sqrt(p*(p-x)*(p-y)*(p-z)); End; BEGIN {основная программа} Write('Cтороны 1-го треугольника:'); Readln(a1, b1, c1); Write('Cтороны 2-го треугольника:'); Readln(a2, b2, c2); S1:=PlTr(a1, b1, c1); {вызов функции для нахождения площади 1-го треугольника} S2:=PlTr(a2, b2, c2); {вызов функции для нахождения площади 2-го треугольника} if S1>S2 then Writeln(‘S1>S2’) else if S1<S2 then Writeln(‘S1<S2’) else Writeln(‘S1=S2’); Readln; END. Процедуры Процедура – это относительно самостоятельная часть программы, имеющая собственное имя. Процедура описывается перед основной программой. Синтаксис заголовка процедуры: Procedure <имя процедуры> (описание параметров); В заголовке перед параметром, значение которого передается в основную программу, ставится слово var. Структура процедуры: Procedure <имя_процедуры>(<параметры>); - заголовок процедуры Label <метки>; Const <константы>; раздел объявления меток, констант, типов данных, Type <типы данных>; переменных (может отсутствовать) Var <переменные>; Begin <операторы > - тело процедуры End; Параметры, указанные в заголовке процедуры называются формальными. Вызов процедуры осуществляется из основной программы указанием ее имени. При вызове процедуры формальные параметры заменяются фактическими. Количество и тип формальных и фактических параметров должны совпадать. Для передачи исходных данных в процедуру используются параметры-значения. Фактические параметры-значения могут быть константами, переменными, выражениями. Полученный в процедуре результат передается в основную программу с помощью параметров-переменных. В заголовке описания процедуры перед параметрами-переменными пишется Var.
Пример 4. Создать процедуру для вычисления периметра и площади прямоугольного треугольника по его катетам a, b.
Program primer; Var a, b, p, s: real; { a, b- катеты, p - периметр, s - площадь } Procedure Treug(a,b: real; Var p, s: real); {a, b- входные данные(параметры-значения),} {p, s-выходные данные(параметры-переменные)} Begin p:= a + b + Sgrt(a*a + b*b); {периметр треугольника с катетами a, b} s:= a*b/2; { площадь треугольника с катетами a, b } End; Begin {основная программа} Write('a, b =');Readln(a, b); {ввод исходных данных} Treug(a, b, p, s); {вызов процедуры и передача исходных данных a, b} Writeln('p=', p:4:1, ‘ s=’, s:4:1); {вывод результата, полученного из процедуры} Readln; End. Пример 5. С оздать процедуру обмена значениями 2-х переменных.
Program primer; Var A, B: real; Procedure Obmen(Var X,Y:real); Var T: real; Begin T:=X; X:=Y; Y:=T; End; begin Write('A, B ='); Readln(A,B); Obmen(A,B); Writeln('A=', A:5:2,' B='); Readln; end. Пример 6. Создать процедуру для вывода первых N членов арифметической прогрессии, заданной значением первого члена а и разностью d. Вывести первые 7 членов прогрессии 2, 5, … (a=2, d=3) и первые 10 членов прогрессии 20, 19, ….(a=20, d= -1)
Program primer; Procedure progres(a,d,n:integer); Var i: integer; {i – номер очередного члена прогрессии } Begin for i:=1 to n do {перебираем i от 1 до n} begin write(a,' '); {выводим очередной член прогрессии} a:=a+d; {вычисляем следующий член прогрессии} end; End; begin {основная программа} {вызов процедуры для вывода 7 членов арифметической прогрессии 2, 5,…} progres(2,3,7); writeln; {вызов процедуры для вывода 10 членов прогрессии 20,19,…} progres(20,-1,10); Readln; end. Пример 7. Выяснить, какие натуральные числа от 2 до 10 являются простыми, а какие - составными (создать процедуру, определяющую простым или составным является данное число). Число называется простым, если оно не имеет делителей кроме 1 и самого себя. Если у него есть другие делители, то число – составное.
Program primer; Var i: integer; Procedure prostoe(x:integer); Var k,n: integer; {n - возможные делители числа, k – количество делителей} Begin k:=0; for n:=2 to x div 2 do {перебираем числа от 2 до x div 2 для поиска делителей} if x mod n = 0 {если n –делитель числа x} then k:=k+1; {увеличиваем количество делителей на 1} if k=0 {если у числа нет делителей} then writeln (x,' - prostoe') {то число простое} else writeln (x,' - sostavnoe'); {иначе число составное} End; begin {основная программа} for i:=2 to 10 do {перебираем числа от 2 до 10} prostoe(i); {вызываем процедуру для проверки очередного числа} Readln; end. Массивы Одномерные массивы Массив – последовательность однотипных величин. Массив можно рассматривать как таблицу, в которой каждый компонент занимает определенную ячейку. Все элементы массива обозначаются одним именем (имя массива), а отдельный элемент определяется своим номером (индексом). Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке ПАСКАЛЬ, кроме файлового типа. Тип компонент называется базовым типом.
A[1]=-2 A[2]=5 Описание массива: Var M: array [1..10] of integer; Индексом элементов массива могут быть константы, переменные, выражения: A[1], A[k], B[2*k]. После объявления массива в памяти компьютера выделяется нужное количество ячеек. Для того, чтобы заполнить ячейки значениями, необходимо воспользоваться одним из следующих способов формирования массива:
1) С помощью Read:
Program primer; Var A: array [1..10] of integer; I: integer; Begin For i:=1 to 10 do Begin Write(‘введите ‘, I, ‘- ый элемент’); Readln(a[i]); End; End.
2) C помощью команды присваивания: a) For i:=1 to 10 do Begin A[i]:=2*i+1; Write(a[i]:4); End; В результате будет получен массив, элементами которого являются числа – 3, 5, 7… b) заполнение случайными числами: For i:=1 to 10 do Begin A[i]:=random(100); Write(a[i]:4); End; В результате будет получен массив, состоящий из 10 случайных чисел из диапазона [0, 100). Функция Random(N); генерирует случайное число из диапазона [0; N). Если необходимо выбрать число из диапазона [a; b], записывают random(b-a+1)+a. [10,50] – x:=random(41)+10; X:=random(21)-10; - [-10;10] Для того, чтобы СС каждым запуском программы получать новые последовательности чисел, необходимо использовать процедуру Randomize, которая инициализирует датчик случайных чисел.
Стандартные задачи обработки массивов: Не нашли, что искали? Воспользуйтесь поиском:
|