Другие языки программирования и технологии

Turbo Pascal, не компилируется фрагмент кода с вызовом процедур, где ошибка?

procedure v1(mas1,mas2: array of integer; k,m,n: integer);
begin
...
end;

procedure v2(mas1,mas2: array of integer; k,m,n: integer);
begin
...
end;

procedure v3(mas1,mas2: array of integer; k,m,n: integer);
begin
...
end;

procedure variant(v: integer);
begin
case v=1 of true: v1(mas1,mas2: array of integer; k,m,n: integer); end;
case v=2 of true: v2(mas1,mas2: array of integer; k,m,n: integer); end;
case v=3 of true: v3(mas1,mas2: array of integer; k,m,n: integer); end;
end;
ИИ
Игорь Игорь
3 871
Нагородили.. .

case v of
1: v1(mas1,mas2,k,m,n);
2: v2(mas1,mas2,k,m,n);
3: v3(mas1,mas2,k,m,n);
end;

Можно сделать еще короче и красивее с использованием процедурного типа, но нужно будет слишком много объяснений. Впрочем, напишу:
{$F+}
procedure v1(mas1,mas2: array of integer; k,m,n: integer); begin ...end;
procedure v2(mas1,mas2: array of integer; k,m,n: integer); begin ...end;
procedure v3(mas1,mas2: array of integer; k,m,n: integer); begin ...end;
{$F-}
type proc=procedure(mas1,mas2: array of integer; k,m,n: integer);
const pro:array[1..3]of proc=(v1,v2,v3);
...
begin
...
pro[v](m1,m2,k1,k2,k3);
...
end.
Paul Kelevra
Paul Kelevra
56 928
Лучший ответ
Paul Kelevra Мой код с процедурным типом можно еще укоротить:
Вместо
type proc=procedure(mas1,mas2: array of integer; k,m,n: integer);
const pro:array[1..3]of proc=(v1,v2,v3);
можно было написать просто
const pro:array[1..3]of procedure(mas1,mas2: array of integer; k,m,n: integer)=(v1,v2,v3);
вообще то переменные описываются перед вызовом процедур

procedure variant(v: integer);
var
mas1,mas2: array [0..1] of integer;
k,m,n: integer
begin
case v=1 of true: v1(mas1,mas2, k,m,n); end;
case v=2 of true: v2(mas1,mas2, k,m,n); end;
case v=3 of true: v3(mas1,mas2, k,m,n); end;
end;

и, если мне не изменяет память, надо каждую переменную в процедуре описывать отдельно
procedure v(mas1: array[0..1] of integer; mas2[0..1]: array of integer; k: integer; m: integer;n: integer);
begin
...
end;

а проще объяви массивы до начала программы и используй их как public

так же можно создать класс, где есть все эти переменные и вызывать процедуры только с одной переменной (нашего класса)
Игорь Игорь Все массивы и переменные объявлены до начала программы и до начала процедур. Процедуры объявлены до начала программы.
Игорь Игорь Переделал код как в вашем сообщении, не помогло.
type
arr = array [1..10] of integer;
....

case v of
1: v1(mas1,mas2:arr; k,m,n:integer);
2: v2(mas1,mas2:arr; k,m,n:integer);
3: v3(mas1,mas2:arr; k,m,n:integer);
end;
массивы нельзя передавть в качестве параметров процедур
Андрей Кульпин Как это нельзя ? Можно.
Paul Kelevra Конечно, можно. Есть даже несколько способов.
Никита Емельянов Видимо черный плащ имел ввиду что в таком виде их нельзя передавать.