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

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

27.04.2010, 19:34. Просмотров 1858. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2010, 19:34
Ответы с готовыми решениями:

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

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

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

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

Вставить рекурсию
Есть программа, она записывает число задом на перед, её нужно записать при...

43
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 21:05 #2
в 33 строке void не нужен, вы же просто вызываете ф-цию, а так все вроде правильно, ф-ция вызывает сама себя, рекурсия есть)

Добавлено через 27 минут
честно, не вникал в миссию вашей программы, но код был ужасен
вот исправил синтаксические ошибки, чтоб программа компилировалась, не знаю, где что должны принимать ф-ции, потому оставил, как есть
но вам советую получше разобраться с ссылками и применять по назначению и точнее определите, где какой тип данных должен быть присущим для переменных, потому что в этом плане у вас вообще бардак и хаос...
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
#include <stdio.h>
 
void inp(int &N, double &X, FILE *ololo)
{
    printf("Sissestage X: ");
    scanf("%lf", &X);
 
    do{
        fscanf(ololo, "%d", &N);
    }while(!feof(ololo) && (N < 15));
}
 
void rec_func(double *H, 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++;
            rec_func(H, i, N, X);
        }while (i < N);
    }
}
 
void output(double *H, double &X, int &N)
{
        int i;
    FILE *trololo;
    trololo = fopen("f2.txt", "w");
 
    fprintf(trololo, "H[0] = 1\n");
    fprintf(trololo, "H[2] = %lf", &X);
 
    for (i = 2; i < N; i++);
        fprintf(trololo, "%lf", H[i]);
 
    fclose(trololo);
}
 
int main()
{
        int N, i;
        double X;
        double H[50];
 
    FILE *ololo;
    ololo = fopen("f1.txt", "r");
 
    inp(N, X, ololo);
    rec_func(H, i, N, X);
 
    fclose(ololo);
 
    output(H, X, N);
 
    return 0;
}
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
27.04.2010, 22:46  [ТС] #3
ыыы у меня хаотичный метод безумного программирования!!

Добавлено через 34 минуты
а у меня формула правильная? а то результаты очень некрасивые
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 22:48 #4
одному вам известна формула в оригинале
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
27.04.2010, 23:01  [ТС] #5
и то верно , как бы её правильно то записать H(итый) = X * H(предыдущий) - (i -1) * H(перед предыдущий тоесть i-2) жесть
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 23:15 #6
H[i] = X * H[i-1] - (i*H[i-2] - H[i-2]);
как в обычной математике раскроем скобочки и упростим выражение
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
27.04.2010, 23:18  [ТС] #7
дело оказалось не в формуле, наверно чёто с типом данных или гдето ещё косяк
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 16:51  [ТС] #8
как последнюю формулу в С написать?
0
Миниатюры
Постигая рекурсию.  
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 19:30 #9
C
1
2
3
4
int S = 0;
 
for (i = 0; i <= N; i++)
    S += A[i] * H[i];
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 19:54  [ТС] #10
понятно пасиба)
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 22:24  [ТС] #11
что означает такой результат и как с ним бороться?
0
Изображения
 
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 22:36 #12
А можно полностью задание? С самого начала? Потому как без задания проверить ваш код на корректность не представляется возможным))) В крайнем случае попробую переписать код.

Добавлено через 7 минут
Хотя уже понял...
1. Читаем из F1 в массив A N < 15 элементов;
2. Вводим X с клавиатуры;
3. С помощью рекурсивной функции вычисляем значения элементов массива H. При этом изначально
H[0] = 1, H[1] = X, H[i] = X * H[i - 1] - (i - 1) * H[i - 2], i меняется от 2 до N;
4. В файл F2 выводим сумму произведений соответствующих элементов массивов A и H.

Так?
Сейчас подумаем...
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 22:42  [ТС] #13
да всё верно.
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 22:58 #14
Вроде так.
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
#include <stdio.h>
 
#define N 15
 
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()
{
    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");
        getch();
        return -1;
    }
    
    while(!feof(fin))
        fscanf(fin, "%d", &A[n++]);
    
    close(fin);
        
    printf("Input X: ");
    scanf("%d", &X);
    
    H[0] = 1;
    H[1] = X;
    
    calcH(H, X, 2, n);
    
    for (i = 0, S = 0; i < n; i++)
        S += A[i] * H[i];
    
    FILE *fout;
    
    if ((fout = fopen("F2.txt", "w+")) == NULL)
    {
        printf("error writing file");
        getch();
        return -1;
    }
    
    fprintf(fout, "%d", S);
    fclose(fout);
    
    return 0;
}
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 23:02  [ТС] #15
не работает =(
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 23:03 #16
Что говорит?
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 23:05  [ТС] #17
после ввода Х виснет
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 23:10 #18
Какой X вводите?
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
29.04.2010, 23:16  [ТС] #19
опс кажется из файла надо вводить и N и A элементы, чёто не пойму я это задание
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
29.04.2010, 23:18 #20
Всё-таки по-моему моя реализация верна. Потому как стандартно принято, что если читается массив из файла, программист сам должен заботиться о подсчёте количества элементов.
0
29.04.2010, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2010, 23:18

задача на рекурсию в си++
Даны числа a и b. Определите, сколько существует последовательностей из a...

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

Задача на рекурсию
Помогите решить след. задачу: Вот мой вариант, но здесь не сохраняется...


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

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

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