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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2009, 23:08   #1
Alex26RusLink
Пользователь
 
Регистрация: 08.07.2009
Сообщений: 34
По умолчанию треугольник Бернулли — Эйлера

В вершине треугольника стоит единица. Элемент в ряду с нечётным номером равен сумме элементов стоящих в предыдущем ряду правее наших элементов, а элемент в ряду с чётным номером равен сумме элементов стоящих в предыдущем ряду левее нашего элемента(верхняя единица стоит в ряду с номером 0)

Первые строки треугольника выглядят слудующим образом:
PHP код:
                                          1
                                       1     0
                                    0     1     1
                                 2     2     1     0
                              0     2     4     5     5
                          16    16    14    10     5     0
                       0     16    32    46    56    61    61 
Вывести на экран первые 16 строк такого треугольника.

Получился вот такой вот код. Что то потерял и работает не правильно. Помогите кто может.
Код:
#include <iostream>

using namespace std;

int main()
{
    int a[16],b[16],i,j,;
    for (i=0; i<=15; i++) a[i]=b[i]=0;

    a[0]=1;
    cout<<a[1]<<endl;

    for (i=1; i<=16; i++)
    {
          if (i%2!=0)
          {
              b[i]=0;
              for (j=i;j>0; j--)
                b[i-1]=b[i]+a[j-1];
          }
            else
            {
                b[0]=0;
                for (j=1;j<=i;j++)
                    b[j]=b[j-1]+a[j-1];
            }

          a[i]=b[i];
          for (j=1; j<=i; j++)
            cout<<b[j]<<" ";
            cout<<endl;
    }
    return 0;
}
Ход мыслей:
Определить чётность/нечётность строки. Если строка чётная, то вначале строки ставится ноль, а дальше дописывается суммы элементов предыдущей строки стоящих левее данного элемента. Если строка нечётная, то ноль ставится в конце строки, а дальше дописывается суммы элементов предыдущей строки стоящих правее данного элемента.
Если что-то неправильно поправьте
Alex26RusLink вне форума Ответить с цитированием
Старый 13.10.2009, 01:08   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Во-первых, Bы посеяли переменную вот здесь: int a[16],b[16],i,j,;
Во-вторых, условие нечетко и противоречиво непонятно, где четные строки, а где нет. Если та, где единичка, нечетная - то вообще несоответствие условию разве что предположить, что строки нумерируются с нулевой. Дальше еще 1 ошибка -
a[0]=1;
cout<<a[1]<<endl; - непонятно, выводить ведь будет ранее проинициализированный 0, зачем это?
Ну а главное - куча несостыковок с индексацией. В предидущем примере, как я подозреваю, тоже именно это - проинициализировали первым нулевой, а выводите первым первый. Индексы то с 0, то с 1, то вообще неучтена размерность. Возникает чувство, что Вы недавно перешли с Паскаля на плюсы. Утешу - это временное. Общее впечатление - подозреваю, что программированием занимаетесь не сами, а с учителем-"учебщиком", скажем, это задание из школы, а школа, как извесно, влияет плохо
Переделал Ваш код так, чтоб вывод совпадал с примером и поменял всю индексацию на единчиную. Если хотите - меняйте обратно на 0 и смотрите различия, из-за которых не работал Ваш соурс. Иначе - ждите других решений, а я спать, если что - можна закончить утром.
Код:
#include <iostream>
using namespace std;
int main()
{
    long long a[17],b[17],i,j;
    for (i=0; i<=16; i++) a[i]=b[i]=0;
    a[1]=1;
    cout<<a[1]<<endl;
    for (i=2; i<=16; i++)
    {
          if (i%2==0)
          {
              b[i]=0;
              for (j=i-1;j>0; j--)
                b[j]=b[j+1]+a[j];
          }
            else
            {
                b[1]=0;
                for (j=2;j<=i;j++)
                    b[j]=b[j-1]+a[j-1];
            }
          for (j=1;j<=16;j++){a[j]=b[j];}
          for (j=1; j<=i; j++)
            cout<<b[j]<<" "; 
            cout<<endl;
    }
    return 0;
}
P.S. Утро уже настало и прошло. Если есть еще какие-нибудь вопросы - задавайте.

Последний раз редактировалось LeBron; 13.10.2009 в 16:48.
LeBron вне форума Ответить с цитированием
Старый 13.10.2009, 14:27   #3
Alex26RusLink
Пользователь
 
Регистрация: 08.07.2009
Сообщений: 34
По умолчанию

большое спасибо за помощь
Alex26RusLink вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализация пути эйлера на Delphi J.K. Помощь студентам 4 12.06.2009 21:21
Метод Эйлера и Рунге-Кута HECTOR.A. Помощь студентам 0 11.05.2009 16:24
Круги Эйлера NecRomant Общие вопросы Delphi 2 17.12.2008 15:07