- •Введение
- •Состав курсовой работы
- •Задание на курсовую работу
- •Объем курсовой работы
- •Разработка алгоритмов
- •Разработка расчетного модуля
- •Разработка приложения
- •Составление описания приложения
- •Порядок выполнения курсовой работы.
- •Разработка расчетного модуля.
- •Создание описания данных.
- •Создание функций сохранения и чтения матрицы.
- •Разработка расчетных процедур и функций.
- •Отсортировать по возрастанию все строки матрицы.
- •Отладка процедур и функций расчетного модуля.
- •Разработка модуля главного окна приложения.
- •Разработка модуля окна редактирования матрицы.
- •Разработка окна информации о разработчике.
- •Разработка описания и инструкции пользователя.
- •Оформление пояснительной записки
- •Титульный лист, содержание
- •Описание приложения
- •Алгоритмы, исходные данные и результаты расчета
- •Текст модулей проекта
- •Список использованной литературы
- •Приложение. Таблица вариантов
- •Литература.
6
жения должен быть пункт «О программе», вызывающий окно с информацией о разработчике.
Ввод и редактирование значений исходных данных нужно производить в отдельном окне. Окно должно быть модальным.
Составление описания приложения
В описание приложение необходимо включить информацию о всех командах реализованных в приложении. При описании команд обработки матрицы необходимо упомянуть о возможных сбойных ситуациях при расчете и способах информирования пользователя о них. Также необходимо включить информацию о форме предоставляемых результатов.
Пример выполнения курсовой работы находится на дискете или на компьютерах в классе кафедры в папке «KPDemo OPr». Расположение папки с примером необходимо уточнить у преподавателя или системного администратора класса. При работе с примером его необходимо скопировать в рабочую папку студента и открывать из нее, это позволит предупредить случайную порчу примера.
2 Порядок выполнения курсовой работы.
2.1 Разработка расчетного модуля.
Создание описания данных.
Для хранения информации необходимо описать пользовательские типы данных. Описание этих типов можно производить в отдельном модуле или как это сделано в прилагаемом примере в интерфейсной части расчетного модуля.
type
TVect = record N : Integer;
Data : array of Double; end;
TMatr = record NI,NJ : Integer;
Data : array of array of Double; end;
Как видно в приведенном описании для хранения данных матрицы использована запись, содержащая как значения элементов, так и ее размеры. Это облегчает последующую обработку.
Создание функций сохранения и чтения матрицы.
Данные функции должны отвечать следующим требованиям:
использовать общий формат хранения информации;
по возможности контролировать целостность информации.
7
Формат записи данных в файл принят следующий:
Тип файла – текстовый, это позволит контролировать содержание файла из других программ, например «Блокнота»;
В первых двух строках файла хранится количество строк и столбцов матрицы, это позволит проконтролировать целостность данных по количеству элементов.
Приведем пример реализации этих процедур:
procedure SaveMatrToFile(M: TMatr; Fn: string); var
SL: TStringList; I, J: Integer;
begin
SL := TStringList.Create; try
SL.Add(IntToStr(M.NI));
SL.Add(IntToStr(M.NJ)); for I := 0 to M.NI-1 do
for J := 0 to M.NJ-1 do SL.Add(FloatToStr(M.Data[I,J]));
SL.SaveToFile(Fn); finally
SL.Free; end;
end;//SaveMatrToFile
procedure LoadMatrFromFile(var M: TMatr; Fn: string); var
SL: TStringList;
I, J, K: Integer; begin
SL := TStringList.Create; try
SL.LoadFromFile(Fn); if SL.Count < 2 then
raise ELoadFile.Create('Файл поврежден'); try
M.NI := StrToInt(SL.Strings[0]);
M.NJ := StrToInt(SL.Strings[1]); if SL.Count <> M.NI*M.NJ+2 then
raise ELoadFile.Create('Файл поврежден'); SetLength(M.Data,M.NI,M.NJ);
K := 2;
for I := 0 to M.NI-1 do
for J := 0 to M.NJ-1 do begin
M.Data[I,J] := StrToFloat(SL.Strings[K]); inc(K);
end; except
on E:EConvertError do begin
raise ELoadFile.Create('Файл поврежден');
8
end; end;
finally
SL.Free; end;
end;//LoadMatrFromFile
В качестве параметров в обе функции передаются запись с матрицей и имя файла, с которым проводится операция чтения/записи матрицу.
Как видно в приведенном примере для сохранения и чтения матрицы используется класс TStringList, в котором инкапсулированы методы работы с текстовыми файлами.
Следует обратить внимание на способ обработки ошибок ввода вывода. Для передачи информации об ошибке использована технология генерирования ситуаций исключения. Для этого в разделе описания типов интерфейсной части модуля приведено описание нового исключения:
ELoadFile = class(Exception);
Такой способ позволит пользователю функций принимать самостоятельное решение о способе информирования пользователя о произошедшей ошибке.
Для удобства последующего вывода исходных данных, имеет смысл добавить в модуль функцию, записывающую матрицу в список строк в табличном виде. Текст этой процедуры приведен в следующем листинге:
procedure AddMatrToList(SL : TStrings; M: TMatr; Sp:Char; StEn: Boolean);
var
I,J : Integer; St : string;
begin
for I := 0 to M.NI-1 do begin
St := '';
if StEn then St := Sp + ' ';
St := St + FloatToStrF(M.Data[I,0],ffFixed,8,3); for J := 1 to M.NJ-1 do
St := St + ' ' + Sp+ ' ' +FloatToStrF(M.Data[I,J],ffFixed,8,3);
if StEn then St := St + Sp; Sl.Add(St);
end;
end;//AddMatrToList |
|||
SL |
В качестве параметров функция принимает: |
||
: TStrings – список строк, в который будет помещена матрица; |
|||
M |
: Tmatr |
- |
запись с матрицей; |
Sp |
: Char |
- |
символ разделитель между столбцами; |
9
StEn: Boolean - признак надо ли ставить разделители снаружи таблицы.
Разработка расчетных процедур и функций.
Данный этап разработки является наиболее сложным, так как требует творческого подхода к оформлению заголовков процедур и функций. Для успешного выполнения студенту требуется разработать алгоритм обработки массива до кодирования и представить его преподавателю вместе с заголовками функций и процедур.
Одновременно важно продумать все возможные сбойные ситуации в алгоритмах и привести описания соответствующих классов исключения. Классы исключения рекомендовано наследовать от класса EMathError, для возможности перехватывать их в одном блоке (без подробного разбора).
В примере разбираются следующие задачи:
Нахождение среднего арифметического положительных элементов матрицы.
Данная задача имеет одну сбойную ситуацию – отсутствие положительных элементов матрицы. Добавляем описание класса исключения следующего вида:
ENoPol = class(EMathError);
Результатом решения задачи является одно число, поэтому задачу оформляем как функцию.
Формат заголовка функции и ее реализация приведены в следующем листинге:
function GetSrArPol(M: TMatr):Double; var
I, J, K : Integer; S : Double;
Begin
Result := 0; S := 0;
K := 0;
for I := 0 to M.NI-1 do for J := 0 to M.NJ-1 do
if M.Data[I,J]>0 then begin S := S + M.Data[I,J]; Inc(K);
end;
if K = 0 then
raise ENoPol.Create(’В матрице отсутствуют положительные’+ ’ элементы. ’);
Result := S/K; end;