![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
зависает программа [D7]
Studentik © (2011-05-27 12:54:00)Извините народ если отвлекаю но не кто не сможет мне помочь... дело в том что у меня при нажатии кнопки на которой описано событие программа зависает вот кот
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
mas:PIntArray;
masIt:PIntArray;
chislo:integer;
kol:integer;
nItems:integer;
begin
j:=1;
Label1.Caption:='';
kol :=StrToInt(Edit3.Text);
chislo:= StrToInt(edit2.text);
nItems:=(chislo*kol)+NumItems;
GetMem(masIt,nItems*SizeOf(integer));
GetMem(mas,chislo*sizeof(integer));
for i:=chislo downto 1 do
mas^[i]:=i;
for i:=1 to NumItems-1 do
begin
while Items^[i]<=Items[i+1] do
begin
Items^[i]:=Items[i+1];
j:=j+1;
end;
end;
if j < NumItems then
begin
for i:=0 to chislo-1 do
masIt[i]:=mas[i];
for k:=1 to kol-1 do
begin
for i:=0 to chislo-1 do
masIt[i+(chislo*k)]:=mas[i];
end;
for i:=0 to NumItems-1 do
masIt[i+(kol*chislo)]:=Items[i];
for i:=0 to nItems-1 do
label1.caption:=label1.caption+IntToStr(masIt[i])+' ';
end
else
label1.caption:='массив упорядочен';
end;
программа проверки упорядоченности числовых элементов динамического массива. Если список неупорядоченный, то заполняю его числами, последовательно уменьшающимися на 1(например 3,2,1), начиная с заданного числа X, и добавить полученный список в начало исходного, повторяя подобную вставку заранее известное число раз.
данные по Var
i,j,k:integer;
mas:PIntArray; массивэлементов типа(3,2,1)
masIt:PIntArray массив итоговый на вывод
chislo:integer; число с которого идет отсчет
kol:integer; количество вставок
nItems:integer; количество элементов в итоговом списке
Items - это стандартный динамический массив при его генерировании на первой кнопке ошибок не возникает
если я где то намудрил помогите исправить
Ega23 (2011-05-27 13:51:00) [21]
> как правильно выйти из цикла
Break
Studentik (2011-05-27 13:40:00) [22]
for i:=1 to NumItems-1 do
begin
if Items^[i]<=Items[i+1] then
begin
Items^[i]:=Items[i+1];
j:=j+1;
end;
end;
я исправил на это ... но почему то программа не выдает то что мне надо (((выдает полную чепуху
Studentik (2011-05-27 13:31:00) [23]Я свою ошибку понял .... а как ее устранить не подскажете ... как правильно выйти из цикла
oldman (2011-05-27 13:26:00) [24]
> Studentik © (27.05.11 13:24) [14]
пока а=b присваивать а:=b
ключевое слово пока
Studentik (2011-05-27 13:26:00) [25]если не трудно покажите как должно быть в этой части цикла While
Studentik (2011-05-27 13:24:00) [26]так мне кажется автоматическии происходит выход из цикла и обработка дальнейших событий ... разве нет
Anatoly Podgoretsky (2011-05-27 13:23:00) [27]
> oldman © (27.05.11 13:06) [2]
Отключена проверка диапазонов и переполнения
Loginov Dmitry (2011-05-27 13:22:00) [28]
> while Items^[i]<=Items[i+1] do
> begin
> Items^[i]:=Items[i+1];
> ............................
> end;
После присваивания i-й и i+1-й элементы окажутся одинаковыми. iне изменяется. Нужно объяснять, как в таком случае поведет себя твой while?
Studentik (2011-05-27 13:18:00) [29]массив Items задается и известен
var
Form1: TForm1;
NumItems: integer;
implementation
type
TIntArray = array[1..1000000] of integer;
PIntArray = ^TIntArray;
var
Items: PIntArray;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Txt: String;
begin
label1.Caption:='';
randomize;
Txt:='';
NumItems:=StrToInt(Edit1.Text);
GetMem(Items,NumItems*SizeOf(Integer));
for i:=0 to NumItems-1 do
begin
Items^[i]:=random(50)+1;
Txt:=Txt+IntToStr(Items^[i])+' ';
end;
Label1.Caption:=Txt;
end;
oldman (2011-05-27 13:16:00) [30]Если таки Items^[i]<=Items[i+1] как ты покинешь цикл?
Studentik (2011-05-27 13:13:00) [31]честно гоовря я не совсем понял ... если не трудно можешь подробнее
Studentik (2011-05-27 13:10:00) [32]под While чтоли
oldman (2011-05-27 13:10:00) [33]
> Studentik © (27.05.11 13:08) [6]
> в каком месте не подскажешь
[1]
Studentik (2011-05-27 13:08:00) [34]в каком месте не подскажешь
Studentik (2011-05-27 13:07:00) [35]задание этого динамического массива описано на первой кнопке ... если недо могу и ее кинуть
oldman (2011-05-27 13:06:00) [36]
> Studentik © (27.05.11 13:06) [3]
Чудо гороховое, у тебя цикл без выхода!
Studentik (2011-05-27 13:06:00) [37]ну вроде на прверку упорядоченности массива и такое сойдет .... смысл в том что компилятор ошибок не дает и прога запускается
oldman (2011-05-27 13:06:00) [38]Хотя...
Почему не происходит переполнение J???
oldman (2011-05-27 13:03:00) [39]
> while Items^[i]<=Items[i+1] do
> begin
> Items^[i]:=Items[i+1];
> j:=j+1;
> end;
Я офигеваю...