МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ГОУВПО

«ВОРОНЕЖСКАЯ ГОСУДАРСТВЕННАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ»

КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ,

МОДЕЛИРОВАНИЯ И УПРАВЛЕНИЯ

Технология программирования

Методические указания по выполнению

контрольной работы

Для студентов, обучающихся по направлению

230200 – "Информационные системы "

специальности 230201

ФБО

Воронеж 2011

УДК 681.3.06

Технология программирования [Текст] : метод. указания по выполнению контрольной работы / Воронеж. гос. технол. акад.; сост.

, , C. В. Чикунов. – Воронеж : ВГТА, 2011. – 20 с.

Методические указания разработаны в соответствии с требованиями ГОС ВПО подготовки выпускников по направлению 230200– "Информационные системы", Предназначены для закрепления теоретических знаний дисциплин цикла ЕН. В указаниях приведена методика выполнения каждого задания и справочный материал.

Библиогр.: 4 назв.

Составители: доцент ,

профессор Ю. В. БУГАЕВ, доцент C. В. ЧИКУНОВ

Научный редактор профессор Г. В. АБРАМОВ

Рецензент профессор В. Е. МЕЖОВ

(Воронежская государственная лесотехническая академия)

Печатается по решению

редакционно-издательского совета

Воронежской государственной технологической академии

Ó  ,

,

, 2011

Ó ГОУВПО “Воронежская

государственная

технологическая

академия”, 2011

Оригинал-макет данного издания является собственностью Воронежской государственной технологической академии, его репродуцирование (воспроизведение) любым способом без согласия академии запрещается.

НЕ нашли? Не то? Что вы ищете?

Цель работы – ознакомление с методическими указаниями по выполнению контрольной работы курса «Информатика» по теме: «Работа с процедурами и функциями» [1-4] и «Формальные и фактические параметры» [1-4].

Порядок выполнения

1.  Получите у преподавателя номер задания и изучите его.

2.  Ознакомьтесь с методическими указаниями по выполнению и оформлению каждого из заданий контрольной работы.

3.  Выполните работу на листе формата А4. Работа должна быть подписана – следует указать фамилию и инициалы, а также номер группы.

4.  Сдайте работу преподавателю для проверки.

Методические указания

Задание № 1

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

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

Программные модули (подпрограммы) могут быть двух типов: процедуры и функции. Структура их приведена в таблице.\

Структура процедур и функций Таблица

Раздел

Ключевое слово раздела

1. Заголовок

PROCEDURE или FUNCTION

2. Объявление констант

CONST

3. Объявление меток

LABEL

4. Объявление типов

TYPE

5. Объявление переменных

VAR

6. Процедуры, функции

7. Основное тело

begin.. end;

Как видно из таблицы, структура процедур и функций аналогична структуре головной программы. Отличие лишь в заголовке и в том, что программный модуль заканчивается ’;’, а не точкой, как головная программа.

Обращение к функции, определенной, происходит аналогично обращению ко встроенным функциям Pascal’я. Например, при обращении ко встроенной функции синуса, указывается имя функции, а за ним в скобках аргумент: sin(y). Обращение к процедуре аналогично. Однако, есть отличие между процедурой и функцией. Вызов функции обычно производится в выражении (арифметическом или логическом), а вызов процедуры является самостоятельным оператором Pascal.

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

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

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

Рассмотрим логику выполнения следующего примера.

Вычислить сумму ряда:

11+22+33-…+99.

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

В общем случае ab =a*a*…*a, т. е. ab есть произведение b одинаковых сомножителей (a)

Const n = 9;

Var i: byte;

S: real;

{Функция, вычисляющая аb}

Function step (a, b:byte):real;

Var P: real;

I: byte;

Begin

For I := 1 to b do

P := P*a;

Step :=P;

End;

Begin

S :=0;

For i:= 1 to n do

S:= S+ step (i, i);

Writeln (‘ сумма ряда: ‘, S:10:0);

End.

Следует обратить внимание, что в процедуре/функции следует использовать только локальные переменные, описанные в ней же. Исключение - случаи, когда согласно логике задачи использование глобальных переменных. В данном примере переменная цикла описана и в головной программе и в функции step. Следует избегать использования в таком качестве глобальной переменной дабы избежать наведенных ошибок.

Примечание.

Строго говоря, в задании требуется возвести аа, а не ab. Но для повышения функциональности функции, она решена в общем виде. Это оправдано тем, что нет какого-либо усложнения алгоритма, а всего лишь незначительно увеличено количество формальных параметров функции, а именно, вместо одного параметра (а) передается 2 параметра (а, b).

Задание № 2

Для его выполнения задания надо в качестве формальных параметров использовать массивы. Следует помнить, что при описании формального параметра в заголовке процедуры/функции следует указать его имя и тип. Причем, для обозначение типа надо использовать либо ключевое слово языка (real, Char…), либо имя пользовательского типа, присвоенного в разделе type.

Рассмотрим выполнение примера.

Заполнить случайными числами 3 массива a, b, c. Найти общее количество элементов, кратных 7 для всех 3-х массивов.

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

1.  Заполнение случайными числами.

2.  Печать заполненного массива.

3.  Подсчет количества элементов, кратных 7.

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

Const n = 10

Туре Мas= array [1..n] of Integer;

Var a, b,c : Мas;

{Процедура заполнения }

Procedure Zap ( Var d: Мas)

Var I: byte;

Begin

For I := 1 to n do

D[i] := random(100)

End;

{Процедура печати массива }

Procedure Wiw (d: Мas);

Var I: byte;

Begin

For I := 1 to n do

Write(D[i]:5);

Writeln;

End;

{Функция подсчета элементов, кратных 7 }

Function Кl_7 (d: Мas):byte;

Var kl: byte;

I: byte;

Begin

kl:=0;

For I := 1 to b do

If D[i]mod 7 = 0 then inc(kl);

Кl_7 :=kl; {имени функции присваивается значение}

End;

Begin

Zap(a); Wiw (a ); {заполнение и печать массива а}

Zap(b); Wiw (b ); {заполнение и печать массива b}

Zap(c); Wiw (c ); {заполнение и печать массива c}

Writeln( ‘ Всего элементов, кратных 7 : ‘, Кl_7 (a)+

Кl_7 (b)+ Кl_7 (c) );

End.

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

Procedure Zap ( Var d: Мas)

Задание № 3

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

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

Пример выполнения задания № 3.

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

begin

·  c:=1; d:=4; P(c+2* d); writeln (d);

·  c:=1; d:=4; Q(c+2* d); writeln (d);

·  c:=1; d:=4; R(c+2* d); writeln (d);

·  c:=1; d:=4; R(c, d); writeln (d);

В процедуре P используются формальные параметры – значения, следовательно, не зависимо от содержимого процедуры, фактический параметр d не изменится (он останется равным 4).

В процедуре Q формальный параметр y параметр-переменная, он при выполнении процедуры изменяет свое значение, становится равным x+1. При этом x получает значение c+2*d=1+2*4=9. Подставляем значение 9 в выражение: x+1 = 9+1= 10. Это и есть итоговое значение d по возвращении в головную программу.

В процедуре R формальные параметры – переменные, следовательно фактическим параметром не может быть выражение. В этом случае имеет место синтаксическая ошибка. При 2-м вызове процедуры R формальные параметры x и y изначально получают значения c и d, т. е. 1 и 4 соответственно. Параметр y при выполнении процедуры изменяется y:=x+1=1+1=2.

Итак ответом на задание 4 будет:

4,

10,

синтаксическая ошибка,

2.

Задания

Вариант 1.

1.  Вычислить значение Y=еA +еB для вещественных переменных А и В. Вычисление еX оформить в виде функции, используя ее разложение в ряд Тейлора в окрестности точки Х=0:

.

Имя функции выбрать отличным от имени стандартной функции ЕХР.

2.  Ввести с терминала 3 массива a, b, c. Найти скалярные произведения:

(ab); (cb); (ca)

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=-2; d:=4; P(c*d, d); writeln (d);

·  c:=-2; d:=4; Q(c*d, d); writeln (d);

·  c:=-2; d:=4; R(c*d, d); writeln (d);

·  c:=-2; d:=4; R(c, d); writeln (d);

Вариант 2.

1.  Вычислить значение Y=cos(AX+B)*cos(AX-B) для вещественных переменных А, X, В. Вычисление функции cos(z) оформить в виде функции, используя ее разложение в ряд Маклорена:

.

Имя функции выбрать отличным от имени стандартной функции COS.

2.  Заполнить случайными числами 3 матрицы размерностью (n*n). Найти среднеарифметическое для положительных чисел каждой из них.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=5; d:=4; P(c-d, d); writeln (d);

·  c:=5; d:=4; Q(c-d, d); writeln (d);

·  c:=5; d:=4; R(c-d, d); writeln (d);

·  c:=5; d:=4; R(c, d); writeln (d);

Вариант 3

1.  Вычислить значение Y=sin(AX+B)*(1+sin2(AX-B)) для вещественных переменных А, X, В. Вычисление функции SIN оформить в виде функции” используя ее разложение в ряд Маклорена:

Имя функции выбрать отличным от имени стандартной функции SIN.

2.  Заполнить случайными числами 3 массива a, b, c. Найти дисперсию каждого массива. Дисперсия массива x из N элементов рассчитывается по формуле

где М – среднеарифметическое элементов массива x.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=3; d:=0; P(c+d, d); writeln (d);

·  c:=3; d:=0; Q(c+d, d); writeln (d);

·  c:=3; d:=0; R(c+d, d); writeln (d);

·  c:=3; d:=0; R(c, d); writeln (d);

Вариант 4.

1.  Ввести с терминала два значения величины А, а также n и m. Вычислить

, и .

2.  Заполнить случайными числами 3 массива a, b, c. Найти общее количество нулевых элементов для всех 3-х массивов.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=1; d:=4; P(2*c+d, d); writeln (d);

·  c:=1; d:=4; Q(2*c+d, d); writeln (d);

·  c:=1; d:=4; R(2*c+d, d); writeln (d);

·  c:=1; d:=4; R(c, d); writeln (d);

Вариант 5.

1.  По заданным значениям массивов X, Y вычислить :

2.  Ввести с терминала матрицу А размерностью (n*n). Найти сумму элементов любой строки, номер которой будет введен с терминала.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=1; d:=2; P(c+3*d); writeln (d);

·  c:=1; d:=2; Q(c+3*d); writeln (d);

·  c:=1; d:=2; R(c+3*d); writeln (d);

·  c:=1; d:=2; R(c, d); writeln (d);

Вариант 6.

1.  Ввести массив А(5)=( 2.0 , 0, 0.6664, 0, 0.4150) и использовать его для вычисления ln x по формуле

.

2.  Заполнить случайными числами 3 матрицы размерностью (n*n). Найти в каждой из них строку, с наибольшей суммой.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=15: d:=4; P(c+d, d); writeln (d);

·  c:=15; d:=4; Q(c+d, d); writeln (d);

·  c:=15; d:=4; R(c+d, d); writeln (d);

·  c:=15; d:=4; R(c, d); writeln (d);

Вариант 7.

1.  Для треугольника ввести длины сторон и посчитать длины всех его медиан, определяя длину медианы по формуле

.

2.  Заполнить случайными числами 3 массива a, b, c. Найти произведение элементов с четными индексами для каждого массива..

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=6; d:=4; P(d*c+d, d); writeln (d);

·  c:=6; d:=4; Q(d*c+d, d); writeln (d);

·  c:=6; d:=4; R(d*c+d, d); writeln (d);

·  c:=6; d:=4; R(c, d); writeln (d);

Вариант 8.

1.  Написать функцию для вычисления

и вычислить S(n) для n от 12 до 24 с шагом 4.

2.  Заполнить случайными числами 3 массива a, b, c. Найти общее количество четных элементов для всех 3-х массивов.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=5; d:=4; P(5*c+d, d); writeln (d);

·  c:=5; d:=4; Q(5*c+d, d); writeln (d);

·  c:=5; d:=4; R(5*c+d, d); writeln (d);

·  c:=5; d:=4; R(c, d); writeln (d);

Вариант 9.

1.  Написать функцию для вычисления

и вычислить S(n) для n от 1 до 5 с шагом 1.

2.  Заполнить случайными числами 3 массива a, b, c. Найти общее количество элементов, кратных 4, для всех 3-х массивов.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=-5; d:=4; P(c+d, d); writeln (d);

·  c:=-5; d:=4; Q(c+d, d); writeln (d);

·  c:=-5; d:=4; R(c+d, d); writeln (d);

·  c:=-5; d:=4; R(c, d); writeln (d);

Вариант 10.

1.  Написать функцию для определения n при котором сумма ряда будет вычислена с точностью 10-3

2.  Заполнить случайными числами 3 массива a, b, c. Найти сумму отрицательных элементов для всех 3-х массивов.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=1; d:=4; P(c+5*d, d); writeln (d);

·  c:=1; d:=4; Q(c+5*d, d); writeln (d);

·  c:=1; d:=4; R(c+5*d, d); writeln (d);

·  c:=1; d:=4; R(c, d); writeln (d);

Вариант 11.

1.  Написать функцию для определения n при котором сумма ряда будет вычислена с точностью 10-3

2.  Заполнить случайными числами 3 массива a, b, c. Найти среднеарифметическое элементов для всех 3-х массивов.

3.  Определить, что будет выведено на печать в каждом из 4-х вариантов:

Var c, d : integer;

Procedure P (x, y : integer)

begin y:=x+1 end;

Procedure Q (x : integer; var y : integer)

begin y:=x+1 end;

Procedure R (var x, y : integer)

begin y:=x+1 end;

·  c:=11; d:=4; P(c-d, d); writeln (d);

·  c:=11; d:=4; Q(c-d, d); writeln (d);

·  c:=11; d:=4; R(c-d, d); writeln (d);

·  c:=11; d:=4; R(c, d); writeln (d);

Библиографический список

1.  Попов, В. Б. Тurbo Pascal для школьников [Текст] /

. – М. : Финансы и статистика, 2004. – 525 с.

2.  Епанешников, А. М. Программирование в среде Turbo-Pascal 7.0. [Текст] / , . М. : Диалог МИФИ, 2003. – 288 с.

3.  Культин, Н. В. Tupbo-Pascal в задачах и примерах [Текст] / . – СПб. : БХВ Санкт - Петербург, 2005. –156 с.

4.  Марченко, А. И. Программирование в среде Turbo-Pascal 7.0. [Текст] / , . – Киев : ВЕК+, М.: Бином Универсал, 2008. – 496 с.

Учебное издание

Технология программирования

Методические указания по выполнению

контрольной работы

Для студентов, обучающихся по направлениям

230200 – "Информационные системы " и

дневной формы обучения

Составители : МЕДВЕДКОВА Ирина Евгеньевна

БУГАЕВ Юрий Владимирович

ЧИКУНОВ Сергей Владимирович

Подписано в печатьФормат 60´84 1/16.

Усл. печ. л. 1,4. Тираж 50 экз. Заказ С -

ГОУВПО “Воронежская государственная технологическая академия”

(ГОУВПО “ВГТА”)

Отдел полиграфии ГОУВПО “ВГТА”

Адрес академии и отдела полиграфии :

Воронеж, пр. Революции, 19