Министерство сельского хозяйства Российской Федерации
ФГОУ ВПО Воронежский Государственный АграрныйУниверситет имени К.Д. Глинки
Кафедра информационного обеспечения и моделированияагроэкономических систем
Курсовой проект
На тему: Понятие множества. Символьный тип
Воронеж – 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).
Символьный тип, целые и булевские типы относят к, такназываемым, порядковым типам.
Порядковые типы характеризуются следующими свойствами:
Множество допустимых значений любого порядкового типапредставляет собой упорядоченную последовательность, каждый элемент которойимеет свой порядковый номер. Порядковый номер представляется целым числом.Первое значение любого порядкового типа имеет номер 0, следующий номер 1 и т.д.Исключение составляют порядковые типы Integer, Shortint, Longint, где порядковымномером значений этих типов является само значение.
К любому значению порядкового типа можно применять функциивозвращающие номер, предыдущее или последующее значение данного типа.
Пользовательские типы – дополнительные абстрактные типы,характеристики которых программист может определять самостоятельно. Кпользовательским типам относятся:
• перечисляемый тип;
• интервальный тип;
• указательные типы (кроме стандартного типа Pointer);
• структурированные типы;
• процедурный тип.
Перечисляемый и интервальный типы являются порядковыми.
Понятие множества. Операции надмножеством
Множественный тип данных Паскаля напоминает перечислимый типданных. Вместе с тем множественный тип данных – набор элементов неорганизованных в порядке следования.
В математике множественный тип данных – любая совокупностьэлементов произвольной природы. Операции, которые производятся над множествами,по существу заключаются во включении и исключении элементов из множества.
Понятие множества в языке программирования значительно ужематематического понятия.
В Паскале подмножественным типом понимается конечная совокупность элементов,принадлежащих некоторому базовому типуданных.
В качестве базовых типов могут использоваться:
перечислимые типы;
символьный;
байтовый;
диапазонные на основе вышеперечисленных.
Такие ограничения связаны с формой представлениямножественного типа данных в Паскале и могут быть сведены к тому, чтобы функцияord() для используемого базового типа лежала в пределах от 0до 255.
После того, как базовый тип задан, совокупность значенийсоответствующего множественного типа данных определяется автоматически. В неевходят все возможные множества, являющиеся произвольными комбинациями значенийбазового типа. Все эти множества являются отдельными значениями определенногомножественного типа данных.
Описание множественного типа данных:
Typeимя_типа>= setofбазовый_тип>
Примермножественного типа данных:
Typesymbol= setofchar; {описан множественный тип symol из букв}Varletter, digits, sign: symbol; {описаны три переменные множественного типа}
Для того чтобы придать переменной множественного типазначение, используют конструктормножества – перечисление элементов множества через запятую вквадратных скобках. Например,
sign:=[‘+’, ‘-‘];
Конструктор множества может содержать диапазон значенийбазового типа. Тогда во множества включаются все элементы диапазона. Например,
digits:=[‘0’… ‘9’];
letter:=[‘a’… ‘z’];
Обе формы конструирования множеств могут сочетаться.Например,
letter:= [‘a’… ‘z’, ‘A’… ‘Z’];
Конструктор вида [] обозначает пустые множества.
В программе можно использовать множественны тип какконстанты, в этом случае их определяют следующим способом:
Const YesOrNo= [‘Y’, ‘y’, ‘N’, ‘n’];
Можно множественный тип определить как типизированнуюконстанту:
Constdigits: setofchar= [‘’… ‘9’];
При описании множественного тип как констант допускаетсяиспользование знака “+” (слияние множеств). Например,
Const Yes= [‘Y’, ‘y’]; No= [‘N’, ‘n’];
YesOrNo= Yes+ No;
С множественными типами Паскаля можно выполнять действияобъединения, исключения и пересечения.
Объединениемножественных типов содержит элементы, которые принадлежат хотябы одному множеству, при этом каждый элемент входит в объединение только одинраз. Операция объединения множеств обозначается знаком ‘+’.
Пример объединениямножественных типов:
Typesymbol= setofchar;
Varsmall, capital, latin: symbol; ……………… small:= [‘a’… ‘z’]; capital:= [‘A’… ‘Z’];latin:= small + capital; {образованымножествалатинскихбуквпутемобъединениямножествsmall иcapital}
Возможно объединять множественные типы и отдельные элементы.Например,
small:= [‘c’… ‘z’];
small:= small + [‘a’] +[‘b’];
Исключениеопределяется как разность множественных типов, в котором из уменьшаемогоисключаются элементы, входящие в вычитаемое. Если в вычитаемом есть элементы,отсутствующие в уменьшаемом, то они никак не влияют на результат. Операцияисключения обозначается знаком ‘-‘. Примерисключения множественных типов Паскаля
letter:=[‘a’… ‘z’]; {множества буквлатинского алфавита}glasn:= [‘a’, ‘e’, ‘o’, ‘u’, ‘i’, ‘y’];{множества гласных букв}soglasn:=letter-glasn; {образовано множествасогласных букв путем исключения из множества всех букв множества гласных букв}
Пресечениемножественных типов– множества, содержащие элементы,одновременно входящие в оба множества. Операция пересечения множествобозначается знаком ‘*’.
Пример пересечениямножественных типов
Typechisla= set of byte; Varz,x,y: chisla; ………… x:= [..150]; y:= [100..255]; z:= x*y{полученомножества чисел из диапазона 100..150в результате пересечения двух множеств}
Операции отношениямножественных типов Наряду срассмотренными выше операциями, над значениями множественного типа определены инекоторые операции отношения. Операндами операций над множественными значениямив общем случае являются множественные выражения. Среди операций отношения надзначениями множественного типа особое место занимает специальная операция проверки вхождения элемента во множества,обозначаемая служебным словом in.В отличие от остальных операций отношения, в которых значения обоих операндовотносятся к одному и тому же множественному типу значений, в операции in первыйоперанд должен принадлежать базовому типу, а второй – множественному типузначений, построенному на основе этого базового типа. Результатом операцииотношения, как обычно, является логическое значение (true или false).
Операция сравненияна равенство множественных типов. Множества считаются равными(эквивалентными), если все элементы одного множества присутствуют в другом инаоборот. Для операции сравнения на равенство или неравенство используютсясимволы ‘=’ и ‘’. A:= [2,1,3]; D:= [1,3,2];
Тогда операция A=D имеет значение true, а операцияAD имеет значение false.
Проверка включения.Одно множество считается включенным в другое (одно множество являетсяподмножеством другого), если все его элементы содержатся во втором множестве.Обратное утверждение может быть и несправедливым. Операции проверки включенияобозначаются ‘=’.
letter>= glasn; soglan
Следует отметить, что применение операций надоперандами множественного типа недопустимо.
Символьный тип данных.Описание символьного типа
Символьный тип. 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 для работы с символамииспользуются два типа переменных:
символьныйтип данных;
строковыйтип данных.
Стандартныефункции для работы с символьными величинами:
Операциясложения символьных величин.
Операция сложения позволяетстроить из двух символьных строк третью, состоящих из символов первой, закоторой следуют символы второй. Обозначается эта операция знаком "+".Наример:
Описываем строковыепеременные.
vars1, s2, s3: string;
Присваиваемое значение строкизаключается в апострофы. Присвоим первым двум следующие значения, а третьябудет равна их склеиванию:
s1: = ' Тише воды, ';
s2:= 'нижетравы’;
s3:=s1+’’+s2;
Строка s3 имеетзначение 'Тише воды, ниже травы'.
Длинастроки
Под длиной строки понимаетсяколичество введенных символов, но она не может превышать максимально возможнойдлины (в описательной части). Это значение можно определить при помощи функции,результат которой целое число, равное количеству символов.
Например:
s1:='12345'; s2:= 'Семероодного не ждут’; k1:=Length(s1); k2:=Length(s2).
В результате значения целыхпеременных будут равны: 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, начиная с п-го символа, при этом первая строка остается такой же,как и была, а вторая получает новое значение. Например:
s1;='34': s2:='1256'; insert(s1, s2, 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 to255 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 в скобках приводитсяописание соответствующих полей. Это иллюстрируется ниже:
typeEffect=Record Nomer: Integer; Case Proverka: Boolean of
FALSE:(PrinimalRanee: Boolean);
TRUE:(GolovBol,Lihoradka,Toshnota: Boolean)
end;
var Nekto: Effect;
Переключатель Caseиспользуется здесь для описания переменных и отличается от оператора Case: впереключателе Case используются скобки и отсутствует служебное слово end,обязательное в конце «обычного» Case.
Часть, которая встречается вобеих структурах, называется фиксированной частью. Часть, которая встречаетсятолько в одной из структур, называется вариантной частью, а поле, котороеявляется важным для продолжения дальнейшей структуры, называется общим узловымполем (или тегом).
В случае, когда один извариантов не содержит полей (т.е. список полей пуст), в скобках послесоответствующей константы ничего не пишут, например:
TypePogoda=Record Temperatura: Integer; Vlagnost: Integer; Case Veter: Booleanof 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;
procedureButton1Click(Sender: TObject);
private {Private declarations } public { Public declarations } end;
var Form1:TForm1;
implementation {$R*.dfm} procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet2.Close;
ifLength(Edit1.Text)0 then
ADODataSet2.CommandText:='select*fromшкольникиwhere классlike'''+Edit1.Text+'%''or адресlike''%'+Edit1.Text+''''
ElseAdoDataSet2.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; — служит для ввода критерия поиска;
Button1: TButton; — добавление кнопки;
ADOConnection1: TADOConnection; — обеспечивает соединение с БД;
ADODataSet1: TADODataSet; — представляет собой данные, полученные от источникаданных, в результате выполнения SQL – запросов;
ADODataSet2: TADODataSet;DataSource1: TDataSource; — источник данных;
DataSource2: TDataSource;procedure Button1Click(Sender: TObject); — при нажатии на кнопку происходит поиск;
procedure TForm1.Button1Click(Sender:TObject); — построение запроса для кнопки;
Проверка по шагам дляотдельных алгоритмов программы
Вкладка «Добавление/редактирование»
С помощью этой вкладкипользователь может добавлять или редактировать данные об учениках.
Вкладка Поиск
С помощью этих вкладокпользователь может произвести поиск учеников по классу или по адресу.
/>
Разработка интерфейса
На первой вкладке«Добавление/редактирование» при помощи DBNavigator мыможем добавлять или редоктировать уже существующие данные об учениках.
На второй вкладке «Поиск» принажатии кнопки «поиск» происходит поиск по классам или по адресу(ученикипроживающие в одном доме).
/>Тестированиеи результаты работы программы
Данная программапредназначена для поиска учеников, которые учатся в одном классе либо проживаютв одном доме. Это очень удобно когда необходимо узнать сколько учеников учатсяв классе, либо место их прописки (в этом и заключается эффективность даннойпрограммы). Для большей эффективности можно создать еще несколько запросовтаких как: количество отличников, посещаемость, средний балл по классам и такдалее.
Вывод
В ходе данной работы было:
раскрыто понятие множества,
описаны операций, которыеможно выполнять над множеством;
раскрыто понятие символьногои комбинированного типов данных;
описаны операции и функциидля работы с символьными переменными;
Также в ходе данной работыбыла написана программа для сохранения и обработки информации об учениках.Данная программа написана на современном языке Turbo-Pascal,который позволил наиболее просто представить эту работу. В ходе выполнениякурсового проекта я ознакомился с новыми приемами программирования иособенностями языка Turbo-Pascal.
Список использованной литературы
1. Лахатин, А.С. Языки программирования. Учеб. пособие/ А.С. Лахатин, Л.Ю. Искакова. — Екатеринбург, 1998. — 548с.: ил.
2. Богатырев, А. Язык программирования С [Электронныйре-сурс] / А. Богатырев.- электр. дан. — Режим доступа: www.refby.com. — Загл. с экрана.
3. Уэйт, М. Язык С. Руководство для начинающих. / М.Уэйт, С. Прага, Д. Мартин. — М.: Мир, 1995. — 521с.: ил.
4. Фридман, А.Л. Язык программирования / А.Л.Фридман.- М.: Бином, 2006. — 523с.: ил.
5. Патрикеев, Ю.Н. Объектно-ориентированноепрограммирова-ние [Электронный ресурс] / Ю.Н.Патрикеев. — Электрон. Дан. — Режим дос-тупа: www.intuit.ru/department/pl/cpp/lit.html. — загл. сэкрана.
6. Тарасов, И. Thinking in C++/ И. Тарасов.- М.:2004.- 496с.: ил.
7. Гагин, А. История JAVA / А.Гагин.- М,1998.-257с.:ил.
8. Таранов, А. Java как центр архипелага [Электронныйресурс] / А. Таранов, В. Цишевский. — Электрон. дан.- Режим доступа:
www. fortunecity.com/skyscraper/mmx/490/index.html. — Загл. с экрана.
9. Коропов, С. Алгоритм [Электронный ресурс] / С.Коропов. — Электрон. дан. — Режим доступа: ftp://labrea.stanford.edu/pub/cweb/. — Загл. с экрана.
10. Робинсон, С. C# для профессионалов: T.1. /С.Робинсон, О. Корнес, Д.Глин, Б. Харвей и др.; пер. с англ. С. Кортыгин и О.Труфанов. — М. ЛОРИ. — М.: 2005. — 999с.