Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Операторы управления
3.5 Решение задач с использованием циклов
Рассмотрим использование циклических операторов на конкретных примерах.
Задача 3.10. Написать программу решения квадратного уравнения . Предусмотреть проверку ввода данных.
Решение квадратного уравнения было подробно рассмотрено в задаче 3.4. Однако алгоритм, изображённый на рис. 3.15, не будет работать, если пользователь введёт нулевое значение в переменную a (при попытке вычислить корни уравнения произойдёт деление на ноль). Чтобы избежать подобной ошибки нужно в программе предусмотреть проверку входных данных, например, так как показано на рис. 3.24. Вводится значение переменной a, если оно равно нулю, то ввод повторяется, иначе следует алгоритм вычисления корней квадратного уравнения. Здесь применяется цикл с постусловием, так как значение переменной необходимо ввести, а затем проверить его на равенство нулю.
Программа решения задачи:
#include <iostream> #include <math.h> using namespace std; int main ( ) { float a, b, c, d, x1, x2; //Проверка ввода значения коэффициента a . do //Выполнять тело цикла пока а равно нулю { cout<<" a = "; cin >>a; } while ( a==0); cout<<" b = "; cin >>b; cout<<" c = "; cin >>c; d=b* b-4*a*c; if (d<0) cout<<" Нет вещественных корней"; else { x1=( -b+sqrt (d) ) /2/a; x2=( -b- sqrt (d) ) /(2 *a ); cout<<" X1 = "<<x1<<" \t X2 = "<<x2<<" \n "; } return 0; }
Задача 3.11. Найти наибольший общий делитель (НОД) натуральных чисел и .
Входные данные: и .
Выходные данные: — НОД.
Для решения поставленной задачи воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными, так, как показано в табл. 3.2.
Шаг | A | B |
---|---|---|
Исходные данные | 25 | 15 |
Шаг 1 | 10 | 15 |
Шаг 2 | 10 | 5 |
Шаг 3, НОД | 5 | 5 |
В блок–схеме, представленной на рис. 3.25, для решения поставленной задачи используется цикл с предусловием, то есть тело цикла повторяется до тех пор, пока не равно . Следовательно, при создании программы воспользуемся циклом while:
#include <iostream> using namespace std; int main ( ) { unsigned int a, b; cout<<" A = "; cin>>a; cout<<" B = "; cin>>b; //Если числа не равны, выполнять тело цикла while ( a!=b) //Если число A больше, чем B, то уменьшить его значение на B, if ( a>b) a=a-b; //иначе уменьшить значение числа B на A else b=b-a; cout<<" НОД= "<<a<<" \n "; return 0; }
Результат работы программы не изменится, если для её решения воспользоваться циклом с постусловием do...while:
#include <iostream> using namespace std; int main ( ) { unsigned int a, b; cout<<" A = "; cin >>a; cout<<" B = "; cin >>b; do if ( a>b ) a=a-b; else b=b-a; while ( a !=b ); cout<<" НОД= "<<a<<" \n "; return 0; }