Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

Использование переменной-счетчика цикла после выхода из оного   Найти похожие ветки 

 
Kostafey ©   (2007-05-06 17:34) [0]

Все языки уж в голове перепутались.

Вот так:

for i:=0 to N do
 if SomeArray[i]=SomeConst then break;

X:=i;

писать можно ?
Или значение i после выхода из цикла будет неопределенное?
Попробовал- все работает. Или это случайно заработало?


 
ferr ©   (2007-05-06 17:35) [1]

Использовать нельзя т.к. компилятор не даёт никаких гарантий по поводу значения на выходе.


 
Sergey Masloff   (2007-05-06 17:39) [2]

использовать нельзя и это явно описано в документации. Несмотря на то что работает.

Учись писать правильно. За такой код (варнинг компилятора там по-любому) в некоторых конторах 20$ с программера снимают за каждый случай.


 
homm ©   (2007-05-06 17:39) [3]

> Или это случайно заработало?

Нет, не случайно, текушие реализации компилятора позволяют так делать фактически, но дикларировани, что переменная неопределена, щначит лучше не пользоваться. В буду щих версих все может измениться. А может и сейчас это не для всех случаев верно.


 
ferr ©   (2007-05-06 17:40) [4]

> Нет, не случайно, текушие реализации компилятора позволяют
> так делать фактически, но дикларировани, что переменная
> неопределена, щначит лучше не пользоваться. В буду щих версих
> все может измениться. А может и сейчас это не для всех случаев
> верно.

ересь.


 
Kostafey ©   (2007-05-06 17:51) [5]

> в некоторых конторах 20$ с программера снимают за каждый
> случай

Мне такое еще не скоро светит :)
В мой код уже лет...ээ... непомню сколько никто не
заглядывал (корме форума).


> Учись писать правильно. За такой код (варнинг компилятора
> там по-любому)

А вот и нет. Именно в приведенном в [0] варианте варнинга нет.
Но если вписать

for i:=0 to N do
if SomeArray[i]=SomeConst then break;
// вот сюда
X:=i;

пару операторов, то варнинг выскочит.

Значит пишем-сс так:

for i:=0 to N do
 if SomeArray[i]=SomeConst then
 begin
   Currenti:=i;
   break;
 end;

X:=Currenti;


 
{RASkov} ©   (2007-05-06 17:54) [6]

> [5] Kostafey ©   (06.05.07 17:51)
> Значит пишем-сс так:
>
> for i:=0 to N do
> if SomeArray[i]=SomeConst then
> begin
>   Currenti:=i;
>   break;
> end;
>
> X:=Currenti;

А почему бы не так?
for i:=0 to N do
if SomeArray[i]=SomeConst then
begin
  X:=i;
  break;
end;


 
homm ©   (2007-05-06 17:58) [7]

> ересь.

Что ересь? Сам то пробовал? Все работает в простейших случаях. Насчет ВСЕХ случаев я и написал, что неизвестно.


 
Kostafey ©   (2007-05-06 18:04) [8]

> А почему бы не так?

:)
Я имел в виду, что потом сохраненное значение i как-то используем


 
{RASkov} ©   (2007-05-06 18:11) [9]

> [8] Kostafey ©   (06.05.07 18:04)
>Я имел в виду, что потом сохраненное значение i как-то используем

Ну пожалуйста.... в X-е, зачем еще одна переменная Currenti
;)
А-а-а.... понял :) Пример нужно было тогда ченить типа так:
for i:=0 to N do
if SomeArray[i]=SomeConst then
begin
  Currenti:=i;
  break;
end;

ComboBox.ItemIndex:=Currenti+5;
ListBox.ItemIndex:=Currenti-5;


А то выглядит, что задействуются две временные(ненужные) переменные...
:) Вот докопался, да? Сорри. ;)


 
Kostafey ©   (2007-05-06 18:16) [10]

> А-а-а.... понял :) Пример нужно было тогда ченить типа так:

именно так!
:)



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

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
15-1178185081
db2admin
2007-05-03 13:38
2007.06.03
Вопрос совместимости


3-1173938073
In/Out
2007-03-15 08:54
2007.06.03
Запрос SQL


15-1178260785
tesseract
2007-05-04 10:39
2007.06.03
программирование под Linux


2-1179092164
!aLeXa!
2007-05-14 01:36
2007.06.03
Метод главных компонент


2-1179101593
Gringoire
2007-05-14 04:13
2007.06.03
Запрос SQL