ЗАДАЧА: Найти значение и координаты (номера строки и столица)
наименьшего положительного элемента в
четных строках и
нечетных столбцах матрицы.
Код:
Program lab;
const
nm = 30; { размер массива, матрицы }
label 1, 2, 3, 4;
var { раздел описания переменных }
s1 : char;
x1, x2, dx, p1, p2, dp, cmax, cmin : real;
nx,j, jx, jp, np, imn, jmn : integer;
atx: array[0..nm] of real;
atp: array[0..nm] of real;
cxp: array[0..nm, 0..nm] of real;
c_cod: array[0..nm, 0..nm] of integer;
procedure vvod (stroka: string; var chislo: real); {подпрограмма ввода числа}
var
s : string;
cod: integer;
begin
repeat
write(stroka);
readln(s);
val(s, chislo, cod);
if cod <> 0 then writeln('Это не число');
until cod = 0;
end;
procedure func_c ( x, p: real; var c: real; var cod: integer); {подпрограмма вычисления функции}
begin
cod := 0;
if (x <= 0) then cod := 1 + cod; {число под логарифмом не должно быть <=0}
if ((x*x - exp(ln(x*x*x) + (abs(x*x*x*x - 2*p))))=0) then cod := 8 + cod; {деление на 0(знам.)}
if (cod = 0) then
c := (sin (sqrt(p*p*p + x*x + 4.5) ))/(x*x - exp(ln(x*x*x) + (abs(x*x*x*x - 2*p))));
end;
begin;
{ввод данных}
1:
vvod ('Введите начальное значение х1 = ', x1);
vvod ('Введите конечное значение х2 = ', x2);
vvod ('Введите значение шага для dх = ', dx);
if (dx * (x2 - x1) < 0) or (abs(dx) > abs(x2 - x1)) then {проверка интервала и шага аргумента х}
begin
Write('Неверный интервал или шаг табулирования x');
goto 1;
end;
nx := trunc((x2 - x1) / dx) + 1; {расчет числа значений аргумента х (шагов) и формирование массива}
if ((x1 + (nx - 1) * dx) < x2) then nx := nx + 1;
if nx < nm then for j := 1 to nx
do atx[j] := x1 + (j - 1) * dx
else
begin
writeln('Число шагов аргумента Х превышает размер массива ', nm);
goto 1;
end;
atx[nx] := x2;
2:
vvod ('Введите начальное значение p1 = ', p1);
vvod ('Введите конечное значение p2 = ', p2);
vvod ('Введите значение шага для dp = ', dp);
if (dp * (p2 - p1) < 0) or (abs(dp) > abs(p2 - p1)) then {проверка интервала и шага аргумента р}
begin
Write('Неверный интервал или шаг табулирования p');
goto 2;
end;
np := trunc((p2 - p1) / dp) + 1; {расчет числа значений аргумента р и формирование массива}
if ((p1 + (np - 1) * dp) < p2) then np := np + 1;
if np < nm then for j := 1 to np
do atp[j] := p1 + (j - 1) * dp
else
begin
writeln('Число шагов аргумента P превышает размер массива ', nm);
goto 2;
end;
atp[np] := p2;
{расчет элементов матрицы}
for jx := 1 to nx do
for jp := 1 to np
do
begin
func_c( atx[jx], atp[jp], cxp[jx, jp], c_cod[jx, jp]);
end;
writeln;
write ('Арг. Х/Р:');
for j := 1 to np
do write(atp[j]:9:3);
writeln;
for jx := 1 to nx
do
begin
write(atx[jx]:9:3);
for j := 1 to np do
begin
case c_cod[jx, j] of
0: write(cxp[jx, j]:9:3); {вывод значения функции: c := (sin (sqrt(p*p*p + x*x + 4.5) ))/(x*x - exp ( ln(x*x*x) + abs(x*x*x*x - 2*p) ) )}
1: write(' * '); {число под логарифмом не должно быть <=0}
2: write(' ** '); {в знаменателе 0}
3: write(' *** '); {число под логарифмом не должно быть <=0 и в знаменателе 0}
else
write( '**', c_cod[jx, j]); {другие ошибки}
end;
end;
writeln;
end;
writeln (' Комментарий к матрице');
writeln (' * - число под логарифмом не должно быть <=0');
writeln (' ** - в знаменателе 0');
writeln (' *** - число под логарифмом не должно быть <=0 и в знаменателе 0');
writeln;
{тут надо дописать программу:
"Найти значение и координаты (номера строки и столица) наименьшего
положительного элемента в четных строках и нечетных столбцах матрицы".}
4:
writeln;
write('для повторения нажми цифру 0 и ENTER ');
readln(s1); {возвращение в начало}
if (s1='0') then goto 1;
end.