Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2021, 16:52   #1
Craizi8
Пользователь
 
Регистрация: 08.12.2019
Сообщений: 30
По умолчанию Классы. Абстрагирование. Наследование. Инкапсуляция. Полиморфизм.

Реализовать возможность пользователю добавлять новые объекты базового и производных классов в память программы.
Реализовать возможность пользователю просматривать весь список добавленных в память программы объектов классов (список должен содержать 2-3 основных поля, по которым возможно идентифицировать весь объект класса).
Реализовать возможность пользователю просматривать значение всех свойств любого из объектов, добавленных в память программы.
Реализовать возможность пользователю редактировать значение любого из свойств для любого из объектов, добавленных в память программы.
Реализовать возможность пользователю удалять любой из объектов, добавленных в память программы.
Реализовать возможность пользователю вызывать любой из методов объектов классов, добавленных в память программы.
Модифицировать программу добавив в неё возможность сохранения свойств любого из объектов, добавленного в память программы, в файл, а также заполнения (и при добавлении нового объекта, и при редактировании имеющегося объекта) свойств объекта на основании ранее сохраненного файла.

Само задание: Создать абстрактный класс Figure с методами вычисления площади и периметра, а также методом, выводящим информацию о фигуре на экран. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Triangle (треугольник) со своими методами вычисления площади и периметра.Создать массив n фигур и вывести полную информацию о фигурах на экран.
Craizi8 вне форума Ответить с цитированием
Старый 11.04.2021, 16:53   #2
Craizi8
Пользователь
 
Регистрация: 08.12.2019
Сообщений: 30
По умолчанию

Код есть,но нужна помощь в доработке согласно условиям.


Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
 
namespace MyNamespac
{
    public abstract class Figure
    {
        #region values
        private string name;
        #endregion
        #region property
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        #endregion
        #region methods
        public abstract void show();
        public abstract double square();
        public abstract double perimetr();
        #endregion
    }
 
    public class Rectangle : Figure
    {
        private double weidth;
        private double height;
 
        public Rectangle(string name, double height, double weidth)
        {
            this.Name = name;
            this.weidth = weidth;
            this.height = height;
        }
        private Rectangle() { }
        public override void show()
        {
            //вывод данных о прямоугольнике
            Console.WriteLine(Name);
            Console.WriteLine("Ширина: {0}", weidth);
            Console.WriteLine("Высота: {0}", height);
            Console.WriteLine("Площадь: {0}", square());
            Console.WriteLine("Периметр: {0}", perimetr());
 
        }
        //Реализация расчета площади
        public override double square()
        {
            return weidth * height;
        }
        //Реализация расчета периметра
        public override double perimetr()
        {
            return 2 * (weidth + height);
        }
    }
    public class Triangle : Figure
    {
        private double basis;
        private double height;
 
        public Triangle(string name, double height, double basis)
        {
            this.Name = name;
            this.basis = basis;
            this.height = height;
        }
        private Triangle() { }
        public override void show()
        {
            //вывод данных о треугольнике
            Console.WriteLine(Name);
            Console.WriteLine("Основание: {0}", basis);
            Console.WriteLine("Высота: {0}", height);
            Console.WriteLine("Площадь: {0}", square());
            Console.WriteLine("Периметр: {0}", perimetr());
 
        }
        //Реализация расчета площади
        public override double square()
        {
            return 0.5 * (basis * height);
        }
        //Реализация расчета периметра
        public override double perimetr()
        {
            return Math.Sqrt(Math.Pow(0.5 * basis, 2) + Math.Pow(height, 2)) * 2 + height;
        }
    }
    public class Circle : Figure
    {
        private double r;
 
        public Circle(string name, double r)
        {
            this.Name = name;
            this.r = r;
        }
        private Circle() { }
        public override void show()
        {
            //вывод данных о круге
            Console.WriteLine(Name);
            Console.WriteLine("Радиус: {0}", r);
            Console.WriteLine("Площадь: {0}", square());
            Console.WriteLine("Длина окружности: {0}", perimetr());
 
        }
        //Реализация расчета площади
        public override double square()
        {
            return Math.PI * r * r;
        }
        //Реализация расчета периметра
        public override double perimetr()
        {
            return 2 * Math.PI * r;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //Создание списка объектов
            List<Figure> figure = new List<Figure>();
            string[] par = new string[1000];
            int j = 0;
            //Заполнение массива строк
            for (; ; )
            {
                Console.WriteLine("Введите название фигуры");
                Console.WriteLine("rectangle, если прямоугольник");
                Console.WriteLine("circle, если круг");
                Console.WriteLine("triangle, если треугольник");
                par[j] = Console.ReadLine();
                //Определение типа фигуры
                switch (par[j][0])
                {
                    case 'r':
                        {
                            j++;
                            Console.WriteLine("Введите высоту");
                            par[j] = Console.ReadLine();
                            j++;
                            Console.WriteLine("Введите ширину");
                            par[j] = Console.ReadLine();
                            j++;
                            break;
                        }
                    case 'c':
                        {
                            j++;
                            Console.WriteLine("Введите радиус");
                            par[j] = Console.ReadLine();
                            j++;
                            break;
                        }
                    case 't':
                        {
                            j++;
                            Console.WriteLine("Введите высоту");
                            par[j] = Console.ReadLine();
                            j++;
                            Console.WriteLine("Введите основание");
                            par[j] = Console.ReadLine();
                            j++;
                            break;
                        }
                }
                //Выбор на добавление еще одной фигуры
                Console.WriteLine("Добавить еще фигуру? Введите y, если да или n, если нет");
                char c = char.Parse(Console.ReadLine());
                if (c == 'N' || c == 'n' || c == 'ь' || c == 'Ь')
                {
                    break;
                }
            }
            //Определение используемого класса для типа фигуры
            for (int i = 0; i < j; i++)
            {
                if (par[i][0] == 'r')
                {
                    figure.Add(new Rectangle(par[i], Convert.ToDouble(par[++i]), Convert.ToDouble(par[++i])));
                }
                else if (par[i][0] == 't')
                {
                    figure.Add(new Triangle(par[i], Convert.ToDouble(par[++i]), Convert.ToDouble(par[++i])));
                }
                else if (par[i][0] == 'c')
                {
                    figure.Add(new Circle(par[i], Convert.ToDouble(par[++i])));
                }
                else if (par[i][0] == 0 || par[i][0] == 1 || par[i][0] == 2 || par[i][0] == 3 || par[i][0] == 4 ||
                         par[i][0] == 5 || par[i][0] == 6 || par[i][0] == 7 || par[i][0] == 8 || par[i][0] == 9)
                    Console.WriteLine("Cifre");
            }
            foreach (Figure f in figure)
                f.show();
            Console.Read();
        }
    }
}
Craizi8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование и полиморфизм C# Алиса_М Помощь студентам 1 03.05.2016 12:29
Объясните пожалуйста программу. показать 3 основных признака ООП: наследование, инкапсуляция, полиморфизм (Паскаль) mongush Помощь студентам 11 27.01.2014 16:52
наследование и полиморфизм в ооп IRONHIDE C++ Builder 1 29.01.2013 12:39
Наследование, полиморфизм Matrix6993 Общие вопросы Delphi 1 18.03.2012 12:53