|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2010, 21:48 | #1 |
Пользователь
Регистрация: 01.11.2010
Сообщений: 48
|
массивы шариков
сказали сделать прогу массива шариков...прогу написал но столкнулся с проблемой
у меня в одном массиве 3 шарика в другом 2 и выдаёт ошибку при запуске: "[Warning] Unit1.pas(78): FOR-Loop variable 'i' may be undefined after loop" сломал всю голову что надо исправить но не получается может поможете чем нить... вот программа unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) shape1: TShape; shape2: TShape; Timer1: TTimer; Button1: TButton; Button2: TButton; Shape3: TShape; Shape4: TShape; Shape5: TShape; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; cw,ch: integer ; rast,dist:real; p1,p2: Tpanel; r1,r2:real; x:array[1..3] of integer; k:array[1..3] of integer; S1:array[1..3] of Tshape; S2:array [1..2] of Tshape; const dx:array[1..3] of integer=(10,4,7); implementation function udar(i:integer) : boolean; var x1,x2 :real; begin result :=false; x1 := s1[i].left + r1; x2 := s2[i].left + r2; rast := s1[i].Width div 2 + s2[i].Width div 2; //расстояние между центрами dist := abs(x1-x2); if rast>=dist then result := true ; end; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin S1[1]:=shape1 ; S1[2]:= shape4 ; S1[3]:= shape3; S2[1]:=shape2; S2[2]:=shape5; for i:=1 to 3 do x[i]:= S1[i].left; k[1]:=1; k[2]:=1; r1:=0.5*s1[1].width; r2:=0.5*s2[1].width; end; procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin for i:=1 to 3 do s1[i].left:=s1[i].left+ k[i]; s2[i].Left:=s2[i].left - k[i]; if s1[i].left >= width - s1[i].width then k[i]:=-k[i]; if s2[i].left >= width - s2[i].width then k[i]:=-k[i]; if s1[i].left <= 0 then k[i]:=-k[i]; if s2[i].left <= 0 then k[i]:=-k[i]; if udar(i) then begin k[i]:=-k[i]; end; end; procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled:= not timer1.Enabled; end; procedure TForm1.Button2Click(Sender: TObject); begin s2[1].Visible:= not s2[1].Visible; end; end. |
01.11.2010, 22:46 | #2 |
Пользователь
Регистрация: 01.11.2010
Сообщений: 48
|
немного изменил код но ошибка просто переместилась вниз
|
02.11.2010, 10:17 | #3 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
"[Warning] Unit1.pas(78): FOR-Loop variable 'i' may be undefined after loop"
Переменная(variable) I возможно (may be) неопределена(имеет неизвестное значание)(undefined) после цикла (after loop). в операторах после окончания цикла используется переменная i для которой занчание не задано. Не хватает begin end для указания начала и конца цикла.
программа — запись алгоритма на языке понятном транслятору
|
02.11.2010, 11:28 | #4 |
Форумчанин
Регистрация: 04.05.2010
Сообщений: 495
|
Ты область действия цикла for укажи. У тебя он распространяется только на строку
Код:
Код:
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948 |
02.11.2010, 17:34 | #5 |
Пользователь
Регистрация: 01.11.2010
Сообщений: 48
|
большое спасибо ..помогло
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Столкновение шариков в delphi | vladlen1993 | Помощь студентам | 4 | 08.10.2010 15:11 |
Расчет столкновения шариков. | belomorinka | Общие вопросы Delphi | 3 | 02.06.2009 18:54 |
Соударение шариков разных размеров и объемов | Стаханов_Андрей | Помощь студентам | 3 | 09.03.2008 17:17 |