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

рекурсия - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Урок \n http://www.cyberforum.ru/cpp-beginners/thread331887.html
Помогите что, не так с кодом вот (описание ошибки снизу)... // Эта программа демонстрирует \n последовательность.cpp: главный файл проекта. // которая обеспечивает переход на новую строку. #include "stdafx.h" #include <iostream> setlocale(LC_CTYPE, "Russian"); using namespace std;
C++ поиск разрядов в двухбайтовых словах Дан файл состоящий из двубайтовых слов,количество слов=4096(или он равен 8192 байта) C начало(начиная с первого слова) надо искать в 14 разряде еденицу(перебирая слова по очереди)как только еденица-стоп, затем с этого слова ищем 1-цу в 16 разряде также перебирая слова и ведём подсчёт этих слов одновременно, как только 1-ца в 16 разряде-стоп. Заранее благадарю Дублирование тем запрещено... http://www.cyberforum.ru/cpp-beginners/thread331880.html
C++ Найти количество содержащихся в массиве серий
Помогите реше-ить задачу. Очень срочно надо. Буду благодарен. Задача: Дан файл целых чисел. Найти количество содержащихся в нем серий (то есть наборов последовательно расположенных одинаковых элементов). Например, для файла с элементами 1, 5, 5, 5, 4, 4, 5 результат равен 4.
Программа по нахождению площади квадрата C++
Я только начал изучать этот язык вот так накидал простенькую программу но не работает подчеркивает слово stream, можите подправить чтоб работала #include<stream.h> main(); { float a,b,c; cout << "vvedite hirinu i dlinu \n"; cin>> a,b; c=a*b; cout <<"plohad ravna ",<< c;}
C++ Дана квадратная матрица N,если на главной диагонали в строке элемент равен 0... http://www.cyberforum.ru/cpp-beginners/thread331850.html
Дана квадратная матрица N,если на главной диагонали в строке элемент равен 0, посчитать сумму элементов всей строки. Записать значение элементов вектора В порядка N (B). Помогите написать программу на языке С
C++ Програма неадекватно себя ведет Доброго время суток , помогите пожалуйста с кодом... Тут такое дело - програма запрашивает длинну и высоту стены( ширина 2 едигицы ) Выводи на екран "полотно" + стили оформления (собственно вариации укладки кирпича) Выбираем стиль и дальше начинаються вещи порой неподдающиеся обьяснению ( почему и пишу меседж ) Вот сам код: #include <iostream> #include <cstdlib> подробнее

Показать сообщение отдельно
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
11.07.2011, 17:02     рекурсия
Помогите,пожалуйста, изменить рекурсивную ф-цию.сразу прошу не пугаться размера программы, весь код привожу для возможности отладки, проблема у меня в функции FindEmptyPointer. из-за нее дерево строится в виде, изображенном на рисунках (на клеточке - нижний рисунок и первый рисунок отображают как есть) а необходимо, как на верхнем, тоесть добавлять узлы в один список, пока тот не закончится, затем переходим к другому списку, а выходит так, что в каждый узел кидаем по одному узлу. оч. надеюсь на вашу помощь.


о программе: в каждом узле - разное колличество ссылок на наследующие узлы(см. рис. 2)
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#include <string.h>
#include <iostream>
using namespace  std;
 
struct Node;
struct List{
    List* next;//след. ссылка
    Node* node;//ссылка
    };
struct Node{
    char s; //cимвол
    List* list;//ссылка на список
    };
 
List* MakeSomeList();
Node* Add(char s, Node* root, int &f);
List* FindEmptyPointer(Node* root, List* &Empty);//поиск "пустого" указателя
void Search(Node* root,char s,int &i);//поиск символа в дереве
void DelSomeNode(Node* root,char s);//удаление найденого символа из дерева
 
void Search(Node* root,char s, int &i)
{
if(root)
{
    if(root->s==s)
        i++;    
if(root->list)
{
    if(root->list->node!=NULL)
        return Search(root->list->node,s,i);
}   
    while(root->list->next!=NULL)
        return Search(root->list->next->node,s,i);
}
}
 
void DelSomeNode(Node* root,char s)
{
}
 
void PrintTree(Node* root)
{
if(root)
    {
    cout<<root->s<<" "; 
    if(root->list)
        {
        if(root->list->node!=NULL)
            return PrintTree(root->list->node);
        }   
        while(root->list->next!=NULL)
            return PrintTree(root->list->next->node);
    }
}
 
List* MakeSomeList()
{
    List* p=new List;
    List* ptr=p;
    p->node=NULL;
    for(int i=rand()%2+2;i>0;i--)// создание ссылок наследования узла 2-4
        {
            p->next=new List;
            p->next->node=NULL;//инициализируем НУЛЕМ указатели на узлы
            p=p->next;
        }
    p->next=NULL;
    p->node=NULL;
return ptr;
}
 
Node* Add(char s, Node* root,List* Empty)
{
    if(root==NULL)//если пустое дерево
        {
            root=new Node;
            root->s=s;
            root->list=MakeSomeList();
            return root;
        }
        List* p=FindEmptyPointer(root,Empty);//находим НУЛЕВУЮ ссылку в дереве,
        Empty=NULL;
        p->node=new Node;// по ней создаем узел
        p->node->s=s;
        p->node->list=MakeSomeList();//и этому узлу приписываем список указателей
}
 
List* FindEmptyPointer(Node* root, List* &Empty)//поиск "пустого" указателя
{
    if(Empty!=NULL)
        return Empty;
    if(root)
    {
            if(root->list->node==NULL)
                {
                    Empty=root->list;
                    return Empty;
                }
            if(root->list->node!=NULL)
                return FindEmptyPointer(root->list->node,Empty);
            if(Empty!=NULL)
                return Empty;
            while(root->list->next!=NULL)
                return FindEmptyPointer(root->list->next->node,Empty);
    }
}
 
void main()
{
    char s, sw;//символы для управления меню
    int i=0;//для подсчета колличества символов
    Node* root=NULL;
    List* Empty=NULL;
    do  {
        system("CLS");
        cout<<"1.Add new symb\n2.Print Tree\n3.Delete finded\n4. Search\0.Exit";
        sw=getch();
            switch(sw)
            {
                case '1':cout<<"\n\nInput any symb>>";s=getch();cout<<"     "<<s;Sleep(400);
                        if(root==NULL)root=Add(s,root,Empty);
                        else Add(s,root,Empty);
                    break;
                case '2':cout<<endl; PrintTree(root);system("pause");break;
                case '3':DelSomeNode(root,s);break;
                case '4':cout<<"\nInput char for searching>>";cin>>s;i=0;
                        Search(root,s,i);
                        if(i!=0)    cout<<"There are "<<i<<" same symbols at tree now";
                        else        cout<<"There are no such symbol as '"<<s<<"'!";
                        Sleep(1000);
                    break;
            }
}while(sw!='0');
}
Миниатюры
рекурсия   рекурсия  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru