Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Функция с массивами.

Автор: VUDDRI 17.02.2008 21:43


F=(min(b1...bm)+min(c1...cn),если |min(a1...ak)|>10)/(1+(min(c1...cn)*min(c1...cn),если|min(a1...ak)|<=10)

 
Type mas1=array [1...k] of real;
mas2=array [1...m] of real;
mas3=array [1...n] of real;
var a:mas1,b:mas2,c:mas3;
var i,k,m,n:integer;
mina,minb,minc:real;
procedure P (x:mas;var min:real);
var i: integer;
begin
min:=x[1];
for i:=1 to k do
for i:=1 to m do
for i:=1 to n do
if x[i]<min then begin min:=x[i];end;
begin writeln ('k= m= n=');
readln (k,m,n);
for i:=1 to k do read (a[i]);
for i:=1 to m do read (b[i]);
for i:=1 to k do read (a[i]);
P(a,mina);P(b,minb);P(c,minc);
writeln (mina,minb,minc);end;
function F1 (mina,minb,minc:real):real;
begin
if (abs (mina)>10) then begin F1:= minb+minc;end;end;
function F2(mina,minb,minc:real):real;
begin
if (abs (mina)<=10) then begin F2:= 1+ minc*minc;end;end;
F:=F1/F2;
writeln (F:8:3);end.

Автор: volvo 17.02.2008 22:18

Что подразумевается под "правильно"? Будет ли запускаться, работать и выдавать ответ? Нет, не будет... Потому что перепутано все, что только можно... K, M, N - это переменные или константы, например? Если переменные, то как описываются типы mas...? Там нужны константы... А если это - константы - то как они могут читаться через Readln?

Кстати, где описан тип mas? И главное - зачем? Ты же все делаешь в одном месте - у тебя процедура P - это "все в одном", и получить размеры массивов, и ввести сами массивы, и вернуть минимум. Раздели ее на процедуру чтения массива и функцию нахождения минимума, все станет гораздо проще (кстати, здесь не пойдет явное описание типов array[1 .. что-то] of real, потому что все три массива имеют разный размер... пользуйся открытыми массивами:

procedure InputArray(var arr: array of real; size: integer);
begin
{ ... }
end;

)

Автор: VUDDRI 18.02.2008 21:14

Цитата(VUDDRI @ 17.02.2008 17:43) *

F=(min(b1...bm)+min(c1...cn),если |min(a1...ak)|>10)/(1+(min(c1...cn)*min(c1...cn),если|min(a1...ak)|<=10)
 
Type mas1=array [1...k] of real;
mas2=array [1...m] of real;
mas3=array [1...n] of real;
var a:mas1,b:mas2,c:mas3;
var i,k,m,n:integer;
mina,minb,minc:real;
procedure P (x:mas;var min:real);
var i: integer;
begin
min:=x[1];
for i:=1 to k do
for i:=1 to m do
for i:=1 to n do
if x[i]<min then begin min:=x[i];end;
begin writeln ('k= m= n=');
readln (k,m,n);
for i:=1 to k do read (a[i]);
for i:=1 to m do read (b[i]);
for i:=1 to k do read (a[i]);
P(a,mina);P(b,minb);P(c,minc);
writeln (mina,minb,minc);end;
function F1 (mina,minb,minc:real):real;
begin
if (abs (mina)>10) then begin F1:= minb+minc;end;end;
function F2(mina,minb,minc:real):real;
begin
if (abs (mina)<=10) then begin F2:= 1+ minc*minc;end;end;
F:=F1/F2;
writeln (F:8:3);end.


Я не понимаю,что значит "открытый массив". В начале я задам константы(уберем readln K,N,M) и остальное так как Вы советуете,в пределах моего понимания. Я стараюсь понять.Помогите ещё пожалуйста.

const k=5;m=6;n=7;
Type mas1=array [1...k] of real;
mas2=array [1...m] of real;
mas3=array [1...n] of real;
var a:mas1,b:mas2,c:mas3;
var i:integer;
mina,minb,minc:real;
procedure InputArray(var arr:array of real; size:integer);
begin
for i:=1 to k do read (a[i]);
for i:=1 to m do read (b[i]);
for i:=1 to k do read (a[i]);
function P(min:real);real;
var i:integer;
begin
min:=arr[1];
for i:=1 to k do
for i:=1 to m do
for i:=1 to n do
if arr[i]<min then begin min:=arr[i];
P(mina);P(minb);P(minc);
writeln(mina,minb,minc);end;
function F1 (mina,minb,minc:real):real;
begin
if (abs (mina)>10) then begin F1:= minb+minc;end;end;
function F2(mina,minb,minc:real):real;
begin
if (abs (mina)<=10) then begin F2:= 1+ minc*minc;end;end;
F:=F1/F2;
writeln (F:8:3);end.
.