2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки





Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 злопамятный tp7, помогите!
Сообщение14.03.2017, 07:01 
Заслуженный участник
Аватара пользователя


22/01/11
1878
СПб
Следуя завету "ни года без кода", тряхнул стариной и написал небольшую программу на Паскале. Инпут программы пустой (в том смысле, что с клавиатуры ничего не вводится при запуске), аутпут -- целое число. Запускаю exe-шник из командной строки (стандартные программы в ХР), программа выдает ответ "1". Запускаю второй раз -- ответ "2". n-ый раз, ответ "n". Закрываю окошко командной строки, открываю снова, запускаю экзешник -- снова ответ "1". Почему так происходит?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 07:19 
Заслуженный участник
Аватара пользователя


08/11/11
4272
Если в программе нет ничего random, возможно, она куда-то лезет не туда в память. Попробуйте директиву

Код:
{$R+}


чтобы исключить это.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 07:35 
Заслуженный участник
Аватара пользователя


22/01/11
1878
СПб
g______d в сообщении #1200141 писал(а):
Попробуйте директиву

я ж ничего в этом не понимаю... куда ее втыкать?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 07:51 
Заслуженный участник
Аватара пользователя


08/11/11
4272
alcoholist в сообщении #1200143 писал(а):
я ж ничего в этом не понимаю... куда ее втыкать?


В начало кода программы... кажется. Смысл в том, что если программа полезет за границы массива или куда-то не туда в память, то программа (с этой директивой) выдаст runtime error, и дальше вы уже будете знать, что дело в этом.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 07:57 
Заслуженный участник
Аватара пользователя


22/01/11
1878
СПб
начало программы:
Код:
begin
$R+;

выдает "Error in integer constant"

-- Вт мар 14, 2017 08:07:59 --

Сделал так: занулил все переменные перед употреблением. Работает.
Всё равно вопрос остается... Почему новая, не упоминавшаяся ранее в программе переменная, имеет какое-то ненулевое значение?

-- Вт мар 14, 2017 08:21:15 --

работает, но плохо... там аутпут не одно число, конечно, а несколько
какая-то часть чисел одна и та же при запуске программы несколько раз подряд, а остальные изменяются в арифметической прогрессии и еще overflow пишет.
Ничего не понимаю... При первом запуске всё правильно считает.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 08:32 
Заслуженный участник
Аватара пользователя


08/11/11
4272
alcoholist в сообщении #1200145 писал(а):
Почему новая, не упоминавшаяся ранее в программе переменная, имеет какое-то ненулевое значение?


Насколько я помню, Паскаль не инициализирует переменные автоматически. Поэтому там может быть всё что угодно.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 09:19 
Заслуженный участник


06/07/11
3249
alcoholist в сообщении #1200145 писал(а):
начало программы:
Код:
begin
$R+;

выдает "Error in integer constant"
Надо с фигурными скобками:
Код:
begin
{$R+}

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 10:14 
Заслуженный участник
Аватара пользователя


22/01/11
1878
СПб
rockclimber
ничего не изменилось... Разве Паскаль не игнорирует содержимое фигурных скобок?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 10:21 
Экс-модератор


12/07/07
2950
Донецк, Украина
alcoholist, игнорирует, если первым символом в фигурных скобках не является $. Если первый символ $, то это признак начала директивы; в частности изменение настроек. (Это в Borland Pascal разных версий.)
Если проверка уже в настройках компилятора включена, то ничего и не изменится.
Да просто включите все проверки в среде.

-- Вт 14.03.2017 09:26:08 --

Об инициализации глобальных переменных (g______d все уже сказал, но добавлю на всякий случай).

В Borland Pascal времён TP7 глобальные переменные делятся на типизированные константы (расширение стандартного Паскаля от Borland, это просто инициализированные переменные) и неинициализированные переменные. (И те и другие на этапе выполнения сидят в сегменте глобальных переменных.) Неинициализированные переменные не содержатся в exe-файле и область памяти, выделяемая под эти переменные, никак не инициализируется. [Turbo Pascal 7.0 Language Guide]

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 11:18 
Заслуженный участник


06/07/11
3249
alcoholist в сообщении #1200145 писал(а):
работает, но плохо... там аутпут не одно число, конечно, а несколько
какая-то часть чисел одна и та же при запуске программы несколько раз подряд, а остальные изменяются в арифметической прогрессии и еще overflow пишет.
Не, тут уже код надо смотреть, имхо.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 11:37 
Заслуженный участник
Аватара пользователя


22/01/11
1878
СПб
rockclimber в сообщении #1200180 писал(а):
Не, тут уже код надо смотреть, имхо

зачем код смотреть? У меня вопрос про exe-файл. При повторном запуске разные результаты.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 11:41 


10/04/12
431
alcoholist в сообщении #1200139 писал(а):
Почему так происходит?


(1) Рандом, таймер, прочие неявные входные параметры;
(2) Неопределённое поведение, вроде чтение локальной переменной до инициализации.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 11:57 
Заслуженный участник
Аватара пользователя


02/08/11
4211
Может массив какой-нибудь непроинициализированный?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 12:13 
Заслуженный участник


06/07/11
3249
alcoholist в сообщении #1200185 писал(а):
rockclimber в сообщении #1200180 писал(а):
Не, тут уже код надо смотреть, имхо

зачем код смотреть? У меня вопрос про exe-файл. При повторном запуске разные результаты.
У вас результат каждого следующего запуска зависит от предыдущего. Вы скорее всего куда-то обращаетесь хитрым образом. Первый раз ячейка памяти инициализируется, а потом увеличивается на 1. Указатели используете?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 14:11 
Заслуженный участник
Аватара пользователя


30/01/06
62699
alcoholist в сообщении #1200185 писал(а):
зачем код смотреть? У меня вопрос про exe-файл.

Вы сами хотите разобраться, или задаёте окружающим занимательную загадку?
В первом случае - предоставьте как можно более полную информацию. В идеале - минимальный код, воспроизводящий эффект  у эксперта техподдержки  у собеседника.

P. S. "Злопамятный" и "недоброй памяти" - выражения разные и с разным смыслом.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group