Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
саня голубев
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 83
#1

Разъясните пожалуйста фрагмент программы - C++

02.10.2013, 03:56. Просмотров 378. Ответов 2
Метки нет (Все метки)

Даны произвольные числа a b c.Написать программу,которая проверяла бы,можно ли построить треугольник с такими длинами сторон, и если можно, то определить вид треугольника по соотношению сторон (равносторонний, равнобедренный, разносторонний) и по соотношению углов( остроугольный ,прямоугольный, тупоугольный). По результатам проверки вывести на экран соответствующее сообщение.
#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
double a,b,c,m,q; int d;
cout<<"3 numbers: "; cin>>a>>b>>c;
m=a>b?a:b; m=m>c?m:c;
if(2*m>=a+b+c)cout<<"impossible\n";
else{
m*=m; q=a*a+b*b+c*c-m;
d=(m>=q)+(m>q);
switch(d){
case 2: cout<<"obtuze\n"; break;
case 1: cout<<"right\n"; break;
case 0: cout<<"acute\n";}}
cin.get(); cin.get();}

Что означает данный фрагмент?
m*=m; q=a*a+b*b+c*c-m;
d=(m>=q)+(m>q);
Почему,когда находят q, то сложив квадраты стороны вычитают m?
Что записывают под переменную d?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2013, 03:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разъясните пожалуйста фрагмент программы (C++):

Помогите пожалуйста записать на С++ фрагмент программы - C++
помогите пожалуйста записать на С++ фрагмент программы) const s:string='0123456789ABCDEF'; c:array of...

Разъясните пожалуйста - C++
int sd(int n, int d = 1) { if(n == 0) { return 0; } else { return d &lt;= n ? (n % d == 0...

Разъясните пожалуйста (классы) - C++
1. Зачем в следующем коде в 1 строке стоит амперсанд? 2. Что значит RHS и когда его использовать? 3. Зачем стоит звездочка в 6 строке...

Разъясните пожалуйста задачу - C++
Вот задача. #include &lt;iostream&gt; using namespace std; const int n=3; struct STRUCT { char fio; int phone; int...

Разъясните пожалуйста некоторые детали... - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #define eof -1 int main() { int c; printf(&quot;Make...

Разъясните что тут написано, ну пожалуйста - C++
Задали лабу - перевод рисунка с форматом BMP из цветного в ч/б изображение, нашёл структурку, но не могу разобраться что она делает......

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Catstail
Модератор
22537 / 10942 / 1774
Регистрация: 12.02.2012
Сообщений: 18,078
02.10.2013, 12:18 #2
C++
1
2
3
4
//Что означает данный фрагмент?
m*=m; // m=m*m;
q=a*a+b*b+c*c-m; // это понятно..
d=(m>=q)+(m>q); // а это уже не вполне... если m>=q, то d=2; если m>q, то d=1, иначе d=0
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
02.10.2013, 12:53 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h" 
#include<iostream> 
using namespace std; 
int main(){ 
double a,b,c,m,q; int d; 
cout<<"3 numbers: "; cin>>a>>b>>c; 
m=a>b?a:b; m=m>c?m:c; 
if(2*m>=a+b+c)cout<<"impossible\n"; 
else{ 
m*=m; q=a*a+b*b+c*c-m; 
d=(m>=q)+(m>q); 
switch(d){ 
case 2: cout<<"obtuze\n"; break; 
case 1: cout<<"right\n"; break; 
case 0: cout<<"acute\n";}} 
cin.get(); cin.get();}
Добавлено через 14 минут
В строке 7 определяется большая сторона треугольника. Есть такая теорема в геометрии, что в любом треугольнике, длина каждой стороны меньше суммы двух других. В строке 8 делается такая проверка, если большая сторона по длине >= сумме двух оставшихся сторон, то треугольник построить нельзя, и выводится соответствующее сообщение на экран.
Иначе соответственно находится квадрат большей стороны, и результат присваивается переменной m.
Переменной q присваивается сумма квадратов всех сторон минус квадрат большей стороны, т.е. в итоге переменная q будет содержать сумму квадратов 2 меньших сторон.

Далее в строке 11, переменной d присваивается результат, зависящий от значения логических выражений:
d равно 2, если квадрат большей стороны больше суммы квадратов двух других сторон, m > q;
d равно 1, если квадрат большей стороны равен сумме квадратов двух других сторон, m == q;
d равно 0, если квадрат большей стороны меньше суммы квадратов двух других сторон, m < q;

Тут нужно опять вспомнить геометрию, а именно теорему косинусов, текст ее приводить не буду, собственно зачем сравниваются квадраты сторон.

В строке 12 в оператор switch передается значение переменной d, ну здесь понятно, если d == 1, тогда сумма квадратов 2 сторон = квадрату большей стороны, т.е. теорема косинусов превращается в теорему Пифагора, т.е. треугольник прямоугольный, 2 остальных случая вытекают опять же из теоремы косинусов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 12:53
Привет! Вот еще темы с ответами:

разъясните,пожалуйста, как это сделать? - C++
Дано целое число N (&gt; 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не...

Разъясните пожалуйста пару строк кода - C++
Программа 1: #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace std; int main() { char...

Объясните, пожалуйста, фрагмент кода - C++
#define NUMLINES((int)(sizeof devcaps / sizeof devcaps )) struct { int iIndex; char *szLabel; char *szDesc; } devcaps = { ...

Составить фрагмент программы - C++
С коментприями, если не трудно


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru