2.05k likes | 2.45k Views
Променливи и типове данни. Лекция No 3. Променливи и типове данни. Типът задава вида на данните: големина в брой байтове, начин на представяне в паметта, диапазон. Когато се декларира променлива, трябва да се зададе типа й. Всеки израз и/или функция връща резултат от определен тип.
E N D
Променливи и типове данни Лекция No 3 ПИК
Променливи и типове данни • Типът задава вида на данните: големина в брой байтове, начин на представяне в паметта, диапазон. • Когато се декларира променлива, трябва да се зададе типа й. • Всеки израз и/или функция връща резултат от определен тип. • Функциите и процедурите могат да имат параметри, на които също трябва да се специфицира типа. ПИК
Променливи и типове данни • Object Pascal е “строго типизиран” език. • В случай, че се налага използване на различни типове, трябва да се прибягва до преобразуване на типове, безтипови указатели, варианти, вариантни части на записи и абсолютно адресиране. ПИК
Видове типове • предефинирани /predefined/ (вградени): компилаторът разпознава типовете автоматично; • създадени чрез декларация /created by declaration/: налага се предварителна декларация; тук се включват всички потребителски дефинирани типове и тези в библиотеките на Delphi. ПИК
Видове типове • фундаментални /fundamental/: имат еднакво представяне, диапазон, обхват във всички реализации на Object Pascal, независимо от процесора и операционната система; • родови /generic/: те са платформено зависими. Такива са integer, character, string, и pointer. ПИК
Прости данни Подредени данни цели символни булеви изброени диапазон реални низови Структурирани данни множество масив запис файл клас псевдоним към класа интерфейс указатели процедури данни тип вариант (<типов спецификатор>) Дърво на типовете в Object Pascal ПИК
Типове данни в Object Pascal • Стандартната функция SizeOf работи с всички променливи и типове. Тя връща цяло число, равно на обема памет (в брой байтове) заделени за променливата/типа. Пример: SizeOf(Longint)връща 4. ПИК
Прости типове данни • Тук се включват: • Подредени данни • Реални данни ПИК
Подредени данни • Подредените данни са: • Integer; • Character; • Boolean; • изброени данни; • данни диапазон. ПИК
Подредени данни • Те дефинират подредено множество от стойности, където всяка стойност, без първата има уникален предшественик и всяка стойност, без последната, има уникален следващ елемент, т.е. налице е подреденост на данните. ПИК
Подредени данни • За тип integer подредбата на елементите съвпада с тяхната стойност. • за всички останали типове, с изключение на данни диапазон, първата стойност заема позиция 0 в реда, следващата е на позиция 1 и т.н. ПИК
Подредени данни – предефинирани функции ПИК
Подредени данни – предефинирани функции ПИК
Подредени данни • Стандартните процедури Inc и Dec увеличават и намаляват стойността на подредена променлива. • Пример: Inc(I) е еквивалентно на I := Succ(I), а ако I е цяла променлива, на I := I + 1. ПИК
Цели типове данни • Те nредставят подмножество на целите числа. • Родовите типове са Integer и Cardinal. • Фундаменталните цели типове включват Shortint, Smallint, Longint, Int64, Byte, Word, и Longword. ПИК
Цели типове данни - фундаментални ПИК
Цели типове данни - фундаментални ПИК
Аритметичните операции връщат стойност от тип Integer с изключение на случаите, когато в тях присъства операнд от тип Int64. Пример: var I: Integer; J: Int64; ... I := High(Integer); J := I + 1; J := Int64(I) + 1; Цели типове данни ПИК
Цели типове данни • Повечето стандартни процедури и функции, които получават целочислени параметри, отрязват Int64 до 32-битови. • Изключение правят High, Low, Succ, Pred, Inc, Dec, IntToStr, и IntToHex, които поддържат напълно Int64. • Функциите Round, Trunc, StrToInt64, и StrToInt64Def връщат Int64. • Ord не работи с Int64. ПИК
Цели типове данни • Когато се увеличи последната стойност или се намали първата на целочислен тип, се получава първата, респективно последната стойност от типа. • Ако е включена опция range-checking на компилатора, ще се генерира runtime грешка. ПИК
УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • Button: дава бутон, чрез който потребителят може да изпълни някаква операция (напр. спиране, стартиране на някой процес и др.) • CheckBox: бутон за маркиране. Осигурява Да/Не, True/False или On/Off опции. ПИК
УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • BitBtn: графични бутони. Дават възможност за поставяне не само на надпис, но и малка картина-икона. Иконите обикновено са графично пояснение за действието на бутона. Делфи предоставя стандартен набор от бутони, които можете да използвате наготово при създаване на приложенията си. Различните видове се избират с помощта на свойството Kind. • SpeedButton: оперативни бутони. Тези компоненти са предвидени, за да се ускори разработването на панели с инструменти (toolbars). Оперативният бутон има само икона и няма име. ПИК
УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • RadioButton: осигурява взаимно изключващи се опции. Радио бутоните обикновено се използват съединени в групова кутия, където само един от тях е разрешен в един момент от време. • RadioGroup: представлява група с няколко радио бутона в нея. Елементите в нея са част от един списък от низове (Items). Свойството ItemIndex е цяло число, което връща номера на реда, които е избран. По подразбиране ItemIndex има стойност –1, което означава, че не избран нито една от опциите. ПИК
УПРАЖНЕНИЕ 3Стандартни процедури за съобщения ПИК
УПРАЖНЕНИЕ 3Бутони, използвани от MessageDlg • Предефинирани са следните бутони: mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp. • В добавка са предефинирани и най-използваните комбинации: mbYesNoCancel, mbOKCancel, mbAbortRetryIgnore. ПИК
УПРАЖНЕНИЕ 3Диалогови типове, използвани от MessageDlg ПИК
mrNone mrAbort mrYes mrOk mrRetry mrNo mrCancel mrIgnore mrAll УПРАЖНЕНИЕ 3Връщана стойност от MessageDlg ПИК
УПРАЖНЕНИЕ 3Задачи • Да се намери сумата, средното аритметично, минималният и максималният елементи на масив от 100 числа, които са записани във файл ‘Data.txt’. Резултата да се изведе в диалогова кутия. • Да се добави възможност за избор на типа на елементите на масива (цели или реални числа) и ако са цели – да се определи сума на четните и сума на нечетните числа. Резултата да се изведе в диалогова кутия. ПИК
Променливи и типове данни Лекция No 4 ПИК
Символни типове • Фундаментални символни типове: • AnsiChar- еднобайтови (8 бита) символи, подредени съгласно разширената ANSI кодова таблица; • WideChar- двубайтови (16 бита) символи, подредени по Unicode кодова таблица. • Първите 256 Unicode символи съвпадат със същите от ANSI. ПИК
Символни типове • Родовият тип е Char, който е еквивалентен на AnsiChar. • Тъй като реализацията на Char подлежи на промяна, добра идея е използването на стандартната функция SizeOf при определяне на размер. ПИК
Символни типове • Предефинираната функция Chr връща символа за всяко цело число в диапазона на AnsiChar или WideChar. • Символните стойности работят като целите при намаляване на най-малката или увеличаване на най-голямата (докато не е включена range-checking опция на компилатора). ПИК
Булевитипове • предефинирани булеви типове: • Boolean • ByteBool • WordBool • LongBool • Boolean е предпочитаният тип. Останалите съществуват за съвместимост с различните езици за програмиране и средата Windows. ПИК
Булевитипове • Променлива от тип Boolean заема един байт памет. • Променлива от тип ByteBool заема един байт. • Променлива от тип WordBool заема два байта. • Променлива от тип LongBool - четири байта. ПИК
Булевитипове • Булевите стойности се означават чрез предефинираните константи True и False. • В сила са правилата, показани в таблицата вдясно. ПИК
Булевитипове • Стойност от тип ByteBool, LongBool, или WordBool се счита за True, ако стойността е различна от нула. • Компилаторът автоматично извършва това преобразувание. • Това е в сила за поредността на булевата стойност, а не за самата нея. ПИК
Булевитипове • В Object Pascal, булевите изрази не са еквивалентни на цели или реални числа. • Преобразуването на променлива до Boolean ще даде непредсказуем резултат. ПИК
Фундаментални реални данни • Real48 се поддържа само за съвместимост с по-ранните версии на езика. Тъй като форматът му на съхранение не е вграден във фамилия Intel, той дава по-лоши резултати от останалите реални типове. • Extended се използва за постигане на по-голяма точност отколкото при другите реални типове, но създава проблеми при преносимостта на програми от една платформа на друга. ПИК
Фундаментални реални данни • Типът Comp (computational) е вграден в Intel и представя 64-битово цяло число. Класифициран е като реален, но поведението му е като на подреден тип. (Например, не може да се увеличава или намалява стойност от тип Comp.) Comp се поддържа само за съвместимост с предходни версии на езика. Препоръчва се използването на Int64. ПИК
Фундаментални реални данни • Currency е реално число с фиксирана точка, което е създадено за намаление на грешката от закръгление при парични изчисления. Съхранява се като скалирано 64-битово цяло число като последните четири позиции са след десетичната точка. Когато се смесва с други реални типове в присвояване и изрази, Currency автоматично се делят или умножават по 10000. ПИК
Реални данни • Родовият тип е Real. Еквивалентен е на Double. • Шест-байтовия тип Real48 е еквивалентен на Real в ранните версии на езика Object Pascal. • Ако прекомпилирате код, създаден на Delphi1.0 трябва да смените Real с Real48. • За тази цел може да използвате и директивата на компилатора {$REALCOMPATIBILITY ON} за да превключите Real да бъде 6 байта. ПИК
Предефинирани стрингови данни • AnsiString, наричен още дълъг низ, е най-често използвания тип. • Низовите типове могат да се смесват в присвояване и изрази. Компилаторът автоматично прaви необходимите преобразувания. • Изисква се строго съвпадение на типовете при предаване на стринговете като параметри към процедури и функции по псевдоним (като var и out параметри). Може да се използва явно преобразуване на типа от един стринг към друг. ПИК
Стрингови данни • Ключовата дума string се използва за родов типов идентификатор, начина на представянето на който зависи от директива на компилатора. • По подразбиране е включена {$H+}. При нея компилаторът ще интерпретира стринга, когато е записан без квадратни скоби с брой елементи в тях, като AnsiString. • Използването на {$H-} директива означава, че горепосочения стринг е ShortString ПИК
Стрингови данни • Стандартната функция Lengthвръща броя символи в низа. • Процедурата SetLengthзадава размер на низа. • Сравнението на низове е дефинирано от подредбата на символите в тях. Прави се символ по символ. • Когато низовете не са с еднаква дължина, всеки символ от по-дългия низ без съответствие от другия, е по-голям. ПИК
Стрингови данни • Стрингът може да се индексира, точно както масив. • Ако S е низова променлива и I е целочислен израз, S[I] означава I-тия символ в S. • За типовете ShortString или AnsiString, S[I] е от тип AnsiChar; а за WideString, S[I] е от тип WideChar. ПИК
Стрингови данни • Пример: преобразуване от малки в големи букви: var I: Integer; begin I := Length(MyString); while I > 0 do begin MyString[I] := UpCase(MyString[I]); I := I - 1; end;end; ПИК
Стрингови данни • Индексирането на низа след неговия край води до сериозна грешка: “access violations”. • Трябва да се избягва и предаването на индекси на дълги низове като var параметри, защото кодът не може да се оптимизира в този случай. ПИК