Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

зависает программа [D7]


Страницы:   1 2

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;


Я офигеваю...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо