Написать программу для работы с геометрическими фигурами - C#
Формулировка задачи:
Доброго всем дня! дали задачу, от решения которой зависит, будут ли меня далее учить чему-то. Сидела неделю, читая разные темы и коды и поняла, что в голове уже полный кавардак, не понимаю с чего начать и как выстроить весь алгоритм программы. Направьте пожалуйста в нужное русло
Критерии:
1) Пользовательское меню. ( Console, AWT, Swing, Spring на выбор)
2) Пользователь должен иметь возможность добавить новую фигуру через координаты точек. ( а)вводится количество точек и их координаты б) тип фигуры и координаты)
3) Удаление фигуры по id.
4) Вывод id всех фигур, их координат и тип фигуры.
5) Вывод площади, периметра любой фигуры.
6) Проверка факта пересечения 2-х фигур.
7) Считывание данных из файла.
8) *Выгрузка данных в файл. (не обязательно).
p.s. в моем случае сказали можно ограничиться 3-4 угольниками.
страдая и штудируя и этот сайт в частности уже потерялась в вариантах своего кода, это последний, просто рассчитывающий площадь и периметр треугольника и прямоугольника....
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //Console.WriteLine("Введите координаты первой точки"); // Console.Write("x: "); //Console.ReadKey(); Triangle tr1 = new Triangle(new Point(1, 1), new Point(2, 2), new Point(3, 4)); // if (AB >= BC + AC || AC >= BC + AB || BC >= AB + AC) // { // throw new ArgumentException("Недопустимый размер треугольника. Точки лежат на одной прямой или длина ребра равна нулю"); //} Rectangle rect1 = new Rectangle(new Point(5, 4), new Point(5, 18), new Point(45, 18), new Point(45, 4)); IFigure ifig; ifig = tr1; double P_tr = ifig.P(); double S_tr = ifig.S(); foreach (var pt in ifig.Coordinates) Console.WriteLine("X={0}, Y={1}", pt.X, pt.Y); ifig = rect1; double P_rect = ifig.P(); double S_rect = ifig.S(); foreach (var pt in ifig.Coordinates) Console.WriteLine("X={0}, Y={1}", pt.X, pt.Y); Console.WriteLine("Периметр треугольника = {0}.\nПлощадь треугольника = {1}", P_tr, S_tr); Console.WriteLine("Периметр прямоугольника = {0}.\nПлощадь прямоугольника = {1}", P_rect, S_rect); Console.Read(); } } class Point { public int X { get; set; } public int Y { get; set; } public Point(int x, int y) { X = x; Y = y; } } class Triangle : Point, IFigure { Point p1; Point p2; Point p3; Point[] points; public Triangle(Point pt1, Point pt2, Point pt3) : base(pt1.X, pt1.Y) { p1 = pt1; p2 = pt2; p3 = pt3; points = new Point[3]; points[0] = p1; points[1] = p2; points[2] = p3; } //длина первой стороны public double AB { get { return Math.Sqrt(Math.Pow(points[0].X - points[1].X, 2) + Math.Pow(points[0].Y - points[1].Y, 2)); } } //длина второй стороны public double BC { get { return Math.Sqrt(Math.Pow(points[1].X - points[2].X, 2) + Math.Pow(points[1].Y - points[2].Y, 2)); } } //длина третьей стороны public double AC { get { return Math.Sqrt(Math.Pow(points[0].X - points[2].X, 2) + Math.Pow(points[0].Y - points[2].Y, 2)); } } public double P() { //расчет периметра return AB + BC + AC; } //расчет полупериметра public double HP { get { return (AB + BC + AC) * 0.5; } } public double S() { //расчет площади return (Math.Sqrt(HP * (HP - AB) * (HP - BC) * (HP - AC))); } public Point[] Coordinates { get { return points; } set { points = value; } } } class Rectangle : Point, IFigure { Point p1; Point p2; Point p3; Point p4; Point[] points; public Rectangle(Point pt1, Point pt2, Point pt3, Point pt4) : base(pt1.X, pt1.Y) { p1 = pt1; p2 = pt2; p3 = pt3; p4 = pt4; points = new Point[4]; points[0] = p1; points[1] = p2; points[2] = p3; points[3] = p4; } //длина первой стороны public double side1 { get { return Math.Sqrt(M ath.Pow(points[0].X - points[1].X, 2) + Math.Pow(points[0].Y - points[1].Y, 2)); } } //длина второй стороны public double side2 { get { return Math.Sqrt(Math.Pow(points[1].X - points[2].X, 2) + Math.Pow(points[1].Y - points[2].Y, 2)); } } //длина третьей стороны public double side3 { get { return Math.Sqrt(Math.Pow(points[0].X - points[2].X, 2) + Math.Pow(points[0].Y - points[2].Y, 2)); } } public double P() { //периметр if (side1 == side2) { return side1 * 2 + side3 * 2; } else { return side1 * 2 + side2 * 2; } } public double S() { //площадь if (side1 == side2) { return side1 * side3; } else { return side1 * side2; } } public Point[] Coordinates { get { return points; } set { points = value; } } } interface IFigure { double P(); double S(); Point[] Coordinates { get; set; } } }
Решение задачи: «Написать программу для работы с геометрическими фигурами»
textual
Листинг программы
using System; using System.Collections.Generic; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int param = 0;// Выбор параметра в меню int colvoPoint = 0; // Количество точек int x = 0; // Координата x int y = 0; // Координата y int indexDel = 0; // Индекс удаляемой фигуры List<List<List<int>>> figure = new List<List<List<int>>>();//Фигуры + точки + координаты точек //----------------------------------------------------------------------------------// //----------------------------------------------------------------------------------// //----------------------------------------------------------------------------------// while (true) { Console.WriteLine("--Меню--"); Console.WriteLine("1 - Добавить фигуру"); Console.WriteLine("2 - Удалить фигуру"); Console.WriteLine("3 - Вывод данных фигур"); Console.WriteLine("4 - Выход"); param = Convert.ToInt32(Console.ReadLine()); switch (param) { case 1: // Добавление новой фигуры figure.Add(new List<List<int>>()); Console.WriteLine(); Console.WriteLine("Введите количество точек фигуры:"); colvoPoint = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(); Console.WriteLine("Введите координаты точек"); for (int i = 0; i < colvoPoint; i++) { figure[figure.Count - 1].Add(new List<int>()); Console.WriteLine(i + 1 + "я точка"); Console.Write("X: "); x = Convert.ToInt32(Console.ReadLine()); figure[figure.Count - 1][i].Add(x);//x Console.Write("Y: "); y = Convert.ToInt32(Console.ReadLine()); figure[figure.Count - 1][i].Add(y);//y } Console.WriteLine(); break; case 2: // Удаление фигуры по номеру добавления Console.Write("Введите индекс фигуры "); indexDel = Convert.ToInt32(Console.ReadLine()); figure.RemoveAt(indexDel); Console.WriteLine(); break; case 3: //Вывод данных фигур for (int i = 0; i < figure.Count; i++) { Console.WriteLine("ID - " + (figure.Count - 1)); Console.WriteLine("Point - " + figure[i].Count); for (int j = 0; j < figure[i].Count; j++) { for (int k = 0; k < 2; k++) Console.WriteLine(k + 1 + "я координата - " + figure[i][j][k]); } } Console.WriteLine(); break; case 4: Environment.Exit(0); break; } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д