
М
ИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Программирование
Методические указания и задания для выполнения контрольной работы студентами заочной формы обучения
-
Направление подготовки:
230100 Информатика и вычислительная техника
Профиль:
Автоматизированные системы обработки информации и управления
Разработал:
ст. преподаватель кафедры Автоматизированных систем
Китаева О. И.
Иркутск – 2011
Китаева О.И. Методические указания и задания для выполнения контрольной работы студентами заочной формы обучения: учеб. пособие/ О.И.Китаева. – Иркутск: ИрГТУ, 2011 – 22 с.
Пособие содержит методические указания и задания для выполнения контрольной работы студентами, обучающимися по направлению 230100 «Информатика и вычислительная техника», профиль «Автоматизированные системы обработки информации и управления». Методические указания содержат теоретические материалы, необходимые для выполнения задания, требования к оформлению разделов контрольной работы.
Содержание контрольной работы
В процессе изучения дисциплины «Программирование» студенты 1 курса заочной формы обучения выполняют контрольную работу. Контрольная работа должна содержать результаты программной реализации двух задач, первая задача рассматривает работу с матрицами, вторая - работу с массивами записей. При написании программы обязательно использовать процедуры и функции. Реализацию программ рекомендуется выполнять в консольном приложении среды Delphi. Для каждой задачи в контрольной работе должны быть предусмотрены следующие разделы:
Постановка задачи
Таблица спецификаций глобальных переменных
Таблица спецификаций процедур и функций
Блок-схема алгоритма решения задачи
Тесты
Листинг программы
В конце контрольной работы необходимо привести список использованной литературы.
Выбор варианта задания
Номер индивидуального задания определяется преподавателем на установочной сессии. В случае отсутствия студента на установочной сессии по уважительной причине, для определения номера варианта необходимо сложить последнюю цифру номера зачетной книжки с числом 10.
Оформление работы
Контрольная работа должна быть напечатана на листах формата А4, шрифт Times New Roman, размер шрифта – 14, межстрочный интервал – одинарный. В приложении приведен пример оформления титульного листа контрольной работы.
Теоретические сведения
Первые шаги по изучению программной среды Delphi наиболее эффективны в консольном приложении, т.к. там нет отвлекающих элементов управления и код программы максимально прост.
Для создания консольного приложения следует выбрать пункт меню Delphi – File, затем, выбирая последовательно: New – Other - Console Аpplication. Объект Console Аpplication, представляющий собой Console Wizard – Мастер консольного приложения. При выборе этого объекта, будет создан новый проект, состоящий из одного файла с расширением dpr. Этот файл и является консольной программой. Созданный Мастером код подобен заготовке обычной программы на языке Pascal. Единственным отличием является директива $APPTYPE, которая значением CONSOLE сообщает компилятору, что Delphi-программа работает в консольном режиме.
Структура программы консольного приложения Delphi представлена ниже.
program Project1;
{$APPTYPE CONSOLE} //директива компилятора, указывает на работу в консольном приложении
// Раздел объявлений и соглашений
uses SysUtils; // используемые библиотеки
label //объявление меток
type //объявление типов
var //объявление переменных
//Раздел процедур и функций
//Раздел основного блока
begin
end.
Во всех без исключения языках программирования предусмотрена возможность комментирования строк исходного кода. В Delphi возможны два варианта оформления комментариев:
1. Отдельная строка, начинающаяся с двух наклонных черт //:
// Текст комментария
2. Весь текст, заключенный в фигурные скобки {} или в круглые скобки
с символами звездочек (**):
{Текст комментария}
(*Текст комментария *)
Текст комментария пропускается компилятором и не оказывает влияния на работу программы.
Данные, обрабатываемые в программе, подразделяются на переменные, константы и литералы. Переменные объявляются в разделе объявления переменных и получают свои значения в процессе выполнения программы, значения переменных можно изменять.
Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы. К константам и переменным можно обращаться по именам (идентификаторам). Литерал не имеет идентификатора и представляется в тексте программы непосредственно значением.
Каждый элемент данных принадлежит к определенному типу, при этом тип переменной указывается при ее описании, а тип константы и литерала распознается компилятором автоматически в зависимости от указанного значения. Тип определяет:
возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу;
внутреннюю форму представления данных в ЭВМ;
операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.
В Delphi предусмотрены стандартные и структурированные (пользовательские) типы данных. Изучение Delphi следует начать с рассмотрения типов данных, и правил записи выражений, затем перейти к изучению операторов языка. При решении задач контрольной работы, кроме стандартных типов данных используются пользовательские типы данных – массивы и записи.
Массив – набор последовательно индексированных элементов одного и того же типа. Каждый элемент имеет уникальный номер (индекс), с помощью которого к элементу массива можно обращаться как к переменной.
Различают статические и динамические массивы.
Тип статический массив задается следующим образом:
type
<имя типа> = array[<список индексных типов>] of <базовый тип>;
<имя типа> - любой правильный идентификатор;
<базовый тип> - тип, назначаемый каждому элементу массива.
Например:
type Tw= array[1..10] of integer;
var w: Tw;
Двумерный массив можно представить как массив массивов,
Например:
var M1= array[1..10] of array[1..5] of integer;
Аналогичное объявление –
var M1= array[1..10, 1..5] of integer;
Массивы в целом участвуют только в операциях присваивания. При этом все элементы одного массива копируются в другой. Например, если два массива A и B объявлены одинаково, возможно действие A := B;
Динамические массивы описывают без указания диапазона значений индексов, например:
var A: array of integer;
B: array of array of Byte;
Фактически это означает, что переменные A и B являются указателями на пока еще не выделенную область памяти. Выделение памяти для этих массивов происходит на этапе выполнения c помощью процедуры SetLength.
Например: SetLength(A, 10); массиву А выделяется память для 10 элементов массива, значение индекса начинается с нуля.
Выполняя контрольную работу можно использовать как статические, так и динамические массивы.
В практике программирования часто встречаются данные, естественным образом состоящие из других данных. В этом случае используется тип – запись. Запись - составной тип данных, состоящий из фиксированного числа элементов одного или нескольких типов. Описание типа записи начинается словом record и заканчивается словом end. Между ними заключен список элементов, называемых полями, с указанием идентификаторов полей и типа каждого поля: Идентификаторы полей должны быть уникальными только в пределах записи. Допускается вложение записей друг в друга. В следующем примере переменная employee - запись, состоящая из пяти полей, тип записи имеет идентификатор TRec
type
TRec=record
surname:string[20]; // фамилия
name:string[15]; // имя
age:byte; // возраст
standing:byte; // стаж
adds:string[30]; // адрес
end;
var
employee:TRec;
Доступ к содержимому записи осуществляется посредством составного имени - идентификаторов переменной и поля, разделенных точкой. Обращение к полям записи несколько неудобно, особенно если идентификаторы полей имеют длину более 5 символов. Для решения этой проблемы в языке Delphi использован оператор with, который имеет формат:
with <запись> do
<оператор>;
Указав имя записи в операторе with, можно работать с именами ее полей как с обычными переменными, т.е. без указания идентификатора записи перед идентификатором поля:
with employee do
begin
surname:= 'Иванов';
name:= 'Иван';
age::= 19;
end;
Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип.
Логически выделенную часть программы принято называть подпрограммой. Если программа предназначена для решения задачи в целом, то подпрограмма используется для выполнения логически завершенной последовательности действий.
В среде программирования Delphi представлены две разновидности подпрограмм – процедуры и функции. Принципиальное отличие между подпрограммами заключается в их оформлении и способе передачи данных в подпрограмму и обратно. Все подпрограммы делятся на стандартные (определенные в языке) и создаваемые программистом (пользовательские).
Структура подпрограммы во многом повторяет структуру программы и в самом общем случае состоит из: заголовка подпрограммы; локальных описаний и тела подпрограммы.
Заголовок процедуры имеет вид: Procedure <имя> (<параметры>);
Заголовок функции: Function <имя> (<параметры>): <тип>;
Слова Procedure и Function являются зарезервированными. В общем виде подпрограмма «процедура» определяется следующим образом:
Procedure <Имя процедуры>(<Список формальных параметров>);
<Директивы>;
<Локальные описания>
begin
<Операторы процедуры>
end;
Вызов процедуры осуществляется указанием имени процедуры со списком фактических параметров. Формальные параметры в списке разделяются точкой с запятой.
Для работы с подпрограммами используется специальная область памяти стек, который работает по принципу: первым вошел – последним вышел. Стек используется при вызове подпрограмм. В него записываются адрес возврата в вызывающую процедуру после окончания работы подпрограммы и передаваемые в подпрограмму параметры. В стеке также отводится место для всех внутренних переменных процедуры. При вызове подпрограммы происходит заполнение стека, а при выходе из процедуры из него исключается область памяти, которая была выделена процедуре при ее вызове. Одна процедура может вызвать другую, та – следующую и т.д., при этом происходит заполнение стека, а при выходе из каждой процедуры – его освобождение.
Подпрограмма «функция» определяется следующим образом:
Function <Имя функции>(<Список формальных параметров>): <тип результата>;
<Директивы>;
<Локальные описания> ;
begin
<Операторы функции> ;
end;
Вызов подпрограммы «функции» осуществляется указанием в правой части оператора присваивания имени функции со списком фактических параметров. Внутри функции обязательно нужно присвоить какое–то значение имени функции. Кроме имени функции можно применять ключевое слово Result, которое можно использовать без ограничений, в то время как использование имени функции в выражении приводит к повторному вызову этой же функции, т.е. рекурсии.
Следующие примеры демонстрируют нахождение максимального из двух чисел, используя понятие процедуры и понятие функции.
Пример 1
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
Пример 2
function MaxNumber(a,b: integer): integer;
var max: integer;
begin
if a>b then max:=a else max:=b;
Result:= max;
end;
Существует пять видов формальных параметров:
Параметры–значения. Значения таких параметров передаются через стек и в вызывающую программу они не возвращаются. Перед параметрами-значениями не ставится никаких ключевых слов. Параметрами-значениями не могут быть файловые переменные и структуры, их содержащие.
Параметры–переменные. В этом случае через стек в подпрограмму передается адрес фактического параметра, и поэтому изменение этого параметра в подпрограмме приводит к его изменению и для вызывающей программы. Параметрам-переменным в заголовке подпрограммы предшествует служебное слово Var.
Параметры–константы. Параметры-константы подобны параметрам-переменным, но они доступны только для чтения и их нельзя передавать в другие подпрограммы, как параметры-переменные. Параметрам-константам в заголовке подпрограммы предшествует служебное слово Const.
Выходные параметры. Эти параметры имеют те же свойства, как и параметры-переменные, однако им не присваиваются какие–либо значения при вызове подпрограммы. Выходным параметрам в заголовке подпрограммы предшествует служебное слово Out.
Нетипированные параметры. В этом случае тип параметра не указывается. При этом через стек передается адрес фактического параметра, а внутри подпрограммы по этому адресу можно расположить переменную любого типа.
При использовании подпрограмм нужно придерживаться следующих правил:
фактическими параметрами при вызове подпрограмм могут быть переменные, константы и целые выражения;
формальными параметрами при описании подпрограмм могут быть только имена переменных;
фактические и формальные параметры должны быть согласованы по типу, порядку следования и количеству.
Имена, описанные в заголовке или разделе описаний процедуры или функции, называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Формальные параметры процедур и функций всегда являются локальными переменными для соответствующих блоков.
Основные правила работы с глобальными и локальными именами можно сформулировать так:
локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен;
имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
Внимание: программу в консольном приложении Delphi обычно заканчивают процедурами Readln без параметра или Sleep(n), где n –время задержки экрана в миллисекундах, при использовании процедуры Readln; состояние экрана будет задержано до нажатия клавиши «Enter».
Контрольные вопросы
Структура программы консольного приложения Delphi
Типы данных программной среды Delphi
Правила написания арифметических и логических выражений
Базовые операции языка. Приоритеты выполнения операций
Оператор присваивания
Процедуры ввода-вывода
Условный оператор
Оператор цикла FOR
Оператор цикла WHILE
Оператор цикла REPEAT
В чем особенность выполнения вложенных циклов?
Массивы
Как осуществляется доступ к отдельному элементу двумерного массива?
Записи
Понятие процедуры и функции
Отличие процедур и функций
Вызов процедур и функций
Формальные и фактические параметры процедур и функций
Глобальные и локальные объявления переменных
Назовите способы передачи параметров в подпрограммы и их особенности.
Пример выполнения задания
Задача 1 Работа с матрицами