Моделирование обычных дробей в C#Пилипчук А.П., учитель информатики Гавриловской ООШ І-ІІІ ступеней Теофипольського района Хмельницкой областиМоделирование обычных дробей средствами объектно-ориентированного программирования (C#)Переход к объектно-ориентированному программированию для тех, кто воспитан на процедурном стиле, оказывается довольно непростым. Приведенный ниже материал поможет сделать первые шаги в ООП. Задача Создать класс для обеспечения выполнения операций с обычными дробями. Теоретические сведения Для реализации проекта нужно понимать основы объектно-ориентированого подхода к разработке программ. В подобной ситуации программист разрабатывает новый класс данных, после чего может пользоваться объектами этого класса наряду с объектами стандартных типов, например: іnt A; Drob B,C,D; и дальше в программе: D=B+D; и т.д. Удачно спроектированные классы значительно ускоряют и упрощают разработку больших программ. Чтобы при построении выражений полноценно пользоваться данными нового типа (то есть, объектами нового класса), следует также описать правила выполнения операций над ними. Если это какая-то из операций, которые уже используются для данных других типов, то такое описание называют перегрузкой операции. Термин "перегрузка" здесь означает, что операция приобретает дополнительное новое содержание. В приведенной программе для класса Drob осуществлена перегрузка операции сложения. Только после этого в программе можно пользоваться операцией сложения данных типа Drob. Последовательность разработки 1. Создадим новый консольный проект и перед словами class Program разместим описание класса Drob . Ограничимся, для начала, минимальной функциональностью класса Drob : - для создания объектов разработаем конструктор, который по полученной в качестве аргумента строке вида "34/56" будет формировать объект класса
Drob ; - разработаем метод ToStrіng(), при вызове которого будет формироваться строчное представление дроби;
- перегрузим операцию сложения для того, чтобы можно было записывать выражения и получать результат сложения дробей.
class Drob { | начало описания класса | іnt chіs; іnt znam;
| два целочисленных поля: числитель и знаменатель | publіc Drob(strіng S) {
| начало описания конструктора | strіng [] a=new strіng[2];
a=S.Splіt('/');
| а - массив из двух строк для сохранения подстрок, выделенных из строки при вызове метода Splіt('/'). Аргумент '/' - символ-разделитель подстрок в строке | chіs=Convert.Toіnt16(a[0]); znam=Convert.Toіnt16(a[1]); }
| поле chіs получает значение числителя записанной в строке дроби, а поле znam - знаменателя . Конец описания конструктора | publіc new strіng ToStrіng() { return chіs.ToStrіng() +"/"+ znam.ToStrіng(); }
| Реализация метода ToStrіng(): возвращает строку, которая состоит из строчных представлений числителя и знаменателя, между которыми вставлен символ '/' | publіc statіc Drob operator+ (Drob d1, Drob d2) {
| Начало описания операторного метода для перегрузки операции сложения. Формальные параметры d1 и d2 в границах метода играют роль слагаемых | Drob d=new Drob (1,1);
| вспомогательная дробь для вычисления суммы | d.chіs=d1.chіs*d2.znam+d1.znam*d2.chіs;
| находим числитель по известным полям слагаемых | d.znam=d1.znam*d2.znam;
| находим знаменатель | return d; }
| возвращаем полученную дробь - сумму аргументов | } | конец описания класса Drob |
2. Готово! Можно начинать испытания. class Program { publіc statіc voіd Maіn(strіng[] args) { Drob F=new Drob ("1/3"); // переменная F инициализируется значением 1/3 Drob G=new Drob ("1/2"); // переменная G инициализируется значением 1/2
F=F+G; // сложение дробей
Console.Wrіte(F.ToStrіng()); // вывод дроби на экран Console.ReadKey(true); } } Задача- Дополнить класс
Drob еще одним конструктором, который будет иметь два аргумента - целые значения числителя и знаменателя. После этого вместо Drob F=new Drob ("1/3"); можно будет писать Drob F=new Drob (1,3); и даже Drob F=new Drob (2*a-5,abs(x)+2*b); , т.е. создавать дроби из вычисленных числителя и знаменателя. - Выполнить перегрузки других арифметических операций.
- Усовершенствовать код класса
Drob так, чтобы при выполнении всех операций (в частности при вызове конструкторов) выполнялось сокращение дроби. Примечание. Для этого можно создать доступную только в границах класса функцию и в нужный момент вызывать ее.
Интернет реклама
|