Условие лабы:
Даны натуральные числа k,l,m, действительные числа X1..Xk, Y1..Yl, Z1..Zm. Получить
t = (max(Y1..Yl)+Max(Z1..Zm))/2 при max(X1..Xk)>=0,
t = 1+(max(X1..Xk))^2 в противном случае.
Написал так:
- Код: Выделить всё
program laba430;
uses crt;
const k=5; L=6; m=7;
var X: array [1..k] of integer;
Y: array [1..L] of integer;
Z: array [1..m] of integer;
n:integer;
t:single;
function max(M: array of integer; ml:integer): integer;
var q,w:integer;
begin
q:=M[1];
for w:=2 to ml do
if (M[w]>q) then q:=M[w];
max:=q;
end;
procedure zapoln(var M: array of integer; ml:integer);
var q: integer;
begin
for q:=1 to ml do begin
M[q]:=random(40)-20;
write(M[q]:4);
end;
writeln;
end;
begin
clrscr;
randomize;
zapoln(X,k);
zapoln(Y,L);
zapoln(Z,m);
n:=max(X,k);
write('Max X = ');
writeln(n);
if (n<0) then t:=1+max(X,k)*max(X,k) else t:=(max(Y,L) + max(Z,m)) / 2;
write('T = ');
writeln(t:5:1);
readkey;
end.
Выдаёт чушь, а если написать {$mode TP}, то числа приближаются к реальности но всё равно
неверные. Причины наверное в разности диапазонов значений.
Исправил (изменённые строки помечены "//!!!"):
- Код: Выделить всё
program laba430;
uses crt;
const k=5; L=6; m=7;
var X: array [0..k-1] of integer; //!!!
Y: array [0..L-1] of integer; //!!!
Z: array [0..m-1] of integer; //!!!
n:integer;
t:single;
function max(M: array of integer; ml:integer): integer;
var q,w:integer;
begin
q:=M[0]; //!!!
for w:=1 to ml-1 do //!!!
if (M[w]>q) then q:=M[w];
max:=q;
end;
procedure zapoln(var M: array of integer; ml:integer);
var q: integer;
begin
for q:=0 to ml-1 do begin //!!!
M[q]:=random(40)-20;
write(M[q]:4);
end;
writeln;
end;
begin
clrscr;
randomize;
zapoln(X,k);
zapoln(Y,L);
zapoln(Z,m);
n:=max(X,k);
write('Max X = ');
writeln(n);
if (n<0) then t:=1+max(X,k)*max(X,k) else t:=(max(Y,L) + max(Z,m)) / 2;
write('T = ');
writeln(t:5:1);
readkey;
end.
Заработало! Можете объяснить, в чём тут дело и почему в функцию нельзя передать определённый массив?
P.S.: версия пока 2.0.2