1 / 203

Променливи и типове данни

Променливи и типове данни. Лекция No 3. Променливи и типове данни. Типът задава вида на данните: големина в брой байтове, начин на представяне в паметта, диапазон. Когато се декларира променлива, трябва да се зададе типа й. Всеки израз и/или функция връща резултат от определен тип.

romney
Download Presentation

Променливи и типове данни

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Променливи и типове данни Лекция No 3 ПИК

  2. Променливи и типове данни • Типът задава вида на данните: големина в брой байтове, начин на представяне в паметта, диапазон. • Когато се декларира променлива, трябва да се зададе типа й. • Всеки израз и/или функция връща резултат от определен тип. • Функциите и процедурите могат да имат параметри, на които също трябва да се специфицира типа. ПИК

  3. Променливи и типове данни • Object Pascal е “строго типизиран” език. • В случай, че се налага използване на различни типове, трябва да се прибягва до преобразуване на типове, безтипови указатели, варианти, вариантни части на записи и абсолютно адресиране. ПИК

  4. Видове типове • предефинирани /predefined/ (вградени): компилаторът разпознава типовете автоматично; • създадени чрез декларация /created by declaration/: налага се предварителна декларация; тук се включват всички потребителски дефинирани типове и тези в библиотеките на Delphi. ПИК

  5. Видове типове • фундаментални /fundamental/: имат еднакво представяне, диапазон, обхват във всички реализации на Object Pascal, независимо от процесора и операционната система; • родови /generic/: те са платформено зависими. Такива са integer, character, string, и pointer. ПИК

  6. Прости данни Подредени данни цели символни булеви изброени диапазон реални низови Структурирани данни множество масив запис файл клас псевдоним към класа интерфейс указатели процедури данни тип вариант (<типов спецификатор>) Дърво на типовете в Object Pascal ПИК

  7. Типове данни в Object Pascal • Стандартната функция SizeOf работи с всички променливи и типове. Тя връща цяло число, равно на обема памет (в брой байтове) заделени за променливата/типа. Пример: SizeOf(Longint)връща 4. ПИК

  8. Прости типове данни • Тук се включват: • Подредени данни • Реални данни ПИК

  9. Подредени данни • Подредените данни са: • Integer; • Character; • Boolean; • изброени данни; • данни диапазон. ПИК

  10. Подредени данни • Те дефинират подредено множество от стойности, където всяка стойност, без първата има уникален предшественик и всяка стойност, без последната, има уникален следващ елемент, т.е. налице е подреденост на данните. ПИК

  11. Подредени данни • За тип integer подредбата на елементите съвпада с тяхната стойност. • за всички останали типове, с изключение на данни диапазон, първата стойност заема позиция 0 в реда, следващата е на позиция 1 и т.н. ПИК

  12. Подредени данни – предефинирани функции ПИК

  13. Подредени данни – предефинирани функции ПИК

  14. Подредени данни • Стандартните процедури Inc и Dec увеличават и намаляват стойността на подредена променлива. • Пример: Inc(I) е еквивалентно на I := Succ(I), а ако I е цяла променлива, на I := I + 1. ПИК

  15. Цели типове данни • Те nредставят подмножество на целите числа. • Родовите типове са Integer и Cardinal. • Фундаменталните цели типове включват Shortint, Smallint, Longint, Int64, Byte, Word, и Longword. ПИК

  16. Цели типове данни - родови ПИК

  17. Цели типове данни - фундаментални ПИК

  18. Цели типове данни - фундаментални ПИК

  19. Аритметичните операции връщат стойност от тип Integer с изключение на случаите, когато в тях присъства операнд от тип Int64. Пример: var    I: Integer;     J: Int64;     ...     I := High(Integer); J := I + 1; J := Int64(I) + 1; Цели типове данни ПИК

  20. Цели типове данни • Повечето стандартни процедури и функции, които получават целочислени параметри, отрязват Int64 до 32-битови. • Изключение правят High, Low, Succ, Pred, Inc, Dec, IntToStr, и IntToHex, които поддържат напълно Int64. • Функциите Round, Trunc, StrToInt64, и StrToInt64Def връщат Int64. • Ord не работи с Int64. ПИК

  21. Цели типове данни • Когато се увеличи последната стойност или се намали първата на целочислен тип, се получава първата, респективно последната стойност от типа. • Ако е включена опция range-checking на компилатора, ще се генерира runtime грешка. ПИК

  22. УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • Button: дава бутон, чрез който потребителят може да изпълни някаква операция (напр. спиране, стартиране на някой процес и др.) • CheckBox: бутон за маркиране. Осигурява Да/Не, True/False или On/Off опции. ПИК

  23. УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • BitBtn: графични бутони. Дават възможност за поставяне не само на надпис, но и малка картина-икона. Иконите обикновено са графично пояснение за действието на бутона. Делфи предоставя стандартен набор от бутони, които можете да използвате наготово при създаване на приложенията си. Различните видове се избират с помощта на свойството Kind. • SpeedButton: оперативни бутони. Тези компоненти са предвидени, за да се ускори разработването на панели с инструменти (toolbars). Оперативният бутон има само икона и няма име. ПИК

  24. УПРАЖНЕНИЕ 3Работа с визуални компоненти - бутони • RadioButton: осигурява взаимно изключващи се опции. Радио бутоните обикновено се използват съединени в групова кутия, където само един от тях е разрешен в един момент от време. • RadioGroup: представлява група с няколко радио бутона в нея. Елементите в нея са част от един списък от низове (Items). Свойството ItemIndex е цяло число, което връща номера на реда, които е избран. По подразбиране ItemIndex има стойност –1, което означава, че не избран нито една от опциите. ПИК

  25. УПРАЖНЕНИЕ 3Стандартни процедури за съобщения ПИК

  26. УПРАЖНЕНИЕ 3Бутони, използвани от MessageDlg • Предефинирани са следните бутони: mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp. • В добавка са предефинирани и най-използваните комбинации: mbYesNoCancel, mbOKCancel, mbAbortRetryIgnore. ПИК

  27. УПРАЖНЕНИЕ 3Диалогови типове, използвани от MessageDlg ПИК

  28. mrNone mrAbort mrYes mrOk mrRetry mrNo mrCancel mrIgnore mrAll УПРАЖНЕНИЕ 3Връщана стойност от MessageDlg ПИК

  29. УПРАЖНЕНИЕ 3Задачи • Да се намери сумата, средното аритметично, минималният и максималният елементи на масив от 100 числа, които са записани във файл ‘Data.txt’. Резултата да се изведе в диалогова кутия. • Да се добави възможност за избор на типа на елементите на масива (цели или реални числа) и ако са цели – да се определи сума на четните и сума на нечетните числа. Резултата да се изведе в диалогова кутия. ПИК

  30. Променливи и типове данни Лекция No 4 ПИК

  31. Символни типове • Фундаментални символни типове: • AnsiChar- еднобайтови (8 бита) символи, подредени съгласно разширената ANSI кодова таблица; • WideChar- двубайтови (16 бита) символи, подредени по Unicode кодова таблица. • Първите 256 Unicode символи съвпадат със същите от ANSI. ПИК

  32. Символни типове • Родовият тип е Char, който е еквивалентен на AnsiChar. • Тъй като реализацията на Char подлежи на промяна, добра идея е използването на стандартната функция SizeOf при определяне на размер. ПИК

  33. Символни типове • Предефинираната функция Chr връща символа за всяко цело число в диапазона на AnsiChar или WideChar. • Символните стойности работят като целите при намаляване на най-малката или увеличаване на най-голямата (докато не е включена range-checking опция на компилатора). ПИК

  34. Булевитипове • предефинирани булеви типове: • Boolean • ByteBool • WordBool • LongBool • Boolean е предпочитаният тип. Останалите съществуват за съвместимост с различните езици за програмиране и средата Windows. ПИК

  35. Булевитипове • Променлива от тип Boolean заема един байт памет. • Променлива от тип ByteBool заема един байт. • Променлива от тип WordBool заема два байта. • Променлива от тип LongBool - четири байта. ПИК

  36. Булевитипове • Булевите стойности се означават чрез предефинираните константи True и False. • В сила са правилата, показани в таблицата вдясно. ПИК

  37. Булевитипове • Стойност от тип ByteBool, LongBool, или WordBool се счита за True, ако стойността е различна от нула. • Компилаторът автоматично извършва това преобразувание. • Това е в сила за поредността на булевата стойност, а не за самата нея. ПИК

  38. Булевитипове • В Object Pascal, булевите изрази не са еквивалентни на цели или реални числа. • Преобразуването на променлива до Boolean ще даде непредсказуем резултат. ПИК

  39. Фундаментални реални данни ПИК

  40. Фундаментални реални данни • Real48 се поддържа само за съвместимост с по-ранните версии на езика. Тъй като форматът му на съхранение не е вграден във фамилия Intel, той дава по-лоши резултати от останалите реални типове. • Extended се използва за постигане на по-голяма точност отколкото при другите реални типове, но създава проблеми при преносимостта на програми от една платформа на друга. ПИК

  41. Фундаментални реални данни • Типът Comp (computational) е вграден в Intel и представя 64-битово цяло число. Класифициран е като реален, но поведението му е като на подреден тип. (Например, не може да се увеличава или намалява стойност от тип Comp.) Comp се поддържа само за съвместимост с предходни версии на езика. Препоръчва се използването на Int64. ПИК

  42. Фундаментални реални данни • Currency е реално число с фиксирана точка, което е създадено за намаление на грешката от закръгление при парични изчисления. Съхранява се като скалирано 64-битово цяло число като последните четири позиции са след десетичната точка. Когато се смесва с други реални типове в присвояване и изрази, Currency автоматично се делят или умножават по 10000. ПИК

  43. Реални данни • Родовият тип е Real. Еквивалентен е на Double. • Шест-байтовия тип Real48 е еквивалентен на Real в ранните версии на езика Object Pascal. • Ако прекомпилирате код, създаден на Delphi1.0 трябва да смените Real с Real48. • За тази цел може да използвате и директивата на компилатора {$REALCOMPATIBILITY ON} за да превключите Real да бъде 6 байта. ПИК

  44. Предефинирани стрингови данни ПИК

  45. Предефинирани стрингови данни • AnsiString, наричен още дълъг низ, е най-често използвания тип. • Низовите типове могат да се смесват в присвояване и изрази. Компилаторът автоматично прaви необходимите преобразувания. • Изисква се строго съвпадение на типовете при предаване на стринговете като параметри към процедури и функции по псевдоним (като var и out параметри). Може да се използва явно преобразуване на типа от един стринг към друг. ПИК

  46. Стрингови данни • Ключовата дума string се използва за родов типов идентификатор, начина на представянето на който зависи от директива на компилатора. • По подразбиране е включена {$H+}. При нея компилаторът ще интерпретира стринга, когато е записан без квадратни скоби с брой елементи в тях, като AnsiString. • Използването на {$H-} директива означава, че горепосочения стринг е ShortString ПИК

  47. Стрингови данни • Стандартната функция Lengthвръща броя символи в низа. • Процедурата SetLengthзадава размер на низа. • Сравнението на низове е дефинирано от подредбата на символите в тях. Прави се символ по символ. • Когато низовете не са с еднаква дължина, всеки символ от по-дългия низ без съответствие от другия, е по-голям. ПИК

  48. Стрингови данни • Стрингът може да се индексира, точно както масив. • Ако S е низова променлива и I е целочислен израз, S[I] означава I-тия символ в S. • За типовете ShortString или AnsiString, S[I] е от тип AnsiChar; а за WideString, S[I] е от тип WideChar. ПИК

  49. Стрингови данни • Пример: преобразуване от малки в големи букви: var I: Integer; begin    I := Length(MyString);     while I > 0 do     begin        MyString[I] := UpCase(MyString[I]);             I := I - 1;     end;end; ПИК

  50. Стрингови данни • Индексирането на низа след неговия край води до сериозна грешка: “access violations”. • Трябва да се избягва и предаването на индекси на дълги низове като var параметри, защото кодът не може да се оптимизира в този случай. ПИК

More Related