Создать класс vector3d задаваемый тройкой координат

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

Варианты лабораторных заданий.

Вариант 1

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

Вариант 2

Создать класс Pair (пара чисел); определить методы изменения полей и сравнения пар: пара p1 больше пары р2, если (first.pl > first.р2) или (first.pl > first.р2) и (second.pl > second.р2). Определить класс−наследник Fraction с полями: целая часть числа и дробная часть числа. Определить полный набор методов сравнения.

Вариант 3

Создать класс Liquid (жидкость), имеющий поля названия и плотности. Определить методы переназначения и изменения плотности. Создать производный класс Alcohol (спирт), имеющий крепость. Определить методы переназначения и изменения крепости.

Вариант 4

Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс Rectangle (прямоугольник) с полями−сторонами. Определить методы вычисления периметра и площади прямоугольника.

Вариант 5

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

Вариант 6

Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел. Определить производный класс Triangle с полями−сторонами. Определить методы вычисления углов и площади треугольника.

Вариант 7

Создать класс Triangle с полями−сторонами. Определить методы изменения сторон, вычисления углов, вычисления периметра. Создать производный класс Equilateral (равносторонний), имеющий поле площади. Определить метод вычисления площади.

Вариант 8

Создать класс Triangle с полями−сторонами. Определить методы изменения сторон, вычисления углов, вычисления периметра. Создать производный класс RightAngled (прямоугольный), имеющий поле площади. Определить метод вычисления площади.

Вариант 9

Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс RightAngled с полями−катетами. Определить методы вычисления гипотенузы и площади треугольника.

Вариант 10

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date с полями: год, месяц и день. Определить полный набор методов сравнения дат.

Вариант 11

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Time с полями: час, минута и секунда. Определить полный набор методов сравнения моментов времени.

Вариант 12

Реализовать класс−оболочку Number для числового типа float. Реализовать методы сложения и деления. Создать производный класс Real, в котором реализовать метод возведения в произвольную степень, и метод для вычисления логарифма числа.

Вариант 13

Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный класс Date с полями: год, месяц и день. Переопределить методы увеличения полей на 1 и определить метод увеличения даты на п дней.

Вариант 14

Реализовать класс−оболочку Number для числового типа double. Реализовать методы умножения и вычитания. Создать производный класс Real, в котором реализовать метод, вычисляющий корень произвольной степени, и метод для вычисления числа π в данной степени.

Вариант 15

Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить класс−наследник Time с данными−член: час, минута, секунда. Переопределить методы увеличения полей на 1 и определить методы увеличения на п секунд и минут.

Вариант 16

Создать базовый класс Pair (пара целых чисел) с операциями проверки на равенство и перемножения полей. Реализовать операцию вычитания пар по формуле (а, b) − (с, d) = (а − b, с − d). Создать производный класс Rational; определить новые операции сложения (a, b) + (c,d) = (ad + bd, bd) и деления (a,b) / (с,d) = (a/d, b/d); переопределить операцию вычитания (а,b) − (c,d) = (a − b,c − d).

Вариант 17

Создать класс Pair (пара чисел); определить метод перемножения полей и операцию сложения пар (а, b) + (с, d) = (а + b, с + d). Определить производный класс Complex с полями: действительная и мнимая части числа. Определить методы умножения (a, b) ×(c,d) = (ас × bd, ad × be)и вычитания (а,b) − (c,d) = (a − b,c − d).

Вариант 18

Создать класс Pair (пара целых чисел); определить методы изменения полей и операцию сложения пар (а, b) + (с, d) = (а + b, с + d).Определить класс−наследник Long с полями: старшая часть числа и младшая часть числа. Переопределить операцию сложения и определить методы умножения и вычитания.

Вариант 19

Создать базовый класс Triad (тройка чисел) с операциями сложения с числом, умножения на число, проверки на равенство. Создать производный класс vector3D, задаваемый тройкой координат. Должны быть реализованы: операция сложения векторов, скалярное произведение векторов.

Вариант 20

Создать класс Pair (пара целых чисел); определить метод умножения на число и операцию сложения пар (а, b) + (с, d) = (а + b, с + d). Определить класс−наследник Money с полями: рубли и копейки. Переопределить операцию сложения и определить методы вычитания и деления денежных сумм.

Контрольные вопросы:

1. Дайте определение понятию виртуальная функция?

2. Что такое чистая виртуальная функция? Если в объявлении класса имеется чистая виртуальная функция, как называется такой класс и какие ограничения налагаются на его использование?

3. Как создать виртуальный конструктор−копировщик?

4. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция была замешена?

5. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция не была замешена?

6. Если в базовом классе функция объявлена как виртуальная, а в производном классе виртуальность функции указана не была, сохранится ли функция как виртуальная в следующем произведенном классе?

Читайте также:  Спортивный директор football manager

7. С какой целью используется ключевое слово protected?

8. Динамический полиморфизм достигается посредством использования _ функций и указателей _ класса. (Вставьте пропущенные слова.)

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

10. Что производный класс наследует из базового класса?

11. Что производный класс не наследует из базового класса?

12. В каком порядке вызываются конструкторы и деструкторы класса при создании и удалении объекта производного класса?

13. Требуются ли конструкторы производному классу, если он не добавляет к базовому классу элементы данных?

14. Почему лучше передавать объект по ссылке, а не по значению?

Осталось обработать нажатия на кнопки очистки (С) и равно (=). Создайте в конструкотре обработчики события actionPerformed для этих кнопок и введите в них следующий код:

//нажатие на «равно»

private void btResActionPerformed(java.awt.event.ActionEvent evt) <

// сначала выполняем последнюю операцию

//начинаем все заново

//числа вводятся заново

//нажатие на очистку (С)

private void btClearActionPerformed(java.awt.event.ActionEvent evt)

//ввод чисел заново

//обнуляем все операнды

//на экране калькулятора рисуем 0

Запустите проект на выполнение. Добейтесь, чтобы все работало корректно и без ошибок.

Лабораторная работа 2.
Создание классов. Конструкторы.

1. Создать класс «комплексное число». Подумать, какие конструкторы необходимо реализовать для удобной работы с классом. Реализовать их. Написать методы: сложения, вычитания, умножения, деления, сравнения, возвращающий сопряженное число. Выполнить следующие примеры:

Даны числа z1 = 3 – i; z2 = -2+ i*3

Найти z1 * z2; (z1/z2) 2

2. Создать класс для работы с векторами 3D, задаваемыми тройкой координат. Реализовать сложение, вычитание, скалярное произведение векторов, произведение вектора на скаляр, сравнение векторов, вычисление длины вектора, сравнение длин векторов. Проверить работу класса на примерах.

3. Создать класс для работы с датой в формате «год.месяц.день». Данные хранятся в переменных уровня класса: год, месяц, день. Создать минимум 3 конструктора, позволяющих задавать дату строкой, числами и другой датой. Реализовать методы: добавление дней к дате; вычитание дней из даты; сравнение дат; вычисление количества дней между датами. Проверить работу класса на примерах.

Лабораторная работа 3.
Создание классов. Наследование и агрегация.

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

В процессе выполнения задания НЕЛЬЗЯ пользоваться утилитными классами Java.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Студент – человек, постоянно откладывающий неизбежность. 10824 – | 7386 – или читать все.

91.146.8.87 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Содержание

Лабораторная работа №1. Структуры и классы. [ править ]

Во всех заданиях, помимо указанных в задании операций, обязательно должны быть реализованы следующие методы:

  • метод инициализации Init;
  • ввод с клавиатуры Read;
  • вывод на эран Display;
  • преобразование в строку toString.

Все задания должны быть реализованы тремя способами:

  • тип данных представляется структурой с необходимыми полями, а операции реализуются как внешние функции, которые получают объекты данного типа в качестве аргументов;
  • как класс с закрытыми полями, где операции реализуются как методы класса;
  • инкапсулировать поля класса в независимой структуре и в ней реализовать методы Init(), Read(), Display(), toString(); в основном классе должно быть одно поле данных, представленное объектом-структурой.
  1. Комплексное число представляется парой действительных чисел (a, b), где а – действительная часть, b – мнимая часть. Реализовать класс Complex для работы с комплексными числами. Обязательно должны присутствовать операции:
    • сложения add, (a, b) + (c, d) = (a + с, b + d);
    • вычитания sub, (a, b) – (c, d) = (a – c, b – d);
    • умножения mul, (a, b) * (c, d) = (ac – bd, ad + bc);
    • деления div, (a, b) / (c, d) = (ac + bd, bc – ad) / (c2 + d2);
    • сравнение equ, (a, b) = (c, d), если (a = c) и (b = d);
    • сопряженное число conj, conj(a, b) = (a, -b);
    • Создать класс vector3D, задаваемый тройкой координат. Обязательно должны быть реализованы: сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора, сравнение длины векторов.
    • Создать класс ModelWindow для работы с моделями экранных окон. В качестве полей задаются: заголовок окна, координаты левого верхнего угла, размер по горизонтали, размер по вертикали, цвет окна, состояние “видимое/невидимое”, состояние “с рамкой/без рамки”. Координаты и размеры указываются в целых числах. Реализовать операции: передвижение окна по горизонтали, по вертикали; изменение высоты и/или ширины окна изменение цвета; изменение состояния, опрос состояния. Операции передвижении и изменении размера должны осуществлять проверку на пересечение границ экрана. Функция вывода на экран должна индуцировать состояние полей объекта.
    • Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned char – для копеек. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. Реализовать сложение, вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения.
    • Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции: получения и изменения полей данных, вычисления площади, вычисления периметра, вычисления высот, а также определения вида треугольника (равносторонний, равнобедренный или прямоугольный).
    • Создать класс Angle для работы с углами на плоскости, задаваемыми величиной в градусах и минутах. Обязательно должны быть реализованы: перевод в радианы, приведение к диапазону 0 – 360, увеличение и уменьшение угла на заданную величину, получение синуса, сравнение углов.
    • Создать класс Point для работы с точками на плоскости. Координаты точки – декартовы. Обязательно должны быть реализованы: перемещение точки по оси Х, перемещение по оси У, определение расстояния до начала координат, расстояния между двумя точками, преобразование в полярные координаты, сравнение на совпадение и несовпадение.
    • Рациональная (несократимая) дробь представляется парой целых чисел (a, b), где а – числитель, b – знаменатель. Создать класс Rational для работы с рациональными дробями. Обязательно должны быть реализованы операции:
      • сложения add, (a, b) + (c, d) = (ad + bс, bd);
      • вычитания sub, (a, b) – (c, d) = (ad – bc, bd);
      • умножения mul, (a, b) * (c, d) = (ac, bd);
      • деления div, (a, b) / (c, d) = (ad, bc);
      • сравнение equal, greate, less;
      • Должны быть реализована приватная функция сокращения дроби reduce, которая обязательно вызывается при выполнении арифметических операций.

      • Создать класс Date для работы с датами в формате “год.месяц.день”. Дата представляется структурой с тремя полями типа unsigned int: для года, месяца и дня. Класс должен включать не менее трех функций инициализации: числами, строкой вида “год.месяц.день ” (например, “2004.08.31”) и датой. Обязательными операциями являются: вычисление даты через заданное количество дней, вычитание заданного количества дней из даты, определение високосности года, присвоение и получение отдельных частей (год, месяц, день), сравнение дат (равно, до, после), вычисление количества дней между датами.
      • Создать класс Time для работы со временем в формате “час:минута:секунда”. Класс должен включать в себя не менее четырех функций инициализации: числами, строкой (например, “23:59:59”), секундами и временем. Обязательными операциями являются: вычисление разницы между двумя моментами времени в секундах, сложение времени и заданного количества секунл, вычитание из времени заданного количества секунд, сравнение моментов времени, перевод в секунды, перевод в минуты (с округлением до целой минуты).
      • Реализовать класс FazzyNumber для работы с нечетными числами, которые представляются тройками чисел (x – e1, x, x + e2). Для чисел A = (A – a1, A, A + a1) и B = (B – b1, B, B + b1) арифметические операции выполняются по следующим формулам:
        • сложение A + B = (A + B – a1 – b1, A + B, A + B + a1 + b1);
        • вычитание A – B = (A – B – a1 – b1, A – B, A – B + a1 + b1);
        • умножение AB = (AB – B a1 – A b1 + a1 b1, AB, AB + B a1 + A b1 + a1 b1)
        • обратное число A = (1 / ( A + a1), 1/ A, 1 ( A – a1)), A > 0;
        • деление A / B = ((A – a1)/(B + b1), A/B, (A + a1)/(B – b1)), B > 0;
        • Реализовать класс Account, представляющий собой банковский счет. В классе должны быть четыре поля: фамилия владельца, номер счета, процент начисления и сумма в рублях. Открытие нового счета выполняется операцией инициализация. Необходимо выполнять следующие операции: сменить владельца счета, снять некоторую сумму денег со счета, положить деньги на счет, начислить проценты, перевести сумму в доллары, перевести сумму в евро, получить сумму прописью (преобразовать в числительное).
        • Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01 (1 копейка), 0.05 (5 копеек), 0.1 (10 копеек), 0.5 (50 копеек). Создать класс Money для работы с денежными суммами. Сумма должна быть представлена полями-номиналами, значениями которых должно быть количество купюр данного достоинства. Реализовать сложение сумм, вычитание сумм, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой.
        • Реализовать класс Bankomat, моделирующий работу банкомата. В классе должны содержаться поля для хранения идентификационного номера банкомата, информации о текущей сумме денег, оставшейся в банкомате, минимальной и максимальной суммах, которые позволяется снять клиенту в один день. Сумма денег представляется полями-номиналами (10-1000). Реализовать метод инициализации банкомата, метод загрузки купюр в банкомат и метод снятия определенной суммы денег. Метод снятия денег должен выполнять проверку на корректность снимаемой суммы: она не должна быть меньше минимального значения и не должна превышать максимальное значение. Метод toString() должен преобразовать в строку сумму денег, оставшуюся в банкомате.
        • Создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое со знаком, дробная часть – беззнаковое короткое число. Реализовать арифметические операции сложения, вычитания, умножения и операции сравнения.
        • Создать класс Goods (товар). В классе должны быть представлены поля: наименование товара, дата оформления, цена товара, количество единиц товара, номер накладной, по которой товар поступил на склад. Реализовать методы изменения цены товара, изменение количества товара (увеличения и уменьшения), вычисления стоимости товара. Метода toString() должен выдавать в виде строки стоимость товара.
        • Создать класс BitString для работы с 64-битовыми строками. Битовая строка должна быть представлена двумя полями типа unsigned long. Должны быть реализованы все традиционные операции для работы с битами: and, xor, or, not. Реализовать сдвиг влево ShiftLeft и сдвиг вправо shiftRight на заданное количество битов.
        • Создать класс LongLong для работы с целыми числами из 64 бит. Число должно быть представлено двумя полями: long – старшая часть, unsigned long – младшая часть. Должны быть реализованы арифметические операции, присутствующие в С++ (без присваивания) и сравнения
        • Создать класс Payment(зарплата). В классе должны быть представлены поля: фамилия-имя-отчество, оклад, год поступления на работу, процент надбавки, подоходный налог, количество отработанных дней в месяце, количество рабочих дней в месяце, начисленная и удержанная суммы. Реализовать методы: вычисления начисленной суммы, вычисления удержанной суммы, вычисление суммы, выдаваемой на руки, вычисление стажа. Стаж вычисляется как полное количество лет, прошедших от года поступления на работу, до текущего года. Начисления представляют собой сумму, начисленную за отработанные дни, и надбавки, то есть доли от первой суммы. Удержания представляют собой отчисления в пенсионный фонд (1% от начисленной суммы) и подоходный налог. Подоходный налог составляет 14% от начисленной суммы без отчислений в пенсионный фонд.
        • Реализовать класс Cursor. Полями являются координаты курсора по горизонтали и вертикали – целые положительные числа, вид курсора – горизонтальный или вертикальный, размер курсора – целое от 1 до 15. Реализовать методы изменения координат курсора, изменения вида курсора, изменения размера курсора, методы гашения и восстановления курсора.
        Читайте также:  Тут было от чего волноваться

        Лабораторная работа №2. Абстрактные классы. [ править ]

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

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

        1. Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Trapezium (трапеция) со своими функциями площади и периметра. Самостоятельно определить, какие поля необходимы, какие из них можно задать в базовом классе, а какие – в производных. Площадь трапеции: S = (a + b) * h / 2.
        2. Создать абстрактный базовый класс Number с виртуальными методами – арифметическими операциями. Создать производные классы Integer (целое) и Real (действительное).
        3. Создать абстрактный базовый класс Body (тело) с виртуальными функциями вычисления площади, поверхности и объема. Создать производные классы: Parallelepiped (параллелепипед) и Ball (шар) со своими функциями площади, поверхности и объема.
        4. Создать абстрактный класс Currency (валюта) для работы с денежными суммами. Определить виртуальные функции перевода в рубли и вывода на экран. Реализовать производные классы Dollar (доллар) и Euro (евро) со своими функциями перевода и вывода на экран.
        5. Создать абстрактный базовый класс Triangle для представления треугольника с виртуальными функциями вычисления площади и периметра. Поля данных должны включать две стороны и угол между ними. Определить классы-наследники: прямоугольный треугольник, равнобедренный треугольник, равносторонний треугольник со своими функциями вычисления площади и периметра.
        6. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Создать производные классы FazzyNumber (задание 1.11) и Complex (задание 1.1)
        7. Создать абстрактный базовый класс Root (корень) с виртуальными методами вычисления корней и вывода результата на экран. Определить производные классы Linear (линейное уравнение) и Square (квадратное уравнение) с собственными методами вычисления корней и вывода на экран.
        8. Создать абстрактный базовый класс Function (функция) с виртуальными методами вычисления значения функции y = f(x) в заданной точке x и вывода результата на экран. Определить производные классы Ellipse (эллипс), Hyperbola (гипербола) с собственными функциями вычисления y в зависимости от входного параметра x. Уравнение эллипса ; гиперболы: .
        9. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Реализовать производные классы Complex (задание 1.1) и Rational (задание 1.8)
        10. Создать абстрактный базовый класс Triad с виртуальными методами увеличения на 1. Реализовать производные классы Date (задание 1.9) и Time (задание 1.10)
        11. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Реализовать производные классы Money (задание 1.4) и Fraction (задание 1.15)
        12. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Реализовать производные классы Money (задание 1.4) и Money (задание 1.13)
        13. Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого – цифра.
        14. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Реализовать производные классы Money (задание 1.4) и Complex (задание 1.1)
        15. Создать абстрактный базовый класс Series (прогрессия) с виртуальными функциями вычисления j-го элемента прогрессии и суммы прогрессии. Определить производные классы: Linear (арифметическая) и Exponential (геометрическая). Арифметическая прогрессия Сумма арифметической прогрессии: . Геометрическая прогрессия: Сумма геометрической прогрессии: .
        16. Создать абстрактный класс Norm с виртуальной функцией вычисления нормы и модуля. Определить производные классы Complex, Vector3D с собственными функциями вычисления нормы и модуля. Модуль для комплексного числа вычисляется как корень из суммы квадратов действительной и мнимой частей; норма для комплексных чисел вычисляется как модуль в квадрате. Модуль вектора вычисляется как корень квадратный из суммы квадратов координат; норма вектора вычисляется как максимальное из абсолютных значений координат.
        17. Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Реализовать производные классы FazzyNumber (задание 1.11) и Fraction (задание 1.15).
        18. Создать абстрактный базовый класс Container с виртуальными методами sort() и поэлементной обработки контейнера foreach(). Разработать производные классы Bubble (пузырек) и Choice (выбор). В первом классе сортировка реализуется методом пузырька, а поэлементная обработка состоит в извлечении квадратного корня. Во втором классе сортировка реализуется методом выбора, а поэлементная обработка – вычисление логарифма.
        19. Создать абстрактный базовый класс Array с виртуальными методами сложения и поэлементной обработки массива foreach(). Разработать производные классы AndArray и OrArray (выбор). В первом классе операция сложения реализуется как пересечение множеств, а поэлементная обработка представляет собой в извлечении квадратного корня. Во втором классе операция сложения реализуется как объединение, а поэлементная обработка – вычисление логарифма.
        Читайте также:  Шаблон карточки товара битрикс

        Лабораторная работа №3. Наследование вместо композиции. [ править ]

        В следующих заданиях требуется реализовать классы как классы-наследники с перегрузкой операций и конструкторами; используя открытое наследование.

        • В качестве базового класса реализовать подходящий класс-структуру: пару (Pair) или тройку (Triad) чисел с конструкторами, с полным набором операций сравнения и счетчиком объектов.
        • Реализовать для структуры функции вводавывода в виде дружественных.
        • Не определять функции вводавывода объектов для основных классов.
        Оцените статью
        Добавить комментарий

        Adblock detector