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

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

В математике, как правило, индекс либо заключается в круглые скобки, либо указывается несколько ниже имени массива, например:

А(1), А(2), А(3), А(4), А(5) или А1, А2, А3, А4, A5, или в общем виде {Аi}

где i = 1, 2, 3, …, n.

В языке ПАСКАЛЬ индекс заключается в квадратные скобки. Для рассмотренного примера элементами массива А являются:

А[1] = 1.6, А[2] = 14.9, А[3] = -5.0, А[4] = 8.5, А[5] = 0.46.

Если в программе используется массив, то он должен быть описан либо в разделе переменных VAR, либо в разделе типов TYPE. Рассмотрим сначала описание массива в разделе переменных VAR. Форма описания имеет вид

VАR имя массива: ARRAY [t1] OF t2;

Здесь ARRAY (массив); OF (из) - служебные слова; t1 - тип индекса, в качестве которого может быть любой простой тип, кроме типа REAL; t2 - тип элементов массива, допустимый на языке ПАСКАЛЬ.

Для предыдущего примера описание массива имеет вид

A: ARRAY [1...5] OF REAL;

Здесь А - имя массива, элементы которого имеют базовый тип REAL;

тип индекса - ограниченный от 1 до 5.

Следует отметить, что поскольку тип индекса не может быть стандартным целым или действительным типом, то нельзя делать следующее описание массива (часто встречающаяся ошибка)

A: ARRAY [5] OF REAL;

или

VAR A: ARRAY [INTEGER] OF REAL;

Примеры правильного описания массивов:

: ARRAY [1..N] OF REAL ;

ГОД : ARRAY [ЯНВАРЬ..ДЕКАБРЬ] OF INTEGER ;

Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то допускается в описании объединять массивы в список, например

Здесь объявлено списком три массива А, В, С действительных чисел, каждый из которых содержит по 50 элементов (от 1 до 50):

[1], A[2], ..., А[50],[1], B[2], ..., B[50],[1], C[2], ..., C[50],

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

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

Элементы массива могут стоять как в левой части оператора присваивания, так и в выражениях.

Над элементами массива можно производить те же операции, которые допустимы для данных его базового типа. Если базовый тип есть INTEGER, то допустимы все операции над данными целого типа, включая и стандартные функции. Примеры использования элементов массива в разделе операторов:

В[5] := В[3] +1;:= SUM - C[K];

Р1:= А[2*I+1] ;

Для ввода и вывода числовых значений массива используются циклы. Например, цикл

FOR I := 1 ТО 9 DO(A[I]) ;

организует ввод девяти значений элементов массива А:

А[1], А[2],...,А[9],

а цикл

FOR I := 1 ТО 9 DO(А[I]) ;

вывод девяти значений элементов того же массива.

В языке ПАСКАЛЬ помимо явного описания массивов в разделе переменных имеется другая форма описания, состоящая из двух этапов.

Сначала в разделе описания типов TYPE указывается тип массива. Затем в разделе описания переменных VAR перечисляются массивы, относящиеся к указанному типу.

Введение типа массива увеличивает раздел описаний, но в то же время упрощает отладку программы и удерживает от абсурдных ошибок, таких, как сложение «ЯБЛОК», с «УСКОРЕНИЕМ СВОБОДНОГО ПАДЕНИЯ».

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

ТУРЕ имя типа = ARRAY [t1] OF t2;имя массива: имя типа;

Здесь t1 - тип индекса; t2 - базовый тип элементов массива.

Пусть, например, в программе используется массив R, состоящий из 10 элементов действительного типа. Обозначим тип массива именем MAS. Тогда описание массива можно выполнить следующим образом:

TYPE MAS = ARRAY [1..10] OF REAL;R: МAS ;

Если в программе несколько массивов, например R, А, В, С, имеют тип MAS, то изменится лишь раздел описания переменных

R, А, В, С: MAS;

Следует отметить, что массивы R, А, В, С используются в разделе операторов программы. Тип массива MAS введен формально только в разделе описаний и нигде в программе не указывается и не обрабатывается.

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

Особенно широкое распространение получили двухмерные массивы, иначе называемые матрицами. Например, изображение целых чисел последовательно в нескольких строках является матрицей:

         4       3       6

         8       1       7

         3       9       5

Данная матрица имеет размер 3 на 4, т. е. она состоит из трех строк и четырех столбцов. Если всю матрицу обозначить одним именем, например А, то каждый элемент матрицы обозначается с двумя индексами, например A[I, J]. Здесь первый индекс I обозначает номер строки (I = 1, 2, 3), второй индекс J - номер столбца (J = 1, 2, 3, 4). Такую матрицу можно описать следующим образом (с использованием имени типа Т):

1) 
TYPE Т = ARRAY [1..3, 1..4] OF INTEGER;

VAR A: T;

2)  TYPE T = ARRAY [1..3] OF ARRAY [1..4] OF INTEGER ;

VAR A: T;

В первом случае описывается каждый тип индекса, затем указывается простой базовый тип элементов массива INTEGER.

Во втором случае сначала описывается тип данных индекса [1..3], затем указывается сложный базовый тип

[1..4] OF INTEGER;

который в свою очередь содержит описание типа другого индекса и простого базового типа INTEGER.

Если в программе необходимо выделять отдельные строки матрицы, то удобно ввести такое описание:

Т1 = ARRAY [1..4] OF INTEGER;

Т = ARRAY [1..3] OF T1;: T;

В: Т1 ;

Здесь сначала описывается тип одной строки Т1, а затем через тип строки Т1 - тип всей матрицы Т. В разделе переменных указывается, что А является двухмерным массивом, т. е. матрицей, а В - одномерным массивом.

1.3    Системные требования


Программа должна корректно работать на следующем или совместимым с ним оборудовании:

§  ПЭВМ IBM PC Pentium и выше;

§  объем свободной оперативной памяти 16 Мб;

§  свободный объем жесткого диска 1 Мб;

§  видеоадаптер SVGA;

§  стандартная клавиатура 101/102;

§  манипулятор типа «мышь»;

§  монитор, поддерживающий режим работы SVGA;

Требования к программным средствам, используемым программой:

Для корректного компилирования и запуска программы необходима операционная система MS-DOS, Windows XP/7, среда программирования Turbo Pascal не ниже версии 7.

2       Математическое описание решения задачи


2.1    Анализ данных


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

§ размерность массива M´N (число строк и столбцов соответственно);

§  двумерный массив целых чисел размерностью M´N.

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

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

§  четыре вектора, составленные из элементов первых четырех строк;

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

2.2    Алгоритм решения


. Произведение элементов каждого столбца.

Вычисление произведения производится по рекуррентному выражению

П = П´Y

где П - накапливаемое произведение; Y - сомножители. По данному выражению каждое новое значение получается из предыдущего добавлением очередного множителя.

Для первого сомножителя Y начальное значение произведения П = 1 (если считается произведение всех элементов).

Алгоритм. Расчет произведения элементов столбцов

1       цикл по j от 1 до n

         pj = 0

         pj = pj* aij

5       конец цикла по i

6       конец цикла по j

. Формирование векторов

Алгоритм заключается в следующем: в цикле элементы соответствующих строк матрицы переписываются в вектора (при условии, что число строк матрицы не менее 4).

Алгоритм. Формирование одномерных массивов

1       цикл по j от 1 до n

         A1i = А1j

         A2i = А2j

4       A3i = А3j

         A4i = А4j

         конец цикла по j

. Определение количества инверсий.

Для подсчета количества инверсий необходимо выполнять следующие шаги: обнуляем счетчик инверсий; просматриваем массив от первого до предпоследнего элемента; сравниваем соседние элементы; если текущий элемент больше следующего, увеличиваем счетчик инверсий на 1. Процесс повторяется пока не будет просмотрены все пары элементов.

Алгоритм. Количество инверсий

1       k = 0

2       цикл по i от 1 до n - 1

         если ai > ai+1 то

         k = k + 1

         конец если

6       конец цикла по i

3       Структурные схемы алгоритма решения задачи


Блок - схема алгоритма вычисления произведения элементов каждой строки матрицы

Блок - схема алгоритма подсчета количества инверсий вектора

4       Описание программы


4.1    Применение программы


Разработанная программа предназначена для обработки массивов и выполняет следующие функции:

§  ввод матрицы с клавиатуры, файла или заполнение при помощи случайных чисел;

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

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

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

4.2    Разработка программы


Запуск программы Turbo Pascal выполняется любым из стандартных способов запуска, предусмотренных в OC Windows (например, с помощью ярлыка на рабочем столе).

Для перехода к выбору команд главного меню используется клавиша F10. Для возврата в режим редактирования нужно нажать клавишу ESC.

Для получения справки используются клавиши:- получение контекстно-зависимой справки;+F1 - выбор справки из списка доступных справочных сообщений;+F1 - получение справки о нужной стандартной процедуре, функции, о стандартной константе или переменной.

Текст программы набирается в текстовом редакторе среды Turbo Pascal.

После заполнения очередной строки следует нажать клавишу ENTER, чтобы перевести курсор на следующую строку.

Наиболее часто используемые команды редактора Turbo Pascal:

смещение курсораUp - на страницу вверх;Down - на страницу вниз;- в начало текущей строки;- в конец текущей строки;

Сtrl+ Page Up - в начало текста;

Сtrl+ Page Down - в конец текста.

команды редактирования- стирает символ слева от курсора;- стирает символ, на который указывает курсор;+Y - стирает строку, в которой расположен курсор;- вставляет новую строку, разрезает старую;

Сtrl+Q L - восстанавливает измененную строку (действует, если курсор не покидал строку после ее изменения).

работа с блоками+K B - начинает выделение блока;+K K - заканчивает выделение блока (кроме того, блок можно выделить с помощью мыши);+K Y - уничтожает выделенный блок;+K С - копирует блок;+K V - перемещает блок на новое место;+K W - записывает блок в файл;+K R - читает блок из файла;+K P - печатает блок.

Набранный текст программы запишем в файл. Клавишей F2 вызывается окно диалога, в котором следует задать имя файла.

После подготовки текста программы нужно попытаться исполнить ее, т.е. откомпилировать программу, связать ее (если это необходимо) с библиотекой стандартных программ и функций, загрузить в оперативную память и передать ей управление. Эта последовательность действий - прогон программы - осуществляется после нажатия клавиш CTRL+F9.

Если в программе нет синтаксических ошибок, то все действия выполняются последовательно одно за другим, при этом в небольшом окне сообщается о количестве откомпилированных строк и объеме доступной памяти. Перед передачей управления загруженной программе среда выводит на экран окно прогона программы, а после завершения работы восстанавливает на экране окно редактора.

Если на каком-то этапе среда обнаружит ошибку, она прекращает дальнейшие действия, восстанавливает окно редактора и помещает курсор на ту строку программы, при компиляции или исполнении которой обнаружена ошибка. При этом в верхней строке редактора появляется диагностическое сообщение о причине ошибки. Все это позволяет отладить программу, т.е. устранить в ней синтаксические ошибки и убедиться в правильности ее работы.

С помощью клавиш ALT+F5 в любой момент можно просмотреть данные, выданные на экран в результате прогона программы.

4.3    Описание структуры программы


Разработанная программа состоит из одного модуля MATMAS4.PAS. Рассмотрим его состав.

Пользовательские типы:- одномерный массив вещественных чисел максимальной размерности 10 элементов.- двумерный массив векторов Vector максимальной размерности 10.

Константы:= 6 - количество команд меню;- строковой массив названий команд меню;- массив координат точек привязки команд меню;- массив цветов фона блоков команд.

Глобальные переменные:- количество инверсий для каждого массива, тип integer;

nfont - номер внешнего экранного шрифта, тип integer;, j - параметры циклов, тип integer;- номер графического драйвера, тип integer;- номер режима работы монитора, тип integer;, N - число строк и столбцов матрицы соответственно, тип integer;- служебная строка, тип string;- номер нажатой кнопки, тип integer;- исходная матрица, тип Matrix;- произведение элементов столбцов матрицы, тип Vector;, Vrow2, Vrow3, Vrow4 - сформированные массивы, тип Vector;- файловая переменная, тип text.

Подпрограммы пользователя.

Процедура Border(x1, y1, x2, y2, color)

Назначение: вывод рамки.

Входные параметры:, y1, x2, y2 - координаты левого верхнего и правого нижнего угла рамки, тип integer;- цвет рамки, тип integer.

Процедура TextBar(x, y, L, h, forecolor, backcolor, txt, textcolor, fsize)

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

Входные параметры:, y - координаты левого верхнего угла прямоугольника, тип integer;- длина прямоугольника, тип integer;- высота прямоугольника, тип integer;

forecolor - цвет рамки, тип integer;- цвет заливки, тип integer;- текст, тип string;- цвет текста, тип integer;

fsize - высота текста, тип integer.

Процедура MainMenu(i)

Назначение: выбор пункта меню.

Входные параметры:- номер текущего пункта меню, тип integer.

Выходные параметры:- номер выбранного пункта меню, тип integer.

Процедура MainScreen

Назначение: вывод главного окна программы.

Процедура WorkWin(x0, y0, x1, y1, forecolor, backcolor, textcolor, fsize)

Назначение: рабочее окно.

Входные параметры:, y0, x1, y1 - координаты левого верхнего и правого нижнего угла рамки, тип integer;

textcolor - цвет текста, тип integer;- высота текста, тип integer.

Процедура InMatrix(A, M, N, sender)

Назначение: ввод матрицы с клавиатуры или при помощи генератора случайных чисел.

Входные параметры:- флаг ввода: 1 - клавиатура, 0 - автозаполнение.

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

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

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

Назначение: чтение матрицы из файла.

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

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

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

Назначение: запись матрицы в файл.

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

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