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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 13:23   #1
Eternal888
Новичок
Джуниор
 
Регистрация: 07.06.2012
Сообщений: 2
По умолчанию Прогу нужно сделать визуализованной в VS10 и справить ошибку вывода дерева

Код:
// фыв.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream>
 
using namespace std;

// Описание дерева
struct Info
{
    int Key;
 
};
// Создание дерева
struct Node
{
    Info data;
    Node *son;
    Node *brother;
};
Node *top=NULL, *son=NULL;
Info *RetInfo = NULL, *DelInfo = NULL;
 
// Поиск элемента в дереве
Info *Search(Node *top, int SearchKey)
{
 
    if(top == NULL)
    {
        return RetInfo;
    }
    if(top -> data.Key == SearchKey)
    {
        RetInfo = &(top -> data);
    }
    else
    {
        if(top!=NULL)
            Search((top -> son), SearchKey);
 
        Search((top -> brother), SearchKey);
    }
    return RetInfo;
}
// Добавление элемента в дерево
void Add(Node *&top, int Key, int AddKey)
{
 
 
    if(top == NULL)
    {
 
        top = new Node;
        top -> data.Key = Key;
        top -> brother = NULL;  
        top -> son = NULL;
 
        return;
    }
    else
    {
        if(top->data.Key == AddKey && top->son==NULL) // добавить сына, если нет сыновей у корня
        {
            Add(top->son, Key, AddKey); 
            return;
        }
        if(top->data.Key == AddKey && top->son!=NULL) 
        {
            if(top->son->brother==NULL)                     // добавить брата сыну, если есть такой
            {
                Add(top->son->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother==NULL) // добавить брата, если есть уже 1 брат
            {
                Add(top->son->brother->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother!=NULL) // добавить брата, если уже есть 2 брата
            {
                
                
                Add(top->son->brother->brother->brother, Key, AddKey);
                return;
            }
        }
        if(top->data.Key != AddKey && top->son!=NULL)   
        {
            Add(top->son->son, Key, AddKey);
        }
    }
 
}
 
//Вывод дерева на экран
void Display(Node *top)
{
    if(top == NULL) return;
    cout<<top->data.Key<<" ";
    if(top->son!=NULL)  
    {
        cout<<endl;
        cout<<top->son->data.Key<<" ";
        cout<<top->son->brother->data.Key<<" ";
        while(top->son->brother)
        {
            top->son->brother=top->son->brother->brother;
            cout<<top->son->brother->data.Key<<" ";
        }
        Display(top->son);
    }
    
 
 
 
 
}
 
 int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL,"Russian");
 
    int otv, SearchKey, lvl, Key, AddKey,g=0;
    do
    {
        cout << "Возможные действия:" << endl
            << "1. Добавить узел в дерево" << endl
            << "2. Вывести дерево на экран" << endl
            << "3. Поиск узла в дереве" << endl
            << "0. Выход" << endl
            << "Ваш выбор:";
        cin >> otv;
        cout << endl;
        system("cls");
        switch(otv)
        {
        case 1:
            cout << "Добавить узел:";
            cin >> Key;
            cout << "После:";
            cin >> AddKey;
            cout << endl;
            Add(top, Key, AddKey);
            cout << "Узел добавлен." << endl << endl;
            break;
        case 2:
            if(top==NULL) cout << " Дерево пустое." << endl;
            else 
            {
                cout << "Содержимое дерева: " << endl;
                lvl=0;
                Display(top);
            }
            cout << endl << endl;
            break;
        case 3:
 
            if(top==NULL) cout << " Дерево пустое." << endl;
            else
            {
                cout << "Найти узел:";
                cin >> SearchKey;
                cout << endl;
                RetInfo = Search(top, SearchKey);
                if(RetInfo == NULL)
                    cout << "Элемент не найден." << endl;
                else
                    cout << "Элемент найден." << top -> data.Key << endl;
                RetInfo=NULL;
            }
            break;
 
        case 0:
            otv = 0;
            break;
        default:
            cout << "Недопустимое значение" << endl << endl;
            break;
        }
    }
    while(otv != 0);
	return 0;
}

Последний раз редактировалось ACE Valery; 07.06.2012 в 13:50.
Eternal888 вне форума Ответить с цитированием
Старый 07.06.2012, 13:51   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Больше ничего не нужно?
А суть задачи и ошибку описывать Пушкин будет?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 07.06.2012, 14:07   #3
Eternal888
Новичок
Джуниор
 
Регистрация: 07.06.2012
Сообщений: 2
По умолчанию Консольное дерево с поиском, добавлением и выводом на экран элементов, при выводе

При выводе через раз вылетает, просьба помочь в исправлении данной ошибки, и если возможно, то и в привязке форм в MS10
Заранее спасибо))
Eternal888 вне форума Ответить с цитированием
Старый 07.06.2012, 15:35   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Ну вылетает, и что? С какой ошибкой? Что вводите, что оно вылетает? С вас щипцами тянуть надо?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно перевести прогу из си в ассеблер как это сделать? Dimasik73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.04.2012 19:17
Нужно сделать прогу DJon82 Фриланс 6 23.08.2010 16:00
и справить ошибку в программе girkoff Общие вопросы C/C++ 6 13.04.2010 13:12
Привествую всех)))помогите справить ошибку MrMorozko Помощь студентам 1 16.12.2009 16:39