Инфоурок Информатика Научные работыПроектная работа конкурс МАН «Графическое решение уравнений в среде программирования Delphi»

Проектная работа конкурс МАН «Графическое решение уравнений в среде программирования Delphi»

Скачать материал

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

ЛУГАНСКОЙ НАРОДНОЙ РЕСПУБЛИКИ

МАЛАЯ АКАДЕМИЯ НАУК УЧАЩЕЙСЯ МОЛОДЕЖИ

 

 

 

 

Отделение (номинация): «Компьютерные науки»
Секция: «Информатика и кибернетика»

 

«Графическое решение уравнений в среде программирования Delphi»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Луганск – 2015

 

 

 

Содержание

ВВЕДЕНИЕ…………………………………………………………………….3

РАЗДЕЛ  1.Теоретическая часть проекта……………………………………4

РАЗДЕЛ 2.Создание программы «GRAPHICAL SOLUTION OF

EQUATIONS»  или «ГРУ»………………………………………8

ВЫВОДЫ………………………………………………………………..........17

СПИКОК ИСПОЛЬЗОВАНЫХ ИСТОЧНИКОВ………………………………..……………………………..18

 


 

ВВЕДЕНИЕ

В наше время очень актуальны разные сервисы для построения графиков

функций в двумерной  системе координат. Однако все они схожи меж собою,

и позволяют разве, что просто построить график, но не позволяют увидеть

закономерности построения функции(уравнения) на отдельно взятом промежутке.

Целью создания  программы является построение функции(уравнения) на данном промежутке  и определение

типа функции, шаблона по которому ее необходимо строить. А также список

координат  абсцисс точек удовлетворяющий данную функцию.

Задачей проекта является создание и разработка новой программы для использования  на основе построения графиков  и получения результатов

решения графических уравнений по школьным и ВУЗ программам.

Актуальность программы в ее простоте установки, в использовании и доступности. Также ведется разработка онлайн варианта программы (сайта).

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

РАЗДЕЛ 1.Теоретическая часть проекта

К примеру нам дано простейшее уравнение sqr(x)-2x-3=0.(Примечание sqr(x)=)

Попробуем решить его графическим способом. Перенесем все слагаемые, кроме sqr(x),   в правую часть уравнения :

 sqr(x)=2x+3

введем переменную y :

   =   y   =   2x + 3; построим графики полученных функций.

Рис 1.1

  Точки пересечения прямой   y = 2x+3   c параболой   y = x 2  
имеют координаты   (–1; 1)   и   (3; 9).   Абсциссы этих точек являются  
решением нашего квадратного уравнения:   x 1 = –1 ,   x 2 = 3 .  
       Проверим, подставив полученные решения в уравнение   x 2 – 2x – 3 = 0. 
              (−1) 2 – 2 • (−1) – 3 = 0    
   1 + 2 – 3 = 0   — верное числовое равенство.  
              3² – 2 • 3 – 3 = 0 
   9 – 6 – 3 = 0   — верное числовое равенство.    
          Значит, уравнение   x 2 – 2x – 3 = 0   имеет два решения:    
                                          x 1   =   –1 ,           x 2   =   3 .

         Все довольно просто, но вот как реализовать все это в программном коде?...

 

Все довольно просто, но вот как реализовать все это в программном коде?

В этом нам помогут библиотеки функций(в дальнейшем шаблоны функций).

Вот основные шаблоны функций которые я использовал:

Y=

Описание

x^n или p(x,n)

Возведение в степень: xn, например p(x,3) 

root(x,n)

Корень n-ой степени из x. Например: root(x,3) есть корень 3й степени из x.

sqrt()

Квадратный корень. Эквивалентно root(аргумент,2)

cbrt()

Кубический корень. Эквивалентно root(аргумент,3)

logn(x,a)

Логарифм x по основанию a

ln()

Натуральный логарифм (c основанием e)

lg()

Логарифм по основанию 10 (Десятичный логарифм), то же, что и logn(аргумент,10).

lb()

Логарифм по основанию 2

exp()

Экспоненциальная функция (e в заданной степени), эквивалентно e^аргумент

sin()

Синус

cos()

Косинус

tan()

Тангенс

cot()

Котангенс

sec()

Секанс, определяется как 1/cos()

csc()

Косеканс, определяется как 1/sin()

asin()

Арксинус

acos()

Арккосинус

atan()

Арктангенс

acot()

Арккотангенс

asec()

Арксеканс, обратный секанс

acsc()

Арккосеканс, обратный косеканс

sinh()

Гиперболический синус, синус

cosh()

Гиперболический косинус, косинус

tanh()

Гиперболический тангенс

coth()

Гиперболический котангенс

sech()

Гиперболический секанс

csch()

Гиперболический косеканс

asinh()

Гиперболический арксинус, функция обратная sinh()

acosh()

Гиперболический арккосинус, функция обратная cosh()

atanh()

Гиперболический арктангенс, функция обратная tanh()

acoth()

Гиперболический арккотангенс, функция обратная cotanh()

asech()

Гиперболический арксеканс, функция обратная sech()

acsch()

Гиперболический арккосеканс, функция обратная csch()

gaussd(x,среднее,сигма)

Нормальное распределение (Распределение Гаусса). Например gaussd(x,0,1) есть нормальное стандартное расперделение со средним значением 0 и стандартным отклонением 1.

min(число1,число2)

Вычисляет наименьшее из 2х значений

max(число1,число2)

Вычисляет наибольшее из 2х значений

round()

Округляет аргумент до целого значения

floor()

Округление вниз

ceil()

Округление вверх

abs() или | |

Модуль (абсолютное значение)

sgn()

Функция сигнум, определяет знак аргумента

sgn(x)  =  

 1 for x > 0

 0 for x = 0

-1 for x < 0

Rand

Случайное число от 0 до 1

 

         Попробуем создать алгоритм решения графических уравнений в программной среде:

Ввод уравнения   проверка наличия изначального «y» поиск шаблонов в левой части уравнения если находим их то присваиваем их переменной «y   поиск шаблонов в правой части уравнения если находим присваиваем значение «y

         В итоге у нас получается два уравнения.

Но как же нам построить сам график в Delphi?

Построение графика. Теория.
Для начала предлагаю немного теории. Мы собираемся писать процедуру построения графика функции на определенной поверхности, заданной свойством Canvas. Я предлагаю поставить оси координат в середине этой области, а график растянуть так, чтобы он растянулся на всю область. Строить мы будем методом lineto. Поэтому нам нужно определиться с шагом изменения величины аргумента. Я предлагаю взять его обратным к масштабу по оси ординат. Так наш график будет выглядеть плавно при любой функции и любом начальном и конечном значении абсциссы. Масштаб по оси абсцисс считается, отношение ширины поверхности к разнице максимального и минимального значения абсциссы. Масштаб по оси ординат считается аналогично: отношение высоты поверхности к разнице между максимальным и минимальным значениями данной функции на данном интервале.

После построения мы просто записываем точки пересечения данных графиков функций  отдельные переменные, а затем просто выводим абсциссы(x) данных точек.

Они и будут являться решением нашего уравнения.

 

РАЗДЕЛ  2.Создание программы «GRAPHICAL SOLUTION OF EQUATIONS»  или «ГРУ»

         Перейдем к практике:

Процедура DrawGraph


Код Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

 

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

Type TFunc = function (x: real): real;

 

procedure DrawGraph (f: TFunc; a: real; b: real; C: TCanvas);

 

var x, y, h: real;

 

    max, min: real;

 

    sx, sy: real;

 

    xmid, ymid: integer;

 

begin

 

sx := (c.ClipRect.Right)/(b-a);

 

 h := 1/sx;

 

 xmid := c.ClipRect.Right div 2;

 

 ymid := c.ClipRect.Bottom div 2;

 

 x := a;

 

 max := f( x);

 

 min := max;

 

 while x<=b do

 

  begin

 

   y := f( x);

 

   if y<min then min := y;

 

   if y>max then max := y;

 

   x := x + h;

 

  end;

 

 sy := c.ClipRect.Bottom/ (max-min);

 

 c.Brush.Color := clBlack;

 

 c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));

 

 c.Pen.Color := clYellow;

 

 c.MoveTo(0, ymid);

 

 c.LineTo(c.ClipRect.Right, ymid);

 

 c.MoveTo(xmid, 0);

 

 c.LineTo(xmid, c.ClipRect.Bottom);

 

 x := a;

 

 y := f(x);

 

 c.Pen.Color := clWhite;

 

 c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));

 

 while x<=b do

 

  begin

 

   y := f(x);

 

   c.LineTo(xmid+round(sx*x), ymid-round(sy*y));

 

   x := x + h;

 

  end;

 

end;

А теперь, если Вы чего-либо не поняли, давайте разберем этот код.



Код Delphi

1

Type TFunc = function (x: real): real;

Здесь я создал тип-функцию, для того, чтобы передавать в функцию построения графика можно было передавать имя функции в эту процедуру.


Код Delphi

1

procedure DrawGraph (f: TFunc; a: real; b: real; C: TCanvas);

Заголовок функции. Параметры: f – функция, график, которой будем строить. a – начальное значение переменной “x”. b – конечное значение переменной “x”. C – канва, на которой будем рисовать.


Код Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

sx := (c.ClipRect.Right)/(b-a);

 

 h := 1/sx;

 

 xmid := c.ClipRect.Right div 2;

 

 ymid := c.ClipRect.Bottom div 2;

 

 x := a;

 

 max := f( x);

 

 min := max;

 

 while x<=b do

 

  begin

 

   y := f( x);

 

   if y<min then min := y;

 

   if y>max then max := y;

 

   x := x + h;

 

  end;

 

 sy := c.ClipRect.Bottom/ (max-min);


В этом куске кода мы считаем масштабы по осям координат, и среднее значения высоты и ширины канвы, чтобы отобразить оси координат.


Код Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

c.Brush.Color := clBlack;

 

 c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));

 

 c.Pen.Color := clYellow;

 

 c.MoveTo(0, ymid);

 

 c.LineTo(c.ClipRect.Right, ymid);

 

 c.MoveTo(xmid, 0);

 

 c.LineTo(xmid, c.ClipRect.Bottom);


Здесь мы заливаем весь
TCanvas черным цветом и рисуем желтым цветом оси координат.


Код Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

 x := a;

 

 y := f(x);

 

 c.Pen.Color := clWhite;

 

 c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));

 

 while x<=b do

 

  begin

 

   y := f(x);

 

   c.LineTo(xmid+round(sx*x), ymid-round(sy*y));

 

   x := x + h;

 

  end;


Ну и, наконец, нарисовали график нужной нам функции.

Небольшой пример:

Положим на форму одну кнопку и один компонент TImage. Создадим обработчик функции OnClick для кнопки примерно следующего характера, и следующую функцию для расчета функции(уравнения)


Код Delphi:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Function f(x: real): real;

 

Begin

 

 Result := sin(x)*cos(x);

 

End;

 

 

procedure TForm1.Button1Click(Sender: TObject);

 

begin

 

 DrawGraph (f, -10, 10, Image1.Canvas);

 

end;

 

Ладно, с этим все понятно. А как узнать точки пересечения?

Нужно пройти по графику от начала до конца и с заданной точностью eps определить эти точки.

Вот пример кода:

 

x:=a;

n:=0;

while x<=b do

if abs(f1(x)-f2(x))<eps then

 begin

  inc(n);

  x1[n]:=x;

  y1[n]:=f1(x);

 end;

 

 

 

 


 

ВЫВОДЫ.

Разработанный мной проект позволит ускорить и облегчить процесс решения графических уравнений. Данная программа была установлена в компьютерном классе Стахановской гимназии №7, и апробирована среди учащихся 11 классов.

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

Ссылка на сайт будет указана в справочном окне программы.

Я считаю, что с поставленной  задачей я справился. Над улучшением и модернизацией этой программы я буду работать в дальнейшем. 

 


 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ:

http://www.cyberforum.ru

http://www.webmath.ru/web/function_library.php

 

 

 

        


 

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Проектная работа конкурс МАН «Графическое решение уравнений в среде программирования Delphi»"

Методические разработки к Вашему уроку:

Получите новую специальность за 3 месяца

Специалист по ипотечному кредитованию

Получите профессию

Копирайтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 665 120 материалов в базе

Скачать материал

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 06.02.2017 908
    • DOCX 72.2 кбайт
    • Оцените материал:
  • Настоящий материал опубликован пользователем Сидорова Анна Ивановна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Сидорова Анна Ивановна
    Сидорова Анна Ивановна
    • На сайте: 7 лет и 11 месяцев
    • Подписчики: 0
    • Всего просмотров: 30689
    • Всего материалов: 19

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Технолог-калькулятор общественного питания

Технолог-калькулятор общественного питания

500/1000 ч.

Подать заявку О курсе

Курс повышения квалификации

Особенности подготовки к сдаче ОГЭ по информатике и ИКТ в условиях реализации ФГОС ООО

36 ч. — 180 ч.

от 1700 руб. от 850 руб.
Подать заявку О курсе
  • Сейчас обучается 102 человека из 39 регионов
  • Этот курс уже прошли 806 человек

Курс повышения квалификации

Специфика преподавания информатики в начальных классах с учетом ФГОС НОО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 39 человек из 20 регионов
  • Этот курс уже прошли 284 человека

Курс повышения квалификации

Применение компьютерных моделей при обучении математике и информатике в рамках ФГОС ООО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 48 человек из 27 регионов
  • Этот курс уже прошли 179 человек

Мини-курс

Теория и практика инвестиций в контексте устойчивого развития

8 ч.

1180 руб. 590 руб.
Подать заявку О курсе

Мини-курс

Российское движение школьников (РДШ): воспитательная работа

3 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Этот курс уже прошли 12 человек

Мини-курс

Психология аддиктивного поведения

4 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 51 человек из 25 регионов
  • Этот курс уже прошли 32 человека