Время на выполнение работы: 2 часа

Программа исследований:

1. Формализация задачи

2. Составление алгоритма решения

3. Написание программного кода

4. Отладка и тестирование программы

Подготовка к выполнению работы:

1. Изучить материал настоящего руководства и рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка С++, переменные и константы, стандартные типы данных).

2. Практически освоить порядок работы на ПЭВМ в среде программирования Visual C++.

Материалы для подготовки к занятию:

1. Конспект лекций

2. [1] стр. 22-26

3. [2] стр. 48-91

Методические рекомендации

Задача 1. Координаты брошенного под углом тела

Рассмотрим программу, в которой вычисляются координаты тела, брошенного под углом к горизонту. Если телу в начальный момент сообщена скорость v и тело брошено под углом αк горизонту, то зависимость x -координаты от времени t дается соотношением . Для у -координаты закон движения имеет вид , где есть ускорение свободного падения. Время полета тела до падения составляет . В программе вводится значение скорости тела и угол, под которым тело брошено к горизонту. Угол вводится в градусах, поэтому вводимое значение переводится в радианы (умножается на и делится на 180). Далее вычисляется время полета тела, и пользователю предлагается ввести момент времени (не превышающий время полета тела), для которого необходимо рассчитать координаты тела. Эти координаты выводятся на экран. Код программы приведен в листинге 1.

Листинг 1. Тело брошено под углом к горизонту

Для использования встроенных математических функций в блок заголовков включена команда #include <math.h>. Результат выполнения программы может выглядеть следующим образом (жирным шрифтом выделены данные, вводимые пользователем):

В программах такого типа разумнее предусматривать возможность вычисления координат для разных моментов времени. Делается это с помощью условных операторов и операторов цикла.

Задача 2. Средняя скорость движения мотоциклиста

Решим задачу о вычислении средней скорости движения мотоциклиста на участке от пункта А до В через пункт Б, если расстояние между пунктами А и Б составляет , а расстояние между пунктами Б и В равно S2. Время движения мотоциклиста между пунктами А и Б равно , а время движения между пунктами Б и В равно Средняя скорость определяется как Параметры S1, S2, t1 и t2 вводятся пользователем с клавиатуры. Программный код приведен в листинге 2.

Листинг 2. Средняя скорость мотоциклиста

Результат выполнения программы может выглядеть следующим образом:

Выше предполагалось, что расстояние вводится в километрах, а время - в часах.

Задача 3. Высота орбиты спутника

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

При решении этой задачи воспользуемся тем, что сила гравитационного притяжения между Землей и спутником равна где (Нм2/кг2) - универсальная гравитационная постоянная. С другой стороны, эту же силу по второму закону Ньютона можно записать как где есть центростремительное ускорение, а частота связана с периодом Т соотношением . Из этих соотношений получаем , что дает . Соответствующий программный код приведен в листинге 3.

Листинг 3. Высота орбиты спутника

Продолжение листинга 3

Результат выполнения программы может выглядеть следующим образом:

В программе использована встроенная функция pow() для вычисления кубического корня. Первым аргументом функции указывается возводимое в степень выражение, второй ее аргумент - степень, в которую возводится выражение. В данном случае степень равна 1/3. Однако в силу автоматического преобразования типов при вычислении выражения 1/3 используется целочисленное деление, в результате чего получаем 0. Чтобы избежать такой неприятности, во втором аргументе функции pow() использована инструкция (double) для выполнения явного приведения типов.

Обратите внимание на способ ввода больших чисел: они вводятся в формате мантиссы и показателя степени. Например, число (литерал) вводится как 6.672Е-11, а число – как 5.96Е24.

Задача 4. Колебания маятника

Маятник совершает колебания по закону . Частота колебаний известна. Известно также, что в начальный момент координата маятника положительна и в k раз меньше амплитуды А, а в момент времени значение координаты маятника равно . Напишем программу, в которой определяется амплитуда колебаний А.

Амплитуда колебаний определяется из соотношений (что дает . Можно найти точное аналитическое решение, но в данном случае в этом необходимости нет. Сначала по формуле вычисляем начальную фазу , а затем по формуле вычисляем амплитуду А.

Программный код приведен в листинге 4.

Листинг 4. Амплитуда колебаний маятника

//Директивы препроцессора подключить самостоятельно

В программе для вычисления арксинуса использована встроенная функция asin(). Результат выполнения программы может иметь вид:

Задача 5. Комплексные числа

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

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

Листинг 5. Степень комплексного числа

//Директивы препроцессора

В результате выполнения программы получаем, например, следующее:

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

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

Задача 6. Прыгающий мячик

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

Мяч бросают без начальной скорости с высоты h. Мяч, долетая до пола, отбивается (без потери энергии) и подпрыгивает вертикально вверх, затем снова падает на пол, отбивается и т.д. Надо написать программу, которой определяется высота мячика над полом в заданный пользователем момент времени.

Программный код, которым решается эта задача, приведен в листинге 6.

Листинг 6. Прыгающий мячик

// Директивы препроцессора

...

Желающие могут самостоятельно протестировать работу программы. Параметры подобраны так, что до пола мячик долетает за 4 секунды. Такое же время уходит на подъем на максимальную высоту.

При составлении программного кода принята во внимание симметрия задачи. Совершенно очевидно, что для восстановления таких параметров мячика, как высота и скорость, в произвольный момент времени достаточно проследить динамику мячика от начала падения до отбивания от пола. После отбивания от пола до подъема на максимальную высоту (которая совпадает с начальной высотой, с которой бросают мячик) динамика мячика может быть восстановлена, если пустить время в обратном направлении: при отражении от пола мгновенно (такое используется приближение) меняется направление скорости (при этом модуль скорости не меняется). Поэтому, прокрутив картинку в обратном порядке, получим динамику мячика после отбивания от пола. В частности, если при падении мячик пребывал на некоторой высоте в момент времени t (время t отсчитывается от момента бросания мячика), то при движении вверх на этой же высоте мячик будет в момент времени Т — t (здесь время t отсчитывается от момента отбивания мячика от пола, а через Т обозначено время падения мячика).

В программе реализуется следующий алгоритм. Пользователем вводится время (переменная t), для которого необходимо рассчитать положение мячика. Затем в соответствии с формулой командой T = sqrt(2 * h/g) вычисляется время падения мячика до первого отбивания от пола. Время Т - это фактически полупериод движения мячика, поскольку за время 2T мячик оказывается в той же точке с той же скоростью.

Целочисленный параметр n, вычисляемый командой n = (int)t/T, является целой частью от деления времени t на полупериод Т. Если n - число четное, то в момент времени t-n*Т мячик был в том же месте, что и в момент времени t. Однако момент времени t-n*T однозначно попадает в интервал времени, когда мячик падал с начальной высоты до первого удара о пол. Если n - число нечетное, то мячик будет находиться в том же месте, где он находился в момент времени T - (t-n*T). Поэтому в программе переменная t переопределяется с помощью команды t=n%2? T - (t-n*T): t-n*T. Переменной t в качестве значения присваивается результат вычисления тернарного оператора. Проверяемым является условие n%2 - остаток от деления n на 2. Это число, равное 0 или 1. Напомним, что нулевое значение интерпретируется как логическое значение false, а прочие числовые значения (в том числе и 1) - как true. Если остаток от деления равен 1 (n - число нечетное), переменной t в качестве значения присваивается результат выражения T-(t-n*T). B противном случае переменной t присваивается значение t-n*T.

После выполнения тернарного оператора значение переменной t попадает во временной интервал, когда мячик падал первый раз. Высота шарика над полом вычисляется в соответствии с формулой командой x=h-g*t*t/2.

Задача 7. Умножение на два в степени

Рассмотрим простую программу, представленную в листинге 7, в которой введенное пользователем целое число умножается на 2 в целочисленной степени (показатель степени также вводится пользователем). Для выполнения умножения использован оператор побитового сдвига.

Листинг 7. Умножение на два в степени

Результат выполнения программы может выглядеть, например, так:

Для понимания работы программы нужно учесть, что побитовый сдвиг на одну позицию эквивалентен умножению соответствующего числа на 2. Поэтому сдвиг, например, на 4 позиции означает умножение числа на 16 (24 = 16).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: