Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Процедура создания массива записей по содержимому StringGrid
Эта процедура обеспечивает обмен информацией между компонентом StringGrid и массивом записей. Алгоритм процедуры заключается в циклическом вызове написанной ранее процедуры считывания записи из StringGrid. Ниже приводится код этой процедуры. // Процедура формування масиву по змісту StringGrid procedure getArrayFromGrid(var ar: TAttArray; var count: integer; sg: TStringGrid); var i: integer; Begin count:= sg.RowCount-1; for i:= 1 to count do ar[i]:= recordFromRowGrid(sg, i); end; Процедура отображения массива в компоненте StringGrid Эта процедура, как и предыдущая, обеспечивает обмен информацией между компонентом StringGrid и массивом записей. Алгоритм процедуры заключается в циклическом вызове написанной ранее процедуры вывода записи в строку StringGrid. Ниже приводится код этой процедуры. // Процедура відображення масиву у StrinGrid procedure showArrayInGrid(sg: TStringGrid; const ar: TAttArray; count: integer); var i: integer; Begin if count = 0 then exit; sg.RowCount:= count+1; for I:= 1 to count do recordToRowGrid(ar[i], sg, i); end; Процедура сортировки массива записей по группе и фамилии Особенность сортировки массивов записей состоит в том, что может быть очень много вариантов сортировки. Возможны сортировки по значениям отдельных полей, а также по их комбинациям. Например, можно сортировать массив записей по количеству «хвостов», а при равенстве этого показателя по среднему баллу, кроме того, при равенстве среднего балла по фамилиям. Алгоритм сортировки для каждого из возможных вариантов остается одним и тем же, меняется только правило сравнения записей. В тех случаях, когда алгоритм сравнения записей сложный, его целесообразно представить в виде отдельной функции, которая будет возвращать результат логического типа. Например, при необходимости сортировать массив записей по группе и фамилии, можно предварительно написать соответствующую функцию сравнения. // Допоміжна функція для cортування за групою та прізвищем function compareGrFio(r1, r2:TAttRec): boolean; Begin if r1.Group <> r2.Group then result:=r1.Group <= r2.Group else result:= r1.fio <= r2.fio; end; После этого можно написать процедуру сортировки массива записей, например, методом пузырька, которая будет отличаться от рассматриваемой ранее процедуры только тем, что для сравнения двух элементов массива вызывается написанная выше функция. // Процедура сортування масиву записiв
// методом бульбашки за групою та прізвищем procedure sortAttArrayGrFio (var ar:TAttArray;count: integer); var i, j: integer; r: TAttRec; ok: boolean; Begin i:= count; Repeat i:=i-1; ok:= true; for j:=1 to i do // Сравниваем записи с помощью функции if not compareGrFio(ar[j], ar[j+1]) then Begin r:=ar[j]; ar[j]:=ar[j+1]; ar[j+1]:=r; ok:= false; end;
until ok; end;
Наличие этой процедуры позволяет нам написать процедуру, которая будет вызываться при нажатии на кнопку «Упорядочить по группе и фамилии». Код процедуры приведен ниже. // Сортування за групою та прізвищем procedure TfrmRecord.btnSortGrFioClick(Sender: TObject); var ar: TAttArray; count: integer; Begin //Беремо масив із StringGrid1 getArrayFromGrid(ar, count, StringGrid1); // Сортуємо масив за правилом, що задає функція compareGrFio sortAttArrayGrFio (ar, count); //Передаємо впорядкований масив у StringGrid2 showArrayInGrid(StringGrid2, ar, count); end; Сортировка записей по количеству неудовлетворительных оценок и среднему баллу Для этой сортировки можно также предварительно написать соответствующую функцию сравнения. Ниже приведена такая функция. // Допоміжна функція для cортування за результатами атестації function compareResult(const r1, r2:TAttRec): boolean; Begin if r1.neud <> r2.neud then result:= r1.neud < r2.neud else result:= r1.srBall > r2.srBall; end; Наличие этой функции позволяет нам написать процедуру сортировки, которая будет отличаться от рассмотренной выше только именем функции, вызываемой для сравнения. Вместо вызова compareGrFio(ar[j], ar[j+1]), в процедуре сортировки нужно будет написать compareResult(ar[j], ar[j+1]). Кроме того, у процедуры должно быть другое имя, например, sortAttArrayResult. 10.2.10 Выборка студентов какой-нибудь группы, имеющих средний балл выше 4 Для решения этой задачи вначале напишем процедуру формирования соответствующего массива записей путем выборки нужных записей из исходного массива. Ниже приведена эта процедура. // Допоміжна процедура відбору студентів заданої групи, // що мають середній бал більше ніж 4 procedure createRecordArrayMoreThen4(const ar: TAttArray; count: integer; gr:TGroup; var ar4: TAttArray; var count4:integer); var i: integer; Begin count4:= 0; for i:=1 to count do if (ar[i].group = gr) and (ar[i].srBall >=4) and (ar[i].neud = 0) Then begin count4:= count4 + 1; ar4[count4]:= ar[i]; end; end; Наличие этой процедуры позволяет нам написать процедуру обработки события нажатия на кнопку «Выбрать ударников какой-то группы». Код процедуры приведен ниже.
// Процедура вибору хорошистів групи procedure TfrmRecord.btn4Click(Sender: TObject); var ar, ar4: TAttArray; count, count4: integer; gr: TGroup; Begin //Беремо масив із StringGrid1 getArrayFromGrid(ar, count, StringGrid1); // Запит на введення назви групи gr:= inputBox('Поиск "хорошистов"', 'Введите группу', 'КС051'); // Створюємо масив хорошистів групи createRecordArrayMoreThen4(ar, count, gr, ar4, count4); // Сортуємо масив за правилом, що задає функція compareResult sortAttArrayResult (ar4, count4); //Передаємо впорядкований масив у StringGrid2 showArrayInGrid(StringGrid2,ar4, count4); end; 10.2.11 Подсчет числа студентов, имеющих более 2-х неудовлетворительных оценок и вывод упорядоченного списка этих студентов Для решения этой задачи вначале напишем процедуру формирования соответствующего массива записей путем выборки нужных записей из исходного массива. Ниже приведена эта процедура. // Допоміжна процедура відбору студентів, // що мають кількість заборгованностей більше ніж 2 procedure createRecordArrayMoreThen2(const ar: TAttArray; c ount: integer; gr:TGroup; var ar2: TAttArray; var count2:integer); var i: integer; Begin count3:= 0;; for i:=1 to count do if ar[i].neud > 2 Then begin count2:= count2 + 1; ar2[count2]:= ar[i]; end; end; Наличие этой процедуры позволяет нам написать процедуру обработки события нажатия на кнопку «Подсчитать количество имеющих более 3-х хвостов». Код процедуры приведен ниже. // Процедура вибору хвостистів procedure TfrmRecord.btn2Click(Sender: TObject); var ar, ar2: TAttArray; count, count2: integer; gr: TGroup; Begin //Беремо масив із StringGrid1 getArrayFromGrid(ar, count, StringGrid1); // Створюємо масив хвостистів групи createRecordArrayMoreThen2(ar, count, gr, ar2, count2); // Сортуємо масив за правилом, що задає функція compareResult sortAttArrayResult (ar2, count2); //Передаємо впорядкований масив у StringGrid2 showArrayInGrid(StringGrid2, ar2, count2); //Виводимо кількість хвостистів у ShowMessage ShowMessage(intToStr(count2)+' cтудентов имеют более 2-х неуд.') end; 10.3 Задание для самостоятельной работы В лабораторной работе следует создать проект, в соответствии с требованиями варианта из таблицы 10.1. Номер варианта выбирается по последней цифре номера зачетной книжки. Обработку записей следует проводить в массиве. Компоненты TStringGrid использовать только для считывания записей и вывода результатов.
10.4 Содержание отчета
– Наименование работы. – Цель работы. – Краткая характеристика типа «Запись». – Интерфейс созданного проекта. – Текст модуля проекта с пояснениями в виде комментариев. – Результаты тестирования проекта в виде копий окон.
– Выводы. Контрольные вопросы – Характеристика типа «Запись». Описание типа, доступ к полям. Операции над записями. – Работа с массивами записей. – Объяснение текстов подпрограмм модуля и связей их с событиями и другими подпрограммами. – Написать процедуру для реализации запроса к массиву записей по указанию преподавателя. – Написать процедуру для реализации сортировки массива записей по правилу, заданному преподавателем. 11 ЛАБОРАТОРНАЯ РАБОТА № 11. Цели работы: – Ознакомиться с принципами организации записей и хранением информации в типизированных файлах. – Познакомиться со способами описания типизированных файлов в Object Pascal. – Познакомиться со стандартными процедурами и функциями, которые обеспечивают работу с типизированными файлами. – Освоить алгоритмы обработки типизированных файлов. 11.1 Краткие теоретические сведения Под файлом понимается именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, диска CD), представляющая собой последовательность байтов. Любой файл имеет такие характерные особенности: – у него есть имя, что дает возможность программе работать одновременно с несколькими файлами; – файл не знает, то есть не содержит информацию о том, какого типа данные в нем находятся. Интерпретация последовательности байтов в файле зависит от программы, которая обрабатывает файл.; – длина файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. – Файл содержит специальный признак конца файла. Файл, не содержащий ни одного байта кроме признака конца файла, называется пустым. Типизированный файл - это последовательность данных одного типа. Каждую единицу данных файла в типизированном файле называют записью, даже если в файле хранятся данные типа Char. В этом случае, записью будет один символ. Особенность типизированных файлов в том, что все его записи имеют одинаковую длину и пронумерованы, начиная с нуля. Благодаря этому расположение записи на диске или в памяти может быть легко вычислено по ее номеру. Поэтому типизированные файлы называют еще файлами с прямым доступом к записям.
|
||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 265; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.48.62 (0.058 с.) |