Лабораторный практикум по информатике Часть 2 Авторский коллектив:

advertisement
Лабораторный практикум по информатике
Часть 2
Авторский коллектив:
С.М. Горбенко (раздел 1), С.Ю. Кацко (раздел 12-14), С.А. Вдовин (раздел 5-7),
Е.В. Михайлович (раздел 16-19), С.А. Егорова (раздел 8-11),
Н.В. Деева (раздел 5-7), Н.П. Артемьева (разделы 2-4),
П.Ю. Бугаков (раздел 12-15)
Лабораторный практикум предназначен для практической подготовки студентов
технических специальностей по базовому курсу «Информатика». Вторая часть
лабораторного
практикума
включает
разделы:
алгоритмизация
и
программирование; разработка программ на языке VBA; программирование в
средах разработки Borland C++ и Borland C++ Builder; вычисления в Mathcad.
Данный материал будет полезен для самостоятельной подготовки студентов к
лабораторным работам.
1
СОДЕРЖАНИЕ
Введение ............................................................................................................... 3
Методические рекомендации по подготовке к лабораторным работам......... 4
Лабораторная работа № 1 Алгоритмизация и программирование ................. 5
Лабораторная работа № 2 Программирование в среде разработки Borland
Delphi........................................................................................................... 14
Лабораторная работа № 3 Работа с массивами в среде программирования
Borland Delphi ............................................................................................. 24
Лабораторная работа № 4 Работа с графикой в среде программирования
Borland Delphi ............................................................................................. 29
Лабораторная работа № 5 Visual Basic for Applications (VBA). Линейные
алгоритмы .................................................................................................. 34
Лабораторная работа № 6 Visual Basic for Applications (VBA). Условные
алгоритмы .................................................................................................. 43
Лабораторная работа № 7 Visual Basic for Applications (VBA). Циклические
алгоритмы. Работа с массивами............................................................... 51
Лабораторная работа № 8 Программирование в среде разработки Borland
C++. Линейные алгоритмы......................................................................... 60
Лабораторная работа № 9 Программирование в среде разработки Borland
C++. Разветвляющиеся алгоритмы ............................................................ 72
Лабораторная работа № 10 Программирование в среде разработки Borland
C++. Циклические алгоритмы.................................................................... 77
Лабораторная работа № 11 Программирование в среде разработки Borland
C++. Обработка массивов данных ............................................................. 82
Лабораторная работа № 12 Программирование в среде разработки
Borland C++ Builder. Основы работы ....................................................... 86
Лабораторная работа № 13 Программирование в среде разработки
Borland C++ Builder. Обработка массивов данных ............................... 107
Лабораторная работа № 14 Программирование в среде разработки
Borland C++ Builder. Сортировка массивов ........................................... 116
Лабораторная работа № 15 Программирование в среде разработки
Borland C++ Builder. Поиск элемента в массиве ................................... 122
Лабораторная работа № 16 Вычисления в Mathcad. Построение графиков
функций .................................................................................................... 127
Лабораторная работа № 17 Вычисления в Mathcad. Линейная алгебра ....... 135
Лабораторная работа № 18 Вычисления в Mathcad. Дифференциальное и
интегральное исчисление ......................................................................... 149
Лабораторная работа № 19 Вычисления в Mathcad. Программирование в
Mathcad ..................................................................................................... 162
Библиографический список ........................................................................... 175
2
ВВЕДЕНИЕ
Данный сборник предназначен для помощи в проведении лабораторных
работ по курсу «Информатика». Проведение этих работ позволит изучить
основы алгоритмизации и программирования. Это дополняет изучаемый в
теории материал.
Целью и задачей выполнения этих работ является получение навыков
составления алгоритмов решения задач и программирования с помощью
различных языков.
Сборник содержит описание самих работ, необходимый краткий
теоретический материал для их выполнения, примеры выполнения и варианты
исходных данных для лабораторных работ.
Кроме этого в практикуме есть примеры выполнения этих работ.
В конце практикума присутствует список литературы, позволяющей
самостоятельно изучить дополнительный материал по другим источникам.
После выполнения каждой работы студент должен предоставить в
письменном виде отчет о проделанной работе, в который входят исходные
данные, полученные результаты и выводы.
3
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ПОДГОТОВКЕ К
ЛАБОРАТОРНЫМ РАБОТАМ
Каждый студент должен взять у преподавателя свои исходные данные для
выполнения работ, изучить данные методические материалы перед
выполнением работы, выполнить на ЭВМ и предоставить отчет.
В данных лабораторных работах используются ЭВМ, на которых
установлена операционная система Windows XP, офисный пакет MS Office 2007,
интегрированные среды разработки Borland C++, Borland C++ Builder, Borland
Delphi, MathCad.
4
ЛАБОРАТОРНАЯ РАБОТА № 1
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
Время выполнения – 6 часов.
Цель работы
Усвоить понятия: алгоритм как фундаментальное понятие информатики,
способы описания, основные типы алгоритмов, освоить принципы решения
задач с использованием основных алгоритмических конструкций.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать назначение алгоритма и его определение;
 знать формы представления алгоритма;
 уметь работать с основными алгоритмическими конструкциями;
 уметь представлять алгоритм в виде блок-схемы;
 уметь приводить примеры алгоритмов и применять их для построения
блок-схем;
 уметь составлять и записывать алгоритм одним из способов.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь методические
указания по выполнению работы.
Общие теоретические сведения
Решение любой задачи на ЭВМ можно разбить на следующие этапы:
разработка алгоритма решения задачи, составление программы решения задачи
на алгоритмическом языке, ввод программы в ЭВМ, отладка программы
(исправление ошибок), выполнение программы на ПК, анализ полученных
результатов.
Первый этап решения задачи состоит в разработке алгоритма.
Алгоритм – это точная конечная система правил, определяющая
содержание и порядок действий исполнителя над некоторыми объектами
(исходными и промежуточными данными) для получения после конечного
числа шагов искомого результата.
Алгоритм может быть описан одним из трех способов:
 словесным (пример в начале раздела);
 графическим (виде специальной блок-схемы);
 с помощью специальных языков программирования.
Блок-схема – распространенный тип схем, описывающий алгоритмы или
процессы, изображая шаги в виде блоков различной формы, соединенных
между собой стрелками.
1. Линейный алгоритм – это такой алгоритм, в котором все операции
выполняются последовательно одна за другой.
5
2. Алгоритмы разветвленной структуры применяются, когда в
зависимости от некоторого условия необходимо выполнить либо одно, либо
другое действие.
3. Алгоритмы циклической структуры.
Циклом называют повторение одних и тех же действий (шагов).
Последовательность действий, которые повторяются в цикле, называют телом
цикла.
Циклические алгоритмы подразделяют на алгоритмы с предусловием,
постусловием и алгоритмы с конечным числом повторов. В алгоритмах с
предусловием сначала выполняется проверка условия окончания цикла и затем,
в зависимости от результата проверки, выполняется (или не выполняется) так
называемое тело цикла.
Задание 1. Определить площадь трапеции по введенным значениям
оснований (a и b) и высоты (h).
Запись решения задачи на алгоритмическом языке:
алг трапеция
вещ a,b,h,s
нач
ввод f,b,h
s:=((a+b)/2)*h
вывод s
кон
Запись алгоритма в виде блок-схемы (рис. 1):
Начало
Ввод a,b,h
S:=((a+b)/2)*h
Вывод S
S
Конец
Рисунок 1 – Блок-схема линейного алгоритма
Задание 2. Определить среднее арифметическое двух чисел, если a
положительное и частное (a/b) в противном случае.
6
Запись решения задачи на алгоритмическом языке:
алг числа
вещ a,b,c
нач
ввод a,b
если a>0
то
с:=(a+b)/2
иначе с:=a/b
все
вывод с
кон
Запись алгоритма в виде блок-схемы (рис. 2):
Начало
Ввод a,b
a>0
c:=a/b
c:=(a+b)/2
Вывод с
Конец
Рисунок 2 – Блок-схема алгоритма с ветвлением
Задание 3. Составить алгоритм нахождения суммы целых чисел в
диапазоне от 1 до 10.
Запись решения задачи на алгоритмическом языке:
алг сумма
вещ a,s
нач
S:=0;
A:=1;
нц
пока a<=10
S:=S+a;
A:=a+1;
кц
вывод S
кон
7
Запись алгоритма в виде блок-схемы (рис. 3):
Начало
S:=0
a:=1
нет
a<=10
да
Вывод S
S:=S+a
Конец
a:=a+1
Рисунок 3 – Циклический алгоритм с предусловием
В алгоритме с постусловием сначала выполняется тело цикла, а затем
проверяется условие окончания цикла. Решение задачи нахождения суммы
первых десяти целых чисел в данном случае будет выглядеть следующим
образом:
алг сумма
вещ a,s
нач
S:=0;
A:=1;
нц
S:=S+a;
A:=a+1;
пока a<=10
кц
вывод S
кон
8
Запись алгоритма в виде блок-схемы (рис. 4):
Начало
S:=0
a:=1
S:=S+a
a:=a+1
да
a<=10
нет
Вывод S
Конец
Рисунок 4 – Циклический алгоритм с постусловием
Варианты задания
Задание 1. Составить алгоритм решения задачи с помощью
алгоритмического языка псевдокод и с помощью блок-схем, используя
конструкцию линейного алгоритма.
1. Вычислить площадь поверхности и объем усеченного конуса по
следующим формулам
S = π (R + r) l + πR2 + πr2 ;
V = (1/3) π (R2 + r2 + Rr) h .
2. Вычислить координаты центра тяжести трех материальных точек с
массами m1, m2, m3 и координатами (x1,y1), (x2,y2), (x3,y3) по формулам:
xc = (m1x1 + m2x2 + m3x3) / (m1 + m2 + m3) ;
yc = (m1y1 + m2y2 + m3y3) / (m1 + m2 + m3) .
3. Вычислить площадь треугольника со сторонами a, b, c по формуле
Герона:
𝑆 = √𝑝 (𝑝 − 𝑎)(𝑝 − 𝑏)(𝑝 − 𝑐) ,
где p – полупериметр, вычисляемый по формуле
𝑎+𝑏+𝑐
,
2
9
4. Вычислить координаты точки, делящей отрезок а1а2 в отношении n1:n2
по формулам:
𝑥 = (𝑥1 + 𝛾𝑥2 )/(1 + 𝛾) ;
𝑦 = (𝑦1 + 𝛾𝑦2 )/(1 + 𝛾) ,
где 𝛾 = 𝑛1 /𝑛2 .
5. Вычислить медианы треугольника со сторонами a, b, c по формулам:
𝑚𝑎 = 0.5√2𝑏 2 + 2𝑐 2 − 𝑎2 ;
𝑚𝑏 = 0.5√2𝑎2 + 2𝑐 2 − 𝑏 2 ;
𝑚𝑐 = 0.5√2𝑏2 + 2𝑏 2 − 𝑐 2 ;
6. Вычислить площадь круга и длину окружности по введенному
значению радиуса.
7. Вычислить площадь S и периметр L эллипса по введенным значениям
полуосей a и b:
𝑆 ≔𝜋∙𝑎∙𝑏;
1
𝐿 = 2 ∙ 𝜋 ∙ √ (𝑎2 + 𝑏 2 .
2
8. Вычислить объем V и площадь боковой поверхности цилиндра S по
введенным значениям радиуса основания R и высоты цилиндра H.
𝑉 = 𝜋 ∙ 𝑅2 ∙ 𝐻 ;
𝑆 =2∙𝜋∙𝑅∙𝐻.
9. Вычислить объем V и площадь боковой поверхности конуса S по
введенным значениям радиуса основания r, высоты h и образующей l:
1
𝑉 = 𝜋 ∙ 𝑟2 ∙ ℎ ;
3
𝑆 =𝜋∙𝑟∙𝑙 .
10. Вычислить объем V и площадь поверхности S сферы по введенному
значению радиуса r:
4
𝑉 = ∙ 𝜋 ∙ 𝑟3 ;
3
𝑆 = 4 ∙ 𝜋 ∙ 𝑟2 .
11. Дано целое четырехзначное число. Используя операции div и mod,
найти сумму его цифр.
12. Дана сторона равностороннего треугольника. Найти площадь этого
треугольника и радиусы вписанной и описанной окружностей.
13. Даны координаты трех вершин треугольника (x1, y1), (x2, y2), (x3, y3).
Найти его периметр и площадь.
14. Дана длина окружности. Найти площадь круга, ограниченного этой
окружностью.
15. Дана площадь круга. Найти длину окружности, ограничивающей этот
круг.
10
Задание 2. Составить алгоритм решения задачи с помощью
алгоритмического языка псевдокод и с помощью блок-схем, используя
конструкцию алгоритма с ветвлением.
1. Составить программу для решения квадратного уравнения
2
ax + bx + c = 0.
2. Определить максимальное четное число из двух введенных.
3. Определить, можно ли из отрезков с длинами х, y и z построить
треугольник.
4. Ввести два числа а и b. Большее число заменить утроенным
произведением, меньшее – полусуммой.
5. Если среди трех чисел a, b, c имеется хотя бы одно четное, то найти
максимальное число, иначе – минимальное.
6. Определить, в каком квадранте находится точка с координатами x и y
и вывести номер квадранта на экран.
7. Найти квадрат наибольшего из двух чисел а и b. Вывести на экран
число 1, если наибольшим является число а, число 2 – если наибольшим числом
является b.
8. Определить, попадает ли точка с координатами x и y в круг радиусом R.
Если точка попадает в круг, вывести на экран единицу, в противном случае –
ноль.
9. Написать алгоритм решения задачи, которая решает уравнение
ax + b = 0 относительно x для любых чисел a и b, введенных с клавиатуры. Все
числа считаются действительными.
10. Написать алгоритм решения задачи, которая определяет, лежит ли
точка А(х,у) внутри некоторого кольца («внутри» понимается в строгом смысле,
т.е. случай, когда точка А лежит на границе кольца, недопустим). Центр кольца
находится в начале координат. Для кольца заданы внутренний и внешний
радиусы r1, r2. Координаты x и у вводятся с клавиатуры.
11. Даны две переменные целого типа: A и B. Если их значения не равны,
то присвоить каждой переменной произведение этих значений, а если равны, то
присвоить переменным нулевые значения.
12. Даны две переменные целого типа: A и B. Если их значения не равны,
то присвоить каждой переменной минимальное из этих значений, а если равны,
то присвоить переменным нулевые значения.
13. Даны целочисленные координаты точки на плоскости. Если точка не
лежит на координатных осях, то вывести 0. Если точка совпадает с началом
координат, то вывести 1. Если точка не совпадает с началом координат, но
лежит на оси OX или OY, то вывести соответственно 2 или 3.
14. Даны вещественные координаты точки, не лежащей на координатных
осях OX и OY. Вывести номер координатной четверти, в которой находится
данная точка.
11
15. Дано целое число, лежащее в диапазоне от –999 до 999. Вывести строку
– словесное описание данного числа вида "отрицательное двузначное число",
"нулевое число", "положительное однозначное число" и т.д.
Задание 3. Составить алгоритм решения задачи с помощью
алгоритмического языка псевдокод и с помощью блок-схем, используя
конструкцию циклического алгоритма.
1. Найти сумму чисел, кратных трем, в диапазоне от 0 до 50.
2. Найти сумму первых десяти чисел, кратных пяти.
3. Найти произведение четных чисел в диапазоне от 2 до 30.
4. Вводятся положительные числа. Прекратить ввод, когда сумма
введенных чисел превысит 100.
5. Требуется найти сумму чисел, кратных 7, в диапазоне от 0 до 100.
Вывести на экран сумму чисел и их количество.
6. Определить количество целых чисел, кратных 3 (от 3 и далее), дающих
в сумме число, превышающее 200.
7. Вводятся 10 чисел. Вывести на экран суммы положительных и
отрицательных чисел и их количество.
8. Вывести на экран значения функции у=sin(x) для 0≤x≤180 c шагом в 10.
9. Подсчитать площади десяти кругов с радиусами от 1 см с шагом 2 см и
вывести значения площадей на экран.
10. Вводятся положительные числа. Прекратить ввод чисел, когда их сумма
превысит 100. Результат вывести на экран.
11. Вводятся числа. Прекратить ввод чисел, когда сумма положительных
чисел превысит 100. Результат вывести на экран.
12. Вывести на экран значения произведений чисел a и b. Числа а
изменяются от 1 до 11 с шагом 1, b – от 1 до 3 с шагом 0,2.
13. Вывести на экран таблицу перевода километров в мили в диапазоне от
2 до 20 километров с шагом 2 км.
14. Вы положили в банк 1500 рублей. Определить, сколько денег будет на
Вашем вкладе через 1 год, если каждый месяц вклад увеличивается на 0.76 % от
суммы предыдущего месяца.
15. Решив заняться легкой атлетикой, Вы пробежали в первый день 2 км.
Сколько километров Вы пробежите за 2 недели, если каждый день Вы
увеличиваете дистанцию на 10 % от предыдущего дня?
Технология выполнения работы
В рамках выполнения работы необходимо составить алгоритм решения
задачи в виде блок-схемы и с помощью языка псевдокода.
Содержание отчета
1. Цель работы и задание.
2. Условие задачи.
3. Алгоритм, написанный с помощью псевдокода и блок- схемы.
12
Вопросы для защиты работы
1. Что такое алгоритм?
2. Свойства алгоритма.
3. Способы записи алгоритма.
4. Основные элементы блок-схемы.
5. Виды алгоритмов.
6. Отличительные особенности алгоритмов с
постусловием.
13
предусловием
и
ЛАБОРАТОРНАЯ РАБОТА № 2
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ BORLAND DELPHI
Время выполнения – 4 часа.
Цель работы
Научиться программировать процессы, которые позволяют сделать выбор
того или иного действия.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать, как отличить алгоритм выбора от других алгоритмов и как его
можно реализовать в среде Delphi;
 уметь самостоятельно написать программу для любого процесса
выбора.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows
2003 и выше и система визуального программирования Delphi на основе 6-ой
версии.
Общие теоретические сведения
Интегрированная среда разработки Delphi представляет
многооконную систему (рис. 1).
собой
Главное
окно
Окно
Инспектора
объектов
Окно
формы
Окно
кода модуля
Рисунок 1 – Пользовательский интерфейс интегрированной
среды разработки
формы
Delphi
14
После загрузки интерфейс Delphi включает следующие окна:
1. Главное окно – Project1, осуществляет основные функции управления
проектом создаваемой программы.
2. Окно Инспектора объектов Object Inspector содержит две страницы
Properties (Свойства) и Events (События).
3. Окно Конструктора формы Form1 представляет проект интерфейсной
части будущего проекта.
4. Окно Редактора кода – Unit1.pas предназначено для создания и
редактирования текста программы на языке Object Pascal.
Пункт меню View позволяет увидеть окна на экране при их отсутствии. В
зависимости от настроек можно видеть окна:
 окно обозревателя дерева объектов Object Tree View;
 окно Проводника кода – Exploring Unit1.pas.
Delphi – однодокументная среда и может работать только с одним
приложением. Закрытие Delphi – закрытие главного окна.
Project1 включает:
 главное меню, которое содержит команды доступа к функциям Delphi;
 панели инструментов (часто используемые команды главного меню);
 палитру компонентов (содержит строительные блоки для форм
приложения).
Имеется 6 панелей инструментов:
1. Standard (стандартная).
2. View (просмотра).
3. Debug (отладки).
4. Custom (пользователя).
5. Desktop (рабочий стол).
6. Internet (интернет).
Все компоненты разбиты на группы, каждая из которых в Палитре
компонентов располагается на отдельной странице. Нужная страница
выбирается щелчком мыши на ее ярлычке.
Основные страницы Палитры компонентов:
1. Standard (стандартная)
2. Additional (дополнительная)
3. Win32 (32-разрядный интерфейс Windows)
4. System (доступ к системным функциям)
5. Data Access (работа с информацией из базы данных)
6. Data Controls (создание элементов управления данными)
7. BDE (доступ к данным с помощью процессора баз)
8. Qreport (составление отчетов)
9. Dialogs (создание стандартных диалоговых окон)
Окно конструктора формы находится в центре экрана с заголовком Form1.
15
В нем выполняется проектирование формы. На форму из палитры
компонентов помещаются компоненты. Окно редактора кода Unit1.pas
находится под окном конструктора формы – это обычный текстовый редактор,
используется для редактирования текста модуля и в начале содержит исходный
код модуля. Окно проводника кода (Exploring Unit1.pas) содержит и отображает
все объекты модуля формы.
Окно инспектора объектов (Object Inspector) находится в левой части
экрана и отображает свойства и события объектов для текущей формы Form1.
Страница Properties (Свойства) отображает информацию о текущем компоненте
и позволяет изменять свойства компонентов.
Events (События) определяет процедуру, которую должен выполнить
компонент при возникновении события. Компонент, расположенный на форме,
можно выбрать щелчком мыши на нем или выбором в списке Инспектора
объектов (Object Inspector).Каждый объект имеет свой набор свойств и событий,
определяющий его особенности.
Разработка приложения
Разработка приложения включает:
1. Создание интерфейса приложения.
2. Определение функциональности приложения.
Интерфейс приложения определяет способ взаимодействия пользователя и
приложения т. е. внешний вид формы. Интерфейс создается путем размещения
в форме компонентов, которые называются интерфейсными или управляющими
компонентами и выполняется с помощью конструктора формы.
Функциональность приложения определяется процедурами, которые
выполняются при возникновении определенных событий, например, при
действиях пользователя с управляющими элементами формы. В процессе
создания приложения на форму помещаются компоненты, для которых
создаются обработчики событий.
Создание интерфейса приложения
Интерфейс приложения составляют компоненты, которые разработчик
выбирает из Палитры компонентов и размещает на форме. При этом
выполняются следующие операции:
 выбор компонента в Палитре компонентов и размещение на форме;
 изменение свойств компонента.
Выбор компонента выполняется щелчком мыши на нужном компоненте, в
результате пиктограмма принимает утопленный вид и, если щелкнуть на
свободном месте формы на ней, появится выбранный компонент и его
пиктограмма принимает обычный вид. Пиктограммы компонентов отражают
назначение компонентов. В обозначении типа объектов Delphi, в том числе и
компонент указывается буква T. Это означает, что объект принадлежит классу T,
16
например, TForm1, T - это имя класса, созданного по образцу стандартного
класса TForm.
Определение функциональности приложения.
Для компонентов, размещенных на форме, разработчик может определить
нужную реакцию на те или иные действия пользователя, например, что должно
произойти, если нажать кнопку на форме. На форме, как правило, размещены
компоненты, образующие интерфейс приложения, и разработчик должен для
этих компонентов определить нужную реакцию на те или иные действия
пользователя. Например, на нажатие кнопки или включение переключателя. Эта
реакция и определяет функциональность приложения. Так, если при создании
интерфейса на форме размещена кнопка Button1, то ее можно нажимать с
помощью мыши; она отображает нажатие на себя визуально, но никаких
действий она не выполняет до тех пор, пока не будет создана процедура
обработки этого события. Для создания этой процедуры нужно выделить
кнопку на форме и перейти на страницу событий инспектора объектов (Events),
где указаны все возможные события для кнопки. При нажатии на кнопку
возникает событие OnClick и необходимо создать обработку этого события.
Двойной щелчок на кнопке и Delphi автоматически создает в модуле формы
заготовку процедуры-обработчика, при этом окно редактора кода переводится
на передний план, а курсор устанавливается в место, куда должны быть
внесены изменения.
Компиляция выполняется с помощью меню или клавишами Ctrl + F9. В
результате компиляции создается готовый к выполнению файл с расширением
*.exe. Языком программирования Delphi является язык Object Pascal, который
представляет собой объектно-ориентированное расширение стандартного языка
Pascal. В версии Delphi 7 язык Object Pascal переименован в язык Delphi,
который почти идентичен языку Object Pascal. Отличие касается работы с
базами данных и Интернет.
Рассмотрим реализацию процесса выбора из двух вариантов.
Пример 1.
Если переменная х задана на отрезке [0,1] вычислить площадь квадрата,
иначе вычислить площадь круга (переменную использовать соответственно как
сторону квадрата или радиус круга).
Конструирование формы
Для формы Form1 в инспекторе объектов Object Inspector можно задать
следующие свойства:
 Caption – заголовок окна (например, «Вычисление»);
 Height – 400 (высота окна);
 Width – 600 (ширина окна).
Поместить на форму компоненты:
 панель Panel1 (в верхней части экрана для ввода информации);
17
 панель Panel2 (в нижней части для вывода информации) (страница
Standard).
Для панелей с помощью свойства Caption очистить поле заголовка.
На панели Panel1 разместить компоненту Edit1 – для ввода переменной х
(страница Standard).
Поле Text – очистить для ввода переменной x.
Label1 – использовать для задания метки для х (страница Standard).
Для Label1 задать свойство Caption – x=.
На панели Panel2 разместить метку Label2.
Caption задать – Результат.
Управлять вычислением будет кнопка Button1, разместить ее на панели
Panel1 и задать Caption – Вычислить. Для Button1 необходимо создать
обработчик события OnClick (нажатие кнопки).
Форма будет иметь вид (рис. 2):
Рисунок 2 – Форма с размещенными объектами
Для создания обработчика надо перейти на вкладку Events Инспектора
объектов Object Inspector, выбрать мышкой нужную компоненту (Button1) и
найти требуемое событие OnClick.
Двойной щелчок на этой кнопке и на экране окно кода программы.
Курсор устанавливается в процедуру – обработчика события, которая
должна иметь следующий вид:
procedure Tform1.Button1Click(Sender:Tobject);
begin
<место курсора>
End;
Ниже представлена программа обработки заданного события.
procedure Tform1.Button1Click(Sender:Tobject);
Var
x,s:real; // описание переменных
begin
18
x:=StrToFloat(Edit1.Text);
// ввод переменной х и преобразование ее из
строкового в вещественный тип в соответствии с заданием
If
(x>=0)
and(x<=1)
then
begin
S:=x*x;
Panel2.Caption:=’Площадь
квадрата=’+FloatToStr(s) end // вывод результата с преобразованием его в
строковый тип данных для вывода в форму
else
begin s:=3,14*x*x; Panel2.Caption:=’Площадь круга=’+FloatToStr(s)
end;
end;
Вывод результата выполнен в заголовок панели Panel2.
Переменная х и результат s в форме – строкового типа, поэтому в
программе переменная х преобразована в вещественный тип данных
(StrToFloat), а при выводе s преобразуется в строковый тип данных (FloatToStr).
Множественный выбор
Для выполнения множественного выбора используются переключатели.
Delphi для работы с переключателями предлагает следующие компоненты:
 переключатель с независимой фиксацией (CheckBox), флажок этой
компоненты можно переключать щелчком мыши;
 переключатели с зависимой фиксацией – RadioButton (кнопки выбора),
RadioGroup (группа переключателей RadioButton).
Если в группе зависимых переключателей выбран один, то в отличие от
независимого переключателя, его состояние нельзя изменить повторным
щелчком. Для отмены выбора зависимого переключателя нужно выбрать другой
переключатель из этой группы.
Пример 2.
Вывести на экран произведения одного из пяти известных поэтов. Вывод
выполнить с помощью зависимого переключателя RadioGroup.
Конструирование формы
Для ввода фамилий поэтов выберем компонент RadioGroup (группа
зависимых переключателей).
Items этого компонента – список (зададим заголовки переключателей:
(А.С. Пушкин, М.Ю. Лермонтов, С. Есенин, А. Блок, В. Маяковский).
ItemIndex указывает, какой из списка выбран переключатель: -1 – выбран
никакой, 0 – первый и т. д.).
Добавить компонент Panel2 для вывода результата и метку. Label2 с
заголовком Caption – Произведения известных поэтов.
Для запуска программы выберем компоненту Button и поместим ее на
Panel1 в верхней части формы. Свойство Caption у кнопки зададим –
Выполнить (рис. 3).
Все выбранные компоненты находятся на странице Standard.
19
Рисунок 3 – Форма с размещенными объектами
Для установки обработчика события выберем компоненту Button1.
Двойной щелчок на этой компоненте и мы попадаем в редактор кода
программы. В процедуре для получения результата используется оператор
множественного выбора case of.
Результат зависит от месторасположения поэта.
procedure Tform1.Button1Click(Sender:Tobject);
Var
c:string;
begin
case RadioGroup1.ItemIndex of
0: c:='Поэмы: Руслан и Людмила, Бахчисарайский фонтан';
1: c:='Поэмы: Мцыри, Демон';
2: c:='Поэмы: Анна Снегина, Пугачев';
3: c:='Стихи О прекрасной даме';
4: c:='Поэмы: Хорошо, Облако в штанах';
end;
Panel2.Caption:=c;
end;
Так как в процедуре нет никаких вычислений и результат символьный (тип
string), то и нет никаких преобразований данных в отличие от предыдущего
примера. Полный текст модуля будет иметь вид:
unit Unitradio1;
interface
uses
Windows, Messages, SysUtils,
Forms,
Dialogs, StdCtrls, ExtCtrls;
Variants,
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
20
Classes,
Graphics,
Controls,
RadioGroup1: TRadioGroup;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
c:string;
begin
case RadioGroup1.ItemIndex of
0: c:='Поэмы: Руслан и Людмила, Бахчисарайский фонтан';
1: c:='Поэмы: Мцыри, Демон';
2: c:='Поэмы: Анна Снегина, Пугачев';
3: c:='Стихи О прекрасной даме';
4: c:='Поэмы: Хорошо, Облако в штанах';
end;
Panel2.Caption:=c;
end;
end.
Варианты заданий
Задание 1. Создать форму и процедуру обработки процесса выбора по
заданному варианту.
1. Вычислить
площадь
прямоугольника,
если
его
стороны
положительные.
2. Вычислить S=x-x3/6,если 0.1<=x<=1, иначе y=sin(x).
3. Произвести расчет по формуле z=a2+b2+(a-b)2, если a – положительное,
b – отрицательное, иначе расчет не выполнять.
4. Даны числа a, b, c. Найти наибольшее из них.
5. Вычислит S=x- x3/6 +x5/120, если 0.1<=x<=1, иначе y=e2x.
6. Вычислить значение функции:
y=sin(x), если x>0;
y=x2/4, если x<=0.
7. Написать программу, которая определяет, принадлежит ли число N
заданному интервалу [k,m].
8. Среди чисел A и B, найти большие 20 и вывести их на экран.
9. Заданы числа x и y. Если их сумма положительна, вывести на экран эти
числа, иначе вывести на экран их разность.
21
10. Задать значения переменным C и D. Если они имеют отрицательные
значения, вывести на экран сумму квадратов этих чисел, иначе квадрат суммы.
11. Задать значения переменным целочисленного типа X и Y. Если X<Y
вывести остаток от деления X на Y, иначе вывести на экран целую часть от
деления X на Y.
12. Задать значения для целочисленной переменной X и для вещественной
переменной Y. Найти сумму этих чисел, если X>0, в противном случае, найти
результат от деления X на Y и поместить его в целую переменную Z.
13. Среди заданных чисел X и Y, найти отрицательные и вывести на экран
модули этих чисел.
14. Вывести на экран целую часть вещественного числа x вычисляемого с
помощью выражения x=у +20у, если значение у отрицательное.
15. Среди чисел x и у, вводимых оператором ввода, найти положительные и
вывести на экран целую и дробную части вещественных чисел х и у отдельно.
Задание 2. Создать форму и процедуру обработки процесса
множественного выбора по заданному варианту.
1. Вычислить y, если
0<x<1 y=x+0.2+x2 ;
1<=x<2 y=x+1/x2 ;
x>=2 y=0;
Для выбора использовать условия задачи, а для задания значения х
однострочный текстовый редактор Edit.
2. Составить программу для вычисления площади одной из фигур:
квадрата, круга или прямоугольника по значению x, интерпретируемому как
сторона квадрата, радиуса или основание прямоугольника, высота
прямоугольника превышает основание в 2 раза. Для задания х использовать
однострочный текстовый редактор Edit.
3. Для заданного x вычислить y
y=100, если x=2;
y=100x2, если x>2;
y=100-x2, если x<2;
Для выбора использовать условия задачи, а для задания х однострочный
текстовый редактор Edit.
4. Определить знак функции
y=-1, если x<0;
y=0, если x=0;
y=1, если x>0.
5. Составить программу, которая вычисляет сумму, разность,
произведение двух чисел в зависимости от выбора операции. Значения чисел
задать с помощью однострочного текстового редактора Edit.
6. В зависимости от выбора вывести на экран название двух фруктов,
двух трав, двух овощей.
7. Вывести в форму в зависимости от выбора фамилии двух известных
писателей, двух поэтов или двух художников.
22
8. Для заданных значений радиусов 10, 20, 40, 80 вычислить площадь
круга и вывести в форму в зависимости от выбранного значения.
9. Вывести в форму в зависимости от выбора произведения четырех
русских писателей.
10. По каждому из любых четырех устройств компьютера вывести в форму
назначение каждого устройства в зависимости от выбора.
11. В зависимости от выбора вывести в форму: радиус, длину окружности,
площадь круга. Величину радиуса задать с помощью однострочного текстового
редактора Edit.
12. Вывести в форму значения единиц информации: 1-го байта, 1-го
Кбайта, 1-го Мбайта в битах.
13. Вывести в форму назначение основных этапов решения задач на ЭВМ.
Этап выбрать с помощью RadioGroup.
14. Вывести в форму названия основных логических операций: И, ИЛИ,
НЕ.
15. Вывести на экран тип файла: MS Word, MS Excel, MS Access, Borland
Pascal.
Технология выполнения работы
В данной работе сначала создается форма приложения, а затем процедура
обработки процесса.
Содержание отчета
1. Задание и цель работы.
2. Описание формы.
3. Текст процедуры обработки процесса.
1.
2.
3.
4.
5.
Вопросы для защиты работы
Назначение Инспектора объектов (Object Inspector).
Что такое интерфейс приложения?
Для какой цели используется палитра компонентов?
Что такое функциональность приложения?
Какой язык программирования используется при работе с Delphi?
23
ЛАБОРАТОРНАЯ РАБОТА № 3
РАБОТА С МАССИВАМИ В СРЕДЕ ПРОГРАММИРОВАНИЯ
BORLAND DELPHI
Время выполнения – 4 часа.
Цель работы
Научиться
разрабатывать
программы,
организованные в виде массивов.
использующие
данные,
Задачи лабораторной работы
После выполнения работы студент должен:
 знать основы работы с массивами данных в среде Delphi;
 уметь самостоятельно написать программу, работающую с массивами
данных.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows
2003 и выше и система визуального программирования Delphi на основе 6-ой
версии.
Общие теоретические сведения
Для работы с массивами удобно использовать компоненты StringGrid и
Memo.
Основные свойства StringGrid:
 Name – имя компонента;
 Colcount – количество столбцов;
 RowCount – количество строк;
 Cells – ячейка таблицы;
 FixedCols – количество зафиксированных столбцов;
 Options.goEditing
–
признак
допустимости
редактирования
содержимого ячеек (true, false);
 Options.goTab – разрешает (true) или запрещает (false) использование
клавиши TAB для перемещения курсора в следующую ячейку таблицы;
 Options.goAlways – признак нахождения компонента в режиме
редактирования;
 DefaultColWidth – ширина колонок таблицы;
 DefaultRowHeight – высота строк таблицы;
 GridLineWidth – расстояние от левой границы поля таблицы до левой
границы формы;
 Left – расстояние от верхней границы поля таблицы до верхней;
 Top – границы формы;
 Height – высота поля таблицы;
24
 Width – ширина поля таблицы;
 Font – шрифт для отображения содержимого таблицы;
 ParentFont – признак наследования характеристик шрифта формы.
Пример.
Задать массив из 5-ти элементов. Найти произведение элементов массива,
превышающих значение 1-го элемента. Переставить местами 1-ый и последний
элементы массива. Вывести элементы массива в строку компоненты Memo.
Для выполнения задания необходимо выполнить следующие действия.
1. Поместить на форму компоненты: панели Panel1 (в верхней части
экрана для ввода информации) и Panel2 (в нижней части для вывода
информации) (страница Standard).
2. Для панелей задать свойство Caption – пустое (очистить место для
вывода результата).
3. Разместить метки для панелей Label1 и Label2 (страница Standard).
4. Задать Caption для следующих объектов:
 Label1 – ввод массива (панель Panel1);
 Label2 – результаты ( вывод результата в панель Panel2)
5. Разместить кнопку Button1 (страница Standard).
6. Установить для кнопки следующее свойство Caption – Вычислить.
7. Добавить компонент StringGrid1 и задать следующие свойства:
 ColCount – 5 (количество столбцов);
 FixedCols – 0 (количество фиксированных столбцов);
 RowCount – 1 (количество строк);
 DefaultRowHeight – 24 (высота строки);
 DefaultColWidth – 64 (ширина столбца).
8. Задать опции для редактирования информации (Options):
 Options.go.Editing – true;
 Options.goTabs – true;
 Options.go.Always – true.
Для вывода массива на экран будем использовать компоненту Memo1
(Многострочный редактор).
Управлять вычислением будет кнопка Button1.
Полученная форма будет иметь вид (рис. 1):
25
Рисунок 1 – Форма с размещенными объектами
Для кнопки Button1 необходимо создать обработчик события OnClick
(нажатие кнопки).
Двойной щелчок на этой кнопке приводит к появлению на экране окна кода
программы.
Курсор устанавливается в процедуру-обработчика события, которая
должна иметь следующий вид:
procedure Tform1.Button1Click(Sender:Tobject);
Var
a:array[1..5] of integer; // описание массива а
pr,I,с:integer;
//
pr
–
переменная
для
вычисления
произведения элементов массива, i – индекс элементов массива, спеременная для перестановки местами 1-го и 5-го элементов массива
stroka:string;
begin
// ввод массива
// считаем, если ячейка пустая, то соответствующий элемент массива
равен 0
for i:=1 to 5 do
if Length (StringGrid1.Cells[i-1,0])<>0
then a[I]:= StrToInt(StringGrid1.Cells[i-1,0])
else a[I]:=0;
// проверка наличия значения элемента
массива в ячейке компоненты StringGrid1
// Обработка массива
Pr:=1;
for i:=1 to 5 do
if a[i]>a[1] then pr:=pr*a[i];
// вычисление произведения элементов массива
// вывод произведения элементов массива в заголовок панели Panel2
Panel2.Caption:=’Произведение элементов=’ +IntToStr(pr) ;
// перестановка местами 1-го и 5-го элементов массива
c:=a[1]; a[1]:=a[5]; a[5]:=c;
// вывод массива в строку
Stroka:=’
’;
// в строку помещаем пробелы
Memo1.Lines.Add(‘Массив после обработки’);
for i:=1 to 5 do
stroka:=stroka+ IntToStr(a[i]);
26
Memo1.Lines.Add(stroka);
end;
При нажатии клавиш Ctrl+F9 выполняется компиляция кода программы.
Если компиляция выполнена успешно (ошибок нет) то можно выполнить
Project1 с помощью клавиши F9. Преобразование значений элементов массива
из формы выполняется в соответствии с описанием в тип Integer (StrToInt), а
результат – произведение элементов массива при выводе в форму преобразуется
в тип String (IntToStr).
Варианты заданий
Задание. Создать форму и процедуру обработки процесса выбора по
заданному варианту.
1. Найти максимальный элемент в массиве X1, X2, ..., Xn и его порядковый
номер, n – длина массива. Массив вывести на экран.
2. Для n пар произвольных чисел ai и bi подсчитать mi =2ai/cbi, где c –
наибольшее из чисел ai и bi. Исходные данные: a1, a2, ..., an и b1, ..., bn массивы, n
– длина массивов. Массивы вывести на экран.
3. В массиве X1, X2, ..., Xn подсчитать количество чисел, принадлежащих
отрезку [a,b] и сумму всех остальных. Исходные данные: n – длина массива; a,b
– границы интервала, X1, X2, ..., Xn – массив. Массив вывести на экран.
4. Найти среднеарифметическое значение элементов вещественного
массива A1, A2, ..., An, предшествующих первому элементу, большему 50.
Исходные данные: n – длина массива, A1, A2, ..., An – массив. Массив вывести на
экран.
5. В массиве X1, X2, ..., Xn найти отрицательные элементы, их количество и
поместить их в отдельный массив. Оба массива вывести на экран.
6. Даны два одномерных массива вещественных чисел. Найти в них
максимальные элементы и поменять их местами. Массивы вывести на экран.
7. Дан массив радиусов R1, R2, ..., Rn. Для нечетных радиусов вычислить
площадь круга, а для четных длину окружности. Результаты вывести на экран.
8. В массиве A[k] найти минимальный элемент и вывести его на экран.
Переставить местами первый и последний элементы массива. Массив вывести
на экран до и после перестановки.
9. Найти произведение элементов массива B[m] значение которых не
равно значению первого элемента. Переставить местами 2 и 3 элементы
массива. Массив вывести на экран до и после перестановки.
10. Вычислить объемы 5 цилиндров по формуле V=πRi2Hi. Исходные
массивы: массив радиусов R1, R2, …, R5 и массив высот H1, H2, ..., H5.
11. Задан массив A[n]. Найти сумму элементов, значение которых
превышает значение последнего элемента массива и заменить последний
элемент этой суммой. Массив вывести на экран до и после перестановки.
12. Задан массив B[n]. Разделить его элементы на второй элемент массива.
Найти сумму квадратов элементов вновь полученного массива. Массив и сумму
вывести на экран.
27
13. Вычислить в заданных точках значение полинома по схеме Горнера
Pn(x)=(((AnX+An-1)X+An-2)X+...)X+A0, исходные данные A0, A1, ..., An – массив
коэффициентов; X – переменная; n – степень полинома.
14. Составить программу нахождения элементов в массиве A[m], значения
которых превышает 20. Переставить местами 1 и 2 элементы массива. Массив
вывести на экран.
15. Заменить значения элементов массива, превышающие число 10 на
нулевое и найти сумму элементов массива. Массив вывести на экран.
Технология выполнения работы
В данной работе сначала создается форма приложения, а затем процедура
обработки массива.
Содержание отчета
1. Задание и цель работы
2. Описание формы.
3. Текст процедуры обработки процесса
Вопросы для защиты работы
1. Какие компоненты используются при работе с массивами?
2. Как описывается массив в Object Pascal?
3. С помощью какой функции работы со строками проверяется наличие
значения в ячейке компоненты StringGrid?
4. Можно ли вывести элементы массива в компоненту StringGrid?
5. Как вывести элементы массива в компоненту Memo в столбец?
28
ЛАБОРАТОРНАЯ РАБОТА № 4
РАБОТА С ГРАФИКОЙ В СРЕДЕ ПРОГРАММИРОВАНИЯ
BORLAND DELPHI
Время выполнения – 4 часа.
Цель работы
Научиться разрабатывать программы для построения изображений в среде
Borland Delphi.
Задачи лабораторной работы
После выполнения работы студент должен:
 знать основы работы с графическими процедурами в среде Delphi;
 уметь самостоятельно написать программу для построения
изображений средствами языка программирования Delphi.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows
2003 и выше и система визуального программирования Delphi на основе 6-ой
версии.
Общие теоретические сведения
Общие замечания
1. Программа может выводить графику на поверхность объекта (формы
или компонента Image), которой соответствует свойство Canvas.
2. Для того чтобы на поверхности объекта появился графический элемент
необходимо к свойству Canvas этого объекта применить соответствующий
метод.
3. Цвет, стиль и толщину линий, вычерчиваемых методами Line, Ellipse,
Rectangle и т. д. определяет свойство Pen объекта Canvas.
4. Цвет закраски внутренних областей геометрических фигур,
вычерчиваемых методами Line, Ellipse, Rectangle и т. д, определяет свойство
Brush объекта Canvas.
5. Характеристики шрифта текста, выводимого методом TextOut,
определяет свойство Font объекта Canvas.
Процедуры работы с линиями
Line(x1, y1, x2, y2:integer) – проводит линию текущего цвета между
точками с координатами x1, y1, x2, y2.
LineRel(Dx, Dy: integer) – проводит линию из текущей позиции в точку,
сдвинутую относительно исходной позиции на величины Dx и Dy.
LineTo(x, y) – проводит линию из текущей позиции в точку с заданными
координатами x, y.
29
MoveRel(Dx, Dy: integer) – перемещение указателя на заданное расстояние
Dx, Dy по отношению к предыдущему положению.
MoveTo(x, y:integer) – перемещение указателя координат в точку окна с
координатами x и y.
Процедуры построения фигур из линий
RecTangle(x1, y1, x2, y2:integer) строит контур прямоугольника текущим
цветом;
x1, y1 – координаты верхнего левого угла прямоугольника;
x2, y2- координаты правого нижнего угла прямоугольника.
Bar3D(x1, y1, x2, y2:integer, Dept:Word, Top:Boolean) – строит закрашенный
параллелепипед с координатами левого верхнего (x1, y1) и правого нижнего (x2,
y2) углов;
Dept – ширина боковой грани;
Top – признак включения верхней грани (True – вычерчивается, иначе не
отображается).
DrawPoly(NumPoints:Word; var PolyPoints) – строит контур многоугольника
с заданными параметрами и цветом;
NumPoints – число вершин многоугольника;
PolyPoints – переменная без типа, содержащая NumPoint пар координат
вершин многоугольника (координаты перечисляются в той последовательности,
как они идут по контуру; первая вершина повторяется в конце).
FillPoly(NumPoints:Word; var PolyPoints) – строит многоугольник,
закрашенный текущим орнаментом и цветом заполнения. Параметры – по
аналогии с DrawPoly.
Процедуры построения криволинейных фигур
Arc(x, y:integer; StAng, EndAng, Rad:Word) – рисует дугу окружности
текущим цветом;
x, y – координаты центра дуги;
StAng – угол до начальной точки дуги, отсчитываемый против часовой
стрелки от горизонтальной оси, направленный слева направо;
EndAng – угол до конечной точки дуги, отсчитываемый против часовой
стрелки от горизонтальной оси, направленный слева направо;
Rad – радиус дуги.
Ellipse(x, y:integer; StAng, EndAng, XRad,YRad:Word) – рисует дугу эллипса
текущим цветом;
x, y – координаты центра эллипса;
StAng – угол до начальной точки эллипса, отсчитываемый против часовой
стрелки от горизонтальной оси, направленный слева направо;
EndAng – угол до конечной точки эллипса, отсчитываемый против часовой
стрелки от горизонтальной оси, направленный слева направо;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
Circle(x, y:integer, Rad:Word) – рисует окружность текущим цветом;
x, y – координаты центра окружности;
30
Rad – радиус окружности.
FillEllipse(x, y:integer; XRad,YRad:Word) – рисует эллипс, закрашенный
текущим цветом;
x, y – координаты центра эллипса;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
PieSlice(x, y:integer; StAng, EndAng, Rad:Word) – рисует сектор круга,
закрашенный текущим цветом;
x, y – координаты центра сектора круга;
StAng – начальный угол сектора, отсчитываемый против часовой стрелки
от горизонтальной оси, направленный слева направо;
EndAng – конечный угол сектора, отсчитываемый против часовой стрелки
от горизонтальной оси, направленный слева направо;
Rad – радиус сектора.
Sector(x, y:integer; StAng, EndAng, XRad,YRad:Word) – рисует сектор
эллипса, закрашенный текущим орнаментом и цветом заполнения;
x, y – координаты центра сектора эллипса;
StAng – начальный угол эллипса, отсчитываемый против часовой стрелки
от горизонтальной оси, направленный слева направо;
EndAng – конечный угол эллипса, отсчитываемый против часовой стрелки
от горизонтальной оси, направленный слева направо;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
Основную работу по выводу графики на поверхность формы должна
выполнять функция обработки события OnPaint.
Пример.
Написать программу, которая на поверхности формы рисует флаг
Российской Федерации (рис. 1).
Рисунок 1 – Изображение флага Российской Федерации
Программный код.
// обработка события OnPaint
// процедура рисует флаг Российской Федерации
Procedure TForm1.FormPaint(Sender: TObject);
Const
L=200; //ширина флага(полосы)
H=40; // высота полосы
31
Var
X,y:integer; // левый верхний угол
Begin
X:=30;
Y:=50;
With Canvas do
Begin
// границы, цвет границы должен совпадать с цветом закраски
Brush.Color :=clWhite; // цвет закраски
Pen.Color: =clWhite; // цвет границы
Rectangle(x,y,x+L,y+H);
Brush.Color:=clBlue;
Pen.Color:=clBlue;
Rectangle(x,y+H,x+L,y+3*H);
Brush.Color:=clRed;
Pen.Color: = clRed;
Rectangle(x,y+2*H,x+L,y+3*H);
// контур
Pen.Color: =clBlack;
Brush.Style:=bsClear; // прозрачная кисть
Rectangle(x,y,x+l,y+h*3);
Font.Size:=24;
Font.Name:=’Times New Roman’;
Font.Color:=clWhite;
TextOut(50,200,’Россия’);
Font.Color:=clBlack;
TextOut(51,201,’Россия’);
End;
End;
End.
Варианты заданий
Задание. Написать программу, которая на поверхности формы рисует
олимпийский флаг (рис. 2) и флаги государств мира.
Рисунок 2 – Олимпийский флаг
Технология выполнения работы
В данной работе для формы приложения задать обработку события
OnPaint, а затем написать процедуру обработки.
При написании процедуры использовать:
Rectangle(a,a,b,c) – построение прямоугольника;
Pen.Color:=clBlack – задание цвета линий;
Ellipse(x,y,z,t) – построение эллипса.
32
Содержание отчета
1. Задание и цель работы
2. Описание формы.
3. Текст процедуры обработки процесса
Вопросы для защиты работы
1. Какое свойство используется для вывода графики на поверхность
объекта?
2. Какое свойство объекта Canvas определяет цвет, стиль, толщину линий
при использовании методов Line, Ellipse, Rectangle?
3. Какая функция обработки события используется при выводе графики?
33
ЛАБОРАТОРНАЯ РАБОТА № 5
VISUAL BASIC FOR APPLICATIONS (VBA).
ЛИНЕЙНЫЕ АЛГОРИТМЫ
Время выполнения – 4 часа.
Цель работы
Научиться использовать язык программирования Visual Basic for
Applications (VBA) для разработки модулей в Excel на основе линейных
алгоритмов.
Задачи лабораторной работы
После выполнения данной работы студент должен знать и уметь:
 знать все операторы, используемые в программах;
 уметь применять любые из изученных операторов для написания своих
модулей;
 уметь объяснить написанную программу.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows XP,
электронные таблицы Excel с приложением в виде языка Visual Basic for
Applications.
Общие теоретические сведения
VBA – это язык объектно-ориентированного программирования.
Основными парадигмами являются объект, свойство, метод, событие,
класс и семейство объектов.
Объект – это инкапсуляция данных вместе с кодом, предназначенным для
их обработки.
Семейство – объект, содержащий несколько других объектов того же
типа:
Worksheets (“Лист 1”) – рабочий лист с имени Лист1,
Worksheets (1) – первый лист рабочей книги.
Классы – это проект, на основе которого будет создан объект, т.е. класс
определяет имя объекта, его свойства и действия, над ним выполняемые. А
каждый объект, свою очередь, является экземпляром класса.
Методы – это действия, выполняемые над объектом.
Объект.метод – синтаксис метода
Пример.
Application.Quit – закрыть объект Application.
Worksheets (“Лист1”).Chartobjects.Delete – удалит все диаграммы с
листа “Лист1”.
34
Свойства – это атрибут объекта, определяющий его характеристики:
размер, цвет, положение на экране или состояние (доступность, видимость).
Для изменения характеристик меняют его свойства:
Объект.Свойство=Значение свойства
Пример.
Worksheets.Visible = False
Есть свойства, возвращающие объект:
ActiveCell возвращает активную ячейку активного листа активной рабочей
книги.
ActiveWindow – активное окно.
Свойства ActiveCell, ActiveWindow. ActiveCell и Application. ActiveWindow.
ActiveCell возвращают одну и ту же активную ячейку.
События – это действия, распознаваемые объектом.
Суть программирования на VBA и заключается в том, чтобы на событие
получить отклик.
Пример 1. Написать программу, которая вычисляет периметр треугольника.
Запись программы в виде блок-схемы (рис. 1) и визуальное представление
формы для ввода данных (рис. 2) и результата (рис. 3):
Начало
ВтораяСторона = 3,5
Ввод значения
третьей стороны
Вычисление периметра
треугольника
Вывод результата
Конец
Рисунок 1 – Блок-схема решения задачи
35
Рисунок 2 – Ввод исходных данных в процессе выполнения программы
Рисунок 3 – Вывод результата в процессе выполнения программы
Программный код
Option Explicit
Sub ПериметрТреугольника()
Dim ВтораяСторона, ТретьяСторона, Периметр As Single
ВтораяСторона = 3.5
ТретьяСторона
=
InputBox("Введите
значение
третьей
треугольника", "Третья сторона")
Периметр = Cells(1, 4) + ВтораяСторона + ТретьяСторона
MsgBox "Периметр треугольника = " & Периметр
End Sub
стороны
Пример 2. Вычислите значение квадратного корня из суммы трех
переменных.
Запись программы в виде блок-схемы (рис. 4) и визуальное представление
формы для ввода данных (рис. 5) и результата (рис. 6):
36
Начало
Ввод значений
трех переменных
Вычисление суммы трех переменных
и взятие квадратного корня
Вывод
результат
а
Конец
Рисунок 4 – Блок-схема решения задачи
а)
б)
в)
Рисунок 5 – Ввод исходных данных в процессе выполнения программы
37
Рисунок 6 – Вывод результата в процессе выполнения программы
Программный код
Option Explicit
Sub КореньКвадратныйИзСуммыТрехПеременных()
Dim ПерваяПеременная, ВтораяПеременная, ТретьяПеременная, Сумма As
Single
Dim Корень As Double
ПерваяПеременная = InputBox("Введите значение первой переменной",
"Первая Переменная")
ВтораяПеременная = InputBox("Введите значение второй переменной",
"Вторая Переменная")
ТретьяПеременная = InputBox("Введите значение третьей переменной",
"Третья Переменная")
Сумма = ТретьяПеременная + ВтораяПеременная + ПерваяПеременная
Корень = Sqr(Сумма)
MsgBox "Корень из суммы трех переменных = " & Корень
End Sub
Пример 3. Вычислить Y, задав значения переменным:
Y
5  x 4  2  sin 2 

cos  3  3  tg

Программный код
Sub Main()
Dim x, b, a, res As Single
x = -3
b = 2
a = 0,5
res = (Sqr(5 * x ^ 4 + 2 * Sin(b) ^ 2)) / Cos(Abs(a ^ 3 - 3 *
Tan(b)))
MsgBox "res=" & CStr(res)
End Sub
Private Sub CommandButton1_Click()
Dim x, b, a, res As Single
x = Cells(3, 1)
b = Cells(3, 2)
a = Cells(3, 3)
res = (Sqr(5 * x ^ 4 + 2 * Sin(b) ^ 2)) / Cos(Abs(a ^ 3 - 3 *
Tan(b)))
Cells(5, 2) = res
End Sub
38
Визуальное представление решения задачи представлено на рис. 7.
Рисунок 7 – Визуальное представление решения задачи
Пример 4. Вычислить f, задав значения переменным:
f 
4,8x
x
3
y

3

1
3
t  
4
x
Программный код
Sub Main()
Dim x, y, t, res As Single
x = -3
y = 2
t = 0.5
res = (x / (4.8 * x ^ 3 - y) ^ 3) + 1 / 4 * (t - 3 / x)
MsgBox "res=" & CStr(res)
End Sub
Private Sub CommandButton2_Click()
Dim x, y, t, res As Single
x = Cells(3, 9)
y = Cells(3, 10)
t = Cells(3, 11)
res = (x / (4.8 * x ^ 3 - y) ^ 3) + 1 / 4 * (t - 3 / x)
Cells(5, 10) = res
End Sub
Визуальное представление решения задачи представлено на рис. 8.
Рисунок 8 – Визуальное представление решения задачи
39
Варианты заданий
Задание 1. Составить блок-схему и написать программный код согласно
условию задачи.
1. Вычислите значение квадратного корня из суммы трех переменных.
2. Вычислите значение суммы обратных величин трех переменных.
3. Найдите сумму первой и второй переменных и разность первой и
третьей переменной.
4. Найти объем цилиндра.
5. Вычислить площадь прямоугольника.
6. Вычислите значение куба, квадрата и обратной величины переменных.
7. Найдите площадь круга по формуле S = R2 .
8. Найти расстояние от точки М до начала координат.
9. Найти сторону квадрата, площадь которого равна площади
прямоугольника.
10. Найти площадь ромба.
11. Определите произведение трех переменных.
12. Найти гипотенузу треугольника.
13. Найти остаток от деления двух действительных чисел.
14. Найти сумму квадратов трех чисел.
15. Найти среднее арифметическое трех введенных чисел.
Задание 2. Вычислить для своего варианта Y, задав значения переменным:
2e x  tg 3
 3  b  cos 
1. Y 
ln x  bx 2  ctga 2
2a 3  cos 4 
2. Y 
3. Y 
3  sin 2   2 cos 2 
b  ctg 2 
a 5  cos 2   2.8
4. Y 
2  tg 2   cos 3 
5. Y 
b 5  a 2 x 2  2  tg 3 
arccos x  2  sin 
7. Y 
9. Y 
a 3  b 2  arcsin 3 
a 2  sin 4   x
2  lg x 2  ln x 4
7.5  cos   2.3
11. Y 
13. Y 
15. Y 
5 x 2  2  ln x 6  sin 
2 cos 3   1.7
  tg 3   2  x
 2  cos 4    4
6. Y 
8. Y 
sec 2   cos 2 
2e
2  ln x 4  5  tg 3
12. Y 
14. Y 
2  sin 2   ln x 2
40
 1.3ctg
b 3  7  tg   
10. Y 
3a 2  cos   tg 3 
 
5 cos   arctg 3 
e  a 2  b 2
2  cos 3   e 
ctg 2   
e x  ln x 2  3.8
ctg 3 x  cos 
Задание 3. Вычислить для своего варианта f, задав значения переменным
1
1. f 
2. f 
1
1
t3
y
1
tx
3,2 x  t 2
9x

3. f  2
x  y t
y 5
x y
y

3 x2  4  
t

x
4. f 
4,8  x 
1
  y3
2 
2
 10  t 
3
5. f  
6. f 
1
1

3
4t  x 2,4  y
7. f 
t  yx
9. f 
13. f  
15. f
1  y 2
4

x  9t 

y  15,6

y5
9t

4
8,3  x  x

  9 
y

3
4
y
9x

10. f   t    3
3
x  0,5

t4
1

11. f 
4,9  x  yt  14
 t 


 x  5
2,8 x  t 
x  t  y  3 
t

1 2
 3,8  y 
8. f  
  x
2
 2t 
x
2
3
  t  y 
2
3
2 x
29 x 2
x4

4
12. f 
3
14. f 
t
x y  x 
3
4

1 2
xy
2
8t 8,8 x  t 

18  y
x4
2
x
4  t3
Технология выполнения работы
1. Разработать алгоритм для написания программы в виде блок-схемы.
2. Написать программу.
3. Протестировать ее с разными исходными данными.
Содержание отчета
1. Цель работы, условие задачи
2. Алгоритм в виде блок-схемы.
3. Исходный текст программы.
4. Вводимые данные и результаты.
5. Фрагменты экрана с диалоговыми окнами Excel.
6. В программе значение одной из переменных должно быть записано в
ячейке электронной таблицы.
41
7. Значение другой переменной задается в программе или вводится с
помощью окна-диалога.
8. Все типы переменных и констант, которые используются в программе,
должны быть объявлены и отражать смысловое значение переменных или
констант.
9. Результат работы программы должен иметь наглядный вид.
10. Для запуска макроса создать кнопку с соответствующей надписью.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Вопросы для защиты работы
Какие встроенные типы данных вы знаете?
Как описываются переменные?
Как объявляют константы?
Какие операции языка VBA вы знаете?
Какие операторы языка VBA вы знаете?
Перечислите операторы управления
Укажите операторы, используемые для ввода данных с рабочего листа.
Как заменить Arcsin в VBA?
Укажите формулу, которая заменит Arcctg в VBA.
42
ЛАБОРАТОРНАЯ РАБОТА № 6
VISUAL BASIC FOR APPLICATIONS (VBA).
УСЛОВНЫЕ АЛГОРИТМЫ
Время выполнения – 6 часов.
Цель работы
Научиться использовать язык программирования Visual Basic for
Applications (VBA) для разработки модулей в Excel на основе условных
алгоритмов.
Задачи лабораторной работы
После выполнения данной работы студент должен знать и уметь:
 знать все операторы, используемые в программах;
 уметь применять любые из изученных операторов для написания своих
модулей;
 уметь объяснить написанную программу.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows XP,
электронные таблицы Excel с приложением в виде языка Visual Basic for
Applications.
Общие теоретические сведения
VBA – это язык объектно-ориентированного программирования.
Основными парадигмами являются объект, свойство, метод, событие,
класс и семейство объектов.
Объект – это инкапсуляция данных вместе с кодом, предназначенным для
их обработки.
Семейство – объект, содержащий несколько других объектов того же
типа.
Классы – это проект, на основе которого будет создан объект, т.е. класс
определяет имя объекта, его свойства и действия, над ним выполняемые. А
каждый объект, свою очередь, является экземпляром класса.
Методы – это действия, выполняемые над объектом.
Свойства – это атрибут объекта, определяющий его характеристики:
размер, цвет, положение на экране или состояние (доступность, видимость).
События – это действия, распознаваемые объектом.
Пример 1.
Написать программу вычисления функции пользователя.
𝑥 + 𝑦 , если 𝑥 > 0 и 𝑦 > 1
𝑧= {
𝑥 / 𝑦 , если 𝑥 ≤ 1 и 𝑦 <> 0
43
Предусмотреть сбойную ситуацию (при y = 0) и в этом случае выдать
сообщение об ошибке.
Запись программы в виде блок-схемы (рис. 1) и визуальное представление
ввода данных и вывода результата (рис. 2):
Рисунок 1 – Блок-схема решения задачи
Программный код
Function z (x, y)
If y = 0 Then
z = "Ошибка! На ноль делить нельзя!"
ElseIf x > 0 And y > 1 Then
z = x + y
ElseIf x < = 1 And y <> 0 Then
z = x / y
End If
End Function
44
Рисунок 2 – Ввод исходных данных в процессе выполнения программы
Пример 2.
Написать программу вычисляющую значение Z
(𝑥 − 𝑦)𝑥 , если 𝑥 > 0.1 и 𝑦 > 0.1
𝑧 = { sin(𝑥) , если 𝑥 < 0.1 и 𝑦 < 0.1
𝑥 2 / 𝑦 , если 𝑥 = 0.1 и 𝑦 = 0.1
Программный код
Sub Условия()
Dim x, y, Z As Double
x = Range("A2").Value
y = Range("B2").Value
If x > 0.1 And y > 0.1 Then
Z = (x - y) ^ x
ElseIf x < 0.1 And y < 0.1 Then
Z = Sin(x)
ElseIf x = 0.1 And y = 0 Then
If y = 0 Then
MsgBox "Ошибка! Деление на ноль!"
Else: Z = (x * x) / y
End If
End If
Cells(2, 4).Value = Z
End Sub
45
Рассмотрим результат работы программы при разных значениях x и y
(рис. 3, 4, 5).
Рисунок 3 – Результат вычисления функции y= sin(x) при x<0.1 и y<0.1
Рисунок 4 – Результат вычисления функции y= (x - y)x при x>0.1 и y>0.1
Рисунок 5 – Результат вычисления функции y=x2/y при x=0.1 и y=0
Варианты заданий
Задание 1. Составить блок-схему и написать программу вычисления
функции пользователя
(𝑥 − 𝑦)2 , если 𝑥 > 0.1 и 𝑦 > 0.1
1. 𝑧 = { sin(𝑥) , если 𝑥 < 0.1 и 𝑦 < 0.1
𝑥 2 / 𝑦 , если 𝑥 = 0.1 и 𝑦 = 0.1
| − 𝑥 + 1|2 , если 𝑥 ≤ 0.3
2. 𝑦 = {sin3 (𝑥) − 𝑐𝑜𝑠 2 (𝑥 − 3), если 𝑥 ∈ [0.3 ; 0.9]
𝑥 4 / 2𝑒 𝑥 , если 𝑥 ≥ 0.9
|𝑣| − 2 , если 𝑣 ≤ 0
3. 𝑡 = {1 / sin(3𝑣), если 𝑣 ∈ [0 ; 1]
3𝑣 3 + 𝑒 2𝑣+1 , если 𝑣 ≥ 1
46
|𝑥 + 1| + 𝑒 3𝑥 , если 𝑥 ≤ −1
4. 𝑔 = {−2x / sin(𝑥 + 3), если 𝑥 ∈ [−1 ; 1]
𝑥 3 + 2|cos(3𝑥)| , если 𝑥 ≥ 1
𝑧 ∗ 𝑥 2 , если 𝑥 < 0 и 𝑧 < 0
5. 𝑦 = {√𝑧 2 + 𝑥 2 , если 𝑥 > 0 и 𝑧 > 0
100 в остальных случаях
𝑎2 + 𝑐 2 ∗ 𝑥 , если 𝑥 ≥ 0 и 𝑎 ≥ 0 и 𝑐 ≥ 0
6. 𝑞 = { 𝑐 2+𝑥 2
, если 𝑥 < 0 и 𝑎 < 0 и 𝑐 < 0
𝑎
𝑧 3 , если 𝑧 ≤ 1
7. 𝑔 = { 1 / z , если 𝑧 ∈ [−1 ; 2]
√𝑧 + 1 − 𝑒 5𝑧 , если 𝑧 ≥ 2
1
|𝑎+sin(𝑎)|
, если 𝑎 < 0
8. 𝑝 = {
0 , если 𝑎 = 0
−𝑎 + √3sin(𝑎) , если 𝑎 > 0
𝑒 𝑏 + 7𝑏 3 , если 𝑏 ≤ 4
9. 𝑝 = {1.8 / sin3 (b2 ), если 4 < 𝑏 < 6
|6 − (𝑏 − 2)3 | , если 𝑏 ≥ 6
𝑧 + 4|𝑡 3 |sin(𝑡) , если 𝑡 < 0 и 𝑧 < 0
10. 𝑦 = {√𝑧 2 + 3cos(𝑡 2 ) , если 𝑡 > 0 и 𝑧 > 0
1 в остальных случаях
|−𝑥| − 3 sin(𝑥 3 ) , если 𝑥 < 1.3
11. 𝑓 = {1.3x / (sin(x + 1) + cos 2 (x)), если 𝑥 = 1.3
(𝑥 − 1.1) / 𝑒 −2𝑥+1 , если 𝑥 > 1.3
|𝑐𝑜𝑠 2 (2𝑏) − 3𝑏 3 |, если 𝑏 ≤ −2
12. 𝑠 = {8√b + 1 / sin(3 + b2 ) , если − 2 < 𝑏 < 2
(𝑏 + 2)4 + 6𝑏 , если 𝑏 ≥ 2
|𝑥 − 2| − 5𝑥 3 , если 𝑥 < 1.4
13. 𝑤 = { 1.3 sin(3x) , если 𝑥 = 1.4
𝑐𝑜𝑠 2 (𝑥) + 𝑒 −2𝑥+1 , если 𝑥 > 1.4
𝑥 + 𝑦𝑒 𝑥 , если 𝑥 < 0 и 𝑦 < 0
14. 𝑧 = {√sin(𝑥) 𝑐𝑜𝑠(𝑦), если 𝑥 ≥ 0.1 и 𝑦 ≥ 0.1
𝑦 3 − 𝑥 в остальных случаях
47
𝑧 2 + cos(2𝑧) , если 𝑧 ≤ 0.8
15. 𝑠 = {−2z|sin(z)| , если 𝑧 ∈ [0.8 ; 2]
√𝑧 + 7 / 𝑒 4−𝑧 , если 𝑧 ≥ 2
Задание 2. Составить блок-схему и функцию пользователя согласно
условию задачи.
1. Составить блок-схему и функцию пользователя для определения премии
торговому агенту от суммы совершенной им сделки. Если объем сделки до 3000
рублей, то премия 1.5 %; если объем до 10000, то – 3 %; если выше 10000, то –
5 %. Предусмотреть проверку корректности данного «объем сделки».
2. Составить блок-схему и разработать функцию пользователя для
вычисления годовой процентной ставки контракта по кредиту, взятого на
определенный срок при известных сумме долга и сумме, подлежащей возврату.
Используйте формулу:
𝑆−𝑃
𝐼=
,
𝑃𝑇
где P – сумма кредита, S – сумма, подлежащая возврату, Т – срок кредита.
Предусмотреть проверку корректности данных.
Для проверки и отладки программы используйте следующие исходные
данные: Т = 4 месяца, Р = 200 000, S = 210 000.
3. Составить блок-схему и разработать функцию пользователя для
вычисления надбавки к стипендии по результатам сессии. Размер стипендии
составляет 2 МРОТ (минимальный размер оплаты труда). Если три экзамена
сданы на "5", то надбавка составляет 50 %, если есть одна "4" (при остальных
"5"), то надбавка составит 25 %, если есть хотя бы одна "2", то стипендия не
назначается, т. е. равна "0".
4. Составить блок-схему и разработать функцию пользователя для расчета
суммы вклада с начисленным процентом в зависимости от вида вклада:
до востребования – 2 %, праздничный – 5 %, срочный – 3 %.
Для проверки и отладки программы используйте данные для всех видов
вкладов.
5. Составить блок-схему и разработать функцию пользователя для расчета
реальной доходности с учетом налога на прибыль, которая вычисляется по
формуле:
𝑖(1−𝑔)−ℎ
𝑌=
.
1+ℎ
где i – годовая процентная ставка, g - налог на прибыль, выраженный в
процентах, h - годовой темп инфляции, вычисляемый по формуле:
h=(1+h1/12)12- 1, где h1/12 – месячный темп инфляции.
Предусмотреть проверку корректности данных.
Для проверки и отладки программы используйте следующие исходные
данные: i =60 %, h1/12 =3 %, g =25 %.
6. Составить блок-схему и разработать функцию пользователя расчета
надбавки к окладу в зависимости от стажа работы сотрудников предприятия.
48
Если стаж работы меньше 5 лет, то надбавка составляет 0 %, если стаж от 5 до
10 лет, то надбавка – 5 %, если стаж больше 10 лет, то надбавка – 10 %.
7. Составить блок-схему и разработать функцию пользователя определения
комиссионных менеджеру по продажам от объема проданного товара. Если
объем продажи до 8 000 рублей, то комиссионные 6 %; если объем до 16 000
рублей, то – 8 %; если объем до 32 000 рублей, то – 10 %; если выше 32 000, то
– 12 %. Для обозначения ограничений объема продажи используйте константы.
8. Составить блок-схему и разработать функцию пользователя для расчета
премиальных, выплачиваемых рабочему, размер выплаты которых определяется
в зависимости от оклада и процента перевыполнения нормы выработки:
 Ниже 100% - премия не назначается, т. е. равна нулю,
 100%
- премия 20% от оклада,
 101-110%
- премия 30% от оклада,
 Выше 110% - премия 40% от оклада.
9. Составить блок-схему и разработать функцию пользователя,
определяющую площадь треугольника по его сторонам по следующей формуле:
𝑆 = √𝑝(𝑝 − 𝑎)(𝑝 − 𝑏)(𝑝 − 𝑐) ,
где a, b, c – стороны треугольника, р – полупериметр:
𝑎+𝑏+𝑐
𝑝=
.
2
Предусмотреть проверку корректности данных.
10. Составить блок-схему и разработать функцию пользователя
возвращающую большее из трех значений с указанием имени переменной.
11. Составить блок-схему и разработать функцию пользователя
возвращающую меньшее из трех значений с указанием имени переменной.
12. Составить блок-схему и разработать функцию пользователя,
возвращающую сумму первой и третьей по величине значений.
13. Составить блок-схему и разработать функцию пользователя,
вычисляющую стоимость потребляемой энергии компанией в зависимости от
установленной расценки и количества потребляемой энергии:
 Первые 240 кВт/час: 1,62руб. за кВт/час,
 Следующие 300 кВт/час: 2,10руб. за кВт/час,
 Свыше 540 кВт/час: 2,76руб. за кВт/час.
Для обозначения тарифов в процедуре использовать константы.
14. Составить блок-схему и разработать функцию пользователя начисления
премии сотрудникам малого предприятия в зависимости от стажа работы и
объема продажи товаров. Если стаж работы меньше 2 лет и объем продажи
больше 80 000руб., то премия составляет 1.5 %. Если стаж от 2 до 5 лет, а объем
продажи больше 100 000 руб., то премия – 5 %, если стаж больше 5 лет, а объем
продажи выше 100 000 руб., то премия – 7 %, в остальных случаях - премия –
1%.
15. Составить блок-схему и разработать функцию пользователя начисления
процента удержания у работников завода от начисленной заработной платы и
количества иждивенцев по следующему правилу:
 при количестве иждивенцев более трех – 0 %;
49




при трех иждивенцев – 5 %;
при двух иждивенцев – 10 %;
при одном иждивенце – 12 %;
если нет иждивенцев – 14 %.
Технология выполнения работы
1. Разработать алгоритм для написания программы в виде блок-схемы.
2. Написать программу.
3. Протестировать ее с разными исходными данными.
Содержание отчета
1. Цель работы, условие задачи
2. Алгоритм в виде блок-схемы.
3. Исходный текст программы.
4. Вводимые данные и результаты.
5. Фрагменты экрана с диалоговыми окнами Excel.
6. В программе предусмотреть сбойные ситуации (деление на ноль,
извлечение квадратного корня из отрицательного числа и т. д.).
7. Результат работы программы должен иметь наглядный вид.
Вопросы для защиты работы
1. Какая конструкция у оператора повтора?
2. Какие операторы разветвления Вы знаете?
3. Чем заканчивается оператор IF, если в ветке «да» несколько
операторов?
4. Как выглядит полная форма оператора IF?
5. Как выглядит оператор IF, если в ветке «нет» отсутствуют операторы?
50
ЛАБОРАТОРНАЯ РАБОТА № 7
VISUAL BASIC FOR APPLICATIONS (VBA).
ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ. РАБОТА С МАССИВАМИ
Время выполнения – 8 часов.
Цель работы
Научиться использовать язык программирования Visual Basic for
Applications (VBA) для разработки модулей в Excel на основе циклических
алгоритмов.
Задачи лабораторной работы
После выполнения данной работы студент должен знать и уметь:
 знать все операторы, используемые в программах;
 уметь применять любые из изученных операторов для написания своих
модулей;
 уметь объяснить написанную программу.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система Windows XP,
электронные таблицы Excel с приложением в виде языка Visual Basic for
Applications.
Общие теоретические сведения
VBA – это язык объектно-ориентированного программирования.
Основными парадигмами являются объект, свойство, метод, событие,
класс и семейство объектов.
Объект – это инкапсуляция данных вместе с кодом, предназначенным для
их обработки.
Семейство – объект, содержащий несколько других объектов того же
типа.
Классы – это проект, на основе которого будет создан объект, т.е. класс
определяет имя объекта, его свойства и действия, над ним выполняемые. А
каждый объект, свою очередь, является экземпляром класса.
Методы – это действия, выполняемые над объектом.
Свойства – это атрибут объекта, определяющий его характеристики:
размер, цвет, положение на экране или состояние (доступность, видимость).
События – это действия, распознаваемые объектом.
Пример 1.
В массиве чисел М(10) очистить клетки с нулевыми значениями.
51
Запись программы в виде блок-схемы (рис. 1) и визуальное представление
ввода данных и вывода результата (рис. 2):
Рисунок 1 – Электронная таблица с исходными данными
Блок - схема
Программа
Sub ОбнулениеКлетокС_НулевымиЗначениями()
For i = 1 To 10
If Cells(i, 1) = 0 Then Cells(i, 1).Clear
Next i
End Sub
Рисунок 2 – Результат работы программы
52
Пример 2.
Выявить, есть ли в массиве число 10? Если есть, на каком месте оно стоит
(известно, что число может встретиться несколько раз).
Программный код
Sub
Dim
Dim
i =
k =
A =
For
Число()
A As Variant
i, k As Integer
1
0
Range("A1:A10")
i = 1 To 10
If A(i, 1) = 10 Then
MsgBox ("Номер ячейки, содержащей число 10 - " & i)
k = k + 1
End If
Next i
MsgBox ("Число 10 встретилось следующее количество раз - " & k)
End Sub
Пример 3.
ix
n
Вычислить произведение ряда:
 2i  1
i 1
Программный код
Sub Main()
Dim x, n, res As Double
x = 3
n = 4
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
MsgBox "res=" & CStr(res)
End Sub
Private Sub CommandButton4_Click()
Dim x, n, res As Double
x = Cells(36, 1)
n = Cells(36, 2)
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
Cells(38, 2) = res
End Sub
53
Визуальное представление ввода данных и вывода результата (рис. 3):
Рисунок 3 – Результат работы программы
Пример 4.
Найти максимальное значение из значений элементов последовательности
x1, x2, …, x20 (одномерного массива), используя оператор do while…loop
Программный код
Private Sub CommandButton5_Click()
Dim x(20) As Double
Dim res, res1 As Double
i = 1
res = 0
Do While i < 20
x(i) = Cells(44 + i, 1)
If x(i) > res Then res = x(i)
i = i + 1
Loop
Cells(47, 4) = res
End Sub
Визуальное представление ввода данных и вывода результата (рис. 4):
Рисунок 4 – Результат работы программы
54
Пример 5.
Задан двумерный массив F(4 to 85, 2 to 6). Найти сумму элементов этого
массива.
Программный код
Private Sub CommandButton1_Click()
Dim f(6) As Integer
For j = 4 To 8
res = 0
For i = 2 To 6
f(i) = Cells(j, i)
res = res + f(i)
Next i
Cells(j, 7) = res
Next j
End Sub
Пример 6.
Найти в процедуре сумму в каждом столбце.
Программный код
Sub kol(ByRef x() As Integer, ByVal
Integer)
Dim i, j, k(2) As Integer
For j = 0 To m
k(j) = 0
For i = 0 To n
k(j) = k(j) + x(i, j)
Next i
MsgBox "k(j)=" & CStr(k(j))
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 2) As Integer
Dim k(2) As Integer
n = 4
m = 2
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m
End Sub
n
As
Integer,
ByVal
m
As
Пример 7.
В процедуре найти сумму элементов 1 и 3 строки и записать их на место
элементов 1 строки.
Программный код
Sub kol(ByRef x() As
Integer, k() As Integer)
Dim i, j As Integer
Integer,
55
ByVal
n
As
Integer,
ByVal
m
As
For j = 0 To m
x(1, j) = x(1, j) + x(3, j)
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 4) As Integer
Dim k(2) As Integer
n = 4
m = 4
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m, k
For j = 0 To m
For i = 0 To n
Cells(i + 7, j + 1).Value = x(i, j)
Next i
Next j
End Sub
Варианты заданий
Задание 1. Разработать алгоритм решения задачи и составить программу
согласно варианта.
1. Определить порядковые номера нулей в массиве.
2. Все отрицательные элементы массива заменить нулями. Выдать
сообщение о количестве таких замен.
3. Найти порядковый номер минимального числа в массиве.
4. Найти значение и координаты первого по порядку положительного
элемента в массиве.
5. Найти количество единиц в массиве.
6. Каких чисел в массиве больше: положительных или отрицательных?
(массив может содержать нулевые значения).
7. Исходные данные: В таблице 10 строк. Первый столбец – фамилия
работника, второй – стаж работника.
8. По стажу работника определить, к какой группе он относится, если 1
группа – стаж до 3-х лет, 2 группа – до 5 лет, 3 группа – до 10 лет, 4 группа –
свыше 10 лет.
9. Найти сумму диагональных элементов блока ячеек, состоящего из 5
строк и 5 столбцов.
10. Двадцати переменным массива присвоить одно и то же значение,
равное наибольшему из них.
11. Дан массив чисел. В клетке С1 записано некоторое число. Определить
порядковый номер этого числа в массиве. Если в массиве такого числа нет,
выдать об этом сообщение.
12. Просуммировать положительные и отрицательные числа в массиве.
Записать полученные суммы в ячейки В1 и В2. (в массиве могут быть нулевые
значения).
56
13. В клетку А1 записать число, если количество положительных элементов
массива больше количества отрицательных. В противном случае записать в
клетку А1 любой текст.
14. Найти сумму положительных элементов массива, имеющих индекс 3, 5,
7 и т.д.
15. В блоке ячеек записана матрица чисел. Ячейки с отрицательными
значениями закрасить синим цветом, с положительными – красным, с нулями –
желтым.
Задание 2. По заданным значениям a, x и n найти сумму ряда.
sin( i  x)
1. 
2i  1
i 1
ix
9.  2
i 1 i
cos(i  1)
2. 
2i  1
i 1
n
n
n
n
xi

2
i 1 i
n
3.
x n 1
4. 
i 1 i  1
10.
5.
 cos(i * x)
i 1
i 1
i 1
xi
xi
11. 
i 1 i  1
n
n
n
n

12.
cos( 2i  x)
 (2i  1)  (2i  1)
i 1
( x  1) 2i 1
13. 
2i  1
i 1
n
xi
6. 
i 1 i  (i  1)
i  xi
14. 
i 1 i  1
xi
7. 
i 1 i  (i  1)
x n 1
15. 
i
i 1
n
n
n
8.

i 1
n
n
xi
i
Задание 3. Решить задачу для своего варианта на одномерный массив
двумя способами: с данными на рабочем листе и вводимыми по тексту
программы.
1. Вычислить сумму элементов, стоящих на чётных местах в
последовательности х (20), используя оператор цикла do_loop until
2. Вывести на печать номера элементов, попавших в диапазон (а, b) для
последовательности а(30), используя оператор цикла for_next.
3. Вывести на печать количество элементов массива А1, А2, … А20,
попавших в интервал [2, 5] и их сумму, используя оператор цикла do_loop while.
4. Вывести на печать номера элементов последовательности Х(20),
значения которых равны заданному числу С, используя оператор цикла for_next.
57
5. Вычислить произведение элементов, стоящих на четных местах в
последовательности Х(20), используя оператор цикла do while_loop.
6. Найти количество элементов последовательности А(20), значения
которых равны нулю, используя оператор цикла do_loop until.
7. Вывести на печать номера и значения положительных элементов
последовательности Х(20), используя оператор цикла do until_loop.
8. Вывести на печать номера с отрицательными значениями элементов для
последовательности Х(20), используя оператор цикла for_next.
9. Найти
минимальное
значение
из
значений
элементов
последовательности А1, А2,…, А20, используя оператор цикла do_ loop while.
10. Найти
минимальное
значение
из
значений
элементов
последовательности Х1, Х2, … Х20, используя оператор цикла do_loop until.
11. В последовательности Х(20) вывести на печать номера элементов,
значения которых равны t, используя оператор цикла do until_loop.
12. Найти количество отрицательных элементов в массиве С1, С2,…, С20,
используя оператор цикла do until_loop.
13. Дана последовательность Х(10). Найти сумму отрицательных элементов
и вывести на печать номера этих элементов, используя оператор цикла do_loop
while.
14. Вычислить произведение элементов, стоящих на нечетных местах в
последовательности Х(20), используя оператор цикла do while_loop.
15. Дана последовательность Х1, Х2, …, Х20. Заменить в ней
отрицательные значения элементов на их квадраты. Вывести на печать
полученную последовательность, используя оператор цикла do while_loop.
Задание 4. Решить задачу для своего варианта на двумерный массив двумя
способами: с данными на рабочем листе и вводимыми по тексту программы.
1. Задан массив А(6,5). Найти номер строки и номер столбца с
минимальным значением.
2. Задан массив А(4,5). Найти минимальное значение.
3. Задан массив х(5,5). Найти сумму отрицательных значений в каждой
строке.
4. Задан массив х(5,5). Найти сумму положительных значений в каждом
столбце.
5. Задан массив с(5,5) и число а. Найти количество элементов, равных по
значению а.
6. Задан массив с(5,5) и число а. Найти сумму элементов, равных по
значению а.
7. Задан массив х(5,5) и число а. Найти номера строк и столбцов
элементов, равных по значению а.
8. Задан массив х(5,5) и интервал (а,b). Найти номера строк и столбцов
элементов, попавших по значению в этот интервал.
9. Задан массив х(5,5) и интервал х[а,b]. Найти количество элементов,
попавших по значению в этот интервал.
58
10. Задан массив х(5,5) и интервал х[а,b]. Найти сумму элементов,
попавших по значению в этот интервал.
11. Задан массив А(6,4). Найти номер строки и номер столбца с
максимальным значением.
12. Задан массив А(4,5). Найти максимальное значение.
13. Задан массив А(6,3). Найти номер строки и номер столбца с
максимальным значением в каждом столбце.
14. Задан массив А(5,5). Найти номер строки и номер столбца с
максимальным значением в каждой строке.
15. Задан массив А(4,5). Найти максимальное значение в каждой строке.
Задание 5. Решить задачи по условию 3 и 4 задания с использованием
подпрограмм.
Технология выполнения работы
1. Разработать алгоритм для написания программы в виде блок-схемы.
2. Написать программу.
3. Протестировать ее с разными исходными данными.
1.
2.
3.
4.
5.
6.
Содержание отчета
Цель работы, условие задачи
Алгоритм в виде блок-схемы.
Исходный текст программы.
Вводимые данные и результаты.
Фрагменты экрана с диалоговыми окнами Excel.
Результат работы программы должен иметь наглядный вид.
Вопросы для защиты работы
Как описываются массивы переменных?
Сколько операций цикла DO Вы знаете?
Как выглядит оператор цикла FOR?
Указать вид оператора DO, который выполняется, пока условие дает
1.
2.
3.
4.
истину.
5. Указать вид оператора DO, который выполняется, пока условие дает
ложь.
6. Можно ли прервать выполнение оператора FOR принудительно?
59
ЛАБОРАТОРНАЯ РАБОТА № 8
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ BORLAND C++.
ЛИНЕЙНЫЕ АЛГОРИТМЫ
Время выполнения – 2 часа.
Цель работы
Научиться работать в интегрированной среде программирования (ИСП) и
приобрести навыки составления линейных алгоритмов.
Задачи лабораторной работы
После выполнения работы студент должен уметь:
 вводить и редактировать текст (манипуляция с символами, строками,
блоками как в пределах одного окна, так и между ними);
 получать справку от ИСП;
 компилировать и запускать на выполнение программу;
 искать и исправлять синтаксические и семантические ошибки;
 выполнять трассировку (пошаговую отладку) программы;
 инициировать и изменять значения переменных;
 написать текст программы по схеме алгоритма, и, наоборот, по тексту
программы составить схему её алгоритма;
 написать текст программы на языке программирования C++;
 применять в структуре программы типы данных, арифметические
операции, математические функции, функции ввода и вывода, оператор
присваивания – и правила их использования;
 проводить тестирование программы, используя известные ему
приложения (например, Excel или MathCAD).
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система семейства
Windows и язык программирования С++.
Общие теоретические сведения
Интегрированная среда программирования Borland С++
Окно интегрированной среды программирования (ИСП) Borland C++ (BC)
состоит из 4-х основных частей: главного меню, окна редактирования, окна
сообщений и строки состояния, в каждую из которых можно войти с помощью
«мыши» (рис. 1).
60
Главное
меню
Окно
редактирования
Окно
сообщений
Строка
состояния
Рисунок 1 – Интерфейс интегрированной среды программирования Borland C++
«Главное меню» доступно клавишей F10 или путем нажатия комбинаций
клавиш ALT и первой буквы соответствующего элемента меню.
Таблица 1 – Меню File, команды работы с файлами
New
Open...
Save
Save as...
Save all
Change dir...
Print
Print setup...
Dos shell
Exit
F3
F2
Alt+X
открыть новое окно редактирования
открыть существующий файл с диска
сохранить программу под старым именем
сохранить программу под новым именем
сохранить все файлы из всех окон
сменить каталог
печать программы
установка параметров печати
временный выход в MS DOS
выход из ИПС
Таблица 2 – Меню Edit, команды редактирования
Undo
Alt+BksSp
Redo
Cut
Shift+Del
Copy
Ctrl+Ins
Paste
Shift+Ins
Clear
Ctrl+Del
Show clipboard
Search
Find...
Replace...
Search again
Go to line number
отменить последнее действие
повторить последнее действие
вырезать выделенный фрагмент
копировать выделенный фрагмент в буфер обмена
вставить содержимое буфера обмена
удалить выделенный фрагмент
показать окно буфера обмена
команды поиска
найти фрагмент, указанный в окне
найти фрагмент и заменить его на указанный в окне
повторить поиск
перейти к указанному номеру строки
61
Show last compiler error
Find error...
Find procedure...
Previous browser
Objects
Units
Global
Symbol...
показать последнюю ошибку компиляции
найти ошибку
найти процедуру, заданную в окне
покачать информацию предыдущего окна
показать в окне «дерево» объектных файлов
показать в окне «дерево» модулей
показать все глобальные переменные
задать идентификатор для выдачи номеров строк с ним
Run
Step over
Trace into
Go to cursor
Program reset
Parameters...
запуск программы на исполнение
пошаговое выполнение процедур
пошаговое выполнение операторов
выполнение фрагмента до курсора
завершение сеанса отладки
настройка параметров
Таблица 3 – Меню Run, команды запуска расчета
Ctrl+F9
F8
F7
F4
Ctrl+F2
Таблица 4 – Меню Compile, компиляция программы
Compile
Make
Build
Target... Real
Primary file...
Clear primary
Information...
Alt+F9
F9
компиляция файла
перекомпиляция только измененных модулей
перекомпиляция всех модулей
выбор режима-приложения
указание главного файла для команд Make и Build
отмена указания главного файла
информация о скомпилированном файле
Таблица 5 – Меню Debug, команды отладки
Breakpoints
Call stack
Ctrl+F3
Register
Watch
Output
User screen
Alt+F5
Evaluate modify...Ctrl+F4
Add watch...
Ctrl+F7
Add breakpoint...
управление точками прерывания
показ имен процедур до работающей процедуры
информация о регистрах процессора
информация о значениях переменных и выражений
отображение результатов без графики
просмотр результатов программы
просмотр и изменение значений переменных
просмотр конкретных значений переменных
установка условных и безусловных точек прерывания
Таблица 6 – Меню Tools, команды работы с сообщениями ИПС и
утилитами отладки
Messages
Go to next
Go to previous
Grip
Turbo Assembler
Turbo Debugger
Turbo Profiler
Alt +F8
Alt+F7
Shift+F2
Shift+F3
Shift+F4
Shift+F5
переход в окно сообщений
переход к следующему элементу окна
переход к предыдущему элементу окна
вызов программы Grip
вызов программы Assembler
вызов программы Debugger
вызов программы Profiler
62
Таблица 7 – Меню Options, команды установки параметров
интегрированной среды
параметры, определяющие работу компилятора
размеры стека, размер памяти
параметры компоновщика
задает каталоги, для помещения и извлекания файлов
опции, связанные с просмотром
местоположение программных компонентов меню
параметры работы с мышью, редактором и т. п.
открывает файл конфигурации
сохраняет файл конфигурации
сохраняет файл конфигурации с запросом имени
Compiler
Memory Sizes
Linker
Directories
Browser
Tools
Environment
Open
Save
Save as…
Таблица 8 – Меню Window, команды управления окнами
Tile
Cascade
Close all
Refresh display
Save Move
Zoom
Next
Previous
Close
List
Ctrl+F5
F5
F6
Shift+F6
Alt+F3
Alt+0
показать все открытые окна редактирования
показать в каскадном виде все открытые окна
редактирования
закрыть все открытые окна
восстановление изображения ИПС после сбоев
изменение размеров окна
раскрытие окна до полного размера экрана
переход в следующее окно
переход в предыдущее окно
закрытие окна
перечисление всех окон с момента работы ИПС
Таблица 9 – Меню Help, вызов справочной информации
Contents
Index
Shift+Fl
Topic search
Ctrl+Fl
Previous topic Alt+Fl
Using help
Filet...
Compiler directives
Procedures and functions
Reserved words
Standards units
Error messages
About ...
вывод оглавления справки
вывод алфавитного перечня терминов
вывод справки о термине, указанным курсором
переход к предыдущей справке
вывод инструкции по работе со справочной информацией
добавление и удаление информационных файлов
вывод списка всех директив компилятора
вывод алфавитного перечня процедур и функций
вывод зарезервированных слов
вывод стандартных модулей
вывод о сообщениях ошибок
служебная информация
Для входа в «Окно редактирования» нажать комбинацию клавиш <Alt> и
<цифра>, где <цифра> - номер окна. С окнами можно:
создавать новое – <Alt>+<F>+<N> (или File/New),
закрывать текущее – <Alt>+<F3>.
63
Таблица 10 – «Горячие» клавиши
< Insert>
<Delete>
<Backspace>
<End>
<Home>
<Enter>
<Page Up>
<Page Down>
<Сарs Lock>
<Shift>
<Ctrl> + <y>
<Ctrl> + <k> + <c>
(или <Ctrl> + <Insert>)
<Ctrl> + <k> + <v>
(или <Shift> + <Insert>)
<Ctrl> + <k> + <y>
(или <Ctrl>+<Delete>)
<Ctrl> + <k> + <h>
<F2> (или <Alt> + <F2>)
<F3> (для существующего)
<Tab>
<Alt>+<F9>
<Ctrl>+<F1>
<Ctrl> + <F9>
<Alt> + <F5>
переключение режима вставки/замены символов
удаление символа, находящегося над курсором
удаление символа, находящегося слева от курсора
перемещение курсора в конец текущей строки
перемещение курсора и начало текущей строки
для перехода на новую строку и разрезания текущей строки
на две
«прочитывание» текста на один экран вперед
«прочитывание» текста на один экран назад
переключение режима прописные/строчные буквы
временное переключение режима прописные/строчные
буквы
позволяет удалить текущую строку
копирование
перемещение
удаление
отмена выделения блока
сохранение в файле на диске
считывание из файла на диске
перемещение указателя в открывшемся окне
проверка программы на ошибки (компиляция)
справка по ошибке
создание файла с расширением «.ехе»
просмотр результатов отчетов
Для обнаружения алгоритмических ошибок можно воспользоваться
следующими операциями, условно состоящими из нескольких шагов:
 установить индикацию (или просмотреть значения переменных) в
процессе выполнения программы – <Ctrl>+<F7>. В открывшемся окне ввести
имя переменной;
 провести трассировку (т. е. построчно выполнить) – нажимать на <F7>
(или <F8> – для исключения функций);
 изменить (если требуется) значения переменной в процессе
трассировки программы – <Ctrl>+<F4>. Набрать в окне “Expression” имя
интересующей переменной, после чего в окне “Result” высветится ее значение.
Если в окне “New Value” ввести новое значение, то дальнейшие вычисления
будут выполняться уже с ним.
Во всех операциях указатель можно передвигать с помощью клавиши
<Tab>.
Для входа в «Окно сообщений» можно воспользоваться командой главного
меню Tools/Messages. Переход к следующему элементу сообщения <Alt> +
<F8>. Переход к предыдущему элементу сообщения <Alt> + <F7>.
64
«Строка состояния» содержит пояснения о назначении пунктов
выпадающего меню (см. выше).
С учетом представленной ИСП, может быть рекомендован следующий
план работы при создании и отладки новой программы.
1. Открыть новое окно редактирования для ввода новой программы
(File/New).
2. Набрать текст новой программы.
3. Записать текст программы на диск (File/Save или <F2>).
4. Запустить программу на выполнение (Run/Run или <CTRL>+<F9>).
5. Посмотреть результаты выполнения программы (<ALT>+<F5>).
6. Сохранить отлаженную программу на диске (<F2>).
Основы языка С++
Приступая к составлению программ, следует помнить следующее:
1) программа должна оформляться в соответствии со структурой языка
программирования С++ (табл. 11);
2) программа должна иметь начало и конец, обозначенные операторным
блоком { … };
3) каждая переменная программы должна быть объявлена в начале
программы с указанием её типа. Переменная может быть инициализирована
некоторым значением. В имени переменной могут использоваться цифры и
буквы латинского алфавита. Базовые типы данных даны в табл. 12;
4) все арифметические выражения состоят из операндов, которые должны
расписываться в одну строчку. Если в формуле имеется дробь, то числитель и
знаменатель указывается в круглых скобках. Основные операции, применяемые
в выражениях, представлены табл. 13.
Операция % выполняется только с целыми числами, и результатом
вычисления является целое число.
В языке С++ операции инкремента (++) и декремента (––) могут
появляться перед или после своего операнда. Когда операция является
префиксом своего операнда, то операнд инкрементируется или
декрементируется и его новое значение является результатом вычисления
выражения. Когда операция является постфиксом своего операнда, то
непосредственным результатом выражения является значение операнда перед
его инкрементированием или декрементированием. После этого результат
используется в контексте, а операнд инкрементируется или декрементируется;
5) вычисления в выражениях выполняются в соответствии с приоритетом
операций, распределенных по категориям (табл. 14);
6) каждый оператор должен заканчиваться символом « ; » - признаком
окончания действия;
7) для ввода и вывода информации используются специальные функции
(табл. 15). После вывода информации курсор устанавливается в этой же строке.
Если есть необходимость переслать курсор на начало следующей строки, то
используются в С++ – специальные управляющие символы «\n» и «endl»;
65
8) в составе транслятора среды программирования имеются стандартные
функции, применяемые при вычислениях. Основные, наиболее часто
используемые функции представлены табл. 16. Необходимо обращать внимание
на подключаемые библиотечные модули, содержащие стандартные функции.
Таблица 11 – Структура программы
Назначение
Структура
Директивы препроцессора
# include < Имя библиотеки>
# define Имя Макрос
Раздел объявлений и соглашений
label Номер метки;
const Имя константы = Значение константы;
Имя типа переменной Список имен
переменных;
Раздел описания процедур и
функций
Основная программа
function Имя функции (входные и выходные
данные)
{
Тело функции
}
main ( )
{ Тело программы
}
вещественные
числа
целые числа
Таблица 12 – Типы данных и диапазон представления чисел
Диапазон
0…255
-128…127
-32768…32767
0…65535
-2147483648…2147483647
0…4294967295
Тип
uns char
char
int, short
uns short
long
uns long
3,4Е-38…3,4Е38
float
1,7Е-308…1,7Е308
double
3,4Е-4932…1,1Е4932
long double
66
Таблица 13 – Операции
Назначение
аддитивные
мультипликативные
отношений
логические
присваивания
арифметические
остаток от деления
равно
не равно
больше
меньше
больше или равно
меньше или равно
и
или
отрицание
простое присваивание
сложение с присваиванием
вычитание с присваиванием
умножение с присваиванием
деление с присваиванием
остаток от деления с присваиванием
унарный инкремент
унарный декремент
Операция
+, –
*, /
%
==
!=
>
<
>=
<=
&&
||
!
=
+=
–=
*=
/=
%=
++
––
Таблица 14 – Приоритет выполнения операций
Операция
!, ++, – –
*, /, %, &&
+, –, ||
==, !=, <, >, <=, >=
=, *=, /=, %=, +=, –=
Приоритет
Первый
Второй
Третий
Четвертый
Низший
67
Категория
Унарные
Мультипликативные
Аддитивные
Отношения
Простое и составное
Ввод
Таблица 15 – Функции и процедуры ввода и вывода
Спецификаторы
форматов и управляющие символы
Библиотека: stdio.h
%d, %i – целые
%f – вещественные
%с – символьные
%s – строковые
Библиотека: iostream.h
Функции
scanf (“специф“, & идентификатор);
например,
scanf (“%d%f”, &a, &b);
scanf (“%c”, &ch);
scanf (“%s”, st);
cin>>идентификатор;
например,
Вывод
cin>>a;
Библиотека: stdio.h
%d, %i – целые
%f – вещественные
%с – символьные
%s – строковые
\n – перевод строки
cin>>b>>ch; cin>>st;
printf (“текст специф“, идентиф);
например,
printf (“Значение а= %d\n”, a);
printf (“а= %d\n и b= %f\n ”, a, b);
printf (“\n символ= %c \n ”, ch);
printf (“ строка: %s \n ”, st);
cout<<текст<<идентификатор;
Библиотека: iostream.h
\n и endl – перевод строки
например,
cout<<”Значение a=”<<a<<”\n”;
cout<<” a=”<<a<<” b=”<<b<<endl;
cout<<”символ: ”<<ch<<endl;
cout<<”строка: ”<<st<<endl;
Таблица 16 – Часто используемые стандартные функции
Назначение
абсолютное значение по модулю
тригонометрические функции (в радианах)
экспонента числа – expx
вычисляет остаток от числа
вычисляет целую часть от числа
натуральный логарифм числа
десятичный логарифм
квадрат числа
квадратный корень числа
вычисляет число x в степени y
возвращает случайное число в диапазоне 0…x;
округляет число до целого
Функция
abs (int x), fabs (double x),
labs ( longint x)
double cos (double x)
double sin (double x)
double atan (double x)
double tan (double x)
double exp (double x)
double fmod (double x, double y)
struct div ( int x; int y)
double log (double x)
double log10 (double x)
double sqr (double x)
double sqrt (double x)
double pow (double x, double y)
int rand ()
double floor (double x)
Составление линейных алгоритмов
Линейными называются алгоритмы, процесс пошагового выполнения
которых можно изобразить прямой линией – сверху вниз.
Пример 1. Дано двухзначное целое число b. Найти сумму его цифр.
Текстуальная форма алгоритма задачи.
1. Ввести число b с клавиатуры в ЭВМ.
68
2. Для выделения первой цифры воспользуемся известным в математике
способом деления числа b на 10, и возьмем целое число от этого
деления.
3. Для выделения второй цифры разделим число b на 10, и возьмем
дробную часть от этого деления.
4. Найдем сумму найденных цифр.
5. Полученный результат выдать на экран дисплея.
Графическая форма представления алгоритма дана в виде схемы (рис. 2),
использующей блоки для обозначения каждого действия и приведен текст
программы.
Начало
Ввод
b
x = b div 10
y = b div 10
z=x+y
Вывод
z
Конец
Рисунок 2 – Схема алгоритма к примеру 1
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
main ()
{ int b, x, y, z;
div_t res;
// описание структуры функции div:
// struct div_t (int quit; int rem;) div (n, d);
// где n
– числитель, d - знаменатель,
// quit – целая часть от деления,.
// rem – дробная часть от деления.
cout <<“ Введите целое число : “ ; cin >> b >>endl ;
res = div (b, 10) ;
// делим число b на 10, и расчленяем на
x = res.quit ;
// целую часть и
y = res.rem ;
// дробную часть
z = x + y ;
cout <<“ Сумма цифр числа ”<< b << “ равна “ << z <<endl;
}
69
Варианты заданий
Задание. Составить алгоритм, написать программу на языке
программирования С++, отладить программу на ПК. Написать тест
программы. Все результаты предъявить преподавателю. Подготовить ответы на
контрольные вопросы.
1. Дано трехзначное число. Найти число, полученное при прочтении его
цифр справа налево.
2. Дано натуральное число n (n>9). Найти число единиц в нем.
3. Дано трехзначное число. Найти сумму его крайних цифр.
4. Дано четырехзначное число. Найти произведение и сумму второй и
последней цифр заданного числа.
5. Даны два целых числа. Разделить каждое число на целое число d.
Найти произведение их остатков от деления.
6. Даны два целых числа. Переменой d присвоить результат деления
первого числа на второе число, а переменой f присвоить результат деления
второго числа на первое число. Найти произведение их остатков от деления.
7. Дано четырехзначное число. Найти сумму и произведение его цифр.
8. Дано натуральное число n (n>99). Найти число десятков в нем.
9. Даны два целых числа. Разделить каждое число на целое число d.
Найти сумму их целой части от деления.
10. Дано трехзначное число. Найти число, полученное при перестановке
первой и последней цифр заданного числа.
11. Дано четырехзначное число. Найти сумму и произведение второй и
третьей цифр заданного числа.
12. Дано трехзначное число. Найти число, полученное при перестановке
первой и второй цифр заданного числа.
13. Дано трехзначное число. Переставить местами вторую и третью цифры
в числе.
14. Дано четырехзначное число. Найти сумму первых цифр и произведение
двух последних цифр в числе.
15. Даны два целых двухзначных числа. Переставить местами последние
цифры чисел. Например, даны числа 25 и 48, после перестановки получится 28
и 45.
Технология выполнения работы
Нарисовать картинку, поясняющую логику решения задачи и составить
алгоритм. Написать программу, которая в задаче использует целочисленную
арифметику.
Содержание отчета
1. Титульный лист по стандартной форме.
2. Постановку задачи.
3. Необходимые математические выкладки
картинку).
70
(и/или
поясняющую
4. Алгоритм решения задачи (в виде блок-схемы или в текстуальной
форме).
5. Тексты программы.
6. Тестовые наборы (тест – это проверка работоспособности программы
по контрольным значениям данных).
7. Результаты вычислений по каждому тесту.
Отчет для лабораторной работы составляется в одном экземпляре и
подлежит защите. Для защиты лабораторной работы студент должен
подготовиться к ответу на контрольные вопросы.
Вопросы для защиты работы
В чем особенности формализованного языка?
Что понимают под вычислительным алгоритмом?
Какие требования предъявляются к алгоритмам?
В чём суть основных этапов подготовки и компьютерного решения
1.
2.
3.
4.
задач?
5. Общие правила построения программ.
6. Как получают исполняемую программу?
7. Какие операции можно выполнять над величинами целого типа?
Укажите приоритет их выполнения при расчете значения арифметического
выражения.
8. Как определить остаток от деления одной величины целого типа на
другую?
9. Как оформляется оператор вывода результатов на экран? Что можно
указывать в качестве элементов списка вывода? Какой символ используется для
разделения элементов списка вывода? Как должен быть оформлен оператор
вывода, чтобы информация выводилась на экран с новой строки?
10. Как оформляется оператор ввода? Что можно указывать в качестве
элементов списка ввода? Как работает оператор ввода (что происходит при его
выполнении)?
11. Как оформляется оператор присваивания? Как он работает (что
происходит при его выполнении)?
12. Как проверить, правильно ли работает программа, в которой
проводятся какие-то вычисления?
71
ЛАБОРАТОРНАЯ РАБОТА № 9
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ BORLAND C++.
РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ
Время выполнения – 2 часа.
Цель работы
Научиться пользоваться условными операторами
разветвляющиеся схемы алгоритма.
и
оформлять
Задачи лабораторной работы
После выполнения работы студент должен знать:
 правила написания текста программы как на формальном языке
(псевдокоде), так и на языке программирования;
 как по схеме алгоритма написать текст программы, и, наоборот, по
тексту программы составить схему её алгоритма;
 правила написания текста программы на языке программирования С++;
 правила использования операторов условия;
 назначение и работу каждого оператора в программе;
 уметь проводить тестирование программы, используя известные ему
приложения (например, Excel или MathCAD).
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система семейства
Windows язык программирования С++.
Общие теоретические сведения
Разветвляющимся
является
алгоритм,
если
последовательность
выполнения шагов решения задачи изменяется в зависимости от некоторых
условий. Условие – это логическое выражение, принимающее одно из двух
значений: «Да» – если условие верно и «Нет» – если условие неверно, – и
которое может содержать логические операции и знаки отношений.
Рис. 1 иллюстрирует структурные схемы разветвляющихся алгоритмов
укороченной (а) и полной (б) формы.
Да
Нет
Условие
Условие
Серия операторов1
Серия операторов2
Серия операторов1
б)
а)
Рисунок 1 – Схемы разветвляющихся алгоритмов
72
Разветвляющиеся алгоритмы оформляются операторами полной или
укороченной формы (табл. 1). В условном операторе выполняется всегда одна из
веток («Да» при истинном условии или «Нет», если оно ложно), и никогда не
выполняются обе вместе.
Таблица 1 – Формы записи операторов условного перехода
Форма записи
краткая
полная
Структура оператора
if (условие) { операторы-Да }
if (условие) { операторы-Да; } else { операторы-Нет}
К условным операторам относится оператор выбора или оператор
переключатель (табл. 2), который замечателен тем, что может заменить
вложенные операторы условия.
Таблица 2 – Оператор выбора (или оператор-переключатель)
Структура оператора
switch
выражение {
case значение1: {
операторы}
. . . . . . . . . . .
case значениеN: {
операторы}
default { операторы}
}
Выражение – это целочисленная или строковая переменная, значение
которой определяет ветвь. Каждая ветвь, определяемая case, может
заканчиваться оператором прерывания break. Можно объединять ветви, через
список значений, перечисляемые через запятую (или в Pascal – в виде
интервала через две точки). Например:
switch
(f +k)
{
case 0
: { k ++; break;}
case 3, 8
: { f --; k --;
break;}
case 9
:
case 11
: { d = ++ f; break;}
default
d = --f;
}
Пример. Дано целое число a. Узнать, четное ли оно.
Текстуальная форма алгоритма задачи.
1. Ввести число а с клавиатуры в ЭВМ.
2. Для определения четности можно воспользоваться известным в
математике способом деления числа а на 2, если остаток равен нулю, то число –
четное.
3. Выдать на экран дисплея «Введенное число четное» – если число а
четное, или выдать «Введенное число нечетное» – если число а нечетное.
73
На рис. 2 представлена схема алгоритма этой задачи и описана программа.
Начало
#include < iostream.h >
#include < math.h >
main()
{ int a;
cout << ” Введите целое число
а: ”;
cin >> а;
if ( a % 2 == 0 )
cout << ”Число” << a <<” четное” << endl;
else
cout
<<
”Число”<<
a
<<”
нечетное” << endl;
}
Ввод
Нет
Да
если
a mod 2 =0
нечетное
Да
четное
Конец
Рис. 2. Схема алгоритма
Варианты заданий
Задание. Составить алгоритм, написать программу на языке
программирования С++, отладить программу на ПК. Написать тест программы
по всем ветвям. Все результаты предъявить преподавателю. Подготовить ответы
на контрольные вопросы.
1. Определить, верно ли, что при делении неотрицательного целого числа
а на положительное число b получается остаток, равный одному из двух
заданных чисел c или d.
2. Дано натуральное четырехзначное число n. Выяснить, различны ли все
четыре цифры этого числа. Например, в числе 3678 все цифры различны, в
числе 0230 – нет.
3. Имеются стол прямоугольной формы с размерами a×b (a и b – целые
числа, a>b) и кости домино с размерами c×d×e (c, d и e – целые числа, c > d > e).
Найти вариант размещения на столе наибольшего количества костей. Все
размещаемые кости должны лежать на одной и той же грани в один ярус без
свешивания со стола. Все ребра костей домино должны быть параллельны или
перпендикулярны каждой стороне стола.
4. Дано целое число k (1 ≤ k ≤ 365). Определить, каким будет k-й день
года: выходным (суббота и воскресенье) или рабочим, если 1 января –
понедельник.
5. Даны два прямоугольника, стороны которых параллельны или
перпендикулярны осям координат. Известны координаты левого нижнего угла
каждого из них и длины их сторон. Один из прямоугольников назовем первым,
другой – вторым. Определить, принадлежат ли все точки первого
прямоугольника второму.
6. Даны вещественные положительные числа a, b, c, d. Выяснить, можно
ли прямоугольник со сторонами a, b уместить внутри прямоугольника со
74
сторонами c и d так, чтобы каждая из сторон была параллельна или
перпендикулярна каждой стороне второго прямоугольника.
7. Вывести на экран номер четверти координатной плоскости, которой
принадлежит точка с координатами (x, y), при условии, что x ≠ 0 и y ≠ 0.
8. Даны два прямоугольника, стороны которых параллельны или
перпендикулярны осям координат. Известны координаты левого нижнего угла
каждого из них и длины их сторон. Один из прямоугольников назовем первым,
другой – вторым. Определить, принадлежат ли все точки одного из
прямоугольников другому.
9. Даны вещественные положительные числа a, b, c, x, y. Выяснить,
пройдет ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами x
и y. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из
его ребер было параллельно или перпендикулярно каждой из сторон отверстия.
10. Дано четырехзначное число. Определить, входят ли в него цифры 3, 6
или 9.
11. Даны два прямоугольника, стороны которых параллельны или
перпендикулярны осям координат. Известны координаты левого нижнего угла
каждого из них и длины их сторон. Один из прямоугольников назовем первым,
другой – вторым. Определить, пересекаются ли эти прямоугольники.
12. Дано четырехзначное натуральное число n. Выяснить, является ли оно
палиндромом («перевертышем»), как, например, числа 7777, 8338, 0330 и т.п.
(палиндромом называется число, десятичная запись которого читается
одинаково слева направо и справа налево).
13. Даны два двухзначных числа. Вычислить их сумму. Выяснить, является
ли сумма совершенным числом (натуральное число называется совершенным,
если оно равно сумме своих делителей, включая 1 и исключая это самое число,
например, число 6 совершенное 6=1+2+3).
14. Даны два целых числа, одно в шестнадцатеричной системе счисления, а
другое в двоичной системе счисления. Узнать, равнозначные ли эти числа.
Например, числа А и 101 – не равнозначны, а числа F и 1111 – равнозначны.
15. Даны два целых числа, одно в шестнадцатеричной системе счисления, а
другое в двоичной системе счисления. Найти произведение этих чисел и
обратный код полученного ответа.
Технология выполнения работы
Написать математическую формулировку, графически изобразить
поясняющую логику решения задачи и составить алгоритм. Написать
программу, которая в задаче использует сложные условия и вложенные
условные операторы.
Содержание отчета
1. Титульный лист по стандартной форме.
2. Постановку задачи.
3. Необходимые математические выкладки
картинку).
75
(и/или
поясняющую
4. Алгоритм решения задачи (в виде блок-схемы или в текстуальной
форме).
5. Тексты программы.
6. Тестовые наборы (тест – это проверка работоспособности программы
по контрольным значениям данных).
7. Результаты вычислений по каждому тесту.
Отчет для лабораторной работы составляется в одном экземпляре и
подлежит защите. Для защиты лабораторной работы студент должен
подготовиться к ответу на контрольные вопросы.
Вопросы для защиты работы
1. Что такое простое условие? Какие используются операции отношения?
2. Что является результатом выполнения операции отношения?
3. Что такое составное условие? Какие логические операции
используются в нём? Каков приоритет их выполнения и можно ли их изменить?
4. В логическом выражении (составном условии) используются три
величины логического типа (три простых условия) – А, В и С. Сколько
возможно различных вариантов сочетаний значений А, В и С?
5. Как работает оператор выбора? Какой тип может принимать
контрольное выражение? Почему?
76
ЛАБОРАТОРНАЯ РАБОТА № 10
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ BORLAND C++.
ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ
Время выполнения – 4 часа.
Цель работы
Научиться составлять программы, используя операторы цикла. Научиться
оформлять циклические схемы алгоритма.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать
правила
написания
текста
программы
на
языке
программирования С++;
 знать, как по схеме алгоритма написать текст программы и, наоборот по тексту программы составить схему её алгоритма;
 знать правила использования операторов условия и циклов;
 уметь организовывать циклы с помощью операторов условия;
 знать назначение и работу каждого оператора в программе;
 уметь проводить тестирование программы.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система семейства
Windows и язык программирования С++.
Общие теоретические сведения
Циклическим является алгоритм, если определенная последовательность
шагов выполняется некоторое целое число раз. Рис. 1 иллюстрирует
циклические алгоритмы.
условие
оператор
да
определение
цикла
да
оператор
ыы
условие
оператор
а)
б)
в)
Рисунок 1 – Циклические алгоритмы:
а – цикл с предусловием, б – с постусловием, в – с параметром
У каждого из операторов цикла имеются особенности в их использовании
(табл. 1): условные циклы выполняются пока условие истинно, а цикл с
77
параметром работает, пока управляющая переменная цикла (так называемый
параметр) не достигнет своего конечного значения.
Таблица 1 – Операторы циклов
Условные циклы
С
параметром
while (условие)
{ операторы }
do
{ операторы }
while (условие)
for ( переменная = нач_знач;
переменная <= кон знач; шаг)
{ операторы }
Пример. Написать программу, которая преобразует введенное десятичное
число в двоичное.
Текстуальная форма алгоритма задачи:
1. Ввести число dec с клавиатуры в ЭВМ.
2. В цикле делятся целые части числа на 2, остатки от деления выводятся
на экран.
Ниже представлена программа этой задачи.
#include < iostream.h >
#include < math.h >
#include < conio.h >
main()
{ int d;
// десятичное число
int b;
// формируемый разряд
int n;
// номер формируемого разряда
cout << ” Введите целое число от 0 до 255 ”; cin >> d;
cout << ” Десятичному числу ”>> d >> “ соответствует двоичное : “;
b = 128;
// старший (восьмой) разряд
for (n = 1; n <= 8; n++)
{ if ( d >= b )
{ cout <<” 1 “; d -= b; }
else
cout <<” 0 “;
b = b / 2;
}
cout << ”Для завершения нажмите <Enter>” << endl;
getch();
}
Варианты заданий
Задание. Составить алгоритм, написать программу на языке
программирования С++, отладить программу на ПК. Написать тест программы.
Все результаты предъявить преподавателю. Подготовить ответы на контрольные
вопросы.
1. Найти натуральное число из интервала от a до b, у которого количество
делителей максимально.
78
2. Составить программу нахождения цифрового корня. Цифровой корень
данного числа получается, если сложить все цифры этого числа, затем все
цифры найденной суммы и повторять этот процесс пока в результате будет
получено однозначное число (цифра), которая и называется цифровым корнем.
3. Дано натуральное число n. Напечатать разложение этого числа на
простые множители.
4. Найти все трехзначные простые числа (простым называется число,
большее 1, не имеющее других делителей, кроме единицы и самого себя,
например, число 7 простое, число 6 не простое).
5. Найти размеры всех прямоугольников, площадь которых равна
заданному натуральному числу s и стороны которых выражены натуральными
числами.
6. Найти все совершенные числа, меньшие 100 000 (натуральное число
называется совершенным, если оно равно сумме своих делителей, включая 1 и
исключая это самое число, например, число 6 совершенное 6=1+2+3).
7. Найти все пары натуральных дружественных чисел, меньших 50 000
(два натуральных числа называются дружественными, если каждое из них
равно сумме всех делителей другого, само другое число в качестве делителя не
рассматривается).
8. Составить программу для нахождения всех натуральных решений
уравнения, где лежат в интервале от 1 до 30.
9. Дано натуральное число n (n ≤ 27). Найти все трехзначные числа, сумма
цифр которых равна n.
10. Найти наименьшее натуральное число n, которое можно представить
двумя различными способами в виде суммы кубов двух натуральных чисел.
11. Дано натуральное число n. Получить все натуральные числа, меньшие n
и взаимно простые с ним (два натуральных числа называются взаимно
простыми, если их наибольший общий делитель равен 1).
12. Напечатать в возрастающем порядке все трехзначные числа, в
десятичной записи которых нет одинаковых цифр.
13. Составить таблицу умножения всех чисел от 1 до 9.
14. Дано натуральное число n. Вычислить арифметическую Arifm и
геометрическую Geom прогрессию. Узнать, что является наибольшим
результатом.
15. Дано натуральное число n. Вычислить факториал этого числа S = n!
всеми известными циклами. Вычислить факториал этого числа S1 = n!,
используя только оператор условия.
Технология выполнения работы
Написать математическую формулировку, графически изобразить
поясняющую логику решения задачи и составить алгоритм. Написать
программу, которая в задаче использует вложенные циклы.
79
Содержание отчета
1. Титульный лист по стандартной форме.
2. Постановку задачи.
3. Необходимые математические выкладки (и/или поясняющую
картинку).
4. Алгоритм решения задачи (в виде блок-схемы или в текстуальной
форме).
5. Тексты программы.
6. Тестовые наборы (тест – это проверка работоспособности программы
по контрольным значениям данных).
7. Результаты вычислений по каждому тесту.
Отчет для лабораторной работы составляется в одном экземпляре и
подлежит защите. Для защиты лабораторной работы студент должен
подготовиться к ответу на контрольные вопросы.
Вопросы для защиты работы
1. В каких случаях используется оператор цикла с параметром? Как он
оформляется? Как он работает (что происходит при его выполнении)?
Нарисуйте графическую схему выполнения.
2. Что такое «тело оператора цикла»? Может ли тело оператора цикла с
параметром не выполниться ни разу?
3. Как должен быть оформлен оператор цикла с параметром, чтобы тело
цикла выполнялось при уменьшающихся значениях параметра цикла? Как он
будет работать (что будет происходить при его выполнении)? Нарисуйте
графическую схему выполнения.
4. Чему равно количество повторений тела оператора цикла с параметром,
если параметр цикла принимает следующие значения:
а) все целые значения от 1 до 10?
б) все нечетные значения от 1 до 30?
в) все значения от 10 до 100 с шагом 7?
г) все значения от 1,5 до 10,3 с шагом 0,4?
5. Можно ли в теле цикла с параметром не использовать величину –
параметр цикла? Почему?
6. В каких случаях используется операторы цикла с условием?
7. В каких случаях используется оператор цикла с предусловием? Как он
оформляется? Как он работает (что происходит при его выполнении)?
Нарисуйте графическую схему выполнения.
8. В каких случаях используется оператор цикла с постусловием? Как он
оформляется? Как он работает (что происходит при его выполнении)?
Нарисуйте графическую схему выполнения.
9. Может ли тело оператора цикла с условием не выполниться ни разу?
Может ли выполняться бесконечное число раз (или до тех пор, когда
пользователь прервет его выполнение)?
10. Всегда ли можно вместо оператора цикла с параметром использовать
оператор цикла с условием? А наоборот?
80
11. Какие вы знаете операторы для принудительного (преждевременного)
выхода из оператора цикла? Можно ли вместо такой конструкции использовать
оператор цикла с постусловием и оператор цикла с предусловием?
81
ЛАБОРАТОРНАЯ РАБОТА № 11
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ BORLAND C++.
ОБРАБОТКА МАССИВОВ ДАННЫХ
Время выполнения – 4 часа.
Цель работы
Научиться описывать вектора, матрицы и решать задачи с использованием
массивов. Научиться оформлять сложные схемы алгоритма.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать
правила
написания
текста
программы
на
языке
программирования С++;
 знать, как по схеме алгоритма написать текст программы, и, наоборот по тексту программы составить схему её алгоритма;
 знать правила использования операторов цикла;
 уметь объявлять массивы и определять элементы массивов;
 знать назначение и работу каждого оператора в программе;
 уметь проводить тестирование программы.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим математическим обеспечением: операционная система семейства
Windows и язык программирования С++.
Общие теоретические сведения
Массив – это упорядоченная совокупность элементов одного типа, которые
адресуются с помощью индекса. Доступ к элементу массива осуществляется по
его порядковому номеру (индексу). Индексная переменная должна иметь целый
тип. Нумерация элементов массивов в языке С++ начинается с нуля.
Массив называется одномерным, если для получения доступа к его
элементам достаточно одной индексной переменной. Обработка таких массивов
ведется с использованием одного цикла. Параметр цикла определяет
порядковый номер элемента массива. Одномерные массивы называются также
векторами.
Массив называется двумерным, если для получения доступа к его
элементам необходимо иметь две индексные переменные: первая определяет
номер строки, вторая – номер столбца элемента в массиве. Обработка таких
массивов ведется с использованием вложенных циклов. Двумерные массивы
называют еще матрицами.
Для объявления массива необходимо указать тип элементов, имя массива и
количество элементов в нём (табл. 1).
82
Таблица 1 – Объявление массивов
одномерные
тип_данных имя_массива [количество_ элементов];
например,
float a [10];
двумерные
тип_данных имя_массива [количесво_строк][количество_столбцов];
например,
float b[5][5];
При обработке символьных массивов необходимо помнить, что каждому
символу соответствует число – код символа. В программировании строка – это
массив символов. Последним символом строки обязательно должен быть нульсимвол, код которого равен 0, и который в тексте программы изображается как
«/0», поэтому длина строки увеличится на единицу. Вводимая во время работы
программы строка заканчиваться нажатием клавиши <Enter> (её код – 13). Для
обработки символьных массивов удобно использовать условные циклы.
Пример. Вычислить длину введенной с клавиатуры строки.
Ниже представлен один из алгоритмов в текстуальной форме и программа.
1. Ввести строку с клавиатуры.
2. В цикле подсчитать количество символов введенной строки.
3. Вывести количество символов и весь массив на экран.
#include <stdio.h>
#include <conio.h>
main ()
{ char S [80]; // введенная строка
int i = 0;
// длина строки
puts ( “ \n Введи строку символов и нажми клавишу <Enter>: \n“ );
gets ( st );
while ( st [i++] ) ;
// цикл выполняется, пока не закончатся все
символы в строке
printf ( “ Введенная строка: %s \n”, s );
printf ( “ Количество символов в строке = %d \n”, i ); }
Варианты заданий
Задание. Составить алгоритм и нарисовать рисунок, поясняющий ход
рассуждения. Если требуется, то написать математическую формулировку.
Написать программу на языке программирования С++. Отладить программу на
ПК. Составить тест программы. Все результаты предъявить преподавателю.
Подготовить ответы на контрольные вопросы.
1. Переставить элементы строк массива в порядке возрастания. Найти
количество элементов в каждой строке.
2. Найти количество максимальных элементов строк. Найти количество
элементов в каждой строке и номер строки, содержащий максимальное
количество элементов.
83
3. Переставить в строках гласные и согласные элементы. Найти
количество переставленных элементов в каждой строке.
4. Переставить строки массива в алфавитном порядке. Найти количество
строк.
5. Выбрать все строки, содержащие гласные, расположив их элементы в
алфавитном порядке. Найти количество таких элементов в каждой строке и
количество строк, участвующих в перестановке.
6. Подсчитать количество гласных элементов в каждой строке и вывести
его на экран, если оно меньше 5, то добавить гласные после каждого
согласного.
7. Переставить элементы в каждой строке в обратном порядке. Найти
количество элементов в каждой строке.
8. Подсчитать в каждой строке количество слов. Если оно меньше 5, то
добавить до 7 слов в начало строки. Вывести номера таких строк.
9. Переставить элементы строк массива в порядке, обратном
алфавитному. Найти количество таких элементов в каждой строке.
10. Выбрать в каждой строке слова, оканчивающиеся на букву «е», и
переставить их в конец строки. Найти количество таких слов в каждой строке.
11. Выбрать все строки, содержащие согласные, расположив их элементы в
алфавитном порядке. Найти номер и количество таких строк.
12. Выбрать в каждой строке слова, начинающиеся на букву «в», заменить
их на букву «d» и переставить замененные элементы в начало строки. Найти
количество таких слов в каждой строке и номер строки.
13. Ввести строку, расположить все символы в обратном порядке.
14. Ввести две строки. Переставить их местами.
15. Ввести строку. Заменить в ней каждую пару символов на следом
стоящую пару символов. Например, в исходная строка «Мышка норушка» после
замены будет выглядеть так «Шкмы ноа шкру а».
Технология выполнения работы
Написать
математическую
формулировку,
нарисовать
картинку,
поясняющую логику решения задачи и составить алгоритм. Написать
программу, которая в задаче обрабатывает символьный массив.
Содержание отчета
1. Титульный лист по стандартной форме.
2. Постановку задачи.
3. Необходимые математические выкладки (и/или поясняющую
картинку).
4. Алгоритм решения задачи (в виде блок-схемы или в текстуальной
форме).
5. Тексты программы.
6. Тестовые наборы (тест – это проверка работоспособности программы
по контрольным значениям данных).
7. Результаты вычислений по каждому тесту.
84
Отчет для лабораторной работы составляется в одном экземпляре и
подлежит защите. Для защиты лабораторной работы студент должен
подготовиться к ответу на контрольные вопросы.
Вопросы для защиты работы
1. Какую структуру данных описывает двумерный массив? Как в
программе использовать значение конкретного элемента? Какой индекс
двумерного массива изменяется быстрее при последовательном размещении
элементов массива в оперативной памяти?
2. Какой массив для обработки использует вложенные операторы цикла?
Как они работают? Нарисуйте графическую схему выполнения.
3. Внешний цикл образован оператором цикла с параметром i,
меняющимся от 1 до 5, внутренний – с параметром j, меняющимся от 3 до 7.
Опишите последовательность изменения значений i и j.
4. Сколько раз выполнится тело внутреннего цикла, если во внешнем
цикле параметр цикла меняется от 1 до 4, а во внутреннем – от 1 до 3?
5. Может ли тело внутреннего оператора вложенного цикла не
выполниться ни разу? Выполняться бесконечное число раз?
6. Вложенный цикл образован двумя операторами цикла с параметром.
Можно ли во внешнем и внутреннем циклах использовать один и тот же
параметр цикла (переменную цикла)?
7. Внешний цикл образован оператором цикла с постусловием. Можно ли
в качестве внутреннего цикла использовать оператор цикла с параметром? А
оператор цикла с предусловием?
8. Для чего используются величины, представляющие собой символьные
строки? Как они описываются?
9. Опишите, что представляет собой таблица ASCII.
85
ЛАБОРАТОРНАЯ РАБОТА № 12
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ
BORLAND C++ BUILDER. ОСНОВЫ РАБОТЫ
Время выполнения – 6 часов.
Цель работы
Научиться использовать управляющие элементы Label, Edit, Button,
CheckBox, RadioGroup, ComboBox.
Задачи лабораторной работы
После выполнения работы студент должен уметь:
 вводить и редактировать текст;
 получать справку от Builder;
 запускать на выполнение программу;
 искать и исправлять синтаксические и семантические ошибки;
 написать текст программы на языке C++Builder;
 применять правила использования в структуре программы основных
управляющих элементов Label, Edit, Button, CheckBox, RadioGroup, ComboBox.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим программным обеспечением: операционная система семейства
Windows и среда разработки программ Borland С++ Builder v.6.0.
Общие теоретические сведения
Изучение управляющих элементов Label, Edit и Button
Изучать наиболее часто используемые управляющие элементы Label, Edit и
Button легче, написав программу, например, для расчета суммы вклада в банке с
учетом процентной ставки. Для создания формы используются компоненты:
Label – для подписей; Edit – для ввода и вывода; Button – для инициирования
вычислений. Рекомендуемая компоновка формы программы представлена на
рисунке 1.
86
Рисунок 1 – Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
1. Запустить C++ Builder. При запуске автоматически создается новый
проект. Окно C++Builder показано на рисунке 2. Для создания нового проекта, в
случае если он не создался автоматически или вы его закрыли, необходимо
выполнить команду меню File / New /Application.
Рисунок 2 – Интерфейс среды программирования C++Builder
2. Сохранить проект, выполнив команду меню File / Save Project As. При
этом, будет сохранено несколько файлов проекта.
87
3. На панели компонентов выбрать вкладку Standard, выбрать компонент
Label
и щелкнуть левой кнопкой мыши по форме. На этой же вкладке
выбрать компонент Edit
и Button
. Расположить четыре объекта Label,
четыре объекта Edit, один объект Button на форму как показано на рисунке 1.
4. Изменить подпись формы. Для этого выбрать форму (щелкнуть по
заголовку формы) и в окне свойств объекта во вкладке Properties изменить
значение свойства Caption (рис. 3). Вместо подписи Form1 ввести «Вклад».
Рисунок 3 – Свойство формы Caption (подпись)
5. Изменить подписи объектов Label1 - Label4 в соответствии с
рисунком 1. Для этого выбрать каждый объект Label и в окне свойств объекта во
вкладке Properties изменить значение свойства Caption.
6. Убрать текст из объектов Edit1 – Edit4 (например, в поле Edit1 написано
«Edit1»). Для этого выбрать каждый объект Edit и в окне свойств объекта во
вкладке Properties очистить значение свойства Text.
7. Поскольку объект Edit4 мы будем использовать для вывода результата
(то есть заполняться он будет по нажатию на кнопку, а не вручную), нужно
изменить его свойство ReadOnly на значение true
(что
позволит сделать объект Edit4 только для чтения).
8. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и
в окне свойств объекта во вкладке Properties изменить значение свойства
Caption на «Вычислить».
Объекты Edit1 – Edit3 предназначены для ввода числовых данных,
необходимых для расчета суммы вклада. Для того чтобы пользователь не смог
ввести буквы или другие символы, которые могу вызвать ошибку при расчетах,
необходимо сделать обработчик нажатий клавиш на клавиатуре. Для этого
необходимо выбрать объект Edit1 и в окне свойств объекта открыть вкладку
Events («События»)
. В появившемся списке найти событие
OnKeyPress («по нажатию клавиши»)
и сделать двойной
щелчок левой кнопкой мыши по пустому полю. В появившейся заготовке
функции написать код обработки нажатия клавиш:
88
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Key>='0' && Key<='9')||(Key==',')||(Key==(char)8)) {}
else Key=0;
}
Этим действием все клавиши будут отфильтрованы на клавиатуре кроме
цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Нажатие ненужных
клавиш будет игнорироваться.
Для объектов Edit2 и Edit3 на обработку события OnKeyPress следует
подключить уже созданную функцию Edit1KeyPress. Для этого необходимо
выбрать эту функцию в выпадающем списке события OnKeyPress.
9. Общая сумма вклада на один год рассчитывается по формуле:
ОбщСумма=Сумма*Ставка/100
Общая сумма вклада на n-лет рассчитывается по формуле:
n
ОбщСумма   (ОбщСумма i 1  Ставка / 100) , если ОбщСумма0=Сумма
i 1
Для реализации расчета в программе необходимо добавить обработчик
нажатия кнопки Button1. Для этого дважды щелкнуть по объекту Button1 и в
появившейся заготовке функции написать программный код расчета суммы
вклада. По тексту программного кода даны комментарии, пошагово
описывающие последовательность действий, а для возможности использования
функции округления ceil необходимо подключить модуль math.h (в начале кода
программы): #include<math.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
//объявление переменной для цикла
float summa;
//объявление переменной для начальной суммы вклада
int srok;
// объявление переменной для срока вклада
float stavka; // объявление переменной для размера ставки по вкладу
float summa_vklada;//объявление переменной для расчета общей суммы вклада
//проверка заполнения полей Edit1-Edit3
if (Edit1->Text=="" || Edit2->Text=="" || Edit3->Text=="")
{
//если хоть одно поле не заполнено выдается сообщение
ShowMessage("Заполените все поля");
return; //завершение выполнения функции
}
/*в переменную summa помещаем значение из поля Edit1 как вещественное
число*/
summa=Edit1->Text.ToDouble();
/*в переменную srok помещаем значение из поля Edit2 как целое число*/
srok=Edit2->Text.ToInt();
89
/*в переменную stavka помещаем значение из поля Edit3 как вещественное
число*/
stavka=Edit3->Text.ToDouble();
//изначально общая сумма вклада равна начальной сумме вклада
summa_vklada=summa;
//выполняем цикл столько раз на сколько лет был оформлен вклад
for (i=1;i<=srok;i++)
//в цикле расчитываем общую сумму вклада
summa_vklada=summa_vklada+summa_vklada*stavka/100;
//округляем общую сумму до 2 знаков, преобразовываем вещественный
//тип данных в строковый и записываем в Edit4
Edit4->Text=FloatToStr(ceil(summa_vklada*100)/100);
}
Сохраняется проект нажатием кнопки
на панели инструментов. Далее
проводится отладка и тестирование программы.
Задание 1.
Написать программу расчета стоимости поездки на автомобиле, если
известна цена бензина (руб./л), потребление бензина (литр на 100 км) и
расстояние (км). Защитить программу.
Технология выполнения работы
Для создания формы использовать компоненты: Label – для подписей; Edit
– для ввода и вывода; Button – для инициирования вычислений.
Рекомендуемая компоновка формы (рис. 4):
Рисунок 4 – Рекомендуемая компоновка формы
Поля «Цена бензина», «Потребление бензина» и «Расстояние» должно
быть с проверкой вводимых данных для предотвращения ввода нечисловых
данных.
Программа должна выдавать сообщение об ошибке, если не заполнено хотя
бы одно поле из трех («Цена бензина», «Потребление бензина» и «Расстояние»).
Поле «Стоимость» должно быть только для чтения.
90
Изучение управляющего элемента CheckBox
Изучать управляющий элемент CheckBox лучше, написав программу,
например, расчета стоимости электронного заказа по меню. Список блюд
выбирается с помощью компонента CheckBox. При выборе какого-либо блюда
автоматически высчитывается стоимость заказа (при установлении флажка –
счет увеличивается на стоимость блюда, при снятии – уменьшаться на
соответствующее значение). При нажатии на кнопку «Заказать» появляется
сообщение об успешном заказе с общим счетом заказа.
Для создания формы используются компоненты: Label – для подписей;
CheckBox – для выбора; Edit – для вывода; Button – для инициирования
вычислений. Рекомендуемая компоновка формы программы представлена на
рисунке 5.
Рисунок 5 – Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
1. Запустить C++Builder. При запуске автоматически создается новый
проект.
2. На панели компонентов выбрать вкладку Standard, выбрать компонент
Label
и щелкнуть левой кнопкой мыши по форме. На этой же вкладке
выбрать компонент CheckBox
, Edit
и Button
. Расположить три
объекта Label, семь объектов CheckBox, один объект Edit и один объект Button
на форму как показано на рисунке 5.
91
3. Изменить подпись формы. Для этого выбрать форму (щелкнуть по
заголовку формы) и в окне свойств объекта во вкладке Properties изменить
значение свойства Caption. Вместо подписи Form1 ввести «Меню».
Рисунок 6 – Свойство формы Caption (подпись)
4. Изменить подписи объектов Label1 - Label3 в соответствии с рисунком
6. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке
Properties изменить значение свойства Caption.
5. Изменить подписи объектов CheckBox1 - CheckBox7. Название блюд
можно придумать самим. Для изменения подписи объекта CheckBox выбрать
каждый объект CheckBox и в окне свойств объекта во вкладке Properties
изменить значение свойства Caption.
6. Выбрать объект Edit1 и в окне свойств объекта во вкладке Properties
присвоить свойству Text значение «0» (ноль).
7. Поскольку объект Edit1 используется для вывода результата (то есть
заполняться он будет по нажатию на кнопку, а не вручную), нужно изменить его
свойство ReadOnly на значение true
(то есть сделать
объект Edit1 только для чтения).
8. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и
в окне свойств объекта во вкладке Properties изменить значение свойства
Caption на «Заказать».
9. Изначально ни одно блюдо не выбрано и общая стоимость заказа (счет)
равна нулю. Для расчета общей стоимости заказа необходимо объявить
глобальную переменную и задать ей значение 0 (ноль). Для этого нужно
выделить форму и в окне свойств объекта во вкладке Events (События) дважды
щелкнуть левой кнопкой мыши напротив события OnCreate. Перед заготовкой
функции объявим переменную schet, а в теле функции приравняем переменную
schet к нулю.
10. Каждое блюдо из меню должно иметь свою стоимость. Допустим, цены
на блюда будут следующие:
 Фаршированная форель 369 руб.;
 Телятина под соусом 349 руб.;
92





Крем-суп из шампиньонов 189 руб.;
Рулет со шпинатом 179 руб.;
Пицца гавайская 299 руб.;
Ванильный коктейль 149 руб.;
Напиток грейпфрут 199 руб.
Стоимость каждого блюда должна быть записана в массив price, который
должен выглядеть следующим образом:
0
369
1
349
2
189
3
179
4
299
5
149
6
199
Стоимость заказа должна состоять из стоимости выбранных блюд.
Например, при выборе фаршированной форели (нулевой элемент в массиве)
стоимость заказа должна увеличиться на 369 руб., то есть sсhet=schet+price[0];
Если отказываются от форели (то есть снимается галочка), то стоимость
заказа должна уменьшится на 369 руб., то есть schet=schet-price[0]; Точно также
должны обрабатываться остальные блюда.
//объявление массива с ценами блюд
float price[7]={369,349,189,179,299,149,199};
/*
Фаршированная форель 369 руб.
- 0-ой
Телятина под соусом 349 руб.
- 1-ой
Крем-суп из шампиньонов 189 руб.
- 2-ой
Рулет со шпинатом 179 руб.
- 3-ой
Пицца Гавайская 299 руб.
- 4-ой
Ванильный коктейль 149 руб.
- 5-ой
Напиток Грейпфрут 199 руб.
- 6-ой
*/
элемент
элемент
элемент
элемент
элемент
элемент
элемент
массива
массива
массива
массива
массива
массива
массива
//объявление глобальной переменной для хранения общей стоимости заказа
float schet;
//функция выполняется при запуске программы в момент создания формы
void __fastcall TForm1::FormCreate(TObject *Sender)
{
schet=0;
//изначально счет равен нулю
}
11. Для создания функции-обработчика нажатий для объекта CheckBox1 –
необходимо дважды щелкнуть по нему левой кнопкой мыши. В появившейся
заготовке функции необходимо написать программный код, который будет
выполнятся при установке или снятию флажка в объекте CheckBox1.
Пример кода для объекта CheckBox1 (Фаршированная форель 369 руб.)
приведен ниже:
//функция-обработчик события, которое происходит при нажатии на CheckBox1
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
93
if (CheckBox1->Checked==true) //условие. Если галочка стоит, то
schet=schet+price[0]; //увеличиваем счет на стоимость блюда
else schet=schet-price[0]; //иначе уменьшаем счет на стоимость блюда
Edit1->Text=FloatToStr(schet); //вывод счета в поле объекта Edit1
}
Так же создаются и функции-обработчики для остальных пунктов меню
(объектов CheckBox2 - CheckBox7).
12. При нажатии на кнопку «Заказать» должно появиться сообщение о
принятии заказа. В сообщении должна быть указана общая стоимость заказа.
Для обработки нажатия кнопки необходимо дважды щелкнуть левой
кнопкой мыши на объекте Button1 и в появившейся заготовке функции
написать программный код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s; //объявляем строковую переменную
//строка s должна содержать общую стоимость заказа
//составление строки s
s="Ваш заказ на сумму " + FloatToStr(schet) + " руб. принят";
//вывод информационного сообщения о сделаном заказе
MessageDlg(s,mtInformation,TMsgDlgButtons()<<mbOK,0);
}
Сохраняется проект нажатием кнопки
на панели инструментов. Далее
проводится отладка и тестирование программы.
Изучение управляющего элемента RadioGroup
Изучать управляющий элемент RadioGroup лучше, написав программу,
например, для расчета сопротивления резисторов, соединенных параллельно
или последовательно.
Для создания формы используются компоненты: Label – для подписей; Edit
– для ввода и вывода; RadioGroup – для выбора одного из перечисленных
вариантов; Button – для запуска вычислений. Рекомендуемая компоновка формы
программы представлена на рисунке 7.
94
Рисунок 7 – Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
1. Запустить C++ Builder. При запуске автоматически создается новый
проект. Для создания нового проекта, в случае если он не создался
автоматически или вы его закрыли, выполнить команду меню File / New
/Application.
2. Сохранить проект в свою рабочую папку, выполнив команду меню File /
Save Project As. Будет сохранено несколько файлов проекта.
3. На панели компонентов выбрать вкладку Standard, выбрать компонент
Label
и щелкнуть левой кнопкой мыши по форме. На этой же вкладке
выбрать компонент Edit
, Button
и RadioGroup
. Расположить три
объекта Label, три объекта Edit, один объект Button и один объект RadioGroup
на форму как показано на рисунке 6. При создании объекта RadioGroup1, он не
содержит ни одного варианта выбора и по умолчанию выглядит как показано на
рисунке 8.
Рисунок 8 – Внешний вид объекта RadioGroup1 без настроек
4. Изменить подпись формы. Для этого выбрать форму (щелкнуть по
заголовку формы) и в окне свойств объекта во вкладке Properties изменить
значение свойства Caption. Вместо подписи Form1 ввести «Сопротивление»
(рис. 9).
95
Рисунок 9 – Свойство формы Caption (подпись)
5. Изменить подписи объектов Label1- Label3 в соответствии с рисунком
6. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке
Properties изменить значение свойства Caption.
6. Убрать текст из объектов Edit1 – Edit3 (например, в поле Edit1 написано
«Edit1»). Для этого выбрать каждый объект Edit и в окне свойств объекта во
вкладке Properties очистить значение свойства Text.
7. Поскольку объект Edit3 используется для вывода результата (то есть
заполняться он будет по нажатию на кнопку, а не вручную), нужно изменить его
свойство ReadOnly на значение true
(то есть сделать
объект Edit3 только для чтения).
8. Настроить объект RadioGroup1. Этот объект будет использоваться как
переключатель
способов
соединения
резисторов
(параллельное
и
последовательное). Задать подпись объекта можно, изменив значение свойства
Caption на «Соединение». Для того чтобы создать список вариантов для
переключения необходимо найти в списке свойств объекта RadioGroup1
свойство Items и щелкнуть левой кнопкой мыши на кнопке с тремя точками
(рисунок 10). В появившемся окне (рис. 11) перечислить возможные варианты
подключения.
96
Рисунок 10 – Список свойств объекта RadioGroup1
Рисунок 11 – Окно редактора списка вариантов
Для программного выбора одного из вариантов в объекте RadioGroup
используется свойство ItemIndex. Это же свойство позволяет отслеживать
выбранный вариант. Так для выбора первого варианта (параллельного
соединения) нужно задать значение свойства ItemIndex = 0 (рис. 10).
97
В результате проделанных операций объект RadioGroup1 будет содержать
два пункта, первый будет выбран (рис. 12).
Рисунок 12 – Настроенный объект RadioGroup
9. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и
в окне свойств объекта во вкладке Properties изменить значение свойства
Caption на «Расчет».
10. Объекты Edit1 и Edit2 предназначены для ввода числовых данных,
необходимых для расчета сопротивления. Для того чтобы пользователь не смог
ввести буквы или другие символы, которые могу вызвать ошибку при расчетах,
необходимо сделать обработчик нажатий клавиш на клавиатуре. Для этого
необходимо выбрать объект Edit1 и в окне свойств объекта открыть вкладку
Events («События»)
. В появившемся списке найти событие
OnKeyPress («по нажатию клавиши»)
и сделать двойной
щелчок левой кнопкой мыши по пустому полю. В появившейся заготовке
функции написать код обработки нажатия клавиш:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Key>='0' && Key<='9')||(Key==',')||(Key==(char)8)) {}
else Key=0;
}
Этим самым все клавиши стали отфильтрованы на клавиатуре, кроме
цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Теперь нажатие
ненужных клавиш будет игнорироваться.
Для объектов Edit2 на обработку события OnKeyPress следует подключить
уже созданную функцию Edit1KeyPress. Для этого необходимо выбрать эту
функцию в выпадающем списке события OnKeyPress
11. Сопротивление для последовательного соединения вычисляется по
формуле R=R1+R2; а для параллельного R=(R1*R2)/(R1+R2).
Для реализации расчета в программе необходимо добавить обработчик
нажатия кнопки Button1. Для этого надо дважды щелкнуть по объекту Button1 и
98
в появившейся заготовке функции написать программный код расчета общего
сопротивления.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double R1,R2,R; //объявление вещественных переменных
//проверка заполнения полей Edit1 и Edit2
if (Edit1->Text=="" || Edit2->Text=="") /*если хотя бы одно поле не
заполнено, то*/
{ShowMessage("Введите все данные"); //появляется сообщение
return;}
//и работа функции прекращается.
R1=Edit1->Text.ToDouble();
//Значение переменной R1 берем из Edit1
R2=Edit2->Text.ToDouble();
//Значение переменной R2 берем из Edit2
if (RadioGroup1->ItemIndex==0) //Если выбран 1-ый вариант соединения, то
R=(R1*R2)/(R1+R2);
//сопротивление вычисляется по формуле
if (RadioGroup1->ItemIndex==1) //Если выбран 2-ой вариант соединения
R=R1+R2;
//сопротивление вычисляется по формуле
//округляем результат до 2-го знака и записываем в Edit3
Edit3->Text=FloatToStr(ceil(R*100)/100);
}
Далее проект сохраняется, проводится отладка и тестирование программы.
Задание 2.
Написать программу расчета значений тригонометрических функций для
угла X. Защитить программу.
Технология выполнения работы
Рисунок 13 – Рекомендуемая компоновка формы
99
Угол может быть введен как в радианах (по умолчанию), так и в градусах.
Для указания того, что введенный угол в градусах на форму поместить
переключатель CheckBox (рис. 13).
Выбор тригонометрической функции должен осуществляться с помощью
объекта RadioGroup.
По умолчанию программа должна выдавать результат, округленный до
четвертого знака. Для возможности получения неокругленного результата
использовать переключатель CheckBox.
Поле «Угол X=» сделать с проверкой вводимых данных для исключения
ввода нечисловых данных.
Программа должна выдавать сообщение об ошибке, если поле «Угол X=»
не заполнено.
Поле «Y=» должно быть только для чтения;
Изучение управляющего элемента ComboBox
Изучать управляющий элемент ComboBox проще, написав программу,
например, для перевода единиц измерения длины.
Рекомендуемая компоновка формы программы представлена на рисунке 14.
Рисунок 14 – Рекомендуемая компоновка формы
Для создания формы использованы компоненты: Label – для подписей;
Edit – для ввода и вывода; ComboBox – для выбора единиц измерения
исходной и результирующей величины; Button – для инициирования
вычислений.
Для создания такой формы необходимо выполнить следующие действия.
1. Запустить C++ Builder. При запуске автоматически создается новый
проект. Для создания нового проекта, в случае если он не создался
автоматически или вы его закрыли, выполнить команду меню File / New
/Application.
100
2. Сохранить проект в свою рабочую папку, выполнив команду меню File /
Save Project As. Будет сохранено несколько файлов проекта.
3. На панели компонентов выбрать вкладку Standard, выбрать компонент
Label
и щелкнуть левой кнопкой мыши по форме. На этой же вкладке
выбрать компонент Edit
, Button
и ComboBox
. Расположить три
объекта Label, два объекта Edit, один объект Button и два объекта ComboBox на
форму как показано на рисунке 14.
4. Изменить подпись формы. Для этого выбрать форму (щелкнуть по
заголовку формы) и в окне свойств объекта во вкладке Properties изменить
значение свойства Caption (рис. 15). Вместо подписи Form1 ввести
«Конвертер».
Рисунок 15 – Свойство формы Caption (подпись)
5. Изменить подписи объектов Label1- Label3 в соответствии с рисунком
12. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке
Properties изменить значение свойства Caption.
6. Убрать текст из объектов Edit1 и Edit2. Для этого выбрать каждый
объект Edit и в окне свойств объекта во вкладке Properties очистить значение
свойства Text.
7. Поскольку объект Edit2 будет использоваться для вывода результата (то
есть заполняться он будет по нажатию на кнопку, а не вручную), нужно
изменить его свойство ReadOnly на значение true
(то есть
сделать объект Edit2 только для чтения).
8. Настроить объекты ComboBox1 и ComboBox2. Эти объекты
представляют собой выпадающие списки и будут использоваться для выбора
единиц измерения длины. Для заполнения списков необходимо в окне свойств
объекта во вкладке Properties найти свойство Items и щелкнуть левой кнопкой
мыши на кнопке с тремя точками (рисунок 16).
101
Рисунок 16 – Список свойств объекта ComboBox1
В появившемся окне (рис. 17) перечислить единицы измерения.
Рисунок 17 – Окно редактора списка
Для программного выбора варианта из списка в объекте ComboBox
используется свойство ItemIndex. Это же свойство позволяет отслеживать
выбранный вариант. Так для выбора первого варианта (единица измерения мм)
нужно задать значение свойства ItemIndex = 0 (рис. 16).
102
Для задания стиля объекта используется свойство Style. По умолчанию
значением свойства Style является csDropDown. При таком стиле пользователь
может не только выбирать значения из списка, но и осуществлять ввод в окно
объекта ComboBox. Поскольку программа будет работать только с заранее
заданным набором единиц измерения необходимо запретить редактирование
полей ComboBox1 и ComboBox2. Для этого нужно поменять значение свойства
Style на csDropDownList. Объект ComboBox со значением свойства Style равным
csDropDownList не допускает редактирования и, значит, пользователь просто не
сможет указать неправильные данные.
9. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и
в окне свойств объекта во вкладке Properties изменить значение свойства
Caption на «Расчет».
10. Объект Edit1 предназначен для ввода числовых данных,
предназначенных для перевода в другие единицы измерения. Для того чтобы
пользователь не смог ввести буквы или другие символы, которые могу вызвать
ошибку при расчетах, необходимо сделать обработчик нажатий клавиш на
клавиатуре. Для этого необходимо выбрать объект Edit1 и в окне свойств
объекта открыть вкладку Events («События»)
списке
найти
событие
OnKeyPress
(«по
. В появившемся
нажатию
клавиши»)
и сделать двойной щелчок левой кнопкой мыши по
пустому полю. В появившейся заготовке функции написать код обработки
нажатия клавиш:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Key>='0' && Key<='9')||(Key==',')||(Key==(char)8)) {}
else Key=0;
}
Этим самым все клавиши стали отфильтрованы на клавиатуре кроме
цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Теперь нажатие
ненужных клавиш будет игнорироваться.
11. Для перевода длины из одной единицы измерения в другую нужно
перевести величину в базовую единицу измерения (например, метры), а потом
уже в требуемую. Например, необходимо перевести 5 миль в ярды. Переводим
мили в метры: 5миль=8045м, а затем из метров переводим в ярды:
8045м=8801,969365426696 ярдов.
Таблица соотношений единиц измерений длин с метрами:
1мм=0,001м
1см=0,01м
1км=1000м
1миля=1609м
1фут=0,305м
1ярд=0,914м
Для реализации расчета в программе необходимо добавить обработчик
нажатия кнопки Button1. Для этого дважды щелкнуть по объекту Button1 и в
103
появившейся заготовке функции написать программный код перевода единиц
измерения.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double v1,v2; //объявление переменных вещественного типа
int i1,i2;
//объявление переменных целого типа
if (Edit1->Text=="") //проверка если не заполнено поле Edit1 то…
{
ShowMessage("Введите исходную величину"); //выдается сообщение
return;
//выход из функции
}
Form1->Edit2->Clear(); //очистка поля Edit2
//в переменную i1 помещаем индекс выбранной строки в объекте ComboBox1
i1=Form1->ComboBox1->ItemIndex;
//в переменную i2 помещаем индекс выбранной строки в объекте ComboBox2
i2=Form1->ComboBox2->ItemIndex;
//в переменную v1 помещаем исходное значение длины
v1=Form1->Edit1->Text.ToDouble();
//перевод из исходной единицы измерения в метры
switch (i1)
// оператор выбора из множества вариантов
// проверяется значение переменной i1
{
case
0:
v1=v1/1000.0;
break;
//если
i1=0,
то
v1=v1/1000.0;
case 1: v1=v1/100.0; break; //если i1=1, то ...
case 2: v1=v1; break;
case 3: v1=v1*1000; break;
case 4: v1=v1*1609; break;
case 5: v1=v1*0.305; break;
case 6: v1=v1*0.914; break;
}
//перевод из метров в требуемую единицу измерения
switch (i2)
// оператор выбора из множества вариантов
// проверяется значение переменной i2
{
case 0: v2=v1*1000; break; //если i2=0, то v2=v1*1000;
case 1: v2=v1*100; break;
case 2: v2=v1; break;
case 3: v2=v1/1000.0; break;
case 4: v2=v1/1609.0; break;
case 5: v2=v1/0.305; break;
case 6: v2=v1/0.914; break;
}
// записываем переведенное значение в поле объекта Edit2
Form1->Edit2->Text=FloatToStr(v2);
}
Не забыть сохранить проект нажатием кнопки
инструментов, провести отладку и тестирование программы
104
на
панели
Задание 3.
Написать программу расчета количества секунд между двумя моментами
времени. Защитить программу.
Технология выполнения работы
Рисунок 18 – Рекомендуемая компоновка формы
Заполнить вручную списки объектов ComboBox (часы от 0 до 23, минуты и
секунды от 0 до 59).
Поле «Прошло секунд» должно быть только для чтения.
Показать программу преподавателю (рис. 18).
Модифицировать программу. Реализовать программное заполнение
списков часов, минут и секунд во время запуска программы. Чтобы списки
ComboBox1- ComboBox6 заполнялись автоматически при запуске программы,
необходимо
использовать
функцию-конструктор
формы
TForm1(TComponent*Owner). Заготовка этой функции вставляется в
программный модуль автоматически при создании проекта. В заготовке
функции необходимо написать программный код:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
int i;
ComboBox1->Clear(); //очищаем ComboBox1
ComboBox2->Clear(); //очищаем ComboBox2
ComboBox3->Clear(); //очищаем ComboBox3
ComboBox4->Clear(); //очищаем ComboBox4
ComboBox5->Clear(); //очищаем ComboBox5
ComboBox6->Clear(); //очищаем ComboBox6
for (i=0;i<=23;i++)
//циклом, где i изменяется от 0 до 23
ComboBox1->Items->Append(IntToStr(i)); //заполняем ComboBox1 - часы
105
ComboBox4->Items=ComboBox1->Items; /*копируем содержимое ComboBox1 в
ComboBox4*/
for (i=0;i<=59;i++)
//циклом, где i изменяется от 0 до 59
ComboBox2->Items->Append(IntToStr(i)); //заполняем ComboBox2 - минуты
ComboBox3->Items=ComboBox2->Items;
ComboBox3*/
ComboBox5->Items=ComboBox2->Items;
ComboBox5*/
ComboBox6->Items=ComboBox2->Items;
ComboBox6*/
ComboBox1->ItemIndex=0; //выбираем
ComboBox2->ItemIndex=0; //выбираем
ComboBox3->ItemIndex=0; //выбираем
ComboBox4->ItemIndex=0; //выбираем
ComboBox5->ItemIndex=0; //выбираем
ComboBox6->ItemIndex=0; //выбираем
}
/*копируем содержимое ComboBox2 в
/*копируем содержимое ComboBox2 в
/*копируем содержимое ComboBox2 в
первое
первое
первое
первое
первое
первое
значение
значение
значение
значение
значение
значение
в
в
в
в
в
в
списке
списке
списке
списке
списке
списке
ComboBox1
ComboBox2
ComboBox3
ComboBox4
ComboBox5
ComboBox6
При выполнении выше указанного кода будет очищаться содержимое
объектов ComboBox1-ComboBox6. Далее циклом заполниться объект
ComboBox1. Поскольку объекты ComboBox1 и ComboBox4 имеют одинаковое
содержимое (часы), то можно произвести копирование списка из объекта
ComboBox1 в ComboBox4. После копирования циклом заполняется список
объекта ComboBox2 (минуты). Поскольку минуты и секунды изменяются от 0
до 59, то можно произвести копирование списка объекта ComboBox2 в объекты
ComboBox3, ComboBox5 и ComboBox6.
После того, как все объекты ComboBox заполнены необходимо
программным путем выбрать первый элемент в списках этих объектов. Для
этого используется свойство ItemIndex.
Вопросы для защиты работы
1. Назовите основные элементы пользовательского интерфейса Borland
C++ Builder v.6.0.
2. Какие управляющие элементы вы знаете? Для чего они могут быть
использованы в программе?
3. Как программно реализовать контроль вводимых данных в поле
элемента управления Edit?
4. Назовите основные свойства управляющего элемента CheckBox.
5. Как использовать управляющий элемент RadioGroup?
6. Заполнение выпадающего списка управляющего элемента ComboBox.
7. Использование оператора выбора switch-case.
106
ЛАБОРАТОРНАЯ РАБОТА № 13
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ
BORLAND C++ BUILDER. ОБРАБОТКА МАССИВОВ ДАННЫХ
Время выполнения – 6 часов.
Цель работы
Научиться использовать управляющий элемент StringGrid при обработке
массивов данных.
Задачи лабораторной работы
После выполнения работы студент должен уметь:
 создавать консольные приложения;
 применять правила использования в структуре программы
управляющего элемента StringGrid при обработке массивов данных;
 обрабатывать массивы данных.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим программным обеспечением: операционная система семейства
Windows и среда разработки программ Borland С++ Builder v.6.0.
Общие теоретические сведения
Консольное приложение в среде C++ Builder
Консоль – это монитор и клавиатура, рассматриваемые как единое
устройство. Консольное приложение – программа, предназначенная для работы
в операционной системе MS-DOS (или командной строке Windows), для которой
устройством ввода является клавиатура, а устройством вывода монитор,
работающий в режиме отображения символьной информации (буквы, цифры и
специальные знаки).
Консольные приложения удобны как иллюстрации при рассмотрении
общих вопросов программирования, когда надо сосредоточиться на сути
проблемы, а также как небольшие утилиты "для внутреннего потребления".
Для создания консольной программы в среде C++Builder 6.0 необходимо
выполнить команду File/New/Other (рис. 1).
107
Рисунок 1 – Создание нового проекта
В появившемся окне (рис. 2) выбрать Console Wizard.
Рисунок 2 – Создание консольного проекта
Далее необходимо настроить проект (рис. 3).
108
Рисунок 3 – Настройки проекта Console Wizard
После нажатия на кнопку OK появится окно (рис. 4) с заготовкой функции
main().
Рисунок 4 – Заготовка функции main()
Если программа будет запускаться с параметрами, то следует использовать
предложенную заготовку функции main(). Если параметры запуска программы
использовать не планируется, то можно полностью очистить окно
программного кода и начать писать программу с «чистого листа».
Пример решения задачи помощью консольного приложения.
Условие задачи.
В заданном массиве вещественных чисел размерностью 3х3 найти и
вывести на экран максимальное и минимальное значение. Массив вводится
пользователем с клавиатуры.
109
Программный код.
#include<iostream.h> //заголовочный файл потокового ввода/вывода
#include<conio.h>
//заголовочный файл работы с консолью
void main(void)
{
const int c=3,r=3;
double mas[r][c];
int i,j;
double max,min;
//константы: с-кол-во столбцов, r- кол-во строк
//двумерный массив вещественных чисел
//переменные - счетчики циклов
//максимум и минимум
cout<<"Enter massive:"<<endl;
for (j=0;j<r;j++)
//цикл перебора строк массива
{
for (i=0;i<c;i++)
//цикл перебора столбцов массива
{
cout<<"mas["<<j<<"]["<<i<<"]="; /*вывод координат текущей ячейки
массива*/
cin>>mas[j][i];
/*ввод значения текущей ячейки
массива*/
}
}
max=mas[0][0];
min=mas[0][0];
//предполагаем, что максимум находится в первой ячейке
//предполагаем, что минимум находится в первой ячейке
for (j=0;j<r;j++) //цикл перебора строк массива
{
for (i=0;i<c;i++) //цикл перебора столбцов массива
{
if (mas[j][i]<min) min=mas[j][i]; /*если текущий элемент массива
меньше минимума, то минимум = текущему элементу*/
if (mas[j][i]>max) max=mas[j][i]; /* если текущий элемент больше
максимума, то максимум = текущему элементу*/
}
}
cout<<"max="<<max<<endl<<"min="<<min;
getch();
}
//вывод максимума и минимума
//ожидание нажатия любой клавиши
Задание 1.
Написать программу обработки массива, используя управляющий элемент
StringGrid, к следующим задачам:
1. Для каждого столбца квадратного массива (6х6) определить сумму тех
двух элементов, которые принадлежат главной и побочной диагоналям (массив
вводится пользователем с клавиатуры).
2. Заполнить квадратный массив размером 6х6 таким образом, чтобы его
элементы имели значения, симметричные относительно главной диагонали.
3. Защитить программу.
110
Изучение управляющего элемента StringGrid
Компонент StringGrid представляет собой таблицу, содержащую строки.
Данные таблицы могут быть только для чтения или редактируемыми. Таблица
может иметь полосы прокрутки, причем заданное число первых строк и
столбцов может быть фиксированным и не прокручиваться. Таким образом,
можно задать заголовки столбцов и строк, постоянно присутствующие в окне
компонента. Каждой ячейке таблицы может быть поставлен в соответствие
некоторый объект.
Компонент StringGrid
находится на вкладке Additional панели
компонентов.
Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed
ячеек недоступно для редактирования, и меняется только программно. Для
установки количества фиксированных ячеек можно изменить значение свойств
FixedCols и FixedRows в окне свойств Object Inspector. Или поменять
количество фиксированных строк и столбцов программно, написав в коде
программы следующие команды:
StringGrid1-> FixedCols=1; // устанавливает 1 фиксированный столбец
StringGrid1-> FixedRows=1; // устанавливает 1 фиксированную строку
Общее количество строк и столбцов в таблице можно установить вручную
в окне Object Inspector, отредактировав свойства RowCount и ColCount, а можно
изменить программно в ходе выполнения программного кода, написав
следующие команды:
StringGrid1->RowCount=5 //устанавливаем общее кол-во строк равное 5
StringGrid1->ColCount=7 //устанавливаем общее кол-во столбцов равное 7
Эти свойства доступны как для записи (при установке количества строк и
столбцов), так и для чтения (при проверке размер таблицы).
За многие свойства компонента StringGrid отвечает свойство Options. В
Инспекторе Объектов Options – это раскрывающийся список, представляющий
собой элементы данного множества. Если значение элемента равно True, то он
присутствует в множестве, если False – то нет (рис. 5).
111
Рисунок 5 – Панель Object Inspector
Таблица 1. Свойства компонента StringGrid
Свойство
goFixedVertLine
goFixedHorzLine
goVertLine
goHorzLine
goRangeSelect
goDrawFocusSelected
goRowSizing
goColSizing
goRowMoving
goColMoving
goEditing
goTabs
goRowSelect
goAlwaysShowEditor
goThumbTracking
Назначение
Наличие
вертикальных
разделительных
линий
между
"фиксированными" ячейками
Наличие горизонтальных разделительных линий между
"фиксированными" ячейками
Наличие
вертикальных
разделительных
линий
между
"обычными" ячейками
Наличие горизонтальных разделительных линий между
"обычными" ячейками
Возможность выделить диапазон ячеек
Закрашивание ячейки с фокусом ввода
Возможность менять высоту строк мышкой
Возможность менять ширину столбцов мышкой
Возможность менять номер строки, то есть перемещать её,
мышкой
Возможность менять номер столбца, то есть перемещать его,
мышкой
Возможность редактировать содержимое ячейки с клавиатуры
При значении True фокус смещается на следующую ячейку в
таблице, False - на следующий компонент
Выделяется вся строка с "фокусированной" ячейкой
При значении True содержимое ячейки при получении фокуса
сразу доступно редактированию, False - сначала необходимо
щёлкнуть по ней мышкой (прим.: не действует при
goRowSelect=True)
При значении True перемещение "бегунка" прокрутки мышкой
вызывает немедленное перемещение ячеек, False - ячейки
перемещаются только при отпускании "бегунка"
Как следует из таблицы, за возможность редактирования содержимого
ячеек с клавиатуры отвечает элемент goEditing свойства-множества Options. В
Инспекторе Объектов установите его значение в True. Чтобы управлять этой
112
возможностью программно, нужно включить или исключить из множества
данный элемент:
StringGrid1->Options<<goEditing;
элементы не трогаем*/
StringGrid1->Options>>goEditing;
элементы не трогаем*/
/*Включаем редактирование, другие
/*Выключаем редактирование, другие
Компонент StringGrid имеет возможность адресации каждой отдельной
ячейки по номеру столбца и строки (рис. 6).
Рисунок 6 – Компонент StringGrid
Содержимое ячейки (i, j), где где i - номер столбца, j - номер строки, имеет
вид: StringGrid1->Cells[i][j] и доступно как для чтения, так и для записи.
Например:
StringGrid1->Cells[i][j]=”Hello”; - записывает слово в ячейку с
координатами i и j.
a=StringGrid1->Cells[i][j];
- считывает содержимое ячейки с
координатами i и j в переменную a.
Номера столбцов (i) и строк (j) отсчитываются от нуля.
Выделенная ячейка таблицы имеет:
номер столбца: StringGrid1->Col
номер строки: StringGrid1->Row,
поэтому содержимое выделенной ячейки будет адресоваться так:
S=StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row];
У таблицы StringGrid также есть свойство и для управления размером
ячеек. Для всех ячеек:
DefaultRowHeight - высота строк по умолчанию
DefaultColWidth - ширина столбцов по умолчанию
Эти значения ширины и высоты принимают все новые ячейки. При
необходимости индивидуально установить ширину и высоту столбцов и строк
соответственно, пользуемся свойствами:
RowHeights[i] - массив, содержащий высоты строк с номером i;
ColWidths[i] - массив, содержащий ширины столбцов с номером i.
113
Ширину, а также надписи заголовков, располагающиеся в строках и
столбцах "фиксированной" зоны таблицы можно настроить в обработчике
события OnCreate формы или в функции:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
В результате таблица появляется уже в "настроенном" виде.
Задание 2.
Написать программу перемножения двух матриц размерностью 4х4.
Защитить программу.
Технология выполнения работы
Пример умножения двух матриц:
Умножить
на
.
Решение:
В ходе вычислений выполнены следующие действия:
Умножаем 1 строку на 1 столбец 1 · (-1) + (-2) · 23 + 3 · 4.4 + 1 (-4.4) = -38.2
Умножаем 1 строку на 2 столбец 1 · 2 + (-2) · (-23) + 3 · 12 + 1 · 12 = 96
Умножаем 1 строку на 3 столбец 1 · 3 + (-2) · 1 + 3 · 1 + 1 · (-1) = 3
Умножаем 2 строку на 1 столбец 23 · (-1) + (-23) · 23 + 1 · 4.4 + 2 · (-4.4) =
-556.4
Умножаем 2 строку на 2 столбец 23 · 2 + (-23) · (-23) + 1 · 12 + 2 · 12 = 611
Умножаем 2 строку на 3 столбец 23 · 3 + (-23) · 1 + 1 · 1 + 2 · (-1) = 45
Умножаем 3 строку на 1 столбец (-44) · (-1) + 12 · 23 + 0 · 4.4 + 1 · (-4.4)
= 315.6
Умножаем 3 строку на 2 столбец (-44) · 2 + 12 · (-23) + 0 · 12 + 1 · 12 = -352
Умножаем 3 строку на 3 столбец (-44) · 3 + 12 · 1 + 0 · 1 + 1 · (-1) = -121
Для работы с матрицами (ввод и вывод матриц) должен быть использован
компонент StringGrid. Рекомендуется следующая компоновка формы (рис. 7):
114
Рисунок 7 – Рекомендуемая компоновка формы
Перемножаемые матрицы должны вводиться пользователем. То есть
таблица StringGrid1 и StringGrid2 должны быть редактируемые.
Таблица с результатом StringGrid3 должна быть закрыта для
редактирования пользователем.
Вопросы для защиты работы
1. Порядок создания консольного приложения в среде Borland C++ Builder;
2. Работа с одномерными и двумерными массивами данных;
3. Назовите области применения управляющего элемента StringGrid;
4. Назовите основные свойства StringGrid и их назначения;
5. Настройка внешнего вида управляющего элемента StringGrid;
6. Работа с содержимым ячеек StringGrid.
115
ЛАБОРАТОРНАЯ РАБОТА № 14
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ
BORLAND C++ BUILDER. СОРТИРОВКА МАССИВОВ
Время выполнения – 6 часов.
Цель работы
Изучить алгоритмы сортировки массивов и научиться использовать их при
обработке данных, изучение управляющего элемента ListBox и функции Time().
Задачи лабораторной работы
После выполнения работы студент должен уметь:
 применять алгоритмы сортировки массивов при обработке данных;
 использовать управляющий элемент ListBox и функцию Time().
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим программным обеспечением: операционная система семейства
Windows и среда разработки программ Borland С++ Builder v.6.0.
Общие теоретические сведения
Выполнение лабораторной работы направлено на освоение основных
приемов использования массивов, методов доступа к элементам массивов, их
реорганизации и модификации. В качестве практической проблемы, требующей
решения, рассматривается известная задача сортировки (упорядочивания)
массива в порядке возрастания его элементов. При решении этой задачи
требуется исходный массив, содержащий произвольные целые числа,
преобразовать к виду, когда каждый элемент массива находится перед другим
элементом этого массива, если его значение меньше (больше), чем значение
сравниваемого элемента.
В данной лабораторной работе необходимо изучить ряд известных
алгоритмов сортировки и создать комплекс программ, реализующий:
 метод сортировки выбором;
 метод сортировки пузырьком;
 метод сортировки включением.
Метод сортировки выбором
Исходный массив длиной N разбивается на две части: итог и остаток.
Участок массива, называемый итогом, располагается с начала массива и
должен быть упорядоченным, а участок массива, называемый остатком,
располагается вплотную за итогом и содержит исходные числа не
отсортированной части исходного массива.
Текстуальный алгоритм сортировки выбором.
Шаг 1. Полагается i=0, т.е. считается, что итоговый участок – пуст.
116
Шаг 2. В остатке массива ищется минимальный элемент и он меняется
местом с первым элементом остатка (i-ым элементом массива). После чего
значение i увеличивается на единицу, тем самым расширяя итоговый участок
массива ( отсортированную часть исходного массива).
Шаг 3. Если i < N, то повторяется Шаг 2. В противном случае – конец
алгоритма, т.к. итог становится равным всему массиву.
Конец алгоритма.
Схема алгоритма методом сортировки выбора представлена на рис. 1.
Рисунок 1 – Схема алгоритма сортировки методом выбора
117
Метод сортировки включением
Этот метод похож на метод пузырька. Происходит такое же разбиение
массива на отсортированную и не отсортированную части, но перемещение
первого элемента остатка на принадлежащее ему место в итоге делается не
сравнением двух соседних элементов, а с помощью метода двоичного поиска,
который удобно оформить в виде отдельной процедуры.
Текстуальный алгоритм методом включением.
Шаг 1. Пусть i=1 , т.е. итоговый участок состоит из одного элемента.
Шаг 2. Берется первый элемент остатка и перемещается в
отсортированную часть массива так, чтобы итоговый участок остался
упорядоченным.
Шаг 3. После того, как первый элемент остатка переместился в итоговый
участок, увеличивается на единицу значение переменной i, тем самым
увеличивая отсортированную часть массива. Если i < N, то управление
передается на Шаг 2, в противном случае - работа алгоритма завершена.
Конец алгоритма.
Схема алгоритма метода сортировки включением представлена на рис. 3.
Рисунок 3 – Блок-схема алгоритма сортировки прямым включением
118
Пример использования генератора случайных чисел
При нажатии на кнопку Button1 генерируется случайное число и выводится
на экран в виде сообщения:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a;
Randomize(); //включение генератора случайных чисел
a=5+random(5); //генерация случайного числа а, 5<=a<10
ShowMessag(IntToStr(a)); //вывод значения переменной а
}
Пример заполнения массива и вывода его в ListBox1
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i; //объявление переменной для цикла
int mas[5000]; //объявление массива
Randomize();
//включение генератора случайных чисел
ListBox1->Clear(); //очистка списка ListBox1
for (i=0;i<5000;i++) //цикл заполнения массива и его вывод в ListBox1
{
mas[i]=random(5000); //заполнение массива случайными числами
ListBox1->Items->Append(IntToStr(mas[i])); /*вывод элементов массива в
ListBox1*/
}
}
Измерение времени выполнения алгоритма
В процессе разработки приложения иногда требуется зафиксировать
интервалы времени, чтобы узнать, например, сколько времени занимают
вычисления в каком-то фрагменте вашей программы. Это можно сделать
различными способами. Простейший вариант - зафиксировать функцией Time ()
время начала и конца выполнения интересующего фрагмента кода:
TDateTime T1, T2; //объявление переменных для моментов времени
AnsiString S;
/*объявление строковой перемнной для вывода промежутка
времени*/
T1=Time(); //засекаем время начала выполнения алгоритма
//...
//фрагмент программы, время выполнения которого измеряется
//...
T2=Time(); //зесекаем время окончания работы алгоритма
/*находим разницу между временем начала работы алгоритма и временем
окончания его работы*/
DateTimeToString(S,"hh:nn:ss:zzz", T2-T1);
Label1->Caption=S; //вывод времени, затраченного на работу алгоритма
119
Задание.
Написать программу реализующую три метода сортировки массива:
сортировку выбором, сортировку пузырьком, сортировку включением.
Предусмотреть время выполнения каждого метода в программе.
Защитить программу.
Технология выполнения работы
Разрабатываемый программный комплекс должен обеспечивать:
 выбор алгоритма сортировки (с помощью RadioGroup);
 формирования одномерного массива, состоящего из 5000 элементов, с
помощью генератора псевдослучайных чисел random();
 вывод исходного массива в объект ListBox;
 сортировку массива);
 вывод результата (отсортированного массива) в ListBox;
 замеры времени выполнения сортировок массива с помощью функции
Time().
Студенту требуется реализовать алгоритмы сортировки в виде
программного кода по приведенным выше блок-схемам. Кроме того, выше
приведены примеры использования генератора случайных чисел, функции
измерения времени выполнения алгоритма, а также пример заполнения списка
ListBox.
Демонстрация работоспособности разработанных программных средств
должна обеспечивать два варианта контроля: контроль работоспособности
каждого из методов и контроль временных характеристик всех реализованных
методов.
Рекомендуется следующая компоновка формы (рис. 4).
Рисунок 4 – Форма для сортировки массива
120
Вопросы для защиты работы
1. Назовите основные свойства управляющего элемента ListBox.
2. Заполнение списка ListBox.
3. Использование генератора случайных чисел.
4. Принцип измерения времени работы алгоритмов.
5. Какие методы сортировки одномерных массивов вы знаете? Какой из
перечисленных вами методов наиболее быстрый?
121
ЛАБОРАТОРНАЯ РАБОТА № 15
ПРОГРАММИРОВАНИЕ В СРЕДЕ РАЗРАБОТКИ
BORLAND C++ BUILDER. ПОИСК ЭЛЕМЕНТА В МАССИВЕ
Время выполнения – 6 часов.
Цель работы
Изучить алгоритмы поиска элемента в массиве и научиться использовать
их при обработке данных.
Задачи лабораторной работы
После выполнения работы студент должен уметь применять алгоритмы
поиска элемента в массиве при обработке данных.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со
следующим программным обеспечением: операционная система семейства
Windows и среда разработки программ Borland С++ Builder v.6.0.
Общие теоретические сведения
Выполнение лабораторной работы направлено на освоение основных
приемов использования массивов и методов доступа к элементам массивов. В
качестве практической проблемы, требующей решения, рассматривается задача
поиска элементов в массиве. При решении этой задачи требуется в исходном
массиве, содержащем произвольные целые числа, найти элемент, содержащий
искомое значение, и указать индекс этого элемента.
В данной лабораторной работе необходимо изучить следующие алгоритмы
поиска и создать программу, реализующую:
 метод поиска на основе линейного просмотра;
 метод бинарного поиска.
Поиск элемента массива на основе линейного просмотра
Результатом работы алгоритма линейного поиска значения Val в массиве A
являются индекс Pos и логическая переменная ResultOk, которая принимает
значение TRUE, если такой элемент содержится в массиве А, и FALSE – в
противном случае. Индекс Pos принимает значение, равное номеру искомого
элемента, если такой найден, и значение, равное -1 – в противном случае.
Алгоритм линейного поиска:
Шаг 1. Полагается Pos=-1 и ResultOk=FALSE, и значение переменной
цикла J:=0.
Шаг 2. Если A[J]=Val, то переменным Pos и ResultOk присваиваются
соответственно значения Pos=J, ResultOk=TRUE и алгоритм завершает работу. В
противном случае значение переменной цикла увеличивается на единицу J=J+1.
Шаг 3. Если J<Las (где Last – число элементов массива А), то
выполняется Шаг 2, в противном случае – работа алгоритма завершена.
122
Конец алгоритма.
Схема алгоритма на основе линейного просмотра представлена на рис. 1.
Рисунок 1 – Блок-схема алгоритма линейного поиска
Метод двоичного поиска
Результатом работы алгоритма является индекс Pos, показывающий на
место в упорядоченном массиве А с номерами элементов от First до Last, где
располагается искомое значение Val. Также в качестве результата формируется
логическая переменная ResultOk, которая принимает значение TRUE, если
искомый элемент содержится в массиве А, и FALSE – в противном случае.
Перед поиском исходный массив должен быть отсортирован любым
методом.
Алгоритм двоичного поиска:
Шаг 1. Полагается ResultOk=false; First=0; Last=N-1 (N-размер массива).
123
Шаг 2. Пока справедливо условие First<Last, выполняется Шаг 3.
Шаг 3. Вычисляется середина массива Middle=(Last+First)/2. Если
Val=А[Middle], то полагается First=Middle; Last=First; ResultOk=true (т.е.
элемент найден); Pos=Middle, в противном случае проверяется условие
Val>А[Middle]. Если это условие справедливо, то полагается First=Middle+1, в
противном случае полагается Last=Middle-1. После чего управление передается
на Шаг 1.
Шаг 4. Если ResultOk=true, то выводится сообщение об успешном поиске
и выводится индекс элемента Pos. В противном случае выдается сообщение что
элемент не найден.
Конец алгоритма.
Схема алгоритма на основе двоичного поиска представлена на рис. 2.
Рисунок 2 – Блок-схема алгоритма бинарного поиска
124
Задание.
Написать программу поиска элемента массива двумя методами: на основе
линейного просмотра, двоичного поиска.
Предусмотреть время выполнения каждого метода в программе.
Защитить программу.
Технология выполнения работы
Разрабатываемый программный комплекс должен обеспечивать:
 выбор алгоритма поиска (с помощью RadioGroup);
 формирования одномерного массива, состоящего из 5000 элементов, с
помощью генератора псевдослучайных чисел random();
 вывод исходного массива в объект ListBox;
 поиск элемента массива;
 вывод сообщения о результате поиска (найден или нет) и, в случае если
элемент найден, вывод индекса этого элемента.
 замеры времени выполнения поиска элемента в массиве с помощью
функции Time().
Описание и блок-схемы алгоритмов поиска приведены выше. Студенту
требуется реализовать алгоритмы поиска в виде программного кода по
приведенным выше блок-схемам, там же приведены примеры использования
генератора случайных чисел, функции измерения времени выполнения
алгоритма, а также пример заполнения списка ListBox.
Демонстрация работоспособности разработанных программных средств
должна обеспечивать два варианта контроля: контроль работоспособности
каждого из методов и контроль временных характеристик всех реализованных
методов.
Рекомендуется следующая компоновка формы (рис. 3).
Рисунок 3 – Форма для поиска элемента массива
125
Вопросы для защиты работы
1. Опишите принцип работы алгоритма линейного поиска.
2. Опишите принцип работы алгоритма бинарного поиска.
3. Какое требование предъявляется к массиву при реализации бинарного
поиска?
4. Скорость работы алгоритмов линейного и бинарного поиска.
126
ЛАБОРАТОРНАЯ РАБОТА № 16
ВЫЧИСЛЕНИЯ В MATHCAD. ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ
Время выполнения – 2 часа.
Цель работы
Научиться выполнять вычисления по формулам в Mathcad, научиться
строить графики функций одной переменной.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать основные приемы работы в Mathcad;
 уметь производить вычисления с использованием математических
формул;
 уметь строить графики функций одной переменной.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер с
операционной системой MS Windows, установленное приложение РТС Mathcad
версии 14 или выше; методические указания по выполнению работы.
Общие теоретические сведения
Программа Mathcad является математическим редактором, позволяющим
проводить разнообразные научные и инженерные расчеты.
Она имеет ту же структуру, что и большинство программ Windows. Сверху
вниз располагается заголовок окна, строка меню, панели инструментов и
рабочая область документа (рис. 1).
Рисунок 1 – Пользовательский интерфейс Mathcad 14
127
Для того чтобы выполнить простые расчеты по формуле, необходимо
проделать следующее:
1) определить место в документе, где должно появиться выражение,
щелкнув мышью в соответствующей точке документа;
2) ввести левую часть выражения;
3) ввести знак равенства < = >.
Пример:
1
sin   0.247
4
ab
1
3
 2   0.874
3
 
 7.4
Для проведения расчетов потребуется инструмент Калькулятор (рис. 2).
Рисунок 2 – Панель инструмента Калькулятор
Для отображения Калькулятора нужно нажать кнопку с изображением
калькулятора на панели Math (рис. 3).
Рисунок 3 – Панель инструментов Math
При расчетах по формулам целесообразно использовать переменные. Для
задания значений переменных используется оператор присваивания: знаки
двоеточия и равно (:=)
Пример:
a := 5.6
b := 1.8
a + b = 7.4 a – b = 3.8
a
a · b = 10.08
= 3.111
b
√a = 2.366
3
√b = 1.216
Для задания математических функций можно использовать инструмент
Калькулятор; можно непосредственно набирать названия функций, используя
128
клавиатуру, а можно воспользоваться меню insert / function и вставить
необходимую функцию.
Для построения графиков функций необходимо использовать панель Graph
(рис. 4).
Рисунок 4 – Панель инструментов Graph
Для того чтобы панель Graph открылась, необходимо щелкнуть мышкой по
иконке с изображением графика на панели Math.
Графики функций можно строить следующими двумя способами:
1. С использованием автовыбора значений интервала построения и шага.
В данном случае в качестве аргумента функции необходимо задать переменную,
которая ранее не использовалась (рис. 5).
1
0.5
sin ( r )
0
 0.5
1
 10
5
0
5
10
r
sin(x)
Рисунок 5 – Построение графика функции
2. Задать в явном виде интервал, на котором будет построен график
функции и «шаг», то есть промежуток через который будут вычисляться
значения функции.
Задаем значения аргумента r, которые меняются от -2π до 2π с шагом 0.025
r := -2·π , -2·π + 0.025 .. 2·π
129
Строим графики функций (рис. 6):
1
0.5
sin ( r )
0
 0.5
1
 10
5
0
5
10
r
sin(x)
Рисунок 6 – Построение графика функции
Замечание: часть формулы (0.025 .. 2π) необходимо набирать с
использованием инструмента Range Variable (m .. n), расположенного на панели
Мatrix (рис. 7):
Рисунок 7 – Панель инструментов Matrix
Оформление текста и комментариев в Mathcad
Текстовую область можно разместить в любом незанятом месте документа
Mathcad. Чтобы до начала ввода указать программе, что требуется создать не
формульный, а текстовый регион, достаточно, перед тем как ввести первый
символ, нажать клавишу " (двойная кавычка). В результате на месте курсора
ввода появится новый текстовый регион, который имеет характерное
выделение:
Курсор принимает при этом вид вертикальной линии красного цвета,
которая называется линией ввода текста.
130
Варианты задания
Задание 1. Вычислить значения указанных функций для заданных
значений аргумента x.
Задание 2. Построить графики функций с использованием автовыбора
интервала построения и шага.
Задание 3. Построить графики функций на заданном интервале [-10, 10] с
указанным шагом h = 0.01.
№
варианта
1
Задание 1
Задание 2
Пусть х = 3.5
ye
y4
1
x 1
1
2x
2
 1 
y  cos2 tg 3  2 
x 
2
Пусть х = 3.5
 1 

y  sin  2

x

x


1
y  x2
e 1
 1 
y  sin 2 3 cos 2 
x 
3
Пусть х = 3.1
y  cos(ln x )
4
x 1
y  ln
1
x
y  ln(cos x)
ex
y
x
y  x  e -x
x
ln x
y  3 x 2 (x  1)
y  e -x
y
y
Пусть х = 3.5
y  x 2 ln 2 x
y  x 2e  x
x2  4
y  xe 2 x
1
y  tg 2
x
y  ln sin 7 cos x
y  7 arcsin x 
2
y  x  sin  x 
3x
x 2 1
5x 2
y  5 3 ln 2 x  1
1
y  sin 3
x

2
x3
y 2
x 4
y
3
Задание 3

y  (x  6)e
1
x2
131
y  x  cos  x 

1
x
5
Пусть х = 3.5
y  5arccos

x
y  tg arccos x


y  cos x  x x
6

Пусть х = -3.5
2 x
cos2 ( tg 3 x )
1
y  1  x 3 
sin 2 x
1

y  tg 2 (ln x )  x 2 
x

x
y
7
2
Пусть х = 0.5
x  sin x  x
tg (1  x )
tg (ln x )
y
ln(sin x )
y
4
3
2x  x 2
y
arccos2 ( tgx )
8
Пусть х = 3.5
y  arccos3 x
y  sin e x
2
y  3 cos(cosx )
y  3 sin 3 x  1
10
3 cos( x 3 )
Пусть х = 3.5
1
x 2
y  cos sin 3 cos x
y  arctg

y  9 sin x 
y  x ln x
y  x ln x
y  x  ex
y  x 2  ln x 2

-sin  x 
y
3x  7
(x 2  1) 2
ln 2 x
y
x
y  (3x  5) 6
ye
y  e3x (x  3)
ye
y e
Пусть х = 0.1
y4
y  x  ex
y  x  21x
y  arccos2x 2
9
y  2x 
 4arctgx
x4
y 3
x 2
y  x(x  3)
cos x 
2
1
x2
x2
y
1  x2
(x  1) 2
y
x2
x2
y
3  x2
y  ln(1  x 2 )
3x  2
y
5x 2
y  x  ln x
1
x3
132
y  x e
-sin  x 
11
Пусть х = 3.5
y5
12
yx
cos ( x 3 x ) 2
y  ln

y3
1
 5x 4
x
x  x2 x

y
1
2 x
cos3 ( tgx )
2
y  1  x 3 
cos x 
y  e x2
x2
y
1  x2
Пусть х = 3.5
x
y  xe
1
x
1
y  (3x  5) 6
x4
y 3
x 2
y  x 2 ln 2 x
y  sin(e x )
y  3 x 2 (x  1)
y  cos(e x )
sin 2 x
1

y  tg 2 (ln x )  x 2 
x

13
Пусть х = 3.5
2 x
cos2 ( tg 2 x )
1
y  1  x 3 
sin 4 x
1

y  tg (ln 3 x )  x 2 
x

x
y
14
2
Пусть х = 3.5
y  arctg 4

1
x2
Пусть х = 0.5

y  tg cos2 x
y  ln 3
y3

y  cos 2 x 2
y  x  sin(e x )
y  tg 3 x 2
y  cos sin 5 cos2 x
1
y  7 sin 3 x  2
x
15
y  cos3 x

x x x

y  arctg 2 e x
2
y  arccos2 2x 2
y  cos3 x 7

y  sine x
y  x  cos(e x )
5
y  arccos2 x 9
1
 5x
x3
Технология выполнения работы
В данной работе необходимо вычислить значения функций по заданным
значениям аргументов, используя инструмент Калькулятор, а так же построить
графики функций одной переменной, используя панель Graph.
133
Содержание отчета
1. Задание и цель работы.
2. Выполненные расчеты по формулам.
3. Графики заданных функций.
1.
2.
3.
4.
Вопросы для защиты работы
Как построить графики нескольких функций в одном окне?
Как изменить интервал на котором построен график функции?
Как набрать текст в Mathcad?
1

Вычислите: y  tg (ln 2 x )  x 2  при х = 1.5
x

134
ЛАБОРАТОРНАЯ РАБОТА № 17
ВЫЧИСЛЕНИЯ В MATHCAD. ЛИНЕЙНАЯ АЛГЕБРА
Время выполнения – 4 часа.
Цель работы
Научиться выполнять различные операции с векторами и матрицами;
решать системы линейных алгебраических уравнений; научиться строить
таблицы значений функции одной и двух аргументов.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать основные приемы работы с матрицами и векторами в Mathcad;
 уметь решать системы линейных алгебраических уравнений;
 уметь строить таблицы значений функции одной и двух аргументов.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер с
операционной системой MS Windows, установленное приложение РТС Mathcad
версии 14 или выше; методические указания по выполнению работы.
Общие теоретические сведения
Для работы с матрицами и векторами в Mathcad используется панель
Matrix (рис. 1).
Рисунок 1 – Панель инструментов Matrix
Открыть панель Matrix можно, щелкнув мышкой по изображению матрицы
на панели инструментов Math (рис. 2):
Рисунок 2 – Панель инструментов Math
Для того чтобы набрать матрицу нужной размерности необходимо
щелкнуть мышкой по изображению матрицы на панели Matrix, при этом
откроется диалоговое окно (рис. 3):
135
Рисунок 3 – Диалоговое окно Insert Matrix
В диалоговом окне следует указать количество строк матрицы (Rows) и
количество столбцов (Colums) матрицы, затем нажать OK. Далее в открывшемся
поле набрать необходимые числа.
Основные операции над матрицами и векторами
Пусть задана матрица
7 6 5 8


1 0 3 2

M 
9 3 1 0
5 4 3 2


T
1
Обратная матрица M , транспонированная матрица M , определитель
M вычисляются с помощью соответствующих инструментов на панели Matrix
M
1
 0.026

0.026

 0.154
 0.218

0.179
0.173 
0.321 0.179
0.071

0.327
0.077
0.423 
0.288 
0.026
0.026
0.346 
7

6
T
M  
5
8


1 9 5

0 3 4
3 1 3

2 0 2
|M| = -312
Ранг матрицы
rank(M) = 4
Размер матрицы может быть вычислен следующим образом:
Число строк:
rows(M) = 4
136
Число столбцов:
cols(M) = 4
Слияние матриц
Пусть
6 8 1

7 6 4
B  
1 4 5


 4 7 9  A   5 0 3 
C  

5 7 8
3 0 2
Тогда слияние матриц слева направо выполняется следующим образом:
4 7 9 6 8 1

3 0 2 7 6 4
augment ( C B)  
Слияние матриц сверху вниз:
1
5

stack( A B)   5
6

7
4 5

0 3

7 8
8 1

6 4
Выделение отдельных элементов, строк, столбцов матрицы
При выполнении операций нужно учитывать, что строки и столбцы
нумеруются начиная с нуля.
1
1
 0  
T
 0  

A   4 
A  5
 
 
A1 1  0
A0 1  4
5
5
Для выделения подматрицы используется функция submatrix(A, ir, jr, ic, jc),
которая возвращает часть матрицы А, находящуюся между строками ir, jr и
столбцами ic, jc включительно.
1 4

5 0
submatrix( A 0 1 0 1)  
Действия над векторами
Модуль вектора вычисляется с помощью инструмента |x| , расположенного
на панели Калькулятор (не путать с аналогичным обозначением на панели
Matrix, предназначенном для вычисления определителя матрицы).
Пример.
4
1
r   2  r1   2 
 
 
3
3
 
|r| = 3.74165739
137
Размерность вектора:
length(r) = 3
Скалярное и векторное произведение
 0 
r  r1   9 
 
 6 
r r1  17
Создание таблицы значений функции одной переменной
Для того чтобы построить таблицу значений функции в Mathcad
необходимо выполнить следующие действия:
1) задать функцию;
2) задать границы интервала [a, b] на котором будут рассчитываться
значения функции;
3) задать количество точек разбиения интервала [a, b];
4) вычислить вектор значений аргумента функции в точках разбиения;
5) вычислить вектор значений функции, соответствующий вектору
значений аргумента.
Пример.
Задание функции:
2
𝑓(𝑥): = 𝑒 −𝑥 .
Задание границ диапазона:
a := -10;
b := 10.
Задание числа точек разбиения, включая граничные точки (>=2):
n := 20.
Вычисление вектора значений аргумента:
r  a a 
ba
 b
n1
.
138
r 
-10
-8.94736842
-7.89473684
-6.84210526
-5.78947368
-4.73684211
-3.68421053
-2.63157895
-1.57894737
-0.52631579
0.52631579
1.57894737
2.63157895
3.68421053
4.73684211
...
Вычисление вектора значений функции:
f ( r) 
0
0
0
0
2.77533332·10-15
1.80070418·10-10
1.27392585·10-6
9.82698935·10-4
0.08265543
0.7580482
0.7580482
0.08265543
9.82698935·10-4
1.27392585·10-6
1.80070418·10-10
...
Матрица значений функции двух переменных строится аналогично.
Пример.
Задание функции:
f(x,y) := sin(x,y)
Задание границ прямоугольника по оси ох:
xa := -2·π;
xb := 2·π .
Задание границ прямоугольника по оси оу:
139
ya := -π;
yb := π .
Задание числа точек разбиения по оси ох, включая граничные точки (>=2):
xn := 40.
Задание числа точек разбиения по оси оу, включая граничные точки (>=2):
yn := 20.
Расчет значений индексов i, j:
i := 0 .. xn – 1;
j := 0 .. yn – 1.
Расчет значений x(i) и y(j):
𝑥𝑏−𝑥𝑎
𝑥𝑖𝑖 ≔ 𝑥𝑎 + 𝑖 ·
;
𝑥𝑛−1
𝑦𝑖𝑖 ≔ 𝑦𝑎 + 𝑖 ·
𝑦𝑏−𝑦𝑎
𝑦𝑛−1
.
Матрица значений функции:
Mi,j := f(xii,yij)
0
M
1
2
3
4
5
6
7
0
0.777
-0.928
0.124
0.807
-0.908
0.075
0.836
-0.886
1
-0.122
-0.866
0.798
0.244
-0.988
0.526
0.578
-0.977
2
-0.906
-0.142
0.988
-0.431
-0.739
0.859
0.241
-0.999
3
-0.838
0.692
0.581
-0.908
-0.243
0.998
-0.129
-0.95
4
0.018
0.995
-0.178
-0.966
0.334
0.912
-0.482
-0.835
5
0.857
0.537
-0.83
-0.579
0.8
0.621
-0.768
-0.66
6
0.891
-0.333
-0.979
0.075
0.998
0.189
-0.949
-0.439
7
0.087
-0.947
-0.535
0.694
0.864
-0.285
-0.999
-0.187
8
-0.799
-0.837
0.232
0.994
0.441
-0.695
-0.912
0.078
9
-0.933
-0.085
0.859
0.836
-0.129
-0.949
-0.699
0.338
10
-0.191
0.731
0.966
0.292
-0.656
-0.988
-0.391
0.574
11
0.731
0.988
0.488
-0.386
-0.964
-0.804
-0.028
0.769
12
0.966
0.488
-0.285
-0.886
-0.95
-0.439
0.338
0.91
13
0.292
-0.386
-0.886
-0.978
-0.619
0.025
0.657
0.987
14
-0.656
-0.964
-0.95
-0.619
-0.082
0.483
0.887
0.994
15
-0.988
-0.804
-0.439
0.025
0.483
0.833
0.994
...
Решение систем линейных алгебраических уравнений
Приведем несколько методов решения систем линейных алгебраических
уравнений (СЛАУ) в Mathcad.
1. Метод обратной матрицы (для квадратных систем с невырожденной
матрицей).
Пусть задана СЛАУ
AX  B
Тогда вектор решения находится по формуле: X  A -1  B
2. Метод наименьших квадратов.
Пусть задана система уравнений: À mn  X n1  Bm1 , где m>n, т.е. число
уравнений больше числа неизвестных.
140
Умножим обе части матричного уравнения на транспонированную матрицу
системы. À T  A  X  A T B
Отсюда X  (A T  A) 1  A T  B
3. Символьный метод решения с помощью блока Given - Find (решение
системы будет найдено, если оно существует).
Пример.
Given
2·x + 3·y + 5·z + 4 = 0
4·x + 5·y + 7·z - 5 = 0
3·x + 8·y - 4·z - 1 = 0
140
𝐹𝑖𝑛𝑑(𝑥, 𝑦, 𝑧) →
−
11
257
44
105
−
( 44 )
Замечание: Знаки равенства < = > между левой и правой частью уравнений
необходимо ставить, используя панель Boolean (рис. 4).
Рисунок 4 – Панель инструментов Boolean
Любые «другие» знаки равенства, взятые с других панелей или набранные
с клавиатуры приведут к ошибке.
Задание
1. Вычислить определители матриц, найти матрицу обратную заданной,
найти ранги матриц, выделить из матриц заданные строки и столбцы.
2. Решить СЛАУ методом обратной матрицы и с помощью блока Given Find; решить СЛАУ методом наименьших квадратов.
3. Построить таблицы значений функций на заданном интервале [a, b] с
заданным количеством точек разбиения.
Варианты заданий
Задание 1.
а) вычислить определители;
б) найти матрицу обратную заданной, транспонировать матрицу;
в) найти ранги матриц; выделить из матриц вторую строку и третий
столбец.
141
№
варианта
1
Задание 1 а
Задание 1 б
Задание 1 в
1 2 2 4
1 6 0 5
1 2 1 3
 1 1 0 


 2 1 0
0 1 1


3 0 1 


2 5 3 
 1 4 1


7 9 7
 2


9 5 4
 6
 8 16 14 11


 4  2 4 3 


1 2 1 2
2 2 2 1
1 2 2 4
1 1 0 1
3 3
2
0
4
2 2 2 1
1 2 2 4
1 1 0 1
3 3
4
2
2
8
5
4
0
2 3 1


 3 4 2
 1 1 2


4
3 6
0 3
3 1
6 12  9 2
3
4
2
2
8
5
4
3 6
0 3
3 1
 4 3 0


 1 1 0
 0 0 1


6 12  9 2
6 2
3 0
3 1
4
9
8
4
7
1
2
9  3 12
7
6 2
3 0
3 1
7
1
2
9
8
4
9  3 12
0 0 1


1 5 1
1 4 2


7
4  4  1 12
2 3 2 6
2 2 1 4
6 6
3
13
142
 4 3 0


 1 1 0
 0 0 1


8 4
 2

9 5
 8
 10 17 9

  6 1 1






 1
0 0 1


1 5 1
1 4 2


0 8
 2

9 4
 6
 8
9 12

 4 9 4

6

3
9

3 
 1 2 1


 0 3 1
 0 2 1


3 7
 2

5 7
 4
 6
8 14

 2  2 0

4

2
6

2 
0
1
1
5
4  4  1 12
2 3 2 6
2 2 1 4
6 6
3
 1 2 1


 0 3 1
 0 2 1


13
4 2 1 4
2 2 3 3
 2 1 0 1
6 3 0 2
6
4 2 1 4
2 2 3 3
 2 1 0 1
1 1 2


 0 2 3
 0 1 2


6 3 0 2
 6 2 3 10
 3 1 1 4
3 1 0 3
9
7
3
0
3
0
 2 0 5


 3 1 5
 1 0 2


8
2 4 5 3
1 4 4 4
1 2 3 1
3 6 9 5
8
2 4 5 3
1 4 4 4
1 2 3 1
1 0 1


 2 2 3
 3 0 4


3 6 9 5
9
2 4
1 3
1 2
7
7
4
3
12 17
6
11
12
5
2 4
1 3
1 2
7
7
4
3
12 17
6
 2 1 0


 3 2 0
 3 2 1


11
12
5
6 2 1 4
3 3 4 2
3 1 0 1
9 3
0
  2 0 5


 3 1 5
 1 0 2


5
9
 2

7
6
 5
 7 12 15

3  2 3

6

3
9

3 
8
 6 2 3 10
 3 1 1 4
3 1 0 3
9
1 1 2


 0 2 3
 0 1 2


2 7 4 9


3 5 2 8
 5 12 6 17 


 1 2 2 1 


2
143
1 0 1


 2 2 3
 3 0 4


 2 6 5

6 4
 8
 10 12 9

 6 0 1

 2

 3
 3

 2 6

 4 5
 6 11

 2 1

3

3
6

0 
1 0

2 0
2 1 
9 1 

3 9 
12 10 

6  8 
 1 3 0


 1 2 0
 2 1 1


2 8 5 9


3 1 5 8
 5 9 10 17 


 1 7 0 1 


10
6 2 1 4
3 3 4 2
3 1 0 1
9 3
0
 1 3 0


 1 2 0
 2 1 1


  6 5  2


 3 3 1 
 1
1
2 

2 9 5 1


1 3 4 1
 3 12 9 2 


1 6 1 0


  6 5  2


 3 3 1 
 1
1
2 

3 0 1 


2 5 3 
 1 4 1


5 
 2 9 0


7 
 4 3 2
 6 12 2 12 


  2 6  2  2


2
2  4 4 11
1 9 2 6
1 2 1 4
3  6 3 11
11
2  4 4 11
1 9 2 6
1 2 1 4
3  6 3 11
2 2
1 7
1 1
2
4
1 1
1 3
8  3  3 10
12
2 2
1 7
1 1
2
4
1 1
1 3
8  3  3 10
8
4
4
6 5
5 2
3 2
12 9
13
8
4
4
6
6 5
5 2
3 2
12 9
6
6 4 4
3 3 2
3 2 3
 1  3 0


 1 4 0 
0
0 1 

9
4
3
6 4 4
3 3 2
3 2 3
 4  5

1 1
0
0 
9 1 

4 3 
13 4 

5  2 
11
9
4
3
  6  4  5


1 1
 1
 1
0
0 

11
5
6
4
9 6  9 11
14
 6

 1
 1

2 6

2 2
4 8

0 4

5
6
4
9 6  9 11
 1 0  1


 0 1  1
0  2 3 


4 14 5 12
2 10 0 6
2 7 1 4
6 21  3 13
144
1

0
0

 2

 4
 6

 2

 1

 1
 2 3 
6 3 3

5 5 3
11 8 6 

1  2 0 
0
1
 1 0 1


 0 2  3
 0 1 2 


 2 5 5 6


 7 4 3 2
 9 9 8 8


  5 1 2 4


15
4 14 5 12
2 10 0 6
2 7 1 4
6 21  3 13
 1 0 1


 0 2  3
 0 1 2 


 2 2 1 1
1 3 4 3
1 1 3 0
3 3
9
 2 0 5 


 1 1  5
 1 0  2


 2 9 9 8


 7 2 3 4
 9 11 12 12 


5 7 6 4 


2
Задание 2.
а) решить СЛАУ методом обратной матрицы и с помощью блока Given –
Find;
б) решить переопределенную СЛАУ методом наименьших квадратов.
№
варианта
1
2
3
4
5
Задание 2 а
Задание 2 б
 3x  6y  5z  t  0
 3x  4y  z  2t  1


 5x  4y  7z  8t  0
6x  10y  6z  5t  1
3x  5y  6z  3t  1
 x  y  3z  4t  0


3x  2y  4z  4t  1
 4x  y  9z  t  0
 3x  6y  5z  1
 3x  4y  z  2


 5x  4y  7z  8
6x  10y  6z  3
 3x  4y  7z  8t  1
 9x  5y  4z  5t  0


 x  2y  z  t  1
12x  y  11z  t  13
3x  6y  5z  4t  0
 4x  6y  4z  t  1


 2x  3y  z  3t  0
 7x  y  9z  t  15
 3x  2y  4t  0
 2x  3y  2z  t  1


x  5y  7z  3t  0
5x  y  2z  t  15
 3x  4y  7z  8
 9x  5y  4z  5


 x  2y  z  0
12x  9y  11z  13
3x  5y  6z  3
 x  y  3z  4


3x  2y  4z  4

4x  6y  9z  7
 3x  6y  5z  4
 4x  6y  4z  1


 2x  3y  z  3
7x  12y  9z  5
 3x  2y  4
 2x  3y  2z  1


 x  5y  7z  3
5x  5y  2z  5
145
6
3x  9y  8z  5t  0
 x  3y  3z  t  1


 2x  y  3z  t  0
4x  y  11z  t  16
 3x  9y  8z  5
 x  3y  3z  1


 2x  y  3z  1
4x  12y  11z  6
7
3x  5y  3z  4t  0
 x  7y  6z  6t  1


 3x  y  8z  6t  0

 4x  y  9z  t  10
 3x  5y  3z  4
 x  7y  6z  6


 3x  y  8z  6
4x  12y  9z  10
8
 3x  7y  5z  t  0
 x  2y  3z  t  1


3x  2y  6z  7t  0
 4x  y  8z  t  10
 3x  y  5z  t  1
 x  2y  z  4t  0


3x  2y  6z  5t  1
 4x  3y  z  t  15
 3x  7y  5z  1
 x  2y  3z  1


3x  2y  6z  7

4x  9y  8z  2
 3x  6 y  9z  t  1
 5x  6 y  6z  7t  0


 4x  4 y  6z  t  10
8x  12 y  z  2t  18
3x  5 y  4z  6t  16
 5x  4 y  6z  t  1


 3x  y  2z  t  0
8x  y  10z  2t  17
 3x  6 y  9z  1
 5x  6 y  6z  7


 4x  4 y  6z  1
8x  12 y  15z  8
 3x  5 y  z  8t  0
4x  3y  6z  6t  16


 3x  y  2z  5t  1
 7x  y  7 z  t  1
3x  6 y  5z  4t  0
 x  3y  4z  5t  15


 4x  3y  5z  2t  1
 4x  y  9z  9t  0
 3x  5y  z  8
 4x  3y  6z  6


 3x  y  2z  5
7x  8 y  7z  14
9
10
11
12
13
 3x  y  5z  1
 x  2y  z  4


3x  2y  6z  5
4x  3y  6z  5
 3x  5 y  4z  6
 5x  4 y  6z  1


 3x  y  2z  1
8x  9 y  10z  7
3x  6 y  5z  4
 x  3y  4z  5


4x  3y  5z  2

4x  9 y  9z  9
146
14
3x  5 y  3z  6t  16
 3x  6 y  7 z  t  0


5x  9 y  7 z  8t  18
 6x  y  10z  t  1
 3x  5y  3z  6
 3x  6 y  7z  1


 5x  9 y  7z  8
6x  11y  10z  7
15
3x  5y  3z  9t  19
 x  2 y  3z  5t  0


 7x  7 y  6z  5t  1
 4x  y  6z  t  1
 3x  5y  3z  9
 x  2 y  3z  5


 7x  7 y  6z  5
4x  7 y  6z  14
Задание 3.
Построить таблицу значений следующих функций на интервале [-10,10]
количество точек разбиения n = 50.
№
варианта
1
2
3
4
5
6
Задание 3
y  x  e -x
2
2
y  e -x
y  x  sin  x 
y  x  cos  x 
y  x  ex
y  x  ex
-sin  x 
7
ye
8
ye
cos x 
9
ye
cos x 
10
y  x e
11
y  xe
12
y  sin(e x )
y  cos(e x )
y  x  sin(e x )
y  x  cos(e x )
13
14
15
-sin  x 
cos x 
Технология выполнения работы
В данной работе необходимо произвести действия с векторами и
матрицами, используя панель Matrix, решить СЛАУ методами обратной
матрицы, наименьших квадратов, с помощью блока Given – Find, а так же
построить таблицы значений функций одной переменной, используя алгоритм
описанный выше.
147
Содержание отчета
1. Задание и цель работы.
2. Выполненные расчеты.
3. Таблицы значений заданных функций.
1.
2.
3.
4.
Вопросы для защиты работы
Как вычислить модуль вектора в Mathcad?
Как используя символьный процессор решить систему уравнений?
Как выделить строку заданной матрицы в Mathcad?
Как построить матрицу значений функции двух переменных?
148
ЛАБОРАТОРНАЯ РАБОТА № 18
ВЫЧИСЛЕНИЯ В MATHCAD. ДИФФЕРЕНЦИАЛЬНОЕ И ИНТЕГРАЛЬНОЕ
ИСЧИСЛЕНИЕ
Время выполнения – 2 часа.
Цель работы
Научиться с помощью численных методов и символьного процессора
Mathcad находить: пределы функций в точке и на бесконечности, производные
функций одной переменной и частные производные функций нескольких
переменных, разложения функций в ряд Тейлора - Маклорена, неопределенные
и определенные интегралы, суммы функциональных рядов, решения
обыкновенных дифференциальных уравнений первого порядка.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать основные приемы вычисления пределов, производных,
интегралов, решения дифференциальных уравнений в Mathcad;
 уметь вычислять пределы функций в точке и на бесконечности;
 уметь находить производные функций одной переменной и частные
производные функций нескольких переменных, используя численные методы и
символьный процессор Mathcad;
 уметь выполнять разложение функций в ряд Тейлора - Маклорена;
 уметь вычислять неопределенные и определенные интегралы функций;
 уметь находить суммы функциональных рядов;
 уметь находить решение обыкновенных дифференциальных уравнений
первого порядка.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер с
операционной системой MS Windows, установленное приложение РТС Mathcad
версии 14 или выше; методические указания по выполнению работы.
Общие теоретические сведения
Для вычисления пределов, производных, интегралов, сумм рядов в Mathcad
используется панель Calculus (рис. 1).
Рисунок 1 – Панель инструментов Calculus
149
Открыть панель Calculus можно, щелкнув мышкой по изображению интеграла
на панели инструментов Math (рис. 2).
Рисунок 2 – Панель инструментов Math
Вычисление пределов
Пример:
3
√𝑥−6+2
𝑥→−2 𝑥 3 +8
lim
→
1
144
Производные функций одной переменной
Пример 1 (символьный метод).
𝑑
𝑑𝑥
(𝑥 2 · sin(𝑥) · cos(𝑥)) → 𝑥 2 · 𝑐𝑜𝑠(𝑥)2 − 𝑥 2 · 𝑠𝑖𝑛(𝑥)2 + 2𝑥 · cos(𝑥) · sin(𝑥)
𝑑3
𝑑𝑥 3
(𝑥 2 · cos(𝑥)) → 𝑥 2 · sin(𝑥) − 6 sin(𝑥) − 6𝑥 · cos(𝑥)
t := 1
𝑑
𝑡
𝜋
(𝑡 · 𝑎𝑠𝑖𝑛 (𝑡+1)) → 6 +
𝑑𝑡
√3
6
Пример 2 (численный метод).
t := 1
𝑑
𝑡
(𝑡 · 𝑎𝑠𝑖𝑛 (𝑡+1)) = 0.812
𝑑𝑡
𝑑2
𝑑𝑡 2
(3𝑡 3 + 𝑡 + 1) = 18
Частные производные
Пример 1 (символьный метод).
𝑧(𝑥, 𝑦) ≔ 𝑥 2 · 𝑦 5

x
z( xy )  2 x y
 
y x

5
z( xy )  10 x y
2 4
y
4
z( xy )  5 x  y
2

2
x
z( xy )  2 y
150
5
 
x y
2

y
2
z( xy )  10 x y
4
2 3
z( xy )  20 x  y
Пример 2 (численный метод).
t := 1 w := 2
2
u( t w)  t  w
 
t w
7
u ( t w )  896
Примечание: Для того чтобы придать частным производным
соответствующий вид необходимо щелкнуть правой кнопкой мыши по
изображению производной в формуле и в открывшемся окне выбрать View
Derivative As / Partial Derivative.
Разложение функции в ряд Тейлора по степеням х в окрестности точки
х = 0 (ряд Маклорена)
Пример
2
 2 
3 3
3 3x
b
2
2
kxkx2 bbxxseries
sinsin
xx33 
x  kkxx2  b  x
series
 bb x
sin k x  b x series x2  b x  k x
2
 seriesxx44  bbx  kxx22  b x
sinsin
k xk x2 b xb xseries

2

2
sin k x  b x series x5  b x  k x 
66
3 3
b3 3x
2 2 k4 x4
b b k x
66
22

3 3
b x
6
2

4
b  k x
2
  b4 k2  b k2


 x  b 

120
6
3
 


5
Здесь в левой части выражения на первом месте стоит функция, которую
надо разложить в ряд (в данном случае sin(kx2+bx) ), далее следует слово series,
что означает разложение в ряд, после чего указывается переменная
относительно которой надо производить разложение в ряд (у нас это – х), затем
указывается количество членов разложения.
Примечание: слово series необходимо вставлять, используя панель
Symbolic (рис. 3).
Рисунок 3 – Панель инструментов Symbolic
Панель Symbolic можно открыть, щелкнув по изображению «шапочки» на
панели Math.
151
Неопределенный интеграл
Пример:


2
(
tan
(
x
)
)
d x  tan ( x)  x




x
x
x

e
d
x


e
 ( x  1)


Определенный интеграл
Пример 1 (символьный метод)



2
 cos ( x) d x 

2
0
Пример 2 (численный метод)


2
 cos ( x) d x  1.571

0
Несобственный интеграл
Пример 1 (символьный метод)





1
dx  
x





2
e
x
dx 

0
Пример 2 (численный метод)





2
e
x
d x  1.772

Двойной интеграл
Пример 1 (символьный метод)




3
4

x y
x y
 2
3
 x  y dxdy  3  4

2
3
  2
121
3
  x  y dxdy 
 
12
1 2
152












e
 2 2 dxdy  
 x y

Пример 2 (численный метод)
2
3
  2
3
  x  y d x d y  10.083
 
1 2











e
 2 2
 x y
d x d y  3.142

Суммирование рядов
Пример 1 (символьный метод)
10

2  2047

( x) 
n
n 0

n
n 0




1
x 1
x
n
x
n
n  0 2  n

 if 1  x
1
n
e
if x  1  x  1
2
 
n 0
Пример 2 (численный метод)
10
n
3

2  2.047  10
n 0


1
n
 e  1.649
n  0 2  n
153
Решение ОДУ первого порядка ( yt   f yt , t  ; y( t 0 )  y 0 )
Для нахождения решения используется служебное слово Given и функцию
Odesolve(t, n), где t – переменная, относительно которой находится решение
уравнения, n – количество точек, в которых будет найдены значения функции
y(t).
Пример:
Given
2
d
y ( x) y ( x)  y ( x)
dx
y( 0) 0.1
y  Odesolve( x10)
y( 3)  0.691
y( 1)  0.232
y( 9)  0.999
Пример построения графика функции представлен на рис. 4
1
1
0.8
0.6
y ( x)
0.4
0.2
0.1
0
0
2
4
0
6
x
8
10
10
Рисунок 4 – Построенный график функции
Варианты задания
Задание 1.
Найти аналитические выражения для производных заданных функций;
вычислить значения производных в точке х = 3,5.
Задание 2.
Найти аналитическое выражение для частных производных заданной
функции до второго порядка включительно; вычислить значения частных
производных в точке М(1,1).
№
варианта
1
Задание 1
ye
y4
Задание 2
1
x 1
1
2
u
x2
 1 
y  cos2 tg 3  2 
x 
154
1
 y2  z
x
2
3
4
5
 1 

y  sin  2

x

x


1
y  x2
e 1
 1 
y  sin 2 3 cos 2 
x 
y  3 cos(ln x )
y  5 3 ln 2 x  1
1
y  sin 3
x
1
y  tg 2
x
y  ln sin 7 cos x
1
y  7 arcsin x  2
x
arccos x
y5
7
1
 z2
y
u  x2  y 
1
z
1
z


u  2x  y 


u  x2 
y  tg arccos x
6
u x


y  cos x  x x
2x  x 2
y
cos2 ( tg 3 x )
1
y  1  x 3 
sin 2 x
1

y  tg 2 (ln x )  x 2 
x

4
3
x  sin x  x
y
tg (1  x )
tg (ln x )
y
ln(sin x )
1
 z
y2
u  xy 
1
z
u  xz 
1
y
u  xy 
1
z2
2x  x 2
y
arccos2 ( tgx )
8
y  arccos3 x
y  sin e x
2
y  arccos2x 2
155
9
y  3 cos(cosx )
u x
y  3 sin 3 x  1
y4
10
3 cos( x 3 )
1
x 2
y  cos sin 3 cos x
y  arctg

y  9 sin x 
11
1
z
y2
u x yz

u z
1
x3
y  5cos
( x 3 x ) 2
y  ln
x  x2 x


1
 5x 4
x
x
2  x2
y
cos3 ( tgx )
1
y  1  x 3 
sin 2 x
1

y  tg 2 (ln x )  x 2 
x

x
2
2 x
y
cos2 ( tg 2 x )
1
y  1  x 3 
sin 4 x
1

y  tg (ln 3 x )  x 2 
x

1
y  arctg 4 2
x
y  cos sin 5 cos2 x
1
y  7 sin 3 x  2
x
2
y  tg cos x
1 1

x y
y3
12
13
14

15

y  ln 3
y3


x x x
u
1
 z
xy
u  xz  y

u

u  x yz 2  z 3
1
 5x
x3
156
1
z
x  y2
2
Задание 3.
Получить 10 членов разложения заданных функций в ряд Тейлора Маклорена.
Задание 4.
Проинтегрировать
процессором Mathcad.
№
варианта
1
указанные
выражения,
Задание 3
y  x  e -x
пользуясь
символьным
Задание 4
x
2
2
cos 2 xdx
5x  6
dx
2
 3x  9)
 ( x  1)( x
1
x
x 3
dx
x
dx
 sin x  2 cos x  6
2
y  e -x
2
1
 x arccos x dx
 ( x  8)( x
2x
dx
2
 5 x  18)
4x  5
dx
x 1
cos x
 2  cos x dx
2
 x sin 3xdx

3
y  x  sin  x 
5x  3
 ( x  1)( x
 1)
dx
x2
dx
x2
sin x
 1  sin x dx
2
 x ln xdx

4
2
y  x  cos  x 
3
x2  x 1
 ( x 2  1)( x  7) dx
x dx
x  5 x2
dx
 sin x cos 3 x

157
5

x 2  3x  4
 ( x  1)( x 2  2 x  4) dx
y  x  ex

25  x 2 dx
cos 3 2 x
 sin 4 x dx
ln x
 x 3 dx
2x  x 2
 ( x  3)( x 2  1) dx
6
y  x  ex
x2  4
 x 2 dx
dx
 sin 2 x  cos 2 x
2
 ln xdx
7
ye
ln x
dx
x2
 (x
-sin  x 
2
7x  8
dx
 9)( x  4)
x
dx
x 2 16
dx
 2 sin x  sin 2 x
2x
 xe dx
8
x
ye

cos x 
2
7x  2
dx
( x 2  1)
dx
2
(36  x 2 ) 3
dx
 sin x  cos x
 x e dx
9
2 x
 (x
ye
2
dx
 4 x  13)( x  1)
x2  9
 x dx
dx
 sin x  cos x
cos x 
158
 arcsin x dx
10
8x  3
 ( x  3)( x  4)
y  x e
-sin  x 
2
dx
x 3 dx

x 2  25
dx
 3 sin x  4 cos x
 2x
11
 (x
y  xe
cos x 
2
cos 5 xdx
x  3x
dx
 2 x  4)( x  1)
3
2
( x 2  9) 3
dx
x6

 sin
2
dx
x  5 sin x cos x
 x  sin 3x dx
12
4 x 3  15 x
 ( x 2  2 x  3)( x  9) dx
y  sin(e x )
x 2 dx

(x 2  1) 3
dx
 cos x  2 sin x  3
 arctg 2 x dx
13
5x 4  4 x 2  3
 x 3  8 dx
x 2 dx

y  cos(e x )
(x 2  16) 5
sin x
 2 sin x  3 cos x dx
 x  arctg x dx
14
 (2 x
y  x  sin(e x )
2
7x  6
dx
 6 x  4)( x  3)
16  x 2
 x 4 dx
sin 2 x
 1  sin 2 x dx
x
 e cosx dx
15
x2
 ( x  2) 2 ( x  1) dx
y  x  cos(e x )
 x x  25dx
cos 2 x
 1  cos x dx
3
2
2
159
Задание 5.
Просуммировать указанные ряды.
Задание 6.
Решить ОДУ первого порядка (задачу Коши) численным методом,
результат представить в виде графика искомой функции.
№
варианта
Задание 3
Задание 4
1
f(x,u) 
  1
n -1
/n
n
2
1/ 2
n
 1/ 3n
f(x,u) 

3
(2n 1) / 2
f(x,u) 
n
4
1/(3
n
f(x,u) 
 2)(3 1)
n
5
f(x,u) 
 n!/(3n n )
6
 n!/ n
f(x,u) 
3n
f(x,u) 
7
 n!/ n
n
8
f(x,u) 
  1 /3n
n
n
160
9
1/ 3
n
 1/ 4 n
f(x,u) 

10
4n 16/ 2
f(x,u) 
n
11
e
n
/ n!
12
1/2
n

3 3 2
n
f(x,u) 

13
2
f(x,u) 
n
/ n!
14
n 1/n
5
 n2
2n 1/n
n
f(x,u) 

15
6
3
f(x,u) 

Технология выполнения работы
В данной работе необходимо произвести вычисления производных,
интегралов, найти суммы рядов и разложения функций в ряд Тейлора Маклорена, используя панель Calculus, а также применяя методики описанные
выше.
Содержание отчета
1. Задание и цель работы.
2. Выполненные расчеты.
1.
2.
3.
4.
Вопросы для защиты работы
Как вычислить частную производную функции в Mathcad?
Как используя символьный процессор найти сумму ряда?
Как вычислить двойной интеграл в Mathcad?
Как найти разложение функции в ряд Тейлора - Маклорена?
161
ЛАБОРАТОРНАЯ РАБОТА № 19
ВЫЧИСЛЕНИЯ В MATHCAD. ПРОГРАММИРОВАНИЕ В MATHCAD
Время выполнения – 2 часа.
Цель работы
Освоить элементарные приемы программирования в среде Mathcad.
Задачи лабораторной работы
После выполнения работы студент должен знать и уметь:
 знать основные приемы программирования в Mathcad;
 уметь составлять программы – функции в Mathcad, реализуя линейные,
разветвляющиеся и циклические алгоритмы.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер с
операционной системой MS Windows, установленное приложение РТС Mathcad
версии 14 или выше; методические указания по выполнению работы.
Общие теоретические сведения
Для ввода конструкций программирования будет необходима наборная
панель Программирования, в которую входят конструкции, показанные на
рис. 1.
Рисунок 1 – Панель программирования
Для вставки нужной конструкции в текст составляемой программы
достаточно щелкнуть мышью на соответствующем значке наборной панели
Программирования.
Реализовать тот или иной алгоритм вычисления в пакете MathCAD можно
двумя способами.
1. Вставляя соответствующие операторы или функции в текст документа
MathCAD. Такой способ называется программированием в тексте документа;
2. Используя так называемые программы-функции, которые содержат
конструкции, во многом подобные конструкциям таких языков как PASCAL или
FORTRAN: операторы присваивания, операторы циклов, условные операторы
и т. д. Написание программ-функций в MathCAD позволяет решить задачи,
которые невозможно решить используя только операторы и функции MathCAD.
162
Такой способ будем называть программированием в программе-функции. Такое
программирование включает два этапа:
 описание программы-функции;
 вызов программы-функции.
Рассмотрим отдельно эти два этапа.
Описание программы-функции и локальной оператор присваивания
Перед тем как использовать программу-функцию нужно ее задать, т. е.
выполнить описания. Описание программы-функции размещается в рабочем
документе перед вызовом программы-функции и включает в себя имя
программы-функции, список формальных параметров (который может
отсутствовать) и тело программы-функции. Рассмотрим эти понятия.
Каждая программа-функция MathCAD имеет оригинальное имя, используя
которое осуществляется обращение к этой программе-функции. Через это же
имя “возвращается” в рабочий документ результат выполнения программыфункции.
После имени программы-функции идет список формальных параметров,
заключенный в круглые скобки. Через формальные параметры «внутрь»
программы-функции “передаются” данные необходимые для выполнения
вычислений внутри программы. В качестве формальных параметров могут
использоваться имена простых переменных, массивов и функций. Формальные
параметры отделяются друг от друга запятой.
Замечание 1. Программа-функция может не иметь формальных параметров
и тогда данные передаются через имена переменных, определенных выше
описания программы-функции. 
Тело программы-функции включает любое число операторов локальных
операторов присваивания, условных операторов и операторов цикла, а также
вызов других программ-функций и функций пользователя.
Порядок описания программы-функции MathCAD. Для ввода в рабочий
документ описания программы-функции необходимо выполнить следующие
действия:
 ввести имя программы-функции и список формальных параметров,
заключенный в круглые скобки;
 ввести символ “:” - на экране отображается как “: =”;
 открыть наборную панель программирования и щелкнуть кнопкой “add
line”. На экране появится вертикальная черта и вертикальный столбец с двумя
полями ввода для ввода операторов, образующих тело программы-функции
(рис. 2);
163
Рисунок 2 – Структура программы-функции
 перейти в поле 1 (щелкнув на нем мышью или нажав клавишу Tab) и
ввести первый оператор тела программы-функции. Так как самое нижнее поле
всегда предназначено для определения возвращаемого программой значения, то
поля ввода для дополнительных операторов открываются с помощью щелчка на
кнопке “Add line” панели программирования. При этом поле ввода добавляется
внизу выделенного к этому моменту оператора. Для удаления того или иного
оператора или поля ввода из тела программы-функции, нужно заключить его в
выделяющую рамку и нажать клавишу Delete (рис. 3);
f ( x)
x
z
x
x
2
1
3
Оператор 1
Оператор 2
Поле 2
Рис. 3 – Добавление операторов в тело программы-функции
 заполнить самое нижнее поле ввода (поле 2), введя туда выражение,
определяющее возвращаемое через имя программы-функции значение.
В приведенном примере формальным параметром является простая
переменная x, тело программы включает два локальных оператора
присваивания и значение переменной z определяет возвращаемый через имя
функции результат выполнения программы-функции.
Локальный оператор присваивания. Для задания внутри программы
значения какой-либо переменной используется так называемый локальный
оператор присваивания, имеющий вид:
<имя - переменной> <выражение>
Внимание!
Использование
(обозначается знаком равно) в
синтаксической ошибке.
«обычного» оператора присваивания
теле программы-функции приводит к
164
Обращение к программе-функции MathCAD
Для выполнения программы-функции необходимо обратиться к имени
программы-функции с указанием списка фактических параметров (если в
описании программы присутствует список формальных параметров), т. е.
<имя - программы> (список фактических параметров)
Фактические параметры указывают при каких конкретных значениях
осуществляются вычисления в теле программы. Фактические параметры
отделяются друг от друга запятой.
Очевидно, что между фактическими и формальными параметрами должно
быть соответствие по количеству, порядку следования и типу. Последнее
соответствие означает:
 если формальным параметром является простая переменная, то в
качестве фактического может использоваться константа, переменная,
арифметическое выражение;
 если формальным параметром является вектор или матрица, то
фактическим должен быть вектор или матрица;
 если формальным параметром является имя встроенной функции или
другой программы, то и фактическим параметром должен являться тот же
объект.
Замечание 2.2. Обращение к программе-функции должно находиться
после описания программы-функции и к моменту обращения фактические
параметры должны быть определены. 
Пример 1. Обращение к программе f(x), приведенной на рис. 2.3 может
иметь следующий вид:
x :=2
f(x) = 1.587 f(-3.23) = 0.536 + 0.928i
z := f(x+4.5) z = 2.041
Заметим, что переменная z никак не связана с “локальной” переменной z,
используемой внутри тела программы-функции.
Замечание 1. Передать данные внутрь программы-функции можно
используя внутри программы переменные, определенные до описания
программы-функции. Например:
Берется значение равное 2
x
f
x
2
x
z
x
1
3
2
f

1.587
Вызов программы
z
x

2
165
Хотя значение переменной х изменилось внутри программы-функции, вне
описания программы-функции эта переменная сохранила свое прежнее
значение. 
Замечание 2. Имена фактических параметров при вызове программыфункции могут не совпадать с именами ее формальных параметров. 
Программирование в программе-функции линейных алгоритмов
Напомним, что под линейным алгоритмом понимается вычислительный
процесс, в котором необходимые операции выполняются строго
последовательно. Операторы, реализующие этот алгоритм в теле программы функции также размещаются последовательно и выполняются все, начиная с
первого оператора и кончая последним.
Пример. Оформим в виде программы-функции вычисление корней
квадратного уравнения ax2 + bx +c = 0.
Для этого введем следующее описание программы-функции
2
qq1 ( a  b  c  sig1 )
d1 b 4  a  c
d2
d3
2 a
b
sig1  d1
d3
d2
Программа qq1 имеет четыре параметра: смысл первых трех понятен, а
четвертый определяет знак перед корнем квадратным. Задавая Sig1 = 1,
получаем корень x1; Sig1 = -1, получаем корень x2. Программа реализует
линейный алгоритм – все операторы выполняются всегда строго
последовательно.
Программирование
в
программе-функции
разветвляющихся
алгоритмов
Напомним, что в разветвляющихся алгоритмах присутствует несколько
ветвей вычислительного процесса. Выбор конкретной ветви зависит от
выполнения (или невыполнения) заданных условий на значения переменных
алгоритма.
Пример 1. Переменная y задается следующим выражением
𝑥2 , 𝑥 ≤ 0
𝑦(𝑥) = {
√𝑥 , 𝑥 > 0
Видно, что алгоритм вычислений содержит две ветви и выбор зависит от
значения переменной x.
166
Для программирования разветвляющихся алгоритмов в MathCAD имеется
условная функция if и условный оператор. Используя эти конструкции можно
«изменить» последовательное выполнение операторов. В этих конструкциях
могут использоваться следующие новые понятия.
Условный оператор. Этот оператор используется только в теле
программы-функции и для его ввода необходимо щелкнуть на кнопке if панели
программирования или клавиши [ } ]. На экране появляется конструкция с
двумя полями ввода, изображенная на следующем рисунке.
В поле 2 вводится логическое выражение (в простейшем случае это
выражение отношений). В поле 1 вводится выражение (как правило,
арифметическое), значение которого используется, если проверяемое
логическое выражение принимает значение 1.
Условный оператор может находиться только внутри тела программыфункции.
Например:
В поле 3 задается выражение, значение которого используется, если
логическое выражение равно 0. Для ввода в поле 3 необходимо:
 заключить это поле в выделяющую рамку;
 щелкнуть на кнопке “otherwise” панели программирования;
 в оставшемся поле введите соответствующее выражение.
Пример 2. Составим программу-функцию, вычисляющую функцию y(x),
заданную в примере 1. Для этого введем описание следующей программыфункции:
Обращение к этой программе-функции имеет вид
y(2) = 1.414 y(-2) = 4 
Таким образом, выражение, стоящее перед словом otherwise выполняется
только в том случае, если не выполнено заданное перед этим условием.
В программе можно использовать несколько следующих друг за другом
условных операторов с одним выражением перед словом otherwise.
Пример 3. Составим программу-функцию для вычисления переменной z по
формуле
𝑡 3 , если 𝑡 ≤ −3
𝑧(𝑡) = { 𝑡 2 , если − 3 ≤ 𝑡 ≤ 4
ln(𝑡) в остальных случаях
167
В рабочий документ введем описание следующей программы-функции
z( t )
3
t
2
t
if t
if
3
3 t 4
ln( t ) otherwise
Заметим, что функция z(t) получит значение ln(t) только тогда, когда не
выполнятся условия, записанные в двух вышестоящих строках.
Обращение к этой программе – функции имеет вид
z(2) = 4
Если в поле 3 ввести оператор без слова otherwise, то этот оператор будет
выполняться всегда вне зависимости от выполнения выше заданных условных
операторов.
Программирование в программе-функции циклических алгоритмов
Напомним, что циклические алгоритмы (или проще циклы) содержат
повторяющиеся вычисления, зависящие от некоторой переменной. Такая
переменная называется параметром цикла, а сами повторяющиеся вычисления
составляют тело цикла.
Классификация циклов. Циклы можно условно разделить на две группы:
 циклы типа арифметической прогрессии;
 итерационные циклы.
Характерной чертой первой группы циклов является то, что количество
повторений тела цикла можно определить до начала выполнения программы,
реализующей цикл, т.е. априори. Классическим примером цикла типа
арифметической прогрессии является цикл примера 3.
Для итерационных циклов нельзя априори определить количество
повторений тела цикла. Это обусловлено тем, что окончание таких циклов
определяется не выходом параметра цикла за конечное значение, а более
сложными условиями. Это иллюстрирует следующий пример.
Пример 4. Вычислить значение x=, используя итерационную процедуру
xn=0.5(xn--1+a/xn-1),
n=1,2,3,.., x0=a.
В качестве приближенного значения корня квадратного берется такое
значение xn, которое удовлетворяет условию
|𝑥𝑛 − 𝑥𝑛−1 | ≤ 𝛦 ,
где – заданная точность вычисления.
Видно, что задав исходные данные, например, a = 9, = 10 -3, нельзя, не
выполняя итерационные вычисления, определить количество повторений тела
цикла.
168
Программирование цикла типа арифметической прогрессии. Для
программирования таких циклов используется оператор цикла for. Для ввода
такого оператора необходимо выполнить следующие действия:
 щелкнуть на кнопке for наборной панели Программирования. На экране
появятся поля ввода, изображенные на рисунке
 в поле ввода 1 введите имя параметра цикла;
 в поле ввода 2 ввести диапазон значений параметра цикла, используя
для этого дискретный аргумент;
 в поле ввода 3 вводятся операторы, составляющие тело цикла. Если
одной строки недостаточно, то дополнительные поля ввода (дополнительные
строки) создаются щелчком на кнопке “add line” в панели программирования и
тогда слева от тела цикла появляется вертикальная черта.
Пример 5. Для x меняющего от -2 до 2 с шагом 0.5 вычислить значение
f(x) = e-x . cos(2x) и сформировать из этих значений вектор y, т. е. y1 = f(-2),
y2 = f(-1.5) и т. д.
В этом примере количество повторений определяется по формуле
𝑥 −𝑥
[ 𝑘 0] + 1 ,
2
где xk , x0 – конечное и начальное значение параметра цикла, d – шаг его
изменения.
Подставив значения, получаем (2 - (-2))/0.5+1=9.
Описание программы-функции имеет вид
form_tab( x0 , xk , d )
i
1
for x  x0 , x0
z
d .. xk
exp( ( x) ) . cos( 2. x)
yi
z
i
i
1
y
В этом варианте описания программы-функции формальные параметры
используются для задания диапазона изменения параметра цикла (переменная
x). Для изменения индекса у элемента массива y вводится переменная i целого
типа внутри программы-функции. Обращение к описанной программе-функции
может иметь вид
z := form_tab (-2,2,0.5)
169
Замечание. Если значение индексов у элементов массива меняется начиная
с 1 (как в этом примере), то начальное значение индекса необходимо установить
равным 1 (для этого обратиться к пункту MATH команде Built-in Variables, а
затем в поле ввода Origin ввести значение 1 (вместо установленного по
умолчанию значения 0).
Программирование итерационных циклов. Для программирования
таких циклов используется оператор цикла while. Для ввода этого оператора
необходимо выполнить следующие действия:
 щелкнуть на кнопке while панели Программирования. На экране
появляются элементы, показанные на рисунке
 в поле 1 ввести условие выполнения цикла;
 в поле 2 ввести операторы тела цикла. В теле цикла должны
присутствовать операторы делающие условие цикла ложным иначе цикл будет
продолжаться бесконечно.
Оператор цикла while выполняется следующим образом: обнаружив
оператор while, MathCAD проверяет указанное условие. Если оно истинно, то
выполняется тело цикла и снова проверяется условие. Если оно ложно, то цикл
заканчивается.
Пример 6. Составить программу-функцию, реализующую итерационную
процедуру приближенного вычисления корня квадратного.
sqroot( a , eps )
xc
1.0e10
xn
a
while abs ( xn
xc
xn
a
xc
xc
xn
xc ) > eps
2
xn
Как видно из текста программы-функции нет необходимости хранить в
памяти все приближенные решения x0, x1, x2 , ... , и т.д. Достаточно хранить
предыдущее (“старое”) значение xc и последующее (“новое”) значение xn.
Обращение к описанной программе будет иметь вид
sqroot(9,0.0001) = 3
170
sqroot(25,0.0001) = 5
sqroot(123,0.0001) = 11.091
К сожалению, организация итерационного цикла с помощью оператора
while, без дополнительных средств контроля может привести к зацикливанию.
Например, задав при обращении к программе eps < 0 получаем зацикливание.
Поэтому в MathCAD имеется специальный оператор break, который
позволяет выйти из цикла или приостановить исполнение программы при
выполнении заданного в операторе break условии. Для ввода оператора break
необходимо щелкнуть на кнопке break панели Программирования (нельзя
вводить этот оператор с клавиатуры по символам). Оператор break используется
в левом поле ввода условного оператор if, а в правом размещается условие, при
выполнении которого происходит прекращение работы цикла или программы, в
нижнем поле – оператор, выполняемый если условие не выполнено. Поэтому
первоначально вводится оператор if , а затем заполняются поля этого оператора.
Следующий пример показывает написание не зацикливающей программы
с оператором break.
Задание
1. Составить программу – функцию, вычисляющую функцию f(x)
2. Пусть задана функция двух аргументов f(x,y). Найти область
определения этой функции. Составить программу – функцию, вычисляющую
функцию f(x,y), таким образом, чтобы значения x и y не выходили за пределы
области определения функции f(x,y).
3. Построить графики функций f(x) и f(x,y).
Варианты задания
1. Составить программу – функцию, вычисляющую функцию y(x).
2. Составить программу – функцию, вычисляющую функцию f(x,y), таким
образом, чтобы значения x и y не выходили за пределы области определения
функции f(x,y).
cos(𝑥) , если 𝑥 < 0
(𝑥 + 2) / (𝑥 2 − 9), если 0 ≤ 𝑥 ≤ 9
30
𝑦=
∑ 2𝑥 /(𝑛 + 1)! , если 9 < 𝑥 < 12
𝑛=1
{
№
варианта
𝑥 5 + √𝑥, если 𝑥 ≥ 12
Задание 1
Задание 2
𝑒 𝑥 , если 0 ≤ 𝑥 ≤ 1
(𝑥 − 1) / (𝑥2 − 4), если 1 < 𝑥 ≤ 4
1
30
𝑦=
∑ 𝑥 / 𝑛𝑛 , если 4 < 𝑥 < 5
𝑛=1
{
𝑥 3 + 1, если 𝑥 ≥ 5
171
f ( x, y )  9 - x 2  y 2
cos(𝑥) , если 𝑥 < 0
(𝑥 + 2) / (𝑥2 − 9), если 0 ≤ 𝑥 ≤ 9
2
30
𝑦=
∑ 2𝑥 /(𝑛 + 1)! , если 9 < 𝑥 < 12
f ( x, y ) 
1
x  y2
2
𝑛=1
𝑥 5 + √𝑥, если 𝑥 ≥ 12
{
tg(𝑥) , если 𝑥 < 0
(𝑥 + 3) / (𝑥2 − 16), если 0 ≤ 𝑥 ≤ 5
3
30
𝑦=
∑ 𝑒 𝑥 / 𝑛! , если 5 < 𝑥 < 10

f ( x, y)  ln x 2  y 2

𝑛=1
√𝑥 + 1, если 𝑥 ≥ 10
{
ctg(𝑥) , если 𝑥 ≤ 1
(𝑥 − 3) / (𝑥2 − 25), если 1 < 𝑥 ≤ 6
4
25
𝑦=
∑ 2𝑥 / 𝑛! , если 6 < 𝑥 < 8
f ( x, y )  16  x 2  y 2
𝑛=1
𝑥 3 + 𝑥 2 , если 𝑥 ≥ 8
{
cos(𝑥 + 1) , если 𝑥 ≤ 1
(𝑥 − 1) / (𝑥2 − 25), если 1 < 𝑥 ≤ 8
5
30
𝑦=
∑ 1/ 2𝑛 , если 8 < 𝑥 < 10
f ( x, y ) 
1
x  y2
2
𝑛=1
𝑥 3 + 5, если 𝑥 ≥ 10
{
(𝑥3 + 𝑥), если 𝑥 ≤ 1
(𝑥 − 2) / (𝑥2 − 36), если 1 < 𝑥 ≤ 10
6
30
𝑦=
𝑛
∑(3𝑛 − 2) / 3 , если 10 < 𝑥 < 20
𝑛=1

f ( x, y)  ln x 2  y 2

𝑥 + sin(𝑥), если 𝑥 ≥ 20
{
cos (√𝑥 + 1) , если − 1 ≤ 𝑥 ≤ 6
(𝑥 + 4) / (𝑥2 − 49), если 6 < 𝑥 ≤ 10
7
32
𝑦=
𝑛
∑ 𝑛! / 3𝑛 , если 10 < 𝑥 < 20
f ( x, y ) 
1
1 x  y2
2
𝑛=1
𝑥 3 + 𝑥 2 , если 𝑥 ≥ 20
{
𝑥3 + sin(𝑥) , если 𝑥 ≤ −1
(𝑥 + 4) / sin(𝑥), если − 1 < 𝑥 ≤ 10
8
25
𝑦=
𝑛
∑ 𝑛! / (3𝑛) , если 10 < 𝑥 < 20
𝑛=1
{
𝑥 3 + √𝑥, если 𝑥 ≥ 20
172

f ( x, y)  ln 1  x 2  y 2

2𝑥 + 3√𝑥, если 𝑥 ≤ −1
(𝑥 + 5) / sin(𝑥), если − 1 < 𝑥 ≤ 5
9
20
𝑦=
∑ 𝑛! / 𝑛𝑛 , если 5 < 𝑥 < 10
f ( x, y ) 
𝑛=1
1
ln x  y 2 
2
𝑥 3 + 𝑒 𝑥 , если 𝑥 ≥ 10
{
1 + ex , если 𝑥 ≤ −1
(𝑥 2 − 1) / sin(𝑥), если − 1 < 𝑥 ≤ 5
10
20
𝑦=
∑ 4𝑛 / 3𝑛 , если 5 < 𝑥 < 10
f ( x, y ) 
𝑛=1
1
ln 1  x 2  y 2 
1 / 𝑥, если 𝑥 ≥ 10
{
1 / (ex − 1), если 𝑥 ≤ 2
cos(𝑥) + sin(𝑥), если 2 < 𝑥 ≤ 10
11
20
𝑦=
∑ 3𝑛 / (𝑛 + 1)! , если 10 < 𝑥 < 20
f ( x, y ) 
𝑛=1
1
ln x  y 
𝑥 3 + 10, если 𝑥 ≥ 20
{
tg(𝑥) + 𝑐𝑡𝑔(𝑥 + 2) , если 𝑥 ≤ −1
1 / sin(𝑥), если − 1 < 𝑥 ≤ 2
12
20
𝑦=
∑ 𝑒 𝑛 / (𝑛 + 1)! , если 2 < 𝑥 < 10
f ( x, y ) 
𝑛=1
1
9 - x2  y2
𝑥 3 + 𝑥 2 + 1, если 𝑥 ≥ 10
{
𝑒𝑥+1 , если 𝑥 ≤ 0
20
13
∑ 𝑥/ 3𝑛 , если 1 < 𝑥 ≤ 8
𝑦=
𝑛=1
f ( x, y ) 
𝑥 / (𝑥 − 10) , если 8 < 𝑥 < 12
{
𝑥 3 + 𝑥, если 𝑥 ≥ 12
1
ln x  y 
𝑒𝑥 + 𝑥, если 𝑥 ≤ 0
(𝑥 − 13) / (x 2 − 1), если 0 < 𝑥 ≤ 2
14
20
𝑦=
∑ 𝑥/ 3(𝑛+2) , если 2 < 𝑥 < 10
f ( x, y ) 
1
ln  x  y 
f ( x, y ) 
1
ln  x  y 
𝑛=1
𝑥 3 + 𝑥 + 1, если 𝑥 ≥ 10
{
3
√𝑥 − 1, если 𝑥 ≤ −2
𝑒𝑥+1 , если − 2
< 𝑥 ≤ −1
𝑦 = 1 / (e − 1) , если − 1 < 𝑥 < 8
x
15
20
∑ 𝑛! / (2𝑛)𝑛 , если 𝑥 ≥ 8
{
𝑛=1
173
Технология выполнения работы
В данной работе необходимо составить программы – функции, для
вычисления значений функций y(x) и f(x,y), используя панель Programming, а
так же применяя методики описанные выше.
Содержание отчета
1. Задание и цель работы.
2. Выполненные расчеты.
Вопросы для защиты работы
1. Как ввести программу-функцию в Mathcad?
2. Что такое формальные параметры программы - функции?
3. Каким образом происходит обращение к программе – функции в
Mathcad?
4. Что такое условный оператор в Mathcad и как его использовать?
5. Что такое цикл типа арифметической прогрессии в Mathcad и как его
использовать?
174
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Бобровский, С. Delphi 7. Учебный курс / С. Бобровский – СПб.: Питер,
2008. – 736 с.
2. Воскобойников Ю.Е. Основы работы в пакете MathCAD: учеб. пособие
/ Ю.Е. Воскобойников, А.Ф. Задорожный. – Новосибирск: НГАСУ (Сибстрин),
2006. – 138 с.
3. Гарнаев, А. Microsoft Office Excel 2010. Разработка приложений /
А. Гарнаев, Л. Рудикова. – СПб.: БХВ-Петербург, 2011. – 514 с.
4. Дьяконов, В.П. Справочник по MathCAD 12 / В.П. Дьяконов. – М.: СК
Пресс, 2006. – 336 с.
5. Дьяконов, В.П. MathCAD14 в математике, физике и в Internet /
В.П. Дьяконов, И.В. Абраменкова. – М.: Изд-во Нолидж, 2008. – 352 с.
6. Информатика [Текст]: учеб. пособие. Ч. 3 / С.М. Горбенко, С.Ю. Кацко,
Н.П. Артемьева, С.А. Егорова, Н.В. Деева, С.А. Вдовин; под общ. ред.
С.Ю. Кацко. – Новосибирск: СГГА, 2011. – 168 с.
7. Кирьянов, Д. Mathcad 14 / Д. Кирьянов. – СПб.: БХВ-Петербург, 2007. –
704 с.
8. Кузьменко, В.Г. Visual Basic 6 / В.Г. Кузьменко. – М.: Бином-Пресс,
2011. – 672 с.
9. Культин, Н. Delphi в задачах и примерах / Н. Культин. – СПб, 2007.
10. Могилев, А.В. Практикум по информатике [Текст] / А.В. Могилев,
Н.И. Пак, Е.К. Хеннер. – М.: Академия, 2009. – 608 с.
11. Павловская, Т.А. С/С++. Структурное и объектно-ориентированное
программирование. Практикум / Т.А. Павловская, Ю.А. Щупак. – СПб.: Питер,
2011. – 352 с.
12. Сайлер, Брайан. Использование Visual Basic 6. Классическое издание /
Б. Сайлер, Дж. Споттс. – М.: Издательство «Вильямс», 2007. – 832 с.
13. Сырецкий Г.А. Информатика. Фундаментальный курс. Том II.
Информационные технологии и системы / Г.А. Сырецкий. – СПб.: БХВ Петербург, 2007. – 848 с.
14. Фаронов, В. Delphi. Программирование на языке высокого уровня /
В. Фарафонов. – Санкт-Петербург, 2006.
15. Хомоненко, А. Delphi 7. Наиболее полное руководство / А. Хомоненко,
В. Гофман, Е. Мещеряков, В. Никифоров. – СПб.: BHV – Санкт-Петербург,
2006. – 1216 с.
175
Download