Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
15-1306812830
boriskb
2011-05-31 07:33
2011.09.25
Китай выиграл ЧМ по программированию


1-1267095254
EgorovAlex
2010-02-25 13:54
2011.09.25
Редирект сообщения MouseWheel


15-1306787399
Юрий
2011-05-31 00:29
2011.09.25
С днем рождения ! 31 мая 2011 вторник


2-1307508494
mefodiy
2011-06-08 08:48
2011.09.25
Запрос с LEFT JOIN в SQL Server


15-1306993071
kuzja52
2011-06-02 09:37
2011.09.25
узнать пароль пока открыт браузер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский