Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
ВнизВопрос о массиве. Найти похожие ветки
← →
Chaynik (2003-10-21 07:34) [0]Здравствуйте, уважемые мастера. Возник вопрос, необходимо в динамическом массиве([1,2,3,0,1,0,0,5]) удалить все нулевые значения.
← →
Нурик (2003-10-21 07:42) [1]Какого типа массив, если это цепь то нужно удалить промежуточные звенья и соединить остальные. Ну короче напиши мне на мыло, как нибудь помогу!
← →
Chaynik (2003-10-21 08:07) [2]Нурик ты наверное меня не понял, массив целочисленный,([1,2,3,0,1,0,0,5]) и надо что бы в итоге получился ([1,2,3,1,5]) вот такой массив. А как не знаю.
← →
MBo (2003-10-21 08:13) [3]Как объявлен массив?
← →
Нурик (2003-10-21 08:40) [4]Помоему ты меня не понял, динамический массив может быть объявлен обычным способом либо в виде цыпочки. Лучше скажи как объявлен твой массив?
← →
KSergey (2003-10-21 08:43) [5]Если бы он знал - неужели бы не сказал?
← →
Chaynik (2003-10-21 08:47) [6]Массив обьявлен SetLength ( massiv, length);
← →
KSergey (2003-10-21 08:50) [7]Это не объявление.
Хотя по этой строчке в принципе можно догадаться, как он объявлен.
PS
А домашние задания надо делать самому, а иначе и диплом (аттестат?) придется делить.
← →
Chaynik (2003-10-21 08:56) [8]А как понять тогда объявление массива?
← →
MBo (2003-10-21 08:58) [9]сдвиг=0
цикл по всем элементам
если элемент нулевой, увеличить сдвиг
иначе переписать элемент на нужное место
← →
Нурик (2003-10-21 09:00) [10]Ну например
type
vector=array[1..10] of integer;
var
a:^vector;
...
У тебя есть такая фигня?
← →
Chaynik (2003-10-21 09:12) [11]var
vector:=array of integer;
...
У меня такая фигня.
А потом SetLength ( vector, length) задаю размер масиву.
← →
Chaynik (2003-10-21 09:17) [12]MBo © А как этот сдвиг то увеличить? Я делаю так
for i:=0 to length do
begin
if massiv[i]= 0 then
begin
{ Ноль как здесь удалить?}
end;
end;
← →
Нурик (2003-10-21 09:26) [13]Может так лучше, объявляешь точно такой же массив (var v1:array of integer) но длину пока не задавай. Проходишь по первому массиву и проверяешь каждый элемент, если не ноль то то увеличиваешь размер v1 на один и туда запихываешь значение, а если ноль то пропускаешь. А потом забудь старый массив!!!
← →
Brahman (2003-10-21 09:30) [14]Как вариант
Создать второй массив
Пройти в цикле по всем элементам, копируя во второй
только не нулевые.
Если нужно, то скопировать в первый и обрезать по длине второго
← →
MBo (2003-10-21 09:35) [15]>Chaynik
Имя здесь сообщи, чтоб тебя, не дай бог, на работу не взяли ;)
j:=0;
for i:=0 to High(a) do
if a[i]=0 then
inc(j)
else
a[i-j]:=a[i];
setlength(a,length(a)-j);
← →
Спрашивающий_ (2003-10-21 09:55) [16]Вариант №2
procedure TForm1.Button1Click(Sender: TObject);
var
M1:array of integer;
M2:array of integer;
I,J:Word;
T:DWord;
begin
T:=GetTickCount;
Memo1.Lines.BeginUpdate;
Memo2.Lines.BeginUpdate;
J:=0;
SetLength(M1,1000);
SetLength(M2,Length(M1));
For I:=0 To Length(M1)Do
begin
M1[I]:=Random(10);
Memo1.Lines.Add(IntToStr(M1[I])); //Тест
If M1[I]<>0 Then
begin
M2[J]:=M1[I];
M1[J]:=M2[J];
Memo2.Lines.Add(IntToStr(M2[J])+"/"+IntToStr(M1[J])); //Тест
Inc(J);
end;
end;
SetLength(M1,J); //Result
SetLength(M2,0);
Memo1.Lines.EndUpdate;
Memo2.Lines.EndUpdate;
Text:= IntToStr(GetTickCount-T);//Тест скорости, "пойдет"
end;
← →
Спрашивающий_ (2003-10-21 10:15) [17]Поправка
For I:=0 To Length(M1)-1 Do
← →
Чайник (2003-10-22 06:49) [18]Всем огромное спасибо
← →
Донской (2003-10-22 19:03) [19]BeginUpdate is called AUTOMATICALLY by any property or method that changes the list of strings.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c