Основы программирования и алгоритмические языки

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

Рубрика Педагогика
Вид методичка
Язык русский
Дата добавления 24.01.2011
Размер файла 776,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

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

ХАРЬКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ им. Н.Е. Жуковского

ОСНОВЫ ПРОГРАММИРОВАНИЯ И АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ

Методические рекомендации по выполнению контрольных и лабораторных работ

Часть 1

ГОЛУБЬ Н.Г., КИРИЛЕНКО Е.Г.

Харьков ХАИ 1997

Оглавление

  • Введение
  • Порядок выполнения контрольной работы
  • Cодержание пояснительной записки
  • Контрольная работа № 1. Вычисление арифметических выражений
  • Контрольная работа № 2. Организация разветвлений
  • Контрольная работа № 3. Организация циклов и работа с одномерными массивами
  • Контрольная работа № 4. Организация циклов и обработка матриц
  • Список использованной и рекомендуемой литературы.
  • Приложение 1. Вариант оформления отчета по контрольной работе N 4
  • Приложение 2. Пример выполнения контрольной работы № 1
  • Приложение 3. Пример выполнения контрольной работы № 2
  • Приложение 4. Пример выполнения контрольной работы № 3
  • Приложение 5. Пример выполнения контрольной работы № 4
  • Приложение 6. Основные функции среды ТУРБО ПАСКАЛЬ
  • Приложение 7. Обозначения основных символов, используемых при составлении блок-схем алгоритмов (ГОСТ 19.003-80)
  • Приложение 8. Директивы компилятора
  • Приложение 9. Модуль CRT

Введение

В предлагаемом пособии содержатся варианты первых четырех контрольных (лабораторных) работ по курсу "Основы программирования и алгоритмические языки, часть 1", пример оформления контрольной работы № 4 в виде отчета (см. Прил.1), методические указания и образцы машинных листингов базовых вариантов всех контрольных работ (см. Прил.2-5). В приложении 6 дано описание основных функций среды ТУРБО ПАСКАЛЯ, в приложении 7 - основные обозначения, используемые для построения блок-схем алгоритмов. В приложении 8 приведены основные директивы компилятора ТУРБО ПАСКАЛЬ, в приложении 9 - описание стандартного модуля CRT.

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

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

Порядок выполнения контрольной работы

Внимательно прочитать и уяснить условие задачи, которую предстоит решить.

Ознакомиться с необходимым теоретическим материалом - см. Список рекомендуемой литературы (особенно выделенные источники), в частности, учебное пособие ХАИ [4].

Изучить нужное приложение для соответствующей контрольной работы и, особенно, листинг программы (для полного понимания, возможно, даже пропустить его через набор на компьютере, редактирование и счет - см. Прил.6). Для этого достаточно персонального компьютера типа IBM PC, начиная с процессора i286.

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

Сделать отчет.

Каждый отчет оформляется в виде пояснительной записки (см. Прил.1) и должен содержать следующие элементы:

титульный лист;

текст пояснительной записки в машинописном или рукописном виде;

cписок использованной литературы;

машинный листинг программы на языке PASCAL - в виде приложения.

Cодержание пояснительной записки

Постановка задачи.

Краткие теоретические сведения об особенностях применяемых операторов и методов (теоретическое введение).

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

общие сведения (язык программирования, операционная система, тип процессора);

описание логической структуры программы;

описание алгоритма решения задачи (в виде блок-схемы);

описание входных и выходных данных программы;

описание подпрограмм;

перечень аномалий и допустимых значений входных данных (тестовые примеры).

Контрольная работа № 1. Вычисление арифметических выражений

ЦЕЛЬ РАБОТЫ. Вычислить заданное смешанное арифметическое выражение для данных в форматах REAL (переменные a,b) и INTEGER (остальные переменные).

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

Варианты

Контрольныe вопросы:

Особенности выполнения изучаемых операторов: присваивания, ввода-вывода.

Процедуры и функции. Формальные и фактические параметры.

Арифметические выражения: знаки арифметических операций, стандартные функции.

Диапазон допустимых значений для вещественных (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)

33)

34)

35)

36)

37)

38)

39)

40)

41)

42)

43)

44)

45)

46)

47)

48)

49)

50)

51)

52)

53)

54)

55)

56)

57)

58)

59)

60)

Контрольныe вопросы.

Особенности выполнения изучаемых операторов: условные, ввода-вывода.

Процедуры и функции. Формальные и фактические параметры.

Арифметические выражения: знаки арифметических операций, стандартные функции.

Диапазон допустимых значений для целочисленных переменных (INTEGER или LONGINT).

Обработка аварийных ситуаций.

Контрольная работа № 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; 33-LONGINT.

Найти сумму первых K элементов массива A={a [i] }, удовлетворяющих условию:

с <= a [i] <= d.

34 - BYTE; 35 - WORD; 36 - SHORTINT; 37 - INTEGER; 38-LONGINT.

Найти количество одинаковых элементов массива A={a [i] }.

39 - BYTE; 40 - WORD; 41 - SHORTINT; 42 - INTEGER; 43-LONGINT.

Найти сумму элементов массива A={a [i] }, удовлетворяющих условию:

с <= a [i] <= d.

44 - SHORTINT; 45 - INTEGER.

Найти произведение последних L положительных элементов в массиве A={a [i] }.

46 - SHORTINT; 47 - INTEGER.

программирование алгоритмический язык

Найти произведение положительных элементов массива A={a [i] }, удовлетворяющих условию: с <= a [i] <= d.

48 - SHORTINT; 49 - INTEGER.

Найти произведение отрицательных элементов массива A={a [i] }, удовлетворяющих условию: с <= a [i] <= d.

50 - SHORTINT; 51 - INTEGER.

Найти сумму кубов всех положительных элементов массива A={a [i] }.

52 - SHORTINT; 53 - INTEGER.

Найти сумму квадратов всех отрицательных элементов массива A={a [i] }.

54 - SHORTINT; 55 - INTEGER.

Найти произведение квадратов всех положительных элементов массива A={a [i] }.

56 - SHORTINT; 57 - INTEGER.

Найти произведение квадратов всех отрицательных элементов массива A={a [i] }.

58 - SHORTINT; 59 - INTEGER; 60 - LONGINT.

Найти сумму первых K отрицательных элементов массива A={a [i] }.

Контрольныe вопросы.

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

Процедуры и функции. Формальные и фактические параметры. Передача в параметрах массивов.

Размерность массивов. Контроль за корректным распределением памяти для массивов.

Диапазон допустимых значений для целочисленных переменных: BYTE, WORD, SHORTINT, INTEGER, LONGINT.

Диапазон допустимых значений для вещественных переменных: 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) Найти, сколько положительных элементов содержит данная матрица в каждом столбце.

33) Найти, сколько отрицательных элементов содержит данная матрица в каждом столбце.

34) Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.

35) Получить новую матрицу путем деления всех элементов данной матрицы на ее наименьший по модулю элемент.

36) Получить новую матрицу путем умножения всех элементов данной матрицы на ее наибольший по модулю элемент.

37) Получить новую матрицу путем умножения всех элементов данной матрицы на ее наименьший по модулю элемент.

38) Получить новую матрицу путем сложения всех элементов данной матрицы с ее наибольшим по модулю элементом.

39) Получить новую матрицу путем сложения всех элементов данной матрицы с ее наименьшим по модулю элементом.

40) Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наибольшего по модулю элемента.

41) Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наименьшего по модулю элемента.

42) Заменить нулями все ее элементы, расположенные на главной диагонали и выше нее.

43) Заменить нулями все ее элементы, расположенные на главной диагонали и ниже нее.

44) Сформировать вектор из суммы элементов строк и найти их среднее арифметическое.

45) Сформировать вектор из суммы элементов столбцов и найти их среднее арифметическое.

46) Сформировать вектор из произведения элементов строк и найти их среднее арифметическое.

47) Сформировать вектор из произведения элементов столбцов и найти их среднее арифметическое.

48) Сформировать вектор из наименьших значений элементов строк и найти их среднее арифметическое.

49) Сформировать вектор из наименьших значений элементов столбцов и найти их среднее арифметическое.

50) Сформировать вектор из наибольших значений элементов строк и найти их среднее арифметическое.

51) Сформировать вектор из наибольших значений элементов столбцов и найти их среднее арифметическое.

52) Сформировать вектор из разностей наибольших и наименьших значений элементов строк.

53) Сформировать вектор из разностей наибольших и наименьших значений элементов столбцов.

54) Сформировать вектор из суммы наибольших и наименьших значений элементов строк.

55) Сформировать вектор из суммы наибольших и наименьших значений элементов столбцов.

56) Найти сумму элементов строки, в которой расположен наименьший элемент.

57) Найти сумму элементов строки, в которой расположен наибольший элемент.

58) Найти сумму элементов столбца, в котором расположен наименьший элемент.

59) Найти сумму элементов столбца, в котором расположен наибольший элемент.

60) Поменять местами строку, содержащую максимальный элемент, со строкой, содержащей минимальный элемент.

Контрольныe вопросы.

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

Процедуры и функции. Формальные и фактические параметры. Передача в параметрах массивов.

Размерность массивов. Контроль за корректным распределением памяти для массивов.

Двумерные массивы. Строки и столбцы. Расположение в памяти двумерных массивов.

Список использованной и рекомендуемой литературы.

Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. М., 1988.

Абрамов С.А., Зима Е.В. Начала информатики. М., 1989.

Вирт Н. Алгоритмы + структуры данных = программы. М., 1985.

Голубь Н.Г., Кириленко Е.Г. Алгоритмические языки и программирование: Учебное пособие, часть 1. ХАИ, 1997.

Грогоно П. Программирование на языке Паскаль. М., 1982.

Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М., 1991.

Йенсен К., Вирт Н. Паскаль: руководство для пользователя. М., 1989.

Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. М., 1986.

Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., 1992.

Пильщиков В.Н. Сборник упражнений по языку Паскаль. М., 1989.

Прайс Д. Программирование на языке Паскаль: Практическое руководство. М., 1987.

Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М., 1997.

Фаронов В.В. Турбо Паскаль 7.0. Практика программирования. Учебное пособие. М., 1997.

Фирменная документация и компьютерные справочники (файлы помощи типа HELP).

Приложение 1. Вариант оформления отчета по контрольной работе N 4

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

ХАРЬКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ им. Н.Е. Жуковского

КАФЕДРА ИНФОРМАТИКИ

ОТЧЕТ

ПО КОНТРОЛЬНОЙ РАБОТЕ N 4

ОРГАНИЗАЦИЯ ЦИКЛОВ И ОБРАБОТКА МАТРИЦ

Выполнил: студент гр. З-16

Иванченко Н.К.

Проверила: доцент каф.603

Голубь Н.Г.

Харьков ХАИ 1997

ПОСТАНОВКА ЗАДАЧИ

Вариант 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.

ОПИСАНИЕ ПРОГРАММЫ

Программа написана на алгоритмическом языке ПАСКАЛЬ и реализована в среде Borland 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. Голубь Н.Г., Кириленко Е.Г. Алгоритмические языки и программирование: Учебное пособие, часть 1. ХАИ, 1997.

4. Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М., 1991.

5. Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., 1992.

6. Прайс Д. Программирование на языке Паскаль: Практическое руководство. М., 1987.

7. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М., 1997.

8. Фирменная документация и компьютерные справочники (файлы помощи типа 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), которое является частным от деления выражения в числителе на выражение в знаменателе.

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

Ввести значения переменных, входящих в это выражение (a, b, c).

Проверить находятся ли целочисленные переменные (в данном случае только c) в диапазоне допустимых значений.

Вычислить знаменатель с проверкой его на ноль (т.к. деление на ноль НЕДОПУСТИМО).

Вычислить выражение.

Вывести результат вычисления.

Программе присвоено имя 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='Вводимое значение ';

invA='A';

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

Сначала функции F присваивается значение TRUE и проверяется b>a.

Если условие выполняется, тогда вычисляется значение x1: =b/4.0*a.

Иначе проверяется b=a.

Если да, то х1: =-55.

Если же это условие не выполняется, то остается условие b<a, в котором надо проверить на ноль знаменатель a выражения (b-5) /a.

Если это условие (a=0) выполняется (знаменатель в выражении (b-5) /a равен нулю), вычисляется составной оператор после THEN, заключенный в скобки - begin. end:

В этом случае строковая переменная s1: =inv1+inv2 будет равна:

`Деление на ноль!!!!!!! Повторите ввод'.

Это сообщение выводится на экран.

Функция F принимает значение FALSE и управление передается по EXIT в основную программу.

В случае, если знаменатель не равен нулю, вычисляется значение x1: = (b-5.0) /a.

Далее проверяется, входит ли значение х1 в допустимый диапазон (для переменных типа INTEGER).

Если да, то целая переменная получает значение х: =trunc (x1).

Если значение х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

На экран сообщаем о вводе переменной А - Write (`Введите значение '+ inv,'===>'). При выполнении этого оператора на экране появляется сообщение: Введите значение А===>.

Вводим с клавиатуры ее значение - READLN (aL).

Проверяем входит ли это значение в допустимый диапазон:

если да, то A: =TRUNC (aL),

если нет, то переменная s1получает значение s1: =inv5+inv4

(`Вводимое значение выходит за диапазон [-32768.32767]!!! ').

На экран выводится значение inv1 (`Повторите ввод').

Управление передается на метку L для повторного ввода значения А.

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

Описание главной программы

В цикле REPEAT. UNTIL очищается экран (ClrScr), выводится на экран вид исходного задания, через процедуру INPUT вводятся переменные a и b, через функцию F вычисляется искомое значение x.

Если значение функции F равно False, управление передается на метку L1 для повторного ввода переменных а и b.

Если значение функции F равно TRUE, - выводится результат (переменная х).

На экране появляется `Опять? (Y/N) '.

Переменной 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 - Readln (N) с проверкой (т.е. вводимое N должно быть больше либо равно единице и меньше либо равно NN - заданному по условию задания значению размера массива). Затем управление передается в основную программу.

Описание процедуры InputVector

В заголовке процедуры описаны параметры:

N, передаваемый из основной программы;

A - массив вводимых элементов матрицы.

Описаны локальные переменные:

i: integer - параметр цикла for;

Ra: Real - рабочая переменная (вводимый элемент массива);

s1: String - строка, формируемая для аварийного вывода.

В цикле for вводятся значения элемента матрицы через рабочую переменную Ra и проверяются на допустимые значения (в данном случае взяты пределы изменения для переменных типа longint).

Если вводимое значение удовлетворяет заданному условию, то элементам матрицы присваивается значение A [i]: =trunc (ra).

Иначе

строковой переменной присваивается значение s1: =inv5+inv4;

(`вводимые значения выходят за диапазон [ - 147483648.2147483647]!!!!!! ').

это сообщение выводится на экран;

также на экран выводится сообщение "Повторите ввод";

управление передается на метку 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 отрицательных элементов массива:

проверяется A [i] <0 (отрицательное число) и одновременно проверяется значение счетчика Кк<=K (не превышает числа считываемых отрицательных элементов массива K);

S: =S+A [i];

счетчик отрицательных чисел увеличивается на единицу Кк: =Кк+1.

После окончания цикла функции Summa присваивается значение полученной суммы всех отрицательных чисел - Summa: =S.

Управление передается в основную программу.

Описание главной программы

В теле основной программы в цикле Repeat. Until очищается экран (ClrScr).

Производится решение задачи для одного комплекта входных данных 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

ЛИСТИНГ ПРОГРАММЫ Work4. 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.

Записана главная программа, которая вызывает нужные процедуры и функции, согласно алгоритму решения задачи.

Описание процедуры InputN

В заголовке процедуры описан один формальный параметр:

выходное k (значение определяется в процедуре и передается в основную про - грамму).

В цикле Repeat. Until (K<=N) and (K>1) вводится значение переменной K - Readln (K) с проверкой (т.е. вводимое K должно быть больше единицы и меньше либо равно N - заданному по условию максимальному значению размера массива А). Затем управление передается в основную программу.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.