Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/47: Рейтинг темы: голосов - 47, средняя оценка - 4.87
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
1

Вершины дерева вещественные числа. Описать процедуру, которая вычисляет среднее арифметическое всех вершин

14.04.2015, 19:00. Показов 8759. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вершины дерева вещественные числа. Описать процедуру, которая вычисляет среднее арифметическое всех вершин дерева и добавляет в дерево вершину с вычисленным значением(бинарное дерево). вот код но там надо сделать так что когда вводишь одинаковый элемент то эти элементы надо как один элемент считать:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
 
using namespace std;
 
struct vershin
{
    float data;
    vershin *l, *r;
};
 
void add(vershin *&d, float x)
{
    if(d == NULL)
    {
        d = new vershin;
        d->data = x;
        d->l = d->r = NULL;
    }
    if(d->data > x) add(d->l,x);
    if(d->data < x) add(d->r,x);
}
 
void obxod1(vershin *d)
{
    if(d!=NULL)
    {
        cout << d->data << ",";
        obxod1(d->l);
        obxod1(d->r);
    }
}
 
void obxod2(vershin *d)
{
    if(d!=NULL)
    {
        obxod2(d->l);
        cout << d->data << ",";
        obxod2(d->r);
    }
}
 
void obxod3(vershin *d)
{
    if(d!=NULL)
    {
        obxod3(d->l);
        obxod3(d->r);
        cout << d->data << ",";
    }
}
 
void visual(vershin *d, int u)
{
    if(d != NULL)
    {
        visual(d->r,u+1);
        for(int i = 0; i < u; i++)
        {
            cout << "\t";
        }
        cout << d->data << endl;
        visual(d->l,u+1);
    }
}
 
void sredarif(vershin *d, float &s)
{
    int k = 0;
    if(d!=NULL)
    {
        s+=d->data;
        sredarif(d->l, s);
        k++;
        sredarif(d->r, s);
    }
}
 
int main()
{
    vershin *tree = NULL;
    float N, x, s = 0, sr;
    cout << "Vvedite kolichestvo derevya = "; cin >> N;
    for(int i = 1; i <= N; i++)
    {
        cin >> x;
        add(tree,x);
    }
 
    sredarif(tree,s);
    cout<<"summa->"<<s<<endl;
    sr = s/N;
    cout << sr<<endl;;
    add(tree,sr);
    visual(tree,0);
    cout << "\nKLP: ";
    obxod1(tree);
    cout << "\nLKP: ";
    obxod2(tree);
    cout << "\nLPK: ";
    obxod3(tree);
    return 0;
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2015, 19:00
Ответы с готовыми решениями:

Записи вершин дерева - вещественные числа. Описать процедуру, которая выбирает все вершины с отрицательными за
Записи вершин дерева - вещественные числа. Описать процедуру, которая выбирает все вершины с...

Написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева
Необходимо написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева....

Описать процедуру, которая вычисляет третью степень числа
Ргос1. Описать процедуру PowerA3(A, В), которая вычисляет третью степень числа А и возвращает ее в...

Описать процедуру, которая вычисляет периметр и площадь прямоугольника
Ргос5. Описать процедуру RectPS(x1, y1, x2, y2, P, S), которая вычисляет периметр Р и площадь S...

16
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
15.04.2015, 21:11 2
К ф-циям добавь этот код:
C++
1
2
3
4
5
6
7
8
9
int q = 0;
void count(vershin *d)
{
if(d!=NULL)
    {   q++;
        count(d->l);
        count(d->r);
    }
}
Вот ф-ция main:
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
int main()
{
 
    vershin *tree = NULL;
    float N, x, s = 0, sr;
    cout << "Vvedite kolichestvo derevya = "; cin >> N;
    for(int i = 1; i <= N; i++)
    {
        cin >> x;
        add(tree,x);
    }
 
    sredarif(tree,s);
    cout<<"summa->"<<s<<endl;
    count(tree);
    sr = s/q;
    cout << sr<<endl;;
    add(tree,sr);
    visual(tree,0);
    cout << "\nKLP: ";
    obxod1(tree);
    cout << "\nLKP: ";
    obxod2(tree);
    cout << "\nLPK: ";
    obxod3(tree);
        return 0;
}
1
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
15.04.2015, 21:41  [ТС] 3
Можно сделать так что визуализация вышла как вертикально а не горизонтально, что та не получается спасибо еще раз

Добавлено через 11 минут
Я так сделал но они альтернативные вот у меня так получилось:
C++
1
2
3
4
5
6
7
8
9
10
void sredarif(vershin *d, float &s, int &S)
{
    if(d!=NULL)
    {
        S++;
        s+=d->data;
        sredarif(d->l, s, S);
        sredarif(d->r, s, S);
    }
}
Ф-я main:
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
int main()
{
    vershin *tree = NULL;
    float N, x, s = 0, sr;
    cout << "Vvedite kolichestvo derevya = "; cin >> N;
    for(int i = 1; i <= N; i++)
    {
        cin >> x;
        add(tree,x);
    }
    int S=0;
    sredarif(tree,s,S);
    cout<<"summa->"<<s<< "\nKolichestvo - " << S <<endl;
    sr = s/S;
    cout << sr<<endl;;
    add(tree,sr);
    visual(tree,0);
    cout << "\nKLP: ";
    obxod1(tree);
    cout << "\nLKP: ";
    obxod2(tree);
    cout << "\nLPK: ";
    obxod3(tree);
    return 0;
}
но как можно что бы вывод на экран как дерево вышла (я еще не разобрался) как бином Ньютона
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 29
16.04.2015, 18:40 4
Tordek, а как найти среднее арифметическое элементов дерева, не подскажете?
0
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
16.04.2015, 20:39  [ТС] 5
Ananastasia, вот:
C++
1
sr = s/q;
или:
C++
1
sr = s/S;
Добавлено через 1 час 4 минуты
Ananastasia, Вы программу посмотрели?
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 29
16.04.2015, 22:14 6
Iskandar, Да,запустилась. Спасибо
0
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
16.04.2015, 22:18  [ТС] 7
Здесь вершины и элементы они одинаковые.
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 29
16.04.2015, 22:58 8
Iskandar, уточнить хотела, эти функции за что отвечают
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void visual(vershin *d, int u)
{
    if(d != NULL)
    {
        visual(d->r,u+1);
        for(int i = 0; i < u; i++)
        {
            cout << "\t";
        }
        cout << d->data << endl;
        visual(d->l,u+1);
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
void sredarif(vershin *d, float &s)
{
    int k = 0;
    if(d!=NULL)
    {
        s+=d->data;
        sredarif(d->l, s);
        k++;
        sredarif(d->r, s);
    }
}
Добавлено через 9 минут
с первой разобралась
0
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
17.04.2015, 07:05  [ТС] 9
Ananastasia, второй некорректно(если элементы одинаковые то отдельно считает) но лучше вместо его пишите этот:
C++
1
2
3
4
5
6
7
8
9
10
void sredarif(vershin *d, float &s, int &S)
{
    if(d!=NULL)
    {
        S++;
        s+=d->data;
        sredarif(d->l, s, S);
        sredarif(d->r, s, S);
    }
}
Добавлено через 2 минуты
и ф-я main:
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
int main()
{
    vershin *tree = NULL;
    float N, x, s = 0, sr;
    cout << "Vvedite kolichestvo derevya = "; cin >> N;
    for(int i = 1; i <= N; i++)
    {
        cin >> x;
        add(tree,x);
    }
    int S=0;
    sredarif(tree,s,S);
    cout<<"summa->"<<s<< "\nKolichestvo - " << S <<endl;
    sr = s/S;
    cout << sr<<endl;;
    add(tree,sr);
    visual(tree,0);
    cout << "\nKLP: ";
    obxod1(tree);
    cout << "\nLKP: ";
    obxod2(tree);
    cout << "\nLPK: ";
    obxod3(tree);
    return 0;
}
или код Tordek, можно использовать

Добавлено через 3 минуты
Вторая функция вычисляет сумму элементов и добавляет счетчику каждый обход, если встречается одинаковые элементы то счетчик не работает
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 29
17.04.2015, 15:12 10
Iskandar, спасибо большое,поняла
0
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
17.04.2015, 16:05  [ТС] 11
Tordek, вы здесь?
0
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
17.04.2015, 23:22 12
Iskandar, завтра решу вашу проблему. А с кодом вы правы -- ваш вариант более удачный.
1
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
18.04.2015, 07:02  [ТС] 13
Tordek, спасибо большое !!!
0
1 / 1 / 0
Регистрация: 18.04.2015
Сообщений: 12
18.04.2015, 20:02 14
Iskandar, а я перевожу на СИ, как заменить
C++
1
cout << d->data << endl;
эту строчку
0
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
18.04.2015, 22:13  [ТС] 15
Ну точно не знаю попробуйте этот код:
C
1
printf ("%d \n", d->data );
Добавлено через 14 минут
Я этот код попробовал:
C
1
printf ("%f \n", d->data );
вроде работает
0
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
18.04.2015, 23:01 16
Iskandar, идеальной визуализации в консоли всё-равно не построить таким способом, как пытаетесь вы, так как возврат на предыдущие строки консоли из программы невозможен, если я не ошибаюсь. Тут нужен или совершенно иной, неизвестный мне метод(тот, который я могу предложить заставит переделывать программу слишком сильно) либо постройка в визуальном режиме. И причём здесь бином Ньютона?
1
1 / 1 / 1
Регистрация: 30.03.2015
Сообщений: 15
19.04.2015, 11:10  [ТС] 17
нет, мой друг сделал это, но он не дает мне посмотреть как это сделано, на счет бином Ньютона ну наверно вывод на экран вертикальном виде они похожи. Да вы правы здесь бином Ньютона не причём(извиняюсь за грубый сходности).
0
19.04.2015, 11:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2015, 11:10
Помогаю со студенческими работами здесь

Написать программу,которая вычисляет среднее арифметическое
Решить задачу двумя методами:используя цикл for и используя цикл whilе(либо do-whilе). Написать...

Написать программу, которая вычисляет среднее арифметическое
Помогите пожалуйста написать программу, которая вычисляет среднее арифметическое последовательности...

Описать процедуру, которая вычисляет сумму элементов двух одномерных массивов
Помогите пожалуйста написать код на Visual С++. я написала код без процедуры, все работает. Но...

Описать процедуру, которая возвращает среднее арифметическое значение нечетных цифр, входящих в запись числа
1. Описать процедуру, которая возвращает среднее арифметическое значение нечетных цифр, входящих в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru