Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построить график функции посредством паскаля 
V
    Опции темы
Dobermann
Дата 23.8.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Дана зависимость  . Величина x изменяется от -10 до 10 с ша-гом 0,05. 
Вот решение:
Код

uses crt, graph;
var dr, m: integer;
    xe,ye,xen,xek,yen, yek, i: integer;
    xs,ys,kdx,kdy,kt: integer;
    x,y,xn,yn,xk,yk,mx,my,hx,hdx, hdy: real;
    xst, yst: string [5];
    t : real;
begin
    dr := detect;
    initgraph (dr,m,'c:\bp\bgi');
{границы графика}
    xn:=-10;
    xk:=10;
    yn:=-1.5;
    yk:=1.5;
{границы окна}
    xen:=100;
    xek:=600;
    yen:=400;
    yek:=50;
{шаги разметки и количество делений}
    hdx:=2.5;
    hdy:=0.5;
    kdx := round ((xk-xn)/hdx+1);
    kdy := round ((yk-yn)/hdy+1);
    rectangle (xen,yek,xek,yen);
{масштабные коэффициенты для х и у}
    mx:=(xk-xn)/(xek-xen);
    my:=(yk-yn)/(yen-yek);
{координаты осей}
    xs := round (xen+(0-xn)/mx);
    ys := round (yen-(0-yn)/my);
    setcolor (14);
    line (xen,ys,xek,ys);
    line (xs,yen,xs,yek);
{разметка по оси х}
    x:=xn;
    for i:=1 to kdx do
    begin
      xe := round (xen+(x-xn)/mx);
      str (x:5:2,xst);
      line (xe,yen,xe,yen+5);
      outtextxy (xe-20,yen+10,xst);
      x:=x+hdx;
    end;
{разметка по оси у}
    y:=yn;
    for i:=1 to kdy do
    begin
      ye := round (yen-(y-yn)/my);
      str (y:5:2,yst);
      line (xen,ye,xen-5,ye);
      outtextxy (xen-50,ye-4,yst);
      y:=y+hdy;
    end;
{собственно сам график}
    x:=xn;
    hx:=0.05;
    repeat
       begin
         y := sin(x);
         xe := round (xen+(x-xn)/mx);
         ye := round (yen-(y-yn)/my);
         putpixel (xe,ye,14);
         x:=x+hx;
      end;
    until x>=xk;
 readln;
 closegraph;
end.

Но теперь надо построить график вот этой функции: 
f(t)=cos(5*t/2)/tg(3*t)
Величина t изменяется от 0 до 150 с шагом 0,1.
Вот с этим я не могу никак справиться!!  smile  smile  smile 
help 

PM   Вверх
volvo877
Дата 23.8.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Dobermann, поиграйся со значениями hdx и hdy:
Код
uses crt, graph;

function f(t: real): real;
const eps = 0.0001;
begin
  t := t * pi / 180;

  if abs(sin(3 * t)) < eps then f := 0
  else f := sqr(cos(5*t/2)) / sin(3*t);
end;

var dr, m: integer;
    xe,ye,xen,xek,yen, yek, i: integer;
    xs,ys,kdx,kdy,kt: integer;
    x,y,xn,yn,xk,yk,mx,my,hx,hdx, hdy: real;
    xst, yst: string [5];
    t : real;
begin
    dr := detect;
    initgraph (dr,m,'');

    xn:=0;
    xk:=150;
    yn:=-15;
    yk:= 15;

    xen:=100;
    xek:=600;
    yen:=400;
    yek:=50;

    hdx:=15;
    hdy:=0.75;
    kdx := round ((xk-xn)/hdx+1);
    kdy := round ((yk-yn)/hdy+1);
    rectangle (xen,yek,xek,yen);

    mx:=(xk-xn)/(xek-xen);
    my:=(yk-yn)/(yen-yek);

    xs := round (xen+(0-xn)/mx);
    ys := round (yen-(0-yn)/my);
    setcolor (14);
    line (xen,ys,xek,ys);
    line (xs,yen,xs,yek);

    x:=xn;
    for i:=1 to kdx do
    begin
      xe := round (xen+(x-xn)/mx);
      str (x:5:2,xst);
      line (xe,yen,xe,yen+5);
      outtextxy (xe-20,yen+10,xst);
      x:=x+hdx;
    end;

    y:=yn;
    for i:=1 to kdy do
    begin
      ye := round (yen-(y-yn)/my);
      str (y:5:2,yst);
      line (xen,ye,xen-5,ye);
      outtextxy (xen-50,ye-4,yst);
      y:=y+hdy;
    end;

    x:=xn + 0.1;
    hx:=0.1;
    repeat
       begin
         y := f(x);
         xe := round (xen+(x-xn)/mx);
         ye := round (yen-(y-yn)/my);
         putpixel (xe,ye,14);
         x:=x+hx;
      end;
    until x>=xk;
 readln;
 closegraph;
end.

PM MAIL   Вверх
Dobermann
Дата 23.8.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Вооо!!! Спасибо  smile  smile  smile  smile  smile 

volvo877 - ты могучий человек!!!
/me жалкий школьник =)

Добавлено через 3 минуты и 59 секунд
Блин, а я затупил, без подпрограммы для заданной функции делал...33 раза ошибся при построении и задании графика!!!
Спасибо мэн!!! 
PM   Вверх
volvo877
Дата 24.8.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Стоп, стоп smile Я немного ошибся в функции, надо переписать ее:

Код
function f(t: real): real;
const eps = 0.0001;
begin
  t := t * pi / 180;
  if abs(sin(3*t)) < eps then f := 0
  else f := (cos(5*t/2) * cos(3*t)) / sin(3*t);
end;
Чувствуешь разницу? Я почему-то стал возводить cos(5t/2) в квадрат, а напрасно, аргументы-то у косинусов разные smile
PM MAIL   Вверх
Dobermann
Дата 24.8.2008, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



 smile  smile  smile  smile  smile 
PM   Вверх
Dobermann
Дата 24.8.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



CLOSED 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.