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

Вниз

Указатели   Найти похожие ветки 

 
aka ©   (2016-04-07 10:13) [0]

Пришлось править чужой исходник.
Кратко суть проблемы
Next := First;
while Next <> Last do begin
 {143 строки кода разных действий с Next}
 Next := Next.Child[DLeft]
end;

Last - тут естественно под while не попадает (в этом и был скрытый баг)

получается что нужно брать Last и дописывать для него отдельно после while все то что было в теле цикла для Next.


 
Ринсвинд ©   (2016-04-07 11:55) [1]

Next := First;
while true do begin
{143 строки кода разных действий с Next}
if Next = Last then
 break;
Next := Next.Child[DLeft]
end;


 
Ринсвинд ©   (2016-04-07 12:00) [2]

Разумеется, при условии что Next не присваивается новый объект в тех 143 строчках кода.


 
Игорь Шевченко ©   (2016-04-07 13:43) [3]

repeat...until


 
han_malign ©   (2016-04-07 15:43) [4]


> получается что нужно брать Last и дописывать для него отдельно

- почувствуй силу декомпозиции, Люк...
Next := First;
while Next <> Last do begin
  process(Next);
  Next := Next.Child[DLeft]
end;
process(Last);


 
Германн ©   (2016-04-08 01:46) [5]


> han_malign ©   (07.04.16 15:43) [4]
>
>
> > получается что нужно брать Last и дописывать для него
> отдельно
>
> - почувствуй силу декомпозиции, Люк...

Это шутка такая что ли?


 
sniknik ©   (2016-04-08 08:46) [6]

> Это шутка такая что ли?
?
загнать в процедуру 143 строчки кода, и вызвать ее 2 раза? нет не шутка. нормальное решение.

хотя я бы сделал так, при условии что Last.Child[DLeft] возвращает nil, а оно вроде так и делается в указателях/списках из них, "концевики" инициализируются nil-ом.
тогда очевидно, и без лишних условий/процедур.

Next := First;
while Assigned(Next) do begin
{143 строки кода разных действий с Next}
Next := Next.Child[DLeft]
end;


и да, First на пустой структуре тоже nil должен возвращать.


 
han_malign ©   (2016-04-08 16:08) [7]


> Это шутка такая что ли?

- а еще лучше
process(Next.value);
- чтобы гарантировать семантическую изоляцию работы с данными от реализации контейнера...
и тогда коментарий будет выглядеть:
{пофиг сколько там строк кода, т.к манипуляций с Next не происходит}



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

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

Наверх





Память: 0.46 MB
Время: 0.001 c
2-1460013191
aka
2016-04-07 10:13
2018.03.25
Указатели


6-1285331229
Intranull
2010-09-24 16:27
2018.03.25
Объясните принцип работы связи в TeamViewer


15-1471469402
Юрий
2016-08-18 00:30
2018.03.25
С днем рождения ! 18 августа 2016 четверг


15-1470764730
DayGaykin
2016-08-09 20:45
2018.03.25
Align: К вопросам на засыпку.


2-1459726395
Погроммист
2016-04-04 02:33
2018.03.25
Отправка файла post запросом, вместо параметра вопросы





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