Понятие множества. Символьный тип

Курсовой проект

Министерство сельского хозяйства Российской Федерации

ФГОУ ВПО Воронежский Государственный Аграрный Университет имени К.Д. Глинки

Кафедра информационного обеспечения и моделирования агроэкономических систем

Воронеж – 2010

Язык программирования 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).

    7 стр., 3287 слов

    Базы данных и системы управления базами данных

    ... данных, базы данных и СУБД: Банк данных (БнД) База данных (БД) Система управления базами данных (СУБД) Глава1. Базы данных 1. 1 Основные понятия баз данных В современных базах данных хранятся не только данные, но и информация. База данных ... данных из нее. 1.4 Объекты базы данных БД может содержать разные типы объектов. Каждая СУБД может реализовывать свои типы ... от английского языка, и символов ...

Символьный тип, целые и булевские типы относят к, так называемым, порядковым типам.

Порядковые типы характеризуются следующими свойствами:

Множество допустимых значений любого порядкового типа представляет собой упорядоченную последовательность , каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет номер 0, следующий номер 1 и т.д. Исключение составляют порядковые типы Integer, Shortint, Longint, где порядковым номером значений этих типов является само значение.

К любому значению порядкового типа можно применять функции возвращающие номер, предыдущее или последующее значение данного типа.

Пользовательские типы – дополнительные абстрактные типы, характеристики которых программист может определять самостоятельно. К пользовательским типам относятся:

  • перечисляемый тип;
  • интервальный тип;
  • указательные типы (кроме стандартного типа Pointer);
  • структурированные типы;
  • процедурный тип.

Перечисляемый и интервальный типы являются порядковыми.

Множественный тип данных Паскаля напоминает перечислимый тип данных. Вместе с тем множественный тип данных – набор элементов не организованных в порядке следования.

В математике множественный тип данных – любая совокупность элементов произвольной природы. Операции, которые производятся над множествами, по существу заключаются во включении и исключении элементов из множества.

Понятие множества в языке программирования значительно уже математического понятия.

В Паскале под множественным типом понимается конечная совокупность элементов, принадлежащих некоторому базовому типу данных.

В качестве базовых типов могут использоваться:

  • перечислимые типы;
  • символьный;
  • байтовый;
  • диапазонные на основе вышеперечисленных.

Такие ограничения связаны с формой представления множественного типа данных в Паскале и могут быть сведены к тому, чтобы функция ord() для используемого базового типа лежала в пределах от 0 до 255.

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

Описание множественного типа данных:

Type < имя_типа> = set of < базовый_тип>

Пример множественного типа данных:

Type symbol= set of char; {описан множественный тип symol из букв} Var letter, digits, sign: symbol; {описаны три переменные множественного типа}

Для того чтобы придать переменной множественного типа значение, используют конструктор множества – перечисление элементов множества через запятую в квадратных скобках. Например,

13 стр., 6182 слов

Основные структуры данных

... или иной объект описываемого типа; 3) множество допустимых операций, которые применимы к объекту описываемого типа. 3. Характеристики основных типовых структур 3.1 Линейные и нелинейные Все структуры данных можно подразделить на ...

sign:= [‘+’, ‘-‘];

  • Конструктор множества может содержать диапазон значений базового типа. Тогда во множества включаются все элементы диапазона. Например,

digits:= [‘0’ .. ‘9’];

  • letter:= [‘a’ .. ‘z’];
  • Обе формы конструирования множеств могут сочетаться. Например,

letter:= [‘a’ .. ‘z’, ‘A’ ..

Конструктор вида [] обозначает пустые множества.

В программе можно использовать множественны тип как константы, в этом случае их определяют следующим способом:

  • Const YesOrNo= [‘Y’, ‘y’, ‘N’, ‘n’];

Можно множественный тип определить как типизированную константу:

Const digits: set of char= [‘ 0 ’ .. 9 ’];

При описании множественного тип как констант допускается использование знака “+” (слияние множеств).

Например,

Const Yes= [‘Y’, ‘y’]; No= [‘N’, ‘n’];

  • YesOrNo= Yes+ No;
  • С множественными типами Паскаля можно выполнять действия объединения, исключения и пересечения.

Объединение множественных типов содержит элементы, которые принадлежат хотя бы одному множеству, при этом каждый элемент входит в объединение только один раз. Операция объединения множеств обозначается знаком ‘+’.

Пример объединения множественных типов:

Type symbol= set of char;

Var small, capital, latin: symbol; ……………… small:= [‘a’ .. ‘z’]; capital:= [‘A’ .. ‘Z’]; latin:= small + capital; { образованы множества латинских букв путем объединения множеств small и capital}

Возможно объединять множественные типы и отдельные элементы. Например,

small:= [‘c’ .. ‘z’];

  • small:= small + [‘a’] +[‘b’];

— Исключение определяется как разность множественных типов, в котором из уменьшаемого исключаются элементы, входящие в вычитаемое. Если в вычитаемом есть элементы, отсутствующие в уменьшаемом, то они никак не влияют на результат. Операция исключения обозначается знаком ‘-‘. Пример исключения множественных типов Паскаля

letter:= [‘a’ .. ‘z’];

  • Пресечение множественных типов– множества, содержащие элементы, одновременно входящие в оба множества. Операция пересечения множеств обозначается знаком ‘*’.

Пример пересечения множественных типов

Type chisla= set of byte;

— Операции отношения множественных типовНаряду с рассмотренными выше операциями, над значениями множественного типа определены и некоторые операции отношения. Операндами операций над множественными значениями в общем случае являются множественные выражения. Среди операций отношения над значениями множественного типа особое место занимает специальная операция проверки вхождения элемента во множества, обозначаемая служебным словом in . В отличие от остальных операций отношения, в которых значения обоих операндов относятся к одному и тому же множественному типу значений, в операции in первый операнд должен принадлежать базовому типу, а второй – множественному типу значений, построенному на основе этого базового типа. Результатом операции отношения, как обычно, является логическое значение (true или false).

A:= [2,1,3]; D:= [1,3,2];

10 стр., 4999 слов

Операции с данными

... памяти человека. 1.3 Операции с данными Данные характеризуются своим типом и множеством операций над ними. Данные в компьютере ... Типы данных, обрабатываемых компьютером № Типы данных Операции 1 Числа (числовые данные) Все арифметические операции 2 Тексты(символьные данные) Замещение, вставка, удаление символов, сравнение, конкатенация строк 3 Логические(бинарные) данные Все логические операции ...

Проверка включения. Одно множество считается включенным в другое (одно множество является подмножеством другого), если все его элементы содержатся во втором множестве. Обратное утверждение может быть и несправедливым. Операции проверки включения обозначаются ‘<=’ и ‘>=’.

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 для работы с символами используются два типа переменных:

  • символьный тип данных;
  • строковый тип данных.

Стандартные функции для работы с символьными величинами:

Операция сложения символьных величин.

Операция сложения позволяет строить из двух символьных строк третью, состоящих из символов первой, за которой следуют символы второй. Обозначается эта операция знаком «+». Наример:

Описываем строковые переменные.

var s 1, s 2, s 3: string ;

Присваиваемое значение строки заключается в апострофы. Присвоим первым двум следующие значения, а третья будет равна их склеиванию:

s1: = ‘ Тише воды, ‘;

s2:= ‘ ниже травы ’;

s3:=s1+’’+s2;

имеет значение ‘Тише воды, ниже травы’.

Длина строки

Под длиной строки понимается количество введенных символов, но она не может превышать максимально возможной длины (в описательной части).

Это значение можно определить при помощи функции, результат которой целое число, равное количеству символов.

Например:

s 1:=’12345′; s 2:= ‘Семеро одного не ждут’; k 1:= Length ( s 1); k 2:= Length ( s 2).

В результате значения целых переменных будут равны: kl=5, k2=21.

Копирование

Функция copy(str,n,m ) в Turbo Pascal копируют т символов строки str, начиная с n-го символа, при этом исходная строка не меняется. Можно результат этой функции присваивать другой строке или сразу выводить его на экран. Например:

s1:=’ паровоз ‘; s2:=’123456’; s3:=copy(s1, 5, 3); writeln(s3); writeln(copy(s2, 3, 2));

Значения переменной s1=’воз’. А на экране будут выведены следующие строки: воз и 34.

Удаление

В Turbo Pascal для этого используется процедура Delete(str, n,m), которая вырезает из строки str m символов, начиная с n-го. таким образом сама строка изменяется. Например:

Дан фрагмент программы:

s :=’123456′; delete ( s , 3, 2); writeln ( s );

s = ‘1256’.

Замена (Вставка)

В Turbo Pascal это можно сделать, применяя процедуру Insert(s1,s2,n) – вставка строки s1 в строку s2, начиная с п-го символа, при этом первая строка остается такой же, как и была, а вторая получает новое значение. Например:

s 1;=’34’: s 2:=’1256′; insert ( s 1, s 2, 3);

В результате выполнения данной процедуры строка будет такой

s2=’123456′.

Числа и строки

Надо заметить, что число 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. Например:
  • readln(s);
  • writeln(ord(s));
  • Запись — тип данных, состоящий из фиксированного числа компонентов (называемых полями) одного или нескольких типов.

Приведём примеры описания типа запись:

type Point=RECORD x,y: Real

END;

Dates=RECORD day : 1..31; mon : String[3]; year: 1..3000

END;

var p,r: Point;

dt: Dates;

Можно определить массив записей, поля которых также являются массивами:

type Student=Array [1..N] of Record fam : String[15]; birth: Dates; man : Boolean; marks: Array[1..10] of 0..5

end;

var Group: Student;

Идентификатор Group можно использовать для хранения информации о группе студентов (фамилия, дата рождения, пол и оценки по 10 предметам).

Обращение к значению поля записи происходит при помощи составного имени, содержащего идентификатор переменной и имя поля, разделённые точкой. Например, p.x, dt.mon, group[1].

man, group[2].

marks[1].

Составное имя может использоваться везде, где допустимо применение идентификатора типа поля: в выражениях, операторах ввода-вывода, присваивания, в качестве фактических параметров.

Обращение к полю записи с помощью составного имени может иметь громоздкий вид. Оператор WITH, решающий эту проблему, имеет следующий вид:

  • WITH <Переменная типа запись>
  • DO <Оператор>
  • Если после слова WITH задать имя записи, то в операторе, следующим за DO, для доступа к полю можно указывать только имя поля без имени переменной.

Записи с вариантами

Записи могут иметь варианты. В качестве примера приведём исследование для проверки качества некоторого лекарства. Если проверки не производится, то единственные данные, которые нас интересуют, — это применял ли данный пациент ранее данное лекарство. Если же производится проверка, то необходимо собрать сведения по большому числу данных относительно головной боли, лихорадки и тошноты.

Мы используем две структуры данных типа запись:

Nomer
Proverka
Prinimal
Nomer
Proverka
GolovBol
Lihoradka
Toshnota

Что можно сделать с описаниями переменных, чтобы мы могли работать одновременно с обеими структурами? Для этого в описании записи можно применить специальный переключатель Case. После возможного результата Proverka в скобках приводится описание соответствующих полей. Этоиллюстрируетсяниже:

  • type Effect=Record Nomer: Integer; Case Proverka: Boolean of

FALSE: (PrinimalRanee: Boolean);

TRUE : (GolovBol,Lihoradka,Toshnota: Boolean)

end;

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: ()

end;

Замечания:

После вариантной части записи поля появляться не могут.

Имена полей, использующиеся в описании различных вариантов, не должны повторяться в этой записи; нельзя также применять одно и то же имя в общей и вариантной частях записи.

Вариантная часть может содержать другие записи, в том числе и с вариантами. Степень вложенности записей в вариантной части не ограничена.

Разработка Программы

Постановка задачи

Список выходных данных

Выводятся ученики одного класса, либо проживающие в одном доме.

Разработка алгоритма решения задач

Разработка блок-схемы решения задачи

Программныйкод:

  • unit Unit1;

interface

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;

  • TabSheet1: TTabSheet;
  • TabSheet2: TTabSheet;
  • Label1: TLabel;
  • Label2: TLabel;
  • Label3: TLabel;
  • Label4: TLabel;
  • Label5: TLabel;
  • Label6: TLabel;
  • Label7: TLabel;
  • Label8: TLabel;
  • Label9: TLabel;
  • Label10: TLabel;
  • Label11: TLabel;
  • DBGrid1: TDBGrid;
  • DBNavigator1: TDBNavigator;
  • DBEdit1: TDBEdit;
  • DBEdit2: TDBEdit;
  • DBEdit3: TDBEdit;
  • DBEdit4: TDBEdit;
  • DBEdit5: TDBEdit;
  • DBEdit6: TDBEdit;
  • DBEdit7: TDBEdit;
  • DBEdit8: TDBEdit;
  • DBEdit9: TDBEdit;
  • DBEdit10: TDBEdit;
  • DBEdit11: TDBEdit;
  • Edit1: TEdit;
  • Button1: TButton;
  • ADOConnection1: TADOConnection;
  • ADODataSet1: TADODataSet;
  • ADODataSet2: TADODataSet;
  • DataSource1: TDataSource;
  • DataSource2: TDataSource;
  • procedure Button1Click(Sender: TObject);
  • private { Private declarations } public { Public declarations } end;
  • var Form1: TForm1;
  • implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);

begin

ADODataSet2.Close;

  • if Length(Edit1.Text)<>0 then

ADODataSet2.CommandText:=’select*from

Else AdoDataSet2.CommandText:=’select*from

ADODataSet2.Open;

end;

end

Список функций:

  • TForm1 = class(TForm) – служит для создания формы;
  • PageControl1: TPageControl;
  • многостраничнаяпанель;
  • TabSheet1: TTabSheet;
  • вкладка «добавление/редактирование»;
  • TabSheet2: TTabSheet;
  • вкладка «поиск»;
  • Label1: TLabel; — дляподписикомпонента

DBEdit1; Label2: TLabel; — для подписи компонента

DBEdit2; Label3: TLabel; — для подписи компонента

DBEdit3; Label4: TLabel; — для подписи компонента

DBEdit4; Label5: TLabel; — для подписи компонента

DBEdit5; Label6: TLabel; — для подписи компонента

DBEdit6; Label7: TLabel; — для подписи компонента

DBEdit7; Label8: TLabel; — для подписи компонента

DBEdit8; Label9: TLabel; — для подписи компонента

DBEdit9; Label10: TLabel; — для подписи компонента

DBEdit10; Label11: TLabel; — для подписи компонента

DBEdit11; DBGrid1: TDBGrid;

  • отображение данных;
  • DBNavigator1: TDBNavigator;
  • управление данными;
  • DBEdit1: TDBEdit – отображает номер личного дела;
  • DBEdit2: TDBEdit;
  • отображает фамилию; DBEdit3:
  • TDBEdit;
  • отображает имя;
  • DBEdit4: TDBEdit;
  • отображает отчество;
  • DBEdit5: TDBEdit;
  • отображает дату рождения;
  • DBEdit6: TDBEdit;
  • отображает класс;
  • DBEdit7: TDBEdit;
  • отображает адрес;
  • DBEdit8: TDBEdit;
  • отображает номер квартиры;
  • DBEdit9: TDBEdit;
  • отображает семью;
  • DBEdit10: TDBEdit;
  • отображает ФИО папы;
  • DBEdit11: TDBEdit;
  • отображает ФИО мамы;
  • Edit1: TEdit;
  • служит для ввода критерия поиска;