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

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

Восстановить пароль Регистрация
 
саня голубев
1 / 1 / 0
Регистрация: 13.10.2012
Сообщений: 83
02.10.2013, 03:56     Разъясните пожалуйста фрагмент программы #1
Даны произвольные числа 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++
разъясните,пожалуйста, как это сделать? C++
C++ Разъясните пожалуйста (классы)
Разъясните что тут написано, ну пожалуйста C++
Разъясните пожалуйста C++
Объяснить фрагмент программы C++
Объясните, пожалуйста, фрагмент кода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
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
 Аватар для 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 остальных случая вытекают опять же из теоремы косинусов.
Yandex
Объявления
02.10.2013, 12:53     Разъясните пожалуйста фрагмент программы
Ответ Создать тему
Опции темы

Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru