TURBO PASCAL |
Новости
|
Хитрый ForА что будет, если
поменять параметр цикла For, и что
случится, если менять конечное
значение Практически все учебники по программированию рекомендуют НЕ менять значение переменной-параметра параметрического цикла в теле этого цикла. Связано это с тем, что реализация данного цикла в различных версиях одного и того же языка может варьироваться. (Не объяснять же это нерешительностью программистов или сомнением учителей в умственных способностях учеников!) Избежим этого и рассмотрим, что же случится, если нарушать этот негласный запрет. Изменим параметр,и посмотрим, что будетНапишем элементарную тестовую программку:
Var
Если вы думаете, что на экране появится 3 6 и все, то вы должно быть хорошо представляете, как должен работать данный цикл, но поленились набрать текст. На самом деле на экране появится последовательность
3; 6; 9; 12; 15; 18; 21; 24; 27; 30; 33; 36; 39; 42; 45; 48; 51; 54; 57; 60;
63; 66; 69; 72; 75; 78; 81; 84; 87; 90; 93; 96; 99; 102; 105; 108; 111; 114;
117; 120; 123; 126; 129; 132; 135; 138; 141; 144; 147; 150; 153; 156; 159;
162; 165; 168; 171; 174; 177; 180; 183; 186; 189; 192; 195; 198; 201; 204;
207; 210; 213; 216; 219; 222; 225; 228; 231; 234; 237; 240; 243; 246; 249;
252; 255; 2; 5;
естественно, выровненная по границам экрана. Появление двойки после значения 255 естественно - произошло переполнение разрядной сетки байтовой переменной I. Интересным является другое: цикл не завершился сразу после того, как параметр превысил конечное значение, но завершился тогда, когда к концу выполнения тела цикла параметр оказался равным конечному значению. Вывод: при изменинии параметра цикла в его теле необходимо следить за тем, чтобы когда -нибудь этот параметр стал равным конечному значению, а не просто превысил его. Изменим КЗ,или продолжим экспериментПротестируем еще одну программку (практически полную копию первой за исключением двух символов):
Var
то есть конечное значение цикла "убегает" от параметра, причем с равной скоростью. Вместо ожидаемого бесконечного цикла на экране получим
1; 2; 3; 4; 5;
Вывод: конечное
значение параметрического цикла
вычисляется только один раз, перед
первым сравнением. Это очень важно помнить
и не ставить в качестве конечного значения
переменные и функции значение которых
меняется в результате выполнения тела
цикла: сравнение все равно будет
производится с начальным
значением переменной, а функция повторно не
вызовется. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |