Разработка программного обеспечения для реализации арифметических операций над комплексными числами

Понятия о комплексных числах. Обзор языка программирования Java. Назначение разрабатываемой программы и математическая постановка задачи. Основные действия с комплексными числами. Текст программы и пример её выполнения, основные области использования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.03.2013
Размер файла 179,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

Раздел 1. Теоретическая часть

1.1 Понятия о комплексных числах

1.2 Обзор языка программирования Java

  • Раздел 2. Теоретическое решение
  • 2.1 Назначение программы
  • 2.2 Математическая постановка задачи
  • 2.3 Действия с комплексными числами
  • 2.3.1 Сложение комплексных чисел
  • 2.3.2 Вычитание комплексных чисел
  • 2.3.3 Произведение комплексных чисел
  • 2.3.4 Деление комплексных чисел

2.4 Блок-схема

Раздел 3. Практический

3.1 Пример выполнения программы

3.2 Текст программы

Заключение

Список используемых источников

Введение

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

Комплексные числа широко использовал отец русской авиации Н.Е. Жуковский (1847 - 1921) при разработке теории крыла, автором которой он является.

Комплексные числа и функции от комплексного переменного находят применение во многих вопросах науки и техники.

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

Раздел 1. Теоретическая часть

1.1 Понятие о комплексных числах

Для решения алгебраических уравнений недостаточно действительных чисел. Поэтому естественно стремление сделать эти уравнения разрешимыми, что в свою очередь приводит к расширению понятия числа. Например, для того чтобы любое уравнение x+a=b имело корни, положительных чисел недостаточно и поэтому возникает потребность ввести отрицательные числа и нуль.

Древнегреческие математики считали, что a=c и b=а только натуральные числа, но в практических расчетах за два тысячелетия до нашей эры в Древнем Египте и Древнем Вавилоне уже применялись дроби. Следующим важным этапом в развитии понятия о числе было введение отрицательных чисел - это было сделано китайскими математиками за 2 века до нашей эры. Отрицательные числа применял в 3 веке нашей эры древнегреческий математик Диофант, знавший уже правила действий над ними, а в 7 веке нашей эры эти числа подробно изучили индийские ученые, которые сравнивали такие числа с долгом. С помощью отрицательных чисел можно было единым образом описывать изменение величин. Уже в 8 веке нашей эры было установлено, что квадратный корень из положительного числа имеет два значение - положительное и отрицательное, а из отрицательных чисел квадратные корни извлечь нельзя: нет такого числа х, чтобы х2 = -9. В 16 веке в связи с изучением кубических уравнений оказалось необходимым извлекать квадратные корни из отрицательных чисел. В формуле для решения кубических уравнений содержатся кубические и квадратные корни. Эта формула безотказно действует в случае, когда уравнение имеет один действительный корень (например, для уравнения х3+3х-4=0), а если оно имело 3 действительных корня (например, х3-7х+6=0), то под знаком квадратного корня оказывалось отрицательное число. Получалось, что путь к этим 3 корням уравнения ведет через невозможную операцию извлечения квадратного корня из отрицательного числа.

Чтобы объяснить получившийся парадокс, итальянский алгебраист Дж. Кардано в 1545 предложил ввести числа новой природы. Он показал, что система уравнений х+у=10, ху=40 не имеющая решений в множестве действительных чисел, имеет решение всегда , , нужно только условиться действовать над такими выражениями по правилам обычной алгебры и считать, что . Кардано называл такие величины «чисто отрицательными» и даже «софистически отрицательными», считая их бесполезными и стремился не применять их. В самом деле, с помощью таких чисел нельзя выразить ни результат измерения какой-нибудь величины, ни изменение этой величины. Но уже в 1572 г. вышла книга итальянского алгебраиста Р. Бомбелли, в котором были установлены первые правила арифметических операций над такими числами, вплоть до извлечения из них кубических корней. Название «мнимые числа» ввел в 1637г. французский математик и философ Р. Декарт, а в 1777г. один из крупнейших математиков VIII века Х. Эйлер предложил использовать первую букву французского числа (мнимой единицы), этот символ вошел во всеобщее употребление благодаря К. Гауссу (1831г).

В течение 17 века продолжалось обсуждение арифметической природы мнимостей, возможности дать им геометрическое истолкование. Постепенно развивалась техника операций над комплексными числами. На рубеже 17-18 веков была построена общая теория корней n-й степени сначала из отрицательных, а впоследствии и из любых комплексных чисел.

В конце 18 века французский математик Ж. Лагранж смог сказать, что математический анализ уже не затрудняют мнимые величины. С помощью комплексных чисел научились выражать решения линейных дифференциальных уравнений с постоянным коэффициентом. Такие уравнения встречаются, например, в теории колебаний материальной точки в сопротивляющейся среде.

Я. Бернулли применил комплексные числа для вычисления интегралов. Хотя в течении 18 века с помощью комплексных чисел были решены многие вопросы, в том числе и прикладные задачи, связанные с картографией, гидродинамикой и т. д., однако еще не было строго логического обоснования теории этих чисел. Поэтому французский ученый П. Лаплас считал, что результаты, получаемые с помощью мнимых чисел, - только наведение, приобретающие характер настоящих истин лишь после подтверждения прямыми доказательствами. В конце 18- начале 19 веков было получено геометрическое истолкование комплексных чисел. Датчанин Г. Вессель, француз Ж. Арган и немец К. Гаусс независимо друг от друга предложили изображать комплексное число точкой М(а,b) на координатной плоскости. Позднее оказалось, что еще удобнее изображать число не самой точкой М, а вектором ОМ, идущим в эту точку из начала координат. При таком истолковании сложению и вычитанию комплексных чисел соответствуют эти же операции над векторами.

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

1.2 Обзор языка программирования Java

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

Internet помог катапультировать Java на передний край программирования, a Java, в свою очередь, имел глубокое влияние на Internet. Этому есть простое объяснение: Java разворачивает вселенную объектов, которые могут свободно перемещаться в киберпространстве. В сети две очень широких категории объектов передаются между сервером и вашим персональным компьютером -- пассивная информация и динамические, активные программы. Например, когда вы читаете вашу электронную почту, то рассматриваете пассивные данные. Даже, когда вы загружаете программу, ее код -- это все еще только пассивные данные до тех пор, пока вы их не начнете выполнять. Однако на ваш компьютер может быть передан объект второго типа -- динамическая, самовыполняющаяся программа. Такая программа -- активный агент на компьютере клиента, все же инициализируется сервером. Например, сервер мог бы предоставить (клиенту) программу, чтобы должным образом отображать данные, посылаемые клиенту.

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

Java можно использовать, чтобы создать два типа программ -- приложения и апплеты. Приложение -- это программа, которая выполняется на вашем компьютере с помощью его операционной системы. То есть, приложение, созданное с помощью Java, более или менее подобно приложению, созданному с использованием С или C++. При создании приложения Java не намного отличается от любого другого машинного языка. Более важной является способность Java создавать апплеты. Апплет -- это приложение, разработанное для передачи по Internet и выполняемое совместимым с Java Web-браузером. Апплет -- это, фактически, крошечная программа Java, динамически загружаемая через сеть, подобная изображению, звуковому файлу, или видеоклипу. Важное отличие заключается в том, что апплет является интеллектуальной программой, а не просто мультипликацией (анимацией) или media-файлом. Другими словами, апплет -- это программа, которая может реагировать на ввод пользователя и динамически изменять, а не просто выполнять ту же самую мультипликацию или звук много раз.

Многоплатформенная среда Web предъявляет экстраординарные требования к программе, потому что та должна выполниться надежно в самых разнообразных системах. Поэтому способности создавать устойчивые программы был дан высокий приоритет в проекте Java. Чтобы обеспечить надежность, Java ограничивает вас в нескольких ключевых областях, вынуждая рано находить ошибки при разработке программы. В то же самое время, Java освобождает от необходимости волноваться относительно многих из наиболее общих причин ошибок программирования. Поскольку Java -- язык со строгой типизацией, он проверяет ваш код во время компиляции. Однако он также проверяет ваш код и во время выполнения. В действительности, множество трудно прослеживаемых ошибок, которые часто обнаруживаются в трудно воспроизводимых ситуациях во временя выполнения, просто невозможно создать в Java. Знание того, что программа, которую вы написали, будет вести себя предсказуемым образом при разных условиях, является ключевым свойством Java.

Чтобы лучше понимать, насколько устойчив Java, рассмотрим две из главных причин отказа программы: ошибки управления памятью и неуправляемые исключительные состояния (т. е. ошибки во время выполнения). Управление памятью может быть трудной и утомительной задачей в традиционных средах программирования. Например, на C/C++ программист должен вручную распределять и освобождать всю динамическую память. Это иногда ведет к проблемам, потому что программисты или забывают освобождать память, которая была предварительно распределена, или, хуже, пытаются освободить некоторую память, которую другая часть их кода все еще использует. Java фактически устраняет эти проблемы, управляя распределением и освобождением памяти. (Фактически, освобождение полностью автоматическое, потому что Java обеспечивает сборку "мусора" для неиспользованных объектов.) Исключительные состояния в традиционных средах часто возникают в ситуациях типа деления на нуль или "файл, не найден", и они должны управляться неуклюжими и трудно читаемыми конструкциями. Java помогает и в этой области, обеспечивая объектно-ориентированную обработку особых ситуаций. В хорошо написанной Java-программе все ошибки времени выполнения могут -- и должны -- управляться вашей программой.

Java был спроектирован так, чтобы выполнить реальное требование -- создавать интерактивные сетевые программы. Чтобы выполнить это, Java поддерживает многопоточное программирование, которое позволяет вам писать программы, выполняющие одновременно несколько операций. Исполняющая система Java подходит с изящным и все же искушенным решением к синхронизации мультипроцесса, что дает возможность создавать гладко работающие интерактивные системы. Удобный в работе подход Java к многопоточности позволяет вам поразмыслить над спецификой поведения вашей программы, а не заботиться о многозадачной подсистеме.

Программы Java несут в себе существенное количество информации времени выполнения, которая используется, чтобы проверять и разрешать доступ к объектам в период работы программы. Это дает возможность динамически связывать код в безопасной и целесообразной манере, и имеет решающее значение для устойчивости среды апплета, в которой маленькие фрагменты байт-кода могут динамически обновляться исполнительной системой.

Все компьютерные программы состоят из двух элементов: кода и данных. Любая программа может быть концептуально организована либо вокруг ее кода, либо вокруг ее данных. Иначе говоря, некоторые программы концентрируют свою запись вокруг того, "что делается с данными"1, а другие -- вокруг того, "на что этот процесс влияет"2. Существуют две парадигмы (основополагающих подхода), которые управляют конструированием программ. Первый подход называет программу моделью, которая ориентирована на процесс (process-oriented model). При этом подходе программу определяют последовательности операторов ее кода. Модель, ориентированную на процесс, можно представлять как кодовое воздействие на данные (code acting on data). Процедурные языки, такие как С, успешно эксплуатируют такую модель. Однако, при этом подходе возникают проблемы, когда возрастает размер и сложность программ. Второй подход, названный объектно-ориентированным программированием, был задуман для управления возрастающей сложностью программ. Объектно-ориентированное программирование организует программу вокруг своих данных (т. е. вокруг объектов) и набора хорошо определенных интерфейсов (взаимодействий) с этими данными. Объектно-ориентированную программу можно характеризовать как управляемый данными доступ к коду (data controlling access to code). Как вы увидите далее, переключая управление на данные, можно получить некоторые организационные преимущества. Опыт показывает, что отсутствие стандартных базовых библиотек для языка С++ чрезвычайно затрудняет работу с ним. В силу того, что любое нетривиальное приложение требует наличия некоторого набора базовых классов, разработчикам приходится пользоваться различными несовместимыми между собой библиотеками или писать свой собственный вариант такого набора. Все это затрудняет как разработку, так и дальнейшую поддержку приложений, затрудняет стыковку приложений, написанных разными людьми. Полная система Java включает в себя готовый набор библиотек, который можно разбить на следующие пакеты:

· java.lang -- базовый набор типов, отраженных в самом языке. Этот пакет обязательно входит в состав любого приложения. Содержит описания классов Object и Class, а также поддержку многопоточности, исключительных ситуаций, оболочку для базовых типов, а также некоторые фундаментальные классы.

· java.io -- потоки и файлы произвольного доступа. Аналог библиотеки стандартного ввода-вывода системы UNIX. Поддержка сетевого доступа (sockets, telnet, URL) содержится в пакете java.net.

· java.util -- классы-контейнеры (Dictionary, HashTable, Stack) и некоторые другие утилиты. Кодирование и декодирование. Классы Date и Time.

· java.awt -- Abstract Windowing Toolkit, архитектурно-независимый оконный интерфейс, позволяющий запускать интерактивные оконные Java-приложения на любой платформе. Содержит базовые компоненты интерфейса, такие как события, цвета, фонты, а также основные оконные элементы - кнопки, scrollbars и т.д.

Раздел 2. Теоретическое решение

2.1 Назначение программы

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

2.2 Математическая постановка задачи

Программа предназначена для работы с комплексными числами. Программа может складывать, вычитать, умножать, делить одного или двух комплексных чисел, и вывести результат. На форме располагаются четыре текстовых окна. Все четыре окна, для ввода чисел z1 и z2, а нижнее левее текстовая метка для вывода расчетов. При вычислениях выводится дополнительный фрейм с графиком представления на двумерной плоскости.

2.3 Действия с комплексными числами

Рассмотрим решение квадратного уравнения х2 +1 = 0. Отсюда х2 = -1. Число х, квадрат которого равен -1, называется мнимой единицей и обозначается i. Таким образом , i2 = -1, откуда . Решение квадратного уравнения, например, х2 - 8х + 25 = 0, можно записать следующим образом:

.

Числа вида 4+3i и 4-3i называют комплексными числами. В общем виде комплексное число записывается а + bi, где a и b- действительные числа, а i - мнимая единица. Число а называется действительной частью комплексного числа, bi-мнимой частью этого числа, b- коэффициентом мнимой части комплексного числа.

2.3.1 Сложение комплексных чисел

Суммой двух комплексных чисел z1 = a + bi и z2 = c + di называется комплексное число

z = (a+c) + (b+d)i

Числа a + bi и a-bi называются сопряженными. Их сумма равна действительному числу 2а,

(а+bi) + (а-bi) = 2а.

Числа а+bi и -a-bi называются противоположными. Их сумма равна нулю. Комплексные числа равны, если равны их действительные части и коэффициенты мнимых частей: а+bi = c+di, если a = c, b = d. Комплексное число равно нулю тогда, когда его действительная часть и коэффициент мнимой части равны нулю, т.е. z=a + bi = 0, если a=0, b=0.

Действительные числа являются частным случаем комплексных чисел. Если b=0, то a+bi=a - действительное число. Если а = 0, , то a + bi = bi - чисто мнимое число. Для комплексных чисел справедливы переместительный и сочетательный законы сложения. Их справедливость следует из того, что сложение комплексных чисел по существу сводится к сложению действительных частей и коэффициентов мнимых частей, а они являются действительными числами, для которых справедливы указанные законы.

2.3.2 Вычитание комплексных чисел

Вычитание комплексных чисел определяется как действие, обратное сложению: разностью двух комплексных чисел a + bi и с + di называется комплексное число х + уi, которое в сумме с вычитаемым дает уменьшаемое. Отсюда, исходя из определения сложения и равенства комплексных чисел получим два уравнения, из которых найдем, что х = а-с, у = b-d. Значит, (а+bi) - (c+di) = (a-c) + (b-d)i.

2.3.3 Произведение комплексных чисел

Произведение комплексных чисел z1=a+bi и z2=c+di называется комплексное число

z =(ac-bd) + (ad + bc)i, z1z2 = (a + bi)(c + di) = (ac - bd) + (ad + bc)i.

Легко проверить, что умножение комплексных чисел можно выполнять как умножение многочленов с заменой i2 на -1. Для умножения комплексных чисел также справедливы переместительный и сочетательный законы, а также распределительный закон умножения по отношению к сложению.

Из определения умножения получим, что произведение сопряженных комплексных чисел равно действительному числу: (a + bi)(a - bi) = a2 + b2

2.3.4 Деление комплексных чисел

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

2.4 Блок-схема

Размещено на http://www.allbest.ru/

Раздел 3. Практический

3.1 Пример выполнения программы

программа комплексный число математический

Пример 1

Рисунок 3.1 - входные данные

Пример 2

Рисунок 3.2 - входные данные

Пример 3

Рисунок 3.3 - входные данные

Пример 4

Рисунок 3.4 - входные данные

Пример 5

Рисунок 3.5 - входные данные

3.2 Текст программы.

файл Main:

import javax.swing.SwingUtilities;

import zlobenets.dmitry.kursovoy.ralization.MainFrame;

public class Main {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

new MainFrame();

}

});

}

}

файл ComplexNumber

package zlobenets.dmitry.kursovoy.ralization;

class ComplexNumber {

private double real, image;

public ComplexNumber() {

real = 0;

image = 0;

}

public ComplexNumber(double aReal) {

real = aReal;

image = 0;

}

public ComplexNumber(double aReal, double aImage) {

real = aReal;

image = aImage;

}

public double getReal() {

return real;

}

public double getImage() {

return image;

}

public ComplexNumber add(ComplexNumber complexNumber) {

double r = this.real + complexNumber.real;

double i = this.image + complexNumber.image;

return new ComplexNumber(r, i);

}

public ComplexNumber sub(ComplexNumber complexNumber) {

double r = this.real - complexNumber.real;

double i = this.image - complexNumber.image;

return new ComplexNumber(r, i);

}

public ComplexNumber mul(ComplexNumber complexNumber) {

double r = (real * complexNumber.real) - (image * complexNumber.image);

double i = (real * complexNumber.image) + (complexNumber.real * image);

return new ComplexNumber(r, i);

}

public ComplexNumber div(ComplexNumber complexNumber) {

double r = ((real * complexNumber.real) + (image * complexNumber.image))

/ (Math.pow(complexNumber.real, 2) + Math.pow(

complexNumber.image, 2));

double i = ((complexNumber.real * image) - (real * complexNumber.image))

/ (Math.pow(complexNumber.real, 2) + Math.pow(

complexNumber.image, 2));

return new ComplexNumber(r, i);

}

public String toString() {

if (image < 0)

return real + "" + image + "i";

else

return real + "+" + image + "i";

}

}

файл MainFrame

package zlobenets.dmitry.kursovoy.ralization;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

public class MainFrame implements ActionListener {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

JFrame frame;

ComplexNumber compNum;

JLabel frstLabel;

JLabel scndLabel;

JTextField frstTextField;

JTextField scndTextField;

JLabel thrdLabel;

JLabel frtLabel;

JLabel sixLabel;

JTextField thrdTextField;

JTextField frtTextField;

JButton addBttn;

JButton subBttn;

JButton mulBttn;

JButton divBttn;

public MainFrame() {

frame = new JFrame("Operation with Complex numbers");

frame.setBounds(screenSize.width / 4, screenSize.height / 4, 350, 150);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

frame.setResizable(false);

frstLabel = new JLabel("Real 1");

frstTextField = new JTextField(10);

scndLabel = new JLabel("Image 1");

scndTextField = new JTextField(10);

thrdLabel = new JLabel("Real 2");

thrdTextField = new JTextField(10);

frtLabel = new JLabel("Image 2");

frtTextField = new JTextField(10);

addBttn = new JButton("add");

subBttn = new JButton("sub");

mulBttn = new JButton("mul");

divBttn = new JButton("div");

sixLabel = new JLabel("Answer : ");

addBttn.addActionListener(this);

subBttn.addActionListener(this);

mulBttn.addActionListener(this);

divBttn.addActionListener(this);

frame.setLayout(new FlowLayout());

frame.add(frstLabel);

frame.add(frstTextField);

frame.add(scndLabel);

frame.add(scndTextField);

frame.add(thrdLabel);

frame.add(thrdTextField);

frame.add(frtLabel);

frame.add(frtTextField);

frame.add(addBttn);

frame.add(subBttn);

frame.add(mulBttn);

frame.add(divBttn);

frame.add(sixLabel);

}

@Override

public void actionPerformed(ActionEvent ae) {

Double real1;

Double image1;

Double real2;

Double image2;

if (ae.getActionCommand().equalsIgnoreCase("add")) {

if (frstTextField.getText().trim().equals(""))

real1 = 0.0D;

else

real1 = new Double(frstTextField.getText());

if (scndTextField.getText().trim().equals(""))

image1 = 0.0D;

else

image1 = new Double(scndTextField.getText());

if (thrdTextField.getText().trim().equals(""))

real2 = 0.0D;

else

real2 = new Double(thrdTextField.getText());

if (frtTextField.getText().trim().equals(""))

image2 = 0.0D;

else

image2 = new Double(frtTextField.getText());

compNum = new ComplexNumber(real1, image1).add(new ComplexNumber(

real2, image2));

sixLabel.setText(compNum.toString());

new MiniGraphic(new ComplexNumber(real1, image1),

new ComplexNumber(real2, image2), compNum, "add");

} else if (ae.getActionCommand().equalsIgnoreCase("sub")) {

if (frstTextField.getText().trim().equals(""))

real1 = 0.0D;

else

real1 = new Double(frstTextField.getText());

if (scndTextField.getText().trim().equals(""))

image1 = 0.0D;

else

image1 = new Double(scndTextField.getText());

if (thrdTextField.getText().trim().equals(""))

real2 = 0.0D;

else

real2 = new Double(thrdTextField.getText());

if (frtTextField.getText().trim().equals(""))

image2 = 0.0D;

else

image2 = new Double(frtTextField.getText());

compNum = new ComplexNumber(real1, image1).sub(new ComplexNumber(

real2, image2));

sixLabel.setText(compNum.toString());

new MiniGraphic(new ComplexNumber(real1, image1),

new ComplexNumber(real2, image2), compNum, "sub");

} else if (ae.getActionCommand().equalsIgnoreCase("mul")) {

if (frstTextField.getText().trim().equals(""))

real1 = 0.0D;

else

real1 = new Double(frstTextField.getText());

if (scndTextField.getText().trim().equals(""))

image1 = 0.0D;

else

image1 = new Double(scndTextField.getText());

if (thrdTextField.getText().trim().equals(""))

real2 = 0.0D;

else

real2 = new Double(thrdTextField.getText());

if (frtTextField.getText().trim().equals(""))

image2 = 0.0D;

else

image2 = new Double(frtTextField.getText());

compNum = new ComplexNumber(real1, image1).mul(new ComplexNumber(

real2, image2));

sixLabel.setText(compNum.toString());

new MiniGraphic(new ComplexNumber(real1, image1),

new ComplexNumber(real2, image2), compNum, "mul");

} else if (ae.getActionCommand().equalsIgnoreCase("div")) {

if (frstTextField.getText().trim().equals(""))

real1 = 0.0D;

else

real1 = new Double(frstTextField.getText());

if (scndTextField.getText().trim().equals(""))

image1 = 0.0D;

else

image1 = new Double(scndTextField.getText());

if (thrdTextField.getText().trim().equals(""))

real2 = 0.0D;

else

real2 = new Double(thrdTextField.getText());

if (frtTextField.getText().trim().equals(""))

image2 = 0.0D;

else

image2 = new Double(frtTextField.getText());

compNum = new ComplexNumber(real1, image1).div(new ComplexNumber(

real2, image2));

sixLabel.setText(compNum.toString());

new MiniGraphic(new ComplexNumber(real1, image1),

new ComplexNumber(real2, image2), compNum, "div");

}

}

}

Файл MiniGraphics

package zlobenets.dmitry.kursovoy.ralization;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Toolkit;

import java.awt.geom.Ellipse2D;

import java.awt.geom.Point2D;

import javax.swing.JFrame;

import javax.swing.JPanel;

@SuppressWarnings("serial")

public class MiniGraphic extends JFrame {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

int screenWidth = screenSize.width / 2;

int screenHeight = screenSize.height / 2;

ComplexNumber num;

final int STEP = 5;

Point2D point2d_1, point2d_2, point2d_answr;

Ellipse2D ellips1, ellips2, ellips3;

String msg;

GraphicPanel panel;

MiniGraphic(ComplexNumber num1, ComplexNumber num2, ComplexNumber answer,

String aMsg) {

setTitle(aMsg + " : " + num1.toString() + " with "

+ num2.toString() + " = " + answer.toString());

msg = aMsg;

point2d_1 = new Point2D.Double(screenWidth / 2 + num1.getReal(),

screenHeight / 2 + num1.getImage());

point2d_2 = new Point2D.Double(screenWidth / 2 + num2.getReal(),

screenHeight / 2 + num2.getImage());

point2d_answr = new Point2D.Double(screenWidth / 2 + answer.getReal(),

screenHeight / 2 + answer.getImage());

ellips1 = new Ellipse2D.Double(screenWidth / 2 + num1.getReal(),

screenHeight / 2 + num1.getImage(), STEP, STEP);

ellips2 = new Ellipse2D.Double(screenWidth / 2 + num2.getReal(),

screenHeight / 2 + num2.getImage(), STEP, STEP);

ellips3 = new Ellipse2D.Double(screenWidth / 2 + answer.getReal(),

screenHeight / 2 + answer.getImage(), STEP, STEP);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setBounds(screenWidth / 4, screenHeight / 4,// Location

screenWidth, screenHeight);// Size w,h

setVisible(true);

setResizable(false);

panel = new GraphicPanel();

add(panel);

}

class GraphicPanel extends JPanel {

final int STEP = 10;

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.drawString(" Complex 1 : Blue " + msg + " Complex 2 : Green ",

20, 20);

g2.drawString(" Complex 3 : Red", 20, 40);

g2.drawLine(screenWidth / 2, 0, screenWidth / 2, screenHeight);

g2.drawLine(0, screenHeight / 2, screenWidth, screenHeight / 2);

g2.setPaint(Color.BLUE);

g2.fill(ellips1);

g2.setPaint(Color.GREEN);

g2.fill(ellips2);

g2.setPaint(Color.RED);

g2.fill(ellips3);

g2.setPaint(Color.ORANGE);

g2.drawString("Y - image", screenWidth / 2 + 10, 20);

g2.drawString("X - real", screenWidth - 50, screenHeight / 2 + 20);

}

}

}

Заключение

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

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

Список используемых источников

1. Шилдт. Г. Полное руководство по языку Java-by The McGraw-Hill Companies,2011.

2. Выгодский М.Я. Справочник по элементарной математике. [Текст] / М.Я. Выгодский - М.: АСТ: Астрель, 2006. С. 509.

3. Дадаян А.А. Алгебра и геометрия. [Текст] / А.А. Дадаян, В.А. Дударенко. - М.: Минск, 1999. С. 342.

4. Камалян Р.З. Высшая математика. [Текст] / Р.З. Камалян. - М.: ИМСИТ, 2004. С.310.

5. Комплексное число [Электронный ресурс]

Размещено на Allbest.ru

...

Подобные документы

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

    курсовая работа [398,8 K], добавлен 01.02.2010

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

    курсовая работа [1,2 M], добавлен 25.11.2011

  • Теоретическая и практическая реализация комплексной арифметики на языке программирования Си. Разработка программы, производящей арифметические действия с комплексными числами. Автоматизации решения комплексных чисел. Матричная и стандартная модель.

    курсовая работа [495,4 K], добавлен 21.01.2012

  • Изучение методов и этапов создания класса Complex, позволяющего работать с комплексными числами и производить с ними следующие операции: сложение, вычитание, умножение, деление двух комплексных чисел. Написание кода для ввода и вывода исходных данных.

    курсовая работа [628,4 K], добавлен 11.09.2010

  • Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате ASCII или ANSI) с текстом программы и на выходе выводить на экран результаты вычислений, определяемых программистом. Выбор лексем, интерфейс и листинг программы.

    курсовая работа [132,0 K], добавлен 12.03.2013

  • Строение класса complex. Примеры использования класса complex. Результат выполнения программы. Цикл возведения первого числа во второе. Операции с комплексными числами. Конструкторы и операции присваивания для типа complex. Неявные преобразования типов.

    курсовая работа [1,5 M], добавлен 18.05.2011

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

    реферат [687,5 K], добавлен 28.10.2011

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

  • Структура и основные операции коммерческого банка. Использование языка программирования Visual Basic for Application, математическая формулировка задачи. Разработка модуля программы расчёта кредитов и депозитов. Схема алгоритма выполнения программы.

    курсовая работа [2,9 M], добавлен 09.04.2012

  • Сущность понятия "комплексное число". Умножение, деление и сложение. Класс Number и два последующих Rational Number Operation и Complex Number. Схема наследования классов исключений. Тестирование программы. Схема работы приложения. Интерфейс программы.

    курсовая работа [607,3 K], добавлен 17.05.2015

  • Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.

    курсовая работа [1,2 M], добавлен 07.07.2012

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

    курсовая работа [443,7 K], добавлен 22.01.2010

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

    контрольная работа [533,1 K], добавлен 23.04.2010

  • Проведение четырех основных арифметических операций над целыми числами – подзадача, реализованная в большинстве пользовательских программ. Реализация многоэтапных алгоритмов вычисления. Список макросов, процедур и описание их функциональной нагрузки.

    курсовая работа [25,9 K], добавлен 17.05.2013

  • Разработка программы, реализующей построение объемной гистограммы с использованием свойств языка программирования Java. Возможность графически отобразить статистические данные урожайности как основное требование к программе. Реализация кода программы.

    курсовая работа [333,5 K], добавлен 21.01.2013

  • Арифметические операции с целыми числами. Сложение и вычитание в дополнительном коде. Представление чисел в формате с плавающей точкой. Особенности выполнения арифметических операций в соответствии с IEEE. Точность выполнения арифметических операций.

    контрольная работа [5,6 M], добавлен 19.05.2010

  • Сопоставление наиболее важных систем счисления. Перевод целых десятичных чисел в недесятичную систему и обратно. Особенности преобразования дробей. Правила выполнения арифметических действий над двоичными, восьмеричными и шестнадцатеричными числами.

    контрольная работа [824,4 K], добавлен 17.11.2010

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Описание языка программирования Java: общие характеристики, главные свойства, краткий обзор. Надежность и безопасность, производительность и базовая система программы. Разработка программы поиска по словарю, алгоритм её работы. Общий вид кода программы.

    курсовая работа [20,3 K], добавлен 28.10.2012

  • История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.

    курсовая работа [795,9 K], добавлен 14.12.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.