Курсовая работа (т): Алгоритмы и программы автоматизации инженерных расчетов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Локальные переменные:, j - параметры циклов, тип integer;- указатель на текстовый файл, тип text;- служебная строка, тип string.

Процедура MulCol(A, M, N, P)

Назначение: вычисление произведения всех элементов каждого столбца массива.

Входные параметры:- исходная матрица, тип Matrix;, N - число строк и столбцов матрицы соответственно, тип integer.

Выходные параметры:

Р - произведение положительных элементов матрицы, тип Vector.

Локальные переменные:, j - параметры циклов, тип integer.

Функция Invers(A, N)

Назначение: расчет количества инверсий (т.е. таких пар элементов, в которых большее число находится слева от меньшего).

Входные параметры:- обрабатываемый вектор, тип Vector;- число элементов вектора, тип integer.

Выходные параметры: количество инверсий.

Локальные переменные:- количество инверсий, тип integer;- параметр цикла, тип integer.

4.4    Используемые модули и операторы


В программе использованы только стандартные модули языка программирования.

Модуль Graph представляет собой библиотеку подпрограмм, обеспечивающую полное управление графическими режимами различных адаптеров дисплеев: CGA, EGA, VGA и т.д. Библиотека содержит более пятидесяти графических процедур и функций, как базовых (рисование точек, линий, окружностей и т.п.), так и расширяющих возможности базовых (многоугольники, заполнение фигур, вывод текста и др.).

Чтобы запустить программу, использующую процедуры модуля Graph , необходимо, чтобы в рабочем каталоге находились соответственно графические драйверы (файлы с расширением .BGI), а если программа использует еще и штриховые шрифты, то необходимо, чтобы там же находились файлы шрифтов (с расширением .CHR).

Кроме того, системе программирования (компилятору) должен быть доступен модуль GRAPH.TPU (он не входит в состав файла TURBO.TPL, а изначально находится в архиве BGI.ARC).

Модуль CRT служит для управления экраном в текстовом режиме, а также для управления клавиатурой и звуковыми сигналами. Модуль содержит библиотеку процедур (подпрограмм) и функций, которые выполняются при их вызове. Модуль подключается в начале раздела описания основной программы оператором Uses CRT.

При разработке программы мной были использованы следующие процедуры и функции:, write - вывод исходных данных и результатов расчета;- ввод данных;.. then .. else - условный оператор;

for .. to .. do - оператор цикла;

random - генератор случайных чисел;.. do - оператор цикла с предусловием;.. then .. else - условный оператор- Процедура связывает файловую переменную с именем файла.- Инициация файла для чтения.- Инициация файла для записи.- Закрывает файл.

Процедура инициализации InitGraph. Простейшая программа, использующая графику, обязательно должна содержать блок вызова процедур инициализации графического режима и обращение к процедуре его закрытия. Такой блок инициализирует режим, проверяет правильность переключения и, если все операции прошли успешно, допускает дальнейшую работу программы. Процедура инициализации объявлена следующим образом:

InitGraph (VAR GraphDriver; {тип адаптера}

VAR GraphMode Integer; {режим графики}: String); {путь к драйверу}

Процедура CloseGraph. Для окончательного завершения работы в графическом режиме необходимо всегда производить вызов процедуры CloseGraph. Эта процедура не имеет параметров. Она очищает экран, переводит адаптер в текстовый режим и, если возможно, выгружает из памяти все BGI-драйверы и штриховые шрифты. Последующий возврат в графические режимы возможен только через повторную инициализацию.

В модуле Graph предусмотрена возможность программного опроса максимальных адресуемых координат экрана. Она реализована парой функций

GetMaxX: Integer;

GetMaxY: Integer.

Процедура вывода линии (отрезка) на экран (в текущем цвете и стиле) определена в следующем виде:

Line (Х1, Y1, Х2, Y2: Integer)

Здесь задаются координаты начала (X1,Y1) и конца (X2,Y2) отрезка.

В модуле Graph предусмотрены процедуры, с помощью которых можно заполнить (залить) определенным «узором» любую замкнутую область изображения. Вид «узора» задается так называемым шаблоном заливки. В Турбо Паскале предопределен ряд стандартных шаблонов, но кроме того, имеется возможность конструировать собственные.

Назначение шаблона заполнения (заливки) производится процедурой

SetFillStyle (Pattern: Word; Color: Word)

где параметр Pattern определяет вид шаблона заливки, a Color - его цвет. Все разрешенные значения параметра Pattern предопределены в модуле Graph в виде констант.

Bar (X1, Y1, X2, Y2: Integer)

рисует прямоугольник, внутренняя область которого залита по текущему шаблону. Она обычно используется в деловой графике для строения столбчатых диаграмм. Параметры (X1,Y1) и (X2, Y2) - координаты верхнего левого и правого нижнего углов прямоугольника. Еще более наглядное представление информации при рисовании диаграмм позволяет получить процедура

Bar3D (X1, Y1, X2, Y2: Integer; D3: Word; Top: Boolean)

Она рисует параллелепипед, лицевая сторона которого заливается по текущему шаблону, а глубина задается в пикселах параметром D3. Параметр Тор задает режим отображения верхней плоскости: True - отображать, False - не отображать. Этот параметр необходим для того, чтобы можно было рисовать столбцы, стоящие друг на друге.

На экране всегда различаются цвет фона и цвет пера. Все процедуры изображения фигур, если не содержат в себе явной установки цвета, рисуют эти фигуры цветом пера (как символы в текстовом режиме). Этот цвет устанавливается процедурой

SetColor (Color: Word)

Цвет фона - всегда един в поле экрана. Он может быть изменен процедурой

SetBkColor (Color: Word)

После использования этой процедуры цвет экрана сразу же меняется на заданный. Параметр Color не должен превышать текущее значение GetMaxColor. Цветом фона может быть любой из разрешенных цветов, в том числе и яркий. По умолчанию и при реинициализации графики цвет фона равен 0 (Black), а цвет пера равен значению функции GetMaxColor.

Активизация любого из названных шрифтов осуществляется процедурой

SetTextStyle (Font, Direction: Word; CharSize: Word)

Здесь параметр Font - номер шрифта (например, одна из описанных выше констант), Direction - расположение текста (по умолчанию принимается горизонтальное).

Для вывода текста использована процедура OutTextXY (X, Y: Integer; TextString: String} выводит строку, ориентированную относительно координат (X,Y).

Функция ReadKey - возвращает символ нажатой клавиши (тип Char).

4.5    Входные и выходные данные


Входные данные:

§ число строк и столбцов матрицы;

§  вещественная прямоугольная матрица.

Выходные данные:

§ произведения элементов каждого столбца;

§  четыре массива, сформированных из строк матрицы;

§  количество инверсий каждого вектора.

Ограничения:

Размерность обрабатываемых матриц - не более 10´10.


4.6 Инструкция пользователя


Чтобы начать работать необходимо:

§ открыть окно Проводника;

§  выбрать диск на котором расположена программа;

§  найти папку с программой и открыть ее;

§  запустить файл MATMAS4.EXE.

В одном каталоге с программой должен находиться файл поддержки графики Egavga.bgi и файлы шрифтов Trip.chr, Litt.chr.

После запуска программы на экране появляется главное окно, рис. 3.

Рис. 1. Главное окно

Необходимое действие выбирается нажатием клавиш управления курсором, выполнение - клавиша Enter.

Рассмотрим порядок работы с программой. Вначале необходимо ввести исходные данные. В программе предусмотрен ввод с клавиатуры, случайными числами и из текстового файла.

Ввод с клавиатуры. Пользователь задает число строк и столбцов матрицы - целые числа из диапазона от 1 до 10, число строк должно быть не менее 4. Далее вводятся построчно элементы матрицы (рис. 4).

Случайные числа. Пользователь задает только число строк и столбцов матрицы. Элементы матрицы заполняются случайными числами.

Рис.2 Ввод с клавиатуры

Загрузка из файла. Пользователь задает имя файла (файл должен быть предварительно создан) из которого будут считаны данные. Если файл не существует, выводится сообщение об ошибке (рис. 5).

Рис. 3. Ввод из файла

По окончании ввода исходные данные можно записать в файл - Запись в файл. Предварительно задается имя файла.

После ввода исходных данных выбирается пункт Решение задачи и производится обработка матрицы и вывод результатов расчета на экран

Выбор пункта Выход приводит к завершению работы с программой.

4.7    Выполнение контрольного примера


При отладке программы использовался тестовый пример со случайной матрицей. В результате прогонки программы с этим контрольным примером на экран были выведены следующие результаты:

Рис. 4. Результат выполнения программы

Заключение


В результате выполнения работы мною была разработана программа, позволяющая находить произведение элементов столбцов матрицы, формировать из строк матрицы одномерные массивы и подсчитывать в них инверсии элементов.

Кроме этого данная курсовая работа позволила закрепить приемы программирования в среде программирования Turbo Pascal:

§  использование в программах стандартных операторов языка;

§  разработка пользовательского интерфейса средствами графического модуля Graph;

§  работа с файлами.

Работа по созданию программы позволила приобрести практические навыки программирования прикладных задач по обработке числовых последовательностей.

Определение произведения элементов и преобразование массива вынесено в отдельные подпрограммы, что дает возможность использовать их в других программных разработках.

Список литературы


1.   Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. Харьков: Фолио, 1997. -368 с.

2.      Гордон Я. Язык программирования Паскаль без секретов: Учебное пособие по программированию на ПК. -М.: "Новый издательский дом", 2004. 319 с.

.        Гусева А. И. Учитесь программировать: Pascal 7.0; Задачи и методы их решения. - М.: «ДИАЛОГ-МИФИ», 1997. - 256 с.

.        Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. -М.: Диалог-МИФИ, 2005. -288 с.

.        Поляков Д.Б., Круглов И.Ю. Программирование в среде Турбо Паскаль / Справочно-методическое пособие. -М.: Изд-во МАИ, 1992. -506 с.

.        Фаронов В.В. Turbo Pascal 7.0. Начальный курс М.: Нолидж, 1997. -616 с.

Приложение

Листинг программы

v26;Graph, Crt;= array [1..10] of real;= array [1..10] of Vector;= 6;: array [1..Mmenu] of string[25] = ( {меню}

'Ввод с клавиатуры',

'Случайные числа',

'Загрузка из файла',

'Запись в файл',

'Решение задачи',

'Выход');: array [1..Mmenu, 1..2] of integer = ((7, 6), (7, 160), (7, 314),

(320, 6), (320, 160), (320, 314));: array [1..Mmenu] of integer = (White, LightGray, White, LightGray,, LightGray);, nfont, i, j, gdrv, gmode: integer;: string;: integer;, N: integer;: Matrix;, Vrow1, Vrow2, Vrow3, Vrow4: Vector;: text;Border(x1, y1, x2, y2, color: integer);(color + 8);(x1 - 1, y1 - 1, x2 + 1, y2 + 1);(x1 + 1, y1 + 1, x2 - 1, y2 - 1);(color);(x1, y1, x2, y2);;TextBar(x, y, L, h, forecolor, backcolor: integer;: string; textcolor, fsize: integer);, ht: integer;: TextSettingsType;(Old);(forecolor);(1, backcolor);D(x, y, x + L, y + h, 0, True);(1, 0, fsize);:= TextWidth(txt);:= TextHeight(txt);(textcolor);(x + (L - lt) div 2, y + (h - ht) div 2, txt);(Old.Font, 0, Old.CharSize);;MainMenu(var i: integer);

{выбор пункта меню}: char;:= Readkey; {читаем клавишу}ch = #0 then:= Readkey;ch in [#72, #75, #77, #80] then(xy[i, 1], xy[i, 2], 310, 150, LightBlue,[i], Menu[i], Black, 1);ch of {обработка}

#77::= i + 3;i > Mmenu then i := i - 3;;

#75::= i - 3;i < 1 then i := i + 3;;

#80::= i + 1;i > Mmenu then i := 1;;

#72::= i - 1;i < 1 then i := Mmenu;;;(xy[i, 1], xy[i, 2], 310, 150, LightBlue,, Menu[i], White, 1);;ch = #13; {пока не нажата Enter};MainScreen;: integer;;(2, 2, GetMaxX - 3, GetMaxY - 3, Red);i := 1 to Mmenu do(xy[i, 1], xy[i, 2], 310, 150, LightBlue,[i], Menu[i], Black, 1);:= 1;(xy[selected, 1], xy[selected, 2], 310, 150, LightBlue,, Menu[selected], Black, 1);;WorkWin(x0, y0, x1, y1, forecolor, backcolor,, fsize: integer);

{рабочее окно};(forecolor);(1, backcolor);D(x0, y0, x1, y1, 0, True);(nfont, 0, fsize);(textcolor);;InMatrix(var A: Matrix; var M, N: integer; sender: integer);

{ввод матрицы с клавиатуры}, j: integer;: string;(15);(0);(130, 30, 'Введите число строк M(>=4): ');(37, 2);(M);(130, 42, 'Введите число столбцов N: ');(37, 3);(N);i := 1 to M dosender = 1 then(i, s);(130, 42 + i * 17 , 'Введите строку ' + s + ': ');(30, 3 + i);;j := 1 to N dosender = 1 then(A[i, j])[i, j] := Round(Random * 500 - 250) / 100;sender = 1 then;;(130, 250, 'Ввод завершен.');(130, 270, 'Нажмите Enter для продолжения.');;;LoadMatrix(var A: Matrix; var M, N: integer);

{чтение матрицы из файла}, j: integer;: string;: text;(15);(0);(130, 30, 'Имя файла с данными: ');(37, 2);(s);

{$I-}(t, s); Reset(t);{$I+}IOResult <> 0 then(130, 50, 'Файл не найден!');(130, 70, 'Нажмите Enter для продолжения.');;;;(t, M, N);i := 1 to M doj := 1 to N do(t, A[i, j]);(t);;(t);(130, 50, 'Матрица загружена.');(130, 70, 'Нажмите Enter для продолжения.');;;SaveMatrix(A: Matrix; M, N: integer);

{запись матрицы в файл}, j: integer;: string;: text;(15);(0);(130, 30, 'Имя файла для записи:');(37, 2);(s);(t, s); Rewrite(t);(t, M, ' ', N);i := 1 to M doj := 1 to N - 1 do(t, A[i, j]:3:2,' ');(t, A[i, N]:3:2);;(t);(130, 50, 'Матрица сохранена.');(130, 70, 'Нажмите Enter для продолжения.');;;MulCol(A: Matrix; M, N: integer; var P: Vector);

{вычисление произведения всех элементов каждого столбца массива}, j: integer;j := 1 to N do[j] := 1;i := 1 to M do[j] := P[j] * A[i, j];;;Invers(var A: Vector; N: integer): integer;

{расчет количества инверсий (т.е. таких пар элементов, в

которых большее число находится слева от меньшего)}, k: integer;:= 0;i := 1 to N - 1 doA[i] > A[i + 1] then:= k + 1;:= k;;:= VGAHi;:= VGA;:= InstallUserFont('litt');(gdrv, gmode, '');(0, 0);(nfont, 0, 1);(15);:= False;;;(selected);(2, 2, GetMaxX - 3, GetMaxY - 3, Red, White, Black, 4);selected of

: InMatrix(A, M, N, 1);

: InMatrix(A, M, N, 2);

: LoadMatrix(A, M, N);

: SaveMatrix(A, M, N);

: begin(t, 'temp'); Rewrite(t);:= A[1];:= A[2];:= A[3];:= A[4];(A, M, N, P);(t, 'Матрица');i := 1 to M doj := 1 to N do(t, A[i, j]:8:2);(t);;(t);(t, 'Произведение элементов столбцов');j := 1 to N do(t, P[j]:8:2);(t);(t);(t, 'Массив 1');j := 1 to N do(t, Vrow1[j]:8:2);(t);:= Invers(Vrow1, N);(t, 'количество инверсий ', ni);(t, 'Массив 2');j := 1 to N do(t, Vrow2[j]:8:2);(t);:= Invers(Vrow2, N);(t, 'количество инверсий ', ni);(t, 'Массив 3');j := 1 to N do(t, Vrow3[j]:8:2);(t);:= Invers(Vrow3, N);(t, 'количество инверсий ', ni);(t, 'Массив 4');j := 1 to N do(t, Vrow4[j]:8:2);(t);:= Invers(Vrow4, N);(t, 'количество инверсий ', ni);(t);(t);(0);:= 25;not EOF(t) do(t, s);(20, j, s);:= j + 11;;(t);(20, j + 11, 'Нажмите Enter для продолжения.');;;;selected = Mmenu;;.

Источник: https://www.bibliofond.ru/detail.aspx?id=871689