Помощь - Поиск - Пользователи - Календарь
Полная версия: Pascal_user
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Terminator
Есть такая задачка:

Даны натур. число n, действительная квадратная матрица порядка n.
Построить последовательность b1...bn из нулей и единиц, в которой b[i]=1 тогда и только тогда,
когда в i-й строке матрицы есть хотя бы один отриц. элемент. Прогр. должна содержать не менее 3-х функций и процедур.

Вроде написал, но нужно, чтобы имела место передача массива как параметра процедуры
Код

program matrix;
uses crt;
const m=10;
     space='---------';
var    n:byte;
    y:real;{veschestvennye chisla}
    i,j:integer;{Tseloye}
    x:word;{Naturalnoye chislo}
    znak:byte;
    a: array [1..m,1..m] of real;
    b: array [1..m] of word;


{}
procedure header;
begin
clrscr;
write(space); textcolor(4); write(' copyright '); textcolor(7); writeln(space); writeln;
end;
{}
procedure zapros;
begin
Write('Введите размер матрицы :');
Read(n);
end;

procedure vvod;
var i, j: integer;

begin

{nachalo vneshnego tsikla}
    for j:=1 to n do begin

    {nachalo vnutrennego tsikla}
 for i:=1 to n do begin

 Write('Введите элемент ',i,'-й строки ',j,'-го столбца :');
 Readln(a[i,j]);

 end;
    {konets vnutrennego tsikla}
    writeln;


end;
{konets vneshnego tsikla}

end;
{}
procedure screen;
begin
clrscr;
textcolor(white);
end;
{}
function massiv: word;
begin

end;


procedure input;
begin

end;


procedure rand;
var q,r: real;
begin


{nachalo vneshnego tsikla}
    for j:=1 to n do begin

    {nachalo vnutrennego tsikla}
 for i:=1 to n do begin

 q:=Random(100);
 r:=Random(Random(round(n*n)));

 if r=0 then q:=0-q;

 a[i,j]:=q;
 writeln('b[',i,',',j,']=',a[i,j]);
 end;

    {konets vnutrennego tsikla}

    writeln;Readln;


end;
{konets vneshnego tsikla}

end;

{}
function sequence: word;
begin
writeln;
for i:=1 to n do
begin
    for j:=1 to n do
    begin
 if a[i,j]<0 then
 begin
 b[i]:=1;
 break;
 end;
    end;
end;
end;
{}

begin


header;
while (n>100) or (n<=0) do zapros;
massiv;
if n<5 then vvod else rand;
sequence;




for i:=1 to n do
begin
writeln('b[',i,']=',b[i]);
delay(10000);
end;

writeln;
write('Press Enter');
readln;

end.
Altair
Ужас какой...
ужас в том, что зачем было сразу использовать процедуры если все переменные глобальные у вас?

Просто после индефикатора процедцр, следует указать пеерменные передающиеся в процедуру...
FreeMan
а ещё нужен тип для массива, чтоб его можно было как параметр пихать в процедуру
Terminator
Прогр. должна содержать не менее 3-х функций и процедур.
Terminator
Короче, как исправить эту программу, чтобы имела место передача массива как параметра процедуры
volvo
Terminator
А может вместо
Код

for i:=1 to n do
begin
writeln('b[',i,']=',b[i]);
delay(10000);
end;


сделать так
Код

Procedure PrintArr(x: array of word; n: integer);
var i: integer;
begin
 for i:=1 to n do
 begin
   writeln('b[',i,']=',x[i]);
   delay(10000);
 end;
end;
...

{ вызов }
PrintArr(b, n);


И спокойнее, пожалуйста!!! angry.gif
Terminator
Если честно нужно, чтобы "матрица передавалась в процедуру rand", что это значит - не спрашивайте.
Altair
Цитата
чтобы "матрица передавалась в процедуру rand", что это значит - не спрашивайте.

Это значит что матрица должна передаваться в процедуцу по ссылке а не по значению smile.gif
;)
То есть через слово VAR
Terminator
Цитата
по ссылке
- это goto?
FreeMan
Код

type
arrs = array[1..m,1..m] of real;
...
procedure rand(var b:arrs; n:byte);
...

Вроде так.
Altair
Терминатор,
Нет.... по ссылке передавать параметры это значит через слово VAR, например:
procedure ADD(VAR a:integer);
Здесь параметр a передан по ссылке.
а вот так по значению:
procedure ADD(a:integer)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.