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

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

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

Перевод из Pascal в С++ - C++

05.07.2012, 15:39. Просмотров 1495. Ответов 3
Метки нет (Все метки)

Для заданного целого N вычислить значение суммы(с помощью рекурсии)
Pascal
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
const n = 4;
 
function f(const lvl : integer; sum : integer) : real;
var
   s : real;
   i : integer;
begin
   if lvl = 0 then f := 1 / sum
   else
   begin
      s := 0;
      for i := 1 to n do s := s + f(lvl - 1, sum + i);
      f := s;
   end
end;
 
var s : real;
    i1, i2, i3, i4 : integer;
begin
   // Это все - для проверки, правильно ли работает рекурсия
   s := 0;
   for i1 := 1 to n do
      for i2 := 1 to n do
         for i3 := 1 to n do
            for i4 := 1 to n do
               s := s + 1 / (i1 + i2 + i3 + i4);
   writeln(s:12 :8);
 
   // Вот он, вызов функции:
   writeln(f(n, 0):12 :8);
end.
Теперь о том, как это работает:
на примере N = 2.
Что надо посчитать при N = 2? Вот что:
(1/(1+1)+1/(1+2))+(1/(2+1)+1/(2+2))
При lvl=2 будет считаться вся формула, при lvl=1 - только то, что в первой или второй скобке, при lvl=0 - будет считаться каждое из слагаемых внутри скобки.

f(2, 0) = f(1, 0 + 1) + f(1, 0 + 2)
Однако, условие окончания рекурсии не достигнуто, lvl = 1, поэтому продолжаем раскрывать дальше:
= (f(0, 1 + 1) + f(0, 1 + 2)) + (f(0, 2 + 1) + f(0, 2 + 2))
А теперь смотрим на формулу сверху. Не правда ли, если взять и единицу разделить на второй параметр, то получится как раз то, что нам надо? И случай как раз подходящий: lvl = 0, дальше раскрывать формулу не нужно. Поэтому просто возвращаем тут значения, и начинаем "раскручивать" рекурсию в обратном направлении, то есть, просто суммируем то, что вернулось из более глубоких вызовов. И получаем результат...

Нужен перевод в С++
0
Миниатюры
Перевод из Pascal в С++  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод из Pascal в С++ (C++):

перевод из Pascal в C++ - C++
Здравствуйте!Задача: Прямоугольный садовый участок шириной N и длиной M метров разбит на квадраты со стороной 1 метр. На этом участке...

Перевод из Pascal в C++ - C++
Помогите,пожалуйста, с переводом программы из паскаля в C++ uses crt; function F(x:real):real; begin F:=1+x-x*x*x; ...

Перевод с Pascal на C++ - C++
Код на паскале, помогите его переписать в С ++ . Очень нужно ребят . Последняя задача. const mi = 100; type matrix = array of...

Перевод с Pascal на С++ - C++
Type predpr=Array of longint; rasp=Array of longint; На языке С++, как это будет выглядеть?

Перевод с pascal на c++ - C++
привет всем , помогите ПОЖАЛУЙСТА перевести с pascal на c++. пытался перевести, но с++ сложноват , на изучение языка времени...

Перевод с Pascal на C++ - C++
Вечер добрый. Перевожу с pascal на c++. Подскажите или отредактируйте код, что не так? program z1; var a,b:real; begin; ...

3
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
05.07.2012, 15:55 #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
#include "iostream"
#include "iomanip.h"
 
const int n = 4;
 
double f(const int lv1, int sum)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / summ;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
         s = s + f(lv1 - 1, sum + i);
      return s;
   }
}
 
int main()
{
   double s;
   int i1, i2, i3, i4;
 
   s = 0;
   for (i1 = 1; i <= n; i++)
      for (i2 = 1; i2 <= n; i2++)
         for (i3 = 1; i3 <= n; i3++)
            s = s + 1.0 / (i1 + i2 + i3);
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << s << endl;
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0) << endl;
 
   return 0;
}
0
Анастасия Ан
0 / 0 / 0
Регистрация: 13.03.2012
Сообщений: 14
05.07.2012, 16:09  [ТС] #3
Цитата Сообщение от Intel~lect Посмотреть сообщение
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
#include "iostream"
#include "iomanip.h"
 
const int n = 4;
 
double f(const int lv1, int sum)
{
   double s;
   int i;
 
   if (lv1 == 0)
      return 1.0 / summ;
   else
   {
      s = 0;
      for (i=1; i<=n; i++)
         s = s + f(lv1 - 1, sum + i);
      return s;
   }
}
 
int main()
{
   double s;
   int i1, i2, i3, i4;
 
   s = 0;
   for (i1 = 1; i <= n; i++)
      for (i2 = 1; i2 <= n; i2++)
         for (i3 = 1; i3 <= n; i3++)
            s = s + 1.0 / (i1 + i2 + i3);
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << s << endl;
 
   cout << setiosflags(ios::fixed | ios::showpoint) << setprecision(8)
          << f(n, 0) << endl;
 
   return 0;
}
Спасибо вам большое! А вы не проверяли, это работает? Просто я пока не могу сама проверить
0
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
05.07.2012, 16:15 #4
Нет, еще не проверял. Сейчас просто возможности нет
0
05.07.2012, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 16:15
Привет! Вот еще темы с ответами:

Перевод с Pascal на С++ - C++
Будьте добры, кто понимает, кому не сложно, очень нужна помощь в переводе. program z2; var a,b,s : integer; begin ...

перевод с Pascal на C++ - C++
Const Max=1000; Eps=0.00001; Type Para=record X: integer;

Перевод из Pascal в C++ - C++
Добрый день, дорогие форумчане) Буду благодарен за перевод) uses crt; const nmax = 20; type mtr = array of integer;

Перевод с pascal на c++ - C++
помогите перевести следующий текст с pascal на c++ uses crt; var mas: array of integer; i,a,b,min,max,r:integer; begin ...


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

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

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