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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
#1

Постигая рекурсию. - C++

27.04.2010, 19:34. Просмотров 1760. Ответов 43
Метки нет (Все метки)

Прошу поправить мою прогу. По заданию должна быть с рекурсией, я понимаю как она работает, но как правильно её написать я не уверен.
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void inp(int *N, double *X)
{
     
     printf("Sissestage X: ");
     scanf("%d", &X);
     
     FILE *ololo;
     ololo = fopen("f1.txt", "r");
     do
     {
     fscanf(ololo, "%d", &N);
     }
     while(!feof(ololo) && (*N < 15));
}
 
void rec_func(double *H[20], int *i, int *N, double *X)
{    
     double temp;
     double temp2;
     {
     H[0] = 1;
     H[1] = X;
     if (*i == 2)
     {
            do
            {
            H[i] = X * H[i-1] - (i-1) * H[i-2];
            *i = *i+1;
            void rec_func(H, i, N, X);
            while (i < N);
     }
     fclose(ololo);
}
 
void output(char *H, int *X)
{
     FILE *trololo;
     trololo = fopen("f2.txt", "w");
     fprintf("H[0] = 1")
     fprintf("H[2] = %d", &X)
     for (i = 2; i < N; i++);
     {
     fprintf("lf", &H[i]);
     }
     fclose(trololo);
     
     
int main()
{
    int N;
    double X;
    
    //char A[50];
    char H[50];
    inp(&X, &N);
    
    rec_func(H, i, N, X);
    output(H, X);
}
само задание - из файла F1 вводим чило элементов N и просто цифра X, затем при помощи рекурсии по той формуле что в коде находим все H[i] и выводим результат в файл F2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2010, 19:34     Постигая рекурсию.
Посмотрите здесь:

Задачи на рекурсию - C++
Здорова господа! У меня щас появилась проблема. Решаю задачки на рекурсию от первая задача //палиндромы//создать функцию...

Вставить рекурсию - C++
Есть программа, она записывает число задом на перед, её нужно записать при помощи рекурсии #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Задача на рекурсию - C++
помогите написать пожалуйста программу на с++ по теме рекурсия. Задано действительное A, найти среди чисел 1; 1+1/2; 1+1/2+1/3;.... ...

Задача на рекурсию - C++
Задание: написать функцию умножения двух чисел, используя только операции сложения и рекурсии. Не понимаю как это сделать( Прошу...

Задача на рекурсию - C++
Задание : Напишите функцию возведения в степень, которая работала бы как для положительных, так и для отрицательных значений n:...

Реализовать рекурсию - C++
Доброго времени суток! Никак не пойму как это сделать, хотябы направьте меня, что бы самому додумать Пусть в алгебраической записи...

Задача на рекурсию - C++
С помощью рекурсии вычислить произведение ненулевых элементов динамического массива. Кто-то знает? Вот такой вот фрагмент есть, но он...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.05.2010, 15:30     Постигая рекурсию. #41
Нет, выдает 8
Просто она выдаёт их, начиная с нулевого элемента. получается
0 1 2 3 4 5 6 7
А теперь пересчитай их. Насчитаешь 8
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
03.05.2010, 15:34  [ТС]     Постигая рекурсию. #42
C++
1
2
for (i = 0; i < N; i++) 
       fprintf(fout, "%d\n", pop());
можно так писать в файл из последнего стека?

Добавлено через 1 минуту
о и правда чтото я на счёт N не туда смотрел ))
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.05.2010, 15:47     Постигая рекурсию. #43
Нет, так не получится. Ведь вы когда выводили стэк на экран, вы уже использовали функцию pop, а она именно вытаскивает элементы из стека, и в самом стеке их не оставляет. Можно модифицировать код так:

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
#include <stdio.h>
 
#define n 15
 
int tos = 0;
int *stck;
 
void push(int T, int size)
{
    if(tos == size)
    {
        printf("Stack is full\n");
        return;
    }
        
    stck[tos] = T;
    tos++;
}
 
int pop()
{
    if(tos == 0)
    {
        printf("Stack is empty\n");
        return 0;
    }
    
    tos--;
    
    return stck[tos];
}
 
void calcH(int *H, int X, int i, int N)
{
    H[i] = X * H[i - 1] - (i - 1) * H[i - 2];
    i++;
    
    if (i != n)
        calcH(H, X, i, N);
}
 
int main(void)
{
    int A[n];
    int X;
    int H[n];
    int N = 0;
    int S;
    int i;
    
    FILE *fin;
    
    if ((fin = fopen("F1.txt", "r")) == NULL)
    {
        printf("error reading file");
        getchar();
        return -1;
    }
    
    fscanf(fin, "%d", &N);
    
    if (N >= 15)
    {
        printf("ERROR!!!!!!");
        getch();
        return -1;
    }
          
    while(!feof(fin))
        for (i = 0; i < N; i++)
            fscanf(fin, "%d", &A[i]);
    
    
    fclose(fin);
    
    stck = (int *)malloc(N * sizeof(int)); // Çäåñü ïðîèñõîäèò äèГ*Г*ìè÷åñêîå âûäåëåГ*ГЁГҐ ГЇГ*ìÿòè ïîä Г±ГІГҐГЄ - Г¬Г*Г±Г±ГЁГў öåëûõ Г·ГЁГ±ГҐГ«.
                                           // ÔóГ*êöèÿ malloc(n) âûäåëÿåò êóñîê îïåðГ*ГІГЁГўГ*îé ГЇГ*ìÿòè Г°Г*çìåðîì n (ñâîåãî Г*ðãóìåГ*ГІГ*) ГЎГ*éò.
                                           // Г‚ Г¤Г*Г*Г*îì ñëó÷Г*ГҐ âûäåëÿåòñÿ N * sizeof(int) ГЎГ*éò, ГІ.ГЄ. N - ГўГ±ГҐГЈГ® ëèøü êîëè÷åñòâî
                                           // ýëåìåГ*òîâ. Åñëè, Г±ГЄГ*æåì, N = 6, ГІГ® ГґГіГ*êöèÿ malloc(N) âûäåëèò 6 ГЎГ*éò. ГЌГ® Г*Г*Г¬ æå Г*ГіГ¦Г*Г®
                                           // Г§Г*ГЇГЁГ±Г*ГІГј Гў âûäåëåГ*Г*ГіГѕ ГЇГ*ìÿòü Г*ГҐ 6 ГЎГ*éò, Г* 6 öåëûõ Г·ГЁГ±ГҐГ«, ГЄГ*æäîå ГЁГ§ êîòîðûõ Г§Г*Г*ГЁГ¬Г*ГҐГІ
                                           // 4 ГЎГ*éòГ* (Г°Г*çìåð ГІГЁГЇГ* int). Г’.ГҐ. Г*Г*Г¬ Г*Г*äî âûäåëèòü 6 * 4 = 6 * sizeof(int).
                                           // Г„Г*ëåå. Г‡Г*Г·ГҐГ¬ (int *). ÔóГ*êöèÿ malloc âûäåëÿåò ГЇГ*ìÿòü ГЁ âîçâðГ*Г№Г*ГҐГІ ГіГЄГ*Г§Г*òåëü
                                           // Г*Г* Г*Г*Г·Г*ëî âûäåëåГ*Г*îé ГЇГ*ìÿòè. Г‚ ïðèГ*öèïå, ìîæГ*Г® ГЁ Г*ГҐ ïðåîáðГ*çîâûâГ*ГІГј ГҐГЈГ® ГІГЁГЇ
                                           // Гў ГІГЁГЇ "ГіГЄГ*Г§Г*òåëü Г*Г* int", Г*Г® ëó÷øå ГЅГІГ® ñäåëГ*ГІГј, ГІ.ГЄ. ìû ГўГ±Вё-ГІГ*ГЄГЁ õîòèì ïîëó÷èòü
                                           // Гў èòîãå Г¬Г*Г±Г±ГЁГў ГЁГ§ N _öåëûõ_ Г·ГЁГ±ГҐГ«, Г* Г*ГҐ ïðîñòî ГіГ·Г*ñòîê ГЇГ*ìÿòè Г°Г*çìåðîì N * sizeof(int).
    
    for(i = 0; i < N; i++)
    {
        fscanf(fin, "%d", &A[i]);
        push(A[i], N);
    }
    
    printf("Stack of A:\n");
        for(i = 0; i < N; i++)
                printf("%d\n", pop());
    
    for(i = 0; i < N; i++)
          push(0, N);
          
    tos = 0;
     
    printf("Input X: ");
    scanf("%d", &X);
    
    H[0] = 1;
    H[1] = X;
    
    calcH(H, X, 2, N);
    
    for (i = 0; i < N; i++) // Г“ ГўГ*Г± çäåñü áûëî óñëîâèå i <= N, Г* Г*Г*äî i < N
        printf("H[%d] = %d\n", i, H[i]);
        
    for(i = 0; i < N; i++)
          push(H[i], N);
    
    FILE *fout;
    
    if ((fout = fopen("F2.txt", "w+")) == NULL)
    {
        printf("error writing file");
        getch();
        return -1;
    }
    
    printf("Stack of H:\n");
    
    int temp;
    
    for(i = 0; i < N; i++)
    {
        temp = pop();
        printf("%d\n", temp);
        fprintf(fout, "%d\n", temp);
    }
          
    for (i = 0, S = 0; i < N; i++)
        S += A[i] * H[i];
    
    fprintf(fout, "%d\n", S);
    
    for (i = 0; i < N; i++) // Г“ ГўГ*Г± çäåñü áûëî óñëîâèå i <= N, Г* Г*Г*äî i < N
       fprintf(fout, "H[%d] = %d\n", i, H[i]);
       
    free(stck);
    fclose(fout);
    
    getch();
    return 0;
}
Добавлено через 1 минуту
Т.е. мы вытаскиваем элемент из стека во временную переменную temp, а потом выводим её и на экран, и в файл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2010, 16:11     Постигая рекурсию.
Еще ссылки по теме:

Программа на рекурсию - C++
Задача о рюкзаке. В рюкзаке объёмом V содержится запас из N предметов. Для каждого предмета задан объем и стоимость. В рюкзак можно...

Задача на рекурсию - C++
Помогите решить след. задачу: Вот мой вариант, но здесь не сохраняется порядок: void Func() { int x; cin&gt;&gt;x; if(0==x) ...

Задачка на рекурсию... - C++
в общем нужно сделать прогу чтоб выводила дерево файлов и папок указанной директории.... Сделать это надо с помощью рекурсии... ...

понять рекурсию - C++
Здравствуйте! Хочу понять рекурсию:) для этого хочу реализовать рекурсивный выход из лабиринта. точка (.) можно ходить, решетка (#) стена,...

В файл рекурсию - C++
Как мне результаты этой программы вывести в файл ? #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; void...


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

Или воспользуйтесь поиском по форуму:
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
03.05.2010, 16:11  [ТС]     Постигая рекурсию. #44
о понятно)) ну думаю всё готово для сдачи, спасибо добрым программистам
Yandex
Объявления
03.05.2010, 16:11     Постигая рекурсию.
Ответ Создать тему
Опции темы

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