Міністерство сільського господарства Російської Федерації
ФГТУ ВПО Воронезький державний аграрний університет імені К.Д. Глінки
Кафедра інформаційного забезпечення та моделювання агроекономічний систем
На тему: Поняття множини. символьний тип
Мова програмування Pascal був розроблений в 1968-1971 рр. Ніклаус Віртом в Цюріхському Інституті інформатики (Швейцарія), і названий вчесть Блеза Паскаля - видатного математика, філософа і фізика 17-го століття. Початкова мета розробки мови диктувалася необхідністю створення інструменту "для навчання програмуванню як систематичній дисципліні". Однак дуже скоро виявилася надзвичайна ефективність мови Pascal в найрізноманітніших додатках, від вирішення невеликих задач чисельного характеру до розробки складних програмних систем - компіляторів, баз даних, операційних систем і т.п. До теперішнього часу Pascal належить до групи найбільш поширених і популярних у світі мов програмування:
існують численні реалізації мови практично для всіх
розроблені десятки діалектів і
проблемно-орієнтованих розширень мови Pascal;
базуються на цій мові.
Перевагою мови Паскаль є можливість використання широкого набору різних типів даних. Тип даних визначає можливі значення констант, змінних, функцій, виразів і операцій, які можуть виконуватися над ними.
Типи даних підрозділяються на прості і складні. Прості типи поділяються на стандартні (зумовлені) типи і типи визначаються користувачем (призначені для користувача типи). Імена стандартних типів є ідентифікаторами і діють в будь-якій точці програми. Вони описані в стандартному модулі System. Так само, як і інші ідентифікатори, імена стандартних типів можуть бути перевизначені в програмі. Однак залишається можливість звернення до їх первісного змісту за допомогою кваліфікованого ідентифікатора із зазначенням імені модуля System.
До стандартних типів відносяться:
група цілих типів (Shortint, Integer, Longint, Byte, Word);
група речових типів (Single, Real, Double, Extended, Comp);
група логічних (булевих) типів (Boolean, ByteBool, WordBool, LongBool);
символьний тип (Char);
строковий тип (String, Pchar);
вказівний тип (Pointer);
текстовий тип (Text).
Символьний тип, цілі і булевские типи відносять до, так званим, порядковим типам.
Порядкові типи характеризуються наступними властивостями:
Безліч допустимих значень будь-якого порядкового типу являє собою упорядковану послідовність. кожен елемент якої має свій порядковий номер. Порядковий номер представляється цілим числом. Перше значення будь-якого порядкового типу має номер 0, наступний номер 1 і т.д. Виняток становлять порядкові типи Integer, Shortint, Longint, де порядковим номером значень цих типів є саме значення.
До будь-якого значення порядкового типу можна застосовувати функції повертають номер, попереднє чи наступне значення даного типу.
Призначені для користувача типи - додаткові абстрактні типи, характеристики яких програміст може визначати самостійно. До призначеним для користувача типам відносяться:
• вказівні типи (крім стандартного типу Pointer);
Перераховуються і інтервальний типи є порядковими.
Поняття множини. Операції над безліччю
Множинний тип даних Паскаля нагадує перелічувальний тип даних. Разом з тим множинний тип даних - набір елементів не організованих в порядку проходження.
В математиці множинний тип даних - будь-яка сукупність елементів довільної природи. Операції, які проводяться над множинами, по суті полягають у включенні і виключенні елементів з безлічі.
Поняття множини в мові програмування значно вужче математичного поняття.
У Паскалі під множинним типом розуміється кінцева сукупність елементів, що належать деякому базовому типу даних.
В якості базових типів можуть використовуватися:
діапазонні на основі перерахованих вище.
Такі обмеження пов'язані з формою подання множинного типу даних в Паскалі і можуть бути зведені до того, щоб функція ord () для використовуваного базового типу лежала в межах від 0 до 255.
Після того, як базовий тип заданий, сукупність значень відповідного множинного типу даних визначається автоматично. У неї входять всі можливі множини, які є довільними комбінаціями значень базового типу. Всі ці безлічі є окремими значеннями певного множинного типу даних.
Опис множинного типу даних:
Приклад множинного типу даних:
Для того щоб надати змінної множинного типу значення, використовують конструктор безлічі - перерахування елементів безлічі через кому в квадратних дужках. наприклад,
Конструктор безлічі може містити діапазон значень базового типу. Тоді в багатьох включаються всі елементи діапазону. наприклад,
Обидві форми конструювання множин можуть поєднуватися. наприклад,
Конструктор виду [] позначає порожні множини.
У програмі можна використовувати множинні тип як константи, в цьому випадку їх визначають наступним способом:
Можна множинний тип визначити як типізовану константу:
При описі множинного тип як констант допускається використання знака "+" (злиття множин). наприклад,
З множинними типами Паскаля можна виконувати дії об'єднання, виключення і перетину.
Об'єднання множинних типів містить елементи, які належать хоча б одній безлічі, при цьому кожен елемент входить в об'єднання тільки один раз. Операція об'єднання множин позначається знаком '+'.
Приклад об'єднання множинних типів:
Varsmall, capital, latin: symbol; .................. small: = [ 'a'. 'Z']; capital: = [ 'A'. 'Z']; latin: = small + capital; образованимножествалатінскіхбуквпутемоб'едіненіямножествsmallіcapital>
Можливо об'єднувати множинні типи і окремі елементи. наприклад,
Виняток визначається як різниця множинних типів, в якому з зменшуваного виключаються елементи, що входять до від'ємник. Якщо в віднімається є елементи, які відсутні в зменшуваному, то вони ніяк не впливають на результат. Операція виключення позначається знаком '-'. Приклад виключення множинних типів Паскаля
Припинення множинних типів-множини, що містять елементи, які одночасно входять в обидва безлічі. Операція перетину множин позначається знаком '*'.
Приклад перетину множинних типів
Операції відносини множинних тіповНаряду з розглянутими вище операціями, над значеннями множинного типу визначені і деякі операції відносини. Операндами операцій над множинними значеннями в загальному випадку є множинні вирази. Серед операцій відносини над значеннями множинного типу особливе місце займає спеціальна операція перевірки входження елемента в безлічі, що позначається службовим словом in. На відміну від інших операцій відносини, в яких значення обох операндів відносяться до одного і того ж множинного типу значень, в операції in перший операнд повинен належати базового типу, а другий - множинного типу значень, побудованому на основі цього базового типу. Результатом операції відносини, як зазвичай, є логічне значення (true або false).
Операція порівняння на рівність множинних типів. Безлічі вважаються рівними (еквівалентними), якщо всі елементи одного безлічі присутні в іншому і навпаки. Для операції порівняння на рівність чи нерівність використовуються символи '=' і '<>'. A: = [2,1,3]; D: = [1,3,2];
Тоді операція A = D має значення true, а операція A<>D має значення false.
Перевірка включення. Одне безліч вважається включеним в інше (одне безліч є підмножиною іншого), якщо всі його елементи містяться у другому безлічі. Протилежне твердження може бути і несправедливим. Операції перевірки включення позначаються '<=’ и ‘>= '.
letter> = glasn; soglan <= letter;
Слід зазначити, що застосування операцій <и> над операндами множинного типу неприпустимо.
Символьний тип. CHAR - займає 1 байт. Значним символьного типу є безліч всіх символів ПК. Кожному символу присвоюється ціле число в діапазоні 0 ... 255. Це число служить кодом внутрішнього уявлення символу. Для кодування використовується код ASCII (American Standart Code for Information Interchange - американський стандартний код для обміну інформацією). Це 7-бітний код, тобто з його допомогою можна закодувати лише 128 символів в діапазоні від 0 до 127. У той же час в 8-бітному байті, відведеному для зберігання символу в Турбо Паскалі, можна закодувати в два рази більше символів в діапазоні від 0 до 255. Перша половина символів ПК з кодами 0 ... 127 відповідає стандарту ASCII. Друга половина символів з кодами 128 ... 255 не обмежена жорсткими рамками стандарту і може змінюється на ПК різних типів. Символи з кодами 0 ... 31 відносяться до службових кодами. Якщо ці коди використовувати в символьному тексті програми, вони вважаються пробілами.
Робота з символьними змінними В Turbo Pascal 7.0 для роботи з символами використовуються два типи змінних:
символьний тип даних;
строковий тип даних.
Стандартні функції для роботи з символьними величинами:
Операція складання символьних величин.
Операція складання дозволяє будувати з двох символьних рядків третю, що складаються з символів першої, за якою слідують символи другий. Позначається ця операція знаком "+". наример:
Описуємо рядкові змінні.
Привласнюється значення рядка полягає в апострофи. Дамо першим двом наступні значення, а третя буде дорівнює їх склеювання:
Рядок s3 має значення 'Тихіше води, нижче трави ".
Під довжиною рядка розуміється кількість введених символів, але вона не може перевищувати максимально можливої довжини (в описовій частині). Це значення можна визначити за допомогою функції, результат якої ціле число, яке дорівнює кількості символів.
В результаті значення цілих змінних будуть рівні: kl = 5, k2 = 21.
Значення змінної s1 = 'віз'. А на екрані будуть виведені наступні рядки: віз і 34.
В Turbo Pascal для цього використовується процедура Delete (str, n, m), яка вирізає з рядка str m символів, починаючи з n-го. таким чином сама рядок змінюється. наприклад:
Дан фрагмент програми:
Після виконання цих операторів з рядка будуть вилучені два символу, починаючи з третього, тобто рядок буде такий: s = '1256'.
В Turbo Pascal це можна зробити, застосовуючи процедуру Insert (s1, s2, n) - вставка рядка s1 у рядок s2, починаючи з п-го символу, при цьому перший рядок залишається такою ж, як і була, а друга отримує нове значення. наприклад:
В результаті виконання даної процедури рядок буде такий
Треба зауважити, що число 25 і рядок 25 - це не одне і те ж. Для роботи з числами і рядками в Turbo Pascal застосовуються дві процедури.
Str (n, s1) - переводить числове значення n в строкове і привласнює результат рядку s1, причому можна переводити як цілі числа, так і речові. наприклад:
n: = 12; str (n, s1); - після виконання s1 = '12 '
Існує зворотна операція, яка переводить строкове значення в числове.
Функція val (s, n, k) - переводить строкове значення в числове, якщо даний рядок дійсно є записом числа (цілого або речового), то значення k = 0, а n - це число, інакше k дорівнюватиме номеру символу, в якому зустрічається перше порушення записи числа n. наприклад:
val ( '1234', n, k) п = 1234, k = 0;
Функції перетворення типів
Іноді в програмах виникає необхідність по коду визначити символ і, навпаки, по символу визначити його код. Для цього використовують функцію: CHR (x).
Ця функція повертає символ, відповідний ASCII-коду числа x. наприклад:
for i = 0 to 255 do writeln (i, '', chr (i));
Для визначення коду по символу використовують функцію ORD. наприклад:
Запис - тип даних, що складається з фіксованого числа компонентів (званих полями) одного або декількох типів.
Наведемо приклади опису типу запис:
type Point = RECORD x, y: Real
Dates = RECORD day. 1..31; mon. String [3]; year: 1..3000
Можна визначити масив записів, поля яких також є масивами:
type Student = Array [1..N] of Record fam. String [15]; birth: Dates; man. Boolean; marks: Array [1..10] of 0..5
Ідентифікатор Group можна використовувати для зберігання інформації про групу студентів (прізвище, дата народження, стать і оцінки по 10 предметів).
Звернення до значення поля запису відбувається за допомогою складного імені, що містить ідентифікатор змінної і ім'я поля, розділені точкою. Наприклад, p.x, dt.mon, group [1] .man, group [2] .marks [1].
Складене ім'я може використовуватися скрізь, де допустимо застосування ідентифікатора типу поля: у виразах, операторах вводу-виводу, привласнення, як фактичних параметрів.
Звернення до поля записи за допомогою складного імені може мати громіздкий вигляд. Оператор WITH, вирішальний цю проблему, має такий вигляд:
WITH <Переменная типа запись> DO <Оператор>
Якщо після слова WITH задати ім'я запису, то в операторі, наступним за DO, для доступу до поля можна вказувати тільки ім'я поля без імені змінної.
Записи з варіантами
Записи можуть мати варіанти. Як приклад наведемо дослідження для перевірки якості деякого ліки. Якщо перевірки не проводиться, то єдині дані, які нас цікавлять, - це чи застосовував даний пацієнт раніше дані ліки. Якщо ж проводиться перевірка, то необхідно зібрати відомості по великому числу даних щодо головного болю, лихоманки і нудоти.
Ми використовуємо дві структури даних типу запис:
Що можна зробити з описами змінних, щоб ми могли працювати одночасно з обома структурами? Для цього в описі запису можна застосувати спеціальний перемикач Case. Після можливого результату Proverka в дужках наводиться опис відповідних полів. Етоіллюстріруетсяніже:
type Effect = Record Nomer: Integer; Case Proverka: Boolean of
FALSE: (PrinimalRanee: Boolean);
TRUE. (GolovBol, Lihoradka, Toshnota: Boolean)
var Nekto: Effect;
Перемикач Case використовується тут для опису змінних і відрізняється від оператора Case: в перемикачі Case використовуються дужки і відсутня службове слово end, обов'язкове в кінці "звичайного" Case.
Частина, яка зустрічається в обох структурах, називається фіксованою частиною. Частина, яка зустрічається тільки в одній зі структур, називається варіантної частиною, а поле, яке є важливим для продовження подальшої структури, називається загальним вузловим полем (або тегом).
У разі, коли один з варіантів не містить полів (тобто список полів порожній), в дужках після відповідної константи нічого не пишуть, наприклад:
Type Pogoda = Record Temperatura: Integer; Vlagnost. Integer; Case Veter: Boolean of TRUE. (Napravlenie: (S, N, V, O); Skorost. Integer); FALSE: ()
Після варіантної частини запису поля з'являтися не можуть.
Імена полів, що використовуються в описі різних варіантів, не повинні повторюватися в цьому записі; не можна також застосовувати одне і те ж ім'я в загальній і варіантної частинах записи.
Варіантна частина може містити інші записи, в тому числі і з варіантами. Ступінь вкладеності записів в варіантної частини не обмежена.
Список вихідних даних
Виводяться учні одного класу, або проживають в одному будинку.
Розробка блок-схеми рішення завдання
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Mask, DBCtrls, ExtCtrls, Grids, DBGrids, ComCtrls;
type TForm1 = class (TForm) PageControl1: TPageControl;