Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > непонятный процесс сумирования


Автор: Black_Joker 22.2.2003, 20:46
Народ, возникла такая проблема:

sumin:= 0;
for l:= 1 to kolvo do writeln(ms[l]);
for l:= 1 to kolvo do inc(sumin, ms[l]);

writeln('sumin= ',sumin); writeln;

на экране

1
0
0
sumin= 2

2
0
0
sumin= 4

и т.д.

Пока этот фрагмент был в основной программе, было все нормально. Когда перенес в процедуру появился такой глюк. Кто-нить знает и как с этим бороться.
Разделить на 2 нельзя, могут придраться.

Автор: Vco 22.2.2003, 20:53
А что именно? что за ошибка....если всё нормально то и в процедуре должно быть всё ок...мож синтаксит неправильный?
Код

procedure summa;
begin
sumin:= 0;
for l:= 1 to kolvo do writeln(ms[l]);
for l:= 1 to kolvo do inc(sumin, ms[l]);

writeln('sumin= ',sumin); writeln;
end;
begin
summa;
end;

так?

Автор: Vit 23.2.2003, 00:28
Посмотри где и как объявляются переменные...

Автор: Pakshin A. S. 23.2.2003, 03:16
У меня такой же глюк был в Delphi: в переменную записывал указатель, через некоторое время он сам менялся на другой, хотя я к нему нигде не обращался. Так и остался он не понятым...

Автор: Vit 23.2.2003, 03:52
Цитата(Pakshin @ 22.2.2003, 18:16)
Так и остался он не понятым...

1) Отключи оптимизацию
2) Не объявляй глобальными переменными модуля - только локальными или полями класса и всё будет нормально

Автор: Black_Joker 23.2.2003, 23:27
Понял где возникла ошибка


При объявлении переменных
ms: array [1..1] of word;
. . .
(kolvo <>0)
sumin:= 0;
for l:= 1 to kolvo do writeln(ms[l]);
for l:= 1 to kolvo do inc(sumin, ms[l]);

writeln('sumin= ',sumin); writeln;

на экране
1
0
0
sumin= 2

2
0
0
sumin= 4

по ходу программы значения заносились в ms[2] и т.д. Но почему паскаль не выругался при внесении переменных в несуществующие ячейки и почему вывел нули, при обращении к ним не понятно.

Автор: SmaLL 25.2.2003, 17:50
Цитата(Black_Joker @ 23.2.2003, 15:27)
по ходу программы значения заносились в ms[2] и т.д. Но почему паскаль не выругался при внесении переменных в несуществующие ячейки и почему вывел нули, при обращении к ним не понятно.

Вероятно у тебя отключена опция компилятора проверки выхода за пределы диапазона

Автор: Guest_Black_Joker 25.2.2003, 21:48
И как включить?

Автор: SmaLL 25.2.2003, 23:07
Цитата(Guest_Black_Joker @ 25.2.2003, 13:48)
И как включить?

В коде программы написать:
{$R+} - включить проверку
{$R-} - выключить проверку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)