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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы