Условие лабы:
Даны натуральные числа 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



 
 
