Написать программу для работы с геометрическими фигурами - 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;
}
}
}
}
}