87
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String a[5],st;int i,n;
n=Memo1->Lines->Count;
if(n==0)
{
ShowMessage("Исходные данные не введены");
Abort();}
if(n>5)
{ShowMessage("Количество строк превышает размер массива");
n=5;}
for(i=0;i{a[i]=Memo1->Lines->Strings[i];
ListBox1->Items->Add(a[i]);}
if(n>0)
{
st="Введенный массив";
st+="\n";
for(i=0;i
88
st+=IntToStr(i+1)+" "+a[i]+"\n";
ShowMessage(st);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
}
//---------------------------------------------------------------------------
Практикалық жҧмыс№ 8. Математика деген қосымша қҧрыңыздар. Делегат
және оның экземплярын қҧрыңыз.
Бұл мысалда біз айнымалыны делегат экземплярына екі рет береміз. (сурет. 1.32).
Сурет. 1.32. Айнымалыны делегат экземплярына екі рет беру.
Әрине бұл жерде, сол нәтижені делегат қоспай— ақ, айнымалы slovo енгізу арқылы
жасауға болады. Жаңа консольдық қосымша құрып, оны Matem деп атаңыз. Қосымша
кодын, түсініктемелерімен бірге берейік:
using System;
namespace Matem
{
//Создаемновыйкласс matematika
class matematika
{
//Объявляемпеременную a
public int a;
//Создаемметод calculate
public void calculate()
{
int b = a*a;
int c = a*a*a;
int d = a*a*a*a;
Console.WriteLine ("Самочисло: " + a + "\nКвадрат: " + b +
"\nКуб: " + c + " \nЧетвертаястепень:" + d);
}
}
class Class1
{
[STAThread]
89
static void Main(string[] args)
{
//Создаемэкземпляр primer класса matematika
matematika primer = new matematika();
//Переменной a экземпляра primer присваиваем значение 2
primer.a = 2;
//Вызываемметод calculate
primer.calculate();
}
}
}
Листинг 1.3.
Бұл программаның орындалу нәтижесі айнымалының квадратын, кубын, және тӛрт
дәрежесін есептеу. (сурет. 1.33):
Сурет. 1.33. Matem қосымшасының нәтижесі
Енді делегат пен оның экземплярын құрамыз (жаңадан консольдық қосымша —
Matem2 құруға болады — немесе оны ӛзгертуге болады):
using System;
namespace Matem2
{
//Создаемновыйкласс matematika
class matematika
{
//Объявляемпеременную a
public int a;
//Создаемметод calculate
public void calculate(int chislo)
{
int b = a*a;
int c = a*a*a;
int d = a*a*a*a;
Console.WriteLine ("Самочисло: " + a + "\nКвадрат: " + b +
"\nКуб: " + c + " \nЧетвертаястепень:" + d);
}
}
class Class1
{
delegate void Mydelegate(int chislo);
[STAThread]
static void Main(string[] args)
{
//Создаемэкземпляр primer класса matematika
90
matematika primer = new matematika();
//Создаемэкземпляр del делегата Mydelegate
Mydelegate del = new Mydelegate(primer.calculate);
//Переменной a экземпляра primer присваиваем значение 2
primer.a = 2;
// Экземпляру делегата del передаем переменную
del(1);
//Переменной a экземпляра primer присваиваем значение 3
primer.a = 3;
// Экземпляру делегата del передаем переменную
del(2);
//Переменной a экземпляра primer присваиваем значение 4
primer.a = 4;
// Экземпляру делегата del передаем переменную
del(3);
}
}
}
Листинг 1.4.
Программа нәтижесі: (сурет. 1.34):
Сурет. 1.34. Результат приложения Matem2
Практикалық жҧмыс №9. Математика қосымшасын қҧру. Кӛпобъекті делегат
және оның экземплярын қҧру.
Жалпы ережелерге сәйкес, Matem2 кодында делегатMydelegate және calculate тәсілі
бірдей сигнатуралы болады. Делегат арқылы оның тәсіліне сүйену үшін, айнымалы chislo
қолданылады. Біз бір тәсілгн сүйену үшін делегаттың бір экземплярын қолдандық, әрі
жаңа айнымалының мәнін есептеу үшін оны қайта сипаттап отырдық. Делегат ӛзіне
бірнеше тәсіл сиғызады. Мұндай делегаттарды Кӛпобъекті делегат деп атайды. Оұан
ля обращения через делегат к методу используется переменная int chislo, не
содержащая вводимых значений для вычислений. Мы использовали один экземпляр
делегата для обращения к одному методу, причем для вычисления значения новой
переменной мы каждый раз ее объявляли. Однако делегат может вмещать в себя
несколько методов. Такой делегат называется многообъектным (множественным) — при
обращении к нему он последовательно вызывает каждый метод. Онымен байланыс құрған
кезде тізбектеп бірінен — соң бірін тәсілдерді шақырады.
Достарыңызбен бөлісу: |