Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.06.2010, 22:10
zk91 zk91 вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 2
Репутация: 10
По умолчанию Вопрос по задаче с графиком функции

Здравствуйте! Вопрос такой, имеется решенная задача
"Написать процедуру DrawUserFunc (x1,x2,y1,y2:Real; Func: FuncToDraw), которая с помощью стандартной процедуры вывода Write выводит экран консоли размером MX=80 символов и MY=25 строк график функции Func на интервале [x1,x2] со значениями в диапазоне [y1,y2]. Для вычисления произвольной функции определить пользовательский тип FuncToDraw."
Код:
program laba3;
{$APPTYPE CONSOLE}
uses
  SysUtils, Math;

const
  MAX_X=80;
  MAX_Y=25;

type
  FuncToDraw = function (x:real):real;
  Func=function (x:real):real;

Var
     A,B: real;
     N:integer;
  per:array [1..100] of real; //f1=f2
  k:integer;//количество совпадений
  i:integer;


//функции
function func1(x:real):real;
  begin
    func1:=Tan(2*x)/x;
  end;
function func2(x:real):real;
  begin
    func2:=Sqrt(abs(2*x*x-4*x-5));
  end;

//функция интегрирования
Function Integral ( A,B:Real; N:integer; F:Func):real;
{ A,B - пределы интегрирования, N - количество интервалов, F - интегрируемая функция }
var
     S,X,H:real;
Begin
     H:= (B-A)/N;// Н - шаг интегрирования
     S:=(F(A)+F(B))/2;
  X:=A+H;
     While x <= B do
       Begin
            S:= S + F(x);
      x:=x+H;
       End;
     Result:=S*H;
End;


//процедура вывода графиков
procedure DrawUserFunc(x1,x2,y1,y2:real; Func1,func2: FuncToDraw);
var x,y:integer;
    f1,f2,xcur :real;
begin
    for y:=1 to MAX_Y do begin
      for x:=1 to MAX_X do begin
        //вычислить текущую координату
        xcur:=x1+(x-1)*(x2-x1)/(MAX_X-1);
        f1:= Func1(xcur); f2:= Func2(xcur);  //вычислить значение функций в текущей позиции
        //проверка
        if  (y = MAX_Y-round((MAX_Y-1)*(f1-y1)/(y2-y1))) and (y = MAX_Y-round((MAX_Y-1)*(f2-y1)/(y2-y1))) then begin
          write ('*');
          k:=k+1;
          per[k]:=xcur;
        end
        else
          if (y = MAX_Y-round((MAX_Y-1)*(f1-y1)/(y2-y1))) or (y = MAX_Y-round((MAX_Y-1)*(f2-y1)/(y2-y1)))  then write ('*')
            else
              if x = 1 - round(x1 * (MAX_X-1) / (x2-x1)) then write ('|')
              else
                if y = MAX_Y + round(y1 * (MAX_Y-1)/(y2-y1)) then write ('-')
                else write (' ');
      end;
    end;
end;



begin
  Writeln('vvedite A,B,N');
  Readln(A,B,N);
  Writeln ('integral F1 = ', Integral(A,B,N, Func1):7:7);
     Writeln ('integral F2 = ', Integral(A,B,N, Func2):7:7);
  writeln;
  writeln;

  k:=0;
  DrawUserFunc(-10,10,-10,30,func1,func2);
  writeln;
  if k=0 then writeln('tochek perese4eniya net')
  else begin
    writeln('f1=f2 esli x:');
    for i:=1 to k do
      writeln(per[i]:2:2);
  end;
  
 readln;
end.
не могу решить дополнительный вопрос к задаче :
1.Модифицировать процедуру DrawUserFunc так чтобы в первом столбце выводились значения по оси Oy, а в последней строке – значения по оси Ox.
Заранее благодарен!
Ответить с цитированием
  #2  
Старый 06.06.2010, 22:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

непонятно.
попробуй привести пример того, что должна выдавать функция.
Ответить с цитированием
  #3  
Старый 06.06.2010, 22:41
zk91 zk91 вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
непонятно.
попробуй привести пример того, что должна выдавать функция.
Полагаю, типо такого,разлиновка:

http://pikucha.ru/474861
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025