Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var rand        = new Random();
            var lengthArray = rand.Next(10, 21);
            var arrIFigures = new IFigure[lengthArray];

            //генерируем массив фигур со случайными значениями
            for (int i = 0; i < arrIFigures.Length; i++)
            {
                var randomNumber14 = rand.Next(1, 5); // 1 2 3 4 - случайную фигуру
                switch (randomNumber14)
                {
                case 1:
                    arrIFigures[i] = new Parallelepiped(rand.NextDouble() * 10, rand.NextDouble() * 10, rand.NextDouble() * 10);     // от 1 до 10
                    break;

                case 2:
                    arrIFigures[i] = new Pyramid(rand.NextDouble() * 10, rand.NextDouble() * 10, rand.NextDouble() * 10);
                    break;

                case 3:
                    arrIFigures[i] = new Tetrahedron(rand.NextDouble() * 10);
                    break;

                case 4:
                    arrIFigures[i] = new Ball(rand.NextDouble() * 10);
                    break;

                default:
                    throw new Exception();     // никогда сюда не должно прийти - заглушка, надо ли такое писать?
                }
            }

            //Проверяем тип текущей фигуры и считаем "вручную", выводим результаты ручных подсчётов и подсчётов функцией экземпляра
            for (int i = 0; i < arrIFigures.Length; i++)
            {
                var    currentIFigure = arrIFigures[i];
                double checkVolume    = -1;

                if (currentIFigure is Parallelepiped)
                {
                    var tempF = currentIFigure as Parallelepiped; // Downcasting
                    checkVolume = tempF.X * tempF.Y * tempF.Z;
                }
                else if (currentIFigure is Pyramid)
                {
                    var tempF = (Pyramid)currentIFigure; // вариант преобразования
                    checkVolume = tempF.X * tempF.Y * tempF.H / 3;
                }
                else if (currentIFigure is Tetrahedron)
                {
                    var tempF = currentIFigure as Tetrahedron;
                    checkVolume = Math.Pow(tempF.A, 3) * Math.Sqrt(2) / 12;
                }
                else if (currentIFigure is Ball)
                {
                    var tempF = currentIFigure as Ball;
                    checkVolume = 4 * Math.PI * Math.Pow(tempF.R, 3) / 3;
                }
                else
                {
                    Console.WriteLine("Error1");
                }

                Console.WriteLine($"V = {currentIFigure.Volume:f2}\tCHECK: {checkVolume:f2}\t: {currentIFigure.Name}");
            }
        }