Консультация № 168962
04.06.2009, 20:09
0.00 руб.
04.06.2009, 20:15
0 2 2
Уважаемые эксперты, помогите пожалуйста решить следующий ворос (нуждаюсь в срочном ответе):

какие входные и выходные параметры необходимо прописать в отрывке программы, созданной в паскале (через var,real,integer и т.п.)
program nm;
uses crt;
type s=array[1..100,1..100] of integer;
var n,m,i,j:integer;
ma:s;
a,b:real;

procedure vvod; (ЗДЕСЬ ОПИСАНИЕ ЭЛЕМЕНТОВ)
begin
for i:=1 to n do
for j:=1 to m do begin
write(i,j,' = ');
readln(ma[i,j]);
end;
end;

procedure vivod;(ЗДЕСЬ ОПИСАНИЕ ЭЛЕМЕНТОВ)
begin
for i:=1 to n do begin
for j:=1 to m do write(ma[i,j]:3);
writeln;
end;
end;

Обсуждение

Неизвестный
04.06.2009, 20:35
общий
это ответ
Здравствуйте, Саша Казаченко Ивановна.

1. Можно не прописывать никаких, тогда будут использованы уже описанные глобальные переменные.
2. Можно прописать локально только переменные цикла (i и j)
3. Можно передавать размерность матрицы как параметры (переменные n и m), а саму матрицу считать глобальной.
4. И, наконец, можно все переменные передавать как параметры.

Вариант 1 реализован в вашем отрывке.
В Приложении описания для остальных вариантов реализации.

Приложение:
2. Использование локальных переменных для циклов
...
procedure vvod;
var i, j : integer;
begin
...
procedure vivod;
var i, j : integer;
begin
...

3. В процедуры передаем только размеры матрицы
...
procedure vvod (n, m : integer);
...
procedure vivod (n, m : integer);
...
Причем в этом варианте сразу же за указанной строкой может идти либо текст из вашего отрывка (тогда в качестве переменных цикла будут выступать глобальные переменные i и j), либо описание локальных переменных как в варианте 2 (начиная со слова var).

4. Передаем все данные для процедур в виде параметров
...
procedure vvod (var ma : s; n, m : integer);
...
procedure vivod (var ma : s; n, m : integer);
...

Здесь как и в варианте 3 после заголовка процедуры может следовать описание локальных параметров.

Для процедуры vivod указание матрицы как "var ma : s" не обязательно (т.к. в процедуре она не модифицируется), но желательным, т.к. в этом случае в процедуру будет передана только ссылка на саму матрицу, а не вся матрица целиком. Это экономит и время, и память.
Но возможно и описание процедуры в виде:
procedure vivod (ma : s; i, j : integer);
давно
Старший Модератор
31795
6196
04.06.2009, 20:35
общий
это ответ
Здравствуйте, Саша Казаченко Ивановна.

Так, как записано у Вас, то параметры определять не нужно, компилятор сам определит эти имена переменных как глобальные, т.е. доступные с любого места программы.
Но если Вам нужно все таки передавать эти переменные через параметры, то так, как в приложении(заметьте я поменял имена переменных, чтобы показать, что это совершенно разные переменные).
Вызывать нужно так:
procedure vvod(var ma:s;i,j,n,m:integer);
и
procedure vivod(ma:s;i,j,n,m:integer);
Удачи!

Приложение:
procedure vvod(var m_a:s;a,b,c,d:integer);
begin
for a:=1 to c do
for b:=1 to d do begin
write(a,b,' = ');
readln(m_a[a,b]);
end;
end;

procedure vivod(m_a:s;a,b,c,d:integer);
begin
for a:=1 to c do begin
for b:=1 to d do write(m_a[a,b]:3);
writeln;
end;
end;
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа