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

Найти три минимальных элемента в дереве и массиве (Доработать код) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ [C] ReadFile/WriteFile http://www.cyberforum.ru/cpp-beginners/thread763123.html
Всем доброго времени суток! Есть вроблема с програмкой ,а именно: Unhandled exception at 0x010b1493 in lab3.exe: 0xC0000005: Access violation reading location 0x00000000. Исходник: #include <conio.h> #include <stdio.h> #include <windows.h> #include <shlobj.h> struct Student
C++ Подсчитать кол-во одинаковых элементов каждого значения Дан массив целых чисел, причём каждое из них принадлежит диапазону . Упорядочить элементы массива (отсортировать) по возрастанию. Для этого использовать дополнительный массив. Подсчитать количество одинаковых элементов каж-дого значения, т.е. количество 1-ц, 2-ек, … 100-ок. Затем заполнить первоначальный массив по порядку полученным количеством 1-ц, 2-ек, … 100-ок. С сортировкой проблем нет,... http://www.cyberforum.ru/cpp-beginners/thread763118.html
Вывести фигуру звездочками C++
Ребята, задали задачу не могу докумекать Нужно составить програмку, которая выдает на экран такую фигуру Нули не нужны, только звездочки. 000 * 00*000* * 000000* Циклы использовать нельзя, как и пробелы думал через \t но получается слишком растянуто
error C3867 C++
Списал код из учебника. Наверное, там где-то опечатка, так как при компиляции возникает ошибка. #include <iostream> using namespace std; class Mammal { public: Mammal():itsAge(1) { } virtual ~Mammal() { } virtual void Speak() const = 0;
C++ Вложенные конечные автоматы http://www.cyberforum.ru/cpp-beginners/thread763076.html
Задание: Добавить возможность использовать в таблице переходов в качестве элемента ссылку на конечный автомат из ранее загруженных. Ниже предлагаю архив в котором почти все реализовано, но почему то ссылка не записывается( не могу найти почему...Нужно чтобы работало хотя бы для двух автоматов, которые считывает с текстовых файлов, которые также прилагаются к архиву. Очень надеюсь на помощь или...
C++ Выбор слова или словосочетания из списка Здравствуйте, помогите пожалуйста. Нужна простая программа которая будет делать рандомный выбор 1 слова или словосочетания из списка (через запятую или с новой строки) по типу: Вася, Petya, Наша Маша, К0cт9 или Вася Petya подробнее

Показать сообщение отдельно
Stan1994
11 / 11 / 1
Регистрация: 11.12.2011
Сообщений: 122
16.01.2013, 08:34     Найти три минимальных элемента в дереве и массиве (Доработать код)
Ребята кто нибудь мог бы помочь с кодом на с++.
Я написал прогу которая ищет 3 минимальных элемента в дереве и массиве.
Если я в массиве задаю все отрицательные числа то прога вылетает.
А вот дерево нужно переделать: чтобы выводились не 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
struct node
{
    int info;
    node *ll,*rl;
};
 
node *tree (node *p,int w);
void treeout( node *t, int level);
char menu();
void min_tree(node *t, int *a);
void min_mass(int *mass, int *a, int n);
 
 
void main()
{
    setlocale(LC_ALL,"");
    node *root;
    int w, *a_tree, *a_mass, *mas, n;
    char buf = '6';
    a_tree = new int[3];
    a_mass = new int[3];
    for (int i=0; i<3; i++)
    {
        a_mass[i] = a_tree[i] = INT_MAX;    
    }
    while (buf != '5')
    {
        buf = menu();
        switch(buf)
        {
            case '1':
                root=NULL;
                printf("Введите элементы дерева(по оканчанию ввода нажмите Ctrl+Z):");
                scanf("%d", &w);
                while (!feof(stdin))
                {
                    root = tree(root,w);
                    scanf("%d", &w);
                }
                break;
            case '2':
                printf("Введите количество элементов массива:\n");
                scanf ("%d", &n);
                printf("Введите элементы массива:\n");
                mas = new int [n];
                for (int i=0; i<n; i++)
                    scanf ("%d", &mas[i]);
                break;
            case '3':
                cout<<"\nДвоичное дерево:\n\n";
                treeout(root,0);
                getch();
                cout << endl;
                min_tree (root, a_tree);
                min_tree (root, a_tree);
                for (int i=0; i<3; i++)
                    cout << a_tree[i] << " " << endl;
                getch();
                break;
            case '4':
                cout<<"\nМассив:\n\n";
                for (int i=0; i<n; i++)
                    cout << mas[i] << " ";
                cout << endl;
                min_mass(mas, a_mass, n);
                for (int i=0; i<3; i++)
                    cout << a_mass[i] << " " << endl;
                break;
            case '5':
                break;
        }
    }
    
        
 
}
 
 
char menu() //функция создания меню
{
    char a; 
    printf ("Выберите нужный вариант:\n1 - Ввод данных в дерево\n2 - Ввод данных в массив\n3 - Обработка дерева\n4 - Обработка массива\n5 - Выход\n"); 
    a = getch(); //считываем символ
    return a; //возвращаем а (функция menu() принимает значение а, т.е строка buf_int = menu(); равнозначна buf_int = a)
}
 
void min_tree(node *t, int *a)
{
    if (t != NULL)
    {
        if (a[0] > t->info && a[1] != t->info && a[2] != t->info)
            a[0] = t->info;
        else if (a[1] > t->info && a[0] != t->info && a[2] != t->info)
            a[1] = t->info;
        else if (a[2] > t->info && a[1] != t->info && a[0] != t->info)
            a[2] = t->info;
        if (t->rl != NULL) min_tree(t->rl, a);
        if (t->ll != NULL) min_tree(t->ll, a); 
    }
}
 
node *tree (node *p,int w)
{
    if (p==NULL)
    {
        p=new node;
        p->info=w;
        p->ll=NULL;
        p->rl=NULL;
    }
    else
        if(w<p->info)
            p->ll=tree(p->ll,w);
        else
            p->rl=tree(p->rl,w);
 
    return p;
}
 
void treeout( node *t, int level)
{
    int tab = 5;
    if (t == NULL)
        cout <<"Дерево пусто ! \n";
    else
    {
        if (t->rl != NULL) treeout(t->rl, level+1);
        cout<<setw(tab*level) <<t->info <<endl;
        if (t->ll != NULL) treeout(t->ll, level+1);        
    }
}
 
void min_mass (int *mass, int *a, int n)
{
    for (int i=0; i<n; i++)
    {
        if (a[0] > mass[i] && a[1] != mass[i] && a[2] != mass[i])
            a[0] = mass[i];
        else if (a[1] > mass[i] && a[0] != mass[i] && a[2] != mass[i])
            a[1] = mass[i];
        else if (a[2] > mass[i] && a[1] != mass[i] && a[0] != mass[i])
            a[2] = mass[i];
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru