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

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

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

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

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

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

Задание:
Задаваемое кол-во точек (3..30) генерируется случайным образом на координатной плоскости 40*40.Найти три точки: Самую высшую,самую левую и самую правую точки.

Цитата:
Помогите с небольшим исключением которое нужно обрабатывать...точка может быть и самой верхней и самой левой к примеру...
Это означает, что программа не построит треугольник, т.к. получится только линия... Нужно создать проверку на это дело, и исключить такие варианты...
Цитата:
(Помогите,я не силен в Delphi)!!!!!!!!!
Цитата:
Вот программа,только,без исключения!!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 a: array[1..30] of TPoint;
 m1: array[1..3] of TPoint;
 x,y,n,i,p,s: integer;
 w:string;
  begin
  while (strtoint(edit1.Text)<3)or(strtoint(edit1.Text)>30)or(edit1.Text='')or(edit1.Text=' ') do //проверка на условие
  begin w:=inputbox('Неправильное значение','Введите количество точек от 3 до 30','3');
  edit1.Text:=w;
  end;
 
  Memo1.Clear;//Очистить мемо
  
  n:= StrToInt(Edit1.Text);//количество точек
  image1.Canvas.Pen.Width:=3;
  image1.Canvas.Pen.Color:=clblack;
  image1.Canvas.Font.Size:=7;
 
 //Расчмтать точки
  for i:= 1 to n do//до количества точек делать
  begin
  randomize;//Генератор
 
   x:= 30+ Random(image1.width -80);//координата X
   y:= 30+ Random(image1.Height-80);//Координата Y
 
   memo1.Lines.Add('№'+inttostr(i)+' ('+floattostrf(x,fffixed,3,0)+':'+floattostrf(y,fffixed,3,0)+')');//вывод на экран
   image1.Canvas.Ellipse(x-1, y-1, x+1, y+1);//рисовать точки
 
   image1.Canvas.TextOut(x+2, y, '№'+inttostr(i));//рисовать текст
 
   a[i].X:=x;//заполнить массив
   a[i].Y:=y;
   end;
 
 //Установки канвас
  image1.Canvas.Pen.Width:=1;
  image1.Canvas.Pen.Color:=clblack;
 
 //расчитать треугольник
  m1[1].Y:= a[1].Y;//самая высшая
  m1[2].X:= a[1].X;//самая левая
  m1[3].X:= a[1].X;//самая правая
 
  memo1.Visible:=true;
  
  for i:=1 to n do
  begin
 
  //самая высшая
   if (a[i].Y < m1[1].Y) then
   begin
    m1[1].Y := a[i].Y;
    m1[1].X := a[i].X;
   end;
 
  //самая левая
   if (a[i].X > m1[2].X) then
   begin
    m1[2].X := a[i].X;
    m1[2].Y := a[i].Y;
   end;
 
  //самая правая
   if (a[i].X < m1[3].X) then
   begin
    m1[3].X := a[i].X;
    m1[3].Y := a[i].Y;
  end;
  end;
 
 //вывестин на экран треугольник
 image1.Canvas.MoveTo(m1[1].X, m1[1].Y);
 image1.Canvas.LineTo(m1[2].X, m1[2].Y);
 image1.Canvas.LineTo(m1[3].X, m1[3].Y);
 image1.Canvas.LineTo(m1[1].X, m1[1].Y);
end;
vovey вне форума Ответить с цитированием
Старый 07.04.2010, 11:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это означает, что программа не построит треугольник
Подожди я не понял. Треугольник нельзя построить если его вершины лежат на одной прямой. так?
Или что тебе нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2010, 12:12   #3
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

К примеру я задам 3 точки!

1-я точка будет самой правой

2-я точка будет самая левая и самая высшая!

3-я точка ,например посередине!

Цитата:
Вот так,а как исключить такие варианты,я не знаю
vovey вне форума Ответить с цитированием
Старый 07.04.2010, 12:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и что? Вполне можно построить по ним треугольник.
Ты только уточняй что значит "Самая правая" Это ведь только одна координата точки. А где она справа находится по Y то а?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2010, 13:19   #5
vovey
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 21
По умолчанию

Все написано в коде!

Программа не построит треугольник,она построит линию,и будет соединять только две токи!
В таком случае: только 1-ю и 2-ю точки!Нужно исключить такие варианты!
vovey вне форума Ответить с цитированием
Старый 07.04.2010, 13:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У тебя тут мульен-бульен ошибок.
Вот смотри я поправил и рисует что-то:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 a: array[1..30] of TPoint;
 m1: array[1..3] of TPoint;
 x,y,n,i,p,s: integer;
 w:string;
  begin

  n:= 20;
  image1.Canvas.Pen.Width:=3;
  image1.Canvas.Pen.Color:=clblack;
  image1.Canvas.Font.Size:=7;

 //Расчмтать точки
  for i:= 1 to n do//до количества точек делать
  begin
  //randomize;//Генератор

   x:= 10+Random(image1.width);//координата X
   y:= 10+Random(image1.Height);//Координата Y

   image1.Canvas.Ellipse(x-1, y-1, x+1, y+1);//рисовать точки
 
   image1.Canvas.TextOut(x+2, y, '№'+inttostr(i));//рисовать текст

   a[i].X:=x;//заполнить массив
   a[i].Y:=y;
   end;

 //Установки канвас
  image1.Canvas.Pen.Width:=1;
  image1.Canvas.Pen.Color:=clblack;

 //расчитать треугольник
  m1[1].Y:= a[1].Y;//самая высшая
  m1[2].X:= a[1].X;//самая левая
  m1[3].X:= a[1].X;//самая правая
 

  for i:=1 to n do
  begin

  //самая высшая
   if (a[i].Y < m1[1].Y) then    m1[1] := a[i];
  //самая левая
   if (a[i].X > m1[2].X) then    m1[2]:= a[i];
  //самая правая
   if (a[i].X < m1[3].X) then    m1[3] := a[i]
  end;
 
 //вывестин на экран треугольник
 image1.Canvas.MoveTo(m1[1].X, m1[1].Y);
 image1.Canvas.LineTo(m1[2].X, m1[2].Y);
 image1.Canvas.LineTo(m1[3].X, m1[3].Y);
 image1.Canvas.LineTo(m1[1].X, m1[1].Y);
end;
Так тебе надебно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2010, 13:35   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
может быть и самой верхней и самой левой к примеру...
а какие проблемы
Код:
 if самая_левая равна самая_верхняя  then  //там гда они у тебя уже есть
  showmessage('остались только две');
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.04.2010 в 13:37.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение точки на медиане треугольника в координатной плоскости. Вадим Буренков Свободное общение 4 22.06.2010 19:18
Точки на декартовой плоскости Darth_Programmeder Помощь студентам 2 20.03.2010 17:29
Треугольник на плоскости задан координатами своих вершин.Найти координаты точки пересечения его медиан. Silver23 Помощь студентам 2 13.01.2010 15:59
точки на плоскости (*Х*З*) *PASCAL* tipson Помощь студентам 10 09.07.2009 10:28
на координатной плоскости, координаты в ручную Proskurin Помощь студентам 5 18.04.2008 13:31