|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Разработка программы для сдвига элементов матрицы по слоямРазработка программы для сдвига элементов матрицы по слоям4 Содержание Введение 1. Теоретическая часть. Управляющие структуры языка Delphi 2. Анализ задачи 3. Блок - схема алгоритма 4. Руководство пользователя 4.1 Системные требования 4.2 Структура программы 4.3 Инструкция пользователя 5. Тестовый пример Заключение Список использованной литературы Приложение ВведениеDelphi - среда визуального программирования. Визуальное программирование базируется на объектно-ориентированной технологии. Структурной единицей визуального программирования, основным «строительным элементом» для программы является компонент.Компонент - это разновидность класса, который представлен пиктограммой на палитре компонентов Delphi, может быть визуально перенесен в программу и имеет набор свойств, которые можно определять, не изменяя текста программ. В этом суть визуального программирования.Как и любой класс, компонент характеризуется полями, свойствами и методами. В Delphi вместо полей обычно используются свойства. Свойство можно рассматривать как разновидность поля класса, обращение к которому автоматически приводит к вызову метода чтения / записи поля. (Напомним, что хорошим стилем в объектно-ориентированном программировании считается обращение к полям только через методы).Кроме того, компонент имеет перечень событий, на которые он способен реагировать (например, нажатие клавиши, щелчок кнопкой мыши и др.). Задача программиста - написать обработчики событий, отвечающие за реакцию компонента на определенное событие.Компоненты бывают визуальными и невизуальными. Первые предназначены для организации интерфейса с пользователем (кнопки, строки редактирования, переключатели, списки и т.д.). Они видны на экране во время выполнения программы. Невизуальные компоненты служат для доступа к системным ресурсам, например, драйверам баз данных. Во время работы приложения они, как правило, не видны.1. Теоретическая часть. Управляющие структуры языка DelphiНа практике редко встречаются задачи, алгоритм решения которых является линейным. Часто оказывается, что алгоритм решения даже элементарной задачи не является линейным. Например, пусть надо вычислить по формуле ток в электрической цепи. Если предположить, что пользователь всегда будет вводить верные данные, то алгоритм решения этой задачи действительно является линейным. Однако полагаться на то, что пользователь будет вести себя так, как надо программе, не следует. Формула расчета предполагает, что величина сопротивления не равна нулю. А что будет, если пользователь введет 0? Ответ простой: возникнет ошибка «Деление на ноль», и программа аварийно завершит работу. Можно, конечно, возложить ответственность за это на пользователя, но лучше внести изменения в алгоритм решения (рис. 1), чтобы расчет выполнялся только в том случае, если введены верные данные.Рис. 1. Два варианта алгоритма решения одной задачиТочки алгоритма, в которых выполняется выбор дальнейшего хода программы, называются точками выбора. Выбор очередного шага решения задачи осуществляется в зависимости от выполнения некоторого условия.УсловиеВ повседневной жизни условие обычно формулируется в виде вопроса, на который можно ответить Да или Нет. Например:Величина сопротивления равна нулю?Ответ правильный?Сумма покупки больше 300 рублей?В программе условие - это выражение логического типа (Boolean), которое может принимать одно из двух значений: True (истина) или False (ложь).Простое условие состоит из двух операндов и оператора сравнения. В общем виде условие записывается следующим образом: Оn1 Оператор On2где:On1 и Оп2 - операнды условия, в качестве которых может выступать переменная, константа, функция или выражение;Оператор - оператор сравнения.В языке Delphi есть шесть операторов сравнения, которые приведены в табл. 1.Таблица 2.1. Операторы сравнения
равно False).Алгоритм, соответствующий инструкции repeat, представлен на рис. 7.Рис. 7. Алгоритм, соответствующий инструкции repeatВнимание!Инструкции цикла, находящиеся между repeat и until, выполняются как минимум один раз. Для того чтобы цикл завершился, необходимо, чтобы инструкции цикла, располагающиеся между repeat и until, изменяли значения переменных, входящих в выражение условие.Инструкция gotoИнструкции if и case используются для перехода к последовательности инструкций программы в зависимости от некоторого условия. Поэтому их иногда называют инструкциями условного перехода. Помимо этих инструкций управления ходом выполнения программы существует еще одна - инструкция безусловного перехода goto.В общем виде инструкция goto записывается следующим образом:goto Меткагде метка - это идентификатор, находящийся перед инструкцией, которая должна быть выполнена после инструкции goto.Метка, используемая в инструкции goto, должна быть объявлена в разделе меток, который начинается словом label и располагается перед разделом объявления переменных.В программе метка ставится перед инструкцией, к которой должен быть выполнен переход в результате выполнения инструкции goto. Сразу после метки ставится двоеточие.В литературе по программированию можно встретить суждения о недопустимости применения инструкции goto, поскольку она приводит к запутанности программ. Однако с категоричностью таких утверждений согласиться нельзя. В некоторых случаях применение инструкции goto вполне оправдано.2. Анализ задачиДля решения задачи необходимы следующие исходные данные:§ число строк матрицы - целочисленное значение;§ число столбцов матрицы - целочисленное значение;§ значения элементов матрицы - целочисленные значения.Примем ограничение на размерность матрицы - число строк и столбцов не должно превышать 10.Пошаговый алгоритм решения задачи.Исходные данные:n, m - число строк и столбцов соответственно;aij - элементы матрицы;Сij - матрица цветов каждого элемента;с - начальный цвет слоя;di - массив, составленный из элементов слоев;k - число элементов в слое;fn - индекс слоя (номер строки и столбца с которого он начинается), начальное значение 1.1) Формирование слоев.а. Помещаем в d элементы fn - й строки;б. Помещаем в d элементы m - го столбца начиная с (fn + 1) - й строки по n - ю строку;в. Помещаем в d элементы n - й строки, начиная с m - 1 столбца по fn столбец;г. Помещаем в d элементы fn - го столбца начиная с n - 1_й строки по fn + 1 строку;В соответствующие элементы матрицы цветов С помещаем значение с.2) Сдвигаем элементы массива d на 1 позицию вправо.а. запоминаем значение последнего элемента t = dk;б. выполняем присвоение di = di-1 для i = k, 2;в. помещаем последний элемент на место первого d1 = t.3) Изменяем значения:fn = fn + 1,n = n - 1,m = m - 1и повторяем шаги алгоритма с 1 по 3, пока n > 2 и m > 2.3. Блок - схема алгоритма 4 4. Руководство пользователя4.1 Системные требованияДля функционирования приложения необходим персональный компьютер со следующими характеристиками:§ процессор CPU - не хуже Pentium;§ оперативная память RAM - не менее 16 Мб;§ свободное пространство на жестком диске - не менее 500 Кбайт;§ стандартная мышь для COM порта;§ стандартная IBM PC/АT клавиатура;Приложение работает под управлением операционной системы Windows 95/98/2000/ХР. Наличие среды визуального программирования для работы программы не является обязательным.4.2 Структура программыПрограмма состоит из следующих программных модулей:unit1 - главный интерфейсный модуль;ms - проект.Рассмотрим состав главного модуля.В нем определены два пользовательских типа данных:mas - одномерный массив целых чисел из 100 элементов;mat - двумерный массив целых чисел размерности 1010 элементов.Цвета слоев определяет константа - массив элементов TColor - cc.Наиболее значимые переменные программы.mf, тип string - имя файла с матрицей;c - двумерный массив цветов слоев с элементами типа TColor;a, тип mat - заданная матрица;k, тип integer - счетчик слоев;d, тип mas - одномерный массив с элементами слоя;n, m, тип integer - число строк и столбцов матрицы;f, тип textfile - текстовый файл из которого считывается матрица.Процедуры пользователя.Sdvig (d, n)Назначение: сдвиг массива по часовой стрелке.Параметры:d, тип mas - одномерный массив с элементами слоя;n, тип integer - число элементов массива;SloiColor (fn, n, m, sd)Назначение: определение цветов слоев и их сдвиг.Параметры:fn, тип integer - номер определяемого слоя;n, m, тип integer - число строк и столбцов матрицы;sd, тип boolean - логическая переменная, имеющая значение True, если производится определение цветов и сдвиг элементов слоя и False - если только определяется цвет.MQuitClickНазначение: выход из программы.MOpenFileClickНазначение: открыть файл данных.FillGrid (a, n, m)Назначение: вывод матрицы с заданными цветами элементов.Параметры:a, тип mat - заданная матрица;n, m, тип integer - число строк и столбцов матрицы;MRunClickНазначение: управляющая процедура сдвига слоев матрицы.Рис. 8. Окно программы4.3 Инструкция пользователяРассмотрим последовательность действий пользователя при использовании программы для сдвига элементов матрицы. Ему необходимо запустить на выполнение программу, которая называется «ms.exe».Для удобства запуска программы под управлением Microsoft Windows, можно сделать следующее: щелкните правой кнопкой мыши по Рабочему Столу Windows в появившемся меню выберите Создать Ярлык в появившемся окне в Командной строке набираем путь доступа к программе и нажимаем кнопку Далее в следующем окне назовем наш ярлык Сдвиг и нажимаем кнопку Далее выберите иконку и нажмите кнопку Готово. Теперь у Вас на рабочем столе находится иконка программы.После запуска пользователь увидит на экране окно, изображенное на рисунке 8.В верхней строке окна находится главное меню с двумя пунктами:Файл. Содержит подпункты:§ Открыть - загрузка матрицы из текстового файла;§ Выход - закончить работу с программой.Обработка, содержит один подпункт Начать - запуск алгоритма сдвига элементов матрицы.Остальную часть окна занимает область вывода матрицы.Порядок работы:§ выбрать файл с исходными данными Файл Открыть;§ выполнить команду Обработка Начать для сдвига элементов слоев.Для хранения матриц используется текстовый файл со следующей структурой:1 строка - два целочисленных значения n, m из диапазона 1…10 разделенные пробелом - число строк и столбцов матрицы соответственно;В последующих n строка расположена сама матрица, m целочисленных значений в строке, разделитель - пробел.Необходимо помнить, что обработке подлежат матрицы максимальной размерности 1010 элементов.5. Тестовый примерЗаключениеРезультатом курсового проектирования по дисциплине «Программирование на языках высокого уровня» на тему «Разработка программы для сдвига элементов матрицы по слоям» является разработанная программа для IBM PC совместимых компьютеров, предназначенная для обработки произвольных целочисленных матриц, а также подробное руководство пользователя программой.В ходе курсового проектирования были выявлены особенности написания программы, разработан алгоритм программы и описан принцип ее работы.Недостатком программы является ограниченная размерность обрабатываемых матриц.В теоретической части работы мной были приведены материалы о программирование в среде Delphi.Список использованной литературы1. Бобровский С.И. Delphi 7. Начальный курс: Учебное пособие - М.: Диалог - МИФИ, 2002. -416 с.2. Гофман В.Э. Delphi 7. - Спб.: BHV_Петербург, 2003. -488 с.3. Лишнер Рэй. Delphi. Справочник. - М.: БЕК, 2003. -715 с.4. Поган А.М., Царенко Ю.А. Программирование в Delphi. Просто как дважды два. - М.: Нолидж, 2004. -557 с.Приложение. Листинг программыunit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Menus, Grids, StdCtrls;typemas = array [1..100] of integer;mat = array [1..10, 1..10] of integer;TForm1 = class(TForm)MainMenu1: TMainMenu;N1: TMenuItem;MOpenFile: TMenuItem;N4: TMenuItem;MQuit: TMenuItem;N6: TMenuItem;MRun: TMenuItem;OpenDialog1: TOpenDialog;StringGrid1: TStringGrid;procedure MQuitClick (Sender: TObject);procedure MOpenFileClick (Sender: TObject);procedure MRunClick (Sender: TObject);procedure FillGrid (a: mat; n, m: integer);private{Private declarations}public{Public declarations}end;varForm1: TForm1;implementation{$R *.dfm}constcc: array [1..10] of TColor = (clBlue, clFuchsia, clGreen,clLime, clMaroon, clNavy, clOlive,clRed, clTeal, clYellow);varmf: string; // имя файла с матрицейc: array [1..10, 1..10] of TColor; // массив цветов слоевa: mat; // заданая матрицаk: integer; // счетчик слоевprocedure Sdvig (var d: mas; n: integer); // сдвиг массива по часовой стрелкеvari, l: integer;beginif n = 0 then Exit;l:= d[n];for i:= n downto 2 dod[i]:= d [i - 1];d[1]:= l;end;procedure SloiColor (fn, n, m: integer; sd: boolean); // определение цветов слоев и их сдвигvari, j: integer;d: mas;beginif ((n >= 2) or (m >= 2)) and ((fn < n) and (fn < m)) thenbeginj:= 0;for i:= fn to m dobeginc [fn, i]:= cc[k];j:= j + 1;d[j]:= a [fn, i];end;for i:= fn + 1 to n dobeginc [i, m]:= cc[k];j:= j + 1;d[j]:= a [i, m];end;for i:= m - 1 downto fn dobeginc [n, i]:= cc[k];j:= j + 1;d[j]:= a [n, i];end;for i:= n - 1 downto fn + 1 dobeginc [i, fn]:= cc[k];j:= j + 1;d[j]:= a [i, fn];end;if sd thenbeginSdvig (d, j);j:= 0;for i:= fn to m dobeginj:= j + 1;a [fn, i]:= d[j];end;for i:= fn + 1 to n dobeginj:= j + 1;a [i, m]:= d[j];end;for i:= m - 1 downto fn dobeginj:= j + 1;a [n, i]:= d[j];end;for i:= n - 1 downto fn + 1 dobeginj:= j + 1;a [i, fn]:= d[j];end;end;Inc(k);SloiColor (fn + 1, n - 1, m - 1, sd);end;end;procedure TForm1.MQuitClick (Sender: TObject); // выход из программыvarfi: integer;beginfi:= Application. MessageBox ('Вы действительно хотите завершить программу?','Информация', mb_YesNo); // вывод окнаif fi = IDYes thenApplication. Terminate; // выходend;procedure TForm1.MOpenFileClick (Sender: TObject); // открыть файл данныхvarn, m, i, j: integer;f: textfile;beginif OpenDialog1. Execute thenbeginmf:= OpenDialog1. FileName;MRun. Enabled:= True;AssignFile (f, mf); Reset(f);ReadLn (f, n, m);for i:= 1 to n dobeginfor j:= 1 to m doRead (f, a [i, j]);ReadLn(f);end;CloseFile(f);for i:= 1 to n dofor j:= 1 to m doc [i, j]:= clBlack;k:= 1;SloiColor (1, n, m, false);FillGrid (a, n, m);end;end;procedure TForm1. FillGrid (a: mat; n, m: integer); // вывод матрицы с заданными цветами элементовvari, j: integer;r: trect;beginStringGrid1. Refresh;for i:= 1 to 10 doStringGrid1. Cells [i, 0]:= «;for i:= 1 to 10 dobeginStringGrid1. Cells [0, i]:= «;for j:= 1 to 10 dobeginr:= StringGrid1. CellRect (j, i);StringGrid1. Canvas. TextOut (r.topleft.x + 1, r. Top + 2, ' ');end;end;for i:= 1 to m doStringGrid1. Cells [i, 0]:= IntToStr(i);for i:= 1 to n dobeginStringGrid1. Cells [0, i]:= IntToStr(i);for j:= 1 to m dobeginStringGrid1. Canvas. Font. Color:= c [i, j];r:= StringGrid1. CellRect (j, i);StringGrid1. Canvas. TextOut (r.topleft.x + 1, r. Top + 2, IntToStr (a[i, j]));end;end;StringGrid1. Canvas. Refresh;end;procedure TForm1.MRunClick (Sender: TObject);vari, j, n, m: integer;f: textfile;beginAssignFile (f, mf); Reset(f);ReadLn (f, n, m);CloseFile(f);for i:= 1 to n dofor j:= 1 to m doc [i, j]:= clBlack;k:= 1;SloiColor (1, n, m, true);FillGrid (a, n, m);Append(f);WriteLn(f);for i:= 1 to n dobeginfor j:= 1 to m doWrite (f, a [i, j]:5);WriteLn(f);end;CloseFile(f);end;end. |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |