procedure TForm1.DelClick(Sender: TObject);
Var i,j,x,y:integer;
begin
for i:=0 to Sg2.ColCount-1 do
sg2.Cells[i,1]:=Sg1.Cells[i,1];
for i:=0 to high(m) do
if (abs(m)<abs(chislo.Value)) and (abs(m[i+1])>abs(chislo.Value)) then
for j:=i+1 to sg2.ColCount-1 do
m[j]:=m[j+1];
setlength(m,sg2.ColCount-1);
sg2.ColCount:=sg2.ColCount-1;
for i:=0 to sg2.colcount-1 do
sg2.Cells[i,1]:=inttostr(m);
Del.Enabled:=false;
Sort.Enabled:=true;
chislo.ReadOnly:=true;
end;
Обработка динамического массива(StringGrid)
Задание такое: из массива удалить элементы между первым и вторым элементами, модули которых меньше заданной величины.Подскажите пожалуйста, что не так?
2. Хотя бы комментарии надо было написать - как разбираться в этих переменных? Или хотя бы имена им (переменным) нормальные присвоить.
Тогда можно рассчитывать на помощь...
3. Каким образом можно удалить элемент, находящийся между первым и вторым элементтом??? Между первым и вторым элементом ничего нет. ;)
Dashulka, постановка задачи какая-то кривая. То есть, я так понимаю, что в массиве должно быть только два числа, которые по модулю меньше заданного, или? Неясно... А если все числа массива удовлетворяют этому условию?
Я так понял, что надо найти 2 числа, которые меньше заданного по модулю и удалить все элементы, находящиеся между этими 2-мя числами. Но по любому код нечитаемый какой-то. Даже разбираться в нём неохота. Комменты хотя бы если бы были...
Программа в принципе понятна, и понятно что она совершенно не решает поставленную задачу (по крайней мере так, как мы ее поняли :) )
Аффтар вообще тему читает? ;)
Широкую тему зафлудили слегка, поэтому перенесём в отдельное обсуждение )))
ВСЁ! хватить флудить! топикстартёр, давай нормальную постановку задачи!
В общем, целиком задание такое: Из массива удалить элементы между первым и вторым элементами, модули которых меньше заданной величины, а затем расположить элементы в порядке возрастания модулей и вставить заданное число, не нарушая порядка.Форма и то что смогла написать там
Т.к. первый и второй элементы - соседние, то между ними ничего нет и быть не может. Следовательно и удалять нечего.
Какие элементы разместить по возрастанию? Удаленные? Т.к. их нет, этот шаг тоже пропускаем.
Куда вставить заданное число и порядок чего при этом не следует нарушать?
попробую объяснить на примере:
допустим, заданное число: 5
исходный массив: 6 8 3 6 -7 8 9 2 3
после удаления: 6 8 3 2 3
после сортировки и вставки: 2 3 3 5 6 8
Чтобы мы могли это сделать, мы должны понимать задачу.
Единственный для нас источник информации о задаче - это ты.
Пока ты не сможешь толково сформулировать задачу, мы ничего сделать не сможем.
Если тебе самой непонятен смысл задачи, следует уточнить ее у того, кто ее задал.
Другого пути нет.
Что же касается приведенного тобой примера "решения", он не согласуется с условием задачи, как она была тобой сформулирована.
люди хорош прикалываться все до безобразия понятно, было б только время
У меня сама процедура даже написа, только без использования массива.
Код:
procedure TForm1.DelClick(Sender: TObject);
Var i,j,x,y:integer;
begin
for i:=0 to Sg2.ColCount-1 do
sg2.Cells[i,1]:=Sg1.Cells[i,1];
for i:=0 to sg2.ColCount-1 do
if (abs(strtoint(sg2.Cells[i,1]))<abs(Chislo.value)) then
begin
x:=i;
break;
end;
for j:=x+1 to sg2.ColCount-1 do
if (abs(strtoint(sg2.Cells[j,1]))<abs(Chislo.value)) then
begin
y:=j;
break;
end;
if x<>(y-1) then
begin
For i:=x+1 to sg2.ColCount-(y-x) do
sg2.Cells[i,1]:=sg2.Cells[(i+(y-x-1)),1];
sg2.ColCount:=sg2.ColCount-(y-x)+1;
end;
sg3.ColCount:=sg2.ColCount;
sg4.ColCount:=sg2.ColCount;
Del.Enabled:=false;
Sort.Enabled:=true;
Chislo.ReadOnly:=true;
end;
Var i,j,x,y:integer;
begin
for i:=0 to Sg2.ColCount-1 do
sg2.Cells[i,1]:=Sg1.Cells[i,1];
for i:=0 to sg2.ColCount-1 do
if (abs(strtoint(sg2.Cells[i,1]))<abs(Chislo.value)) then
begin
x:=i;
break;
end;
for j:=x+1 to sg2.ColCount-1 do
if (abs(strtoint(sg2.Cells[j,1]))<abs(Chislo.value)) then
begin
y:=j;
break;
end;
if x<>(y-1) then
begin
For i:=x+1 to sg2.ColCount-(y-x) do
sg2.Cells[i,1]:=sg2.Cells[(i+(y-x-1)),1];
sg2.ColCount:=sg2.ColCount-(y-x)+1;
end;
sg3.ColCount:=sg2.ColCount;
sg4.ColCount:=sg2.ColCount;
Del.Enabled:=false;
Sort.Enabled:=true;
Chislo.ReadOnly:=true;
end;
А его использовать обязательно,вот я и засела.переделала, а она не работает.
Какие элементы могут быть между первым и вторым?
[COLOR="Red"]Раз тему перенесли в Студентам,значит - тут соблюдать Правила раздела Студентам.Напоминаю пункты 4 и 10.Не флудить и не делать замечания топикстартеру, для этого есть кнопка "Сообщить модератору".Буду штрафовать за нарушение Правил.Задание - нормальное.Кто не понимает,рекомендую воздержаться от комментов...[/COLOR]
Формулировка конечно не очень, но в универах практически только такая существует.
Обьясняю условие.
Между первым и вторым - имеется ввиду между первым найденным и вторым найденным.
P.S. Будьте внимательнее и терпеливее и давайте уже покончим с безсмыслнными постами.
P.S.2. Это было предупреждение
Тогда вопрос - что именно не работает? Ошибку выдаёт или результат отличается от ожидаемого?
Удаляется одна ячейка, а все остальное заменяется на нули.