Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не правильно работает цикл for


Страницы:   1 2

stef ©   (2005-12-27 06:00:00) 

Может кто уже встречался с чем-то подобным
Есть код:
var
 size:integer;
 f:file of TRecDriv;
 tmp:TRecDriv;

...  
...
   size:=filesize(f)-1;
   for i:=0 to size do
   begin
     seek(f,i);
     read(f,tmp);
     add_sg(inttostr(tmp.TabNumb),tmp.FIO);
   end;

В котором, при пустом файле f, в переменную size должно быть присвоено (-1) и тогда цикл не должен выполнится ни разу.
При выполнении программы (при пустом файле) в переменную size действительно попадает значение (-1), но вот цикл начинает почему-то выполнятся.


boalse   (2005-12-30 06:33:00) [1]


> Буду переставлять Delphi


По-любому дело было не в бобИне...


evvcom   (2005-12-29 15:48:00) [2]


> сегодня утром запустил тот самый код и все само собой заработало.

Ты больше не кури на компутер, просто он был под балдой, вот и вытворял невесть чего.


stef   (2005-12-29 12:57:00) [3]

Здравствуйте, уважаемые, не поверите, сегодня утром запустил тот самый код и все само собой заработало. Чест слово ничего там не трогал, специально весь ошибочный код целиком скопировал. Буду переставлять Delphi. Спасибо за помощь. С наступающим


evvcom   (2005-12-29 09:56:00) [4]


> Если цикл нужно выполнять обязательно в любых услових, четкое
> количество раз тогда for

Правильно. Только в нашем случае его надо выполнить 0 раз. Экономим на одном if.


beglec   (2005-12-29 09:52:00) [5]

Лично я рассуждаю так.

Если цикл нужно выполнять обязательно в любых услових, четкое количество раз тогда for

если цикл выполнять не обязательно или есть хоть бы маленьшая вероятность того, что условия могут не подойти к циклу, тогда делаю While.

Repeat очень и очень редко использую.

Видимо не так мыслю как остальные ;)


evvcom   (2005-12-29 09:35:00) [6]


> просто никогда такую извращенную формулировку не использовал

чем же она извращена? Я имею ввиду, если вместо -1 все же переменная с таким значением. Очень удобно пользоваться.


beglec   (2005-12-29 07:26:00) [7]

-> vidiv
а ты проверь цикл а я посмотрю на сколько он у тебя бесконечный
i это позиция в файле :)
Size - это размер файла.
то что у него внутри цикла не совсем то, это уже другой вопрос.

а на счет for it:=0 to -1 doпризнаю был не прав :) Действительно цикл не выполняется
просто никогда такую извращенную формулировку не использовал :)
применял в таких случаях While :)


vidiv   (2005-12-29 07:16:00) [8]


> beglec ©   (27.12.05 11:17) [7]

>   While i<size do
>   begin
>     seek(f,i);
>     read(f,tmp);
>     add_sg(inttostr(tmp.TabNumb),tmp.FIO);
>   end;

если файл будет не пустой, то цикл будет бесконечным... теория блин


The_scorpion   (2005-12-28 20:04:00) [9]


> но вопрос остается вопросом без ответа.

Цикл for прост как полено, никак вопросов быть не может...
Выполни просьбу господина Johnmen ©   (28.12.05 14:57) [17] и тебе все объяснят.


Johnmen   (2005-12-28 14:57:00) [10]

>stef ©   (28.12.05 14:43) [16]

Приведи ещё раз код с циклом, объявлением переменных и заголовком процедуры/функции.


stef   (2005-12-28 14:43:00) [11]

Спасибо народ за веимание к моей персоне. Цикл я уже заменил, но вопрос остается вопросом без ответа.
Что касается эффекта переполнения переменной, если она типа byte, то это-то я предусмотрел сразу: integer она. Это точно.
Книжки действительно надо читать внимательней всем.
Может глюк какой. Просто мой код до сих пор выполняет цикл от нуля до минус одного.
Я тут подумал, а не мог он (цикл) пойти выполняться в обратную сторону, то есть вроде как вместо toсработалом downto. Вы меня понимаете. Я к сожалению не могу посмотреть, что произойдет после первого же шага (как будет изменяться переменная i) прога сразу вылетает.
Никто с таким приколом не сталкивался?
ЗЫ всех с настыпающим


SergP.   (2005-12-27 21:42:00) [12]


> >FOR выполняется в любом случае хотя бы раз!


Не нада....


The_scorpion   (2005-12-27 16:14:00) [13]


> С каких пор цикл  For? именно FOR стал ни разу не выполняется!
> ?

Со времен арифмометров...:)))


Johnmen   (2005-12-27 16:00:00) [14]

А в чём суть? B этом?
>beglec ©   (27.12.05 11:17) [7]
>FOR выполняется в любом случае хотя бы раз!

:)))


boalse   (2005-12-27 15:55:00) [15]


> MBo ©   (27.12.05 12:00) [11]


Блин, ну конечно же два. Но сути это не меняет.


MBo   (2005-12-27 12:00:00) [16]

>beglec ©   (27.12.05 11:17) [7]

Неправильные ты какие-то книжки читал...

boalse ©   (27.12.05 11:22) [10]
>for I:=0 Downto -1 do
>при тех же условиях один раз выполнится.

Два раза


boalse   (2005-12-27 11:22:00) [17]


> учи теорию !!!


Ага, и тебе тогоже.
for I:=0 to -1 do
не выполнится, если I: Integer. Книжкам доверяй, но проверяй!

А вот
for I:=0 Downto -1 do
при тех же условиях один раз выполнится.


beglec   (2005-12-27 11:19:00) [18]

Да, конечно предварительно i:=0 :)


TUser   (2005-12-27 11:19:00) [19]

А зачем тут тубу файл с произволльным доступом. Делай while not eof(f) do ...


beglec   (2005-12-27 11:17:00) [20]

Едрен батон!
учи теорию !!!
С каких пор цикл   For? именно FOR стал ни разу не выполняется!?

Во всех учебниках написано
FOR выполняется в любом случае хотя бы раз!

For I:=0 to 0 do - выполняется 1 раз в любом случае

и типы тут не причем. Cardinal и Byte это другий совершенно случай

предлагаю заменить твой цикл на следующее

  While i<size do
  begin
    seek(f,i);
    read(f,tmp);
    add_sg(inttostr(tmp.TabNumb),tmp.FIO);
  end;

вот и все.

P.S. Ну вы блин даете.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо