Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 24.11.2013
Сообщений: 16
1

Найти сумму площадей всех треугольников отдельно

24.11.2013, 03:32. Просмотров 1380. Ответов 11
Метки нет (Все метки)


помогите решить:
В текстовом файле хранятся записи вида:
T abc - стороны треугольника (условие существования треугольника выполняется).
V k - коэффициент подобия.
Найти сумму площадей всех треугольников отдельно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2013, 03:32
Ответы с готовыми решениями:

Даны стороны двух треугольников. Найти сумму их площадей и периметров.
7 Помогите, пожалуйста, решить задачу в С++. Даны стороны двух треугольников. Найти сумму их...

Найти сумму площадей треугольников, используя функцию вычисления площади треугольника по его сторонам
Даны стороны двух треугольников. Найти сумму их площадей, используя функцию вычисления площади...

Найти общую сумму стоимости всех перевозок и отдельно по каждому виду.
Помогите 2 задания зделать полчиса сижу никак зделать не могу тут легко я просто чтота вдуплить не...

Найти наибольшую из площадей треугольников, вершины которых находятся в заданных точках
Здравствуйте! Написать программу на C++: Даны координаты 4-х точек x1,y1, x2,y2, x3,y3, x4,y4....

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
11
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 04:54 2
http://ru.wikipedia.org/wiki/%... 8%EA%EE%E2
Отношение площадей подобных треугольников равно квадрату коэффициента подобия
Если узнать площадь одного треугольника, то площадь большего подобного нужно умножить на квадрат коэффициента,
а меньшего - разделить на квадрат кэоффициента.
В условиии не вижу количество треугольников, не вижу площадь одного треугольника, не вижу длины сторон и углы.
0
1 / 1 / 0
Регистрация: 24.11.2013
Сообщений: 16
24.11.2013, 17:05  [ТС] 3
файл выглядит так:
Т 6 10 12
Т 3 5 6
Т 2 5 4
К 2

Т обозначает стороны треугольника , а К – коэффициент подобия
нужно определить подобные треугольники и найти их сумму площадей используя стеки
0
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 18:48 4
Вам принципиально на Си или можно на C++ ?
Я с Си не знаком, а на C++ кое-что умею...
0
3320 / 2697 / 729
Регистрация: 25.03.2012
Сообщений: 9,738
Записей в блоге: 1
24.11.2013, 18:56 5
katsidelin, а чего там уметь то? Си это тот же с++ (с незначительными оговорками)

Добавлено через 1 минуту
Julia220, можно привести пример такого файла? А то я чет не вкурил, зачем дан к-т подобия, если стороны и так известны и при чём тут вообще стеки?
0
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 19:20 6
Разница в том, что я не могу для Си найти квадратный корень в своём gcc 4.8.2 (Linux)
А в c++: /usr/include/c++/4.8.2/cmath
gcc ругается, что нет #include <cmath>
g++ пропускает код - всё в порядке.

Я пока думаю над задачкой.
Выйду на связь позже, некогда копипастить.

Добавлено через 3 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
katsidelin, а чего там уметь то? Си это тот же с++ (с незначительными оговорками)

Добавлено через 1 минуту
Julia220, можно привести пример такого файла? А то я чет не вкурил, зачем дан к-т подобия, если стороны и так известны и при чём тут вообще стеки?
Она только что всё привела.
Я не курю, но вкурил.
Если первая чар в структуре Т - то далее стороны треугольника. Иначе - коэффициент.

Почитайте тут и бросайте курить:
http://ru.wikipedia.org/wiki/%... 0%EE%ED%E0
http://www.kakprosto.ru/kak-34... go-storony
0
3320 / 2697 / 729
Регистрация: 25.03.2012
Сообщений: 9,738
Записей в блоге: 1
24.11.2013, 19:22 7
katsidelin, а ничего что заголовочные файлы в с++ это аналоги h файлов из си?
Файл math.h никогда не слышал?
0
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 19:27 8
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
51
 #include <cmath> // У меня gcc 4.8.2 Linux. У Вас может быть другая библиотека.
 #include <fstream>
 #include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    // Пусть имеется в каталоге (папке) с программой текстовый файл с указанными Вами данными.
    // Например, source.cfg
    const char szSourceFile[11] = "source.cfg"; // Переменная с именем файла.
 
    // Внутри файла есть как текстовые (тип char), так и целочисленные (тип int, но я использую float - с плавающей точкой) значения.
    // Из названия Вашей темы следует, что нужно использовать структуру.
    struct aTreug
    {
        char t; // Текстовая составляющая.
        float f[3];    // Числовая составляющая, состоящая либо из трёх цифер, либо из одной. Как в последнем случае.
    };
    // Открываем входящий файловый поток.
    ifstream vvod;
    vvod.open(szSourceFile, ios_base::in);
    // Заполняем поля структуру.
    aTreug Base[4]; // Переменная с типом данных - структура (в стеке).
    int i=0;    // Переменная счётчик.
    while ( !vvod.eof() )
    {
        vvod >> Base[i].t;
        if (Base[i].t == 'T')
        {
            vvod >> Base[i].f[0];
            vvod >> Base[i].f[1];
            vvod >> Base[i].f[2];
        }
        else if (Base[i].t == 'K')
        {
            vvod >> Base[i].f[0];
        }
        else
        {
            // Не делаем ничего.
        };
 
        i++;
    };
    // Закрываем файловый поток.
    vvod.close();
 
 
    return 0;
};
Вот уже начинающий кусок кода на c++.
Поразмышляем вместе далее...

Добавлено через 4 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
katsidelin, а ничего что заголовочные файлы в с++ это аналоги h файлов из си?
Файл math.h никогда не слышал?
А ничего, если в этом файле в gcc 4.8.2 даны только готовые шаблоны квадратного корня, а не вызов функции?
Не знаете решение задачи - не мешайте!
0
3320 / 2697 / 729
Регистрация: 25.03.2012
Сообщений: 9,738
Записей в блоге: 1
24.11.2013, 19:40 9
katsidelin, сформулируй проблему. Что тебе там мешает вызвать sqrt? У тебя есть #include <math.h>
???
0
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 20:04 10
Мне некогда с Вами спорить.

Добавлено через 3 минуты
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 #include <cmath> // У меня gcc 4.8.2 Linux. У Вас может быть другая библиотека.
 #include <fstream>
 #include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    // Пусть имеется в каталоге (папке) с программой текстовый файл с указанными Вами данными.
    // Например, source.cfg
    const char szSourceFile[11] = "source.cfg"; // Переменная с именем файла.
 
    // Внутри файла есть как текстовые (тип char), так и целочисленные (тип int, но я использую float - с плавающей точкой) значения.
    // Из названия Вашей темы следует, что нужно использовать структуру.
    struct aTreug
    {
        char t; // Текстовая составляющая.
        float f[3];    // Числовая составляющая, состоящая либо из трёх цифер, либо из одной. Как в последнем случае.
    };
    // Открываем входящий файловый поток.
    ifstream vvod;
    vvod.open(szSourceFile, ios_base::in);
    // Заполняем поля структуру.
    aTreug Base[4]; // Переменная с типом данных - структура (в стеке).
    int i=0;    // Переменная счётчик.
    while ( !vvod.eof() )
    {
        vvod >> Base[i].t;
        if (Base[i].t == 'T')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
            vvod >> Base[i].f[1];
            vvod >> Base[i].f[2];
        }
        else if (Base[i].t == 'K')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
        }
        else
        {
            // Не делаем ничего.
        };
 
        i++;
    };
    // Закрываем файловый поток.
    vvod.close();
 
    // Коэффициент подобия показывает во сколько раз соотносятся соответсвующие стороны треугольника.
    // Если при делении сторон двух треугольников везде будет число К, то треугольники подобны.
    // Тогда можно будет искать их площади по формуле Герона.
    // [url]http://ru.wikipedia.org/wiki/%D4%EE%F0%EC%F3%EB%E0_%C3%E5%F0%EE%ED%E0[/url]
 
    int n=0; // Счётчик для нового цикла.
    float S[i]; // Массив площадей для подобных треугольников.
    while ( Base[n].t == 'T' && Base[n+1].t == 'T' )
    {
        if (
                (Base[n].f[0]/Base[n+1].f[0] == Base[i].f[0] || Base[n].f[0]/Base[n+1].f[0] == 1 /(Base[i].f[0]))
                    &&
                (Base[n].f[1]/Base[n+1].f[1] == Base[i].f[0] || Base[n].f[1]/Base[n+1].f[1] == 1 /(Base[i].f[0]))
                    &&
                (Base[n].f[2]/Base[n+1].f[2] == Base[i].f[0] || Base[n].f[2]/Base[n+1].f[2] == 1 /(Base[i].f[0]))
            )
        {
            S[n] = sqrt( ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 ) * ((Base[n].f[1] + Base[n].f[0]))* ((Base[n].f[0] + Base[n].f[2]))* ((Base[n].f[1] + Base[n].f[2])) );
            S[n+1] = sqrt( ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 ) * ((Base[n+1].f[1] + Base[n+1].f[0]))* ((Base[n+1].f[0] + Base[n+1].f[2]))* ((Base[n+1].f[1] + Base[n+1].f[2])) );
 
            cout << S[n] << '\t' << S[n+1] << endl;
        }; // Я немного преобразовал формулу. Проверьте, я не очень великий математик.
 
        cout << n << endl;
 
        n++;
    };
 
 
    return 0;
};
Предлагаю лучше гению Си объяснить, что я делаю не так?
Последний кусок кода не работает, так как я ожидал.
0
3320 / 2697 / 729
Регистрация: 25.03.2012
Сообщений: 9,738
Записей в блоге: 1
24.11.2013, 20:22 11
katsidelin, что не так???
#include <cmath>
На
#include <math.h>
Заменить что ль сложно? Да? Сложно? Чего ты из пустяка проблему раздуваешь?
0
60 / 21 / 10
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
24.11.2013, 21:01 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 #include <cmath> // У меня gcc 4.8.2 Linux. У Вас может быть другая библиотека.
 #include <fstream>
 #include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    // Пусть имеется в каталоге (папке) с программой текстовый файл с указанными Вами данными.
    // Например, source.cfg
    const char szSourceFile[11] = "source.cfg"; // Переменная с именем файла.
 
    // Внутри файла есть как текстовые (тип char), так и целочисленные (тип int, но я использую float - с плавающей точкой) значения.
    // Из названия Вашей темы следует, что нужно использовать структуру.
    struct aTreug
    {
        char t; // Текстовая составляющая.
        float f[3];    // Числовая составляющая, состоящая либо из трёх цифер, либо из одной. Как в последнем случае.
    };
    // Открываем входящий файловый поток.
    ifstream vvod;
    vvod.open(szSourceFile, ios_base::in);
    // Заполняем поля структуру.
    aTreug Base[4]; // Переменная с типом данных - структура (в стеке).
    int i=0;    // Переменная счётчик.
    while ( !vvod.eof() )
    {
        vvod >> Base[i].t;
        if (Base[i].t == 'T')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
            vvod >> Base[i].f[1];
            vvod >> Base[i].f[2];
        }
        else if (Base[i].t == 'K')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
        }
        else
        {
            // Не делаем ничего.
        };
 
        i++;
    };
    // Закрываем файловый поток.
    vvod.close();
 
    // Коэффициент подобия показывает во сколько раз соотносятся соответсвующие стороны треугольника.
    // Если при делении сторон двух треугольников везде будет число К, то треугольники подобны.
    // Тогда можно будет искать их площади по формуле Герона.
    // [url]http://ru.wikipedia.org/wiki/%D4%EE%F0%EC%F3%EB%E0_%C3%E5%F0%EE%ED%E0[/url]
 
    int n=0; // Счётчик для нового цикла.
    float S[i]; // Массив площадей для подобных треугольников.
    while ( Base[n].t == 'T' && Base[n+1].t == 'T' )
    {
        if (
                (Base[n].f[0]/Base[n+1].f[0] == Base[i].f[0] || Base[n].f[0]/Base[n+1].f[0] == 1 /(Base[i].f[0]))
                    &&
                (Base[n].f[1]/Base[n+1].f[1] == Base[i].f[0] || Base[n].f[1]/Base[n+1].f[1] == 1 /(Base[i].f[0]))
                    &&
                (Base[n].f[2]/Base[n+1].f[2] == Base[i].f[0] || Base[n].f[2]/Base[n+1].f[2] == 1 /(Base[i].f[0]))
            )
        {
            S[n] = sqrt( ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 ) * ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[0])* ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[1])* ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[2]) );
            S[n+1] = sqrt( ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 ) * ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[0])* ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[1])* ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[2]) );
 
            cout << S[n] << '\t' << S[n+1] << endl;
        }; // Я немного преобразовал формулу. Проверьте, я не очень великий математик.
 
        cout << n << endl;
 
        n++;
    };
 
 
    return 0;
};
Я ошибся в математической формуле.
Сейчас буду разбираться в коде.
Kuzia domovenok, иди погуляй в другую ветвь, надоел уже!

Добавлено через 14 минут
На C++ код готов.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 #include <cmath> // У меня gcc 4.8.2 Linux. У Вас может быть другая библиотека.
 #include <fstream>
 #include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    // Пусть имеется в каталоге (папке) с программой текстовый файл с указанными Вами данными.
    // Например, source.cfg
    const char szSourceFile[11] = "source.cfg"; // Переменная с именем файла.
 
    // Внутри файла есть как текстовые (тип char), так и целочисленные (тип int, но я использую float - с плавающей точкой) значения.
    // Из названия Вашей темы следует, что нужно использовать структуру.
    struct aTreug
    {
        char t; // Текстовая составляющая.
        float f[3];    // Числовая составляющая, состоящая либо из трёх цифер, либо из одной. Как в последнем случае.
    };
    // Открываем входящий файловый поток.
    ifstream vvod;
    vvod.open(szSourceFile, ios_base::in);
    // Заполняем поля структуру.
    aTreug Base[4]; // Переменная с типом данных - структура (в стеке).
    int i=0;    // Переменная счётчик.
    while ( !vvod.eof() )
    {
        vvod >> Base[i].t;
        if (Base[i].t == 'T')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
            vvod >> Base[i].f[1];
            vvod >> Base[i].f[2];
        }
        else if (Base[i].t == 'K')   // Я заменил букву на латинскую, чтобы не было проблем с юникодом. В виндовсе поменяйте надаз на русскую.
        {
            vvod >> Base[i].f[0];
        }
        else
        {
            // Не делаем ничего.
        };
 
        i++;
    };
    // Закрываем файловый поток.
    vvod.close();
 
    // Коэффициент подобия показывает во сколько раз соотносятся соответсвующие стороны треугольника.
    // Если при делении сторон двух треугольников везде будет число К, то треугольники подобны.
    // Тогда можно будет искать их площади по формуле Герона.
    // [url]http://ru.wikipedia.org/wiki/%D4%EE%F0%EC%F3%EB%E0_%C3%E5%F0%EE%ED%E0[/url]
 
    int n=0; // Счётчик для нового цикла.
    float S[i]; // Массив площадей для подобных треугольников.
    while ( Base[n].t == 'T' && Base[n+1].t == 'T' )
    {
        if (
                (Base[n].f[0]/Base[n+1].f[0] == Base[i-1].f[0] || Base[n].f[0]/Base[n+1].f[0] == 1 /(Base[i-1].f[0]))
                    &&
                (Base[n].f[1]/Base[n+1].f[1] == Base[i-1].f[0] || Base[n].f[1]/Base[n+1].f[1] == 1 /(Base[i-1].f[0]))
                    &&
                (Base[n].f[2]/Base[n+1].f[2] == Base[i-1].f[0] || Base[n].f[2]/Base[n+1].f[2] == 1 /(Base[i-1].f[0]))
            )
        {
            S[n] = sqrt( ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 ) * ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[0])* ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[1])* ((Base[n].f[0] + Base[n].f[1] + Base[n].f[2])/2 - Base[n].f[2]) );
            S[n+1] = sqrt( ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 ) * ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[0])* ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[1])* ((Base[n+1].f[0] + Base[n+1].f[1] + Base[n+1].f[2])/2 - Base[n+1].f[2]) );
 
            cout << "Площадь треугольника " << n+1 << " равна " << S[n] << '\n'
                 << "Площадь треугольника " << n+2 << " равна " << S[n+1] << endl;
            cout << "Сумма площадей подобных треугольников равна " << S[n] + S[n+1] << endl;
        }; // Я немного преобразовал формулу. Проверьте, я не очень великий математик.
 
 //       cout << n << '\t' << i << '\t' << Base[i-1].f[0] << endl; // Отладочная информация.
 
        n++;
    };
 
 
    return 0;
};
Прошу знатоков Си перевести код с C++ на Си.

Добавлено через 10 минут
Пробовал сам переписать на Си.
Одной только заменой библиотек на math.h и stdio.h не отделаться.
Надо польностью всё переписывать.
Опыта на Си у меня нет, поэтому с этой задачей не справлюсь.
Я сделал то, что в моих силах, в остальном пускай помогут опытные программисты Си.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2013, 21:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Найти сумму площадей двух треугольников
Необходимо найти сумму площадей 2-х треугольников. Задаются координаты вершины, далее находятся...

Найти сумму и разность площадей треугольников
Cоставить программу, используя подпрограмму-процедуру. Заданы стороны двух треугольников АВС...

Найти сумму периметров и площадей треугольников
даны стороны двух треугольников. найти сумму их периметров и сумму их площадей.(определить...

Найти сумму их периметров и сумму площадей треугольников по его сторонам
Привет! Люди прошу у Вас помощи, нужно сдавать работы 6 июня а у меня ни одной нет. Паскаль не...

Найти сумму периметров треугольников и сумму их площадей
Даны стороны двух треугольников. Найти сумму их площадей и сумму их периметров определить процедуру...

Найти сумму периметров треугольников и сумму их площадей
Даны стороны двух треугольников. Найти сумму их периметров и сумму их площадей. Определить...


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

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

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