Алгоритмизация и программирование. Учебное пособие для студентов направления подготовки 09.03.02 Информационные системы и технологии
.pdf
Разделителями в потоке ввода служат пробелы, табуляции и разделители строк. Чте-
ние числа прекращается, если встречается первый нечисловой символ, а строки – до первого
разделителя. Функция форматного вывода данных printf() возвращает число выведенных символов или отрицательное значение в случае ошибки. Количество аргументов должно быть равным количеству их спецификаторов.
Приведем пример использования функции ввода/вывода данных.
Задача 3. Введите, а затем выведите на экран три величины: целое и вещественное числа, символ.
(Тест. Провести проверку: целое число 10, вещественное – 5.6 и символ ^=/). Математическая модель и описание алгоритма решения. В данной задаче пользовате-
лю предлагается ввести целое число, вещественное число и символ. После чего, введённые значения необходимо вывести на экран. В решении нет проверки, правильно ли пользователь вводит значения переменных – соответствуют ли они объявленному типу.
С учетом использования директивы #include <stdio.h> программа будет выглядеть следующим образом.
Текст программы к задаче 3.
--------------------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int i; float x; char ch[21]; printf("\n Enter an integer: ");
scanf("%d", &i); |
// ввод целого числа |
printf(" Enter a real number: "); |
|
scanf("%f", &x); |
// ввод вещественного числа |
printf(" Enter a symbol: "); |
|
scanf("%s", &ch); |
// ввод символа |
printf(" Printing numbers and symbols: %d; %f; %s", i, x, ch); // вывод на экран
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 18.
41
Рис 18. Программный код задачи 3 с директивой #include <stdio.h>
Результат реализации программы на рис. 19:
Рис 19. Результат решения задачи 3
В данной задаче использование директивы #include <iostream> упростит запись кода.
Текст программы к задаче 3.
--------------------------------------------------------------------------------------------------
#include <iostream> using namespace std;
int main()
{
int i; float x; char ch[21]; cout << "\n Enter an integer: ";
cin >> i; |
// ввод целого числа |
cout << " Enter a real number: "; |
|
cin >> x; |
// ввод вещественного числа |
cout << " Enter a symbol: "; |
|
cin >> ch; |
// ввод символа |
cout << " Printing numbers and symbols: " << i << " " << x << " " << ch; // вывод
return 0;
}
--------------------------------------------------------------------------------------------------
42
В компиляторе языка С++ этот компьютерный код представлен на рис. 20.
Рис 20. Программный код задачи 3 с директивой #include <iostream>
Результат реализации программы на рис. 21:
Рис 21. Результат решения задачи 2
Рис 21. Результат решения задачи 3
Приведем ещё один пример использования функции ввода/вывода данных.
В данной задаче использование директивы #include <iostream> предпочтительнее для записи компьютерного кода, чем директива #include <stdio.h>.
Задача 4. Вычислите возраст по году рождения.
Математическая модель и описание алгоритма решения. В данной задаче пользователю предлагается ввести год его рождения, а затем текущий год. Искомый возраст получается результатом разности текущего года и введённого года рождения пользователя.
Полученный результат необходимо вывести на экран.
Обратите внимание, в решении данной задачи не учитывается месяц рождения, а возраст определяется только по годам. Для того чтобы учесть ещё месяц и день текущей даты и даты рождения, необходимо составлять более сложный алгоритм, содержащий условный оператор, о котором будет рассказано в следующей главе.
43
Текст программы к задаче 4.
--------------------------------------------------------------------------------------------------
#include <iostream> using namespace std;
int main()
{
int x, y, z;
cout << "\n Enter your year of birth: "; cin >> x;
cout << "\n Enter current year: "; cin >> y;
z = y - x;
cout << "\n Your age: " << z;
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 22.
Рис 22. Программный код задачи 4
Результат реализации программы на рис. 23:
Рис 23. Результат решения задачи 4
44
§ 3. Стандартные математические функции.
Стандартные математические функции существуют для облегчения программирования математических вычислений; функции работают со значениями, представленными в форме с фиксированной и плавающей точкой. Основные математические функции объявлены в include-файле <math.h> или<stdlib.h>. Приведем перечень наиболее часто применяемых математических функций в языке программирования С++:
•abs(x) – вычисляет абсолютное значение x (аргумент целого типа);
•asin(x), acos(x), atan(x) – вычисляет arcsin x, arccos xили arctg x (результат в радианах);
•atan2(y,x) – вычисляет arctg(y/x) (результат в радианах);
•ceil(x) – находит целую часть x;
•sin(x), cos(x) – вычисляет sin x или cos x (аргумент в радианах);
•tan(x) – вычисляет tg x (аргумент в радианах);
•exp(x) – вычисляет экспоненциальную функцию;
•fabs(x) – вычисляет абсолютное значение x (аргумент вещественный);
•floor(x) – находит наибольшее целое, которое меньше или равно x;
•fmod(x,y) – находит остаток (с плавающей точкой) от деления x на у;
•log(x) – вычисляет натуральный логарифм х;
•log10(x) – вычисляет десятичный логарифм х;
•modf(x,&n) – разделяет х на целую (n), дробную (возвращаемое значение) части;
•pow(x,y) – вычисляет х в степени y;
•pow10(x) – вычисляет 10 в степени x;
•sqrt(x) – находит квадратный корень из х.
Функции консольного ввода/вывода объявляются в include-файле <conio.h>:
•cgets() (или cputs()) – читает строку с консоли (или записывает на консоль);
•getch() (или putch()) – читает символ с консоли (или записывает на консоль).
Далее приведем примеры программ, в которых используются математические функ-
ции.
Задача 5. Вычислите гипотенузу в прямоугольном треугольнике по теореме Пифаго-
ра.
Математическая модель и описание алгоритма решения. В данной задаче катеты ,
45
прямоугольного треугольника вводятся пользователем, а переменная объявляется и вычис-
ляется по теореме Пифагора
= √ + ,
а затем выводится на экран.
Тип переменных , и с, используемых в задаче, – вещественные.
Текст программы к задаче 5.
--------------------------------------------------------------------------------------------------
#include <iostream> using namespace std; #include <math.h>
int main()
{
float a, b, c;
cout << "\n Enter the legs of the triangle (separated by a space): "; cin >> a >> b;
c = sqrt(pow(a,2) + pow(b,2));
cout << "\n The hypotenuse of a triangle is equal to " << c;
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 24.
Рис 24. Программный код задачи 5
Результат реализации программы на рис. 25:
46
Рис 25. Результат решения задачи 5
Задача 6. Переведите время в секунды.
(Тест. Провести проверку: 25 часов 31 минута 11 секунд).
Математическая модель и описание алгоритма решения. Пользователю предлагают вести время в формате: часы минуты секунды. После чего на экран выводится время в секундах.
Проверяем решение задачи на тестовых значениях. Вычисляем время в секундах для 25 часов 31 минуты 11 секунд. Необходимо перевести часы и минуты в секунды и прибавить
к заданным секундам:
∙ 3600 + ∙ 60 + ,
подставляем значения для = 25, = 60, = 11:
25 ∙ 3600 + 31 ∙ 60 + 11 = 91871 (сек.)
Текст программы к задаче 6.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main()
{
int a, b, c;
printf(" Enter hours "); scanf("%d", &a); printf(" Enter minutes "); scanf("%d", &b); printf(" Enter seconds "); scanf("%d", &c);
c += a * 3600 + b * 60;
printf(" Total number of seconds %d", c);
return 0;
}
--------------------------------------------------------------------------------------------------
47
В компиляторе языка С++ этот компьютерный код представлен на рис. 26.
Рис 26. Программный код задачи 6
Результат реализации программы на рис. 27:
Рис 27. Результат решения задачи 6
Задача 7. Вычислите значения функции двух переменных
по значениям её аргументов и /. ? = ( + /) − − / (Тест. Провести проверку: = 25, / = 3).
Математическая модель и описание алгоритма решения. Пользователю предлагают вести значения переменных и /. После чего на экран выводится значение функции, вычисленное по предложенной в условии формуле.
Проведём проверку выполнения программы на тестовых значениях.
Если ввести значения: = 25, / = 3, то функция
? = (25 + 3) − 25 − 3 = 784 − 625 − 9 = 150.
48
Текст программы к задаче 7.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main ()
{
float x, y, f;
printf(" Enter value x="); scanf("%f", &x);
printf(" Enter value y="); scanf("%f", &y);
f = pow((x+y), 2)-pow(x,2)-pow(y,2); printf("%f", f);
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 28.
Рис 28. Программный код задачи 7
Результат реализации программы на рис. 29:
Рис 29. Результат решения задачи 7
49
Глава 5. УСЛОВНЫЕ КОНСТРУКЦИИ
§ 1. Условный оператор if.
Условный оператор if используется в случае разветвления процесса вычислений на два направления. Он работает по принципу: проверяется некоторое условие и, в зависимости от результата проверки, выполняется то или иное действие.
Оператор if может быть использован в сокращенной или полной форме (табл. 6).
Табл. 6 Формы условного оператора if
Сокращенная форма |
Полная форма |
|
|
|
If (<условие>) |
If (<условие>) |
<оператор_1>; |
<оператор_1>; |
else |
|
<оператор_2>; |
Блок-схема сокращенной формы условного оператора приведена на рис. 30, полной – на рис. 31.
<условие> |
+ |
|
|
– |
<условие> |
+ |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
||
– |
|
|
|
|
|
|
|
|
|
|
Оператор_2 |
|
Оператор_1 |
||||
|
|
Оператор_1 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 30 Сокращенная форма
Рис. 31 Полная форма
В структуре оператора <условие> – это логическое выражение. Если оно истинно (равно 1), то переходим к <оператору_1>, стоящему после условия. Если условие ложно (равно 0), то в сокращенном варианте переходим к оператору, следующему за условным оператором, а в полном – вначале к <оператору_2>, стоящему после else, а затем продолжаем выполнять действия, описанные после условного оператора.
Обратите внимание, если необходимо выполнить несколько операторов, то такую группу заключают в фигурные скобки ({ }).
50
