Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Write(' Комментарий: '); Readln(S_t)





end;

Begin Fam:='И.И.Иванов'; Dat:='06.12.95'; {Dat - фактический параметр }

VIZ(Dat); { вызов процедуры } Readln END.

 

Если процедура описана в другом файле с именем, например, F_PR. pas, то ее можно подключить к программе, указав в разделе описания директиву: {$I F_PR. pas}

Приведем пример использования стандартных процедур модуля DOS для вывода текущей даты и времени:

 

uses DOS; { подключение модуля DOS }

Procedure Date_Time;

var y, m, d, d_w:word; h, min, sec, hund: word; {локальные параметры }

Begin

GetDate(y,m,d,d_w); {вызов процедуры DOS, возвращающей параметры даты }

GetTime(h,min,sec,hund); { процедура, возвращающая параметры времени }

writeln('сегодня: ');

writeln('_':10, d, ' число');

writeln('_':10, m, ' месяц');

writeln('_':10, y, ' год');

writeln('день недели: ', d_w); { d_w= 0 - воскресенье, и т. д. }

writeln('Время: ');

writeln('_':6, h, ' часов');

writeln('_':6, min, ' минут');

Writeln('_':6, sec, ' секунд'); readln

end;

Begin Date_Time end.

 

В практических задачах часто пишутся процедуры, возвращающие значения элементов массивов. Приведем пример процедуры расчета "N" значений функции, например, Y= 4*Sin(x)+7*Cos(x); в заданном диапазоне x1<=x<=x2, при N<=100 и равномерной разбивке диапазона.

 

type r_1000= array[1.. 1000] of real; { задается тип r_1000 }

var Z: r_1000; x1, x2: real; n: word;

Procedure Mas_Y(var Y:r_1000; x1,x2:real; n:word); {Y - параметр-

переменная}

var i: word; x, dx: real; { локальные параметры }

Begin

If (n>1000) or (n<2) then begin

writeln('Длина массива >1 и не должна превышать 1000');

Readln; Halt end;

i:=0; x:=x1; dx:=(x2-x1)/(n-1); { dx - шаг изменения аргумента }

If dx<= 0 then begin

writeln('x2 должно быть больше x1'); Readln; Halt end;

While x<x2 do begin

i:= i+1; x:= x1 + dx*(i-1); Y[i]:= 4*Sin(x)+7*cos(x)

End

end;

begin Writeln('Введите значения х1,х2, (x2>x1)'); Readln(x1, x2);

Writeln('Введите значение 1 <n<= 1000 '); Readln(n);

Mas_Y(Z, x1, x2, n); { вызов процедуры, возвращающей массив "Z" }

End.

Здесь тип формального параметра "Y" задается в разделе описания типов внешней программы и совпадает с типом фактического параметра "Z", значения элементов которого возвращаются во внешнюю программу.

 

Оператор Halt прерывает выполнение всей программы, даже если он используется внутри процедуры. Применение оператора Exit внутри процедуры вызывает прерывание процедуры, но не внешней программы.

Приведем пример процедуры вывода массива чисел в файл:

 

Type M_30х30_r= array[1..30, 1..30] of real; { задается тип M_30х30_r }

var x: M_30х30_r; i, j, n, m: byte;

{----------------------------------------------------------------}

Procedure Wr_M(a: M_30х30_r; name_f: string; n, m: byte);

Var i, j: byte; { a - массив NxM, n<=30, m<=30 }

f: text; { name_f - имя файла }

begin assign(f, name_f); rewrite(f);

For i:= 1 to n do begin writeln(f);

For j:= 1 to m do write(f, a[i,j]:6:2) end;

Close(f)

end;

{----------------------------------------------------------------}

Begin N:= 10; { создание симметричной матрицы }

for i:= 1 to N do for j:= i to N do

x[i, j]:= 0.5 + random(50); { заполнение верхней треугольной матрицы }

for i:= 1 to N do for j:= i to N do

x[j,i]:= x[i,j]; { заполнение нижней, симметричной части матрицы }

 

Wr_M(x, 'file_1.out', N, N); { вызов процедуры записи массива в файл }

End.

 

Для правильного считывания данных, записанных в файл бесформатным выводом необходима запись пробела для разделения чисел.

 

Приведем пример функции для расчета высоты треугольника по заданным значениям его сторон.

Program TR;

Var a, b, c, ha, hb, hc: real;

{----------------------------------------------------------------}

Function H_TR(a, b, c: real): real; { a, b, c - Стороны треугольника }

Var p, s: real;

Begin

If (a<0) or (b<0) or (c<0) Then begin

Writeln('Стороны треугольника >0?'); readln; Halt end;

If (a>(b+c)) or (b>(a+c)) or (c>(a+b)) Then begin

Writeln('a<(b+c), b<(a+c), c<(a+b)?'); readln; Halt end;

p:= (a+b+c)/2; { полупериметр }

s:= Sqrt(p*(p-a)*(p-b)*(p-c)); { площадь }

H_TR:= 2*s/a; { Присвоение функции значения }

End;

{----------------------------------------------------------------}

Begin

Writeln('Введите значения сторон треугольника a,b,c'); Readln(a,b,c);

ha:= H_TR(a, b, c); hb:= H_TR(b, a, c); hc:= H_TR(c, b, a);

Writeln('Высоты треугольника:');

Writeln('ha=',ha:-10:4, 'hb=',hb:-10:4, 'hc=',hc:-10:4); Readln

End.

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

 

Приведем пример использования функции для расчета суммы членов степенного ряда, представляющего тригонометрическую функцию Y= Sin(x).

PROGRAM fun_sin; Y

var y, y1, x1: real;

{--------------------- -}

Function Sin_r(x: real): real; -¶ 0 ¶ 2¶ 3¶ X

Var a, k, y: real; i: longint;

Begin

{if abs(x) > 2*Pi Then x:= 2*pi*Frac(x/(2*Pi)); {учет периодичности }

if abs(x) > 2*Pi Then x:= x - 2*pi*Int(x/(2*Pi)); { функции }

if abs(x) > Pi Then x:= Pi - ABS(x); { учет асимметрии функции }

i:= 0; a:= x; y:= a;

while abs(a)>0.0000001 do begin i:=i+1; k:=-x*x/(2*i*(2*i+1));

a:= a*k; y:= y + a end;

Sin_r:= y; { присвоение функции ее значения }

end;

{----------------------------------------------------------------}

Begin

write('Введите значение аргумента: x1= '); Readln(x1);

Y:= Sin_r(x1); { вызов функции, разработанной программистом }

Y1:= Sin(x1); { вызов стандартной функции }

writeln('значение аргумента: x1= ', x1);

writeln('расчетное значение функции: Sin_r(x1)= ', y:-11:8);

writeln('контрольный результат: Sin(x1) = ', y1:-11:8);

writeln('Нажмите Enter'); readln;

End.

 

В описании функции обязателен оператор присвоения функции ее значения. Изменение величины параметра-значения "x" в теле функции не отражается на его значении во внешней программе. Функция возвращает значение, которое во внешней программе присваивается переменной "y".

 

Практическое задание N 1

Написать и отладить программы с использованием процедур:

 

1. Вывести на экран визитную карточку программиста с указанием текущей даты.

2. Вывести на экран визитную карточку программиста с указанием времени.

Примечание к п. п. 1, 2: рассмотреть случаи задания фамилии разработчика в качестве глобального, локального и формального параметра.

 

3. Рассчитать массив из N значений функции Y= ex + Cos(x) при изменении аргумента с постоянным шагом в диапазоне x1.. x2, и записи массива в файл. Значения N, x1, x2 и имя файла задаются оператором ввода

4. Рассчитать массив из N значений функции Y=ln(x) - x3 при изменении аргумента с постоянным шагом в диапазоне x1.. x2, и записи массива в файл. Значения N, x1, x2 и имя файла задаются оператором ввода.

 

5. Создать единичную матрицу NxN (N<=50). Элементы матрицы на главной диагонали равны единице, остальные - нулю. Вывести на экран массив 20х20.

6. Заменить элементы матрицы NxN (N<=30), расположенных в строках на элементы, расположенные в столбцах, т. е. a[i, j] на a[j, i]. Вывести на экран исходный и транспонированный массивы размером 10х10.

Практическое задание N 2

Написать и отладить программы с использованием функций:

 

1. Рассчитать площадь треугольника по известным координатам вершин с использованием формулы S= 0.5*abs(y1*(x3-x2)+ y2*(x1-x3) + y3*(x2-x1)), а также разработать функцию расчета площади треугольника по формуле Герона (значения сторон вычисляются внутри функции). Вывести на экран значения площади треугольника, подсчитанные по обеим формулам (функциям).

2. Вывести на экран сообщения о типе треугольника: остроугольный, прямоугольный, тупоугольный (задаются координаты вершин). Для расчета углов использовать теорему косинусов, например: c_a:= (b*b + c*c - a*a)/(2*b*c);

где c_a - косинус угла, противоположного стороне "a".

3. Определить нахождение точки "А" внутри прямоугольника, включающего область из "N" точек с координатами Xi, Yi, i=1,..., N< 21. Стороны прямоугольника параллельны осям координат. Координаты точек задаются в основной программе функцией Random(1000). Функция возвращает значение логического типа.

4. Определяющую симметричность матрицы (NxN). Функция возвращает значение логического типа.

Практическое задание N 3

 

Рассчитать значения суммы членов степенного ряда, представляющих функции, из таблицы к заданию N1. 16.

 







Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





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


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.