![]() ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Функции пользователяСинтаксис заголовка функции: Function <имя функции> (описание параметров): тип; Для передачи основной программе результата в теле функции необходимо имени функции присвоить значение вычисления.
Синтаксис функции Function <имя_функции>(<параметры>): <тип результата>;
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. Вычислить, используя функцию нахождения знаменателя:
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. Два треугольника заданы длинами своих сторон. Определить, площадь какого из них больше (создать функцию для вычисления площади треугольника по длинам его сторон). Для решения задачи используем формулу Герона
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 <имя_процедуры>(<параметры>); - заголовок процедуры
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, которая инициализирует датчик случайных чисел.
Стандартные задачи обработки массивов: Не нашли, что искали? Воспользуйтесь поиском:
|