Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Нужна помощь в решении двух задач (http://www.tehnari.ru/f43/t53812/)

Andrei_F 27.06.2011 18:39

Нужна помощь в решении двух задач
 
Добрый день. Необходима помощь в решении двух задач. С остальными справился, но с этими двумя большие затруднения.
1) Даны координаты x[ i ], y[ i ] (i = 1, . . ,n) точек (n<=100) A[ 1 ], . . ,A[ n ] на плоскости. Найти минимальную площадь кольца с центром в начале координат. Внутри и на границе находятся точки, расположенные на расстоянии от начала координат не более чем на r (r-задано).
2) Сформировать массив y=(y[ i , j ]) размера n*n (n<=20), элементы которого вычисляются по формуле y=((-1)^ i+j)*(z^i+j)/((i*j)!), где z-заданное число.
Или хотя бы разъяснение как их решить на языке Паскаль. Заранее благодарен.

Vladimir_S 27.06.2011 21:02

Цитата:

Сообщение от Andrei_F (Сообщение 544679)
Добрый день. Необходима помощь в решении двух задач. С остальными справился, но с этими двумя большие затруднения.
1) Даны координаты x[ i ], y[ i ] (i = 1, . . ,n) точек (n<=100) A[ 1 ], . . ,A[ n ] на плоскости. Найти минимальную площадь кольца с центром в начале координат. Внутри и на границе находятся точки, расположенные на расстоянии от начала координат не более чем на r (r-задано).

Писать программу не буду, задачка - элементарная, сами справитесь. Итак:
1. Все точки располагаются внутри круга заданного радиуса - переобозначим его для удобства Rmax. Эта величина дана.
2. Требуется найти расстояние до наиболее близкой к началу координат точки. Обозначим это расстояние Rmin. Делается это так:
а) Строим массив r[i] = корень квадратный из (x[i]^2 + y[i]^2).
б) Стандартной процедурой находим минимальный элемент полученного массива. Он и будет искомым значением Rmin.
3. Находим площадь кольца: S=Pi*(Rmax^2 - Rmin^2).
Всё!

Цитата:

2) Сформировать массив y=(y[ i , j ]) размера n*n (n<=20), элементы которого вычисляются по формуле y=((-1)^ i+j)*(z^i+j)/((i*j)!), где z-заданное число.
Или хотя бы разъяснение как их решить на языке Паскаль. Заранее благодарен.
Тут я прежде всего хочу заметить, что если Вы не напутали и в знаменателе действительно находится (i*j)!, то Ваши преподы - люди не без юмора. По моим оценкам, при i=j=n=20 указанная величина (400!) выражается где-то 800-значным числом. Лихо... Но, впрочем, Паскаль способен такое перемолоть, только тут надо аккуратно с форматами. В остальном же задачка никаких сложностей не представляет:
Код:

VAR
 Y:Array[1..20,1..20] of Extended;
 Z:Real;
 N:Byte;
 i,j:Integer;

function Nfact(n:LongInt):Extended;
VAR
  i:LongInt;
  fact:Extended;
BEGIN
  IF n=0 THEN fact:=1 ELSE
    BEGIN
      fact:=1;
      FOR i:=1 TO n DO
        fact:=fact*i;
    END;
  Nfact:=fact;
END;

Function Sign(M:Byte):ShortInt;
begin
 If (M mod 2) = 0 then Sign:=1 else Sign:=-1;
end;

function X2np(X:Extended; n:WORD):Extended;
Var i:WORD;
    Y:Extended;
BEGIN
  IF n=0 THEN X2np:=1 ELSE
  IF n=1 THEN X2np:=X ELSE
  BEGIN
    Y:=X;
    FOR i:=2 TO n DO Y:=Y*X;
    X2np:=Y;
  END;
END;

BEGIN
 Write('N (<21) = ');
 Readln(N);
 Write('Z= ');
 Readln(Z);
 For i:=1 to N do
  For j:=1 to N do
  begin
    Y[i,j]:=(Sign(i)+j)*(X2np(Z,i)+j)/Nfact(i*j);
    Writeln('Y[',i:2,',',j:2,']= ',Y[i,j]);
  end;
 Readln
END.


Andrei_F 27.06.2011 21:59

Спасибо огромное вам за помощь.


Часовой пояс GMT +4, время: 04:17.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.