![]() КАТЕГОРИИ: Архитектура-(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); 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}; • проверка, является ли одно множество подмножеством другого:
• проверка, входит ли заданный элемент в заданное множество: (3 in • стандартные подпрограммы для выполнения некоторых действий над Рассмотрим следующую задачу. Пусть с помощью генератора случайных чисел требуется выбрать 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; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |