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

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

Форум «Всё о Паскале» _ Задачи _ Работа с двумерными массивами.

Автор: Jangle 18.03.2007 23:56

Дан двумерный массив. Найти номера первых положительных элементов каждого столбца.


Uses Crt;
type
mas=array [1..100,1..100] of integer;
mass=array [1..100] of integer;
var
q,w:integer;k:byte;l:mas;S:mass;
procedure vvod(n,m:integer;var A:mas);
var
i,j:integer;
begin
ClrScr;
Randomize;
Textcolor(white);
for i:=1 to n do
begin
for j:=1 to m do
begin
A[i,j]:=Random(100);
A[i,j]:=A[i,j]-random(290);
end;
end;
Textcolor(green);
Writeln('MACCUB:');
For i:=1 to n do
For j:=1 to m do
begin
Write(a[i,j]:5,' ');
If j=m then WriteLn;
end;
end;
procedure obr (n,m:integer;a:mas; var b:mass);
var
i,j,x:integer;
begin
j:=1;
while j<=m do
begin
for i:=n downto 1 do
if A[i,j]>0 then x:=A[i,j];
b[j]:=X;
j:=j+1;x:=0;
end;
end;
procedure vivod (m:integer;b:mass);
var
j:integer;
begin
ClrScr;
for j:=1 to m do
if b[j]=0 then WriteLn('HET POLOZITELNYX B ',j,'Ctolbche')
else Writeln(j,'Ctolbech=',b[j]);
end;

begin
ClrScr;
Writeln('Pazmernost:');
Read(q,w);
Repeat
Writeln('1-BBOD');
Writeln('2-OBRAB');
Writeln('3-vivod');
Writeln('4-exit');
Writeln('vibor:');
Read(k);
case k of
1:vvod(q,w,l);
2:obr(q,w,l,S);
3:vivod(w,S);
4:halt;
end;
until k>4;
Readkey;
end.
ReadKey;
end.


Подскажете в чем ошибка... При выполнении задачи вылетает и пишет,что ошибка 202 (Переполнение стека). Как исправить? В чем ошибка? Заранее спасибо...

Автор: compiler 19.03.2007 0:00

Цитата(Jangle @ 18.03.2007 18:56) *


Неподскажете в чем ошибка... При выполнении задачи вылетает и пишет,что ошибка 202 (Переполнение стека). Как исправить? В чем ошибка? Заранее спасибо...

у меня все компилируется(FP)

Автор: Артемий2 19.03.2007 0:02

у меня все компилируется(FP)

Compiler, а какой тут раздел,а? dry.gif Из простоты тема была создана?!

Автор: Алена 19.03.2007 0:03

procedure obr (n,m:integer; CONST a:mas; var b:mass);

Автор: Jangle 19.03.2007 0:09

Алена большое спасибо...работает... А все таки что эта Const обозначает?

Автор: Артемий2 19.03.2007 0:10

Константа, которую уже нельзя изменить в этой процедуре..

Автор: Алена 19.03.2007 0:11

У тебя матрица большая. При передаче без Const, происходит передача по значению, т.е. вся матрица копируется в стек, его размера не хватает, и получаешь Stack Overflow... Поэтому передавай по ссылке.

Автор: Jangle 19.03.2007 0:12

Отлично.... всем большое спасибо.. понял

Автор: Алена 19.03.2007 0:12

Цитата
Константа, которую уже нельзя изменить в этой процедуре..
Уверен?

Автор: compiler 19.03.2007 0:12

Цитата(Артемий2 @ 18.03.2007 19:02) *

у меня все компилируется(FP)

Compiler, а какой тут раздел,а? dry.gif Из простоты тема была создана?!

я просто не понял проблемы...

Автор: Артемий2 19.03.2007 0:15

Цитата
Уверен?

Ну а ты попробуй сделать это в процедуре.. smile.gif


Автор: Алена 19.03.2007 0:33

Цитата(Артемий2 @ 18.03.2007 19:15)
Ну а ты попробуй сделать это в процедуре.. smile.gif
Попробовала. Получилось.
type
mass = array[1 .. 10] of integer;

procedure x(const a: mass);
var
p: ^mass;
begin
p := @a;
p^[1] := 15;
end;

var
i: integer;
arr: mass;
begin
for i := 1 to 10 do arr[i] := i;
for i := 1 to 10 do
write(arr[i]:4);
writeln;

x(arr);
for i := 1 to 10 do
write(arr[i]:4);
writeln;
end.
Еще возражения будут?

Автор: Артемий2 19.03.2007 2:09

Посты получше читай!Нужна была просто определение const и покажи мне ту книгу где показывается твой "образцовый" способ,который кстати барахлит на xp и не работает на vista! Зачем оно тебе надо изобретать велосипед и изменять ее?

Автор: Алена 19.03.2007 2:29

Артемий2
А грубить это что, принято, когда нет других аргументов?

Цитата
покажи мне ту книгу где показывается твой "образцовый" способ
А зачем книга? Я тебе СПОСОБ показала... Мало ли чего в книгах не пишется...

Цитата
который кстати барахлит на xp и не работает на vista!
Это чья проблема? Моя? Вообще-то у меня на XP это не барахлит никогда, а если это не работает на Vista, то и половина тех программ, что ты выложил на форуме работать тоже не будет...

Цитата
Зачем оно тебе надо изобретать велосипед и изменять ее?
Чтобы ты не говорил того, чего нет... Ты сказал, что ее нельзя изменить, да еще и ухмылялся, когда я сказала, что можно...

Автор: compiler 20.03.2007 0:58

Цитата(Алена @ 18.03.2007 21:29) *
А грубить это что, принято, когда нет других аргументов?
А что ему остается делать, после выпада отступать тяжело... а нагрубить всегда можно... можна правда игнорировать ответы другой стороны...

и всеже ребята, давайте жить дружно!

Автор: Артемий2 20.03.2007 1:05

Да ладно,Стас, я сам виноват.. mega_chok.gif