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

Вниз

Динамические массивы.   Найти похожие ветки 

 
Tazik   (2004-11-28 15:48) [0]

Я в Д7 на информатику пишу решение такой задачи (в console): даю компу число а тот путем деления отрезка на два вложенных находит его. В качестве юазового отрезва я использую динамисеский массив(numbers). Его границы (top - верхняя & bot - нижняя) ввожу во время выполения проги. Потом ввожу цикл что бы массив заполнялся и одновременно смотрю на заполнение:

for I := bot to top do
begin
   numbers[i] := i;
   WriteLN(numbers[i]);  
end;

в конечном итоге, когда задаю какие-то грани, у меня последний элемент массива заполняется огромным числом:

output:
1
2
...
15
16
874353445

приблизительно так. Как этого избежать?
И еще можно ли прописать так:

SetLength(numbers,0);
SetLength(numbers,length(FstArr));
Numbers := FstArr;

FstArr - одно половина массива numbers. До этого момента я определил длину FstArr равной половине Numbers.
Спасибо!


 
begin...end ©   (2004-11-28 16:13) [1]

> Tazik   (28.11.04 15:48)

> в конечном итоге, когда задаю какие-то грани, у меня последний
> элемент массива заполняется огромным числом

Возможно, выход за границы массива. Включите Range Checking в настройках компилятора.

> И еще можно ли прописать так:
>
> SetLength(numbers,0);
> SetLength(numbers,length(FstArr));
> Numbers := FstArr;

Можно, но что Вы хотите этим добиться?


 
raidan ©   (2004-11-28 16:42) [2]

>Tazik   (28.11.04 15:48)  
Привычка выражать свои мысли четко и проверять орфографию с пунктуацей в Word дадут намного больший эффект (и количество ответов), чем вываливание своих проблем кучей "абы как".


 
begin...end ©   (2004-11-28 17:33) [3]

> Tazik   (28.11.04 15:48)

Насколько я понял, перед Вами стоит задача поиска числа в отсортированном по возрастанию массиве чисел методом деления пополам. Если так, то вовсе не обязательно создавать новые массивы делением старого. Достаточно работать с переменными, содержащими текущие левую и правую границу массива.

Вот один из вариантов решения (далеко не самый лучший):

var
 Numbers: array of Integer;
 Number: Integer;
 Left, Right, Mid: Integer;

begin
 { Заполнение массива }
 { ... }
 Left := Low(Numbers);
 Right := High(Numbers);
 while True do
 begin
   Mid := (Left + Right) div 2;
   if Numbers[Mid] < Number then
     Left := Mid
   else if Numbers[Mid] > Number then
     Right := Mid
   else
     Break
 end
end.

После окончания цикла в переменной Mid будет содержаться индекс искомого числа в массиве. Естественно, цикл может закончиться только в том случае, если искомое число действительно есть в массиве. Кроме того, этот вариант пригоден для целых чисел, но непригоден, например, для вещественных, потому что в случае последних простым сравнением уже не обойтись.

P.S. И прислушайтесь к [2].



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх









Память: 0.57 MB
Время: 0.082 c
1-1101261730
Bobby Digital
2004-11-24 05:02
2004.12.12
проверить на тип


4-1098955855
Che
2004-10-28 13:30
2004.12.12
Проблемы с FrameRect


14-1100879366
Ilya___
2004-11-19 18:49
2004.12.12
У меня есть строковое значение 3294567000 Мне нужно его перевест


3-1100521367
VadimK
2004-11-15 15:22
2004.12.12
Создание Cursor в ХП, через компоненты DBExpress


9-1092055159
john black
2004-08-09 16:39
2004.12.12
Пример Jan Horn-a + Космос





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