Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Задача по Delphi 7

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Lord_Don



Зарегистрирован: 28.01.2008
Сообщения: 4

СообщениеДобавлено: Пн Янв 28 2008 08:26    Заголовок сообщения: Задача по Delphi 7 Ответить с цитатой

Помогите пожалуюсто написать прогу:
С помощью датчика случайных чисел сгенерировать 2N целых чисел. N пар этих чисел задают N точек координатной плоскости. Вывести номера тройки точек, которые являются координатами вершин треугольника с наибольшим углом.
Это из учебника Семакина "Основы програмирования"
Буду очень презнателен!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Пн Янв 28 2008 09:59    Заголовок сообщения: Ответить с цитатой

а в чем проблемы то?

1. генеришь числа,
2. берешь первую точку, берешь любую вторую точку, берешь третью точку, измеряешь угол, заносишь в отдельные переменные эти три точки и угол.
3. циклом перебираешь третью точку, если текущий угол больше того, что хранится, то переписываешь угол и точки.
4. берешь следующую второю точку и повторяешь п.3
повторяя пункт 4 в цикле.

В итоге просто получается двойной цикл
for to do
begin
for to do
begin
....
end;
end;

если есть желание, можно оптимизировать что бы не брать одинаковые три точки несколько раз.

P.S. попутно делая проверку на деление на 0, если три точки лежат на одной прямой.

P.P.S.
Вообще при решении подобных задач, сначала составляется алгоритм решения, потом пишется его реализация на конкретном языке программирования.
Сообщите, что конкретно у Вас не получается, тогда и будем говорить)))))))))) а просто так решать за вас типовой расчет желания нет совершенно)))))))))) тем более в свое время решалось-перешалось их великое множество, так что никакого интереса не представляет))))))))))))


удачи




Wink
_________________
Errare humanum est
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Lord_Don



Зарегистрирован: 28.01.2008
Сообщения: 4

СообщениеДобавлено: Пн Янв 28 2008 17:53    Заголовок сообщения: Ответить с цитатой

Ну это уже что то просто ваще не представлял очём эта задача. Спосибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Вт Янв 29 2008 14:52    Заголовок сообщения: Ответить с цитатой

Цитата:
вот если ученье свет, то не ученье, получается - тьма?


на скорую руку, примерно так

Код:

program treg;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, math
  { add your units here };


var
i,j,k,n:integer;
x1,x2,x3,y1,y2,y3,a,amax,xm1,xm2,xm3,ym1,ym2,ym3,x,y,ax,by:real;
xn,yn:array[0..5] of real;

function anglevector(x1,y1,x2,y2:real):real;
begin
anglevector:=arccos((x1*x2+y1*y2)/(sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2)));
end;

function angle(x1,x2,x3,y1,y2,y3:real):real;
var
a1: array[0..2] of real;
xx1,xx2,yy1,yy2:real;
begin

{1    }

xx1:=x2-x1;
xx2:=x3-x1;
yy1:=y2-y1;
yy2:=y3-y1;
a1[0]:=anglevector(xx1,yy1,xx2,yy2);

{2    }

xx1:=x1-x2;
xx2:=x3-x2;
yy1:=y1-y2;
yy2:=y3-y2;

a1[1]:=anglevector(xx1,yy1,xx2,yy2);

{3    }

xx1:=x1-x3;
xx2:=x2-x3;
yy1:=y1-y3;
yy2:=y2-y3;
a1[2]:=anglevector(xx1,yy1,xx2,yy2);


if a1[0]>a1[1] then
 angle:=a1[0]
else
 angle:=a1[1];
if  a1[2]>angle then
 angle:=a1[2];
end;


begin

randomize;
amax:=0;
xm1:=-1;
xm2:=-1;
xm3:=-1;
writeln('insert number points');
readln(n);
if n<3 then
 begin
  write('It''s cool to be in school!!!! n=3');
  n:=3;
 end;
n:=n-1;

for i:=0 to n do
 begin
  xn[i]:=random(100);
  yn[i]:=random(100);
 end;

 for i:=0 to n do
  for j:=1 to n do
   for k:=2 to n do
    if  (i<>j) then
    if  (i<>k) then
    if  (j<>k) then
    if not ((xn[i]=xn[j]) and (yn[i]=yn[j]))  then
    if not ((xn[j]=xn[k]) and (yn[k]=yn[j])) then
    if not ((xn[i]=xn[k]) and (yn[i]=yn[k]) )then
     begin
      ax:=(yn[i]-yn[j])/(xn[i]-xn[j]);
      by:=yn[i]-ax*yn[i];
      y:=ax*xn[k]+by;
      if y<>yn[k] then
       begin
         a:=angle(xn[i],xn[j],xn[k],yn[i],yn[j],yn[k]);
         if a>amax then
          begin
           amax:=a;
           xm1:=i;
           xm2:=j;
           xm3:=k;
          end;
       end;
     end;
     amax:=RadToDeg(amax);
     writeln;
     writeln('---------------------POINTS----------------------------------');
     
         
     for i:=0 to n do
     
     writeln(' x',i,'=',xn[i],'  y',i,'=',yn[i]);
     writeln;
     
     writeln('----------------- MAX points Angle -------------------------');
     writeln('point 1 number',xm1);
     writeln('point 2 number',xm2);
     writeln('point 3 number',xm3);
     writeln('MAX angle',amax,' grad');





end.   




дальше разбирайся сам)))))))))))


Wink
_________________
Errare humanum est
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Lord_Don



Зарегистрирован: 28.01.2008
Сообщения: 4

СообщениеДобавлено: Ср Янв 30 2008 17:22    Заголовок сообщения: Ответить с цитатой

Спосибо!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Чт Янв 31 2008 09:44    Заголовок сообщения: Ответить с цитатой

только здесь еще до фига подводных камней. Например, не проверяется соответствие типа вводимого значения пользователем.
Проверяется, если три точки лежат на одной прямой, этот случай просто игнорируется, так же как и случай, если две точки совпадают, но если три точки не лежат на одной прямой, но две первые лежат на вертикальной прямой, то программа просто молча выкинет, с сообщением - деление на 0, хотя реально этот угол можно обсчитать)))))))))) в общем работы здесь еще вагон)))))))))))))

потому, если препод у вас нормальный, за мою прогу в том виде, какая она сейчас, он вам поставит банан!!!!!!! и будет абсолютно прав!!!!! Если же вы удалите все (наивно), большинство камней, то вы и разберетесь с ней)))))))))))))))))))))))


Wink
_________________
Errare humanum est
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...