- •Глава 2 Условия, выбор и циклы
- •Структура условия
- •Структура множественного выбора
- •Конструкция цикла for
- •Цикл с предусловием
- •Цикл с постусловием
- •Типовые примеры
- •Подсчет суммы цифр в числе
- •Анализ четности пары чисел
- •Построение треугольников из отрезков
- •Подсчет по условию
- •Возможность построения прямоугольного треугольника
- •Представление слова с учетом падежа
- •Формирование таблицы стоимости товаров
- •Поиск чисел
- •Анализ чисел
Построение треугольников из отрезков
Требуется написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами X,Y,Z. Программа должна выводить соответствующее текстовое сообщение.
Идея алгоритма заключается в том, что в треугольнике сумма каждой пары сторон должна быть больше третьей стороны. И программно мы должны сравнить сумму каждой пары имеющихся отрезков с третьим отрезком. Если в каком-то случае (из трех) длина одного отрезка будет превышать сумму длин двух других, то, следовательно, и треугольник построить нельзя.
Существуют несколько вариантов написания программы в соответствии с данными условиями. Один из примеров правильной программы представлен в листинге 2.18. Здесь мы ввели переменную Flag, в которую, в случае возможности построения треугольника, заносится значение 1. При этом в начале программы значение этой переменной устанавливается равным нулю. На рис. 2.16 представлена блок-схема алгоритма.

Рис. 2.16. Блок-схема к программе листинга 2.25
Листинг 2.18. Проверка построения треугольника из отрезков
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{
float X,Y,Z;
int Flag;
cout << "Введите целое число X ";
cin >> X;
cout << "/nВведите целое число Y ";
cin >> Y;
cout << "/nВведите целое число Z ";
cin >> Z;
Flag=0;
if ((X + Y) > Z)
{ if ((X + Z) > Y)
{ if ((Y + Z) > X)
Flag=1;
}
}
if (Flag==1)
cout << "треугольник построить можно";
else
cout << "треугольник построить нельзя";
_getch();
}
Можно привести еще один вариант алгоритма, в котором используется логическое умножение. Листинг 2.19 содержит текст программы в новом варианте. В этом случае программа получается проще, и фактически все сводится к проверке сложного условия.
Листинг 2.19. Проверка построения треугольника из отрезков
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{
float X,Y,Z;
int Flag;
cout << "Введите целое число X ";
cin >> X;
cout << "/nВведите целое число Y ";
cin >> Y;
cout << "/nВведите целое число Z ";
cin >> Z;
Flag=0;
if (((X + Y) > Z) && ((X + Z) > Y) && ((Y + Z) > X))
cout << "треугольник построить можно";
else
cout << "треугольник построить нельзя";
_getch();
}
Подсчет по условию
Требуется написать программу, которая бы позволяла вводить оценки учащихся с клавиатуры и подсчитывала отдельно количество сдавших дисциплину (сдавшими считаются те ученики, которые получили оценки не менее 3) и не сдавших дисциплину (тех, кто получил 2).
Программа должна обеспечить последовательный ввод оценок. Признаком завершения данных считается ввод очередного числа вне интервала от двух до пяти. Один из вариантов программы, решающей поставленную задачу, представлен в листинге 2.20. Блок-схема алгоритма отражена на рис. 2.17.

Рис. 2.17. Блок-схема к программе листинга 2.28
Листинг 2.20. Подсчет числа сдавших экзамен и числа не сдавших экзамен
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
void main()
{
int N,M,Otsenka;
N=0;
M=0;
cout << "Введите оценку";
cin >>Otsenka;
while ((Otsenka >= 2) && (Otsenka <= 5))
{
if (Otsenka == 2 )
M=M+1;
else
N=N+1;
cin >>Otsenka;
}
cout << "Число сдавших"<< N <<" Число не сдавших"<<M;
_getch();
}
