Здравствуйте! На моем компьютере с прцессором Pentium II при запуске под DOS программы Тpascal выдается ошибка 200: деление наа нуль. Не работает также одна из DOS-овских программ. На другом компьютере, где Pentium M все работает. В чем причина? Я подозреваю, что первый компьютер имеет только FAT2. Если это так, то как устранить эту трудность. Спасибо! Анатолий
Доброе время суток, Анатолий! Вы слишком поздно родились. :)) Несколько лет назад весь интернет был завален подобными вопросами и рецептами решений. Честно говоря удивительно, что Вы до сих пор об этом спрашиваете. :) Решений здесь несколько и самый лучший - вообще отказаться от ТРВР7 и перейти на более современный (либо Дельфи либо FreePascal). Проблема была в самом Борландовском компиляторе. Он неправильно работает с с быстрыми процессорами (> ~ 300 МГц). Наберите в любом поисковике "Runtime 200" и он Вам выдаст кучу сылок на патчи как для уже откомпилированых программ, так и для тех, которые Вы собираетесь компилировать. Еще раз советую - не используйте ТРВР7, скачайте или купите нормальный. Ответ отправлен: 01.11.2004, 05:16 Отправитель: sir henry Отвечает Snowm@n
Приветствую Вас, Анатолий! Проблема в модуле CRT. Либо не используй его функций, либо замени его из дистрибутива TP6. Ответ отправлен: 30.10.2004, 21:26 Отправитель: Snowm@n
Вопрос № 537
РУДДЩ скажите, пожалуйста: чем отличаются параметры-значения от параметров-переменных?
Добрый день, 123! Вот небольшой пример: procedure test(a: Integer; var b: Integer); В данном случае a - параметр-значение, а b - параметр-переменная. Допустим, в теле программы мы вызываем эту процедуру: test(x, y); Где x, y - какие-либо переменные. При выполнении процедуры, в переменную a копируется значение x, а переменная b лишь указывает на ту же переменную y в памяти (ссылается на неё). Таким образом, если в процедуре ты меняешь значение a, то при возврате из test значение переменной x не изменится. Но если ты меняешь b в процедуре, то изменится и значение y. Ответ отправлен: 06.11.2004, 21:16 Отправитель: zer0access Отвечает Futility
Добрый день, 123! Параметры-переменные это которые предваряются служебным словом VAR? Если ты их значения изменишь в функции, то в вышестоящем блоке значения тоже поменяются. Те, которые передаются в функцию без VAR могут менять значения, но только в пределах функции. На вышестоящее это не влияет. Ответ отправлен: 05.11.2004, 10:28 Отправитель: sir henry Отвечает Василевский Александр
Здравствуйте, 123! Вопроса не понял. Пусть имеется функция FUNC, делающая какие-то вычисления. Она должна принимать один параметр и возвращает какое-то значение. Её можно объявить следующими способами: 1. FUNCTION Func( Value: INTEGER ): INTEGER; 2. FUNCTION Func( VAR Value: INTEGER ): INTEGER; Если Вы хотели узнать, чем как будет отличаться поведение переменной Value в указанных функциях, то читайте далее. Если же я не угадал, то уточните вопрос (можете прислать вопрос мне на e-mail). Пусть тело функции определено следующим образом: FUNCTION Func ... BEGIN Value := Value * 2; Func := Value; END; Случай первый. Запустите программу 1 в приложении: Before Func X=2 Func(2) = 4 After Func X=2 Там переменной X присваивается значение 2. Затем происходит вызов функции с параметром Value = X = 2. Функция изменяет
Value, умножая его на 2 (Value = 4). Затем функция возвращает полученное значение
(4). При этом, значение переменной X не изменяется. Случай второй. Запустите программу 2: Before Func X=2 Func(2) = 4 After Func X=4 Она полностью аналогична программе 1 за исключением объявления функции: FUNCTION Func( VAR Value: INTEGER ); Сперва в программе переменной X присваивается значение 2. Затем вызывается функция с параметром Value = X = 2. Функция умножает значение Value на 2. НО, изменяется не только значение Value, но и значение перемнной X: Value = X = 4. Результат функция возвращает. Таким образом, если перед переменной в объявлении не указано ключевое слово VAR, программа никогда не узнает, что делала функция с своим аргументом (случай 1). Аргумент функции является локальной переменной функции. Если же перед именем переменной стоит ключевое слово VAR, то все действия, которые функция проделала функция со своим аргументом, будут видны в
программе (случай 2). Надеюсь понятно. Тут надо запомнить следующее. Если какая-либ
о переменная в объявлении функции объявлена с модификатором VAR, то функция может вернуть значение через эту переменную. Этот способ используется, если нужно вернуть несколько значений за один вызов функции. Кроме того, если аргумент объявлен с модификатором VAR, то компилятор не позволит передать в качестве этого параметра число или выражение (в случае 2, вызовы: X := Func( 2 ); X := Func( X * X ); скомпилированы не будут).
Приложение: Ответ отправлен: 05.11.2004, 10:04 Отправитель: Василевский Александр Отвечает DSota
Приветствую Вас, 123! Отличаются тем, что имеют свои ограничения и области применения: 1. Параметры значения, это вида: byval(a:integer); 2. Нужны, когда не нужно возвращать данные. 3. Их можно вызывать просто: byval(5); 4. Если есть: procedure byval(a:integer); begin a:=5; end; То при выполнении a:=3; byval(a); a будет равно 3;
1. Параметры-переменные это вида: byref(var a:integer); 2. Нужны, когда из функции нужно возвратить данные 3. Их нельзя вызывать byref(5); 4. Если есть: procedure byref(var a:integer); begin a:=5; end; То при выполнении a:=3; byref(a); a будет равно 5;
Ответ отправлен: 05.11.2004, 19:48 Отправитель: DSota Отвечает Tigran K. Kalaidjian
Руддщ, вуфк 123! Параметры-значения, в отличие от параметров-переменных, не могут изменяться подпрограммой. Ответ отправлен: 05.11.2004, 19:36 Отправитель: Tigran K. Kalaidjian
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.