IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Окружность и точки
сообщение
Сообщение #1


Гость






Вот такая вот задачка:

Есть множество точек М в трехмерном пространстве. Найти такую из них, что окружность  радиуса R с центром в этой точке содержит максимальное число точек из множества М.
Ну, и её нужно оформить в Делфи.
Спасибочки большое за внимание!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


а координаты точек задаются случайно???
Дай еще какие нибудь условия или это все
--=-=-=-=
Просто у меня мыли такие
раз трехмерное значит....... три координаты значит массив куда они будут заносится
при их генерации
-=-=-=-=-
вопрос...... сколько точек то 5...3....10.....бесконечность smile.gif
-=-=-=-
радиус какой......
-=-=--
ЕСЛИ Я ПРАВИЛЬНО ПОНЯЛ УСЛОВИЕ


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Зачем спрашивать в нескольких разделах сразу? (на http://forum.pascal.net.ru/?board=zd;actio...;num=1069950042 - ты же спрашиваешь?)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Shadow
Сначала вводится число, которое соответсвует количеству точек.
Потом вводятся уже сами точки ( "в ручную" ).(Они заносятся в массив либо в 2 массива- 2 когда 1 одномерный и 2-рой двухмерный)
И точно так же вводится радиус .

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

trminator
Я не знаю как именно это можно сделать перебором.
Зачем спрашиваю в нескольких разделах?! Потому что надеюсь, что тогда большая вероятность, что мне ответят. Ведь не все же заходят во все разделы. Не знаю. Наверное, поэтому.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


smile.gif
-=-=-=-=
Хорошо теперь перейдем к
ктому что у нас за радиус
-----------------
1. Это шар в трехмерном пространстве
-----------------
2. Плоскость в трехмерном пространстве
....вот если плоскость то она фиксирована
....или нет, я имею ввиду ее надо вращать
-----------------
если... 1. то все точки попадающие внуть шара и его границ контур
если... 2. то все точки находящиеся на плоскости радиуса


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


алгоритм
-=-=-=-=
берем первую точку т.е. 3 координаты ведь у нас трехмерное пространство
... проверяем все точки попавшие внутрь шара (для начала) это значение
... можно зафиксировать в массиве
... берем след точку и опять провер сколько попало внуть и опять фиксир в массиве
-=-=-=-
... потом в конце когда все точки будут проверены можно найти масксим число в массиве
... в который мы ложили значения ето и будет то что мы искали
... только придется запоминать индексное значение координат точек что бы потом можно
... было сказать какая .... или присвоить им имена например  какая нибудь Alpha Zentavra smile.gif
-=-=-=-
примерно так на вскидку
Если что не так то поправте меня
:-/


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Спасибо за ответы  :smile.gif
Я попыталась сделать, но у меня не получается, просто раньше нам давали совсем простенькие задачи. А здесь есть моменты, практической реализации которых я не очень то понимаю...  
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


:D
-=-=-=
Ню я вроде замоснтрячил
только вот лучше мне тебе скинуть
весь проект целиком
иначе неудобно будет

Где у тебя МЫЛО-то

-=-=-=-=

unit Star1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, ExtCtrls;

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
   Memo1: TMemo;
   Label1: TLabel;
   GroupBox1: TGroupBox;
   Edit1: TEdit;
   e_X: TEdit;
   e_Y: TEdit;
   e_Z: TEdit;
   e_Name: TEdit;
   le_Radius: TLabeledEdit;
   Button1: TButton;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   e_max: TEdit;
   Label6: TLabel;
   Label7: TLabel;
   Image1: TImage;
   procedure BitBtn1Click(Sender: TObject);
   procedure Memo1KeyPress(Sender: TObject; var Key: Char);
   procedure le_RadiusKeyPress(Sender: TObject; var Key: Char);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

Type
 StarS = record
 stX           :       Integer;
 stY           :       Integer;
 stZ           :       Integer;
 stName        :       String;
end;

Type
 St_M = record
 St_Col : Integer;
 St_Nam : String;
end;

var
 Form1          : TForm1;
 max_o          : String;
 StrRead        : String;
 Ps,ii          : Integer;
 StarCoo        : array [0..20,0..2] of Integer;
 StarName       : array [0..20] of String;
 StarStatic     : StarS;
 StarWrToMass   : StarS;
//---------------------------------
 Stars_Schet    : Integer;
 Star_M         : array [0..20] of St_M;
//---------------------------------
 //Label ex;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
i,ir : Integer;
X_r  : Integer;
Y_r  : Integer;
Z_r  : Integer;
max  : Integer;
Label ex;

begin  {0}

if Form1.le_Radius.Text='' then
 begin
   Windows.Beep(4000,100);
   ShowMessage('Радиус не введен');
   goto ex;
 end;
 
{*****************************
*       Вводим точки         *
*    на компонент TMemo      *
******************************}
if Form1.Memo1.Lines.Capacity>20 then
  begin
    ShowMessage('Слишком много данных не более 20 строк');
    goto ex;
  end else if Form1.Memo1.Lines.Count=0 then
    begin
     ShowMessage('Нет строк');
     goto ex;
    end else begin {1}
//----------------------------------------------------
For i:=0 to Form1.Memo1.Lines.Capacity-1 do
 begin {2}
          StrRead:=Form1.Memo1.Lines[i];

          if length(StrRead)>15 then
            begin
               ShowMessage('Строка слишком большая не более 15 символов');
               goto ex;
            end else if length(StrRead)<8 then
              begin
                ShowMessage('Строка слишком маленькая не менее 9 символов');
                goto ex;
              end;

{Находим координату X}
          Ps:=pos('>',StrRead);

          if Ps=0 then
            begin
              ShowMessage('в строке нет управляющих символов');
              goto ex;
            end else if Ps>4 then
              begin
                ShowMessage('     Координата звезды  X   '+#13#10+
                            'не более 3 символов и знак >');
                goto ex;                            
              end;

          Ps:=Ps-1;
          StarWrToMass.stX:=StrToInt(copy(StrRead, 1, Ps));

          PS:=Ps+1;
          delete(StrRead,1,Ps);

 {КОНЕЦ}
 {Находим координату Y}
          Ps:=pos('>',StrRead);

          if Ps=0 then
            begin
              ShowMessage('в строке нет управляющих символов');
              goto ex;
            end else if Ps>4 then
              begin
                ShowMessage('     Координата звезды  Y   '+#13#10+
                            'не более 3 символов и знак >');
                goto ex;                            
              end;

          Ps:=Ps-1;
          StarWrToMass.stY:=StrToInt(copy(StrRead, 1, Ps));

          PS:=Ps+1;
          delete(StrRead,1,Ps);
 {КОНЕЦ}
 {Находим координату Y}
          Ps:=pos('>',StrRead);

          if Ps=0 then
            begin
              ShowMessage('в строке нет управляющих символов');
              goto ex;
            end else if Ps>4 then
              begin
                ShowMessage('     Координата звезды Z    '+#13#10+
                            'не более 3 символов и знак >');
                goto ex;                            
              end;
          Ps:=Ps-1;
          StarWrToMass.stZ:=StrToInt(copy(StrRead, 1, Ps));

          PS:=Ps+1;
          delete(StrRead,1,Ps);
 {КОНЕЦ}
 {Находим наконец ИМЯ звезды}
          Ps:=pos('>',StrRead);

          if Ps=0 then
            begin
              ShowMessage('в строке нет управляющих символов');
              goto ex;
            end else if Ps>3 then
              begin
                ShowMessage('  Имя звезды не боле  '+#13#10+
                            'двух символов и знак >');
                goto ex;                            
              end;

          Ps:=Ps-1;
          StarWrToMass.stName:=copy(StrRead, 1, Ps);
          PS:=Ps+1;
          delete(StrRead,1,Ps);
 {КОНЕЦ}
   
 {Пишем все это в массив}
        StarCoo[i,0]:=StarWrToMass.stX;
        StarCoo[i,1]:=StarWrToMass.stY;
        StarCoo[i,2]:=StarWrToMass.stZ;

        StarName[i]:=StarWrToMass.stName
     end;
   end;
{*************************************
*                                   *
*  Начинаем поиск звезды масимально *
*  включающим в свой радиус других  *
*  звезд                            *
*                                   *
*************************************}

 
For ir:=0 to Form1.Memo1.Lines.Capacity-1 do
 begin
   StarStatic.stX:=StarCoo[ir,0];
   StarStatic.stY:=StarCoo[ir,1];
   StarStatic.stZ:=StarCoo[ir,2];
   StarStatic.stName:=StarName[ir];
//---------------------------------
   Stars_Schet:=0; //на каждую звезду по св счетчику

  For i:=0 to Form1.Memo1.Lines.Capacity-1 do
    begin
     {******************************
      **что бы не провер саму себя**
      ******************************}

      if ir<>i then
      begin
        StarWrToMass.stX:=StarCoo[i,0];
        StarWrToMass.stY:=StarCoo[i,1];
        StarWrToMass.stZ:=StarCoo[i,2];
//----------------------------------------
       StarWrToMass.stName:=StarName[ii];

        X_r:=StarStatic.stX-StarWrToMass.stX;
        Y_r:=StarStatic.stY-StarWrToMass.stY;
        Z_r:=StarStatic.stZ-StarWrToMass.stZ;
       
        if X_r<0 then X_r:=X_r*(-1); //Корректировка результ
        if Y_r<0 then Y_r:=Y_r*(-1); //чтоб небыл отрицат
        if Z_r<0 then Z_r:=Z_r*(-1); //т.к. он тогда ... ну понятно

        Form1.e_X.Text:=IntToStr(X_r);
        Form1.e_Y.Text:=IntToStr(Y_r);
        Form1.e_Z.Text:=IntToStr(Z_r);
//         ShowMessage('Счет');

        if X_r<=StrToInt(Form1.le_Radius.Text) then
         if Y_r<=StrToInt(Form1.le_Radius.Text) then
          if Z_r<=StrToInt(Form1.le_Radius.Text) then
             begin
//                ShowMessage('Есть попадание по коор Х'+#10#13+
//                            'Есть попадание по коор Y'+#10#13+
//                            'Есть попадание по коор Z');

               Stars_Schet:=Stars_Schet+1;
             end;
             
{****************
 * Конец поиска *
 ****************}

      end;
  end;

// прячем в массиве : )

Star_M[ir].St_Col:=Stars_Schet;
Star_M[ir].St_Nam:=StarStatic.stName;

end;
{******************************
* А вот теперь ищем максимум *
********************************************************
* оно и будет максим звездой  * если ничего не напутал *
*******************************************************}
 max:=Star_M[0].St_Col;

 For i:=0 to Form1.Memo1.Lines.Capacity-1 do
    begin

     if Star_M[i].St_Col>max then

       begin

        max:=Star_M[i].St_Col;

//         max_o:=IntToStr(max)+'...'+Star_M[i].St_Nam;

       end;
    end;
//Вдруг несколько звездочек будут одинаковы тоже выведем
 For i:=0 to Form1.Memo1.Lines.Capacity-1 do
  begin

    if Star_M[i].St_Col=max then
      begin
        max_o:=max_o+(IntToStr(max)+'...'+Star_M[i].St_Nam+'.'+#32#32#32);
      end;
  end;
 ex:
end;
{************************
*  Пример ввода чисел  *
* 3>13>3>s1>           *
* 19>9>9>s2>           *
* 22>2>22>s3>          *
* 11>16>11>s4>         *
* 43>3>3>s5>           *
* 9>29>39>s6>          *
* 21>12>2>s7>          *
* 11>1>11>s8>          *
* 3>3>3>s9>            *
* 19>19>9>a1>          *
* 2>2>22>a2>           *
* 31>13>13>a3>         *
* 43>13>43>a4>         *
* 15>15>9>a5>          *
* 22>22>22>a6>         *
* 15>19>11>a7>         *
************************}

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
{****************************************
* Замонстрячим защиту от неправильного *
* ввода данных                         *
*                                      *
****************************************}

Case Key of
 'a'..'z' :;
 '0'..'9' :;
 'A'..'Z' :;
 Chr(13)  :;
 Chr(8)   :;
 '>'      :;
 else
   begin
     Key :=Chr(0); // символ не отображать
     ShowMessage('      Можно вводить     '+#10+#13+
                 'только с a-z A-Z 0-1 и >');
   end;

end;
end;

procedure TForm1.le_RadiusKeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
  '0'..'9' :;
  else begin
     Key :=Chr(0); // символ не отображать
     ShowMessage('Только цифры 0-9');
       end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
 it    : Integer;
 fg    : String;
begin

{*************************************
* Для отладки что унас в массиве-то *
*                                   *
****************i*********************}
for it:=0 to Form1.Memo1.Lines.Capacity-1 do
 begin
  fg:=fg+#32#32+IntToStr(Star_M[it].St_Col)+'..'+Star_M[it].St_Nam;
 end;

 Form1.Edit1.Text:=fg;

 Form1.e_max.Text:=max_o;

//  ss:=StrToInt(Form1.le_Radius.Text);
//  Form1.e_X.Text:=IntToStr(StarCoo[ss,0]);
//  Form1.e_Y.Text:=IntToStr(StarCoo[ss,1]);
//  Form1.e_Z.Text:=IntToStr(StarCoo[ss,2]);


// form1.Edit1.Text:=IntToStr(Form1.Memo1.Lines.Capacity);
end;

end.




--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +




ТОЛЬКО ПРОТЕСТИ ХОРОШЕНЬКО
ПРОСТО НА СКОРУЮ РУКУ ВСЕ НЕЛЬКОЛЬКО
СУМБУРНО и ЭКСПРОМТОМ


:D ;) ;)


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Большое спасибо! Как раз сидела над этой задачей, но меня глючит или она у меня глючит!. Сейчас попробую протестировать,
а мыло у меня gluvi@mail.uzhgorod.ua
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


Проект отправлен


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 4:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name