Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- namespace ExampleApplication
- {
- // Базовый класс
- //
- // Данный класс выступает в роли базового для классов-наследников Question (вопрос) и Answer (ответ)
- class Test
- {
- // Поле класса, содержащее текст вопроса или ответа
- //
- // Примечание (1): Лучше закрывать такие поля от доступа из вне.
- // Примечание (2): Обычно принято использовать нижнее подчеркивание в конце названия поля, чтобы
- // во-первых, показать что это защишеное поле (protected field), во-вторых, для того, чтобы
- // не использовать ключевое слово this.
- protected string text_;
- // Конструктор обьекта
- public Test(string text)
- {
- text_ = text;
- }
- // Метод, который будет выводить текст вопроса или ответа.
- //
- // Для того чтобы переопределить этот метод в классе-наследнике нужно использовать
- // ключевое слово virtual.
- public virtual void Print(int id)
- {
- // Тут может быть какой-то функционал, который бы использовался в случае, если
- // данный метод не переопределен в классе-наследнике.
- //
- // В данный момент тут ничего не нужно.
- }
- }
- // Класс-наследник, который будет содержать функционал для работы с вопросом.
- //
- // Данный класс наследует функционал класса Test.
- class Question : Test
- {
- public Question(string text)
- {
- text_ = text;
- }
- // Метод, который будет выводить текст вопроса.
- //
- // Данный метод был переопределен. Об этом говорит ключевое слово override.
- public override void Print(int id)
- {
- Console.WriteLine($"Вопрос {id}: {text_}");
- }
- }
- // Класс-наследник, который будет содержать функционал для работы с ответ.
- //
- // Данный класс наследует функционал класса Test.
- class Answer : Test
- {
- public Question(string text)
- {
- text_ = text;
- }
- // Метод, который будет выводить текст ответа.
- //
- // Данный метод был переопределен. Об этом говорит ключевое слово override.
- public override void Print(int id)
- {
- Console.WriteLine($" {id}: {text_}");
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Test[,] m = new Test[5, 10];
- // В данном случае "@" нужен для того, чтобы не экранировать и
- // не использовать специальные символы (н-р, \t, \n, \r)
- string path = @"F:\";
- using (StreamReader sr = new StreamReader(path, Encoding.Default))
- {
- int ridx = 0; // используется для хранения индекса строки
- int fidx = 0; // используется для хранения индекса столбца
- string text; // используется для хранения текста из файла
- // Обработка файла.
- while (((text = sr.ReadLine()) != null) & (fidx < 10))
- {
- // Обрабатываем блок вопроса-ответов
- if (ridx == 0) // вопрос
- {
- m[ridx, fidx] = new Question(text);
- ridx++;
- }
- else if (ridx < 5) // ответ
- {
- m[ridx, fidx] = new Answer(text);
- ridx++;
- }
- // В случае, если это был последний ответ, то обнуляем
- // ridx, делая следующую строку вопросом.
- if (ridx >= 5)
- {
- ridx = 0;
- fidx++;
- }
- }
- // Обычный вывод.
- for (int i = 0; i < 10; i++)
- for (int j = 0; j < 5; j++) {
- if (i == 0) // случае, если это вопрос, то выводим его номер (это номер слобеца + 1)
- m[j, i].Print(i+1);
- else // случае, если это ответ, то выводим его номер (это номер строки)
- m[j, i].Print(j);
- }
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement