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

Подправить программу - C++

Восстановить пароль Регистрация
 
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
31.10.2013, 01:03     Подправить программу #1
Помогите, пожалуйста, подправить программу.

Задание следующее:
Даны действительные числа a, b, c, d. Проверить возможность построения пятиугольника, изображенного на рисунке (рисунок прилагаю) и найти его площадь.
Проверку возможности существования треугольника и вычисление его площади по трем сторонам организовать в подпрограмме.

Мой вариант программы:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <math.h>
 
int treug (float a, float b, float c)
{ int p=0;
if ((a+b>c) || (a+c>b) || (b+c>a))
{ p=1;
printf ("Treug. sush."); }
return p;
}
 
int plos (float a, float b, float c)
{
float p = (a+b+c)/2;
return s = sqrt(p*(p-a)*(p-b)*(p-c));
}
 
int main ()
{
printf ("Vvedite 4 chisla");
scanf ("%f %f %f %f", &a, &b, &c, &d);
float S = s (1.0, 2.0, a) + s(2.0, 2.5, b) + s (2.5, d, c);
printf ("%f", &S);
return 0;
}
Миниатюры
Подправить программу  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 08:44     Подправить программу #2
Beverly, намудрили вы тут. Сделайте проверку существования треугольника, которая будет возвращать true в случае существования и false в случае невозможности существования. В main сделать условие, где будут проверяться все 3 треугольника и если все они существуют, то переходить к вычислению площади. И не забывайте код в тэги оформлять

Добавлено через 7 минут
Beverly,
C++
1
2
3
4
bool check(double a, double b, double c)
{
    return (a+b>c && b+c>a && a+c>b && a > 0 && b > 0 && c > 0);
}
Вроде все должно быть правильно
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
31.10.2013, 10:04  [ТС]     Подправить программу #3
Пожалуйста, напишите полностью код!
Я совсем не понимаю синтаксиса, поэтому выдает ошибки.
Спасибо.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 10:21     Подправить программу #4
Beverly, тогда ждите, когда я домой приду
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
31.10.2013, 10:57  [ТС]     Подправить программу #5
Хорошо.

Вот с помощью этого фрагмента я определяю существует ли треугольник.
C++
1
2
3
4
5
6
7
int treug (float a, float b, float c)
{ int p=0;
if ((a+b>c) || (a+c>b) || (b+c>a))
{ p=1;
printf ("Treug. sush."); }
return p;
}
Дальше, как я понимаю, мы должны составить подпрограмму (функцию) для вычисления площади треугольника...
(Находим полупериметр, находим площадь по формуле Герона)

А затем, 3 шагом, найти площадь 5-тиугольника
?
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 11:21     Подправить программу #6
Ну да
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
31.10.2013, 11:26  [ТС]     Подправить программу #7
Хорошо.
Напишите вечером код, пожалуйста.
И если не сложно, с подробными комментариями.
Буду безмерно благодарна!
Еще раз спасибо.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
31.10.2013, 12:30     Подправить программу #8
Раз уж у меня есть доступ к компилятору, и 10 минут свободного времени...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Функции ввода-вывода на экран
#include <iostream>
//Математика
#include <math.h>
 
 
//Функция проверки существования треугольника
bool check_triangle(double a, double b, double c)
{
    //Проверяем наличие сторон и неравенство треугольника
    if  (a > 0  && b > 0 && c > 0
                && a + b > c
                && a + c > b
                && b + c > a)
        return true;
    return false;
}
 
//Функция, считающая площадь треугольнака по 3м сторонам по формуле Герона
double calculate_area(double a, double b, double c)
{
    return 0.25 * sqrt((a + b + c) * (b + c - a) * (a + c - b) * (a + b - c));
}
 
int main(int argc, char** argv)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    double a, b, c, d;
 
    std::cout << "Введите числа a, b, c, d: ";
    std::cin >> a >> b >> c >> d;
 
    //Проверяем существование всех трех треугольников. Если нет, то выводит ошибку и завершает работу программы.
    if(!check_triangle(1, 2, a) || !check_triangle(2, 2.5, b) || !check_triangle(d, 2.5, c))
    {
        std::cout << "Ошибка, один из треугольников не существует." << std::endl;
        system("pause");
        return -1;
    }
 
    //Считаем площадь пятиугольника
    double pentagon_area = calculate_area(1, a, 2) + calculate_area(2, 2.5, b) + calculate_area(2.5, d, c);
 
    std::cout << "Площадь пятиугольника: " << pentagon_area << std::endl;
 
    system("pause");
    return 0;
}
Математику не проверял, но если нигде не ошибся, то должно правильно считать.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 12:32     Подправить программу #9
Beverly, держите. Тестировал у себя, все работает. Если что непонятно, спрашивайте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream> // для cin/cout
#include <math.h> // для sqrt
using namespace std;
 
double S(double a, double b, double c) // нахождение площади треугольника по длинам 3 сторон
{
double p = (a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
 
bool check(double a, double b, double c) // проверка на корректность треугольника (возвращаем true/false)
{
    return (a+b>c && b+c>a && a+c>b && a > 0 && b > 0 && c > 0);
}
 
int main(int argc, char *argv[])
{
    double a,b,c,d; // объявляем необходимые переменные
    cout << "A:" << endl;
    cin >> a;
    cout << "B:" << endl;
    cin >> b;
    cout << "C:" << endl;
    cin >> c;
    cout << "D:" << endl;
    cin >> d;
    /* Сами вычисления */
    if (check(1.0,2.0,a) && check(2.0,2.5,b) && check(2.5,d,c)) // проверяем, все ли треугольники корректны
        cout << "S = " << (S(1.0,2.0,a)+S(2.0,2.5,b)+S(2.5,d,c)) << endl; // считаем и выводим площадь
    else cout << "Bad triangle!" << endl; // ругаем пользователя
    //system ("pause"); или что то в этом роде, что бы окно не закрывалось после выдачи результата
    return 0;
}
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
31.10.2013, 21:35  [ТС]     Подправить программу #10
Добавлено через 49 минут
Программа, по идее, работает.
Спасибо большое!

НО:
else cout << "Bad triangle!" << endl;
Этот фрагмент не выводится.
Программа выводит или S = (значение)
Или же:
sqrt: DOMAIN error
sqrt: DOMAIN error
sqrt: DOMAIN error

Вопрос, собственно, такой: почему программа не выводит "Bad triangle!"?
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 21:43     Подправить программу #11
Beverly, да? сейчас на всякий случай еще раз посмотрю. Все нормально. Перепроверьте у себя, думаю, вы там опечатались
Миниатюры
Подправить программу  
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
01.11.2013, 21:51  [ТС]     Подправить программу #12
Не подскажите, как обеспечить в функции передачу по адресу? (int *p)
И как потом обратиться к этой функции?

Вот функция:

C++
1
2
3
4
5
6
7
8
9
void treug (float a, float b, float c, int*p)
{
p=0;
if ((a+b>c) || (b+c>a) || (c+a>b))
{
 p=1;
  printf ("Treug. sush.");
return p;
}
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
01.11.2013, 21:53     Подправить программу #13
Beverly, что вы хотите передать?
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
02.11.2013, 19:54  [ТС]     Подправить программу #14
Нужно проверить существует ли треугольник, только использовать указатель (по адресу)
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
02.11.2013, 21:25     Подправить программу #15
1) Вместо p = число; следует писать *p = число;
2) Треугольник существует, если выполняются все три условия (a+b>c), (b+c>a), (c+a>b)
C++
1
if( (a+b>c) && (b+c>a) && (c+a>b) )
// if( (a+b>c) || (b+c>a) || (c+a>b) ) // а это означает "хотя бы одно из условий"
Beverly
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 51
03.11.2013, 21:05  [ТС]     Подправить программу #16
В функции, которая определяет существует ли треугольник или нет, нужно использовать указатель (на p) *p
При вызове он должен определять существует ли треугольник или нет
Помогите с кодом данного фрагмента, пожалуйста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 01:59     Подправить программу
Еще ссылки по теме:

Подправить программу C++
C++ Подправить программу на миссивы, си++
C++ Подправить готовую программу, что бы использовались указатели

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

Или воспользуйтесь поиском по форуму:
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
04.11.2013, 01:59     Подправить программу #17
Beverly, вы что то новое удумали? Зачем вам получать передавать указатель p?
Yandex
Объявления
04.11.2013, 01:59     Подправить программу
Ответ Создать тему
Опции темы

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