Написать программу для работы с геометрическими фигурами - 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;
- }
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д