|
Вопрос # 4 393/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
как сделать так чтобы командная строка в консольном режиме не исчезала сразу, после нажатия Run?
такой код ввел, вроде считает, но не показывает:
Приложение: Переключить в обычный режим- program Project1;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
-
-
- var i: integer;
- x: variant;
-
- begin
- i:= 1;
- repeat
- begin
- Inc(i);
- Inc(x, (1/i));
- WriteLn(i);
- end;
- until x > 5;
- writeln('i = ', i);
- end.
 |
Вопрос задал: габибыч (статус: Заблокирован)
Вопрос отправлен: 7 июля 2010, 11:53
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 7 июля 2010, 20:26; участников в обсуждении: 5.
|
AlexMPEI (статус: 1-ый класс), 7 июля 2010, 12:15 [#1]:
надо добавить readln - на ней встанешь
|
|
габибыч (статус: Заблокирован), 7 июля 2010, 12:45 [#2]:
AlexMPEI , спасибо, понял
|
|
min@y™ (статус: Доктор наук), 7 июля 2010, 12:54 [#3]:
Интересная прога! Особенно радует нецелочисленный инкремент непроинициализированной переменной x: variant. Неужели компилятор пропустил такое безобразие и прога работает?
Вот это номер! Действительно, компилятор пропускает конструкцию Inc(x, (1/i)), если x: variant, но не пропускает, если x: integer.
Как это понимать? В хэлпе про процедуру Inc() чётко написано, что оба параметра должны быть целыми или указателями.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
padonak (статус: Посетитель), 7 июля 2010, 13:50 [#4]:
min@y™: пропустил... хотя странно...
габибыч, ты со своим примером революцию сделать хочешь? )))
|
|
Паровоз (статус: 10-ый класс), 7 июля 2010, 13:54 [#5]:
"Как это понимать?"
Это потому, что x - variant. Код не только пропускается через компилятор, но и выполняется:
var
x: variant;
begin
x:=3;
Inc(x, 1.5);
WriteLn('x = ', x);//x=4.5
Readln;
end.
Думаю, что такая "недокументированная возможность" является багом компилятора.
|
|
min@y™ (статус: Доктор наук), 7 июля 2010, 13:59 [#6]:
Я так покумекал немного и сделал кой-какие выводы.
Видимо, поскольку x: variant, а процедура Inc() встроена в компилятор, компилятор решает работать с вариантной переменной в общем виде, т.е. раскладывает вызов Inc(x, (1/i)) на выражение x:= x + 1 / i, а т.к. результат должен получиться вещественным, преобразовывает x к типу Extended (или Double). Иной причины я не вижу, но о такой особенности не знал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Паровоз (статус: 10-ый класс), 7 июля 2010, 14:46 [#7]:
Однако есть документация, согласно которой такого быть не должно. Поэтому если расчитывать на это, то в очередном билде компилятора можно на этом погореть.
|
|
габибыч (статус: Заблокирован), 7 июля 2010, 20:26 [#8]:
Inc() не принимает дробную часть, делаю из енго целую,тем более, а Variant на ура поставил - получилось..)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|