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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2012, 08:34   #1
Dimon1989
 
Регистрация: 13.10.2012
Сообщений: 4
По умолчанию Затрудняюсь найти решение.

Добрый день всем! У меня возникли затруднения в решении этих двух задач, может ли кто объяснить как их делать? Заранее благодарен.
Задачи:
1) Даны натуральное n и координаты точек на плоскости X1,Y1, X2,Y2, ..., Xn,Yn. Определить радиус наименьшего круга, с центром в начале координат, внутрь которого попадают все эти точки.

2) Даны натуральное n, R и координаты точек на плоскости X1,Y1, X2,Y2, ..., Xn,Yn. Вычислить количество точек, попадающих в круг радиуса R (R > 0) с центром в начале координат.

Тему прошли а я не понял как их решать. Delphi

Последний раз редактировалось Dimon1989; 13.10.2012 в 08:47.
Dimon1989 вне форума Ответить с цитированием
Старый 13.10.2012, 09:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А что тут понимать?

Цитата:
1) Даны натуральное n и координаты точек на плоскости X1,Y1, X2,Y2, ..., Xn,Yn. Определить радиус наименьшего круга, с центром в начале координат, внутрь которого попадают все эти точки.
Школьная программа - расстояние от центра координат до точки. Радиус будет чуть превосходить максимальное из них.

Вторая почти аналог.
p51x вне форума Ответить с цитированием
Старый 13.10.2012, 10:13   #3
Dimon1989
 
Регистрация: 13.10.2012
Сообщений: 4
По умолчанию

Если бы я понял как их решать, я бы сюда не обратился за помощью...А что это школьные задачи я и так в курсе. Спасибо за напоминание.
Dimon1989 вне форума Ответить с цитированием
Старый 13.10.2012, 10:49   #4
Dimon1989
 
Регистрация: 13.10.2012
Сообщений: 4
По умолчанию

Поможет кто или нет смысла тут сидеть и ждать!...
Dimon1989 вне форума Ответить с цитированием
Старый 13.10.2012, 11:10   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

ну тогда и мой вариант задачи №1
Код:
{Delphi XE2}
program Project4;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;

type Tpoint = record
       x,y:double;
end;

Function dist(P:Tpoint):double;
begin
  result:=sqrt(sqr(p.x)+sqr(p.y));
end;

var r:double;
i,n:integer;
P:Tpoint;
begin
  try
    write('Введите N:');readln(n);
    r:=0;
    for i := 1 to N do
      Begin
        write('x=');readln(p.x);
        write('y=');readln(p.y);
        if dist(p)>r then r:=dist(p);
      End;
    writeln('радиус наименьшего круга=',r:6:2);
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
и №2
Код:
{Delphi XE2}
program Project4;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;

type Tpoint = record
       x,y:double;
end;

Function dist(P:Tpoint):double;
begin
  result:=sqrt(sqr(p.x)+sqr(p.y));
end;

var r:double;
i,n:integer;
P:Tpoint;
count:integer;
begin
  try
    count:=0;
    write('Введите R:');readln(r);
    write('Введите N:');readln(n);
    for i := 1 to N do
      Begin
        write('x=');readln(p.x);
        write('y=');readln(p.y);
        if dist(p)<=r then inc(count);
      End;
    writeln('количество точек, попадающих в круг радиуса ',r:6:2,' = ',count);
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 13.10.2012 в 11:30.
Mad_Cat вне форума Ответить с цитированием
Старый 13.10.2012, 11:10   #6
badnum23
Пользователь
 
Регистрация: 10.10.2012
Сообщений: 22
По умолчанию

1)
Код:
program Project2;

{$APPTYPE CONSOLE}

const
  MAX_N = 100;

var
  n, i: Integer;
  r,max: Real;
  a: array [1..MAX_N, 1..2] of Integer;

begin
  randomize;
  readLn(n);

  for i := 1 to n do
  begin
    a[i,1] := random(20) - 10;
    a[i,2] := random(20) - 10;
    writeLn(i, ' ', a[i,1]:4, ' ', a[i,2]:2);
  end;

  max := 0;
  for i := 1 to n do
  begin
    r := sqrt(sqr(a[i,1]) + sqr(a[i,2]));
    if r > max then
      max := r;
  end;

  writeLn('Min radius = ', max:5:5);

  readLn;
end.
2)
Код:
program Project2;

{$APPTYPE CONSOLE}

const
  MAX_N = 100;

var
  n, i, rad, k: Integer;
  a: array [1..MAX_N, 1..2] of Integer;

begin
  randomize;
  readLn(n);

  for i := 1 to n do
  begin
    a[i,1] := random(20) - 10;
    a[i,2] := random(20) - 10;
    writeLn(i, ' ', a[i,1]:4, ' ', a[i,2]:2);
  end;

  readLn(rad);

  k := 0;
  for i := 1 to n do
    if sqrt(sqr(a[i,1]) + sqr(a[i,2])) < rad then
      Inc(k);

  writeLn('Count = ', k);

  readLn;
end.
badnum23 вне форума Ответить с цитированием
Старый 13.10.2012, 13:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Поможет кто или нет смысла тут сидеть и ждать!...
ну, гораздо продуктивнее не сидеть и ждать (неизвестно, кстати, чего!), а взять и написать решение!
Тем более, что Вас сказали, как такую задачу решить.

поехали поэтапно.
1-е. на Delphi можно написать консольное приложение (доступны для ввода только read/readln, для вывода: write/WriteLn). а можно оконное (обычное окошко Windows) с контролами (полями отоображения и ввода данных.
Вы какое собираетесь писать?

2. Создать (описать) массив для хранения координат всех N точек Вы в состоянии?
Если да - описывайте. Если нет - почитайте литературу, поищите примеры...

3. Обеспечьте заполнение данного массива с координатами.
(начиная с использования генератора случ.чисел; ввода оператором вручную всех координат и заканчивая чтения заданных координат из файла (или Memo, например)).

4. Алгоритм поиска радуса следующий. Центр круга нам задан (напоминаю, что он находится в начале координат, т.е. это точка с координатами X=0 и Y=0).
В цикле от 1 до N перебирайте все свои точки и для каждой точки проверяйте, на каком расстоянии от центра (начала координат) данная точка находится. Расстояние определяется с помощью теоремы Пифагора: расстояние между двумя точками равно корню квадратному из сумму квадратов разниц координат по оси X и оси Y. в данном случае, т.к. вторая точка имеет нулевые координаты, то расстояние вычисляется по формуле:
Код:
  S := sqrt( sqr( x[i]) + sqr( y[i]));
в цикле ищите МАКСИМАЛЬНОЕ значение.
Этот ответ и даёт нужный радиус.
(p.s. при этом точки, максимально удалённые от центра, будут лежать на границе круга. Если это недопустимо (и все точки должны лежать внутри круга), увеличьте полученное расстояние на минимально допустимую по условиям задачи величину).

всё.


p.s. конечно, Вам можно воспользоваться готовыми решениями, коих Вам написали в избытке.
Но, по крайней мере, разберитесь, что же собственно делается в написанном коде!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.10.2012, 15:32   #8
Dimon1989
 
Регистрация: 13.10.2012
Сообщений: 4
По умолчанию

Спасибо большое за решение задач этим людям badnum23, Mad_Cat, а Serge_Bliznykov спасибо что объяснили как делать. Модератор можно закрывать тему. Всем еще раз спасибо большое.
Dimon1989 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Затрудняюсь определить названия этих компонентов Waqq Компоненты Delphi 1 01.12.2010 22:15
квадратная матрица затрудняюсь ангелочик Помощь студентам 1 18.11.2010 19:12
Затрудняюсь выбрать верные ответы(тесты). adimidoff Помощь студентам 0 28.10.2010 22:58
Затрудняюсь создать программу в VBA! Jenya92 Помощь студентам 0 24.10.2010 16:09