Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воробьева Соппа Программирование в Паскаль 2006...doc
Скачиваний:
0
Добавлен:
15.01.2020
Размер:
1.4 Mб
Скачать

Задача 3

На плоскости декартовыми координатами заданы 10 точек:

(x1, y1), (x2, y2), …, (x10, y10).

Вывести полярные координаты точки, имеющей наибольший полярный радиус. Вычисление полярных координат одной точки оформить подпрограммой. Расчетные формулы для вычисления полярных координат следующие:

, где a и b – координаты точки.

Вариант c процедурой

Program P3_P;

Type

vect = array[1..10] of real;

Var

X, Y, R, F: vect;

i, n: integer;

max: real;

Procedure PK(a, b: real; var ro, fi: real);

begin

ro := sqrt(aa + bb);

fi := arctan(b/a);

end;

Begin

writeln(‘Введите абсциссы точек’);

for i :=1 to 10 do read(x[i]);

writeln(‘Введите ординаты точек’);

for i := 1 to 10 do read(y[i]);

max := 0;

for i := 1 to 10 do

begin

PK(x[i], y[i], r[i], f[i]);

if r[i]>max then

begin

max := r[i];

n := i;

end;

end;

writeln(‘romax=’, r[n]:6:2, ‘   fimax=’, f[n]:6:2);

End.

Вариант c функцией

В данной задаче результатом вычисления подпрограммы являются два значения (ro, fi). По правилам языка Турбо Паскаль имени функции может быть присвоено только одно значение, например ro. Однако при оформлении функции допускается в списке формальных параметров указывать не только параметры-значения (входные переменные), но и параметры-переменные (выходные переменные). Согласно этому правилу в приведенной ниже программе параметр fi записывается как выходной в списке формальных параметров функции.

Program P3_F;

Type

vect = array[1..10] of real;

Var

X, Y, R, F: vect;

i, n: integer;

max: real;

Function PK(a, b: real; var fi: real): real;

var

ro: real;

begin

ro := sqrt(aa + bb);

fi := arctan(b/a);

PK := ro;

end;

Begin

writeln(‘Введите абсциссы точек’);

for i :=1 to 10 do read(x[i]);

writeln(‘Введите ординаты точек’);

for i := 1 to 10 do read(y[i]);

max := 0;

for i := 1 to 10 do

begin

r[i] := PK(x[i], y[i], f[i]);

if r[i]>max then

begin

max := r[i];

n := i;

end;

end;

writeln(‘romax=’, r[n]:6:2, ‘   fimax=’, f[n]:6:2);

End.

Задача 4

Для заданных квадратных матриц: и

вычислить симметричные матрицы по правилу:

.

Вариант c процедурой

Program P4_P;

Type

matr = array[1..4, 1..4] of real;

Var

A, B, C, D: matr;

i, j: integer;

Procedure SM(Y: matr; n: integer; var X: matr);

var

i, j: integer;

begin

for i := 1 to n do

for j := i to n do

begin

x[i,j] := (y[i,j] + y[j,i])/2;

x[j,i] := x[i,j];

end;

end;

Begin

writeln(‘Введите матрицу A’);

for i := 1 to 3 do

for j := 1 to 3 do read(a[i,j]);

writeln(‘Введите матрицу В’);

for i := 1 to 4 do

for j := 1 to 4 do read(b[i,j]);

SM(A, 3, C);

SM(B, 4, D);

writeln(‘Симметричная матрица C’);

for i := 1 to 3 do

begin

for j := 1 to 3 do write(c[i,j]:6:2);

writeln;

end;

writeln(‘Симметричная матрица D’);

for i := 1 to 4 do

begin

for j := 1 to 4 do write(d[i,j]:6:2);

writeln;

end;

End.

Вариант c функцией

В задаче результатом вычисления подпрограммы является массив (симметричная матрица). Чтобы оформить вариант программы с функцией, можно ввести фиктивный оператор, присваивающий имени функции произвольное число, например SM:=1;. В основной программе в этом случае объявляется фиктивная переменная (например, L), которой присваивается значение функции. Такие действия необходимы для того, чтобы после обращения к функции произошел возврат в основную программу и продолжалось ее выполнение.

Program P4_F;

Type

matr = array[1..4, 1..4] of real;

Var

A, B, C, D: matr;

i, j, L: integer;

Function SM(Y: matr; n: integer; var X: matr): integer;

var

i, j: integer;

begin

for i := 1 to n do

for j := i to n do

begin

x[i,j] := (y[i,j] + y[j,i])/2;

x[j,i] := x[i,j];

end;

SM := 1;

end;

Begin

writeln(‘Введите матрицу A’);

for i := 1 to 3 do

for j := 1 to 3 do read(a[i,j]);

writeln(‘Введите матрицу В’);

for i := 1 to 4 do

for j := 1 to 4 do read(b[i,j]);

L := SM(A, 3, C);

L := SM(B, 4, D);

writeln(‘Симметричная матрица C’);

for i := 1 to 3 do

begin

for j := 1 to 3 do write(c[i,j]:6:2);

writeln;

end;

writeln(‘Симметричная матрица D’);

for i := 1 to 4 do

begin

for j := 1 to 4 do write(d[i,j]:6:2);

writeln;

end;

End.