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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2015, 19:26   #1
kef130
 
Регистрация: 29.11.2015
Сообщений: 5
По умолчанию Рекурсивно вычислить выражение - C++

Вычислить результат выражения

Зависимость а, это массив А в программе.аналогично с b.
Вот, что я написал. Но считает не совсем корректно.
Код:
#include<iostream>
 
 
using namespace std;
 
long double res(int);
int i, n, k;
long double A[] = { 10,9,8,7,6,5,4,3,2,1 };
long double B[] = { 1,2,3,4,5,6,7,8,9,10 };
 
void main()
{
    cout << "Enter n "; 
    cin >> n;
    k = n;
    cout << endl << "Mas A " << endl;
    for (i = 0; i < n; i++)
        {
            cout << A[i] << " ";
        }
    cout << endl << endl << "Mas B " << endl;
    for (i = 0; i < n; i++)
        {
            cout << B[i] << " ";
        }
    cout << endl << endl << "Res = " << res(n) << endl;
    system("pause");
}
 
long double res(int n)
{
    if (n == 1)
    {
        return (A[n-1] / B[n-1]);
    }
    else 
    {
        return A[n - 2] / (B[n - 2] + res(n - 1));
    }
}
kef130 вне форума Ответить с цитированием
Старый 29.11.2015, 21:31   #2
[CODER]
Форумчанин
 
Аватар для [CODER]
 
Регистрация: 02.02.2010
Сообщений: 305
По умолчанию

Код:
#include <iostream>

using namespace std;

long double res(int);

long double A[] = { 10,9,8,7,6,5,4,3,2,1 };
long double B[] = { 1,2,3,4,5,6,7,8,9,10 };

int main() {
   cout << " = " << res(0) << endl; 
}


long double res(int n) {
    if (n == 0) { 
        cout << A[n] << "/(" ;
        return A[n] / res(n + 1);
    } else if (n < sizeof(A)/sizeof(A[0])-1) { 
        cout << B[n-1] << "+" << A[n] << "/(";
        return B[n-1] + A[n] / res(n+1);
    } 
    cout << B[n-1] << "+" << A[n] << "/" << B[n];
    for (int i = 0; i < sizeof(A)/sizeof(A[0])-1; i++) cout << ")";
    return B[n-1] + A[n] / B[n];
}
В функции res, можно удалить все строки содержащие cout.

P. S. в С++ индексы массивов начинаются с нуля и есть возможности узнать ихний размер
Skype: CODERua
[CODER] вне форума Ответить с цитированием
Старый 29.11.2015, 22:29   #3
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

[CODER]
Код:
sizeof(A)/sizeof(A[0])-1)
Не могли бы Вы сказать что делает эта операция?
Dima-91 вне форума Ответить с цитированием
Старый 29.11.2015, 23:26   #4
kef130
 
Регистрация: 29.11.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
[CODER]
Код:
sizeof(A)/sizeof(A[0])-1)
Не могли бы Вы сказать что делает эта операция?
это можно заменить на
Код:
else if (n < (k - 1))
перед этим ввести количество элементов, которых нам надо взять с указанного массива и присвоить его переменной k. итог будет тем же, только выражение будет решатся до указанного элемента массива.
kef130 вне форума Ответить с цитированием
Старый 29.11.2015, 23:28   #5
kef130
 
Регистрация: 29.11.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от [CODER] Посмотреть сообщение

В функции res, можно удалить все строки содержащие cout.

P. S. в С++ индексы массивов начинаются с нуля и есть возможности узнать ихний размер
спасибо. немножко переделал под себя, но в итоге все понятно
kef130 вне форума Ответить с цитированием
Старый 29.11.2015, 23:34   #6
[CODER]
Форумчанин
 
Аватар для [CODER]
 
Регистрация: 02.02.2010
Сообщений: 305
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
[CODER]
Код:
sizeof(A)/sizeof(A[0])-1)
Не могли бы Вы сказать что делает эта операция?
Вычисляет количество элементов в массиве.


Цитата:
Оператор sizeof возвращает размер в байтах объекта или типа данных.
Зная размер массива в байтах и размер одного элемента массива, вычисляем длину массива.
Например:
- sizeof(A[0]) вернет 8, это количество байт для типа данных long double (для инта вернет 4, для шорта 2, для чара 1 и т. п.)
- sizeof(A) для массива из 10 элементов типа long double, sizeof вернет размер 80 (т. к. размер каждого элемента - 8 байт).
- разделив эти значения (80 / 8) мы получим количество элементов в массиве ( 10 ).
Skype: CODERua
[CODER] вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить выражение nhbh Помощь студентам 5 17.12.2014 22:59
Вычисление a^n рекурсивно и не рекурсивно. Katerina_K Помощь студентам 3 02.07.2014 11:59
Вычислить выражение: Nubaster Паскаль, Turbo Pascal, PascalABC.NET 3 31.05.2011 13:52
вычислить выражение Jereme Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 08.01.2010 16:21
Вычислить выражение ai\ekcah^p Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 04.12.2009 17:06