Файл: Лабораторная работа 2 Классы и объекты java по дисциплине Объектноориентированное программирование ст гр. Ивт223 Седов Р. М.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 135
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской ФедерацииФедеральное государственное бюджетное образовательное учреждениевысшего образованияУфимский Государственный Авиационный Технический УниверситетЛабораторная работа №2«Классы и объекты JAVA»по дисциплине «Объектно-ориентированное программирование»Выполнил: ст. гр. ИВТ-223Седов Р. М.Проверил преподаватель:Сулейманова А. М.Уфа 2021 г.Цель работы:Целью настоящей работы является изучение классов и объектов при программировании на JAVA.Условие задания:Вариант 7 (17). 1. Создать класс прямоугольник, члены класса – длины сторон a и b. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – параллелепипед с высотой с, добавить в класс метод определения объема фигуры, перегрузить методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классом: дано N прямоугольников и M параллелепипедов, найти количество прямоугольников, у которых площадь больше средней площади прямоугольников и количество кубов (все ребра равны). 2. Создать класс четырехугольник, члены класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – трапеция, предусмотреть в классе проверку, является ли фигура трапецией. Написать программу, демонстрирующую работу с классом: дано N четырехугольников и M трапеций, найти четырехугольник с минимальной площадью и трапецию с максимальной средней линией. 3. Создать класс треугольник, члены класса – длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – равносторонний треугольник, предусмотреть в классе проверку, является ли треугольник равносторонним. Написать программу, демонстрирующую работу с классом: дано N треугольников и M равносторонних треугольников, найти количество треугольников, имеющих максимальную площадь и равносторонний треугольник с наибольшей медианой.
Задание 1.Схема функции для ввода числа с клавиатуры (аргументы – число попыток и проверка на положительность)Схема основного алгоритма.Класс «Rectangle(Прямоугольник)».Поля:Float a; //длинаFloat b;//ширинаКласс «Rectangle».Методы:Класс «Parallelepiped(Параллелепипед)», наследуется от «Rectangle». Поля:Float c; //высотаКласс «Параллелепипед».Методы:Код программы.import java.util.Scanner;public class Lr2Z1 {public static void main(String[] args){int N=0, M=0;//число прямоугольников и параллелепипедовRectangle[] rectangles;//объявление массива из прямоугольниковParallelepiped[] parallelepipeds;//объявление массива из параллелеппедовSystem.out.println("Введите число прямоугольников:");N=(int)enterNumber(3,true);//удобная функция для ввода с клавиатурыSystem.out.println("Вы ввели:"+N);rectangles=new Rectangle[N];//выделение памяти под массив прямоугольниковfloat averageSquare=0;//для подсчета средней площадиfor(int i=0;irectangles[i]=new Rectangle();//создание объектаrectangles[i].info();//вывод информации объектаaverageSquare+=rectangles[i].square();//подсчет суммы площадей}averageSquare=averageSquare/N;//вычисление средней площадиfloat numberOfRectangles=0;//переменная для подсчета количества прямоугольниковfor(int i=0;iif(rectangles[i].square()>averageSquare){//сравнение площади каждого прямоугольника со средней площадьюnumberOfRectangles++;//увеличение счетчика, если площадь больше средней};}if(N!=0)System.out.println("Количество прямоугольников с площадью, большей средней:"+numberOfRectangles+" (средняя площадь="+averageSquare+")");System.out.println("Введите число параллелепипедов:");M=(int)enterNumber(3,true);//ввода с клавиатуры числа параллелепипедовparallelepipeds=new Parallelepiped[M];//выделение памяти для массива параллелепипедовSystem.out.println("Вы ввели:"+M);float numberOfCubes=0;//переменная для подсчета числа кубовfor(int i=0;iparallelepipeds[i]=new Parallelepiped();//создание объектаparallelepipeds[i].info();//вывод информации о немif(parallelepipeds[i].isACube()){//проверка на кубnumberOfCubes++;//если выполняется, увеличиваем счетчик}}if(M!=0)System.
out.println("Количество кубов"+numberOfCubes);}private static class Rectangle{protected float a,b;//ширина и длинаpublic Rectangle(){//конструктор//ввод параметров с клавиатурыSystem.out.println("Введите длину");a= enterNumber(3,true);System.out.println("Введите ширину ");b= enterNumber(3,true);}public float square(){//функция для вычисления площадиreturn a*b;}public float perimeter(){//функция для вычисления периметраreturn (a+b)*2;}public float diagonal(){//функция для вычисления диагоналиreturn (float)Math.sqrt(a*a+b*b);}public void info(){//функция для вывода информацииSystem.out.println(" -Стороны прямоугольника: "+a+"см, "+b+"см");System.out.println(" -Площдь="+square());System.out.println(" -Периметр="+perimeter());System.out.println(" -Диагональ="+diagonal());}}private static class Parallelepiped extends Rectangle{//класс наследуется от класса прямоугольникprivate float c;//новое поле-высотаpublic Parallelepiped() {super();//вызово конструктора супер класса//ввод с клавиатуры высотыSystem.out.println("Введите высоту ");c= enterNumber(3,true);}public float volume(){//функция для вычисления объемаreturn a*b*c;}public float square(){//перегруженная функция для вычисления площадиreturn (a*b+b*c+a*c)*2;}public void info(){//функция для вывода информацииSystem.out.println(" -Стороны параллелепипеда: "+a+"см, "+b+"см, "+c+"см");System.out.println(" -Площдь="+square());System.out.println(" -Объем="+volume());}public boolean isACube(){//функция для проверки - является ли фигура кубомif(a==b&&b==c&&a==c) return true;return false;}}public static float enterNumber(int tries, boolean onlyPositive){//функция для ввода положительного числа с клавиатурыScanner scanner=new Scanner(System.in);//создание объекта для чтения с клавиатурыfloat number=0;//переменная, куда созранится введеное числоdo{//цикл для повторного ввода при неудачной попыткиtry{number=Float.parseFloat(scanner.nextLine()); //попытка считать число с клавиатурыif(onlyPositive){if(number>=0) {return number; //возвращаем результат если число больше нуля}System.out.println("Ошибка:Число меньше нуля!");tries--;//уменьшаем попытки}else{return number;}}catch(Exception e){ //блок для обрабокти ошибки, когда введено не числоSystem.out.println("Ошибка:Введено не число!");tries--;//уменьшаем попытки};}while(tries>0);//выполняем цикл пока есть попыткиSystem.out.println("Попытки закончились!");System.exit(0);//при выходе из цикла завершаем программуreturn 0;}Задание 2.Схема основного алгоритма.
Вспомогательный Класс «Point (точка)». Поля:Float x; Float y;Вспомогательный Класс «Point (точка)». Методы:Вспомогательный Класс «Vector (вектор)». Поля:Float x; Float y;Вспомогательный Класс «Vector (вектор)». Методы:Класс «Tetragon (четырехугольник)». Поля:Point[] points;//Точки четырехугольника:Класс «Tetragon (четырехугольник)». МетодыКласс «Trapezoid (трапеция)» наследуется от «Tetragon». Поля:float middleLine;//Длина средней линииКласс «Trapezoid (трапеция)». МетодыКод программы.import java.util.Scanner;public class Lr2Z2 {public static void main(String[] args){int N=0, M=0;//число четырехугольников и трапецийTetragon[] tetragons;//объявление массива из четырехугольниковTrapezoid[] trapezoids;//объявление массива из трапецийSystem.out.println("Введите число четырехугольников:");N=(int)enterNumber(3,true);//наша функция для ввода с клавиатурыSystem.out.println("Вы ввели:"+N);tetragons=new Tetragon[N];//выделение памяти под массив четырехугольниковint tetragonWithMinSquare=0;//номер четырех-ка с минимальной площаьюfor(int i=0;itetragons[i]=new Tetragon();//создание объектаtetragons[i].info();//вывод информации объектаif(tetragons[i].square(){tetragonWithMinSquare=i;//если меньше, то переприсваиваем номер}}//вывод информацииif(N!=0)System.out.println("-Четырехугольник с минимальной площадью: №"+(tetragonWithMinSquare+1)+", Минимальная площадь="+tetragons[tetragonWithMinSquare].square());System.out.println("Введите число трапеций:");M=(int)enterNumber(3,true);//ввод с клавиатуры числа трапециейtrapezoids=new Trapezoid[M];//выделение памяти для массива трапецийSystem.out.println("Вы ввели:"+M);int trapezoidWithMaxLine=0;//номер трапеции с максимальной средней линиейfor(int i=0;itrapezoids[i]=new Trapezoid();//создание объекта трапецииif(trapezoids[i].isTrapezoid()==true){//проверка является ли фигура трапециейtrapezoids[i].info();//вывод информацииif(trapezoids[i].middleLine>trapezoids[trapezoidWithMaxLine].middleLine){
//сравнение средней линии текущей трапеции с максимальной//если больше выполняется то присваиваем номер текущей номеру максимальнойtrapezoidWithMaxLine=i;}}else {//если введена не трапеции, удаляем объект и откатываем итерациюSystem.out.println("Введите трапецию");//если нет, то удаление объекта и уменьшение итерацииtrapezoids[i]=null;//удалениеi--;}}//выводif(M!=0)System.out.println("-Трапеция с максимальной средней линией: №"+(trapezoidWithMaxLine+1)+", Длина средней линии="+trapezoids[trapezoidWithMaxLine].middleLine);}public static class Tetragon{//Класс четерехугольник//Поле для точек четырехугольника из объектов "Точка"protected Point[] points=new Point[4];//конструкторpublic Tetragon(){//ввод координат точек с клавиатурыfor(int i=0;iSystem.out.println("Введите координаты (x, y) "+(i+1)+"-ой точки");//В функцию ввода с клавиатуры передается по ссылке число попыток для вводаfloat x=enterNumber(3,false);float y=enterNumber(3,false);//создание точкиpoints[i]=new Point(x,y);}}public void info(){//функция для вывода информацииSystem.out.println("Точки:");for(int i=0;i<4;i++){System.out.print("("+points[i].x+";"+points[i].y+") ");}System.out.println("\n -Длины сторон: AB="+length(1,2)+", BC="+length(2,3)+", CD="+length(3,4)+", AD="+length(1,4));System.out.println(" -Длины диагоналей: AС="+length(1,3)+", СD="+length(2,4));System.out.println(" -Периметр="+perimeter());System.out.println(" -Площадь="+square());}//функция для расчета длины стороны по номерам точек от 1 до 4public float length(int p1,int p2){return new Vector(points[p1-1],points[p2-1]).mod();};//функция для вычисления периметраpublic float perimeter(){return length(1,2)+length(2,3)+length(3,4)+length(1,4);}//функция для вычисления площадиpublic float square(){//создание двух векторов из диагоналейVector d1=new Vector(points[0],points[2]);Vector d2=new Vector(points[1],points[3]);//вычисление косинусаdouble cos=d1.cos(d2);//вычисление синусаdouble sin=Math.sqrt(1-cos*cos);//нахождение площади четырехугольника по формулеdouble square=0.5f*sin*d1.mod()*d2.mod();return (float)square;}}//класс "Трапеция" наследует методы от класса "Четырехугольник"static class Trapezoid extends Tetragon{//Поле хранящее длину средней линииpublic float middleLine;//Конструкторpublic Trapezoid(){//вызов конструктора класса четырехугольникsuper();//Проверка является ли фигура трапециейSystem.out.println(isTrapezoid()==true?"Это трапеция!":"Это не трапеция!");}//Функция для проверки, является ли фигура трапециейpublic boolean isTrapezoid(){//Создание векторов для каждой стороныVector AB=new Vector(points[0],points[1]);Vector BC=new Vector(points[1],points[2]);Vector CD=new Vector(points[2],points[3]);Vector AD=new Vector(points[0],points[3]);
Задание 1.Схема функции для ввода числа с клавиатуры (аргументы – число попыток и проверка на положительность)Схема основного алгоритма.Класс «Rectangle(Прямоугольник)».Поля:Float a; //длинаFloat b;//ширинаКласс «Rectangle».Методы:Класс «Parallelepiped(Параллелепипед)», наследуется от «Rectangle». Поля:Float c; //высотаКласс «Параллелепипед».Методы:Код программы.import java.util.Scanner;public class Lr2Z1 {public static void main(String[] args){int N=0, M=0;//число прямоугольников и параллелепипедовRectangle[] rectangles;//объявление массива из прямоугольниковParallelepiped[] parallelepipeds;//объявление массива из параллелеппедовSystem.out.println("Введите число прямоугольников:");N=(int)enterNumber(3,true);//удобная функция для ввода с клавиатурыSystem.out.println("Вы ввели:"+N);rectangles=new Rectangle[N];//выделение памяти под массив прямоугольниковfloat averageSquare=0;//для подсчета средней площадиfor(int i=0;irectangles[i]=new Rectangle();//создание объектаrectangles[i].info();//вывод информации объектаaverageSquare+=rectangles[i].square();//подсчет суммы площадей}averageSquare=averageSquare/N;//вычисление средней площадиfloat numberOfRectangles=0;//переменная для подсчета количества прямоугольниковfor(int i=0;iif(rectangles[i].square()>averageSquare){//сравнение площади каждого прямоугольника со средней площадьюnumberOfRectangles++;//увеличение счетчика, если площадь больше средней};}if(N!=0)System.out.println("Количество прямоугольников с площадью, большей средней:"+numberOfRectangles+" (средняя площадь="+averageSquare+")");System.out.println("Введите число параллелепипедов:");M=(int)enterNumber(3,true);//ввода с клавиатуры числа параллелепипедовparallelepipeds=new Parallelepiped[M];//выделение памяти для массива параллелепипедовSystem.out.println("Вы ввели:"+M);float numberOfCubes=0;//переменная для подсчета числа кубовfor(int i=0;iparallelepipeds[i]=new Parallelepiped();//создание объектаparallelepipeds[i].info();//вывод информации о немif(parallelepipeds[i].isACube()){//проверка на кубnumberOfCubes++;//если выполняется, увеличиваем счетчик}}if(M!=0)System.
out.println("Количество кубов"+numberOfCubes);}private static class Rectangle{protected float a,b;//ширина и длинаpublic Rectangle(){//конструктор//ввод параметров с клавиатурыSystem.out.println("Введите длину");a= enterNumber(3,true);System.out.println("Введите ширину ");b= enterNumber(3,true);}public float square(){//функция для вычисления площадиreturn a*b;}public float perimeter(){//функция для вычисления периметраreturn (a+b)*2;}public float diagonal(){//функция для вычисления диагоналиreturn (float)Math.sqrt(a*a+b*b);}public void info(){//функция для вывода информацииSystem.out.println(" -Стороны прямоугольника: "+a+"см, "+b+"см");System.out.println(" -Площдь="+square());System.out.println(" -Периметр="+perimeter());System.out.println(" -Диагональ="+diagonal());}}private static class Parallelepiped extends Rectangle{//класс наследуется от класса прямоугольникprivate float c;//новое поле-высотаpublic Parallelepiped() {super();//вызово конструктора супер класса//ввод с клавиатуры высотыSystem.out.println("Введите высоту ");c= enterNumber(3,true);}public float volume(){//функция для вычисления объемаreturn a*b*c;}public float square(){//перегруженная функция для вычисления площадиreturn (a*b+b*c+a*c)*2;}public void info(){//функция для вывода информацииSystem.out.println(" -Стороны параллелепипеда: "+a+"см, "+b+"см, "+c+"см");System.out.println(" -Площдь="+square());System.out.println(" -Объем="+volume());}public boolean isACube(){//функция для проверки - является ли фигура кубомif(a==b&&b==c&&a==c) return true;return false;}}public static float enterNumber(int tries, boolean onlyPositive){//функция для ввода положительного числа с клавиатурыScanner scanner=new Scanner(System.in);//создание объекта для чтения с клавиатурыfloat number=0;//переменная, куда созранится введеное числоdo{//цикл для повторного ввода при неудачной попыткиtry{number=Float.parseFloat(scanner.nextLine()); //попытка считать число с клавиатурыif(onlyPositive){if(number>=0) {return number; //возвращаем результат если число больше нуля}System.out.println("Ошибка:Число меньше нуля!");tries--;//уменьшаем попытки}else{return number;}}catch(Exception e){ //блок для обрабокти ошибки, когда введено не числоSystem.out.println("Ошибка:Введено не число!");tries--;//уменьшаем попытки};}while(tries>0);//выполняем цикл пока есть попыткиSystem.out.println("Попытки закончились!");System.exit(0);//при выходе из цикла завершаем программуreturn 0;}Задание 2.Схема основного алгоритма.
Вспомогательный Класс «Point (точка)». Поля:Float x; Float y;Вспомогательный Класс «Point (точка)». Методы:Вспомогательный Класс «Vector (вектор)». Поля:Float x; Float y;Вспомогательный Класс «Vector (вектор)». Методы:Класс «Tetragon (четырехугольник)». Поля:Point[] points;//Точки четырехугольника:Класс «Tetragon (четырехугольник)». МетодыКласс «Trapezoid (трапеция)» наследуется от «Tetragon». Поля:float middleLine;//Длина средней линииКласс «Trapezoid (трапеция)». МетодыКод программы.import java.util.Scanner;public class Lr2Z2 {public static void main(String[] args){int N=0, M=0;//число четырехугольников и трапецийTetragon[] tetragons;//объявление массива из четырехугольниковTrapezoid[] trapezoids;//объявление массива из трапецийSystem.out.println("Введите число четырехугольников:");N=(int)enterNumber(3,true);//наша функция для ввода с клавиатурыSystem.out.println("Вы ввели:"+N);tetragons=new Tetragon[N];//выделение памяти под массив четырехугольниковint tetragonWithMinSquare=0;//номер четырех-ка с минимальной площаьюfor(int i=0;itetragons[i]=new Tetragon();//создание объектаtetragons[i].info();//вывод информации объектаif(tetragons[i].square(){tetragonWithMinSquare=i;//если меньше, то переприсваиваем номер}}//вывод информацииif(N!=0)System.out.println("-Четырехугольник с минимальной площадью: №"+(tetragonWithMinSquare+1)+", Минимальная площадь="+tetragons[tetragonWithMinSquare].square());System.out.println("Введите число трапеций:");M=(int)enterNumber(3,true);//ввод с клавиатуры числа трапециейtrapezoids=new Trapezoid[M];//выделение памяти для массива трапецийSystem.out.println("Вы ввели:"+M);int trapezoidWithMaxLine=0;//номер трапеции с максимальной средней линиейfor(int i=0;itrapezoids[i]=new Trapezoid();//создание объекта трапецииif(trapezoids[i].isTrapezoid()==true){//проверка является ли фигура трапециейtrapezoids[i].info();//вывод информацииif(trapezoids[i].middleLine>trapezoids[trapezoidWithMaxLine].middleLine){
//сравнение средней линии текущей трапеции с максимальной//если больше выполняется то присваиваем номер текущей номеру максимальнойtrapezoidWithMaxLine=i;}}else {//если введена не трапеции, удаляем объект и откатываем итерациюSystem.out.println("Введите трапецию");//если нет, то удаление объекта и уменьшение итерацииtrapezoids[i]=null;//удалениеi--;}}//выводif(M!=0)System.out.println("-Трапеция с максимальной средней линией: №"+(trapezoidWithMaxLine+1)+", Длина средней линии="+trapezoids[trapezoidWithMaxLine].middleLine);}public static class Tetragon{//Класс четерехугольник//Поле для точек четырехугольника из объектов "Точка"protected Point[] points=new Point[4];//конструкторpublic Tetragon(){//ввод координат точек с клавиатурыfor(int i=0;iSystem.out.println("Введите координаты (x, y) "+(i+1)+"-ой точки");//В функцию ввода с клавиатуры передается по ссылке число попыток для вводаfloat x=enterNumber(3,false);float y=enterNumber(3,false);//создание точкиpoints[i]=new Point(x,y);}}public void info(){//функция для вывода информацииSystem.out.println("Точки:");for(int i=0;i<4;i++){System.out.print("("+points[i].x+";"+points[i].y+") ");}System.out.println("\n -Длины сторон: AB="+length(1,2)+", BC="+length(2,3)+", CD="+length(3,4)+", AD="+length(1,4));System.out.println(" -Длины диагоналей: AС="+length(1,3)+", СD="+length(2,4));System.out.println(" -Периметр="+perimeter());System.out.println(" -Площадь="+square());}//функция для расчета длины стороны по номерам точек от 1 до 4public float length(int p1,int p2){return new Vector(points[p1-1],points[p2-1]).mod();};//функция для вычисления периметраpublic float perimeter(){return length(1,2)+length(2,3)+length(3,4)+length(1,4);}//функция для вычисления площадиpublic float square(){//создание двух векторов из диагоналейVector d1=new Vector(points[0],points[2]);Vector d2=new Vector(points[1],points[3]);//вычисление косинусаdouble cos=d1.cos(d2);//вычисление синусаdouble sin=Math.sqrt(1-cos*cos);//нахождение площади четырехугольника по формулеdouble square=0.5f*sin*d1.mod()*d2.mod();return (float)square;}}//класс "Трапеция" наследует методы от класса "Четырехугольник"static class Trapezoid extends Tetragon{//Поле хранящее длину средней линииpublic float middleLine;//Конструкторpublic Trapezoid(){//вызов конструктора класса четырехугольникsuper();//Проверка является ли фигура трапециейSystem.out.println(isTrapezoid()==true?"Это трапеция!":"Это не трапеция!");}//Функция для проверки, является ли фигура трапециейpublic boolean isTrapezoid(){//Создание векторов для каждой стороныVector AB=new Vector(points[0],points[1]);Vector BC=new Vector(points[1],points[2]);Vector CD=new Vector(points[2],points[3]);Vector AD=new Vector(points[0],points[3]);