ГОУ ВПО «Уральский государственный технический университет-УПИ»
ТОМАШЕВИЧ В.Г.
ИНФОРМАТИКА
(ОСНОВЫ ПРОГРАММИРОВАНИЯ)
Методические рекомендации по выполнению
контрольных и лабораторных работ
Часть 1
Екатеринбург 2007
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ.............................................................................................................................................. 3
Порядок выполнения контрольной работы................................................................................ 3
Cодержание пояснительной записки........................................................................................... 3
Контрольная работа № 1..................................................................................................................... 4
ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ............................................................ 4
Варианты............................................................................................................................................. 4
Контрольныe вопросы...................................................................................................................... 5
Контрольная работа № 2..................................................................................................................... 6
ОРГАНИЗАЦИЯ РАЗВЕТВЛЕНИЙ.............................................................................................. 6
Варианты............................................................................................................................................. 6
Контрольныe вопросы...................................................................................................................... 7
Контрольная работа № 3..................................................................................................................... 8
ОРГАНИЗАЦИЯ ЦИКЛОВ И РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ.................. 8
Варианты............................................................................................................................................. 8
Контрольныe вопросы...................................................................................................................... 9
Контрольная работа № 4..................................................................................................................... 9
ОРГАНИЗАЦИЯ ЦИКЛОВ И ОБРАБОТКА МАТРИЦ............................................................. 9
Варианты............................................................................................................................................. 9
Контрольныe вопросы................................................................................................................... 10
Список использованной и рекомендуемой литературы........................................................... 10
ПРИЛОЖЕНИЕ 1................................................................................................................................. 11
Вариант оформления отчета по контрольной работе N 4................................................... 11
ОРГАНИЗАЦИЯ ЦИКЛОВ И ОБРАБОТКА МАТРИЦ........................................................... 11
ЛИСТИНГ ПРОГРАММЫ Work4.pas........................................................................................ 20
ПРИЛОЖЕНИЕ 2................................................................................................................................. 22
пример выполнения контрольной работы № 1............................................................................ 22
ЛИСТИНГ ПРОГРАММЫ Work1.pas........................................................................................ 22
ПРИЛОЖЕНИЕ 3................................................................................................................................. 25
пример выполнения контрольной работы № 2............................................................................ 25
ЛИСТИНГ ПРОГРАММЫ Work2.pas........................................................................................ 25
ПРИЛОЖЕНИЕ 4................................................................................................................................. 28
пример выполнения контрольной работы № 3............................................................................ 28
ЛИСТИНГ ПРОГРАММЫ Work3.pas........................................................................................ 28
ПРИЛОЖЕНИЕ 5................................................................................................................................. 32
пример выполнения контрольной работы № 4............................................................................ 32
ПРИЛОЖЕНИЕ 6................................................................................................................................. 34
Основные функции среды ТУРБО ПАСКАЛЬ......................................................................... 34
ПРИЛОЖЕНИЕ 7................................................................................................................................. 36
Обозначения основных символов, используемых при составлении
блок-схем алгоритмов (ГОСТ 19.003-80)................................................................................. 36
ПРИЛОЖЕНИЕ 8................................................................................................................................. 37
Директивы компилятора................................................................................................................ 37
ПРИЛОЖЕНИЕ 9................................................................................................................................. 38
Модуль CRT..................................................................................................................................... 38
ВВЕДЕНИЕ
В предлагаемом пособии содержатся варианты первых четырех контрольных (лабораторных) работ по курсу «ИНФОРМАТИКА(ОСНОВЫ ПРОГРАММИРОВАНИЯ), часть 1»
, пример оформления контрольной работы № 4 в виде отчета (см. Прил. 1), методические указания и образцы машинных листингов базовых вариантов всех контрольных работ (см. Прил.2-5). В приложении 6 дано описание основных функций среды ТУРБО ПАСКАЛЯ, в приложении 7 - основные обозначения, используемые для построения блок-схем алгоритмов. В приложении 8 приведены основные директивы компилятора ТУРБО ПАСКАЛЬ, в приложении 9 - описание стандартного модуля CRT
.
В конце каждой контрольной работы дается ориентировочный перечень вопросов для самоподготовки.
Методические рекомендации предназначены для студентов заочной формы обучения, начинающих
изучение программирования, и могут быть использованы студентами очной и вечерней форм обучения при подготовке к лабораторным работам.
Порядок выполнения контрольной работы
1. Внимательно прочитать и уяснить
условие задачи, которую предстоит решить.
2.
Ознакомиться с необходимым теоретическим материалом - см. Список рекомендуемой литературы
.
3. Изучить нужное приложение для соответствующей контрольной работы и, особенно, листинг программы
(для полного понимания, возможно, даже пропустить его через набор на компьютере, редактирование и счет - см. Прил. 6). Для этого достаточно персонального компьютера типа
IBM
PC
, начиная с процессора i286
.
4. Подготовить свой
вариант текста программы и попробовать решить его с помощью компьютера. Обычно с первого раза решение не удается - это нормально. Нужно повторить редактирование и счет до получения нужного результата.
5. Сделать отчет.
Каждый отчет оформляется в виде пояснительной записки (см. Прил. 1) и должен содержать следующие элементы:
¨ титульный лист;
¨ текст пояснительной записки в машинописном или рукописном виде;
¨ cписок использованной литературы;
¨ машинный листинг программы на языке PASCAL - в виде приложения.
Cодержание пояснительной записки
1. Постановка задачи.
2. Краткие теоретические сведения об особенностях применяемых операторов и методов (теоретическое введение).
3. Описание программы:
¨ общие сведения (язык программирования, операционная система, тип процессора);
¨ описание логической структуры программы;
¨ описание алгоритма решения задачи (в виде блок-схемы);
¨ описание входных и выходных данных программы;
¨ описание подпрограмм;
¨ перечень аномалий и допустимых значений входных данных (тестовые примеры).
Контрольная работа № 1
ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ
ЦЕЛЬ РАБОТЫ
. Вычислить заданное смешанное арифметическое выражение для данных в форматах REAL (переменные a,b)
и INTEGER (остальные переменные)
.
В программе должна быть предусмотрена, как минимум, одна процедура или функция. Исходные данные должны вводиться с проверкой на область допустимых значений - см. Прил. 2.
Варианты
1) 2*c - d + 2) c + 4*d -
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
- 1 1 -
3) -2*c + d*82 4) lg(2*c) + d - 52
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
tg( - 1) + 1
5) arctg(c/4) - d*62 6) -2*c - ln(d) + 53
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a*a - 1 - 1
7) 2*c - lg(d/4) 8) tg ( c ) - d*23
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a*a - 1 2*a - 1
9) 2*c - d/23 10) 4*c + d - 1
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
ln(1 - ) c - tg
11) 2*c - d* 12) - d + 2
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
c + a - 1 d + a*a - 1
13) arctg(c - d/2) 14) 4*lg ( c ) - d/2 + 23
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
2*a - 1 a*a - 1
15) c*tg(b + 23) 16) c/d + ln(3*a/2)
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a/2 -4*d - 1 c - a + 1
17) 2*c + lg(d)*51 18) 2*c + ln(d/4) + 23
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
d - a - 1 a*a - 1
19) 42*c - d/2 + 1 20) arctg(2*c)/d + 2
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a*a - ln(b-5) d - a*a - 1
21) arctg(12/c) + 73 22) 2*c/a - d*d
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a*a - 1 d + tg(a - 1)
23) + d -4*a 24) + b -
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
1 + a*b b*a -1
25) -25/a + c - tg(b) 26) lg(4*a - 1) + b/2
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
1 + c*b/2 b*c - 5
27) 8*lg(b + 1) - c 28) 4*a - ln(b - 1)
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
a/2 + b*c c/b + 18*a
29) arctg(4*b)/c - 1 30) arctg(b) + c*b - a/4
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
12*c + a - b a*b - 1
31) a + - 32) - + a
¾¾¾¾¾¾¾ ¾¾¾¾¾¾¾¾
4*b*a + 1 2*a*c - 1
Контрольныe вопросы
1. Особенности выполнения изучаемых операторов: присваивания, ввода-вывода.
2. Процедуры и функции. Формальные и фактические параметры.
3. Арифметические выражения: знаки арифметических операций, стандартные функции.
4. Диапазон допустимых значений для вещественных (REAL
) и целочисленных (INTEGER
)
переменных.
5. Обработка аварийных ситуаций.
Контрольная работа № 2
ОРГАНИЗАЦИЯ РАЗВЕТВЛЕНИЙ
ЦЕЛЬ РАБОТЫ
. Вычислить заданное целочисленное выражение для данных a,
b
в формате INTEGER
, используя оператор IF
. Результат Х
- тоже целочисленный (INTEGER
или LONGINT
).
В программе должна быть предусмотрена, как минимум, одна процедура или функция. Исходные данные и результат должны проверяться на область допустимых значений - см. Прил.3.
Варианты
1) 2)
3) 4)
5) 6)
7) 8)
9) 10)
11) 12)
13) 14)
15) 16)
17) 18)
19) 20)
21) 22)
23) 24)
25) 26)
27) 28)
29) 30)
31) 32)
Контрольныe вопросы
1. Особенности выполнения изучаемых операторов: условные, ввода-вывода.
2. Процедуры и функции. Формальные и фактические параметры.
3. Арифметические выражения: знаки арифметических операций, стандартные функции.
4. Диапазон допустимых значений для целочисленных переменных (INTEGER
или LONGINT
).
5. Обработка аварийных ситуаций.
Контрольная работа № 3
ОРГАНИЗАЦИЯ ЦИКЛОВ И РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ
ЦЕЛЬ РАБОТЫ
. Задав одномерный массив целочисленных данных А
в одном из заданных форматов (BYTE, WORD, SHORTINT, INTEGER или LONGINT)
, реализовать обработку массива, как указано в варианте. Длина массива N<=20
. Исходные данные задать самостоятельно, учитывая формат элементов массива A
.
В программе должны быть предусмотрены процедуры ввода-вывода элементов массива А
и его обработки. Исходные данные должны вводиться с проверкой на область допустимых значений. Тип результата определяется из контекста задачи (например, для варианта 14 целесообразно результат сделать типа REAL,
SINGLE,
DOUBLE
или EXTENDED
) - см. Прил. 4.
Варианты
1 - BYTE; 2 - WORD; 3 - SHORTINT; 4 - INTEGER; 5 - LONGINT.
Найти, сколько элементов массива A={a[i]}
удовлетворяют условию:
с
<= a[i] <= d.
6 - BYTE; 7 - WORD; 8 - SHORTINT; 9 - INTEGER.
Найти произведение элементов массива A={a[i]}
, удовлетворяющих условию:
с
<= a[i] <= d.
10 - LONGINT; 11 - SHORTINT; 12 - INTEGER.
Найти, сколько отрицательных элементов массива A={a[i]}
удовлетворяют условию:
с
<= a[i] <= d.
13 - SHORTINT; 14 - INTEGER.
Найти сумму кубов всех отрицательных элементов массива A={a[i]}.
15 - LONGINT; 16 - SHORTINT; 17 - INTEGER.
Найти, сколько положительных элементов массива A={a[i]}
удовлетворяют условию:
с
<= a[i] <= d.
18 - SHORTINT; 19 - INTEGER.
Найти сумму квадратов всех положительных элементов массива A={a[i]}.
20 - BYTE; 21 - WORD.
Найти произведение квадратов элементов массива A={a[i]}
, удовлетворяющих условию: a[i] >= c .
22 - SHORTINT; 23 - INTEGER; 24 - LONGINT.
Найти, сколько положительных, отрицательных и нулевых элементов в массиве A={a[i]}.
25 - SHORTINT; 26 - INTEGER.
Найти произведение квадратов элементов массива A={a[i]}
, удовлетворяющих условию: a[i] >= c .
27 - SHORTINT; 28 - INTEGER.
Найти произведение последних L
отрицательных элементов в массиве A={a[i]}.
29 - BYTE; 30 - WORD; 31 - SHORTINT; 32 - INTEGER.
Найти сумму первых K
элементов массива A={a[i]}
, удовлетворяющих условию:
с
<= a[i] <= d.
Контрольныe вопросы
1. Особенности выполнения изучаемых операторов: циклов, условных, ввода-вывода.
2. Процедуры и функции. Формальные и фактические параметры. Передача в параметрах массивов.
3. Размерность массивов. Контроль за корректным распределением памяти для массивов.
4. Диапазон допустимых значений для целочисленных переменных: BYTE, WORD, SHORTINT, INTEGER, LONGINT
.
5. Диапазон допустимых значений для вещественных переменных: REAL,
SINGLE,
DOUBLE
или EXTENDED
.
Контрольная работа № 4
ОРГАНИЗАЦИЯ ЦИКЛОВ И ОБРАБОТКА МАТРИЦ
ЦЕЛЬ РАБОТЫ
. Задав двумерный массив вещественных данных (матрицу А)
, реализовать его обработку, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику задачи.
В программе должны быть предусмотрены процедуры ввода-вывода элементов массива А
и его обработки - см. Прил. 1.
Варианты
Задана квадратная матрица A размером N x N (N<=10)
, состоящая из действительных элементов.
1) Найти среднее арифметическое элементов каждого из четных столбцов этой матрицы.
2) Найти среднее арифметическое элементов каждого из нечетных столбцов этой матрицы.
3) Найти среднее арифметическое элементов каждой из строк этой матрицы.
4) Найти среднее арифметическое элементов каждой из четных строк этой матрицы.
5) Найти среднее арифметическое элементов каждой из нечетных строк этой матрицы.
6) Найти среднее арифметическое из всех отрицательных элементов этой матрицы.
7) Найти среднее арифметическое из всех положительных элементов этой матрицы.
8) Найти характеристику каждой ее строки (сумму положительных четных элементов в каждой строке).
9) Найти характеристику каждого ее столбца (сумму модулей отрицательных нечетных элементов в каждом столбце).
10) Найти сумму и произведение всех ее положительных элементов.
11) Найти сумму и произведение всех ее отрицательных элементов.
12) Найти сумму всех ее положительных и произведение всех ее отрицательных элементов.
13) Найти сумму всех ее отрицательных и произведение всех ее положительных элементов.
14) Найти сумму всех ее элементов и заменить ею все диагональные элементы этой матрицы.
15) Найти произведение всех ее элементов и заменить им все диагональные элементы этой матрицы.
16) Найти сумму всех ее положительных элементов и заменить ею все диагональные элементы этой матрицы.
17) Найти произведение всех ее положительных элементов и заменить им все диагональные элементы этой матрицы.
18) Найти сумму всех ее отрицательных элементов и заменить ею все диагональные элементы этой матрицы.
19) Найти произведение всех ее отрицательных элементов и заменить им все диагональные элементы этой матрицы.
20) Найти минимальное из чисел, встречающееся в данной матрице более одного раза.
21) Найти максимальное из чисел, встречающееся в данной матрице более одного раза.
22) Найти сумму наибольших элементов каждой строки матрицы и их координаты.
23) Найти сумму наименьших элементов каждой строки матрицы и их координаты.
24) Найти произведение наибольших элементов каждой строки матрицы и их координаты.
25) Найти произведение наименьших элементов каждой строки матрицы и их координаты.
26) Найти сумму наибольших элементов каждого столбца матрицы и их координаты.
27) Найти сумму наименьших элементов каждого столбца матрицы и их координаты.
28) Найти произведение наибольших элементов каждого столбца матрицы и их координаты.
29) Найти произведение наименьших элементов каждого столбца матрицы и их координаты.
30) Найти, сколько положительных элементов содержит данная матрица в каждой строке.
31) Найти, сколько отрицательных элементов содержит данная матрица в каждой строке.
32) Найти, сколько положительных элементов содержит данная матрица в каждом столбце.
Контрольныe вопросы
1. Особенности выполнения изучаемых операторов: циклов, условных, ввода-вывода.
2. Процедуры и функции. Формальные и фактические параметры. Передача в параметрах массивов.
3. Размерность массивов. Контроль за корректным распределением памяти для массивов.
4. Двумерные массивы. Строки и столбцы. Расположение в памяти двумерных массивов.
Список использованной и рекомендуемой литературы
1. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. М., 1988.
2. Абрамов С.А., Зима Е.В. Начала информатики. М., 1989
.
3. Вирт Н. Алгоритмы + структуры данных = программы. М., 1985.
4. Грогоно П. Программирование на языке Паскаль. М., 1982.
5.
Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М., 1991.
6. Йенсен К., Вирт Н. Паскаль: руководство для пользователя. М., 1989.
7. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. М., 1986.
8. Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., 1992.
9. Пильщиков В.Н. Сборник упражнений по языку Паскаль. М., 1989.
10. Прайс Д. Программирование на языке Паскаль: Практическое руководство. М., 1987.
11.
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М., 1997.
12.
Фаронов В.В. Турбо Паскаль 7.0. Практика программирования. Учебное пособие. М., 1997.
13. Фирменная документация и компьютерные справочники (файлы помощи типа HELP).
ПРИЛОЖЕНИЕ 1
Вариант оформления отчета по контрольной работе
N 4
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОУ ВПО «Уральский государственный университет – УПИ»
ОТЧЕТ
ПО КОНТРОЛЬНОЙ РАБОТЕ N 4
ОРГАНИЗАЦИЯ ЦИКЛОВ И ОБРАБОТКА МАТРИЦ
Выполнил: студент гр. М-123
Иванов Н.К.
Проверил:
Екатеринбург 2003
ПОСТАНОВКА ЗАДАЧИ
Вариант 1.
Задана квадратная матрица A размером N x N (N<=10)
, состоящая из действительных элементов. Найти среднее арифметическое элементов каждого из столбцов этой матрицы.
ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ
Для обработки матриц в задании применены вложенные операторы
ЦИКЛА СО СЧЕТЧИКОМ :
for
<идентификатор>:=
<нач. значение счетчика> to
< конечное значение счетчика > do
<оператор>
Для проверки размерности матрицы (k<=N) применен оператор
ЦИКЛА ПОВТОРИТЬ :
Repeat
<оператор>;
...
<оператор>;
Until
<условие выхода из цикла>;
Ввод фактического количества строк и столбцов квадратной матрицы A
(k<=
N
), ввод-вывод элементов матрицы А
и вычисление среднего арифметического каждого из столбцов матрицы реализовано через соответствующие процедуры: InputN,
I.
nputMatrix,
OutputMatrix, Evaluate
с параметрами (см. Листинг программы Work4.
pas
). Выходные параметры передаются через атрибут Var
.
Используются две стандартные подпрограммы модуля CRT:
¨ Для очистки экрана - процедура ClrScr.
¨ Для ввода символа (в данном случае n
или N
) - функция ReadKey.
ОПИСАНИЕ ПРОГРАММЫ
Программа написана на алгоритмическом языке ПАСКАЛЬ и реализована в среде Bo
rland Pascal-7.0
Windows 95/
MS
DOS-7.0
, процессор Pentium
. Программа состоит из главной программы и четырех подпрограмм (
InputN,
InputMatrix,
OutputMatrix,
Evaluate)
, объединенных в единый модуль WORK4.
pas
. Из главной программы вызываются внешние подпрограммы стандартного модуля CRT
: ClrScr,
ReadKey.
ОПИСАНИЕ ЛОГИЧЕСКОЙ СТРУКТУРЫ
|
||
Описание алгоритма решения задачи - см. Стр. 18 - 22.
ОПИСАНИЕ ВХОДНЫХ ДАННЫХ
k
- фактическое количество строк и столбцов матрицы (k<=
N
) - переменная типа INTEGER
;
A -
квадратная матрица, состоящая из вещественных элементов (типа REAL
):
A: array[1..N,1..N] of real
.
ОПИСАНИЕ ВЫХОДНЫХ ДАННЫХ
Stolb:
array[1..
N]
of
real
- локальный массив средних арифметических значений элементов каждого из столбцов матрицы A -
вычисляется и выводится в процедуре Evaluate.
ОПИСАНИЕ ПОДПРОГРАММ
Процедура InputN (Var k:integer)
Служит для ввода фактического количества строк и столбцов квадратной матрицы A
(1<
k<=
N
).
Процедура InputMatrix (k:integer; Var A:arrayA)
Служит для ввода значений вещественных элементов матрицы A
типа ArrayA (
ArrayA=
array[1..
N,1..
N]
of
real)
длиной k*
k.
Процедура OutputMatrix (k:integer; A:arrayA)
Служит для вывода значений вещественных элементов квадратной матрицы A
типа ArrayA
длиной k*
k.
Процедура Evaluate (k:integer; A:arrayA)
Служит для вычисления и выдачи на экран среднего арифметического каждого из столбцов квадратной матрицы A
типа ArrayA
длиной k*
k.
ТЕСТОВЫЕ ПРИМЕРЫ
Введите значение N=====>3
------- Исходная матрица -------
1111.00 2222.00 3333.00
1111.00 2222.00 3333.00
1111.00 2222.00 3333.00
------- Cреднее арифметическое каждого из столбцов -------
Cтолбец [1]= 1111.00
Cтолбец [2]= 2222.00
Cтолбец [3]= 3333.00
Введите значение N=====>2
------- Исходная матрица -------
1.00 2.00
3.00 4.00
------- Cреднее арифметическое каждого из столбцов -------
Cтолбец [1]= 2.00
Cтолбец [2]= 3.00
Введите значение N=====>4
------- Исходная матрица -------
111222.00 222333.00 333444.00 444555.00
555.00 555666.00 666777.00 777888.00
888999.00 999.00 111999.00 222888.00
333777.00 444666.00 555555.00 123456.00
------- Cреднее арифметическое каждого из столбцов -------
Cтолбец [1]= 333638.25
Cтолбец [2]= 305916.00
Cтолбец [3]= 416943.75
Cтолбец [4]= 392196.75
Список использованной литературы
1. Абрамов С.А., Зима Е.В. Начала информатики. М., 1989.
2. Вирт Н. Алгоритмы + структуры данных = программы. М., 1985.
3. Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М., 1991.
4. Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., 1992.
5. Прайс Д. Программирование на языке Паскаль: Практическое руководство. М., 1987.
6. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М., 1997.
7. Фирменная документация и компьютерные справочники (файлы помощи типа HELP).
ЛИСТИНГ ПРОГРАММЫ
Work4.pas
Program Work4;
Uses
CRT;
Const
N=10;
Type
ArrayA=array [1..N,1..N] of real;
Var
k : integer;
A: ArrayA;
ch : char;
{
ввод фактического количества k
строк и столбцов квадратной матрицы A }
Procedure InputN(Var k:integer);
Begin
Repeat
Write('Введите значение N=====>');
Readln(k);
Until (k<=N) and (k>1);
End;
{
ввод значений вещественных элементов матрицы A }
Procedure InputMatrix(k:integer;Var A:arrayA);
Var i,j:integer;
Begin
for i:=1 to k do
for j:=1 to k do
Begin
Write('Введите значение элемента матрицы A[',i,',',j,']=====>');
Readln(A[i,j]);
End;
End;
{ вывод значений вещественных элементов матрицы A
}
Procedure OutputMatrix(k:integer; A:arrayA);
Var i,j:integer;
Begin
Writeln(' ------- Исходная матрица -------');
for i:=1 to k do
Begin
for j:=1 to k do
Write(A[i,j]:7:2,' ');
Writeln;
End;
End;
{вычисление и выдача на экран среднего арифметического каждого из столбцов
квадратной матрицы A}
Procedure Evaluate(k:integer; A:arrayA);
Var i,j:integer;
stolb:array [1..N] of real;
sr:real;
Begin
for j:=1 to k do
Begin
sr:=0;
for i:=1 to k do
sr:=sr+A[i,j]; {вычисление суммы элементов по столбцам матрицы A
}
Stolb[j]:=sr/k;
End;
Writeln('------- Cреднее арифметическое каждого из столбцов -------');
for j:=1 to k do
Writeln ('Cтолбец [',j,']= ',Stolb[j]:7:2);
End;
{Главная программа}
Begin
Repeat
ClrScr;
InputN(k);
InputMatrix(k,A);
ClrScr;
OutputMatrix(k,A);
Evaluate(k,A);
Writeln('Опять? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
End.
ПРИЛОЖЕНИЕ 2
пример выполнения контрольной работы № 1
ЛИСТИНГ ПРОГРАММЫ
Work1.pas
program Work1;
{ Вычислить вариант
30) arctg(b) + c*b - a/4
x= ------------------------
12*c + a - b
}
Uses
CRT;
Label
L1;
var
a,b,x,x1,x2 : Real;
c : Integer;
ch : Char;
{Вычисление знаменателя с проверкой его на ноль}
function Flag (a,b:real; c:Integer; Var x2:Real) : Boolean;
Begin
Flag:=True;
x2:= 12.0*c
+ a - b; {12*c
приведет к ошибке при c>abs(32767.0/12)
}
if x2=0 then
Begin
Writeln('Деление на ноль!!!!!!!! Повторите ввод.');
Flag:=False;
Exit;
End;
End;
{Вычисление арифметического выражения}
function F (a,b,x2:real; c:Integer) : Real;
Var x1 : Real;
Begin
x1:= ArcTan(b)+c*b-a/4;
F:=x1/x2
End;
{Ввод значения переменной С
c проверкой его на допустимый диапазон}
Procedure InputC(Var c:integer);
Var cL:Real;
Begin
Repeat
Write('Введите значение c=====>');
Readln(cL);
Until (cL>=-32768)and(cL<=32767);
c:=trunc(cL)
End;
{Главная программа}
begin
Repeat
ClrScr;
Writeln(' Вариант 30');
Writeln(' arctg(b) + c*b - a/4');
Writeln(' x= ------------------------');
Writeln(' 12*c + a - b');
Writeln;
L1:
Write('Введите значение a=====>');
Readln(a);
Write('Введите значение b=====>');
Readln(b);
InputC(c);
if Flag(a,b,c,x2) then Writeln ('x=',F(a,b,x2,c))
else goto L1
;
Writeln('Опять? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
end.
Рассмотрим поэтапное выполнение контрольной работы №1.
В данном задании необходимо вычислить значение арифметического выражения (вариант 30), которое является частным от деления выражения в числителе на выражение в знаменателе.
Для получения результата необходимо сделать следующее:
1. Ввести значения переменных, входящих в это выражение (
a,
b,
c)
.
2. Проверить находятся ли целочисленные переменные (в данном случае только c
) в диапазоне допустимых значений.
3. Вычислить знаменатель с проверкой его на ноль (т.к. деление на ноль
НЕДОПУСТИМО
).
4. Вычислить выражение.
5. Вывести результат вычисления.
Программе присвоено имя Work1,
имя файла - Work1.
pas:
· В фигурных скобках написаны комментарии - в данном случае номер варианта и вид выражения.
· Далее после зарезервированного слова Uses
написано имя стандартного модуля среды Turbo Pascal - CRT
(подробнее - см. Прил. 9).
· Затем описана метка L1
.
· В поле описания Var
переменные a,b,x,x1,x2
объявлены как Real
, переменная с
как Integer
, переменная ch
как Char
( типы данных - см. [4]).
· Далее идут описания функций
Flag,
F и процедуры
InputC.
· Записана главная программа
, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.
Вычислим знаменатель с проверкой его на ноль с помощью функции Flag
(основные понятия функции и процедуры даны в [4]). Функция Flag
описана как Boolean
и принимает два значения True
(если знаменатель НЕ равен нулю
) или False (если знаменатель равен нулю
)
. В заголовке функции используем формальные параметры:
· входные переменные a,b
,c,
значения которых передаются из основной программы в функцию Flag
;
· выходную переменную x2
, значение которой вычисляется (это - знаменатель выражения) и передается в основную программу.
Алгоритм вычисления знаменателя следующий:
¨ Присваиваем функции значение Flag:=True;
¨ Вычисляем знаменатель и присваиваем переменной х2
выражение в знаменателе: х2:=12.0*с+a-b
;
¨ Если знаменатель равен нулю (х2=0),
функция Flag
принимает значение равное False
и управление передается в основную программу (
Exit)
.
¨ Если знаменатель не равен нулю
, значение функции Flag
остается равным True
и значения функции и переменной х2
передаются в основную программу.
В этом фрагменте использован условный оператор if-
then
- см. [4].
Непосредственно значение выражения определим с помощью функции F.
Функция F
описана как Real.
Переменные a,
b, c
(входные) передаются из основной программы. Значение функции F
вычисляется и передается в основную программу.
Алгоритм вычисления значения выражения:
¨ вычисляем значение выражения в числителе : х1:=ArcTan(b)+c*b-a/4;
¨ присваиваем функции F
значение исходного выражения: F:=x1/x2
и управление передается в основную программу.
Ввод переменной С
осуществляем с помощью процедуры InputC
. В заголовке процедуры описан формальный параметр-переменная: Var с :
integer -
получаемое значение вводимой переменной.
Алгоритм работы процедуры InputC:
¨ В цикле вводим с клавиатуры значение переменной сL
, одновременно проверяется находится ли значение сL
в диапазоне -32768 ... +32767 (диапазон значений для целых чисел типа
INTEGER). Т
ело цикла расположено между Repeat
...и ... Until.
Подробнее о циклах см. [4].
¨ Переменной с
присваиваем значение равное целой части (функция trunc
) переменной cL
c:=
trunc(
cL)
;
¨ Полученное значение переменной с
передается в основную программу.
Алгоритм выполнения главной программы:
В цикле Repeat .... Until(ch=’n’) or (ch:=’
N’)
выполняем ввод переменных , проверку знаменателя на ноль и вычисление значения выражения для одного комплекта данных a,
b,
c
:
· Вводим значение переменной а
: Readln(а);
· Вводим значение переменной b
: Readln(b);
· Обращаемся к процедуре InputC(с)
для ввода значения целочисленной переменной
c
(значение с
передается в основную программу из процедуры InputC
).
· Проверяем значение функции Flag
. Если оно True
, то выводим значение выражения на экран, иначе управление переходит на метку L1
, повторяем ввод переменных a, b,
c
до тех пор, пока знаменатель примет значение, отличное от нуля.
· После вывода результата на экране дисплея появляется сообщение - Опять? (y/n)
, переменной ch
присваивается значение нажатой клавиши (оператор ReadKey
читает символ с клавиатуры - N
или Y).
Если вы нажали N,
выполнение программы заканчивается, если нажали клавишу Y, -
управление передается на начало цикла и вы можете повторить вычисление с новыми значениями переменных a,b,c
.
ПРИЛОЖЕНИЕ 3
пример выполнения контрольной работы № 2
ЛИСТИНГ ПРОГРАММЫ
Work2.pas
Program Work2;
{Вариант 30: a*b/4, если b > a
X = -55, если b = a
(b - 5)/a, если b < a
}
Uses
CRT;
Const
inv1='Повторите ввод';
inv2='Деление на ноль!!!!!!! ';
inv3='Результат ';
inv4='выходит за диапазон [-32768..32767]!!!!';
inv5='Вводимое значение ';
<
invB='B';
Label
L1;
var
a,b,x : Integer;
ch : Char;
{Вычисление значения X
с проверкой на допустимый диапазон
для переменной типа INTEGER
}
function F (a,b:Integer; Var x:Integer) : Boolean;
Var x1 : Real;
s1 : String;
Begin
F:=True;
if b>a then x1:=b/4.0*a
{Только так, иначе будет ошибка вычисления!!!!}
else if b=a then x1:=-55
else if a=0 then
Begin
s1:=inv2+inv1;
Writeln(s1);
F:=False;
Exit;
End
else x1:=(b-5.0)/a;
{------ Проверка результата на допустимый диапазон ------}
if (x1>=-32768)and(x1<=32767) then x:=trunc(x1)
else
Begin
s1:=inv3+inv4;
Writeln(s1);
Writeln(x1);
Writeln(inv1);
F:=False;
Exit;
End
End;
{Процедура ввода исходного значения переменной А
с проверкой на область
допустимых значений}
Procedure Input(Var A:integer; inv:String);
Label L;
Var aL :Real;
s1 : String;
Begin
L:
Write('Введите значение '+inv,'===>');
Readln(aL);
if (aL>=-32768)and(aL<=32767) then A:=trunc(aL)
else
Begin
s1:=inv5+inv4;
Writeln(s1);
Writeln(inv1);
goto L;
End
End;
{Главная программа}
begin
Repeat
ClrScr;
Writeln(' Вариант 30');
Writeln(' a*b/4, если b > a');
Writeln(' X = -55, если b = a');
Writeln(' (b - 5)/a, если b < a');
Writeln;
L1:
Input(b,invB);
Input(a,invA);
if F(a,b,x) then Writeln ('x=',x)
else goto L1;
Writeln('Опять? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
end.
В контрольной работе №2
необходимо вычислить значение целочисленной переменной Х
в зависимости от значений тоже целочисленных переменных a
и b
c учетом области допустимых значений.
Программе присвоено имя Work2
:
· В фигурных скобках (комментарий) записано условие задачи варианта 30.
· В поле вызова библиотечных модулей USES
записан модуль CRT
.
· В поле задания констант определены значения строковых констант: inv1, inv2, inv3, inv4, inv5, invA, invB.
· В поле меток описана метка L1
.
· В поле описания переменных описаны переменные - a, b, x
: integer; ch : char
.
· Далее следуют описания функции F
и процедуры Input.
· Записана главная программа
, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.
Функция F
определена как BOOLEAN.
В заголовке функции описаны входные параметры a,b:integer
(передаются из основной программы) и выходной параметр x:integer
( передается в основную программу). В теле функции используются локальные переменные x1: real
и s1: string
.
Алгоритм выполнения функции F
1. Сначала функции F
присваивается значение TRUE
и проверяется b>a.
2. Если
условие выполняется, тогда вычисляется значение x1:=
b/4.0*a.
3. Иначе
проверяется b=a
.
4. Если
да, то х1:=-55
.
5. Если
же это условие не выполняется , то остается условие b<a
, в котором надо проверить на ноль знаменатель a
выражения (b-5)/a
.
6. Если
это условие (
a=0)
выполняется (знаменатель в выражении (b-5)/a
равен нулю), вычисляется составной оператор после THEN
, заключенный в скобки - begin
... end
:
¨ В этом случае строковая переменная s1:=inv1+inv2
будет равна:
‘Деление на
ноль!!!!!!! Повторите ввод’
.
¨ Это сообщение выводится на экран.
¨ Функция F
принимает значение FALSE
и управление передается по EXIT
в основную программу.
7.
В случае, если
знаменатель не равен нулю, вычисляется значение x1:=(b-5.0)/a.
8. Далее
проверяется, входит ли значение х1
в допустимый диапазон (для переменных типа INTEGER
).
9. Если
да, то целая переменная получает значение х:=trunc(x1).
10. Если
значение х1
выходит за допустимый диапазон, то:
¨ s1:=inv3+inv4
(‘Результат выходит за диапазон [-3268...32767]!!!!’
);
¨ значение S1
выводится на экран - Writeln(s1)
;
¨ выводится на экран полученное значение Х1 - Writeln(x1);
¨ и новое приглашение - Writeln(Inv1) (‘Повторите ввод’)
.
¨ Функция F
принимает значение FALSE
и управление по EXIT
передается в главную программу.
Далее описана процедура ввода исходного значения переменной А
с проверкой на область допустимых значений. Имя процедуры - Input
. В заголовке описаны формальные параметры A:integer и inv:string
(имя переменной). В теле процедуры используются локальные переменные al:real
и s1:string
, в поле описания меток определена метка L.
Алгоритм выполнения процедуры Input
1.
На экран сообщаем о вводе переменной А - Write(‘Введите значение ’+ inv
,'===>')
. При выполнении этого оператора на экране появляется сообщение: Введите значение А===>.
2. Вводим с клавиатуры ее значение - READ
LN(a
L).
3. Проверяем входит ли это значение в допустимый диапазон:
¨ если да, то A:=TRUNC(a
L)
,
¨ если нет , то переменная s1
получает значение s1:=inv5+inv4
(‘Вводимое значение выходит за диапазон [-32768...32767]!!!’).
¨ На экран выводится значение inv1
(‘Повторите ввод’
).
¨ Управление передается на метку L
для повторного ввода значения А
.
Эта процедура может быть использована для ввода и контроля диапазона любой целочисленной переменной
типа INTEGER.
Описание главной программы
1. В цикле REPEAT ... UNTIL
очищается экран (ClrScr
), выводится на экран вид исходного задания, через процедуру INPUT
вводятся переменные a и b
, через функцию F
вычисляется искомое значение x.
¨ Если
значение функции F
равно False
, управление передается на метку L1
для повторного ввода переменных а и b
.
¨ Если
значение функции F
равно TRUE, -
выводится результат (переменная х
).
2. На экране появляется ‘Опять?
(Y/N
)’.
3. Переменной ch:=ReadKey
и в зависимости от ответа управление передается на начало цикла (ch:=
’Y’
) или программа заканчивает выполнение (
ch:= ‘N’
).
ПРИЛОЖЕНИЕ 4
пример выполнения контрольной работы № 3
ЛИСТИНГ ПРОГРАММЫ
Work3.pas
program Work3;
{$N+,E+}
{ Вариант 60 - элементы массива типа LONGINT.
Найти сумму первых K отрицательных элементов массива A.
}
Uses
CRT;
Const
NN=20; {Максимальная длина вектора}
invN=' N';
invK=' K';
inv1='Повторите ввод';
inv4='выходит за диапазон [-2147483648..2147483647]!!!!';
inv5='Вводимое значение ';
Type
ArrayA=Array [1..NN] of LongInt;
Var
k,N:integer;
A:ArrayA;
ch:char;
{Ввод значения N, 1<=
N<=
NN
}
Procedure Input(inv:String; NN:Integer; Var N:integer);
Begin
Repeat
Write('Введите значение'+inv,'=====>');
Readln(N);
Until (N<=NN) and (N>=1);
End;
{Ввод N
значений компонент вектора A[
i], -2147483648<=
A[
i]<= 2147483647
}
Procedure InputVector(N:integer;Var A:arrayA);
Label L;
Var i :integer;
Ra:Real;
s1:String;
Begin
for i:=1 to N do
Begin
L:
Write('Введите значение элемента вектора A[',i,']=====>');
Readln(Ra);
if (Ra>=-2147483648.0)and(Ra<=2147483647.0) then A[i]:=trunc(Ra)
else
Begin
s1:=inv5+inv4;
Writeln(s1);
Writeln(inv1);
goto L;
End
End;
End;
{Вывод значений компонент вектора A
построчно}
Procedure OutputVector(N:integer; A:arrayA);
Var i :integer;
Begin
Writeln(' ------- Исходный вектор -------');
for i:=1 to N do
Write(A[i]:11,' ');
Writeln;
End;
{Нахождение суммы первых K
отрицательных элементов массива A
длиной N
}
Function Summa(k,N:Integer; A:ArrayA):Extended;
Var i,Kk:integer;
S:Extended;
Begin
Kk:=1; {Счетчик отрицательных элементов массива}
S:=0;
for i:=1 to N do
if (A[i]<0) and (Kk<=k) then
Begin
S:=S+A[i];
Kk:=Kk+1
End;
Summa:=S
End;
{Главная программа}
begin
Repeat
ClrScr;
Input(invN,NN,N); {ввод конкретной длины массива N<=NN }
{ввод числа считаемых отрицательных элементов массива K<=N}
Input(invK,N,K);
InputVector(N,A);
OutputVector(N,A);
Writeln('Сумма первых K отрицательных элементов массива A=',
Summa(k,N,A):15:0);
Writeln('Повторить? (y/n)');
ch:=ReadKey;
Until (ch='n') or (ch='N');
end.
Для получения результата в контрольной работе №3 (вариант 60)
необходимо ввести фактическое значение длины массива N (1<=
N<=
NN)
, значение числа считаемых отрицательных элементов массива К
(
K<=
N)
и значения элементов исходного массива A[i],
i=1,...,N (с проверкой на диапазон
LONGINT
).
Имя программы - WORK3.
· В фигурные скобки включены директивы компилятора (см. Прил. 8 ) для обработки вещественной суммы типа EXTENDED
:
¨ $N+
- использовать числовой сопроцессор (реализовать операции с плавающей точкой аппаратно);
¨ $E+
-включить режим программной эмуляции сопроцессора.
· В поле описания библиотек, констант и переменных заданы стандартный модуль CRT
, определены константы: NN, invN, invK, inv1, inv4, inv5.
· Описан собственный тип данных ArrayA
для описания массива длиной NN
, элементы которого имеют тип LongInt
, - Type ArrayA=Array[1..NN] of Longint
;
· Описаны переменные k, N:Integer и массив A:ArrayA
; задана символьная переменная ch.
· Далее идут описания процедур
Input,
InputVector,
OutputVector, и функции
Summa.
· Записана главная программа
, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.
Описание процедуры Input
¨ В заголовке процедуры описаны формальные переменные:
входные: inv, NN
(значения которых передаются из основной программы);
выходное N
(значение определяется в процедуре и передается в основную про грамму).
¨ В цикле Repeat ...Until (N<=NN) and (N>=1)
вводится значение переменной N
- Read
ln(N)
с проверкой (т.е. вводимое N
должно быть больше либо равно единице и меньше либо равно NN
- заданному по условию задания значению размера массива). Затем управление передается в основную программу.
Описание процедуры
InputVector
¨ В заголовке процедуры описаны параметры:
N,
передаваемый из основной программы;
A
- массив вводимых элементов матрицы.
¨ Описаны локальные переменные:
i
: integer
- параметр цикла for;
Ra :
Real
- рабочая переменная (вводимый элемент массива);
s1 :
String
- строка, формируемая для аварийного вывода.
¨ В цикле for
вводятся значения элемента матрицы через рабочую переменную Ra
и проверяются на допустимые значения (в данном случае взяты пределы изменения для переменных типа longint
).
¨ Если
вводимое значение удовлетворяет заданному условию, то элементам матрицы присваивается значение A[i]:=trunc(ra).
¨ Иначе
1) строковой переменной присваивается значение s1:=inv5+inv4;
(‘вводимые значения выходят за
диапазон [- 147483648...2147483647]!!!!!!’
).
2) это сообщение выводится на экран;
3) также на экран выводится сообщение «Повторите ввод
»;
4) управление передается на метку L
и снова вводим значения элементов матрицы с проверкой на допустимые значения.
¨ Управление передается в основную программу, когда закончится цикл for
.
Описание процедуры
OutputVector
¨ В заголовке процедуры описаны параметры: N,
передаваемый из основной программы; A
- массив выводимых элементов матрицы.
¨ Описана локальная переменная i
:
integer
- параметр цикла for.
¨ В процедуре в цикле for
выводятся значения элементов массива А.
В операторе вывода Write(A[i]:11,’ ’)
задан формат для выводимого элемента массива: A[i]:11
, который показывает, что для вывода значения элемента массива А
отводится 11
позиций.
¨ Затем управление передается основной программе.
Описание функции Summa
¨ В заголовке функции описаны параметры: k -
число считываемых отрицательных элементов массива к<=N; N
- размерность массива, А
- массив элементов. Функция Summa
описана, как Extended
.
¨ В теле функции задается счетчик отрицательных элементов массива Кк
, ему присваивается начальное значение 1 ( Kk:=
1
). Начальное значение суммы равно 0
(s:=0).
¨ В цикле for
от единицы до N
считается сумма первых K
отрицательных элементов массива:
1) проверяется A[i]
<0
(отрицательное число) и одновременно проверяется значение счетчика Кк
<=K
(не превышает числа считываемых отрицательных элементов массива K);
2) S:=S+A[i]
;
3) счетчик отрицательных чисел увеличивается на единицу Кк:=Кк+1
.
¨ После окончания цикла функции Summa
присваивается значение полученной суммы всех отрицательных чисел - Summa:=S
.
¨ Управление передается в основную программу.
Описание главной программы
1. В теле основной программы в цикле Repeat ... Until
очищается экран (ClrScr
).
2. Производится решение задачи для одного комплекта входных данных N,
K,
A
:
¨ Через вызов процедуры Input(invN,NN,N)
осуществляется ввод длины массива N<=NN
(переменные invN, NN
являются входными, переменная N
- результат работы процедуры).
¨ Через эту же процедуру Input(invK,N,K)
осуществляет ввод числа считываемых отрицательных элементов массива К<=N (
переменные invК, N
передаются из основной программы в процедуру, значение переменной K
возвращается из процедуры в основную программу).
¨ Процедура InputVector(N,A)
осуществляет ввод элементов массива А (
значение переменной N
передается из основной программы, значение элементов массива А
передается из процедуры).
¨ Процедура OutputVector(N,A)
осуществляет вывод элементов массива А
(
значение переменной N
и значения элементов массива А
передаются из основной программы).
¨ Выводится значение суммы через функцию Summa(k,N,A)
(значение параметров К, N, A
передается из основной программы);
¨ На экране появляется сообщение «Опять? (Y/N
)».
¨ Переменной ch
присваивается значение нажатой клавиши ch:=ReadKey
и в зависимости от ответа управление передается на начало цикла (ch
:=’Y’
) или программа заканчивает выполнение (
ch:= ‘N’
).
ПРИЛОЖЕНИЕ 5
пример выполнения контрольной работы № 4
ЛИСТИНГ ПРОГРАММЫ Work
4.
pas
- см. Прил. 1.
В контрольной работе № 4
задана квадратная матрица А
размером N * N (N<=10
), состоящая из действительных элементов. Необходимо найти среднее арифметическое значение элементов каждого из столбцов этой матрицы.
Имя программы - WORK4.
· В поле описания библиотек и констант заданы стандартный модуль CRT
, определена константа N=10.
· Описан собственный тип данных ArrayA
для описания массива размером N * N
, элементы которого имеют тип Real
, - Type ArrayA=Array[1..N,1..
N]
of Real.
· Описаны переменные: целочисленная k:
Integer,
массив A:ArrayA
; символьная переменная ch:
char.
· Далее идут описания процедур
InputN,
InputMatrix,
OutputMatrix, и
Evaluate.
· Записана главная программа
, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.
Описание процедуры Input
N
¨ В заголовке процедуры описан один формальный параметр:
выходное k
(значение определяется в процедуре и передается в основную про- грамму).
¨ В цикле Repeat ...Until (K<=N) and (K>1)
вводится значение переменной K
- Readln(K)
с проверкой (т.е. вводимое K
должно быть больше единицы
и меньше либо равно N
- заданному по условию максимальному значению размера массива А
). Затем управление передается в основную программу.
Описание процедуры Input
Matrix.
¨ В заголовке процедуры описаны параметры: K -
входной параметр, передаваемый из основной программы, и A
-выходной параметр (массив вводимых в процедуре элементов матрицы А)
.
¨ Описаны локальные целочисленные переменные i
(счетчик числа строк), j
(счетчик числа столбцов) - integer.
¨ В процедуре в двойном цикле for
по переменным i,
j
вводятся значения элементов массива А[I,J]:
Readln(A[I,J].
¨ Затем управление передается основной программе.
Описание процедуры Output
Matrix.
Поскольку алгоритм вывода матрицы структурно ничем не отличается от алгоритма ее ввода (см. Соответствующие блок-схемы в прил. 1), то и оформление процедуры почти одинаково. Обратите, пожалуйста, внимание на то, что массив А
- теперь параметр входной (
т.е. известный),
поэтому ключевое слово Var
отсутствует
. В двойном цикле for
реализован построчный вывод на экран исходной матрицы. В формате вывода под выводимое значение элементов матрицы отводится 7 позиций, в том числе две позиции для вывода дробной части:
Write(A[i,j]:7:2,’ ‘).
Следующий оператор вывода без параметров Writeln
позволяет закончить вывод одной строки матрицы и перейти на следующую.
Описание процедуры Evaluate.
¨ В заголовке процедуры описаны параметры: K, A
как входные параметры.
¨ Описаны локальные переменные i
(счетчик числа строк), j
(счетчик числа столбцов) как integer
и stolb
(вещественный массив длиной N -
array [1..
N]
of
Real
), s
r (рабочая переменная типа Real
для подсчета суммы элементов в данном столбце).
¨ В двойном цикле for
считается среднее арифметическое значение для каждого столбца и сохраняется в одномерном массиве Stolb:
1)
цикл начинается по столбцам j от 1 до k
;
2)
затем в цикле по строкам i
считается сумма элементов в данном столбце sr
;
3)
и вычисляется среднее арифметическое значение для каждого столбца путем деления вычисленной суммы на количество строк Stolb[
j]:=
sr/
k.
¨ Значение элементов одномерного массива среднего арифметического значения столбцов Stolb[
j]
в цикле for
выводится на экран.
Замечание.
Средние арифметические значения каждого из столбцов матрицы можно вычислять и тут же выдавать на экран. Этот вариант пригоден только тогда, когда значения средних арифметических больше ни для чего НЕ нужны (как в нашем случае).
Тогда надобность в массиве Stolb
и дополнительном цикле for
отпадает. В этом случае подпрограмма Evaluate
будет иметь следующий вид:
Procedure Evaluate(k:integer; A:arrayA);
Var i,j:integer;
sr:real;
Begin
Writeln('------- Cреднее арифметическое каждого из столбцов -------');
for j:=1 to k do {------- цикл по столбцам ------- }
Begin
sr:=0;
for i:=1 to k do {------- цикл по строкам ------- }
sr:=sr+A[i,j]; {вычисление суммы элементов по столбцам
матрицы A
}
Writeln ('Cтолбец [',j,']= ', sr/k
:7:2);
End;
End;
Описание главной программы
· В теле основной программы в цикле Repeat ... Until
очищается экран (ClrScr
).
· Путем вызова процедуры InputN(k)
вводится значение k
- фактическое число строк и столбцов исходной матрицы A
.
· Путем вызова процедуры InputMatrix(k,A
) вводим значения элементов исходной матрицы А
.
· Опять очищаем экран (ClrScr
).
· Через вызов процедуры OutputMatrix(k,A
) выводим на экран значения элементов исходной матрицы А
.
· Через вызов процедуры Evaluate(k,A)
определяем значения средних арифметических каждого из столбцов и выводим их на экран.
· Затем следует запрос «Опять? (Y/N
)».
· Переменной ch
присваивается значение нажатой клавиши ch:=ReadKey
и в зависимости от ответа управление передается или на начало цикла (ch:=’Y’
) для повторного счета, но уже с другими исходными данными, или программа заканчивает выполнение (ch:= ‘N’
).
ПРИЛОЖЕНИЕ 6
Основные функции среды ТУРБО ПАСКАЛЬ
Система программирования ТУРБО ПАСКАЛЬ представляет собой совокупность компилятора языка программирования ПАСКАЛЬ и инструментальной программной оболочки. Для вызова ТУРБО ПАСКАЛЯ следует дать команду:
TURBO
По этой команде в память загружается файл TURBO.EXE, на экране монитора появляется оболочка ТУРБО ПАСКАЛЯ. Верхняя строка оболочки содержит «главное меню»
режимов работы ТУРБО ПАСКАЛЯ, нижняя строка - краткую справку о назначении основных функциональных клавиш. Центральная часть экрана принадлежит окну редактора для ввода и редактирования текста программы. Под верхней строкой в центре двойной рамки приводится имя дискового файла ( новому файлу присваивается имя NONAME00.PAS). Цифра в верхнем правом углу окна редактора обозначает номер окна редактирования. В ТУРБО ПАСКАЛЕ можно одновременно работать с 9 программами, каждая из которых располагается в отдельном окне редактора. Кроме окон редактора используются окна: отладочного режима, вывода результатов работы программы, справочной службы, стека, регистров.
Для перехода в главное меню
необходимо нажать клавишу F10
, поместить курсор на нужную функцию, нажать ENTER. В появившемся ниспадающем меню выбрать необходимую опцию и нажать ЕNTER. Например, для сохранения текста программы на диске нужно нажать F10
, переместить курсор на FILE
, затем SAVE
и нажать ENTER, в появившемся диалоговом окне задать имя файла, под которым ваша программа будет храниться на диске. Отметим, что имя файла, под которым текст программы хранится на диске, не эквивалентен имени программы, заданным в первой строке программы, написанной на Паскале.
Функциональные клавиши
Функциональные клавиши используются для быстрого управления средой ТУРБО ПАСКАЛЯ. Они обозначаются F1,..., F12
и располагаются в верхнем ряду клавиатуры.
Назначения функциональных клавиш:
· F1
- вызов справки;
· F2
- записать программу на диск;
· F3
- открыть записанную программу на диске в окне редактора;
· F4
- используется в отладочном режиме;
· F5
- распахнуть активное окно на весь экран;
· F6
- сделать активным следующее окно;
· F7
- используется в отладочном режиме;
· F8
- используется в отладочном режиме;
· F9
- компилировать программу, но не выполнять ее;
· F10
- перейти к диалоговому выбору режима работы;
· Ctrl-F9
- компилировать программу, загрузить ее в оперативную память (или записать на диск) и выполнить, после чего вернуться в среду ТУРБО ПАСКАЛЬ;
· Alt-F5
- сменить окно редактора на окно вывода результатов программы;
· Alt-X
- выход из ТУРБО ПАСКАЛЯ;
Текстовый редактор среды
Текстовый редактор предназначен для создания и редактирования текста программы. Для создания текста его вводят с клавиатуры, нажимая в конце каждой строки клавишу ENTER.
Для того, чтобы исправить ошибки, которые были допущены при наборе программы, необходимо переместить курсор( небольшой мигающий прямоугольник в окне редактора) с помощью клавиш перемещения курсора ¬
®
¯
в нужное место и исправить ошибку.
Команды текстового редактора.
· PgUp
- переместить курсор на страницу вверх;
· PgDn
- переместить курсор на страницу вниз;
· HOME
-переместить курсор в начало строки;
· END
-переместить курсор в конец строки;
· Ctrl-PgUp
-переместить курсор в начало текста;
· Ctrl-PgDn
-переместить курсор в конец текста;
· BACKSPACE
-стереть символ слева от курсора;
· DEL
-стереть символ справа от курсора;
· CtrL-Y
-стереть строку, на которой располагается курсор;
· ENTER
- вставить новую строку;
· Ctrl-Q L
- восстановить текущую строку (действует, если курсор не покидал измененную строку);
· Ctrl-K B
- пометить начало блока;
· Ctrl-K K
- пометить конец блока;
· Ctrl-K Y -
стереть блок;
· Ctrl-K C -
копировать блок;
· Ctrl-K V
- переместить блок;
· Ctrl-K W
- записать блок в дисковый файл;
· Ctrl-K R
- прочитать блок из дискового файла;
· Ctrl-K P
- напечатать блок;
· Shift-
¬
®
¯ HOME END -
быстро создать блок.
После набора текста программы не забудьте сохранить его на диске, нажав клавишу F2
. В появившемся окне в поле задания имени файла введите имя файла, под которым ваша программа будет записана на диске.
Счет и отладка программы
После подготовки текста программы необходимо откомпилировать программу, при необходимости связать ее с библиотекой стандартных процедур и функций, загрузить ее в оперативную память и передать ей управление. Вся эта последовательность действий реализуется одновременным нажатием клавиш Ctrl-F9
.
Если в программе нет ошибок, то все действия выполняются последовательно одно за другим, при этом на экране сообщается о количестве строк откомпилированной программы и объеме доступной оперативной памяти.
Перед передачей управления загруженной программе среда очищает экран и на него выводятся результаты выполнения программы, а после завершения работы программы вновь восстанавливается окно редактора.
Если на каком-нибудь этапе среда обнаружила ошибку, она прекращает дальнейшее действие, восстанавливает окно редактора и помещает курсор на ту строку программы, на которой обнаружена ошибка. При этом в верхней строке редактора появляется диагностическое сообщение о причине ошибки. Необходимо найти причину ошибки и отредактировать текст. В более сложных ситуациях прибегают к пошаговому исполнению программы, например, последовательным нажатием F7
. В случае необходимости можно просмотреть значения проверяемых переменных. Для этого поместите курсор в строку, содержащую переменную, и нажмите Ctrl-F4
. В появившемся диалоговом окне в верхнем поле будет имя переменной, нажав на ENTER, в среднем поле получим ее значение. В верхнее поле можно с клавиатуры вводить имена переменных или выражение.
Справочная система
В затруднительной ситуации нажмите на клавишу F1
или CTRL-F1
(для объяснения конкретной ситуации) и на экране высветится необходимая справка. Во многих случаях справка содержит пример небольшой программы, которую можно скопировать в окно редактирования, запустить на выполнение и посмотреть результат.
ПРИЛОЖЕНИЕ 7
Обозначения основных символов, используемых при составлении
блок-схем алгоритмов (ГОСТ 19.003-80)
ПРИЛОЖЕНИЕ 8
Директивы компилятора
В Турбо-Паскале можно использовать директивы компилятора , которые в виде особым образом оформленных комментариев вставляются в текст программы и изменяют те или иные возможности компилятора в процессе компиляции. Директивы обрамляются в фигурные скобки. За открывающейся скобкой должен следовать знак доллара $
. Знак плюс означает установку опции в активное состояние, а знак минус - в пассивное. В одной директиве можно указать несколько опций через запятую: {$N+,E+}
Список основных директив компилятора
· {$A-}
разрешает для переменных и типизованных констант выравнивание на границу слова. Для процессоров 80х86
это приводит к более быстрому доступу к памяти. По умолчанию эта опция установлена {$A+}
.
· {$B-}
устанавливает вычисление булевских выражений по короткой схеме. В зависимости от установленного режима вычисления булевских выражений можно получить код, который выполняется быстрее.
· {$E-}
устанавливает режим эмуляции сопроцессора при работе с вещественными данными типа SINGLE, DOUBLE, EXTENDED
. По умолчанию директива имеет значение {$E+}
.
· {$I-}
выключает стандартную проверку ошибок ввода/вывода. Вызвав встроенную функцию IOResult
, программист может сам обрабатывать ошибки ввода/вывода.
· {$N-}
устанавливает режим подключения сопроцессора при работе с вещественными данными типа SINGLE, DOUBLE, EXTENDED
. Система проверяет наличие сопроцессора и при его отсутствии команды сопроцессора эмулируются. Поэтому при работе с указанными вещественными данными необходимо включить две директивы {$N+,E+}
.
· {$R-}
выключает проверку диапазона. При генерации кода не осуществляется проверка ошибок в индексировании массивов и в присвоении значений.
· {$S-}
выключает проверку стека. При генерации кода не осуществляется проверка наличия достаточного пространства в стеке для каждого вызова процедуры или функции.
· {$V-}
отменяет проверку параметров var
для строк. Это позволяет передавать в качестве фактических параметров строки, длина которых отлична от длины, установленной для формального параметра var
в заголовке процедуры.
ПРИЛОЖЕНИЕ 9
Модуль CRT
Модуль CRT
содержит подпрограммы управления текстовым выводом на экран дисплея, звуковым генератором и чтения с клавиатуры.
В режиме текстового вывода координаты экрана следующие: верхний левый угол <1,1>
, нижний правый <WindMax>
, причем горизонтальная координата возрастает слева направо, а вертикальная - сверху вниз. Если на экране активизировано окно, то все координаты определяются относительно границ окна, за исключением процедуры Window
(здесь координаты всегда задаются относительно границ экрана).
Для чтения с клавиатуры используются две функции: KeyPressed
и ReadKey
. Функция KeyPressed
определяет факт нажатия на любую клавишу и не приостанавливает дальнейшее исполнение программы. Функция ReadKey
читает расширенный код нажатой клавиши и ожидает действий пользователя.
Управление звуковым генератором строится по схеме Sound - Delay - NoSound
. Первая процедура включает генератор и генерирует звук нужного тона. Вторая - приостанавливает работу программы на заданное число миллисекунд реального времени. Третья - отключает звуковой генератор.
КОНСТАНТЫ
CRT - режимы:
BW40
= 0; { 40x25, черно-белый }
CO40
= 1; { 40x25, цветной }
BW80
= 2; { 80x25, черно-белый }
CO80
= 3; { 80x25, цветной }
Mono
= 7; { 80x25, монохромный }
Font8x8
= 256; { добавка для EGA (80x43)
или VGA (80x50)
}
Константы CRT- режимов для совместимости с версией 3.0:
C40 = CO40;
C80 = CO80;
Константы цвета фона и символов:
Black
= 0; {черный}
Blue
= 1; {голубой}
Green
= 2; {зеленый}
Cyan
= 3; {бирюзовый}
Red
= 4; {красный}
Magenta
= 5; {малиновый}
Brown
= 6; {коричневый}
LightGray
= 7; {светло-серый}
Константы цвета символов:
DarkGray
= 8; {темно-серый}
LightBlue
= 9; {светло-голубой}
LightGreen
= 10; {светло-зеленый}
LightCyan
= 11; {светло-бирюзовый}
LightRed
= 12; {светло-красный}
LightMagenta
= 13; {светло-малиновый}
Yellow
= 14; {желтый}
White
= 15; {белый}
Blink
= 128; {бит мерцания}
ПЕРЕМЕННЫЕ
CheckBreak: Boolean;
{ Реакция на Ctrl-Break
}
CheckEOF: Boolean;
{ Реакция на Ctrl-Z - end of file
}
DirectVideo: Boolean;
{ Разрешение/запрещение прямой работы с видеопамятью }
CheckSnow: Boolean;
{ Реакция на "снег" монитора }
LastMode: Word;
{ Хранение последнего текстового режима}
TextAttr: Byte;
{ Текущий текстовый атрибут}
WindMin: Word;
{ Координаты <X,Y>
верхнего левого угла текущего окна }
WindMax: Word;
{ Координаты <X,Y>
нижнего правого угла текущего окна }
ПРОЦЕДУРЫ И ФУНКЦИИ
· procedure AssignCrt(var F: Text);
связывает с файловой переменной устройство ввода/вывода CRT.
· function KeyPressed: Boolean;
возвращает значение True
, если на клавиатуре была нажата любая клавиша.
· function ReadKey: Char;
читает символ с клавиатуры без эхо повтора и приостанавливает исполнение программы до нажатия на любую клавишу, кроме Shift, Ctrl, Alt, CapsLock, NumLock, ScrollLock.
· procedure TextMode(Mode: Integer);
устанавливает нужный текстовый режим.
· procedure Window(X1,Y1,X2,Y2: Byte);
открывает текстовое окно на экране с абсолютными координатами <X1,Y2>, <X2,Y2>.
· procedure GotoXY(X,Y: Byte);
перемещает курсор в нужное место <X,Y>
активного окна.
· function WhereX: Byte;
возвращает горизонтальную координату X
текущего положения курсора в активном окне.
· function WhereY: Byte;
то же для вертикальной координаты Y.
· procedure ClrScr;
очищает окно и помещает курсор в левый верхний угол <1,1>.
· procedure ClrEol;
удаляет все символы от текущей позиции курсора до конца строки без перемещения курсора.
· procedure InsLine;
вставляет пустую строку в позицию курсора.
· procedure DelLine;
удаляет строку, на которой находится курсор, и перемещает все строки, расположенные ниже нее, на строку вверх.
· procedure TextColor(Color: Byte);
устанавливает цвет символов.
· procedure TextBackground(Color: Byte);
устанавливает цвет фона.
· procedure LowVideo;
устанавливает низкую яркость символов.
· procedure HighVideo;
устанавливает высокую яркость символов.
· procedure NormVideo;
устанавливает нормальную яркость символов.
· procedure Delay(MS: Word);
приостанавливает работу программы на указанное число миллисекунд MS
.
· procedure Sound(Hz: Word);
включает звуковой генератор с указанной звуковой частотой Hz.
· procedure NoSound;
выключает звуковой генератор.