Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.01 c
14-8591
ИМХО
2003-10-15 12:08
2003.11.03
Телепортация


14-8651
Soft
2003-10-14 04:01
2003.11.03
Тайна Альберта Эйнштейна


1-8394
Alibaba
2003-10-21 13:35
2003.11.03
SQL Advantage


6-8565
Dennisius
2003-09-07 22:15
2003.11.03
Ложь и все тут :)


1-8509
Term
2003-10-24 17:44
2003.11.03
В чём ошибка???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский