Форум: "Начинающим";
Текущий архив: 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