- •Программирование
- •«Программирование»
- •Чернигов чгту 2011
- •Ответственный за выпуск: Бивойно п.Г., доцент кафедры информационных и компьютерных систем, кандидат технических наук,
- •Введение
- •1Расчетно-графическая работа № 1. Функции и процедуры для расчетов по формулам
- •1.1 Задания к расчетно-графической работе
- •1.2 Пример создания проекта
- •1.2.1Создание интерфейса
- •1.2.1.1 Компонент ole-контейнер
- •1.2.1.2Компонент Group Box
- •1.2.1.3 Компонент Memo
- •1.2.1.4 Завершение работы над интерфейсом
- •1.2.2Создание процедур и функций
- •1.2.2.1Процедура очистки протокола
- •1.2.2.2Процедура инициализации формы
- •1.2.2.3Процедура считывания коэффициентов уравнения
- •1.2.2.4Функция для расчета по формуле
- •1.2.2.5Процедура вызова выполнения расчета по формуле
- •1.2.3Использование дополнительного модуля
- •1.2.4Форматирование результатов расчетов
- •1.2.5Контольный пример
- •1.3 Содержание отчета
- •Рекомендованая литература
- •2Расчетно-графическая работа № 2. Программирование циклов
- •2.1 Задания к расчетно-графической работе
- •2.2 Рекомендации по составлению алгоритмов решаемых задач
- •2.2.1Итерационные алгоритмы
- •2.2.2Алгоритмы вычисления сумм бесконечных рядов
- •2.2.3Алгоритмы обработки последовательностей целых чисел
- •2.2.4Алгоритмы табулирования значений функций
- •2.3 Пример создания проекта
- •2.3.1Компоненты для создания интерфейса проекта
- •2.3.1.1Компоненты PageControl и TabSheet
- •2.3.1.2Компонент CheckBox
- •2.3.1.3Дополнительные требования к интерфейсу
- •2.3.2Создание закладки для вычисления корня
- •2.3.2.1Интерфейс страницы вычисления корня
- •2.3.2.2Процедура вычисления корня
- •2.3.3Создание закладки для вычисления синуса
- •2.3.3.1Интерфейс страницы вычисления синуса
- •2.3.3.2Процедура вычисления синуса
- •2.3.4Создание закладки «Табулирование функции»
- •2.3.4.1 Интерфейс странички «Табулирование функции»
- •2.3.4.2Создание процедуры табулирования функции
- •2.3.5Создание закладки «Обработка последовательности целых чисел»
- •2.3.5.1Интерфейс странички «Обработка последовательности целых чисел»
- •2.3.5.2Создание процедуры обработки последовательности целых чисел
- •Рекомендованая литература
- •3Расчетно-графическая работа № 3. Обработка массивов
- •3.1 Задания для работы с одномерным массивом
- •3.2 Задания на сортировку одномерных массивов
- •3.3 Задания на обработку двумерных массивов
- •3.4 Краткая характеристика вспомогательных модулей
- •3.4.1Интерфейс модуля для работы с одномерными массивами
- •3.4.2Интерфейс модуля для работы с двумерными массивами
- •3.4.3Рекомендации по перестановкам элементов матрицы
- •Перечень основных процедур и функций для работы с типизированными файлами
- •Пример Создание проекта «Результаты аттестации»
- •4.1.1Требования к проекту
- •4.1.2Интерфейс пользователя для проекта
- •4.1.3Определение типов данных
- •4.1.4Настройка интерфейса пользователя
- •4.1.5Вспомогательные процедуры для работы с файлом Процедура выбора имени файла
- •4.1.5.1Процедура открытия файла
- •4.1.5.2Процедура вывода файла в StringGrid
- •4.1.6Процедуры работы со StringGrid1
- •4.1.7Процедуры реализации пунктов меню fileMenu
- •4.1.7.1Добавление данных из StringGrid1 в файл
- •4.1.7.2Поиск записи по фамилии
- •4.1.7.3Удаление записи по фамилии
- •4.1.7.4Сохранение файла под другим именем
- •Содержание отчета
- •Рекомендованая литература
4.1.5.2Процедура вывода файла в StringGrid
Необходимость вывода файла в компонент TStringGrid в нашем проекте будет возникать неоднократно. Поэтому эту операцию целесообразно оформить как процедуру, которой в качестве параметра передается файловая переменная и ссылка на компонент TStringGrid.
//Процедура вывода файла в StringGrid
procedure showFileInGrid(var f: TAttFile; g: TStringGrid);
var i:integer; r: TAttRec;
begin
//Настраиваем StringGrid
g.RowCount:=fileSize(f)+1;
i:=1; // счетчик строк StringGrid
//Файл в начало
Reset(f);
//Организуем цикл по записям файла
while not eof(f) do
begin
// читаем запись
read(f,r);
// Переносим запись в StringGrid
g.Cells[0, i]:=r.Name;
g.Cells[1, i]:= FloatToStr(r.ball);
g.Cells[2, i]:= IntToStr(r.neud);
i:=i+1;
end;
end;
4.1.6Процедуры работы со StringGrid1
Эти процедуры используются для управления компонентом StringGrid1, который служит для подготовки записей перед занесением их в файл.
Первая из процедур связана с пунктом меню «Добавить строку».
// Добавление строки в StringGrid1
procedure TfrmAtt.mnuAddRowClick(Sender: TObject);
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
end;
Вторая процедура связана с пунктом меню «Удалить строку». Удаление строки производится циклическим сдвигом записей на место удаляемой.
//Удаление строки из StringGrid1
procedure TfrmAtt.mnuDelRowClick(Sender: TObject);
var i, j:integer;
begin
with StringGrid1 do
begin
for i:=Row to RowCount - 2 do
for j:=0 to ColCount-1 do Cells[j,i]:= Cells[j, i+1];
RowCount := RowCount -1;
end;
end;
4.1.7Процедуры реализации пунктов меню fileMenu
4.1.7.1Добавление данных из StringGrid1 в файл
Эта процедура должна быть связана с пунктом меню «Добавить в файл из StringGrid1».
// Добавление данных из StringGrid1 в файл
procedure TfrmAtt.mnuAddToFileClick(Sender: TObject);
var f: TAttFile; i: integer; r: TAttRec;
begin
//Открываем файл
openAttFile(f);
//Переходим в конец файла
seek(f, FileSize(f));
// Дописываем записи из StringGrid1
for i := 1 to StringGrid1.RowCount - 1 do
begin
r.Name := StringGrid1.Cells[0,i];
r.ball := strToFloat(StringGrid1.Cells[1,i]);
r.neud := strToInt(StringGrid1.Cells[2,i]);
write(f, r);
end;
showMessage('Данные записаны');
showFileInGrid(f, StringGrid2);
//закрываем файл
closeFile(f);
end;
4.1.7.2Поиск записи по фамилии
Эта процедура должна быть связана с пунктом меню «Поиск записи по фамилии».
// Поиск записи по фамилии
procedure TfrmAtt.mnuFindFamClick(Sender: TObject);
var fam:TName; r:TAttRec; ok:boolean; f:TAttFile;
begin
fam := inputBox('Поиск записи по фамилии', 'Введите фамилию', '');
//Открываем файл
openAttFile(f);
//Организуем цикл по записям файла
ok:=false; // Признак того, что запись найдена
while not eof(f) do
begin
// Читаем запись
read(f,r);
if r.Name = fam then begin
showMessage( 'Результаты аттестации ' + fam + #13 +
'Ср.балл = ' + floatToStr(r.ball) + #13 +
'Количество неуд = ' + intToStr(r.neud));
ok := true;
break; // Прерываем цикл когда нашли
end;
end;
if not ok then showMessage(fam + ' не найдено');
end;