Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции над множествами




End.

Implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress (Sender: TObject;

var Key: Char); begin

if not (key in ['0'..'9','-','. \#8]) then key:=#0; end;

procedure TForm1.Button1Click (Sender: TObject); var a,b:real;

xn,xk,yO,yk:integer;


mx,my:real; х,у,ymax:real;

i:integer;

lsDraw:boolean; {Для переключений при рисовании} begin

xn:=15;

xk:=280;

yO:=75;

yk:=7 0;

a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
ymax:=10; {Задано произвольно}

IsDraw:=true;

With Imagel.Canvas do begin Pen.Color:=clBlack; Pen.Width:=1; Brush.Color:=clWhite;

Rectangle(0,0,Imagel.Width,Imagel.Height); MoveTo(xn,yO);

LineTo(xk,yO);

MoveTo(xn,yO+yk);

LineTo(xn,yO-yk);

End;

if b<=a then begin

Label3.Caption:= 'Графика нет';

Exit;

End;

 

Imagel.Canvas.Pen.Color:=clRed; Imagel.Canvas.Pen.Width:=2; mx:=(b-a) / (xk-xn); ray:=yk/ymax;

for i:=0 to xk-xn do begin x:=a+i*mx; try

 

if x < 0 then Raise ERangeError.CreateFmt ('Шаг i= %d. Отрицательный диапазон,[i]); if (x > l-0.5*mx) and (x < l+0.5*mx) then Raise EDivByZero.CreateFmt

 

('Шаг i= %d. Деление на нуль,[i]); y:=my/ln(x); if IsDraw then begin

Imagel.Canvas.MoveTo(xn+i,yO-round(y)); IsDraw:=false;

end else Imagel.Canvas.LineTo(xn+i,yO-round(y)); except

on E: ERangeError do begin

MessageDlg(E.Message,mtWarning,[mbOK],0); IsDraw:=true;

 


end;

on E:EDivByZero do begin Application.MessageBox(PChar(E.Message),

'Предупреждение',mb_OK); IsDraw:=true; end else Raise; end; end;

end;

В программе для создания объектов исключений используется встроен­ный конструктор createnat. В качестве аргументов в этот конструктор пе­редается строка, используемая для форматированного вывода (символ "%" представляет спецификатор формата, а последующий символ "d" - тип фор­мата - вывод цифровых значений), и конструктор открытого массива, в котором в квадратных скобках указываются отдельные элементы вывода.

Выполнять программу в данном случае необходимо не из среды Delphi, a вызывая соответствующий ЕХЕ-файл, иначе будут сгенерированы дополни­тельные исключительные ситуации, связанные с информацией отладчика.

МНОЖЕСТВА

Тип множество задает неупорядоченную совокупность неповторяю­щихся объектов. Переменная типа множество - это совокупность объектов из исходного заданного множества. Может иметь значение "пусто" (пустое множество). Число элементов исходного множества ограничено - оно не может быть более 256. Для задания элементов множества может использо­ваться любой порядковый тип, однако порядковые номера элементов мно­жества, т.е. значения функции ORD, должны находиться в пределах от 0 до 255. Для задания типа множества используется следующее объявление: туре <имя> = set of огип элементов;»;. При объявлении типа элементов необходимо соблюдать ограничения, указанные выше. Например,

Туре А = set of Char; Al = set of 'A'..'Z';

Oper = set of {Plus, Minus, Malt, Divide); Number = set of Byte; D = set of 1..20;.

Переменные типа множество можно инициализировать с помощью ти­пизированных констант. При этом значения задаются в виде конструктор* множества Const K:D = [5,9,11,17]; R:D» [1.. 9,13,20];.ДО задания переменным текущих значений также можно использовать консТ'


рукторы. Пусть объявлено Var AA: а;, тогда возможна запись (тип А объ­явлен выше) АА:=[Char(13), Char(7), '0', *Q'];.

Если требуется присвоить этой переменной значение «пусто», то ис­пользуется такой конструктор: аа: = [ ];.

Как и для других типов, имеется ряд встроенных операций для типа множество. Пусть заданы следующие типы и переменные: туре мп = set of 1..50; Var А, в, с: Mn; и пусть переменным присвоены значе­ния: А:= [3,5,9,10]; в:= [1,7,9,10];, тогда можно записать сле­дующие операции (в фигурных скобках указан результат выполнения опера­ции):

• объединение множеств: С:=А+В; - {1,3,5,7,9,10};

• разность (а-в <>в-а): С:=а-В; - {3,5}, С:=в-а,-- {1,7};

• пересечение (умножение): С:=А*В; - {9,10};

• проверка эквивалентности (например, в операторе IF): (a=b) -{False};

• проверка неэквивалентности: (А о в) - {True};

• проверка, является ли одно множество подмножеством другого:
(А>=в) - {False}, (A<=B) - {False};

 

• проверка, входит ли заданный элемент в заданное множество: (3 in
А) - {True}, (3 in В) - {False};

• стандартные подпрограммы для выполнения некоторых действий над
множествами: Exclude (А, 3); - удалить из множества а элемент 3,
include (А, 3); - вставить элемент 3 во множество а.

Рассмотрим следующую задачу. Пусть с помощью генератора случай­ных чисел требуется выбрать 30 элементов из диапазона 0...200 и вывести их на экран дисплея в порядке возрастания. Пусть вывод осуществляется с помощью компонента ТМето. Ниже запишем код, который будет использо­ваться далее в примере 12.

Const к=30;

L=200;

Type Mn=set of 0.-L; Var S: Mn;

Str:String; i,Z:byte; Begin

Randomize;

Str:='';

Memol.Lines.Clear;

i:=l to К do While true do begin


 


Z:= random(L+l); If Z in S then continue; Include (S, Z); Break; End; For i:=0 to L do begin

If i in S then Str:=Str+IntToStr(i)+'

If (i mod 20=0) and (length{trim(Str)}>0) then begin Memol.Lines.Add{Str+' '); Str:=' л; End; End; End;.

В этой программе первый цикл For обеспечивает необходимое число итераций. Внутри этого цикла содержится цикл While, который позволяет "отсеять" повторяющиеся значения элементов множества. Второй цикл For необходим, чтобы сгенерированные элементы множества записать в объект Memol и расположить их, во-первых, в порядке возрастания и, во-вторых, по строкам - в очередной строке располагаются элементы из соответствующей двадцатки.

ПРИМЕР ПРИЛОЖЕНИЯ 12

Пусть требуется сформировать с помощью генератора случайных чисел три множества: первое должно обязательно содержать элемент 25, второе -элемент 50, третье - элемент 100. Диапазон элементов - от 0 до 200 (исход­ное множество). Каждое множество должно состоять из 30 элементов. Вы­вести элементы этого множества в порядке возрастания, используя новый компонент TTabControl (на странице Win32). Компонент TTabControl представляет собой записную книжку (рис. 32), состоящую из вкладок и клиентской области. Вкладки, необходимые для листания страниц, распола­гаются вдоль верхней границы клиентской области. Встроенных страниц элемент не имеет, их нужно программировать самостоятельно с помощью свойства Tabs - в Object Inspector нажать на "..." и в редакторе напечатать столько строк, сколько требуется вкладок. Нумерация начинается с нуля и номер активной на данный момент страницы содержится в свойстве Tabln-dex. Свойства TabWidth и TabHeight содержат размер вкладок.

Управление данным компонентом осуществляется с помощью события OnChange. Это событие происходит, когда мышью будет выбрана какая-либо вкладка. Для того чтобы выводить какую-либо информацию в клиент­скую область вкладки, необходимо использовать 2 свойства: Handle (деск­риптор) и DispIayRect (задает прямоугольник клиентской области).


Клиентская область не имеет своей канвы, поэтому с помощью функции GetDC в динамической памяти необходимо создать канву и свойству Handle присвоить адрес ее расположения в памяти. Если происходит ошибка при выделении памяти, то генерируется исключительная ситуация. Поэтому в программе необходимо предусмотреть варианты контроля таких ситуаций с помощью рассмотренных выше конструкций Try. Вариант расчета приведен на рис. 32.




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 333; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.