Реферат Курсовая Конспект
Технологии программирования - раздел Информатика, Министерство Сельского Хозяйства Российской Федерации Красноярский Г...
|
Министерство сельского хозяйства Российской Федерации
Красноярский государственный аграрный университет
«Технологии программирования»
Оглавление
ВВЕДЕНИЕ.. 5
1. ОБЩИЕ СВЕДЕНИЯ.. 6
1.1. Цель и задачи практики. 6
1.2. Организация проведения практики. 6
2. ОТЧЕТ ПО ПРАКТИКЕ.. 9
2.1. Содержание отчета. 9
2.2. Основные требования к оформлению отчета. 9
3. ЗАДАНИЯ.. 11
3.1. Практическое задание 1. 11
3.2. Практическое задание 2. 12
3.3. Практическое задание 3. 24
4. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.. 27
4.1. Модули. 27
4.1.1. Структура модулей. 28
4.1.2. Заголовок модуля и связь модулей друг с другом.. 29
4.1.3. Интерфейсная часть. 29
4.1.4. Исполняемая часть. 30
4.1.5. Инициирующая часть. 31
4.1.6. Компиляция модулей. 32
4.1.7. Доступ к объявленным в модуле объектам.. 34
4.1.8. Стандартные модули. 36
4.2. Использование библиотеки CRT.. 38
4.2.1. Программирование клавиатуры.. 39
4.2.2. Текстовый вывод на экран. 43
4.2.3. Программирование звукового генератора. 55
4.3. Использование библиотеки GRAPH.. 57
4.3.1. Переход в графический режим и возврат в текстовый. 57
4.3.2. Краткая характеристика графических режимов работы дисплейных адаптеров. 57
4.3.3. Процедуры и функции. 59
4.3.4. Координаты, окна, страницы.. 67
4.3.5. Линии и точки. 75
4.3.6. Многоугольники. 84
4.3.7. Дуги, окружности, эллипсы.. 87
4.3.8. Краски, палитры, заполнения. 93
4.3.9. Сохранение и выдача изображений. 112
4.3.10. Вывод текста. 116
4.3.11. Включение драйвера и шрифтов в тело программы.. 125
Заключение. 129
Список литературы.. 130
Глоссарий. 132
Приложения. 134
Приложение 1. Образец титульного листа. 134
Приложение 2. ГОСТ 19.002-80. 135
Приложение 3. ГОСТ 19.003-80. 149
ВВЕДЕНИЕ
В настоящее время овладение навыками программирования на одном из языков высокого уровня является обязательным элементом образования и культуры каждого человека.
Наибольшее распространение находят языки программирования, имеющие высокий уровень формализации и позволяющие создавать хорошо структурированные программы, предназначенные для решения достаточно обширного класса задач из самых разнообразных сфер деятельности. К таким языкам относятся Паскаль, Си, Модула, Ада и т. д.
Одним из простых для первоначального изучения, но в то же время достаточно универсальным языком программирования является Паскаль, лежащий в основе широко распространенных сред программирования, таких как Borland Pascal, Delphi, Free Pascal Compiler, Lazarus и т.п.
Паскаль является основным языком программирования на младших курсах для студентов специальности 010502.65 – «Прикладная информатика (в экономике)», и направления 080700.62 – «Бизнес - информатика» Института управления и агробизнеса Красноярского государственного аграрного университета.
Данное пособие призвано обеспечить студентов первого курса вышеупомянутых специальностей всем необходимым материалом для успешного выполнения заданий учебной практики, запланированной на конец июня – начало июля (сразу после окончания летней сессии).
Пособие содержит четыре раздела: в первом приводятся цель и задачи практики и сведения об организации ее проведения, во втором – требования к содержанию и оформлению отчета по практике, в третьем разделе содержатся описания практических заданий, в четвертом – сведения о модулях Паскаля, правилах их построения и описания, а также описаны стандартные модули Borland Pascal - CRT и GRAPH .
В приложениях приведены образец титульного листа отчета по практике и стандарты, регламентирующие правила оформления графических схем алгоритмов и программ.
ОБЩИЕ СВЕДЕНИЯ
ОТЧЕТ ПО ПРАКТИКЕ
В процессе прохождения практики и по ее окончании на основании выполненных заданий студент обязан написать отчет. Оформленный отчет сдается преподавателю - руководителю практики.
Содержание отчета
Отчет по практике должен содержать:
~ титульный лист (образец приведен в приложении 1);
~ цель практики;
~ задачи практики.
Далее следуют три раздела в соответствии с темами выполненных заданий. В каждом разделе приводятся:
~ тема;
~ условие задания;
~ схема межмодульных связей программы;
~ графические схемы алгоритмов основной программы и всех процедур и функций;
~ исходные тексты программы и всех модулей, содержащие подробные комментарии;
~ «скриншоты» с результатами работы программы.
После третьего раздела приводится список использованных источников информации, включая ссылки на Internet-ресурсы.
ЗАДАНИЯ
Практическое задание 1
Написать программу, имеющую модульную структуру, для рашения пяти задач, приведенных в таблице 3.1. Помимо основной программы в ней должно присутствовать не менее пяти модулей, образующих не менее чем двухуровневую иерархическую структуру.
Основная программа должна в диалоге с пользователем определить номер решаемой задачи и вызвать процедуру решения этой задачи, описанную в одном из модулей.
Процедуры решения задач должны вызавать процедуры/функции ввода исходных данных, собственно обработки и вывода результатов.
Процедуры обработки могут, в свою очередь, вызывать вспомогательные процедуры и функции.
Один из возможных вариантов организации межмодульных связей и распределения процедур и функций по модулям приведен на рисунке 3.1.
Рис. 3.1. Возможная схема межмодульных связей
программы для задания 1
A – основная программа, определяет решаемую задачу и вызывает соответствующую процедуру из модуля B;
B – содержит пять процедур решения задач, вызывающих процедуры/функции из модулей C,D,E,F,G;
C – содержит процедуры/функции ввода исходных данных, собственно обработки и вывода результатов для задачи 1;
D – содержит процедуры/функции ввода исходных данных, собственно обработки и вывода результатов для задачи 2;
E – содержит процедуры/функции ввода исходных данных, собственно обработки и вывода результатов для задачи 3;
F – содержит процедуры/функции ввода исходных данных, собственно обработки и вывода результатов для задачи 4;
G – содержит процедуры/функции ввода исходных данных, собственно обработки и вывода результатов для задачи 5.
При разработке процедур и функций следует руководствоваться принципами структурного и модульного программирования [4, 7, 8-12], которые, помимо всего прочего, запрещают без крайней необходимости использовать глобальные переменные.
Практическое задание 2
Данное задание основано на практическом задании 1 и предполагает исключение диалога с пользователем при определении номера рещаемой задачи и замену его на оконный пользовательский интерфейс, построенный с использованием возможностей текстового режима работы видеоадаптера. Один из возможных вариантов оформления окна приведен на рисунке 3.2.
Приведенное на рисунке окно имеет внешнюю рамку, в верхней части окна расположено меню, позволяющее выбрать решаемую задачу или завершить рабту программы. Внутренняя рамка ограничивает клиентскую часть окна, предназначенную для диалога с пользователем во время решения выбранной задачи (ввода исходных данных и вывода сообщений и результатов).
Оформление окна и работу с меню следует организовать с помощью процедур и функций рисования отдельных элементов и выполнения других элементарных операций. На основе этих элементарных процедур и функций строятся более крупные, затем – еще более крупные и так далее, в соответствии с принципами структурного программирования. Все процедуры и функции, использующиеся при работе с окном и меню, должны быть оформлены в виде одного или нескольких модулей.
Рис. 3.2. Возможное оформление окна
В отличие от предыдущего задания в данном случае основная программа должна вызывать процедуру оформления окна, далее в цикле с помощью функции работы с меню определять номер задачи, выбранной пользователем, и вызывать соответствующую процедуру до тех пор, пока не будет выбран пункт меню завершения программы. В этом случае экран должен очищаться, а программа – завершаться.
Диалог с пользователем во время решения выбранной задачи должен происходить в рамках клиентской части окна, т. е. общее оформление окна не должно нарушаться. Для этого перед вызовом процедуры решения задачи следует организовать окно в пределах, ограниченных внутренней рамкой.
Таблица 3.1.
Варианты задания 1
Вариант | Задача 1 | Задача 2 | Задача 3 |
z = + sin, a = sin x | y = ln () - e+ , a = 0,5 | Вычислить сумму ряда S = | |
y = sin x + | y = ln + , a = 5410 | Вычислить сумму ряда S = с погрешностью E>0 | |
y = , z = | Вычислить произведение ряда P = | ||
z = e+ 4, 4810 | y = - , a = 10 | Вычислить сумму ряда S = c погрешностью E > 0 | |
z = + e- 0, 3610 | Вычислить сумму ряда S = |
Продолжение табл. 3.1.
y = e+ cos(2x + 5) + | y = e+(sin2x+5x), a = 0,25 | Вычислить сумму ряда S =с погрешностью E > 0 | |
y = e+ + ln(x+ 5) | y = ; a = 0,4 | Вычислить сумму ряда S = 1+ | |
y = e+ cosx + + 1,15 | Вычислить сумму ряда S= с погрешностью E > 0 | ||
z = + + 10y , y = ln | y = | Вычислить сумму S = | |
z =e- 0,0012 | y = xln x + ; a = 2,3410 | Вычислить сумму S =с погрешностью E > 0 | |
y = (sin x)+ e- ln(x+1) | y = + | Вычислить сумму S = c погрешностью E > 0 |
Продолжение табл. 3.1.
y = e+ sinx + - 0,14 | y = - ln | Вычислить сумму S = с погрешностью E > 0 | |
y = ln | y = +arctg+ ; a = 3,5; b = 1,44 | Вычислить сумму S = sin x + sin(sin x)+ …+ sin(sin(..sin x)…) | |
y = 3 sin x + + x- 0,5 | y = / ln(1+x); a = 16 | Вычислить сумму S = с погрешностью E > 0 | |
y = | y = ; a = 0,0034 | Вычислить сумму S = (x+h)+2(x+2h)+3(x+3h)+…+N(x+Nh) | |
y = ln + (x + 5) | y = + ; a = 0,74 | Вычислить сумму S = с погрешностью E > 0 |
Продолжение табл. 3.1.
y = arctg(x + 1) + e+ ln (x+2) | z = ln ; y = 10 | Вычислить сумму первых N слагаемых S = 1+ | |
z = 2 cos | z = ln | Вычислить сумму ряда S = с погрешностью E > 0 | |
z = + - ln (x+4) | z = ; y = 1,2 | Найти сумму первых N слагаемых S = | |
y = + | z = x+ - ; y = 6,8 ; a = 0,15 | Вычислить сумму S = c погрешностью E > 0 | |
y = e+ ln () + 14,4810 | z = ; y = 0,72 | Вычислить произведение P = (2 +) |
Продолжение табл. 3.1.
y = eln + | z = | Вычислить произведение P =() | |
z = + | у = | Вычислить сумму S = | |
z = + | у = | Вычислить сумму S = с погрешностью E > 0 | |
z = + - 0,02410 | у = | Вычислить сумму S = |
Таблица 3.1.
Варианты задания 1 продолжение
Вариант | Задача 4 | Задача 5 |
Написать программу расчета среднего арифметического (СА) значения положительных элементов в одномерном массиве, имеющих четные индексы | В квадратной матрице [Aij], i,j=заменить нулями элементы с четной суммой индексов, не превышающие некоторого числа X | |
Написать программу вычисления суммы отрицательных, произведения положительных и количества нулевых значений в одномерном массиве. | Получить матрицу [Bij], i,j=из матрицы [Aij], i,j=1 путем перестановки столбцов -– первого с последним, второго с предпоследним и т.д. | |
Написать программу расчета суммы положительных элементов одномерного массива, имеющих нечетные индексы | Получить новую матрицу [Вi,j], i,j=из матрицы[Aij], путем перестановки сегментов по диагонали | |
Упорядочить одномерный массив в порядке неубывания | Получить новую матрицу [Вi,j], i,j= из матрицы[Aij], путем перестановки сегментов по часовой стрелке | |
Написать программу расчета СА отрицательных элементов в одномерном массиве. Заменить минимальный элемент в одномерном массиве на СА | В произвольной матрице [Aij] i=; j=найти минимальный и максимальный элементы, указать номера строк и номера столбцов, на пересечении которых они находятся | |
Упорядочить одномерный массив в порядке невозрастания | Из одномерного массива [Xi] i=получить действительную квадратную матрицу 8*8, элементами которой являются числа x,…,x, расположенные в ней по столбцам |
Продолжение табл. 3.1.
В одномерном массиве поменять местами максимальный и минимальный элементы | Из одномерного массива [Xi] i=получить действительную квадратную матрицу 8*8, элементами которой являются числа x,…,x, расположенные в ней по строкам | |
Написать программу расчета среднего геометрического (СГ) положительных элементов в одномерном массиве. Заменить максимальный элемент в одномерном массиве на СГ | В произвольной матрице [Aij] i=; j=столбец, содержащий максимальный элемент, заменить на сумму всех элементов матрицы | |
Произвести попарные перестановки элементов одномерного массива: первый элемент поменять местами с последним, второй элемент – с предпоследним и т.д. | Получить квадратную матрицу [Aij], i,j=, элементами главной диагонали которой будут числа в диапазоне от 1 до N | |
Отыскать последний положительный элемент в одномерном массиве и заменить его на СА элементов массива | Получить квадратную матрицу [Aij], i,j=, элементами главной диагонали которой будут числа в диапазоне от N до 1 | |
Дан одномерный массив [Ai]. Сформировать одномерный [Bi] массив из элементов массива [Ai] по закону B=Ai+j, i = ; N = M - i | Получить квадратную матрицу [Aij], i,j=, элементами побочной диагонали которой будут числа, получающиеся в результате перемножения i*(i+1), где i – номер строки | |
Из одномерного массива [Ai] сформировать одномерный массив [Bi], записав в него сначала элементы массива А, имеющие четные индексы, потом – элементы с нечетными индексами | Получить квадратную матрицу [Aij], i,j=, элементы которой будут получены следующим образом: в каждой строке матрицы первые (N-i+1) элементов заполнены номером строки, остальные – нулями |
Продолжение табл. 3.1.
Отыскать последний отрицательный элемент в одномерном массиве и заменить его на СГ элементов массива | Получить матрицу [Cij] i,j= из матриц [Aij] i,j= и [Bij] i,j=путем умножения элементов каждой строки матрицы [Aij] на максимальный элемент соответствующей строки матрицы [Bij] | |
Заменить в одномерном массиве нулевые элементы на значение минимального элемента | В квадратной матрице [Aij] i,j=среди элементов, расположенных ниже главной диагонали, найти минимальный, а среди элементов выше главной диагонали – максимальный. Вывести координаты этих элементов | |
Сформировать массив [Xi], элементы которого равны частоте встречаемости элементов массива [Bi] среди элементов массива [Ai]. Определить, какой элемент массива [Bi] чаще всего встречается в [Ai] | В квадратной матрице [Aij] i,j= среди элементов, расположенных ниже побочной диагонали, определить количество положительных элементов, а среди элементов выше побочной диагонали – количество отрицательных элементов | |
Сформировать массив [Xi], элементы которого равны полусумме двух соседних элементов одномерного массива [Yi] | Из квадратной матрицы [Aij] i,j=сформировать одномерный массив [Xi] i=по следующему правилу: элементами одномерного массива [Xi] с нечетными индексами будут элементы главной диагонали [Aij], с четными – побочной диагонали [Aij] |
Продолжение табл. 3.1.
Сформировать массив [Ai] из элементов одномерного массива [Bi] по закону A= (B+B)/4, i = | Сформировать одномерный массив [Xi] i= из сумм положительных элементов строк матрицы [Aij] j,i=, попутно определяя номера строк матрицы [Aij] i,j=, в которых отсутствуют положительные элементы | |
Сформировать массив [Ai] из элементов одномерного массиваj =по закону A= Bi+BN/2+i ; i = | Сформировать одномерный массив [Bi] i=из минимальных элементов строк прямоугольной матрицы[Aij] i=, j=. Подсчитать количество элементов массива [Bi], попавших в интервал (x,y) | |
Из одномерного массива [Bi] сформировать массив [Ai] по закону A= (B)/(j +1); j = | Сформировать одномерный массив [Bi] i=из максимальных элементов столбцов прямоугольной матрицы [Aij] i=, j=. В массиве [Bi] поменять местами первый отрицательный и последний положительный элементы | |
Из одномерного массива [Bi] сформировать массив [Xi] по следующему закону: Xi = где y – некоторая константа | В квадратной матрице [Aij] i,j=заменить элементы главной и побочной диагоналей на минимальный элемент главной диагонали | |
В одномерном массиве переставить местами соседние элементы с четными и нечетными индексами | В произвольной матрице [Aij] i=, j=поменять местами строку, содержащую минимальный элемент, со строкой, содержащей максимальный элемент |
Окончание табл. 3.1.
В одномерном массиве вычислить сумму элементов, значения которых кратны некоторому значению X | В квадратной матрице [Aij] i,j=найти максимальный элемент среди элементов, стоящих на главной и побочной диагоналях, и поменять его местами с элементом, стоящим на пересечении этих диагоналей | |
В одномерном массиве подсчитать количество элементов, значениями которых являются простые числа (простое число – это число, делящееся нацело только на единицу и само на себя) | В квадратной матрице [Aij] i,j=определить номер столбца матрицы, имеющего наибольшую сумму элементов. Поменять этот столбец со строкой, имеющей наименьшую сумму элементов | |
Сформировать массив [Bi], содержащий последовательность чисел Фибоначчи: B= B+ B; i = ; B=X, B=Xгде Х, Х– некоторые числа | В квадратной матрице [Aij] i,j=найти наибольшее из значений элементов, расположенных в первом и третьем секторах матрицы, полученных в результате пересечения главной и побочной диагонали | |
Вычислить сумму правых разностей элементов одномерного массива [Bi] S = (B- B) | В квадратной матрице [Aij] i,j=найти наибольшее из значений элементов, расположенных во втором и четвертом секторах матрицы, полученных в результате пересечения главной и побочной диагонали |
Практическое задание 3
Написать программу, выполняющую четыре операции над графическим объектом («фигурой»): движение, вращение, управление движением, управление вращением.
Вид фигуры зависит от варианта и приведен в таблице 3.2.
Движение – перемещение фигуры в одном из восьми направлений, пока нажата соответствующая клавиша на клавиатуре.
Вращение – поворот фигуры вокруг своего геометрического центра вправо (по часовой стрелке) или влево (против часовой стрелки), пока нажата соответствующая клавиша на клавиатуре.
Управление движением – самостоятельное перемещение фигуры в одном из восьми направлений, задаваемых однократным нажатием соответствующих клавиш на клавиатуре.
Управление вращением – самостоятельный поворот фигуры вокруг своего геометрического центра вправо или влево в соответствии с однократным нажатием соответствующих клавиш на клавиатуре.
Программа должна иметь оконный интерфейс, аналогичный изображенному на рисунке 3.2, и модульную структуру, соответствующую требованиям задания 1.
Один из возможных вариантов организации межмодульных связей и распределения процедур и функций по модулям приведен на рисунке 3.3.
Рис. 3.3. Возможная схема межмодульных связей
программы для задания 3
A – основная программа, оформляет окно и определяет выполняемую операцию путем вызыва соответствующих процедур/функций из модуля B, для выполнения операции вызывает одну из процедур модуля C;
B – содержит процедуры/функции оформления окна и работы с меню, разработанные в соответствии с требованиями к аналогичным процедурам, изложенными в задании 2;
C – содержит четыре процедуры выполнения операций, вызывающих процедуры/функции из модулей D и E;
D – содержит восемь процедур перемещения фигуры на один шаг, использующих процедуры модуля F;
E – содержит процедуры поворота фигуры на элементарный угол, использующих процедуры модуля F;
F – содержит процедуры рисования и стирания фигуры.
Таблица 3.2
Варианты задания 2
Вариант | Фигура[1] | Вариант | Фигура | ||||||
|
| ||||||||
| |||||||||
| |||||||||
|
Окончание таблицы 3.2
|
| ||||||||||||||||||||||
|
| ||||||||||||||||||||||
|
| ||||||||||||||||||||||
|
| ||||||||||||||||||||||
|
| ||||||||||||||||||||||
4. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ[2]
Модули
Стандартный Паскаль не предусматривает механизмов раздельной компиляции частей программы с последующей их сборкой перед выполнением. Более того, последовательное проведение в жизнь принципа обязательного описания любого объекта перед его использованием делает фактически невозможным разработку разнообразных библиотек прикладных программ [1-3]. Точнее, такие библиотеки в рамках стандартного Паскаля могут существовать только в виде исходных текстов, и программист должен сам включать в программу подчас весьма обширные тексты различных поддерживающих процедур, таких, как процедуры матричной алгебры, численного интегрирования, математической статистики и т.п.
Вполне понятно поэтому стремление разработчиков коммерческих компиляторов Паскаля включать в язык средства, повышающие его модульность. Чаще всего таким средством является разрешение использовать внешние процедуры и функции, тело которых заменяется стандартной директивой EXTERNAL. Разработчики Турбо Паскаля пошли в этом направлении еще дальше, включив в язык механизм так называемых модулей.
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части[1-3, 13, 16]. По своей организации и характеру использования в программе модули Турбо Паскаля близки к модулям-пакетам (PACKAGE) языка программирования Ада. В них так же, как в пакетах Ады, явным образом выделяется некоторая «видимая» интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант и переменных, а также приводятся заголовки глобальных процедур и функций. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.
Насколько сильно изменяются свойства языка Паскаль при введении механизма модулей, свидетельствует следующее замечание его автора Н. Вирта, сделанное им по поводу более позднего языка Модула-2: «Модули – самая важная черта, отличающая язык Модула-2 от его предшественника Паскаля»[5].
Модули представляют собой прекрасный инструмент для разработки библиотек прикладных программ и мощное средство модульного программирования. Важная особенность модулей заключается в том, что компилятор Турбо Паскаля размещает их программный код в отдельном сегменте памяти. Максимальная длина сегмента не может превышать 64 Кбайта, однако количество одновременно используемых модулей ограничивается лишь доступной памятью, что дает возможность создавать весьма крупные программы.
Интерфейсная часть
Интерфейсная часть открывается зарезервированным словом INTERFACE. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям [1 – 3, 13 – 16]. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок, например:
Unit Cmplx;
Interface
tуре
complex = record
re, im : real
end;
Procedure AddC (x, у : complex; var z : complex);
Procedure MulC (x, у : complex; var z : complex);
Если теперь в основной программе написать предложение
Uses Cmplx;
то в программе станут доступными тип COMPLEX и две процедуры – ADDC и MULC из модуля CMPLX.
Отметим, что объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией с использованием дальней модели памяти. Таким образом обеспечивается доступ к подпрограммам из основной программы и других модулей. Следует учесть, что все константы и переменные, объявленные в интерфейсной части модуля, равно как и глобальные константы и переменные основной программы, помещаются компилятором Турбо Паскаля в общий сегмент данных (максимальная длина сегмента 65536 байт). Порядок появления различных разделов объявлений и их количество могут быть произвольными. Если в интерфейсной части объявляются внешние подпрограммы или подпрограммы в машинных кодах, их тела (т.е. зарезервированное слово EXTERNAL, в первом случае, и машинные коды вместе со словом INLINE – во втором) должны следовать сразу за их заголовками в исполняемой части модуля (не в интерфейсной!). В интерфейсной части модулей нельзя использовать опережающее описание.
Исполняемая часть
Исполняемая часть начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части [1 – 3, 13 – 16].
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных (и тип результата для функции), так как они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части, например:
Unit Cmplx;
Interface
type
complex = record
re, im : real
end;
Procedure AddC (x, у : complex; var z : complex);
Implementation
Procedure AddC;
begin
z.re := x.re +Y.re;
z.im := x.im +y.im
end;
end.
Локальные переменные и константы, а также все программные коды, порожденные при компиляции модуля, помещаются в общий сегмент памяти.
Инициирующая часть
Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой, тогда за BEGIN сразу следует признак конца модуля (слово END и следующая за ним точка) [1-3, 13-16].
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы, устанавливаться связи с другими ПК по коммуникационным каналам и т.п.:
Unit FileText;
Interface
Procedure Print(s : string);
Implementation
var
f: text; const
name = 'output.txt'; Procedure Print;
begin
WriteLn(f, s)
end;
{ Начало инициирующей части: }
begin
assign(f, name);
rewrite(f);
{ Конец инициирующей части }
end.
Не рекомендуется делать инициирующую часть пустой, лучше ее опустить: пустая часть содержит пустой оператор, которому будет передано управление при запуске программы. Это часто вызывает проблемы при разработке оверлейных программ.
Программирование клавиатуры
Дополнительные возможности управления клавиатурой реализуются двумя функциями: KeyPressed и ReadKey.
Процедура TextColоr
Определяет цвет выводимых символов. Заголовок процедуры:
Procedure TextColor(Color: Byte);
Процедура GotoXY
Переводит курсор в нужное место экрана или текущего окна. Заголовок процедуры:
Procedure GotoXY(X,Y: Byte);
Здесь X, Y - новые координаты курсора. Координаты задаются относительно границ экрана (окна), т.е оператор
GotoXY(1,1);
означает указание перевести курсор в левый верхний угол экрана (или окна, если к этому моменту на экране определено окно). Обращение к процедуре игнорируется, если новые координаты выходят за границы экрана (окна).
Процедура ClrEOL
Стирает часть строки от текущего положения курсора до правой границы окна (экрана). Положение курсора не меняется.
Процедура DelLine
Уничтожает всю строку с курсором в текущем окне (или на экране, если окно не создано). При этом все строки ниже удаляемой (если они есть) сдвигаются вверх на одну строку.
Процедура InsLine
Вставляет строку: строка с курсором и все строки ниже ее сдвигаются вниз на одну строку; строка, вышедшая за нижнюю границу окна (экрана), безвозвратно теряется; текущее положение курсора не меняется.
Процедуры LowVideo, NormVideo и HighVideo
С помощью этих процедур без параметров можно устанавливать соответственно пониженную, нормальную и повышенную яркость символов. Например:
Uses CRT;
begin
LowVideo;
WriteLn('Пониженная яркость');
NormVideo;
WriteLn('Нормальная яркость');
HighVideo;
WriteLn('Повышенная яркость')
end.
Заметим, что на практике нет разницы между пониженной и нормальной яркостью изображения.
Программирование звукового генератора
Звуковые возможности ПК основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в ПК динамик и заставляют его звучать.
В модуль CRT включено три процедуры, с помощью которых вы сможете запрограммировать произвольную последовательность звуков.
Процедура Sound
Заставляет динамик звучать с нужной частотой. Заголовок процедуры:
Procedure Sound(F: Word);
Здесь F – выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.
Процедура NoSound
Выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.
Использование библиотеки GRAPH
Начиная с версии 4.0, в состав Турбо Паскаля включена мощная библиотека графических подпрограмм Graph, остающаяся практически неизменной во всех последующих версиях [1-3, 5]. Библиотека содержит в общей сложности более 50 процедур и функций, предоставляющих программисту самые разнообразные возможности управления графическим экраном. Для облегчения знакомства с библиотекой все входящие в нее процедуры и функции сгруппированы по функциональному принципу.
Переход в графический режим и возврат в текстовый
Стандартное состояние ПК после его включения, а также к моменту запуска программы из среды Турбо Паскаля соответствует работе экрана в текстовом режиме, поэтому любая программа, использующая графические средства компьютера, должна определенным образом инициировать графический режим работы дисплейного адаптера. После завершения работы программы ПК возвращается в текстовый режим.
Процедуры и функции
Процедура CloseGraph
Завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана. Заголовок:
Procedure CloseGraph;
Процедура RestoreCRTMode
Служит для кратковременного возврата в текстовый режим. В отличие от процедуры CloseGraph не сбрасываются установленные параметры графического режима и не освобождается память, выделенная для размещения графического драйвера. Заголовок:
Procedure RestoreCRTMode;
Функция GetGraphMode.
Возвращает значение типа Integer, в котором содержится код установленного режима работы графического адаптера. Заголовок:
Function GetGraphMode: Integer;
Процедура DetectGraph
Возвращает тип драйвера и режим его работы. Заголовок:
Procedure DetectGraph(var Driver,Mode: Integer);
Здесь Driver - тип драйвера; Mode - режим работы.
В отличие от функции GetGraphMode описываемая процедура возвращает в переменной Mode максимально возможный для данного адаптера номер графического режима.
Функция GetDriverName
Возвращает значение типа String, содержащее имя загруженного графического драйвера. Заголовок:
Function GetDriverName: String;
Функция GetMaxMode
Возвращает значение типа Integer, содержащее количество возможных режимов работы адаптера. Заголовок:
Function GetMaxMode: Integer;
Координаты, окна, страницы
Многие графические процдуры и функции используют указатель текущей позиции на экране, который в отличие от текстового курсора невидим. Положение этого указателя, как и вообще любая координата на графическом экране, задается относительно левого верхнего угла, который, в свою очередь, имеет координаты 0,0. Таким образом, горизонтальная координата экрана увеличивается слева направо, а вертикальная – сверху вниз.
Функции GetMaxX и GetMaxY
Возвращают значения типа Word, содержащие максимальные координаты экрана в текущем режиме работы соответственно по горизонтали и вертикали. Например:
Uses Graph;
var
a,b: Integer;
begin
a := Detect; InitGraph(a, b, '');
WriteLn(GetMaxX, GetMaxY:5);
ReadLn;
CloseGraph
end.
Функции GetX и GetY
Возвращают значения типа Integer, содержащие текущие координаты указателя соответственно по горизонтали и вертикали. Координаты определяются относительно левого верхнего угла окна или, если окно не установлено, экрана.
Процедура GetViewSettings
Возвращает координаты и признак отсечки текущего графического окна. Заголовок:
Procedure GetViewSettings(var Viewlnfo: ViewPortType);
Здесь Viewlnfo – переменная типа ViewPortType. Этот тип в модуле Graph определен следующим образом:
type
ViewPortType = record
x1,y1,x2,y2: Integer; {Координаты окна}
Clip : Boolean {Признак отсечки}
end ;
Процедура MoveTo
Устанавливает новое текущее положение указателя. Заголовок:
Procedure MoveTo(X,Y: integer);
Здесь X, Y – новые координаты указателя соответственно по горизонтали и вертикали.
Координаты определяются относительно левого верхнего угла окна или, если окно не установлено, экрана.
Процедура MoveRel
Устанавливает новое положение указателя в относительных координатах.
Procedure MoveRel(DX,DY: Integer);
Здесь DX.DY – приращения новых координат указателя соответственно по горизонтали и вертикали.
Приращения задаются относительно того положения, которое занимал указатель к моменту обращения к процедуре.
Процедура ClearDevice
Очищает графический экран. После обращения к процедуре указатель устанавливается в левый верхний угол экрана, а сам экран заполняется цветом фона, заданным процедурой SetBkColor. Заголовок:
Procedure ClearDevice;
Линии и точки
Функция GetPixel
Возвращает значение типа Word, содержащее цвет пикселя с указанными координатами. Заголовок:
Function GetPixel(X,Y: Integer): Word;
Здесь X, Y – координаты пикселя.
Процедура LineTo
Вычерчивает линию от текущего положения указателя до положения, заданного его новыми координатами. Заголовок:
Procedure LineTo(X,Y: Integer);
Здесь X, Y – координаты нового положения указателя, они же - координаты второго конца линии.
Процедура LineRel
Вычерчивает линию от текущего положения указателя до положения, заданного приращениями его координат. Заголовок:
Procedure LineRel (DX, DY: Integer);
Здесь DX, DY – приращения координат нового положения указателя. В процедурах LineTo и LineRel линия вычерчивается текущим стилем и текущим цветом.
Процедура GetLineSettings
Возвращает текущий стиль линий. Заголовок:
Procedure GetLineSettings(var Stylelnfo: LineSettingsType)
Здесь Stylelnfo – переменная типа LineSettingsType, в которой возвращается текущий стиль линий.
Тип LineSettingsType определен в модуле Graph следующим образом:
type
LineSettingsType = record
LineStyle: Word; {Тип линии}
Pattern : Word; {Образец}
Thickness: Word {Толщина}
end;
Многоугольники
Дуги, окружности, эллипсы
Краски, палитры, заполнения
Процедура SetColor
Устанавливает текущий цвет для выводимых линий и символов. Заголовок:
Procedure SetColor(Color: Word);
Здесь Color – текущий цвет.
В модуле Graph определены точно такие же константы для задания цвета, как и в модуле CRT.
Функция GetColor
Возвращает значение типа Word, содержащее код текущего цвета. Заголовок:
Function GetColor: Word;
Функция GetMaxColor
Возвращает значение типа Word, содержащее максимальный доступный код цвета, который можно использовать для обращения к SetColor. Заголовок:
Function GetMaxColor: Word;
Функция GetBkColor
Возвращает значение типа Word, содержащее текущий цвет фона. Заголовок:
Function GetBkColor: Word;
Функция GetPaletteSize
Возвращает значение типа Integer, содержащее размер палитры (максимальное количество доступных цветов). Заголовок:
Function GetPaletteSize: Integer;
Процедура GetDefaultPalette
Возвращает структуру палитры, устанавливаемую по умолчанию (в режиме автонастройки). Заголовок:
Procedure GetDefaultPalette(var Palette: PaletteType);
Здесь Palette – переменная типа PaletteType (см. процедуру GetPalette), в которой возвращаются размер и цвета палитры.
Процедура GetFillPattern
Возвращает образец заполнения, установленный ранее процедурой SetFillPattern. Заголовок:
Procedure GetFillPattern(var Pattern: FillPatternType);
Здесь Pattern – переменная типа FillPatternType, в которой возвращается образец заполнения.
Если программа не устанавливала образец с помощью процедуры SetFillPattern, массив Pattern заполняется байтами со значением 255 ($FF).
Процедура FillEllipse
Обводит линией и заполняет эллипс. Заголовок:
Procedure FillEllipse(X,Y,RX,RY: Integer);
Здесь X, Y – координаты центра; RX, RY– горизонтальный и вертикальный радиусы эллипса в пикселях.
Эллипс обводится линией, заданной процедурами SetLineStyle и SetColor, и заполняется с использованием параметров, установленных процедурой SetFillStyle.
Сохранение и выдача изображений
Функция ImageSize
Возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения. Заголовок:
Function ImageSize(X1,Y1,X2,Y2: Integer): Word;
Здесь X1... Y2 – координаты левого верхнего (X1, Y1) и правого нижнего (Х2, Y2) углов фрагмента изображения.
Процедура Getlmage
Помещает в память копию прямоугольного фрагмента изображения. Заголовок:
Procedure Getlmage(X1,Y1,X2,Y2: Integer; var Buf)
Здесь X1...Y2 – координаты углов фрагмента изображения; Buf - переменная или участок кучи, куда будет помещена копия видеопамяти с фрагментом изображения.
Размер Buf должен быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами X1....Y2.
Процедура OutTextXY
Выводит строку, начиная с заданного места. Заголовок:
Procedure OutTextXY (X,Y: Integer; Txt: String);
Здесь X, Y – координаты точки вывода; Txt – выводимая строка. Отличается от процедуры OutText только координатами вывода. Указатель не меняет своего положения.
Функция TextWidth
Возвращает длину в пикселях выводимой текстовой строки. Заголовок:
Function TextWidth (Txt: String): Word;
Учитываются текущий стиль вывода и коэффициенты изменения размеров символов, заданные соответственно процедурами SetTextStyle и SetUserCharSize.
Функция TextHeight
Возвращает высоту шрифта в пикселях. Заголовок:
Function TextHeight(Txt: String): Word;
Заключение
В настоящее время технологиям программирования, то есть подходам, методам и средствам проектирования и разработки программных средств, уделяется значительное внимание, так как они в большой степени определяют качество разрабатываемых программных продуктов.
Данное пособие ориентировано на студентов, освоивших основы алгоритмизации и программирования в рамках дисциплины «Информатика и прграммирование», то есть находящихся в начале своего профессионального обучения, поэтому перед ним не ставилась задача охватить все современные методы и подходы к разработке программного обеспечения. Основной целью учебной практики является выработка устойчивых навыков разделения программ на процедуры и функции, что является сутью процедурного программирования, а также основой для понимания сущности нисходящего структурного проектирования программного обеспечения.
Другим аспектом заданий, выполняемых в рамках практических заданий, является освоение принципов модульного программирования, предполагающего группировку составных частей программы (на данном этапе обучения – процедур и функций) в модули, что также является составной частью структурного программирования. Само понятие модулей неразрывно связано с объектно-ориентированным программированием, использующим иерархию объектов (классов), описанных различных модулях.
Знания и навыки, получаемые студентами в рамках практики, в дальнейшем получат свое развитие в последующих курсах, в которых систематично и подробно рассматриваются современные подходы, методы и средства проектирования и разработки программного обеспечения.
Список литературы
1. Фаронов В.В. Turbo Pascal 7.0: учебный курс. Учебное пособие для ВУЗов. КноРус, 2009 г
2. Фаронов В.В. Turbo Pascal 7.0. практика программирования.(изд:7). КноРус, 2009 г
3. Фаронов В.В. Turbo Pascal. Учебное пособие для ВУЗов. Питер, 2009 г
4. Ван Тассел, Д. Стиль, разработка, эффективность, отладка и испытание программ. М.: Мир, 1981
5. Перминов Р.С. Программирование на языке Паскаль. М.: Мир, 1995 г.
6. Титовская Н.В. Титовский С.Н. Программирование. Методические указания к лабораторным работам Красноярск.: КрасГАУ, 2009 г.
7. Меняев,М.Ф. Информатика и основы программирования : учеб.пособие/ Меняев,М.Ф.. -3-е изд.,стер.. -М.: Омега-Л, 2007. -458 с.
8. Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник. – М.: Финансы и статистика, 2000. – 352 с.
9. Вендров А.М. Практикум по проектированию программного обеспечения экономических информационных систем: Учеб. пособие. – М.: Финансы и статистика, 2002. – 192 с.
10. Орлов С.А. Технологии разработки программного обеспечения: Учебник. – СПб.: Питер, 2002. – 464 с.
11. Одинцов И.О. Профессиональное программирование. Системный подход. – СПб.: БХВ-Петербург, 2002. – 512 с.
12. М. Зелковиц А. Шоу, Дж. Гэннон Принципы разработки программного обеспечения: Пер. с англ. –М.: Мир, 1992. –368 с.
13. А.Я. Архангельский Программирование в Delphi 5 2-е изд., перераб. и дополн. – М.: ЗАО «Издательство БИНОМ», 2000г. 1072с.
14. http://www.citforum.ru/programming/
15. http://www.cyberforum.ru/programming-theory/
16. http://pascal.sources.ru/articles/
ПРИЛОЖЕНИЯ
Приложение 1 Образец титульного листа
Министерство сельского хозяйства Российской Федерации
Красноярский государственный аграрный университет
Институт управления и агробизнеса
Кафедра Информационных систем и технологий в экономике
ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР
Единая система программной документации | ГОСТ 19.002-80 Взамен ГОСТ 19427-74 |
СХЕМЫ АЛГОРИТМОВ И ПРОГРАММ. ПРАВИЛА ВЫПОЛНЕНИЯ | |
United system for program documentation. Flowcharts. Conventions for flowcharting |
Постановлением Государственного комитета СССР по стандартам от 24 апреля 1980 г. № 1867 срок введения установлен
с 01.07. 1981 г.
Настоящий стандарт распространяется на алгоритмы и программы систем программного обеспечения вычислительных машин, комплексов и систем независимо от их назначения и области применения и устанавливает правила выполнения схем алгоритмов и программ, выполняемых автоматическим способом или от руки.
Стандарт полностью соответствует МС ИСО 2636-73.
– Конец работы –
Используемые теги: технологии, программирования0.058
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Технологии программирования
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов