Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 05:00   #1
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
Восклицание Ребят,надо найти ошибку

Задаваемое кол-во точек (3..30) генерируется случайным образом!!!Надо найти три точки: Самую высшую,самую левую и самую правую точки!!!И из этих точек построить треугольник!!!
vovey вне форума Ответить с цитированием
Старый 28.03.2010, 05:02   #2
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

procedure TForm1.Button1Click(Sender: TObject);
var q,p,s,i,n,m,j,h,b,b1,b2,b3:integer;
max1,max2,min:TPoint;
w:string;
x,y:real;
a:array[1..33] of TPoint;
m1:array[1..3] of TPoint;
begin

memo1.Clear;
for i:=1 to strtoint(edit3.Text) do
begin
randomize;
with image1.canvas do
begin
n:=(image1.width-250-strtoint(edit2.Text)*3)+random(imag e1.width-80);
m:=(image1.Height-250-strtoint(edit2.Text)*3)+random(imag e1.Height-50);
x:=n;
y:=m;
memo1.Lines.Add('№'+inttostr(i)+' ('+floattostrf(x,fffixed,3,0)+':'+f loattostrf(y,fffixed,3,0)+')');
p:=10+random(385);
s:=10+random(385);
image1.Canvas.Pen.Width:=5;
image1.Canvas.Pen.Color:=clGreen;
image1.Canvas.Ellipse(n-1,image1.Height-(m-1),n+1,image1.Height-(m+1));
image1.Canvas.TextOut(n,image1.Heig ht-(m),'№'+inttostr(i));
a[i].X:=n;
a[i].Y:=m;
end;
image1.Canvas.Pen.Width:=1;
image1.Canvas.Pen.Color:=clblack;
image1.Canvas.Font.Size:=7;
memo1.Visible:=true;

end;

m1[1].Y:=a[1].y;
for b:=1 to strtoint(edit3.Text) do
if (a[b].Y>m1[1].Y)
then begin m1[1].Y:=a[b].Y;
m1[1].X:=a[b].X;
end;
m1[2].X:=a[1].X;
for b:=1 to strtoint(edit3.Text) do
if (a[b].X>m1[2].X)
then begin m1[2].X:=a[b].X;
m1[2].Y:=a[b].Y;
end;
m1[3].X:=a[1].X;
for b:=1 to strtoint(edit3.Text) do
if (a[b].X>m1[3].X)
then begin m1[3].X:=a[b].X;
m1[3].Y:=a[b].Y;
end;
image1.Canvas.MoveTo(m1[1].X,image1.Height-m1[1].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[2].Y);

image1.Canvas.MoveTo(m1[2].X,image1.Height-m1[2].Y);
image1.Canvas.LineTo(m1[3].X,image1.Height-m1[3].Y);

image1.Canvas.MoveTo(m1[3].X,image1.Height-m1[3].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[1].Y);

end;
vovey вне форума Ответить с цитированием
Старый 28.03.2010, 05:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, прежде всего выкиньте из цикла Randomize;
это нужно делать ОДИН раз перед генерацией случайной последовательности.
я бы рекомендовал выполнить это на событии создания формы (onCreate):
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;
2) код берите в специальный тэг [СODE].. [/СODE] (есть специально для этого кнопочка # )

3) я бы разделил процедуры генерации точек
и процедуру отображения этих точек на форме

4) и, главное, — А в чём собственно вопрос? Ошибка то какая?.. (сейчас лень запускать Дельфи... )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2010, 06:10   #4
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

Ошибка в том,что он не строит треугольник!А с точками все нормально! я думаю ошибка где то тут!

Последний раз редактировалось vovey; 28.03.2010 в 06:48.
vovey вне форума Ответить с цитированием
Старый 28.03.2010, 06:47   #5
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

Код:
m1[1].Y:=a[1].y;
for b:=1 to strtoint(edit3.Text) do
if (a[b].Y>m1[1].Y)
then begin m1[1].Y:=a[b].Y;
m1[1].X:=a[b].X;
end;
m1[2].X:=a[1].X;
for b:=1 to strtoint(edit3.Text) do
if (a[b].X>m1[2].X)
then begin m1[2].X:=a[b].X;
m1[2].Y:=a[b].Y;
end;
m1[3].X:=a[1].X;
for b:=1 to strtoint(edit3.Text) do
if (a[b].X>m1[3].X)
then begin m1[3].X:=a[b].X;
m1[3].Y:=a[b].Y;
end;
image1.Canvas.MoveTo(m1[1].X,image1.Height-m1[1].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[2].Y);

image1.Canvas.MoveTo(m1[2].X,image1.Height-m1[2].Y);
image1.Canvas.LineTo(m1[3].X,image1.Height-m1[3].Y);

image1.Canvas.MoveTo(m1[3].X,image1.Height-m1[3].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[1].Y);
vovey вне форума Ответить с цитированием
Старый 28.03.2010, 09:18   #6
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от vovey Посмотреть сообщение
Код:
image1.Canvas.MoveTo(m1[1].X,image1.Height-m1[1].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[2].Y);

image1.Canvas.MoveTo(m1[2].X,image1.Height-m1[2].Y);
image1.Canvas.LineTo(m1[3].X,image1.Height-m1[3].Y);

image1.Canvas.MoveTo(m1[3].X,image1.Height-m1[3].Y);
image1.Canvas.LineTo(m1[2].X,image1.Height-m1[1].Y);
Здесь должно быть 1.
Serebro вне форума Ответить с цитированием
Старый 28.03.2010, 12:07   #7
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

Так и было изначально у меня,случайно с ошибкой отправил!Все ровно треугольник не строит((((
vovey вне форума Ответить с цитированием
Старый 28.03.2010, 12:40   #8
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

Вот полное условие,вместе с моей программой,посмотрите!

Задаваемое кол-во точек (3..30) генерируется случайным образом на координатной плоскости 40*40.Найти три точки: Самую высшую,самую левую и самую правую точки.Построить треугольник и подсчитать количество точек,находящихся внутри треугольника и снаружи!
Вложения
Тип файла: rar Архив WinRAR.rar (177.1 Кб, 6 просмотров)
vovey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти ошибку stanBRY Общие вопросы C/C++ 17 29.03.2010 23:16
Найти ошибку Uvaroff Помощь студентам 3 13.01.2010 01:45
Ребят найдите ошибку! agunek Помощь студентам 8 31.10.2009 16:24
ребят, помогите найти ошибку Frame1992 Помощь студентам 14 08.10.2009 02:01
Надо найти код из исходника Черничный Работа с сетью в Delphi 0 20.08.2008 13:19