Задача: Создать собственный класс для операции над числами
Решительно все учебники, самоучители и прочие пособия по Delphi для начинающих в первых главах содержат много текста о том, что собственно представляет собой эта среда программирования и как в ней организован код. В общей каше информации встречаются достаточно поверхностные упоминания о классах, процедурах, функциях и свойствах, которые в большинстве случаев никак не усваиваются читателем. Что в целом, грустно. Ведь эти блоки служат оптимизации программного кода, а значит быстродействию работы программы в первую очередь и читабельности вашего творчества - во вторую. Так вот сегодня мы рассмотрим задачу на создание собственного класса, обладающего нужными функциями и доступным для основной формы нашего приложения. Задача: Написать класс для сложения и вычитания двух положительных натуральных чисел, находящихся в промежутке от 1 до 10. Результаты требуется выводить римскими цифрами. Ну что ж? Алгоритм программы на Delphi у нас должен преследовать две цели: создание собственного класса и вывод в заданном формате, т.е. римскими цифрами. Класс у нас с вами обладает заданными функциями, поэтому особенно придумывать ничего не придется. Делаем запись по примеру класа TForm, создаваемого автоматически: структура type-private-public-end; В тайпе объявим наш класс TMySuperClass = class (TObject), а под private зададим описание тех функций, которые нам пригодятся. Объявление функций выглядит следующим образом: function [название нашей функции](входные данные с указанием типа): тип выходных данных. Теперь в теле программы, нам нужно разместить код функций - шапки для которых можно получить автоматически набрав function TMySuperClass. и выбрав из списка предлагаемых функций. Эта автоматизация будет свидетельством того, что все вы делаете правильно:) Для того, чтобы использовать наш класс в действии над каким-либо элементом на форме, нам потребуется лишь присвоить его какой-либо переменной. И дальше обращаться к его функциям через уже известную нам точку. Исходники Delphi:
type
TMySuperClass = class (TObject) private function vhodVdiapazon (N:integer):boolean; function Summ(A,B:integer):integer; function Razn(A,B:integer):integer; function ArabToRim(N:integer):string;
public
end;
type TForm1 = class(TForm) Edit1: TEdit; Button2: TButton; Button1: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm} function TMySuperClass.vhodVdiapazon; begin if (1<=N) and (N<=10) then result:=true else result:=false; end;
function TMysuperClass.Summ(A: Integer; B: Integer):integer; begin if vhodVdiapazon(A) and vhodVdiapazon(B) then result:=A+B else ShowMessage('Введенные числа выходят за диапазон от 1 до 10') end;
function TMySuperClass.Razn(A: Integer; B: Integer):integer; begin if vhodVdiapazon(A) and vhodVdiapazon(B) then result:=A-B else ShowMessage('Введенные числа выходят за диапазон от 1 до 10') end;
function TMySuperClass.ArabToRim(N: Integer):string; var arRim: array [0..8] of string; s:string; i:integer; begin arRim[0]:='I'; arRim[1]:='II'; arRim[2]:='III'; arRim[3]:='IV'; arRim[4]:='V'; arRim[5]:='VI'; arRim[6]:='VII'; arRim[7]:='VIII'; arRim[8]:='IX';
s:=IntToStr(N);
if Length(s)=2 then begin if s[1]<>'-' then begin s[1]:='X'; if s[2]='0' then begin Delete(s,2,1); result:=s end else result:=s[1]+arRim[StrToInt(s[2])-1] end else result:=s[1]+arRim[StrToInt(s[2])-1] end else result:=arRim[StrToInt(s)-1] end;
procedure TForm1.Button1Click(Sender: TObject); var MyClass:TMySuperClass; begin Edit1.Text:=MyClass.ArabToRim(Myclass.Summ(5,5)) end;
procedure TForm1.Button2Click(Sender: TObject); var MyClass:TMySuperClass; begin Edit1.Text:=MyClass.ArabToRim(Myclass.Razn(5,6)) end;
Как вы видите преобразование арабских цифр в римские я реализовала с помощью массива, что позволило, не перебирать все возможные результаты сложения и вычитания двух натуральных и положительных чисел из заданного промежутка.
Если у вас все еще остались трудности с решением конкретно вашего задания, готова помочь - напишите мне.