Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.09.25;
Скачать: CL | DM;

Вниз

зависает программа   Найти похожие ветки 

 
Studentik ©   (2011-05-27 12:54) [0]

Извините народ если  отвлекаю  но не кто не сможет мне  помочь... дело в том  что  у меня при нажатии кнопки на которой  описано событие  программа зависает вот кот  
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 - это стандартный динамический массив   при его генерировании  на первой кнопке ошибок не возникает

если я где  то намудрил  помогите исправить


 
oldman ©   (2011-05-27 13:03) [1]


> while Items^[i]<=Items[i+1] do
>      begin
>        Items^[i]:=Items[i+1];
>        j:=j+1;
>      end;


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


 
oldman ©   (2011-05-27 13:06) [2]

Хотя...
Почему не происходит переполнение J???


 
Studentik ©   (2011-05-27 13:06) [3]

ну вроде на прверку  упорядоченности массива  и такое сойдет .... смысл в том что компилятор ошибок не дает  и прога запускается


 
oldman ©   (2011-05-27 13:06) [4]


> Studentik ©   (27.05.11 13:06) [3]


Чудо гороховое, у тебя цикл без выхода!


 
Studentik ©   (2011-05-27 13:07) [5]

задание этого динамического  массива  описано на первой кнопке ... если недо могу и ее кинуть


 
Studentik ©   (2011-05-27 13:08) [6]

в каком месте  не подскажешь


 
oldman ©   (2011-05-27 13:10) [7]


> Studentik ©   (27.05.11 13:08) [6]
> в каком месте  не подскажешь


[1]


 
Studentik ©   (2011-05-27 13:10) [8]

под While чтоли


 
Studentik ©   (2011-05-27 13:13) [9]

честно гоовря я не совсем понял ... если не трудно  можешь  подробнее


 
oldman ©   (2011-05-27 13:16) [10]

Если таки Items^[i]<=Items[i+1] как ты покинешь цикл?


 
Studentik ©   (2011-05-27 13:18) [11]

массив  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;


 
Loginov Dmitry ©   (2011-05-27 13:22) [12]


>    while Items^[i]<=Items[i+1] do
>      begin
>        Items^[i]:=Items[i+1];
>        ............................
>      end;


После присваивания i-й и i+1-й элементы окажутся одинаковыми. i не изменяется. Нужно объяснять, как в таком случае поведет себя твой while?


 
Anatoly Podgoretsky ©   (2011-05-27 13:23) [13]


> oldman ©   (27.05.11 13:06) [2]

Отключена проверка диапазонов и переполнения


 
Studentik ©   (2011-05-27 13:24) [14]

так мне кажется автоматическии  происходит выход из цикла  и обработка дальнейших событий ... разве нет


 
Studentik ©   (2011-05-27 13:26) [15]

если не трудно   покажите как должно быть в этой части  цикла While


 
oldman ©   (2011-05-27 13:26) [16]


> Studentik ©   (27.05.11 13:24) [14]


пока а=b присваивать а:=b

ключевое слово пока


 
Studentik ©   (2011-05-27 13:31) [17]

Я свою ошибку понял .... а как ее устранить  не подскажете ... как правильно выйти из цикла


 
Studentik ©   (2011-05-27 13:40) [18]

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;


я исправил  на это ... но почему то программа  не выдает то что мне надо (((выдает  полную чепуху


 
Ega23 ©   (2011-05-27 13:51) [19]


> как правильно выйти из цикла

Break


 
Studentik ©   (2011-05-27 13:57) [20]

данную  задачу я решил  уже ))) если не трудно помогите я не молу понять почему программа не выдает мне того что мне нужна а выдает полную чепуху


 
Ega23 ©   (2011-05-27 13:59) [21]


> я не молу понять почему программа не выдает мне того что
> мне нужна а выдает полную чепуху


В ней ошибка.


 
Studentik ©   (2011-05-27 14:06) [22]

а можешь показать где именно


 
Anatoly Podgoretsky ©   (2011-05-27 14:09) [23]

> Studentik  (27.05.2011 13:57:20)  [20]

Переписать все нафиг


 
Studentik ©   (2011-05-27 14:11) [24]

вот скажу честно я бьюсь над этой задаче 2 недели(((  и не могу от нее добится того что надо ..код я уже раз 10  переписывал


 
Ega23 ©   (2011-05-27 14:37) [25]


> вот скажу честно я бьюсь над этой задаче 2 недели(((  и
> не могу от нее добится того что надо ..код я уже раз 10
>  переписывал


А не надо код переписывать. Возьми бумажку, ручку - и накидай алгоритм. Потом более детально - каждый пункт. И т.д. Проверь, будет работать, или нет.
И только потом садись за комп.
Иначе будешь всё время говнокод, как в [0] получать.


 
Studentik ©   (2011-05-27 14:58) [26]

так я так и сделал ... просто  я не могу  понять  как правильно  перегнать елементы  из 2 массивов в один .... я пробовал схалтурить с выводом  типа просто на метке  вывести  подряд два массива ... но препод сказал что должно  быть  все единым массивом


 
Studentik ©   (2011-05-27 15:05) [27]

а тут  действоительно все так  плохо ... может просто  где нить исправить надо  и все заработает  нормально


 
Ega23 ©   (2011-05-27 15:11) [28]


> просто  я не могу  понять  как правильно  перегнать елементы
>  из 2 массивов в один


Тогда закупайся пластырем для ног.


 
Studentik ©   (2011-05-27 15:16) [29]

можете  дать подсказку  или хоть что нибудь  что поможет направить меня на правильный путь ....  буду очень признателен ....


 
Studentik ©   (2011-05-27 15:16) [30]

можете  дать подсказку  или хоть что нибудь  что поможет направить меня на правильный путь ....  буду очень признателен ....


 
Ega23 ©   (2011-05-27 15:22) [31]


> можете  дать подсказку  или хоть что нибудь  что поможет
> направить меня на правильный путь


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


 
Studentik ©   (2011-05-27 15:27) [32]

но ведь ошибка  только в этой части программы  вроде
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])+" ";

значит нужно  думать только  на  ней


 
Ega23 ©   (2011-05-27 15:30) [33]


> но ведь ошибка  только в этой части программы  вроде

Ты действительно искренне считаешь, что кто-то будет пристально изучать данный код?


> значит нужно  думать только  на  ней

Тогда зачем спрашиваешь советы? Думай над это частью.


 
Плохиш ©   (2011-05-27 15:31) [34]

Усё, цикл стал бесконечным...


 
Studentik ©   (2011-05-27 15:38) [35]

блин  я зыбыл когда копировал поменять while на if
if  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])+" ";


 
Ega23 ©   (2011-05-27 15:41) [36]

В программе ошибка


 
oldman ©   (2011-05-28 10:41) [37]


> просто  я не могу  понять  как правильно  перегнать елементы
>  из 2 массивов в один


for...
 a[]:=b[]
for ...
 a[]:=c[]


 
Sergey   (2011-06-07 12:47) [38]

Обьясни, что ты хочеш сделать этим?

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;


 
Sergey   (2011-06-07 12:50) [39]

Результат этого кода.
1. Если Итэмс был (1,2,3,4....Х) он стал (1,3,4,5....а_тут_фиг_знает_что)
2. j=1+NumItems-1



Страницы: 1 вся ветка

Текущий архив: 2011.09.25;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.012 c
2-1307120302
IPranker
2011-06-03 20:58
2011.09.25
Как получить кол-во элементов в ординал типе?


15-1306408784
OW
2011-05-26 15:19
2011.09.25
Про ценообразование фруктов и овощей.


2-1307420556
Sergey
2011-06-07 08:22
2011.09.25
Версия EhLid


1-1267021784
nokla user
2010-02-24 17:29
2011.09.25
Окно копирования windows


6-1242735446
Slavka
2009-05-19 16:17
2011.09.25
Вопрос по копированию папок с (и на) ftp целиком.