| 
| 
 | Вопрос # 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 на ура поставил - получилось..) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |