Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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.

 

Параметры функции В описании процедуры или функции задается список формальных параметров. Каждый параметр, описанный в списке формальных параметров, является локальным по отношению к описываемой процедуре или функции, и в теле подпрограммы на него можно ссылаться по его идентификатору. Существует три основных типа параметров: параметр-значение, параметр-переменная и параметр-константа. Они характеризуются следующим: 1 Группа параметров без предшествующего ключевого слова var является списком параметров-значений. 2 Группа параметров, перед которыми стоит ключевое слово var является списком параметров-переменных. 3 Группа параметров, перед которыми стоит ключевое слово const является списком параметров-констант. Параметры-значения Формальный параметр-значение обрабатывается, как локальная по отношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического параметра при активизации процедуры или функции. Изменения, которые претерпевает формальный параметр-значение, не влияют на значение фактического параметра. Фактическое значение параметра-значения не должно иметь файловый тип или какой-либо структурный тип, содержащий в себе файловый тип. Фактический параметр должен иметь тип, совместимый по присваиванию с типом формального параметра-значения. Примеры: function MaxElem(A: Vector; n:Byte): Real; function IsZero(I, K: Integer): Boolean; Параметры-переменные Параметр-переменная используется, когда значение должно передаваться из процедуры или функции вызывающей программе. Соответствующий фактический параметр в операторе вызова процедуры или функции должен быть ссылкой на переменную. При активизации процедуры или функции формальный параметр-переменная замещается адресом фактической переменной, любые изменения в значении формального параметра-переменной отражаются на фактическом параметре. Внутри процедуры или функции любая ссылка на формальный параметр-переменную приводит к доступу к самому фактическому параметру. Тип фактического параметра должен совпадать с типом формального параметра-переменной. Примеры: function SumMatr(A, B: Matrix; var C: Matrix):Real; function ChrString(var S: String):String; Параметры-константы Параметры-константы также как и параметры-переменные передаются в программу своим адресом. Но в отличии от них изменять параметры-константы в теле подпрограммы не допускается.  

Пример 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.


Массивы

Одномерные массивы

Массив – последовательность однотипных величин.

Массив можно рассматривать как таблицу, в которой каждый компонент занимает определенную ячейку. Все элементы массива обозначаются одним именем (имя массива), а отдельный элемент определяется своим номером (индексом). Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке ПАСКАЛЬ, кроме файлового типа. Тип компонент называется базовым типом.

 

-2        

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, которая инициализирует датчик случайных чисел.

 

Стандартные задачи обработки массивов:






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных