Построение графика функции в алфавитно-цифровом или графическом режиме

 

Пусть нужно вывести на алфавитно-цифровой экран монитора график функции y= f(x) в заданном диапазоне изменения аргумента х от а до b с числом точек графика n (n£25). Перед выводом графика нужно напечатать вычисленные значения yi в виде таблицы, также напечатать наибольшее и наименьшее значения функции f(x).

Рассмотрим решение этой задачи на конкретном примере:

. Число точек графика равно 20.

Примем ширину поля графика w, равной 61 позиции. Отступим от левого края экрана на m= 10 позиций. Для вывода строки графика выделим символьный массив С, состоящий из (w+m) элементов, т.е. 71 элемента. Масштаб по оси х примем равным шагу h при перемещении на одну строку. Масштаб по оси y выберем таким, чтобы максимально использовать поле графика w. Для это необходимо вычислить

 

ymax = max {yi} и ymin = min{yi}

i    i

Определим масштаб my по формуле:

где ] [ - целая часть выражения; 0.5 добавлено для округления до ближайшего целого.

Масштаб my означает, что при каждом изменении значения функции на величину my символ, изображающий точку на графике, смещается в очередную позицию по строке.

По вычисленным значениям ymin и my определим номер позиции k, в которой изображается ось 0x:

Для определения номера l позиции в строке, в которой надо изобразить значение yi, воспользуемся формулой

.

Для вывода собственно графика в цикле в очередной строке, соответствующей значениям аргумента xi и функции yi, выведем символ ‘I’ в позиции с номером k и символ ‘*’ в позиции с номером l (при l = k в данной позиции следует выводить символ ‘*’).

Схема алгоритма решения задачи имеет вид:

 

       Начало                                              11

 

     1 a, b, n

       w, m                                                        12

                                                                             Ck =’I’

2 Заполнение

       массива С                                                13 Заголовок

       пробелами    

 

                                                                      14 i = 1, n           

3 h =                                                    

       ymax=-105                                              15

       ymin =+105

       x = a

                                                                       16C l = `*`

 

  4 i = 1, n                                                17 печать                                

                                                                             массива C

    5 yi = f(x)                       

          6 yi> ymax     нет                                                18 C l = ` `   

           да                     8 yi< ymin     нет                          

          7          ymax=yi                  да               нет 19 k = l

                   9 ymin= yi                                                     да     

                                                           20 C l = `I`

     10 x = x + h                                                                                     конец

Пояснения. В блоке 2 символьный массив С заполняется пробелами. Блоки 3-10 организуют вычисление текущего значения функции yi = f(xi), запоминание вычисленных значений yi  в массиве y, состоящем из n элементов, вычисления наибольшего и наименьшего значений функции на заданном интервале изменения – аргумента x. В блоках 11-12 вычисляется масштаб my графика по оси y, номер k позиции в строке графика, соответствующий оси 0х, и осуществляется присваивание k-тому элементу массива c символа I.

Вычисление номера l в строке, соответствующей точке графика, занесение в l -й элемент массива c символа ‘*’ и печать символьного массива c реализуется блоками 15-17; восстановление символьного массива c в исходное состояние – блоками 18-20.

Программа, реализующая схему алгоритма, имеет вид:

PROGRAM GRAFIK;

CONST W = 61; M = 10;

VAR

Y: ARRAY [1..25] OF REAL;

C: ARRAY [1..71] OF CHAR;

K, L, N, I, J: INTEGER;

A, B, H, Y MAX, Y MIN, X, MY: REAL;

BEGIN

WRITELN (¢ ВВЕДИТЕ A, B, N¢);

READ (A, B, N);

Y MAX = -1E4; YMIN:=+1E4;

H: = (B-A)/N;

FOR I:=1 TO 71 DO C [ I ]: = ¢ ¢;

X: = A;

FOR I: = 1 TO N DO

BEGIN

Y[ I ]: = SIN(X)/X;

IF Y [I ] > Y MAX THEN Y MAX: = Y [I ];

IF Y [I ] < Y MIN THEN Y MIN: = Y [I ];

X: = X+H;

END;

MY:=ROUND((YMAX-YMIN)/W+0.5);

K:=ROUND (ABS(YMIN)/MY+0.5)+M;

C[K]:= ¢I ¢;

WRITELN (¢ГРАФИК ФУНКЦИИ Y=SIN(X)/X ¢);

WRITELN (¢ …………………………………¢);

FOR I:=1 TO N DO

BEGIN

L:=ROUND ((Y[ I ]- YMIN)/MY+0.5)+M;

C[ L]: = ¢ *¢;

FOR J: = 1 TO 71 DO

WRITE (C[J]);

WRITELN (¢  ¢);

C[ L]: = ¢ ¢;

IF K =L THEN C [ L ]:= ¢I¢;

END;

END.

 

ввод:

a=0.1

b=2.5

n=40




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: