Алгоритмизация и программирование. Учебное пособие для студентов направления подготовки 09.03.02 Информационные системы и технологии
.pdf
Задача 8. Напишите программу определения максимума двух чисел.
Математическая модель и описание алгоритма решения. Пользователю предлагается ввести два вещественных числа и /. Сравнивая эти числа, на экран выводится максимум из двух чисел.
Текст программы к задаче 8.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main ()
{
float x, y;
printf(" Enter value x="); scanf("%f", &x); printf(" Enter value y="); scanf("%f", &y);
if (x>y)
printf(" The maximum is %f", x);
else
printf(" The maximum is %f", y);
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 32.
Рис 32. Программный код задачи 8
Результат реализации программы на рис. 33 для двух вариантов ввода данных:
51
Рис 33. Результат решения задачи 8
Задача 9. Вычислите значения функции
?( ) = √ @AB.
@7
Математическая модель и описание алгоритма решения. Пользователю предлагается ввести аргумент . На экран выводится значение функции, вычисленное по предложенной в условии формуле.
Обратите внимание, что ОДЗ функции (−∞; −3]. Это необходимо учитывать при описании различных случаев для . В случае, когда не принадлежит ОДЗ, программа должна выдать сообщение: «This value is not within the range of acceptable values».
Текст программы к задаче 9.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main ()
{
float x, f;
printf(" Enter value x="); scanf("%f", &x);
if (x<=-3 || x==0)
printf(" This x value is not within the range of acceptable values");
else
{
f=sqrt(2*x+6)/pow(x,2);
printf(" Function value f(%f)=%f", x, f);
}
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 34.
52
Рис 34. Программный код задачи 9
Результат реализации программы на рис. 35 для двух вариантов ввода данных:
Рис 35. Результат решения задачи 9
Задача 10. Вычислите значения функции |
≤ −2, |
+ 4, |
|
?( ) = E − 1, −2 ≤ ≤ 3,J |
|
ln , |
> 3. |
(Тест. Провести проверку для = −4, = 0, = 5)
Математическая модель и описание алгоритма решения. Пользователю предлагается ввести аргумент . На экран выводится значение функции, вычисленное по предложенной в условии формуле, с учетом принадлежности к соответствующему интервалу.
Подставляя тестовые значения аргумента, получаем:
– в случае = −4 значение функции ?(−4) = J + 4|@L M = 0;
– в случае = 0 значение функции ?(0) = J − 1|@L4 = −1;
– в случае = 5 значение функции ?(5) = Jln |@LN = 1,61.
Для решения задачи используется условный оператор, который проверяет значения в соответствие с интервалами в области определения.
53
Текст программы к задаче 10.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main ()
{
float x, f;
printf(" Enter value x="); scanf("%f", &x);
if (x<=-2)
f = x+4;
else
{
if (x>3) f=log(x);
else
f = pow(x,2) - 1;
}
printf(" Function value f(%f)=%f", x, f);
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 36.
Рис 36. Программный код задачи 10
54
Результат реализации программы:
– в случае = −4 (рис. 37)
Рис 37. Результат решения задачи 10
– в случае = 0 (рис. 38)
Рис 38. Результат решения задачи 10
– в случае = 5 (рис. 39)
Рис 39. Результат решения задачи 10
§ 2. Оператор множественного выбора (переключатель) switch.
В предыдущем примере для решения задачи пришлось использовать два, вложенных друг в друга, оператора if… else. Задача, в которой необходимо выбрать один вариант из нескольких, может быть решена проще с использованием оператора выбора (переключателя) switch. Данный оператор выполняется так. Заданное или полученное выражение (число или символ) сравнивается со списком констант:
<константа_1>, <константа_2>, …, <константа_n>. Структура оператора выбора:
switch (<выражение>)
{
case<константа_1>: <оператор_1>; break; case<константа_2>: <оператор_2>; break;
…
case<константа_n>: <оператор_n>; break;
55
[default: <оператор_n+1>; break;]
}
Блок-схема оператора выбора приведена на рис. 40.
<константа_1> |
+ |
Оператор_1 |
|
break |
|
|
|||
– |
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
<константа_2> |
Оператор_2 |
|
break |
|
|
|
|||
|
|
|
|
|
–
…
<константа_n> |
+ |
|
Оператор_n |
|
break |
||
|
|
|
|
||||
– |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Оператор_n+1 |
|
|
break |
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 40 Блок-схема оператора выбора
Вструктуре оператора <выражение> относится к целому типу; константы, стоящие после case, совместимы по типу с <выражением> и обязательно должны отличаться друг от друга.
Вслучае совпадения с одним из вариантов выполняется дальнейший вычислительный процесс по выбранной ветке. Если <выражение> не совпало ни с одной из констант, будет выполняться ветвь, помеченная оператором default. Если этой ветви нет, выполнение переходит к оператору, следующему за switch.
56
Внутри переключателя switch оператор break переводит к оператору, следующим за switch, т.е. с помощью него происходит выход из переключателя. Если break отсутствует, то после текущего раздела case будет выполняться следующий раздел case или default.
Задача 11. Опишите выбор арифметического действия для чисел и /. Математическая модель и описание алгоритма решения. Пользователю предлагается
выбрать одно из четырех арифметических действий («+», «–», «*», «/»). Если вводимый символ отличается от предложенных, то программа должна выдать сообщение: «You made the wrong choice. Start again».
Обратите внимание, что в примере не выполняются арифметические действия, а только выбирается вид операции.
Текст программы к задаче 11.
--------------------------------------------------------------------------------------------------
#include <stdio.h> #include <math.h>
int main ()
{
char ZNAC;
printf(" Choose one of four arithmetic operations: "); scanf("%c", &ZNAC);
switch (ZNAC)
{
case '+': printf(" x = y + z"); break; case '-': printf(" x = y - z"); break; case '*': printf(" x = y * z"); break; case '/': printf(" x = y / z"); break;
default: printf("You made the wrong choice. Start again");
break;
}
return 0;
}
--------------------------------------------------------------------------------------------------
В компиляторе языка С++ этот компьютерный код представлен на рис. 41.
57
Рис 41. Программный код задачи 11
Пользователю предлагается ввести символ арифметического действия (рис. 42).
Рис 42. Введение символа при решении задачи 11
Результат реализации программы:
– в случае выбора арифметического действия «+» (рис. 43)
Рис 43. Результат решения задачи 11
– в случае выбора арифметического действия «$» (рис. 44)
Рис 44. Результат решения задачи 11
58
Задача 12. В игре «Поле чудес» игроку предлагают пять шкатулок. Одна из них пустая, а в остальных четырёх находится определённая сумма денег:
100 руб., |
5000 руб., |
1000 руб., |
500 руб. |
Составьте программу, которая по выбранному номеру шкатулки определяет выигрыш / не выигрыш.
Математическая модель и описание алгоритма решения. Пользователю предлагается выбрать номер от 1 до 5. К каждому номеру шкатулки закреплена определённая сумма денег (для данной программы это соответствие постоянно):
•в 1ой шкатулке – 100 руб.,
•во 2ой – 5000 руб.,
•в 3ей – 1000 руб.,
•в 4ой – 0 руб.,
•в 5ой – 500 руб.
Если выбранный номер выходит за интервал предложенных номеров, то программа должна выдать сообщение: «There is no such number». После правильного выбора номера шкатулки появляется сообщение о сумме выигрыша.
Текст программы к задаче 12.
--------------------------------------------------------------------------------------------------
#include <iostream> using namespace std;
int main()
{
int s1 = 100, s2 = 5000, s3 = 1000, s4 = 0, s5 = 500, N; cout<<"\n\n\n Select the box number from 1 to 5:\ "; cin >>N;
// форма записи оператора множественного выбора switch switch (N)
{
case 1: cout << "\n Winning = " << s1 << " rubles \n\n"; break; case 2: cout << "\n Winning = " << s2 << " rubles \n\n"; break; case 3: cout << "\n Winning = " << s3 << " rubles \n\n"; break; case 4: cout << "\n Winning = " << s4 << " rubles \n\n"; break; case 5: cout << "\n Winning = " << s5 << " rubles \n\n"; break; default: cout<<"\n There is no such number \n\n";
}
return 0;
}
--------------------------------------------------------------------------------------------------
59
В компиляторе языка С++ этот компьютерный код представлен на рис. 45.
Рис 45. Программный код задачи 12
Результат реализации программы на рис. 46:
Рис 46. Результат решения задачи 12
Задача 13. Рассмотрим работу простейшего калькулятора, который считывает число, затем знак арифметической операции, а затем другое число, и после этого печатает результат.
Математическая модель и описание алгоритма решения. Пользователю предлагается ввести два числа и знак арифметической операции между ними. В отличие от задачи 11, где арифметическое действие не производится, здесь результатом является значение суммы, разности, произведения или частного введённых чисел.
60
