Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Зависание программы


Автор: nWizz 29.4.2014, 20:07
Задание такое: Дан двумерный массив размером n*m, заполненный случайным образом. Удалить все столбцы, в которых первый элемент больше последнего.

Само решение выглядит так:
Код

c:=m;
while f=false do
begin
f:=true;
for j:=0 to m-1 do
 if A[0,j]>A[n-1,j] then
  begin
   f:=false;
   c:=c-1;
   for i:=0 to n-1 do
    for k:=j to m-1-j do
     A[i,k]:=A[i,k+1];
  end;
end;


Проблема в том, что при определенных значениях программа зависает, т.е. видимо цикл где-то не завершается. Но не пойму, почему? Проверил уже не раз, все равно не пойму и даже не представляю в чем дело.

Вот полный вариант кода
Код

procedure TForm1.Button3Click(Sender: TObject);
var
A:array of array of integer;
i,j,n,m,c,k:integer;
f:boolean;
begin
n:=StrToInt(Edit1.Text);
m:=StrToInt(Edit2.Text);
SetLength(A,n,m);
for i:=1 to n do
 for j:=1 to m do
  A[i-1,j-1]:=random(11);
 
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=m+1;
with StringGrid2 do
 begin
  i:=0;
  for j:=1 to rowcount do
   Cells[i,j]:=Inttostr(j);
  j:=0;
  for i:=1 to colcount do
   cells[i,j]:=inttostr(i);
 end;
 
with StringGrid2 do
 for i:=1 to n do
  for j:=1 to m do
   Cells[j,i]:=IntToStr(A[i-1,j-1]);
 
c:=m;
while f=false do
begin
f:=true;
for j:=0 to m-1 do
 if A[0,j]>A[n-1,j] then
  begin
   f:=false;
   c:=c-1;
   for i:=0 to n-1 do
    for k:=j to m-1-j do
     A[i,k]:=A[i,k+1];
  end;
end;
 
 
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=c+1;
with StringGrid1 do
 begin
  i:=0;
  for j:=1 to rowcount do
   Cells[i,j]:=Inttostr(j);
  j:=0;
  for i:=1 to colcount do
   cells[i,j]:=inttostr(i);
 end;
 
with StringGrid1 do
 for i:=1 to n do
  for j:=1 to m do
    Cells[j,i]:=IntToStr(A[i-1,j-1]);
end;

Автор: Poseidon 29.4.2014, 22:07
По коду видно, что если условие if A[0,j]>A[n-1,j] выполняется при каком-нибудь j, то получаем вечный цикл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)