Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/50: Рейтинг темы: голосов - 50, средняя оценка - 4.66
1 / 1 / 6
Регистрация: 26.04.2009
Сообщений: 234

Абстрактный класс

03.09.2010, 22:09. Показов 10318. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пжл! пока делаю только для прямоугольника. Помогите реализовать методы. Что я реализовал - неправильно (не работает)
Вот задание.
1) Создать абстрактный класс Figure с методами вычисления площади и периметра, а также методом, выводящим информацию о фигуре на экран.
2) Создать производные классы: Rectangle (прямоугольник), Circle (круг), Triangle (треугольник) со своими методами вычисления площади и периметра.
3) Создать массив n фигур и вывести полную информацию о фигурах на экран.

мой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
 
namespace _
{
    class Program
    {
        static void Main(string[] args)
        {
            Figure[] f = read();
            foreach (Figure figura in f)
            {
                figura.show();
                Console.WriteLine("-----------------------");
 
                figura.perimetr();
                figura.square();
            }
 
            Console.ReadKey();
 
 
        }
 
        static Figure[] read()
        {
            StreamReader fr = new StreamReader("file.txt", Encoding.GetEncoding(1251));
            string str = fr.ReadToEnd();
            string[] s = str.Split('\n');
            Figure[] figura = new Figure[s.Length / 2];
            Regex r1 = new Regex("rectangle");
            for (int i = 0; i < s.Length; i += 2)
            {
                if (r1.IsMatch(s[i]))
                    figura[i / 2] = new Rectangle(s[i + 1]);
                
            }
            fr.Close();
            return figura;
        }
    }
 
 
    public abstract class Figure
    {
 
        public abstract void show();
        public abstract int square();
        public abstract int perimetr();
 
    }
 
    public class Rectangle : Figure
    {
        protected int weidth;
        protected int height;
 
        public Rectangle(string s)
        {
            string[] values = s.Split(Convert.ToChar(9));
            this.weidth = Convert.ToInt32(values[0]);
            this.height = Convert.ToInt32(values[1]);
        }
 
        public override void show()
        {
            Console.WriteLine("Ширина: {0}", weidth);
            Console.WriteLine("Высота: {0}", height);
        }
 
        public override int square()
        {
            return weidth * height;
        }
 
        public override int perimetr()
        {
            return 2*(weidth + height);
        }
 
    }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2010, 22:09
Ответы с готовыми решениями:

Класс: Формальным параметром метода должна быть ссылка на абстрактный класс...
&quot;Формальным параметром метода должна быть ссылка на абстрактный класс или наиболее общий интерфейс в вашей иерархии классов.&quot; ...

Абстрактный класс «Хранилище» и производный класс «Библиотека»
Помогите, пожалуйста, с задачкой: Требуется реализовать абстрактный класс “Хранилище”, содержащий список объектов хранения (объекты...

Создать абстрактный класс класс Human
Помогите, пожалуйста! Задача: Создать абстрактный класс класс Human c полями: Имя, Фамилия, Возраст,пол. Заранее благодарю!

9
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
03.09.2010, 23:52
Нужно осушествлять проверку, есть ли такой файл, и желательно использовать обработку исключений при работе с файлами! И используйте осознаные именя для пространства имен.
Приведите пример содержания файла - "file.txt"

Вот немного исправленный код.
Но лучше обработку на наличие и содержание файла производить в функции и в случае чаго выдавать сообщения и т.д.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
 
namespace MyNamespac
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!File.Exists("file.txt"))
                return;
            Figure[] f = read();
            foreach (Figure figura in f)
            {
                figura.show();
                Console.WriteLine("-----------------------");
 
                figura.perimetr();
                figura.square();
            }
 
            Console.ReadKey();
 
 
        }
 
        static Figure[] read()
        {
                StreamReader fr = new StreamReader("file.txt", Encoding.GetEncoding(1251));
                string str = fr.ReadToEnd();
                fr.Close();
                string[] s = str.Split('\n');
                Figure[] figura = new Figure[s.Length / 2];
                Regex r1 = new Regex("rectangle");
                for (int i = 0; i < s.Length; i += 2)
                {
                    if (r1.IsMatch(s[i]))
                        figura[i / 2] = new Rectangle(s[i + 1]);
 
                }
                return figura;
        }
    }
 
 
    public abstract class Figure
    {
 
        public abstract void show();
        public abstract int square();
        public abstract int perimetr();
 
    }
 
    public class Rectangle : Figure
    {
        protected int weidth;
        protected int height;
 
        public Rectangle(string s)
        {
            string[] values = s.Split(Convert.ToChar(9));
            this.weidth = Convert.ToInt32(values[0]);
            this.height = Convert.ToInt32(values[1]);
        }
 
        public override void show()
        {
            Console.WriteLine("Ширина: {0}", weidth);
            Console.WriteLine("Высота: {0}", height);
        }
 
        public override int square()
        {
            return weidth * height;
        }
 
        public override int perimetr()
        {
            return 2 * (weidth + height);
        }
 
    }
 
}
1
1 / 1 / 6
Регистрация: 26.04.2009
Сообщений: 234
04.09.2010, 13:01  [ТС]
Выложил txt файл
Вложения
Тип файла: txt file.txt (29 байт, 181 просмотров)
0
(x(x_(x_x(О_о)x_x)_x)x)
 Аватар для Athlon_33_88
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
04.09.2010, 16:01
А теперь в блоке try открывай файл с текстом,делай проверку четных и нечетных строк.
в нечетных у тебя фигура,значит на основании данных создаешь объект(фигуру)
в четной параметры,значит надо указать условие разделения параметров.Проверяй на знак проверки и задавай методам параметры указанные в текстовике.
блок catch.Предусмотри исключения отсутствия файла и указание неправильных параметров в файле.
finaly по желанию...
1
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
04.09.2010, 17:09
Вот, на скорую руку набросал тебе код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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>();
            if(!File.Exists("file.txt"))
            {
                Console.WriteLine("Не найден файл - file.txt");
                Console.ReadLine();
                return;
            }
            string str = null;
            using (StreamReader sr = new StreamReader("file.txt"))
            {
                str = sr.ReadToEnd();  
            }
            string[] par = str.Split('\n');
            int i = 0;
            while (i < par.Length)
            {
                switch (par[i][0])
                {
                    case 'r':
                        {
                            figure.Add(new Rectangle(par[i], Convert.ToDouble(par[++i]), Convert.ToDouble(par[++i])));
                            i++;
                            break;
                        }
                    case 'c':
                        {
                            figure.Add(new Circle(par[i], Convert.ToDouble(par[++i])));
                            i++;
                            break;
                        }
                    case 't':
                        {
                            figure.Add(new Triangle(par[i], Convert.ToDouble(par[++i]), Convert.ToDouble(par[++i])));
                            i++;
                            break;
                        }
                    default:
                        {
                            Console.WriteLine("defaulte");
                            i++;
                            break;
                        }
                }
                
            }
 
            foreach (Figure f in figure)
                f.show();
        }
    }
}
содержание file.txt
rectangle
2
2
circle
5
triangle
10
5
Вложения
Тип файла: txt file.txt (43 байт, 138 просмотров)
2
1 / 1 / 6
Регистрация: 26.04.2009
Сообщений: 234
05.09.2010, 21:27  [ТС]
Откомментируйте, пожалуйста, вот этот код, то есть объясните
C#
1
  Figure[] figura = new Figure[s.Length / 2];
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 static Function[] searching(string t)
        {
            Function[] fu = read();
            int n = 0, count = 0;
            for (int i = 0; i < fu.Length; ++i)
                if (fu[i].type() == t)
                    ++n;
            Function[] result = new Function[n];
            for (int i = 0; i < fu.Length; ++i)
                if (fu[i].type() == t)
                {
                    result[count] = fu[i];
                    ++count;
                }
            return result;
        }
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
05.09.2010, 21:44
C#
1
  Figure[] figura = new Figure[s.Length / 2];
Создание массива обьектов, длинной в два раза меньше чем(насколько я понимаю) массив строк
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 static Function[] searching(string t)
        {
            Function[] fu = read();
            int n = 0, count = 0;
            for (int i = 0; i < fu.Length; ++i)
                if (fu[i].type() == t)
                    ++n;
            Function[] result = new Function[n];
            for (int i = 0; i < fu.Length; ++i)
                if (fu[i].type() == t)
                {
                    result[count] = fu[i];
                    ++count;
                }
            return result;
        }
По второму участку кода задавайте конкретные вопросы, объяснять много
0
1 / 1 / 6
Регистрация: 26.04.2009
Сообщений: 234
06.09.2010, 08:22  [ТС]
C#
1
static Function[] searching(string t)
вот это как читается, всмысле, что обозначает?
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
06.09.2010, 08:25
Цитата Сообщение от steve09 Посмотреть сообщение
C#
1
static Function[] searching(string t)
вот это как читается, всмысле, что обозначает?
объявление метода, который принимает в качестве параметра строку и возврашает массив объектов Functio
1
1 / 1 / 6
Регистрация: 26.04.2009
Сообщений: 234
06.09.2010, 10:34  [ТС]
Вот еще...
1) Создать абстрактный класс Persona с методами, позволяющим вывести на экран информацию о персоне, а также определить ее возраст (на момент текущей даты).
2) Создать производные классы: Абитуриент (фамилия, дата рождения, факультет), Студент (фамилия, дата рождения, факультет, курс), Преподавать (фамилия, дата рождения, факультет, должность, стаж), со своими методами вывода информации на экран, и определения возраста.
3) Создать базу (массив) из n персон, вывести полную информацию из базы на экран, а также организовать поиск персон, чей возраст попадает в заданный диапазон.


меня интересует как
определить ее возраст (на момент текущей даты), а также организовать поиск персон, чей возраст попадает в заданный диапазон.
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2010, 10:34
Помогаю со студенческими работами здесь

Абстрактный класс и производный класс
public abstract class Izdanie { abstract public string Informantion(); // abstract public int Find(); ...

Описать класс "геометрические фигуры", используя абстрактный класс и наследование
Всех приветствую! Вобщем трабла такая: надо написать класс геометрические фигуры, соответственно создавая их, точнее 2 треугольник и...

Использовать абстрактный класс, статический класс, использовать: наследование, агрегирование, композицию
Добрый день. Нужна ваша помощь. Учусь в университете, задали придумать тему программы. в программе нужно использовать следующее:...

Создать абстрактный класс «Товар», на его основе создать класс «Автомобиль»
Вечер добрый, а может и не добрый. В изучении C# столкнулся с такой проблемой - как исключения. Имею такую задачу. Создать абстрактный...

Абстрактный класс
Можем ли мы здесь абстрактный метод преобразовать в конструктор или метод, т.е. вычисление гривны в других валютах должно реализовываться в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru