Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
1

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

27.04.2010, 19:34. Просмотров 2431. Ответов 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
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2010, 19:34
Ответы с готовыми решениями:

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

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

Задача на рекурсию
Вот код проги которую я написал: #include &lt;iostream&gt; using namespace std; int factr(double...

Задача на рекурсию
Всем доброго времени суток. Прошу подсказать мне условие задачи на рекурсию(нам дали задание самим...

43
Эксперт С++
5037 / 3097 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
03.05.2010, 15:30 41
Нет, выдает 8
Просто она выдаёт их, начиная с нулевого элемента. получается
0 1 2 3 4 5 6 7
А теперь пересчитай их. Насчитаешь 8
0
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 не туда смотрел ))
0
Эксперт С++
5037 / 3097 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
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, а потом выводим её и на экран, и в файл
1
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
03.05.2010, 16:11  [ТС] 44
о понятно)) ну думаю всё готово для сдачи, спасибо добрым программистам
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2010, 16:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

понять рекурсию
Здравствуйте! Хочу понять рекурсию:) для этого хочу реализовать рекурсивный выход из лабиринта....

Задача на рекурсию
помогите написать пожалуйста программу на с++ по теме рекурсия. Задано действительное A, найти...

Задача на рекурсию
Нашел одну задачу, она по моему на рекурсию, но не могу реализовать это. Сколько существует...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Опции темы

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