Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на языке Pascal

Выпуск № 338
от 07.11.2004, 18:10

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 539
Отправлено ответов: 2047
Активность: 379.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

sir henry
Статус: Профессиональный
Общий рейтинг: 163.62
[Подробней >>]
Snowm@n
Статус: Опытный
Общий рейтинг: 107.3
URL: Олимпиадное программирование в Чебоксарах
[Подробней >>]
zer0access
Статус: Опытный
Общий рейтинг: 106.97
URL: Сайт обо мне, моей жизни и увлечениях.
[Подробней >>]
 
Futility
Статус: Начальный
Общий рейтинг: 105.78
[Подробней >>]
Василевский Александр
Статус: Опытный
Общий рейтинг: 116.03
[Подробней >>]
DSota
Статус: Доверительный
Общий рейтинг: 120.3
[Подробней >>]
 
Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 179.28
URL: Персональная страничка
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 536. Здравствуйте! На моем компьютере с прцессором Pentium II при запуске под DOS программы Тpascal выдается ошибка 200: деление наа нуль. Не работает также одна из DOS-овских программ. На другом компьютере, где Pentium M все работает. В чем причина? Я по... (ответов: 2)
Вопрос № 537. РУДДЩ скажите, пожалуйста: чем отличаются параметры-значения от параметров-переменных?... (ответов: 6)

Вопросов: 2, ответов: 8


 Вопрос № 536

Здравствуйте!
На моем компьютере с прцессором Pentium II при запуске под DOS программы Тpascal выдается ошибка 200: деление наа нуль.
Не работает также одна из DOS-овских программ. На другом компьютере, где Pentium M все работает. В чем причина? Я подозреваю, что первый компьютер имеет только FAT2. Если это так, то как устранить эту трудность.
Спасибо!
Анатолий



Вопрос отправлен: 30.10.2004, 20:56
Отправитель: Анатолий

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Доброе время суток, Анатолий!
Вы слишком поздно родились. :))
Несколько лет назад весь интернет был завален подобными вопросами и рецептами решений. Честно говоря удивительно, что Вы до сих пор об этом спрашиваете. :)
Решений здесь несколько и самый лучший - вообще отказаться от ТРВР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

РУДДЩ
скажите, пожалуйста: чем отличаются параметры-значения от параметров-переменных?



Вопрос отправлен: 04.11.2004, 18:05
Отправитель: 123

[Следующий вопрос >>] [Список вопросов]

Отвечает zer0access

Добрый день, 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
(Procedure (var k:integer))пёп·пјпµпЅяЏяЋя‚яЃяЏ пё пїпѕяЃп»пµ пѕя‚яЂп°п±пѕя‚пєпё пѕяЃя‚п°яЋя‚яЃяЏ пёп·пјпµпЅпµпЅя‹пјпё

Ответ отправлен: 04.11.2004, 18:19
Отправитель: Futility


Отвечает sir henry

Добрый день, 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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (17)
Perl (6)
Builder / Delphi (14)
Pascal (18)
Basic / VBA (8)
Java / JavaScript (6)
PHP (15)
Криптография (7)
WinAPI (17)
Радиоэлектроника (12)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (60)
"Железо" (38)
Поиск информации (21)
Администратору
Windows NT/2000/XP (35)
Linux / Unix (18)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться

В избранное