2014 dxdy logo

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

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




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


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

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


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

Код:
{$R+}


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

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


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

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

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


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


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

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


22/01/11
2641
СПб
начало программы:
Код:
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
5940
alcoholist в сообщении #1200145 писал(а):
Почему новая, не упоминавшаяся ранее в программе переменная, имеет какое-то ненулевое значение?


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

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


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

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

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


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

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


12/07/07
4549
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
5677
кран.набрать.грамота
alcoholist в сообщении #1200145 писал(а):
работает, но плохо... там аутпут не одно число, конечно, а несколько
какая-то часть чисел одна и та же при запуске программы несколько раз подряд, а остальные изменяются в арифметической прогрессии и еще overflow пишет.
Не, тут уже код надо смотреть, имхо.

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


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

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

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


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


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

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


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

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


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

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

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


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

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

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

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

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



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

Сейчас этот форум просматривают: Google Adsense [Bot]


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

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