Реферат

Реферат Численные методы решения задачи нахождения температуры

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.12.2024



СОДЕРЖАНИЕ

  1. Введение.......................................................................................................

  2. Аналитические методы решения уравнений в частных производных...

  3. Численные методы решения уравнений матфизики................................

    1. Метод конечных разностей...............................................................

    2. Метод конечных элементов..............................................................

  1. Дискретизация расчетной области.............................................................

  2. Формирование матрицы неизвестных температур системы линейных уравнений......................................................................................................................

  3. Построение изотерм.....................................................................................

    1. Нахождение температур в любой точке.............................................

    2. Алгоритм построения изотерм............................................................

  1. Характеристика программы........................................................................

  2. Результаты программы................................................................................

  3. Список используемой литературы.............................................................

  4. Приложение..................................................................................................

    1. Листинг программы...........................................................................

1. ВВЕДЕНИЕ
В настоящее время мы наблюдаем широкое применение математических методов в самые различные сферы человеческой деятельности. Это не только технические и экономические науки, где эти методы давно стали главенствующими при исследовании изучаемых процессов или явлений, но и развивающиеся сейчас прикладные науки управления: менеджмент, социально–экономическое прогнозирование, теория оптимального управления и т.д. Математизация различных областей знания сегодня, математическое моделирование как инструмент познания завоёвывает всё новые позиции в различных областях деятельности человека.

Большинство физических законов природы можно сформулировать на языке дифференциальных уравнений с частными производными. Производные в этих уравнениях появляются, потому что они описывают важнейшие физические величины: скорость, ускорение, силу, температуру, трение и т.д. Таким образом, возникают уравнения в частных производными, содержащие неизвестную функцию, которую необходимо определить. Изучением математических моделей физических явлений, описываемых уравнениями в частных производных, занимается математическая физика.

В данной курсовой работе рассматривается одно из самых важных уравнений матфизики – уравнения Лапласа на примере решения задачи Дирихле в заданной плоской области.

Многие установившиеся процессы сводятся к уравнениям Лапласа.

(1)

Ставится задача о нахождении стационарного распределения температуры внутри многоугольника, если задано распределение температуры вдоль его сторон.

Одна из главных трудностей, возникающих при решении этой задачи, обусловлена сложной формой границы расчетной области. Аналитическое решение задачи Дирихле для уравнения (1) удается получить лишь в частных случаях для простейших областей (прямоугольник, круг сектор, шар). Основными методами решения поставленной задачи являются численные методы.

2. АНАЛИТИЧЕСКИЕ МЕТОДЫ РЕШЕНИЯ В ЧАСТНЫХ ПРОИЗВОДНЫХ
Существует целый арсенал методов для решения уравнений в частных производных. Перечислим некоторые из них:

1) Метод разделения переменных

Уравнение с частными производными с n переменными сводится к n обыкновенным дифференциальным уравнениям. Существует множество разнообразных по форме областей, для которых можно в явном виде выписать решение задачи Дирихле для уравнения Лапласа. Например, для прямоугольника.

(рис. 1).



Рис.1 Прямоугольник с температурами на границе



где An , Bn, Cn, Dn – коэффициенты Фурье функций f1(x),f2(x),f3(y),f4(y) равные









2)Метод конформных отображений

Существует способ решения в областях со сложной границей. Этот способ основан на конформных отображениях (рис. 2).



Рис.2 Конформные отображения

При таком отображении уравнение Лапласа в плоскости z переходит снова в уравнение Лапласа, в координатной плоскости w не меняется.

После того, как решение получено в простой области, достаточно подставлять в это решение выражения: u=u(x,y), v=v(x,y) и мы получим решения исходной задачи.

3)введение новой переменной

Исходное уравнение преобразуется к другому уравнению с частными производными для другой неизвестной функцией, которая решается легче, чем исходная.

4)Метод преобразования координат

Исходное уравнение сводится к более простому уравнению в новой системе координат.

5)Вариационные методы

Вместо уравнения с частными производными решается некоторая задача минимизации. Оказывается, что функция, доставляющая минимум некоторому выражению, является решением исходного уравнения.

6)Метод интегральных уравнений

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

3. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ УРАВНЕНИЙ МАТФИЗИКИ
3.1. МЕТОД КОНЕЧНЫХ РАЗНОСТЕЙ
Для численного решения задач математической физики обычно применяется метод конечных разностей или метод сеток. К сеточным методам относятся те, в которых разыскивается таблица приближенных значений искомой функции в некоторой совокупности точек, называемой сеткой. Отдельные точки называются узлами сетки. Уравнения, которые служат для определения приближенного решения, называют сеточными. Основания для выбора сетки и для получения сеточных уравнений отличают один сеточный метод от другого.

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

Пусть на плоскости (x, y) задана область D, ограниченная замкнутой кривой L (рис.3). Рассмотрим задачу Дирихле для уравнения Лапласа

(2)

Для решения задачи (2) методом конечных разностей надо в области D+L построить сетку и аппроксимировать на этой сетке уравнение и краевое условие. Искомая функция определяется её значением в узлах сетки.

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



Рис.3 Область D

Используя понятие частной производной, можно записать для малых шагов h1 и h2 (рис.3).



Тогда







В случае квадратной сетки уравнение (2) для нулевого элемента будет иметь вид:



Там, где узлы прямоугольной сетки не являются равноотстоящими, применяют следующие вычислительные шаблоны (рис. 4):



Рис.4 Сетка с разными длинами шага





Уравнение (2) будет иметь вид



Так как вычислительные шаблоны связывают лишь несколько соседних узлов, то матрица коэффициентов системы линейных уравнений для определенных узловых неизвестных оказывается “разряженной”, т.е. содержит много нулевых элементов.
3.2. МЕТОД КОНЕЧНЫХ ЭЛЕМЕНТОВ
Метод конечных элементов (МКЭ) впервые был применен для численного решения дифференциальных уравнений в частных производных в середине 50-х годов ХХ столетия и с тех пор завоевал широкую популярность. О распространении МКЭ можно судить, что в одной из книг было приведено более 7 тыс. ссылок, содержащих указания на его применение в различных областях науки и техники.

Основная идея МКЭ состоит в том, что область расчета делится на конечное число элементов произвольной геометрической формы, и для каждого элемента рассматриваются так называемые базисные , принимающие значения, равные 1 в i-м узле элемента и нулевые во всех других узлах.

Тогда значение искомой функции внутри элемента выражаются через узловые неизвестные в виде:



Наиболее распространенными конечными элементами для двумерных задач являются треугольные элементы с линейными базисными функциями (S – площадь треугольника) (рис. 5):



Рис.5 Треугольник с площадью для расчета МКЭ







Положительное значение площади S обеспечивается нумерацией вершин треугольника против часовой стрелки. Проверим выполнение условия: , если m=n и , если .

Если ввести обозначения













Пусть область расчета D c границей Г покрыта треугольными элементами. Вершины, расположенные внутри области, определяют узловые неизвестные. Для их определяют систему линейных уравнений (рис. 6):



Рис.6 Область D c границей Г

,

где - значения искомой функции в узле j, а коэффициент определяется следующим интегралом:



Внутреннее суммирование ведётся по всем внутренним узлам, принадлежащим k-му элементу, а внешнее – по всем элементам, содержащим узел j. В рассматриваемой системе уравнений число неизвестных равно числу уравнений.

Для треугольных элементов







Матрица коэффициентов системы МКЭ для треугольного элемента будет иметь вид :



Получим коэффициенты системы МКЭ для прямоугольного элемента. Пусть в вершинах 1, 2 и 3 равностороннего треугольника известны значения , и функции, удовлетворяющей условию Лапласа. Центр треугольника соединили с вершинами. Составим систему линейных уравнений МКЭ для этого узла.

Если , то внутри треугольника на прямой



значение функции . Здесь







МКЭ является одним из наиболее эффективных численных методов решения краевых задач. Но, как и любой метод, он имеет свои недостатки. Так, точность полученных значений зависит от триангуляции области. Количество выбранных треугольников, их вид и расположение могут влиять на точность полученных значений. Особенно это относится к решению краевых задач в областях с угловыми точками.

Невозможно дать общие рекомендации по триангуляции произвольной области. Существуют различные способы повышения точности при использовании МКЭ. Один из них – использование нелинейных конечных элементов и элементов специального вида для более точной аппроксимации границы области расчета и искомой функции.

При решении трехмерной задачи Дирихле для уравнения Лапласа



МКЭ область обычно делятся на элементы с линейными базисными функциями (тетраэдры) (рис.7).



Рис.7 Тетраэдр

(i=1,2,3,4)

Неизвестные коэффициенты ,, и определяется из условия , если m=n и , если .

Коэффициенты системы линейных уравнений МКЭ определяется по формуле



Даже с умеренным числом элементов система МКЭ может иметь несколько тысяч неизвестных. Иногда бывает трудно разделить область только на элементы такого типа. Из-за этого тетраэдральные элементы часто смешивают с шестигранными элементами (“кирпичиками”). Для этих элементов базисные функции имеют вид:

(i=1, 2,…, 8)
4. ДИСКРЕТИЗАЦИЯ РАСЧЕНТНОЙ ОБЛАСТИ
В моей курсовой дано решить задачу Дирихле для уравнения Лапласа с координатами области. А(-3,0), B(0,3), C(3,3), D (5,-2).(рис. 8) Решить эту задачу можно используя метод сеток, заключающихся в том, чтобы область покрыть сеткой, и написать уравнение Лапласа для него – сеточное уравнение.



Рис.8 Расчетная область

Для того чтобы применить сеточный метод на области, необходимо построить её дискретизацию, обрисовать область базисной фигурой (в нашем случае, это прямоугольник) (рис. 9).



Рис.9 Дискретизация расчетной области прямоугольной сеткой

Для того чтобы применить сеточный метод, необходимо обрезать внешние края области (рис. 10).



Рис.10 Дискретизация расчетной области прямоугольной сеткой

Согласно сеточному методу, после её дискретизацию, необходимо пронумеровать область с целью создания системы линейных уравнений. По моему мнению, нумерацию удобно применить так: сперва, пронумеровать внутренние точки (области пересечения фигур, покрывающих данную область, внутри него), затем – граничные точки, с целью упрощения алгоритма построения программы на ЭВМ (рис. 11).



Рис.11 Нумерация расчетной области

5. ФОРМИРОВАНИЕ МАТРИЦЫ НЕИЗВЕСТНЫХ ТЕМПЕРАТУР СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ
После нумерации сетки области перейдем к следующему этапу в методе сеток – формирование системы линейных уравнений с неизвестными температурами.

Так как нам ставится задача найти температуру во внутренней точки области, то её решение кроется в том, чтобы составить эту систему. Каждая внутренняя точка области имеет рядом стоящие точки, которые сформирует её.

В методе сеток строится квадратная матрица размерности, равная числу внутренних точек (узлы сетки). И она строится так: узлы прямоугольной сетки не являются равноотстоящими, применяют следующие вычислительные шаблоны

(рис. 12):



Рис.12 Сетка с разными длинами шага



,

где - неизвестные температуры.

Общее уравнение для внутреннего узла будет иметь вид



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

В другую матрицу размерности 1 на количество свободных элементов переносятся значения свободных элементов – элементов внутренней области. И получившиеся 2 матрицы решаются методом Гаусса.

Метод Гаусса состоит в том, чтобы матрицы системы привести к треугольному виду. Это достигается последовательностью исключением неизвестных из уравнений системы. Сначала с первого исключаем второе неизвестное, затес со второго – третье, и т.д. Это процесс называется прямым ходом Гаусса, и он продолжается пока исключится последний элемент системы , то есть приведётся к треугольному виду.

Другой процесс – обратный ход метода Гаусса состоит в последовательном вычислении искомых неизвестных: решая последнее уравнение, находим значении последнего элемента системы. Далее находим значение предпоследнего элемента. Последним найдем 1 неизвестный элемент.

Точность при этом очень высока, так как метод Гаусса – прямой метод. Но возникает проблема в том, что матрица покрыта 0, и эта система считается другими методами, но точность желает знать наилучшего результата. Поэтому выбирается оптимальное количество неизвестных (в нашем случае, температур), при котором достигается более высокая точность нахождения температур в любой точке.
6. ПОСТРОЕНИЕ ИЗОТЕРМ
6.1. НАХОЖДЕНИЕ ТЕМПЕРАТУР В ЛЮБОЙ ТОЧКЕ
Наша область обустроена прямоугольниками и треугольниками. Для того чтобы вычислить температуру в любой его точки, нужно проверить к какой фигуре принадлежит точка.

Рассмотрим алгоритм нахождения температуры в треугольнике. Для того чтобы решить задачу (принадлежит ли данная точка треугольнику?), надо сосчитать общую площадь треугольника, и затем площади треугольников, получившихся после соединения каждой вершины с заданной точкой. Если площади треугольника и треугольников, полученных после объединения, совпадают с заданной точностью, то точка принадлежит этому треугольнику, иначе – нет.

Зная координаты трех вершин (x1, y1), (x2, y2), (x3, y3) и их температуры, мы можем вычислить следующую систему:



После её решения мы получим коэффициенты a, b и с – полином. Записывая координаты точки в него, мы найдем температуру в этой точке.

Другим методом решения задачи нахождения неизвестной температуры в треугольнике является написание коэффициента .

Строятся базисные функции (рис. 13):



Рис.13 Треугольник с площадью для расчета температуры в любой его точке




,

где S – площадь треугольника, и его можно вычислить следующим образом:



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



Рассмотрим алгоритм нахождения температуры в прямоугольнике. Для того чтобы решить задачу (принадлежит ли данная точка прямоугольнику?), нужно знать координаты 4-x вершин (x1,y1), (x2,y2), (x3,y3), (x4,y4) , если

x>=x1, y>=y1, y<=y3, x<=x3 (3)

(рис. 14). Точка (x,y) принадлежит прямоугольнику, если выполняется условие (3), иначе – нет.



Рис.14 Прямоугольник для расчета температуры в любой его точке

Для того чтобы вычислить температуру в точке нужно вычислить по следующей формуле:




6.2. АЛГОРИТМ ПОСТРОЕНИЯ ИЗОТЕРМ
Нам дана область и разбита сетка на узлы, мы можем построить изотерму. Каждый узел в моей сетки состоит из отрезков. И эти отрезки будут нас интересовать.

Пусть даны 2 узла (x1,y1), (x2,y2) и их температуры. Для того чтобы решить задачу (принадлежит ли данная температура отрезку?), надо сравнить их температуры, если данная температура находится ,то найдется точка с этой данной температурой T (рис. 15).



Рис. 15 Вычисление температуры на отрезке

Наша T (температура) изменяется по линейному закону .

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





Проходя все отрезки области, мы получим таблицу значений координат данной области для заданной температуры. По этой таблице построим точки, соединим прямой линией и получим теоретическую изотерму.
7. ХАРАКТЕРИСТИКА ПРОГРАММЫ
Представленная программа служит для решения задачи Дирихле для уравнения Лапласа. Она написана на языке Турбо Паскаль, работает на платформе DOS, требует аппаратной поддержки видеостандарта EGAVGA (640х480х16 цветов), около 2,25 Мб оперативной памяти.

Её возможности – для данной курсовой работы представить графическую интепритацию дискретизации; составления таблиц полученных значений температур во внутренних и внешних узлах данной области; для удобства создана папка DATA, в которой содержится текстовый документ Result.txt (при сохранении документов возникает вероятность запутаться в нахождении файла, а здесь – папка, которая выделяется на общем фоне); удобным выставлением информации о полученных температурах в любой точке области; графической инициализацией и отсортированным по координате X значений, определяющих теоретическую изотерму, с возможностью графического сравнения её с реальной.

Структура программы проста - использование 1 – для дискретизации области, 2 – для получения данных о температуре в любой точки области, 3 – для получения данных по изотермам. При использовании программы используем 1, затем 2 для получения полного доступа к программе из-за проведения определенных расчетов для области с целью наилучшего восприятия информации. Для перемещения по вычислениям используется любая клавиша.

Теперь перейдем к более подробному описанию программы: в 1 пункте – четыре рисунка дискретизации области, вывод температуры во внутренних и внешних точках области, сообщением о создании файла с результатами, полученных при вычислениях; во 2 пункте вы вводите координату точки, через некоторое мгновение появится температура внутри области и оценкой с реальной температурой, в противном случае – о некорректности введенных параметрах; в 3 пункте – постройка изотермы выполняется при вводе температуры, затем добавляются координаты точек, имеющих эту температуру, и её графическая интепритация с возможностью проверки – рисованием линии, отражающую реальную картину.

8. РЕЗУЛЬТАТЫ ПРОГРАММЫ
Моя программа позволяет вывести следующие параметры: температура во внутренних и внешних узлах сетки приведены в таблице 1, выведением информации о температуре в любой его точке, результаты построения изотерм.

1) температура во внутренних и внешних узлах сетки

Таблица 1

Температура во внутренних и внешних узлах сетки

N

x

y

T

P (%)

1

0.0

2.0

-6.00

0

2

1.0

2.0

-5.00

0

3

2.0

2.0

-2.00

-3.6e-12

4

3.0

2.0

3.00

0

5

-1.0

1.0

-2.00

3.6E-12

6

0.0

1.0

-2.00

7.3E-12

7

1.0

1.0

0.00

4.5E-12

8

2.0

1.0

4.00

7.3E-12

9

3.0

1.0

10.00

2.9E-11

10

-2.0

0.0

0.00

2.3E-13

11

-1.0

0.0

-1.00

1.8E-12

12

0.0

0.0

0.00

1.7E-12

13

1.0

0.0

3.00

0

14

2.0

0.0

8.00

0

15

3.0

0.0

15.00

1.5E-11

16

4.0

0.0

24.00

2.9E-11

17

2.0

-1.0

10.00

1.5E-11

18

3.0

-1.0

18.00

0

19

4.0

-1.0

28.00

0

20

-3.0

0.0

3.00

0

21

-2.0

1.0

0.00

0

22

-1.0

2.0

-5.00

0

23

0.0

3.0

-12.00

0

24

1.0

3.0

-12.00

0

25

2.0

3.0

-10.00

0

26

3.0

3.0

-6.0

0

27

3.4

2.0

5.6

0

28

3.8

1.0

16.2

0

29

4.0

0.5

21.3

0

30

4.2

0.0

26.0

0

31

4.6

-1.0

35.0

0

32

5.0

-2.0

43.0

0

33

4.0

-1.8

29.7

0

34

3.0

-1.5

18.8

0

35

2.0

-1.3

10.2

0

36

1.0

-1.0

4.0

0

37

0.0

-0.8

0.2

0

38

-1.0

-0.5

-1.3

0

39

-2.0

-0.3

-0.3

0

2) выведением информации о температуре в любой его точке

Нахождение температуры в любой точке области

Введите x:0.5

Введите y:0.6
T=-0.000 t(точная)=-0.010

Относительная погрешность =100.00 %

при x=0.500 y=0.600

3) результаты построения изотерм (рис. 16, рис.17)



Рис.16 Изотерма T=1



Рис.17 Изотерма T=6

9. СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. А.А.Самарский. Введение в численные методы – М.: Наука. Главная редакция физико-математической литературы, 1982. – 272 с.

  2. Ж. Кнуцман. Численные методы. Перевод с франц./ Под редакцией Д. П. Костырова. Главная редакция физико-математической литературы, 1979. – 160 с.

  3. В.М. Вержбицкий. Численные методы (линейная алгебра и нелинейные уравнения): Учебное пособие для вузов. – М.: Высшая школа, 2000. – 266 с.: ил.

  4. Л.И. Турчак. Основы численных методов. Учебное пособие. – М.: Наука. Главная редакция физико-математической литературы, 1987. – 320 с.

10. ПРИЛОЖЕНИЕ

10.1.Листинг программы

Program Kursach;

uses CRT,Graph;

type masik=array [1..19,1..20] of real;

function gx(x:real;mx:integer):integer;

begin

gx:=trunc(mx*x)+trunc(getmaxx/2);

end;

function gy(y:real;my:integer):integer;

begin

gy:=trunc(getmaxY/2)-Trunc(my*y);

end;

procedure L(x1,y1,x2,y2,color:integer);

begin

setcolor(color);

line(x1,y1,x2,y2);

end;

procedure init_graph;

var

grDriver: Integer;

grMode: Integer;

ErrCode: Integer;

begin


grDriver := Detect;

InitGraph(grDriver, grMode,'');

ErrCode := GraphResult;

if ErrCode <> grOk then

begin

writeln ('ne syshestvyet!!');

exit;

end;

end;

procedure ris;

begin

L (gx(-7,50),gy(0,50),gx(7,50),gy(0,50),2);

L (gx(0,50),gy(3,50),gx(-3,50),gy(0,50),2);

L (gx(5,50),gy(-2,50),gx(-3,50),gy(0,50),2);

L (gx(5,50),gy(-2,50),gx(3,50),gy(3,50),2);

L (gx(3,50),gy(3,50),gx(0,50),gy(3,50),2);

L (gx(-7,50),gy(0,50),gx(7,50),gy(0,50),15);

L (gx(0,50),gy(-7,50),gx(0,50),gy(7,50),15);

L (gx(-7,50),gy(0,50),gx(7,50),gy(0,50),15);

setcolor (12);

outtextxy (gx(-0.3,50),gy(3.3,50),'B(0,3)');

outtextxy (gx(-3.5,50),gy(-0.3,50),'A(-3,0)');

outtextxy (gx(2.7,50),gy(3.3,50),'C(3,3)');

outtextxy (gx(4.5,50),gy(-2.05,50),'D(5,-2)');

outtextxy (gx(2.55,50),gy(-3.4,50),'Cледующее->любая клава!!!');

setcolor (15);

outtextxy (gx(6.2,50),gy(-0.1,50),'X');

outtextxy (gx(0.1,50),gy(4.45,50),'Y');

setcolor (11);

outtextxy (gx(-6.2,50),gy(-0.1,50),'-6');

outtextxy (gx(-5.2,50),gy(-0.1,50),'-5');

outtextxy (gx(-4.2,50),gy(-0.1,50),'-4');

outtextxy (gx(-3.2,50),gy(-0.1,50),'-3');

outtextxy (gx(-2.2,50),gy(-0.1,50),'-2');

outtextxy (gx(-1.2,50),gy(-0.1,50),'-1');

outtextxy (gx(0.1,50),gy(-0.1,50),'0');

outtextxy (gx(0.95,50),gy(-0.1,50),'1');

outtextxy (gx(1.95,50),gy(-0.1,50),'2');

outtextxy (gx(2.95,50),gy(-0.1,50),'3');

outtextxy (gx(3.95,50),gy(-0.1,50),'4');

outtextxy (gx(4.95,50),gy(-0.1,50),'5');

outtextxy (gx(5.95,50),gy(-0.1,50),'6');

outtextxy (gx(0.1,50),gy(4.05,50),'4');

outtextxy (gx(0.1,50),gy(3.05,50),'3');

outtextxy (gx(0.1,50),gy(2.05,50),'2');

outtextxy (gx(0.1,50),gy(1.05,50),'1');

outtextxy (gx(0.1,50),gy(-1.05,50),'-1');

outtextxy (gx(0.1,50),gy(-2.05,50),'-2');

outtextxy (gx(0.1,50),gy(-3.05,50),'-3');

outtextxy (gx(0.1,50),gy(-4.05,50),'-4');

end;

procedure setka;

var h,t:integer;

begin

for t:=-7 to 7 do

L (gx(t,50),gy(7,50),gx(t,50),gy(-7,50),5);

for h:=-7 to 7 do

L (gx(-7,50),gy(h,50),gx(7,50),gy(h,50),5);

end;

procedure dizkretizaciya;

begin

L (gx(-2,50),gy(1,50),gx(-2,50),gy(-0.25,50),8);

L (gx(-1,50),gy(2,50),gx(-1,50),gy(-0.5,50),8);

L (gx(0,50),gy(3,50),gx(0,50),gy(-0.75,50),8);

L (gx(1,50),gy(3,50),gx(1,50),gy(-1,50),8);

L (gx(2,50),gy(3,50),gx(2,50),gy(-1.25,50),8);

L (gx(3,50),gy(3,50),gx(3,50),gy(-1.5,50),8);

L (gx(4,50),gy(0.5,50),gx(4,50),gy(-1.75,50),8);

L (gx(1,50),gy(-1,50),gx(4.6,50),gy(-1,50),8);

L (gx(-3,50),gy(0,50),gx(4.2,50),gy(0,50),8);

L (gx(-2,50),gy(1,50),gx(3.8,50),gy(1,50),8);

L (gx(-1,50),gy(2,50),gx(3.4,50),gy(2,50),8);

end;

procedure linia;

begin

init_graph;

ris ;

outtextxy(gx(-3.25,50),gy(3.9,50),'Постройка фигуры');

outtextxy(gx(-3.25,50),gy(3.8,50),'----------------');

readkey;clrscr;clearviewport;

setka;

ris;

outtextxy(gx(-4.25,50),gy(3.9,50),'Постройка сетки шаг=1');

outtextxy(gx(-4.25,50),gy(3.8,50),'---------------------');

readkey;

clrscr;

cleardevice;

ris;

outtextxy(gx(-6.25,50),gy(3.9,50),'Постройка дискретизации области шаг=1');

outtextxy(gx(-6.25,50),gy(3.8,50),'-------------------------------------');

dizkretizaciya;

readkey;

clrscr;

clearviewport;

ris;

outtextxy(gx(-6.3,50),gy(3.9,50),'Постройка дискретизации области шаг=1');

outtextxy(gx(-6.3,50),gy(3.8,50),'-------------------------------------');

outtextxy(gx(-6.3,50),gy(3.7,50),' внутренние/внешние точки');

outtextxy(gx(-6.3,50),gy(3.6,50),' ------------------------');


dizkretizaciya;


setcolor(6);

outtextxy(gx(-0.1,50),gy(2.2,50),'1');

outtextxy(gx(0.9,50),gy(2.2,50),'2');

outtextxy(gx(1.9,50),gy(2.2,50),'3');

outtextxy(gx(2.9,50),gy(2.2,50),'4');

outtextxy(gx(-1.1,50),gy(1.2,50),'5');

outtextxy(gx(-0.1,50),gy(1.2,50),'6');

outtextxy(gx(0.9,50),gy(1.2,50),'7');

outtextxy(gx(1.9,50),gy(1.2,50),'8');

outtextxy(gx(2.9,50),gy(1.2,50),'9');

outtextxy(gx(-2.1,50),gy(0.2,50),'10');

outtextxy(gx(-1.1,50),gy(0.2,50),'11');

outtextxy(gx(-0.1,50),gy(0.2,50),'12');

outtextxy(gx(0.9,50),gy(0.2,50),'13');

outtextxy(gx(1.9,50),gy(0.2,50),'14');

outtextxy(gx(2.9,50),gy(0.2,50),'15');

outtextxy(gx(3.7,50),gy(0.2,50),'16');

outtextxy(gx(1.9,50),gy(-0.8,50),'17');

outtextxy(gx(2.9,50),gy(-0.8,50),'18');

outtextxy(gx(3.9,50),gy(-0.8,50),'19');


outtextxy(gx(-3.2,50),gy(0.2,50),'20');

outtextxy(gx(-2.2,50),gy(1.2,50),'21');

outtextxy(gx(-1.2,50),gy(2.2,50),'22');

outtextxy(gx(-0.3,50),gy(3.1,50),'23');


outtextxy(gx(0.8,50),gy(3.2,50),'24');

outtextxy(gx(1.8,50),gy(3.2,50),'25');

outtextxy(gx(3.1,50),gy(3.1,50),'26');


outtextxy(gx(3.5,50),gy(2.1,50),'27');

outtextxy(gx(3.9,50),gy(1.2,50),'28');

outtextxy(gx(4.1,50),gy(0.6,50),'29');

outtextxy(gx(4.3,50),gy(0.2,50),'30');

outtextxy(gx(4.65,50),gy(-0.9,50),'31');

outtextxy(gx(5.012,50),gy(-1.8,50),'32');


outtextxy(gx(3.95,50),gy(-1.85,50),'33');

outtextxy(gx(2.95,50),gy(-1.55,50),'34');

outtextxy(gx(1.95,50),gy(-1.35,50),'35');

outtextxy(gx(-0.1,50),gy(-0.8,50),'37');

outtextxy(gx(0.95,50),gy(-1.07,50),'36');

outtextxy(gx(-1.1,50),gy(-0.6,50),'38');

outtextxy(gx(-2.1,50),gy(-0.3,50),'39');


readkey;

closegraph;

end;

type mas1=array[1..19] of real;

var

A:masik;

B:mas1;

i,j:integer;

{***************************************************}

{Решение системы хранится в массиве В }

procedure GAUS(n:integer;var A:masik; var B:mas1);

var

l,k:integer;

r,buf:real;

begin

l:=0;

FOR i:=1 TO n do

begin

k:=i;

R:=ABS(A[i, i]);

for j:=i+1 to n do

if ABS(A[j, i])>=R then

begin

k:=j;

R:=ABS(A[j, i]);

end;

IF R = 0 THEN begin l:=1; i:=n+1; end;

IF k<>i THEN

begin

buf:=B[k];

b[k]:=B[i];

b[i]:=buf;

FOR j:=i TO n do

begin

buf:=A[k, j];

a[k,j]:=a[i, j];

a[i,j]:=buf;

end;

end;

R:=A[i, i]; B[i]:=B[i]/R;

FOR j:=i TO n do A[i, j]:=A[i, j]/R;

FOR k:=i+1 TO n do

begin

R:=A[k, i];

B[k]:=B[k]-R*B[i];

FOR j:=i TO n do A[k, j]:=A[k, j]-R*A[i, j];

end;

end;

IF l=1 THEN

begin

WriteLn('Система не имеет решений');

exit;

end;

FOR i:=n-1 DOWNTO 1 do

FOR j:=i+1 TO n do B[i]:=B[i]-A[i, j]*B[j];

WriteLn('Решение системы:');

FOR i:=1 TO n do Writeln(' ',B[i]:7:5);

writeln (' Следующее->любая клава!!!');

end;

procedure treygol(t1,t2,t3,x1,y1,x2,y2,x3,y3,x,y:real);

var

S1,g,S2,S3,D,Sl,lippa,a,b,c,S,T:real;

begin

s1:=abs(x*(y2-y3)-y*(x2-x3)+x2*y3-x3*y2);

s2:=abs(x1*(y-y3)-y1*(x-x3)+x*y3-x3*y);

s3:=abs(x1*(y2-y)-y1*(x2-x)+x2*y-x*y2);

D:=s1+s2+s3;

SL:=abs(x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2);

if abs(sl-d)<=0.0001

then begin

S:=x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2;

a:=((x-x3)*(y2-y3)-(y-y3)*(x2-x3))/s;

b:=((x-x1)*(y3-y1)-(y-y1)*(x3-x1))/s;

c:=((x-x2)*(y1-y2)-(y-y2)*(x1-x2))/s;

T:=a*T1+b*T2+c*T3;

lippa:=sqr(x)-x*y-sqr(y)+2*x-y;

clrscr;writeln;writeln;

writeln (' T=',T:3:3,' t(точная)=',lippa:3:3);

if (lippa=0) then

writeln(' Относительная погрешность =',abs(T-lippa)*100:1:2,' %')

else

writeln(' Относительная погрешность =',abs((T-lippa)/lippa)*100:1:2,' %');

writeln (' при x=',x:3:3,' y=',y:3:3);

end

else exit;

end;

procedure isk_k(t1,t3,t4,x1,y1,x3,y3,x4,y4,x,y:real);

var

tkv,lippa,hx,hy,dl,x2,y2,t2:real;

begin

hx:=x3-x4;hy:=y3-y1;

dl:=1/(hx*hy);

y2:=y1;x2:=x1+hx;

t2:=sqr(x2)-x2*y2-sqr(y2)+2*x2-y2;

if (x>=x1) and (y>=y1) and (y<=y3) and (x<=x3) then begin

tkv:=dl*((x-x2)*(y-y4)*t1-(x-x1)*(y-y4)*t2+(x-x1)*(y-y1)*t3-(x-x2)*(y-y1)*t4);

lippa:=sqr(x)-sqr(y)-x*y+2*x-y;

clrscr;writeln;writeln;

writeln (' T=',Tkv:3:3,' t(точная)=',lippa:3:3);

if (lippa=0) then

writeln(' Относительная погрешность =',abs(tkv-lippa)*100:1:2,' %')

else

writeln(' Относительная погрешность =',abs((tkv-lippa)/lippa)*100:1:2,' %');

writeln (' при x=',x:3:3,' y=',y:3:3);

end

else exit;

end;

function tconstx(t0,x1,y1,t1,x2,y2,t2:real):real;

var x0,y0:real;

begin

if ((t0>t1) and (t0t2))then begin

x0:=(x2-x1)/(t2-t1)*t0-(t1*x2-t2*x1)/(t2-t1);

tconstx:=x0;

end

else tconstx:=-100;

end;

function tconsty(t0,x1,y1,t1,x2,y2,t2:real):real;

var x0,y0:real;

begin

if ((t0>t1) and (t0t2))then begin

y0:=(y2-y1)/(t2-t1)*t0-(t1*y2-t2*y1)/(t2-t1);

tconsty:=y0;

end

else tconsty:=-100;

end;

procedure kvadrat(t1,t2,t3,t4,x1,y1,x2,y2,x3,y3,x4,y4,x,y:real);

var

tkv,lippa:real;

begin

if (x>=x1) and (y>=y1) and (y<=y3) and (x<=x3) then begin

tkv:=(x-x2)*(y-y4)*t1-(x-x1)*(y-y4)*t2+(x-x1)*(y-y1)*t3-(x-x2)*(y-y1)*t4;

lippa:=sqr(x)-sqr(y)-x*y+2*x-y;

clrscr;writeln;writeln;

writeln (' T=',Tkv:3:3,' t(точная)=',lippa:3:3);

if (lippa=0) then

writeln(' Относительная погрешность =',abs(Tkv-lippa)*100:1:2,' %')

else

writeln(' Относительная погрешность =',abs((Tkv-lippa)/lippa)*100:1:2,' %');

writeln (' при x=',x:3:3,' y=',y:3:3);

end

else exit;

end;

type ma=array[1..120,1..2] of real;

type mp=array[1..5000] of real;

type mx=array[1..50,1..2] of real;

type md=array[1..100,1..2] of real;

procedure pryamougol(vib:integer);

label G,g1,g2,g3,g4;

var

i,j,n,k,k1,kf,k5,L,k2,k3,k4:integer;

f,ff:integer;

xx,yy,h1x0,y0,buf,buf1,buf2,h1,h2,h3,h4,kf1,kf2,kf3,kf4:real;

m,mi,mix:^mx;

p,pr:^ma;

w,wx1:^mp;

st:string;

x:array [1..39] of real;

y:array [1..39] of real;

t:array [1..39] of real;

pogr:array [1..19] of real;

pogr_2:array [1..19] of real;

a:masik; my:text;tt:real;

tabl:array [1..19,1..5] of byte;

r:array [1..19,1..5] of byte;

begin

if (vib=1) then

begin

linia;

clrscr;

for i:=20 to 39 do

begin

if (i>=20) and (i<=23)

then begin

x[i]:=i-23;y[i]:=x[i]+3;

end;

if (i>=24) and (i<=26)

then

begin

x[i]:=i-23;y[i]:=3;

end;

if (i>=27) and (i<=28)

then

begin

y[i]:=29-i;x[i]:=(y[i]-10.5)/-2.5;

end;

if i=29 then

begin

x[i]:=4;y[i]:=-2.5*x[i]+10.5;

end;

if (i>=30) and (i<=32)

then begin

y[i]:=30-i;x[i]:=(y[i]-10.5)/-2.5;

end;

if (i>=33) and (i<=39) then

begin

x[i]:=37-i;y[i]:=-0.25*x[i]-0.75;

end;

t[i]:=sqr(x[i])-x[i]*y[i]-sqr(y[i])+2*x[i]-y[i];

end;

k:=0;

for j:=5 downto 1 do begin

yy:=-2+j;

for i:=1 to 8 do begin

xx:=-3+i;

if (yy<3) and (yy>-0.25*xx-0.75) and (yy<-2.5*xx+10.5) and (yy
begin

k:=k+1;x[k]:=xx;y[k]:=yy;

end;end;end;

gotoxy (2,2);

write('Внутренние-внешние точки');

gotoxy (2,3);

write (' --------------------------------------');

gotoxy (2,4);

write (' | N | x | y | T | P |');

gotoxy (2,5);

write (' --------------------------------------');

for i:=1 to 19 do begin

gotoxy(3,i+5);write ('| ',i);

gotoxy(10,i+5);write('|');

gotoxy(13,i+5);write (x[i]:1:1);

gotoxy(19,i+5);write('|');

gotoxy(22,i+5);write (y[i]:1:1);

gotoxy(28,i+5);write('| * | * |');

end;

gotoxy(2,25);

write(' --------------------------------------');

gotoxy(41,2);

writeln(' --------------------------------------');

gotoxy(41,3);

writeln(' | N | x | y | T | P |');

gotoxy(41,4);

writeln(' --------------------------------------');

for i:=20 to 39 do begin

gotoxy(41,i-15);

write(' | ',i);

gotoxy(49,i-15);write('|');

gotoxy(52,i-15);

write(x[i]:1:1);

gotoxy(56,i-15);write('|');

gotoxy(59,i-15);

write(y[i]:1:1);

gotoxy(65,i-15);write('|');

gotoxy(68,i-15);

write(t[i]:1:1);

gotoxy(75,i-15);write('|');

gotoxy(76,i-15);

write(' 0 |');

end;

gotoxy(41,25);

write(' --------------------------------------');

gotoxy(3,26);

write(' Следующее->любая клава!!!');

readkey;

clrscr;

for i:=1 to 19 do

b[i]:=0;

for i:=1 to 19 do tabl[i][1]:=i;

tabl[1][2]:=22;tabl[1][3]:=2;tabl[1][4]:=23;tabl[1][5]:=6; {+}

tabl[2][2]:=1;tabl[2][3]:=3;tabl[2][4]:=24;tabl[2][5]:=7;

tabl[3][2]:=2;tabl[3][3]:=4;tabl[3][4]:=25;tabl[3][5]:=8;

tabl[4][2]:=3;tabl[4][3]:=27;tabl[4][4]:=26;tabl[4][5]:=9;

tabl[5][2]:=21;tabl[5][3]:=6;tabl[5][4]:=22;tabl[5][5]:=11;

tabl[6][2]:=5;tabl[6][3]:=7;tabl[6][4]:=1;tabl[6][5]:=12;

tabl[7][2]:=6;tabl[7][3]:=8;tabl[7][4]:=2;tabl[7][5]:=13;

tabl[8][2]:=7;tabl[8][3]:=9;tabl[8][4]:=3;tabl[8][5]:=14;

tabl[9][2]:=8;tabl[9][3]:=28;tabl[9][4]:=4;tabl[9][5]:=15;

tabl[10][2]:=20;tabl[10][3]:=11;tabl[10][4]:=21;tabl[10][5]:=39;

tabl[11][2]:=10;tabl[11][3]:=12;tabl[11][4]:=5;tabl[11][5]:=38;

tabl[12][2]:=11;tabl[12][3]:=13;tabl[12][4]:=6;tabl[12][5]:=37;

tabl[13][2]:=12;tabl[13][3]:=14;tabl[13][4]:=7;tabl[13][5]:=36;

tabl[14][2]:=13;tabl[14][3]:=15;tabl[14][4]:=8;tabl[14][5]:=17;

tabl[15][2]:=14;tabl[15][3]:=16;tabl[15][4]:=9;tabl[15][5]:=18;

tabl[16][2]:=15;tabl[16][3]:=30;tabl[16][4]:=29;tabl[16][5]:=19;

tabl[17][2]:=36;tabl[17][3]:=18;tabl[17][4]:=14;tabl[17][5]:=35;

tabl[18][2]:=17;tabl[18][3]:=19;tabl[18][4]:=15;tabl[18][5]:=34;

tabl[19][2]:=18;tabl[19][3]:=31;tabl[19][4]:=16;tabl[19][5]:=33;

for i:=1 to 19 do begin

for j:=1 to 19 do

a[i][j]:=0;

b[i]:=0;

end;

for i:=1 to 19 do

begin

k:=tabl[i,1];k1:=tabl[i,2];k2:=tabl[i,3];

k3:=tabl[i,4];k4:=tabl[i,5];

h1:=abs(x[k]-x[k1]);h2:=abs(x[k]-x[k2]);

h3:=abs(y[k]-y[k3]);h4:=abs(y[k]-y[k4]);

a[k,k]:=-(1/(h1*h2)+1/(h3*h4));

kf1:=1/(h1*(h2+h1));kf2:=1/(h2*(h1+h2));

kf3:=1/(h3*(h4+h3));kf4:=1/(h4*(h3+h4));

if k1>19 then

b[k]:=b[k]-kf1*t[k1]

else

a[k,k1]:=kf1;

if k2>19 then

b[k]:=b[k]-kf2*t[k2]

else

a[k,k2]:=kf2;

if k3>19 then

b[k]:=b[k]-kf3*t[k3]

else

a[k,k3]:=kf3;

if k4>19 then

b[k]:=b[k]-kf4*t[k4]

else

a[k,k4]:=kf4;

end;

for i:=1 to 19 do begin {+}

for J:=1 to 19 do

write(' ',a[i][j]:1:1);

writeln;end; writeln;

clrscr;

GAUS(19,a,b);

for I:=1 to 19 do t[i]:=b[i];

readkey;

clrscr;

for i:=1 to 19 do

pogr[i]:=x[i]*x[i]-x[i]*y[i]-y[i]*y[i]+2*x[i]-y[i];

for i:=1 to 19 do

pogr_2[i]:=b[i]-pogr[i];

gotoxy(2,2);

write('Внутренние-внешние точки');

gotoxy (2,3);

write ('--------------------------------------');

gotoxy (2,4);

write ('| N | x | y | T | P |');

gotoxy (2,5);

write ('--------------------------------------');

for i:=1 to 19 do begin

gotoxy(2,i+5);write ('| ',i);

gotoxy(7,i+5);write('|');

gotoxy(9,i+5);write (x[i]:1:1);

gotoxy(13,i+5);write('|');

gotoxy(16,i+5);write (y[i]:1:1);

gotoxy(20,i+5);write('|');

gotoxy(22,i+5);write(b[i]:1:2);

gotoxy(28,i+5);write('|');

gotoxy(30,i+5);write(pogr_2[i]:1);

gotoxy(39,i+5);write('|');

end;

gotoxy(2,25);

write('--------------------------------------');

gotoxy(41,2);

writeln(' --------------------------------------');

gotoxy(41,3);

writeln(' | N | x | y | T | P |');

gotoxy(41,4);

writeln(' --------------------------------------');

for i:=20 to 39 do begin

gotoxy(41,i-15);

write(' | ',i);

gotoxy(49,i-15);write('|');

gotoxy(52,i-15);

write(x[i]:1:1);

gotoxy(56,i-15);write('|');

gotoxy(59,i-15);

write(y[i]:1:1);

gotoxy(65,i-15);write('|');

gotoxy(68,i-15);

write(t[i]:1:1);

gotoxy(75,i-15);write('|');

gotoxy(76,i-15);

write(' 0 |');

end;

gotoxy(41,25);

write(' --------------------------------------');

gotoxy(3,26);

write(' Следующее->любая клава!!!');

readkey;clrscr;

writeln(' Создается Файл!!!');

writeln(' Создается фалй с вычислениями!!');

writeln(' Создана папка "DATA". Создан в нем "result.txt"');

{$I-}

MkDir('data');

if IOResult <> 0 then begin

Writeln('Такая "DATA" директория существует!!!');

writeln;

goto G;

end

else begin

writeln (' Создана папка "DATA"!!!');

G:

Assign(my,'data/result.txt');

rewrite(my);

writeln (my,' Номера вычислительных шаблонов');

writeln(my);

for i:=1 to 19 do begin

for j:=1 to 5 do write(my,' ',tabl[i][j]);

writeln(my);end;writeln (my,'Следующее->любая клава!!!');

writeln (my, ' Формирование системы:');

for i:=1 to 19 do begin {+}

for J:=1 to 19 do

write(my,' ',a[i][j]:1:4);

writeln(my);end; writeln(my);

for i:=1 to 19 do

write(my,' ',b[i]:1:1);writeln(my);

writeln (my,' Следующее->любая клава!!!');

writeln(my,' Внутренние и внешние точки');

writeln (my,'--------------------------------------');

writeln (my,'| N | x | y | T | P |');

writeln (my,'--------------------------------------');

for i:=1 to 19 do begin

write (my,i); write(my,' ');

write (my,x[i]:1:1); write(my,' ');

write (my,y[i]:1:1); write(my,' ');

write(my,b[i]:1:2); write(my,' ');

write(my,pogr_2[i]:1); write(my,' ');

writeln(my);

end;

writeln(my,' --------------------------------------');

writeln(my,' | N | x | y | T | P |');

writeln(my,' --------------------------------------');

for i:=20 to 39 do begin

write(my,' ',i);

write(my,' ');write(my,x[i]:1:1);

write(my,' ');write(my,y[i]:1:1);

write(my,' ');write(my,t[i]:1:1);

write(my,' ');write(my,' 0 ');

writeln(my);

end;

writeln(my,' --------------------------------------');

writeln (my,'Следующее->любая клава!!!');

close(my);writeln;writeln;

writeln (' Файл "Result.txt" создан в папке "DATA"');

writeln (' Следующее->любая клава!!!');

readkey;

end;

{$I+}

end

else

begin

if vib=2 then begin

clrscr;

writeln('Нахождение температуры в любой точке области');

for i:=1 to 19 do

for j:=1 to 5 do r[i][j]:=tabl[i][j];

writeln;

write('Введите x:');readln(xx);writeln;

write('Введите y:');readln(yy);

if (yy<=3) and

(yy>=-0.25*xx-0.75) and

(yy<=xx+3) and

(yy<=-2.5*xx+10.5) then begin

if (xx=0) then begin

kvadrat(t[1],t[2],t[24],t[23],x[1],y[1],x[2],y[2],x[24],y[24],x[23],y[23],xx,yy);

kvadrat(t[6],t[7],t[1],t[2],x[6],y[6],x[7],y[7],x[1],y[1],x[2],y[2],xx,yy);

kvadrat(t[12],t[13],t[7],t[6],x[12],y[12],x[13],y[13],x[7],y[7],x[6],y[6],xx,yy);

isk_k(t[37],t[13],t[12],x[37],y[37],x[13],y[13],x[12],y[12],xx,yy);

end

else begin

treygol(t[1],t[22],t[23],x[1],y[1],x[22],y[22],x[23],y[23],xx,yy);

kvadrat(t[1],t[2],t[24],t[23],x[1],y[1],x[2],y[2],x[24],y[24],x[23],y[23],xx,yy);

kvadrat(t[2],t[3],t[25],t[24],x[2],y[2],x[3],y[3],x[25],y[25],x[24],y[24],xx,yy);

kvadrat(t[3],t[4],t[26],t[25],x[3],y[3],x[4],y[4],x[26],y[26],x[25],y[25],xx,yy);

treygol(t[4],t[26],t[27],x[4],y[4],x[26],y[26],x[27],y[27],xx,yy);

treygol(t[22],t[21],t[5],x[22],y[22],x[21],y[21],x[5],y[5],xx,yy);{+}

kvadrat(t[5],t[6],t[1],t[22],x[5],y[5],x[6],y[6],x[1],y[1],x[22],y[22],xx,yy);

kvadrat(t[6],t[7],t[2],t[1],x[6],y[6],x[7],y[7],x[2],y[2],x[1],y[1],xx,yy);

kvadrat(t[7],t[8],t[3],t[2],x[7],y[7],x[8],y[8],x[3],y[3],x[2],y[2],xx,yy);

kvadrat(t[8],t[9],t[4],t[3],x[8],y[8],x[9],y[9],x[4],y[4],x[3],y[3],xx,yy);

treygol(t[9],t[28],t[4],x[9],y[9],x[28],y[28],x[4],y[4],xx,yy);

treygol(t[27],t[4],t[28],x[27],y[27],x[4],y[4],x[28],y[28],xx,yy);

treygol(t[21],t[20],t[10],x[21],y[21],x[20],y[20],x[10],y[10],xx,yy);{+}

kvadrat(t[10],t[11],t[5],t[21],x[10],y[10],x[11],y[11],x[5],y[5],x[21],y[21],xx,yy);

kvadrat(t[11],t[12],t[6],t[5],x[11],y[11],x[12],y[12],x[6],y[6],x[5],y[5],xx,yy);

kvadrat(t[12],t[13],t[7],t[6],x[12],y[12],x[13],y[13],x[7],y[7],x[6],y[6],xx,yy);

kvadrat(t[13],t[14],t[8],t[7],x[13],y[13],x[14],y[14],x[8],y[8],x[7],y[7],xx,yy);

kvadrat(t[14],t[15],t[9],t[8],x[14],y[14],x[15],y[15],x[9],y[9],x[8],y[8],xx,yy);

treygol(t[15],t[16],t[9],x[15],y[15],x[16],y[16],x[9],y[9],xx,yy);

treygol(t[9],t[29],t[16],x[9],y[9],x[29],y[29],x[16],y[16],xx,yy);

treygol(t[28],t[29],t[9],x[28],y[28],x[29],y[29],x[9],y[9],xx,yy);

treygol(t[16],t[30],t[29],x[16],y[16],x[30],y[30],x[29],y[29],xx,yy);

treygol(t[10],t[20],t[39],x[10],y[10],x[20],y[20],x[39],y[39],xx,yy); {+}

treygol(t[10],t[11],t[39],x[10],y[10],x[11],y[11],x[39],y[39],xx,yy);

treygol(t[38],t[11],t[39],x[38],y[38],x[11],y[11],x[39],y[39],xx,yy);

treygol(t[38],t[11],t[12],x[38],y[38],x[11],y[11],x[12],y[12],xx,yy);

treygol(t[38],t[12],t[37],x[38],y[38],x[12],y[12],x[37],y[37],xx,yy);

treygol(t[13],t[12],t[37],x[13],y[13],x[12],y[12],x[37],y[37],xx,yy);

treygol(t[36],t[13],t[37],x[36],y[36],x[13],y[13],x[37],y[37],xx,yy);

kvadrat(t[36],t[17],t[14],t[13],x[36],y[36],x[17],y[17],x[14],y[14],x[13],y[13],xx,yy);

kvadrat(t[17],t[18],t[15],t[14],x[17],y[17],x[18],y[18],x[15],y[15],x[14],y[14],xx,yy);

kvadrat(t[18],t[19],t[16],t[15],x[18],y[18],x[19],y[19],x[16],y[16],x[15],y[15],xx,yy);

treygol(t[16],t[19],t[31],x[16],y[16],x[19],y[19],x[31],y[31],xx,yy);

treygol(t[16],t[30],t[31],x[16],y[16],x[30],y[30],x[31],y[31],xx,yy);

treygol(t[36],t[35],t[17],x[36],y[36],x[35],y[35],x[17],y[17],xx,yy);{+}

treygol(t[35],t[18],t[17],x[35],y[35],x[18],y[18],x[17],y[17],xx,yy);

treygol(t[35],t[18],t[34],x[35],y[35],x[18],y[18],x[34],y[34],xx,yy);

treygol(t[34],t[18],t[19],x[34],y[34],x[18],y[18],x[19],y[19],xx,yy);

treygol(t[34],t[33],t[19],x[34],y[34],x[33],y[33],x[19],y[19],xx,yy);

treygol(t[33],t[31],t[19],x[33],y[33],x[31],y[31],x[19],y[19],xx,yy);

treygol(t[33],t[31],t[32],x[33],y[33],x[31],y[31],x[32],y[32],xx,yy);

end;end

else writeln('Точка не находится в данной области!!!');

writeln;

writeln (' Следующее->любая клава!!!');readkey;

end

else begin

if (vib=3) then begin

clrscr;

writeln(' Семейство изотерм!!!');

write('t=');readln(h1);

New(pr);j:=0;

for i:=1 to 39 do

if (t[i]=h1) then begin

j:=j+1;pr^[j][1]:=x[i];pr^[j][2]:=y[i];end;

for i:=1 to 19 do begin

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[r[i][3]],y[r[i][3]],t[r[i][3]]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[r[i][3]],y[r[i][3]],t[r[i][3]]);

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[r[i][5]],y[r[i][5]],t[r[i][5]]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[r[i][5]],y[r[i][5]],t[r[i][5]]);

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[r[i][4]],y[r[i][4]],t[r[i][4]]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[r[i][4]],y[r[i][4]],t[r[i][4]]);

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[r[i][2]],y[r[i][2]],t[r[i][2]]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[r[i][2]],y[r[i][2]],t[r[i][2]]);

end;

for i:=20 to 39 do

begin

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[i+1],y[i+1],t[i+1]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[i+1],y[i+1],t[i+1]);

end;

j:=j+1;

pr^[j][1]:=tconstx(h1,x[20],y[20],t[20],x[39],y[39],t[39]);

pr^[j][2]:=tconsty(h1,x[20],y[20],t[20],x[39],y[39],t[39]);

j:=j+1;

pr^[j][1]:=tconstx(h1,x[20],y[20],t[20],x[21],y[21],t[21]);

pr^[j][2]:=tconsty(h1,x[20],y[20],t[20],x[21],y[21],t[21]);

for i:=1 to j-1 do begin

for k:=1 to j-1 do begin

IF pr^[k][1]>pr^[k+1][1] then begin

buf1:=pr^[k][1];buf2:=pr^[k][2];

pr^[k][1]:=pr^[k+1][1];pr^[k][2]:=pr^[k+1][2];

pr^[k+1][1]:=buf1;pr^[k+1][2]:=buf2;

end;

end;

end;

New (p);k:=0;

for i:=1 to j do begin

if (pr^[i][1]=-100) then continue

else begin

k:=k+1;p^[K][1]:=pr^[i][1];p^[K][2]:=pr^[i][2];

end;end;

Dispose(pr);

New (mi);k4:=0;

for i:=1 to k do

if (abs(p^[i][2]-3)<0.01) or (abs(p^[i][2]+0.25*p^[i][1]+0.75)<0.01) or

(abs(p^[i][2]-p^[i][1]-3)<0.01)

or (abs(p^[i][2]+2.5*p^[i][1]-10.5)<0.01) then begin

k4:=k4+1;mi^[k4][1]:=p^[i][1];mi^[k4][2]:=p^[i][2];

end

else begin

if (abs(p^[i][1]-trunc(p^[i][1]))<0.01) or

(abs(p^[i][2]-trunc(p^[i][2]))<0.01) then begin

k4:=k4+1;mi^[K4][1]:=p^[i][1];mi^[K4][2]:=p^[i][2];

end;end;

Dispose(p);

New(m);K5:=0;

for i:=1 to k4 do

if i=1 then goto G2

else

if (abs(mi^[i][2]-3)<0.01) or (abs(mi^[i][2]+0.25*mi^[i][1]+0.75)<0.01) or

(abs(mi^[i][2]-mi^[i][1]-3)<0.01)

or (abs(mi^[i][2]+2.5*mi^[i][1]-10.5)<0.01) then begin

k5:=k5+1;m^[k5][1]:=mi^[i][1];m^[k5][2]:=mi^[i][2];

end

else begin

if (abs(mi^[i][1]-mi^[i-1][1])<0.001) or (abs(mi^[i][2]-mi^[i-1][2])<0.001)

then continue

else begin

g2:

k5:=k5+1;m^[k5][1]:=mi^[i][1];m^[k5][2]:=mi^[i][2];

end;end;

for i:=1 TO K5 DO BEGIN

gotoxy(2,2+i);

write (' x=',m^[i][1]:1:3);

gotoxy(15,2+i);writeln('y=',m^[i][2]:1:3);

END;

writeln ('Следующее->любая клава!!!');

Dispose(mi);

readkey;

clrscr;

init_graph;

ris;dizkretizaciya; setcolor(14);

line(100,100,120,100);

Str(h1:1:3,st);setcolor(15);

outtextxy(125,97,'- изотерма T='+st);

setcolor(12);

readkey;

for i:=1 to k5 do

if i=1 then goto g4

else begin

setcolor(14);

if (abs(m^[i][1]-m^[i-1][1])<=sqrt(2)+0.02) then begin

line(gx(m^[i][1],50),gy(m^[i][2],50),gx(m^[i-1][1],50),gy(m^[i-1][2],50));

g4:

setcolor(14);

circle(gx(m^[i][1],50),gy(m^[i][2],50),1);

end;end;

dispose(m);

setcolor(9);

line(20,70,50,70);setcolor(15);

outtextxy(55,67,'- точная изотерма T='+st);

readkey;

New(w);New(wx1);

yy:=-2;f:=0;

repeat

xx:=-3;yy:=yy+0.01;

repeat

buf:=sqr(xx)-sqr(yy)-xx*yy+2*xx-yy;

if (yy<=3) and

(yy>=-0.25*xx-0.75) and

(yy<=xx+3) and

(yy<=-2.5*xx+10.5) then begin

if abs(buf-h1)<=0.03 then begin

f:=f+1;w^[f]:=yy;

wx1^[f]:=xx;

end;end;

xx:=xx+0.01;

until (xx>=5.02);

until (yy>=3.005);

for i:=1 to f-1 do begin

for j:=1 to f-1 do begin

IF wx1^[j]>wx1^[j+1] then begin

buf1:=wx1^[j];buf2:=w^[j];

wx1^[j]:=wx1^[j+1];w^[j]:=w^[j+1];

wx1^[j+1]:=buf1;w^[j+1]:=buf2;

end;

end;

end;

for i:=1 to f do

putpixel (gx(wx1^[i],50),gy(w^[i],50),9);

dispose(w);dispose(wx1);readkey;

closegraph;

end

else begin

writeln(' Следующее->любая клава!!!');readkey;

end;end;end;end;

procedure menu;

Label M;

var

vibor:char;u,v:integer;

begin

u:=0;v:=0;

M:

clrscr;

writeln (' Меню:1.Создание рисунков/сетки/температур во внутренних точках;');

writeln (' 2.Нахождение температуры в любой точке области');

writeln (' 3.Семейство изотерм Выход-любая клава');

write(' Введите действие:');

readln(vibor);

case vibor of

'1':begin

pryamougol(1);u:=1;goto M;

end;

'2':begin

if u=1 then begin

pryamougol(2);v:=1;goto M;end

else begin

writeln(' Ошибка!!!Нажми 1-й пункт');

readkey;goto M;

end;

end;

'3':begin

if u=1 then begiN

if v=1 then begin

pryamougol(3);goto M;end

else begin

writeln(' Ошибка!!!Нажми 2-й пункт'); readkey;goto M;

end;

end

else begin

writeln(' Ошибка!!!Нажми 1-й пункт'); readkey;goto M; end;

end;else exit;end;end;

begin

clrscr;menu;end.

1. Реферат Экономическое положение Германии в мире
2. Реферат на тему Juvenile Delinquency Essay Research Paper President John
3. Реферат на тему Life Insurance Essay Research Paper Life insurance
4. Реферат на тему Типы темперамента
5. Реферат Етнічна культура українського народу
6. Реферат Юридичні властивості конституцій
7. Курсовая на тему Правовое государство 3
8. Реферат Наcледственное право
9. Реферат на тему Organ Donation Essay Research Paper INTRODUCTION ATTENTION
10. Реферат Антисемитизм без евреев