Здраствуйте дорогие читатели, возникла каверзная ситуация...вообщем к главному.. Вот нада написать программу, гонки с препятсвиями, возникла ситуация с созданием двумерного масива для создания поля препятсвий, сам накидал чуток но чет аж паскаль начал глючить вобщем вот она самаОргазм_мозга_34.txt ( 2.65 килобайт )
Кол-во скачиваний: 749 , кто может помагите в течения 1-2 дня, ну или просто на будущие подскажите, и не судите строго по написанию, тока начал учиться ....
Причина отказа программы работать - банальна, обычный Range Check Error - вылет за границу. В данном случае - за границу типа.
Проблема - вот в этом куске кода:
Цитата
s1:=0; {Зануление с1} xa1:=50; ga1:=0; {Зануление га1} for j:=1 to f do {Начало двумерного массива, столбец } begin ga1:=ga1+1; {накрутка га1 } xa1:=xa1*ga1; { задание дистанции между столбцами массива,тоесть колонны выхода колец.}
Вот именно в последней строке и происходит вылет. Потому что переменная xa1 описана, как Integer - стало быть может хранить значения от -32768 до 32767, а при J = 6 ты пытаешься запихать туда 6000*6=36000.
да с этим понятно поменял на лонг, но толку, сама игра прерываеться на создании масива, и даже начальные местоположение непоказывает, мб кто знает или подкинет пример написания масива или как то по другому , чтоб создать это поле помех, появляющихся с правого угла , рандомно в строках появляють помехи, и с дальнейшим появление за этими же помехами нового ряда, я пока еще несообразил.Заране спасибо.
... от этого никакого и не будет. Думать начни. Какими ты значениями оперируешь, подумай! У тебя что хранится во всех этих массивах-то? Координаты точек на экране? Извини, разрешение экрана это 640*480, а не сотни тысяч.
А теперь, внимание, маленький эксперимент: меняем типы ВСЕХ переменных и массивов, кроме GD и GM (они должны быть типа Integer) на LongInt, меняем также ВСЕ подпрограммы, чтобы они принимали и возвращали только LongInt, и добавляем в программу одну строку:
s1:=0; { Зануление с1 } xa1:=50; ga1:=0; { Зануление га1 } for j:=1 to f do begin ga1:=ga1+1; { накрутка га1 } writeln(j:3, xa1:15, ga1:15); { <--- !!! Вот эту !!! } xa1:=xa1*ga1; for i:=1 to n do
, чтобы узнать, с какими ты значениями работаешь, насколько они велики... Что видим? А вот что:
Куда это годится? На что тебе такие огромные значения? Они ж ни в какой целочисленный тип не влезают, я уж не говорю о том, что толку от них вообще никакого нет (отображаться на граф экране они точно не будут).
Во-первых, имена переменным дай нормальные, чтоб можно было не читая твои сноски, а сразу, читая любой кусок программы, разобраться, что там происходит. Во-вторых - код отформатируй лесенкой, а то глаза ломаются, туда-сюда скакать. И в третьих - все-таки разберись, что у тебя происходит в этом цикле, откуда такие огромные значения... И только потом пытайся исправить что-то и запускать...