Страница 1 из 1

Построить на экране множество точек

Добавлено: 05 окт 2010, 22:17
Lange
Помогите,пожалуйста,с задачей:

Построить на экране множество точек, координаты которых удовлетворяют следующим неравенствам или системам неравенств:[ATTACH]1378[/ATTACH]
Логарифм я так преобразовала ln(2*x+y-2)/ln(1/3)>ln(y+1)/ln(1/3)

Re: Построить на экране множество точек

Добавлено: 06 окт 2010, 09:50
BBB
На самом деле, как мне кажется, все гораздо проще, чем кажется изнмчально.
Можно даже было не преобразовавать логарифм с основанием 1/3 к нартуральному. А вспомнить, что функция логарифма с основанием, меньшим единицы, является убывающей. Т.е. бОльшему значению аргумента соответствует мЕньшее значение функции.
Ну и помнить, что логарифм можно брать только от положительных чисел.

Поэтому условие
Log (1/3) (2*x+y-2)> Log (1/3)(y+1)

Преобразуется в набор трех неравенств:
(2*x+y-2) < (y+1) // !! здесь уже именно <, а не >
(2*x+y-2) > 0
(y+1) >0

Причем, первое упрощается (вычитаем y из обеих частей неравенства, переносим 2 направо и делим на 2 обе части) и получаем:
x < 3/2
2*x+y-2 > 0
y >1

Второе неравенство тоже преобразуется к линейному. Корень квадратный - функция возрастающая, и может браться от неотрицательного числа, т.е. второе неравенствао будет эквивалентно трем:
y-2*x-3 < 3-2*x
y-2*x-3 >=0
3-2*x >=0

Упрощая:
y < 6
y-2*x-3 >=0
x <= 3/2

Объдиняем эти две тройки и с учетом "поглощения" условия (x <= 3/2) более жестким (x < 3/2) получаем:

x < 3/2
2*x+y-2 > 0
y >1
y < 6
y-2*x-3 >=0

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

Re: Построить на экране множество точек

Добавлено: 06 окт 2010, 10:33
Lange
BBB писал(а):На самом деле, как мне кажется, все гораздо проще, чем кажется изнмчально.
Можно даже было не преобразовавать логарифм с основанием 1/3 к нартуральному. А вспомнить, что функция логарифма с основанием, меньшим единицы, является убывающей. Т.е. бОльшему значению аргумента соответствует мЕньшее значение функции.
Ну и помнить, что логарифм можно брать только от положительных чисел.

Поэтому условие
Log (1/3) (2*x+y-2)> Log (1/3)(y+1)

Преобразуется в набор трех неравенств:
(2*x+y-2) < (y+1) // !! здесь уже именно <, а не >
(2*x+y-2) > 0
(y+1) >0

Причем, первое упрощается (вычитаем y из обеих частей неравенства, переносим 2 направо и делим на 2 обе части) и получаем:
x < 3/2
2*x+y-2 > 0
y >1

Второе неравенство тоже преобразуется к линейному. Корень квадратный - функция возрастающая, и может браться от неотрицательного числа, т.е. второе неравенствао будет эквивалентно трем:
y-2*x-3 < 3-2*x
y-2*x-3 >=0
3-2*x >=0

Упрощая:
y < 6
y-2*x-3 >=0
x <= 3/2

Объдиняем эти две тройки и с учетом "поглощения" условия (x <= 3/2) более жестким (x < 3/2) получаем:

x < 3/2
2*x+y-2 > 0
y >1
y < 6
y-2*x-3 >=0

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

Спасибо,сейчас попробую написать программу)

Re: Построить на экране множество точек

Добавлено: 06 окт 2010, 11:19
Lange
У меня так получилось, правильно или нет?

Код: Выделить всё

uses crt,graph;
const
  x0=320;
  y0=240;
  p=20;
  k=10;
var
  d, m, i, j:integer;
  x, y:real;
  s:string;
procedure osi;
begin
  line(x0-p*k,y0,x0+p*k,y0);
  line(x0,y0-p*k,x0,y0+p*k);
  for i:=1 to k*2 do
    line((x0-p*k)+p*(i-1),y0-k,(x0-p*k)+p*(i-1),y0+k);
  for i:=2 to k*2+1 do
    line(x0-k,(y0-p*k)+p*(i-1),x0+k,(y0-p*k)+p*(i-1));
  line(x0,y0-p*k,x0-k,(y0-p*k)+k);
  line(x0,y0-p*k,x0+k,(y0-p*k)+k);
  line((x0+p*k),y0,(x0+p*k)-k,y0-k);
  line((x0+p*k),y0,(x0+p*k)-k,y0+k);
  for i:=1 to k*2+1 do
    begin
      if i<>k+1 then
        begin
          str(i-(k+1),s);
          outtextxy((x0-p*k)+p*(i-1)-3,y0+10,s);
          str(k+1-i,s);
          outtextxy(x0+15,(y0-p*k)+p*(i-1)-3,s)
        end
      else
    end;
  outtextxy((x0-p*k)+p*k+3,y0+8,'0');
  outtextxy(540,y0,'x');
  outtextxy(x0,15,'y')
end;
begin
  clrscr;
  d:=detect;
  initgraph(d, m, '');
  osi;
  for i:=1 to 639 do
    for j:=1 to 479 do
      begin
        x:=(i-320)/p;
        y:=(j-240)/(-p);
        if (x<3/2)and(2*x+y-2>0)and(y>1)and(y<6)and(y-2*x-3>=0) then
          putpixel(i, j, 1)
      end;
  readkey;
  closegraph
end.

Re: Построить на экране множество точек

Добавлено: 06 окт 2010, 15:29
BBB
Результат-то (т.е. картинка), наверное, будет правильным. Только, если это "учебная задача", не знаю, этого ли хочет преподаватель или нет :) Т.е., возможно, требуется не перебирать все точки и проверять для каждой выполение неравенств (в этом случае логарифмы и корни можно было бы и вообще не упрощать). Или, быть может, идея как раз в том, чтобы нарисовать прямые (или, формально точнее говоря, полуплоскости), уравнения которых задаются полученными неравенствами.

Re: Построить на экране множество точек

Добавлено: 06 окт 2010, 16:37
Lange
Насколько я правильно поняла задание,нужно было сделать именно так,хотя не совсем уверена...Ну да ладно,завтра увидим :)
Большое спасибо за помощь,очень благодарна ;)