Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2012, 18:52   #1
Heles
Пользователь
 
Регистрация: 17.09.2011
Сообщений: 21
По умолчанию Существует ли треугольник. C++

Суть проблемы:
1. Если существует треугольник, то найти его площадь. Допустим, треугольник существует. Я хочу в программе задать вопрос "Вычислить площадь?" + "yes/no"
пользователь должен ввести либо yes либо no. Возможно ли это провернуть такое, не касаясь типа данных char?
2. Тут уже проблема математическая. Всем известно, что, если сумма двух сторон больше третьей - то треугольник существует. А если задать такие данные: a = 10, b = 9, c = 3. То тут видим, что по правилу треугольник существует, но нарисовать то его невозможно. Может я правило попутал?
Ну и сам код, который написал(формулу площади стандартного треугольника взял):
Код:
int main()
{
	int a, b, c, h, text;
        double S;
	cout << "Enter a: ";
	cin >> a;
	cout << "Enter b: ";
	cin >> b;
	cout << "Enter c: ";
	cin >> c;
	cout << "\n";
	if ((a + b) > c)
		if ((a + c) > b)
			if ((b + c) > a)
				cout << "suchestvuet\n";
	else cout << "ne suchestvuet\n";
	{
		cout << "Vichislit' S? " << "1 - yes. 0 - no.\n";
		cin >> text;
		if (text == 1)
		{
			cout << "Enter h: ";
			cin >> h;
			S = a * h * 0.5;
			cout << "S = " << S << endl;
		}
		else 
			cout << "Exit" << endl;
	}
			
	return 0;
}
Heles вне форума Ответить с цитированием
Старый 27.09.2012, 19:39   #2
kuli4ok
Пользователь
 
Регистрация: 23.09.2012
Сообщений: 32
По умолчанию

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
int a, b, c, gip, kat1, kat2;
cin >> a >> b >> c;
if (a>b)
{
if (a>c)
{
gip=a;
kat1=c;
kat2=b;
}
else
{
gip=c;
kat1=b;
kat2=a;
}
}
else
{
if (b>c)
{
gip=b;
kat1=a;
kat2=c;
}
else
{
gip=c;
kat1=a;
kat2=b;
}
}
if (gip>(kat1+kat2))
{
cout << "Не существует"<< "\n";
system("pause");
return 0;
}
else
{
int choose;
cout << "Вычислить S?(1-yes/0-no)";
cin >> choose;
if (choose!=1)
{
return 0;
}
else
{
cout << "Enter H (Проведенную к большей стороне) ";
int h;
cin >> h;
double s;
s= 0.5*h*gip;
cout << "S="<< s << "\n";
system("pause");
}
}
return 0;
}


как то так
Я помог вам? Помогите и вы мне:
WMZ: Z401849412998
WMR: R251473869576

Последний раз редактировалось kuli4ok; 27.09.2012 в 19:41.
kuli4ok вне форума Ответить с цитированием
Старый 27.09.2012, 19:49   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Во-первых, a = 10, b = 9, c = 3 спокойно рисуется:
Рисуем 10 см отрезок
2 окружности с центрами в концах отрезка с радиусами 3 и 9
Точки пересечения окружностей образуют с концами отрезка 2 равных треугольника.
Не знаю, насколько способ kuli4ok определения существования лучше, написал бы:
Код:
if (a + b > c && a + c > b && b + c > a) {
    cout << "suchestvuet\n";
    //вопрос про подсчет площади
} else {
    cout << "ne suchestvuet\n";
}
Конечный вариант:
Код:
#include <iostream>
#include <math.h>
using namespace std;

int
main()
{
    int a, b, c;
    cout << "Enter a, b, c: ";
    cin >> a >> b >> c;
    if (a + b > c && a + c > b && b + c > a) {
        cout << "suchestvuet" << endl;
        string answer;
        cout << "Vichislit' S? (yes/no)" << endl;
        cin >> answer;
        if (answer == "yes") {
            double p = (double) (a + b + c) / 2;
            double s = sqrt(p * (p - a) * (p - b) * (p - c));
            cout << "S = " << s << endl;
        } else if (answer != "no") {
            cout << "vi vveli chysh =)" << endl;
        }
    } else {
        cout << "ne suchestvuet" << endl;
    }
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.09.2012 в 20:04.
BDA на форуме Ответить с цитированием
Старый 27.09.2012, 20:10   #4
Heles
Пользователь
 
Регистрация: 17.09.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, a = 10, b = 9, c = 3 спокойно рисуется:
Не знаю, насколько способ kuli4ok определения существования лучше, написал бы:
Код:
if (a + b > c && a + c > b && b + c > a) {
    cout << "suchestvuet\n";
    //вопрос про подсчет площади
} else {
    cout << "ne suchestvuet\n";
}
Да, этот способ гораздо компактнее. Спасибо.
Сейчас столкнулся с другой проблемой.
Я хочу определить площадь для разных треугольников, если пользователь введет нужные стороны.
если я ввожу стороны a = 5 b = 5 c = 4 - у меня пишет равносторонний треугольник. В любых случаях пишет. Алгоритм наверно неправильный, посмотрите:
Код:
{
		cout << "Vichislit' S? " << "1 - yes. 0 - no\n";
		cin >> text;
		if (text == 1)
		{
			if ((a = b) && (b = c))
			{
				cout << "Enter h: ";
				cin >> h;
				S = 0.5 * a * h;
				cout << "S ravnostoronnego treugol'nika = " << S << endl;
			}
			else
			if ((a*a + b*b - c*c) == 0)
			{
				S = a * b * 0.5;
				cout << "S pryamougol'nogo treugol'nika = " << S << endl;
			}
			else
			if (((a = b) != c) || ((b = c) != a) || ((a = c) != b))
			{
				cout << "Enter h: ";
				cin >> h;
				S = 0.5 * h * b;
				cout << "S ravnobedrennogo treugol'nika = " << S << endl;
			}
		}
		else  cout << "Exit" << endl;
	}
Heles вне форума Ответить с цитированием
Старый 27.09.2012, 21:23   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <iostream>
#include <math.h>
using namespace std;

int
main()
{
    int a, b, c;
    cout << "Enter a, b, c: ";
    cin >> a >> b >> c;
    if (a + b > c && a + c > b && b + c > a) {
        cout << "suchestvuet" << endl;
        string answer;
        cout << "Vichislit' S? (yes/no)" << endl;
        cin >> answer;
        if (answer == "yes") {
            double p = (double) (a + b + c) / 2;
            double s = sqrt(p * (p - a) * (p - b) * (p - c));
            string sv = "";
            if (a == b && b == c) {
                sv = "ravnostoronnego";
            } else if (a == b || b == c || a == c) {
                sv = "ravnobedrennogo";
            }
            if (a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a) {
                sv += " priamougolnogo";
            }
            cout << "S " << sv << " = " << s << endl;
        } else if (answer != "no") {
            cout << "vi vveli chysh =)" << endl;
        }
    } else {
        cout << "ne suchestvuet" << endl;
    }
    return 0;
}
Возможно, можно проще.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 28.09.2012, 09:16   #6
Heles
Пользователь
 
Регистрация: 17.09.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
#include <iostream>
#include <math.h>
using namespace std;

int
main()
{
    int a, b, c;
    cout << "Enter a, b, c: ";
    cin >> a >> b >> c;
    if (a + b > c && a + c > b && b + c > a) {
        cout << "suchestvuet" << endl;
        string answer;
        cout << "Vichislit' S? (yes/no)" << endl;
        cin >> answer;
        if (answer == "yes") {
            double p = (double) (a + b + c) / 2;
            double s = sqrt(p * (p - a) * (p - b) * (p - c));
            string sv = "";
            if (a == b && b == c) {
                sv = "ravnostoronnego";
            } else if (a == b || b == c || a == c) {
                sv = "ravnobedrennogo";
            }
            if (a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a) {
                sv += " priamougolnogo";
            }
            cout << "S " << sv << " = " << s << endl;
        } else if (answer != "no") {
            cout << "vi vveli chysh =)" << endl;
        }
    } else {
        cout << "ne suchestvuet" << endl;
    }
    return 0;
}
Возможно, можно проще.
То, что нужно, спасибо). Путаю "==" и "=" в логических операциях.
Heles вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Существует ли решение? BOJIT Помощь студентам 0 19.02.2012 22:33
Существует ли функция? prizrak1390 PHP 2 20.04.2011 20:32
TP. Существует ли файл? TwiX Помощь студентам 9 14.12.2009 17:16
Существует ли формула??? Graff_1 Microsoft Office Excel 3 10.11.2009 18:18
существует ли файл? subsonic Общие вопросы Delphi 8 10.01.2008 03:17