§ 2. Организация вычислений
Site: | Профильное обучение |
Course: | Информатика. 10 класс (Повышенный уровень) |
Book: | § 2. Организация вычислений |
Printed by: | Guest user |
Date: | Sunday, 16 February 2025, 12:04 PM |
2.1. Использование математических функций
При вычислениях часто используются различные математические функции (пример 2.1). Эти функции реализованы как встроенные вспомогательные алгоритмы и хранятся в библиотеке cmath. Для подключения этой библиотеки используют команду #include <cmath>. Аргументы функций всегда записываются в скобках. Некоторые из функций приведены в таблице:
(Другие функции можно посмотреть в Приложение к главе 1.) Аргументом функции может быть число, переменная, выражение или другая функция: ceil(10*sin(x)), sqrt(abs(-16)). В примере 2.1 используются математические функции для вычисления модуля, квадратного корня и синуса. |
Пример 2.1. Заданы значения переменных x и y. Вычислить значение выражения: Этапы выполнения задания I. Исходные данные: переменные x, y. II. Результат: переменная b. III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: x, y, b — double. V. Программа:
VI. Тестирование программы. Запустить программу и ввести значения x = 13, y = 7.7. Результат: VI. Правильность вычислений можно проверить на калькуляторе. |
2.2. Решение задач
Пример 2.2. Напишите программу для решения геометрической задачи. Задан квадрат с длиной стороны a. Найти его площадь и длину диагонали. Этапы выполнения задания I. Исходные данные: переменная a (длина стороны). II. Результат: переменные S (площадь) и d (длина диагонали). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: a, s, d — double. Пример 2.3. Напишите программу для решения физической задачи. Стоящий на берегу мальчик бросает в озеро камешек. Точка бросания находится на высоте h над поверхностью воды. Начальная скорость камешка v0 направлена горизонтально. Камешек падает в воду на расстоянии l от берега. Определите модуль начальной скорости камешка и модуль скорости, с которой он вошел в воду. Этапы выполнения задания I. Исходные данные: переменные h и l (высота над поверхностью воды и расстояние от берега). II. Результат: переменные v0 и v (начальная скорость и скорость, с которой камешек вошел в воду). III. Алгоритм решения задачи. 1. Ввод исходных данных. 2. Камешек участвует одновременно в двух движениях: равномерном со скоростью v0 по горизонтали и равноускоренном без начальной скорости по вертикали. В конце полета проекции скорости и координаты камешка будут: vx = v0; t; vy = gt; 3. Начальная скорость вычисляется по формуле 4. Вывод результата. IV. Описание переменных: h, l, g, t, vy, v0, v — double. При написании программ обращайте внимание на форматирование текста программы (пример 2.4). 1. В первой позиции на экране пишут только команды #include <iostream>, #include <cmath>, using namespace std;, int main() и ставят фигурные скобки, а остальные команды пишут со сдвигом на 2—4 позиции вправо. 2. Если в программе несколько частей, то их можно отделить друг от друга пустой строкой. Для автоматического форматирования кода можно воспользоваться командой Format use AStyle из контекстного меню рабочей области (пример 2.5). |
Пример 2.2. V. Программа:
VI. Тестирование программы. Введите значение a = 2. Результат: Проверить правильность вычислений можно на калькуляторе. Пример 2.3. V. Программа:
VI. Тестирование программы: Запустите программу и введите значения h = 1.8 и l = 4.8. Результат должен быть следующим: Проверить правильность вычислений можно на калькуляторе. В программе можно использовать комментарии — текст, который не анализируется при запуске программы на выполнение. Текст после символов // считается комментарием и выделяется серым цветом. В комментариях удобно записывать условие задачи и пояснения к командам. Если для комментариев использовать символы ///, то они выделяются более ярко. Сделать выделенный блок комментарием можно с помощью Crtl+Shift+C, снять комментарий — Crtl+Shift+X, |
2.3. Целочисленный тип данных
Часто при решении задач нужно работать с целыми числами. Для этого в C++ используется тип данных int. С помощью переменных типа можно задавать целые числа из диапазона от –2147483648 до 2147483647. Для этого типа данных определены следующие операции:
В С++ для деления как целых, так и вещественных чисел используется один и тот же знак «/». Будет результат целым или вещественным, зависит от операндов (переменных или чисел, стоящих слева и справа от знака). Если хотя бы один операнд вещественный, то результат будет вещественным. Если оба операнда целые, то и результат будет целым. Операция «%» соответствует операции mod в языке программирования Pascal и используется только для целых чисел. Пример 2.6. Даны два целых числа a и b. Написать программу, которая находит целую часть и остаток от деления a на b. Этапы выполнения задания I. Исходные данные: переменные a и b. II. Результат: переменные c (целочисленное частное) и d (остаток). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: a, b, c, d — int. Значение, которое выдает в качестве результата операция %, может отличаться от математического определения остатка (в математике под остатком понимают неотрицательное число). Если остаток не равен нулю, то знак числа, которое является результатом операции %, определяется знаками операндов (пример 2.7). Если проанализировать данные из таблицы, то можно понять, что При выполнении арифметических операций следует помнить, что сначала операция выполняется в соответствии с типами операндов, а затем происходит преобразование полученного типа к типу результата. Например, пусть в программе записана команда: double x = 16 / 7; Вначале будет выполнено деление 16 на 7 (целочисленное), в результате получим 2. После чего целое значение 2 будет преобразовано к вещественному значению 2.0. Чтобы получить вещественный результат, необходимо, чтобы хотя бы одно число было вещественным. Команду можно записать, например, так: double x = 16. / 7; Если в операторе присваивания используются не константы, а переменные, то необходимо преобразовать выражение так, чтобы действия выполнялись с нужным типом. Например, оператор присваивания double x = a / b; в котором a и b целочисленные переменные, можно записать так: double x = 1. * a / b; Тогда результат операции умножения будет вещественным и деление будет выполняться для вещественных чисел. |
Тип int является базовым целочисленным типом. Другие целочисленные типы можно получать, приписывая к int модификаторы. Различают два типа модификаторов, которые могут менять знаковость или размер. Знаковость: signed — тип будет иметь знаковое представление (используется по умолчанию, если модификатор не указан); unsigned — тип будет иметь беззнаковое представление. Размер: short — тип будет занимать в памяти не меньше 16 бит; long — тип будет иметь размер не меньше 32 бит; long long — тип будет иметь размер не меньше 64 бит. Примеры использования модификаторов:
Если при описании используют модификаторы, то слово int может быть опущено. Следующие описания эквивалентны: Пример 2.6. V. Программа:
IV. Тестирование программы: Запустите программу и введите значения a = 11 и b = 4. Результат должен быть следующим: Пример 2.7. Результат операций div и mod для разных чисел:
В языке С++ допускается явное преобразование типов. Для этого используется команда static_cast<dataType>(value) Здесь — dataType имя типа, к которому нужно преобразовать величину value. В коде программы эта команда используется следующим образом: double x = static_cast<double>(a)/b; Также компилятором С++ поддерживается так называемый Cи-стиль приведения типов данных, когда новый тип указывается в скобках перед именем переменной: double x = (double)a / b; Компилятор C++ также позволяет использовать этот оператор и следующим образом: double x = double(a) / b; Однако такое преобразование считается небезопасным, поскольку компилятор не проверяет выход за границу возможных значений типа. |
2.4. Решение задач
Решение задач
Пример 2.8. Васин таймер показывает время только в секундах. Написать для Васи программу, которая переведет время в минуты и секунды. Этапы выполнения задания I. Исходные данные: переменная с (время в секундах). II. Результат: переменные m (полное количество минут) и s (остаток секунд). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: c, m, s — int. Пример 2.9. Задано трехзначное число. Напишите программу, которая находит среднюю цифру. Этапы выполнения задания I. Исходные данные: переменная а. II. Результат: переменная b (преобразованное число). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: a, b — int. Пример 2.10. В исторической книге, которую читала Таня, длина отреза ткани измерялась в локтях. Написать программу, которая переведет локти в метры и сантиметры. Этапы выполнения задания I. Исходные данные: переменная l (локти). II. Результат: переменные m (метры) и s (сантиметры). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: l, x, m, s — int. Пример 2.11. Написать программу, которая определит полное количество часов и минут, прошедших от начала суток до того момента (в первой половине суток), когда часовая стрелка повернулась на f градусов (0 ≤ f < 360, f — целое число). Этапы выполнения задания I. Исходные данные: переменная f (количество градусов). II. Результат: переменные с (часы) и m (минуты). III. Алгоритм решения задачи. 1. Ввод исходных данных. Описание переменных: f, c, m — int. Пример 2.12. Дано целое число а. Написать программу, которая получит а3 и а10 за четыре операции умножения (другие операции использовать нельзя). Этапы выполнения задания I. Исходные данные: переменная a. II. Результат: переменные a3 (a3) и a10 (a10). III. Алгоритм решения задачи. 1. Ввод исходных данных. а) a2 = a ∙ a (1-е умножение); б) a3 = a2 ∙ a (2-е умножение); в) a5 = a2 ∙ a3 (3-е умножение); г) a10 = a5 ∙ a5 (4-е умножение). 3. Вывод результата. IV. Описание переменных: a, a2, a3, a5, a10 — long long. |
Пример 2.8. V. Программа:
VI. Тестирование программы. Запустите программу и введите значениe c = 137. Результат должен быть следующим: Пример 2.9. V. Программа:
VI. Тестирование программы. Запустите программу и введите значение a = 452. VII. Результат: переменная b (средняя цифра числа). Некоторые старорусские единицы длины: 1 локоть = 45 см, 1 аршин = 16 вершков, 1 вершок = 4 ногтя, 1 ноготь ≈ 11 мм. Пример 2.10. V. Программа:
VI. Тестирование программы: Запустите программу и введите значение l = 7. Результат должен быть следующим: Пример 2.11. V. Программа:
VI. Тестирование программы. Запустите программу и введите значение f = 85. Результат должен быть следующим: Пример 2.12. V. Программа:
VI. Тестирование программы. Запустите программу и введите значения l = 3. Результат должен быть следующим: |
Вопросы к параграфу
![]() |
1. Что понимают под тестированием программы? 2. Для чего можно использовать комментарии? 3. Какой тип данных можно использовать в C++ для работы с целочисленными данными? 4. Какое максимальное значение можно задать переменной типа int? 5. Какие операции определены для целочисленных данных? |
Упражнения
1. Ответьте на вопросы для примера 2.12.
- Почему в программе использован тип long long, а не тип int?
- Введите значение 123. Почему получили отрицательный результат?
- Для какого наибольшего числа программа выдает правильный ответ?
- Что можно изменить в программе, чтобы не получать отрицательные значения?
2. Даны x, y. Напишите программу для вычисления значения арифметического выражения.
1. 2.
3.
3. Напишите программу для решения геометрической задачи.
1. Найти длину окружности и площадь круга заданного радиуса. Значение числа π можно вычислить из равенства:
2. Равнобедренный треугольник задан длинами основания и высоты. Найти его площадь и длину боковой стороны.
3. Вычислить площадь кольца, внутренний радиус которого равен R1, а внешний R2.
4. Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника.
4. Напишите программу для решения физической задачи.
1. Автомобиль проходит первую часть пути длиной S1 км за t1 мин, участок пути длиной S2 км за t2 мин и наконец, участок длиной S3 км за t3 мин. Найдите среднюю скорость автомобиля, выраженную в км/ч.
2. Определите ускорение, вызванное силой тяготения, на высоте h = kRЗ от поверхности Земли (значение k вводится), если на поверхности Земли его модуль g = 9,81 м / с2.
5. Напишите программу для решения химической задачи.
1. В организме человека на долю атомов кислорода приходится 65 % от массы тела. Найдите массу атомов кислорода для своей массы тела.
2⃰. Масса одного атома кислорода 26.56 ∙ 10−27 (это число в программе на языке C++ записывается так: 26.56E–27, буква E — английская). Определите, сколько атомов кислорода содержится в вашем теле.
6. Напишите программы для решения задач. Используйте операции / и %.
1. Задано двузначное число. Найдите среднее арифметическое цифр числа.
2. Задано трехзначное число. Найдите сумму цифр числа.
3. Дана масса в граммах. Переведите ее в килограммы и граммы.
4. Площадь участка измеряется в арах. Найдите количество полных км2.
5. С начала месяца прошло m мин. Определить, какое сейчас число и который сейчас час (в часах и минутах).
7⃰. Для старорусской системы весов известны следующие соотношения:
1 берковец = 10 пудов = 400 фунтов = 38 400 золотников
Напишите программу, которая переводит массу, заданную в золотниках, в фунты, пуды и берковцы.
8. Написать программу, которая определит f — угол (в градусах) между положением часовой стрелки в начале суток и ее положением в h ч m мин (0 ≤ h < 12, 0 ≤ m < 60).
9. От начала суток прошло h полных часов (0 ≤ h < 12). Известно, что сейчас между часовой и минутной стрелками угол в f градусов (0 ≤ f < 360, f — целое число). Сколько сейчас может быть минут?
10. Напишите программы для решения задач.
1. Дано целое число а. Не пользуясь никакими другими арифметическими действиями, кроме умножения, получить а9 за четыре операции.
2. Дано целое число а. Не пользуясь никакими другими арифметическими действиями, кроме умножения, получить а2, а5 и а17 за шесть операций.
3. Дано целое число а. Не пользуясь никакими другими арифметическими действиями, кроме умножения, получить а15 за пять операций.
4. Дано вещественное число х. Не пользуясь никакими другими арифметическими действиями, кроме сложения, вычитания и умножения, вычислить 2х4 – 3х3 + 4х2 – 5х + 6. Разрешается использовать не более 4 умножений и не более 4 сложений и вычитаний.