постоение графика 1/x

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
itwork
Сообщения: 79
Зарегистрирован: 28 дек 2006, 15:20

люди помогите построить график 1/x !
т.e. как его построить чтоб он выглядел по человечески ?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

C учетом того, что сам график уходит в бесконечность как вдоль оси Х так и по У при Х >> 0 необходимо выбирать небольшой диапазон вблизи точки Х=0. Если чертим на экране, на плоскости, к примеру - 640х480 точек соотношение минимального и максимального значений функций не должно быть больше 480:1. Т.е. при максимальном Х = 10, и при шаге = 0.1 это соотношение равно (1/0.1) / (1/10) = 100:1 - считаю необходимым выбрать диапазон [-10:10] и шаг 0.1

Для помощи в написании программы нужно указать среду разработки.
It's a long way to the top if you wanna rock'n'roll
itwork
Сообщения: 79
Зарегистрирован: 28 дек 2006, 15:20

ну а как написать ето на паскале :confused:
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Неоптимальный вариант:

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

var x:real;
begin
 x:=0.01;
 while x<5 do
begin
  line(round(100*x),round(100/x),round(100*(x+0,01)),round(100/(x+0,01))); 
  x:=x+0,01
end;
end.
Инициализацию графического режима здесь объяснять не буду
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Для помощи в написании программы нужно указать среду разработки.
Если Паскаль, то:

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

uses Graph, Crt;
Const
MaxX = 10;
Step = 0.05;
XRes = 640;
YRes = 480;

var
Driver, mode: Integer;
X, KX, KY: Real;
Value : Integer;
FirstStep : boolean;

begin
Driver := Detect;
Mode := 2;
InitGraph(Driver, Mode, '');
MoveTo(0, YRes div 2);
LineTo(XRes, YRes div 2);
MoveTo(XRes div 2, 0);
LineTo(XRes div 2, YRes);
FirstStep := true;
KY := YRes/(1/Step)/2;
KX := XRes/MaxX*2;
x := -MaxX;
While x<=10 do
	begin
        If round(x/step) = 0 then FirstStep := true
        	 else 	begin
                        Value := trunc(1/x * KY);
		 	If FirstStep then
        			begin
                		FirstStep := false;
                		MoveTo(XRes div 2 + trunc(X*KX), YRes div 2 - Value);
                                end else LineTo(XRes div 2 + trunc(X*KX), YRes div 2 - Value);
                        end;
        X := X + step;
        end;
Readkey;
CloseGraph;
end.
It's a long way to the top if you wanna rock'n'roll
itwork
Сообщения: 79
Зарегистрирован: 28 дек 2006, 15:20

somewhere спасибо!
Ответить