Иногда в программах возникает необходимость по коду определить символ и, наоборот, по символу определить его код. Для этого используют функцию: 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, для доступа к полю можно указывать только имя поля без имени переменной.
Записи с вариантами
Записи могут иметь варианты. В качестве примера приведём исследование для проверки качества некоторого лекарства. Если проверки не производится, то единственные данные, которые нас интересуют, - это применял ли данный пациент ранее данное лекарство. Если же производится проверка, то необходимо собрать сведения по большому числу данных относительно головной боли, лихорадки и тошноты.
Мы используем две структуры данных типа запись:
|
|
Что можно сделать с описаниями переменных, чтобы мы могли работать одновременно с обеими структурами? Для этого в описании записи можно применить специальный переключатель 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 школьники where класс like'''+Edit1.Text+'%''or адрес like''%'+Edit1.Text+''''
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; - служит для ввода критерия поиска;
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. Богатырев, А. Язык программирования С [Электронный ре-сурс] / А. Богатырев.- электр. дан. - Режим доступа: https://www.refby.com. - Загл. с экрана.
3. Уэйт, М. Язык С. Руководство для начинающих. / М. Уэйт, С. Прага, Д. Мартин. - М.: Мир, 1995. - 521с.: ил.
4. Фридман, А.Л. Язык программирования / А.Л.Фридман. - М.: Бином, 2006. - 523с.: ил.
5. Патрикеев, Ю.Н. Объектно-ориентированное программирова-ние [Электронный ресурс] / Ю.Н.Патрикеев. - Электрон. Дан. - Режим дос-тупа: https://www.intuit.ru/department/pl/cpp/lit.html. - загл. с экрана.
6. Тарасов, И. Thinking in C++/ И. Тарасов.- М.: 2004.- 496с.: ил.
7. Гагин, А. История JAVA / А.Гагин.- М,1998.-257с.: ил.
8. Таранов, А. Java как центр архипелага [Электронный ресурс] / А. Таранов, В. Цишевский. - Электрон. дан.- Режим доступа: https:// www. fortunecity.com/skyscraper/mmx/490/index.html. - Загл. с экрана.
9. Коропов, С. Алгоритм [Электронный ресурс] / С. Коропов. - Электрон. дан. - Режим доступа: ftp://labrea.stanford.edu/pub/cweb/. - Загл. с экрана.
10. Робинсон, С. C# для профессионалов: T.1. / С.Робинсон, О. Корнес, Д.Глин, Б. Харвей и др.; пер. с англ. С. Кортыгин и О. Труфанов. - М. ЛОРИ. - М.: 2005. - 999с.