С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
MacPrinCip
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 33
#1

Для последовательности составить программу печати n-го элемента - C++

20.01.2014, 00:39. Просмотров 805. Ответов 11
Метки нет (Все метки)

Кто нибудь может подсказать, решая данную задачу, с чего начать???

Для последовательности http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{1} = 1, {a}_{n+1} = n * {a}_{n} + 1/n составить программу печати n-го элемента в виде
обыкновенной несократимой дроби.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 00:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для последовательности составить программу печати n-го элемента (C++):

Составить программу печати n-го элемента в виде обыкновенной несократимой дроби - C++
Для последовательности а1 = 1, an+1 = an + 1/(1 + an) составить программу печати n-го элемента в виде обыкновенной несократимой дроби.

составить программу печати n-го элемента в виде обыкновенной несократимой дроби - C++
Столкнулся с такой вот задачей, не подскажете как это провернуть??? Для последовательности а1 = 1, an+1 = n⋅ an + 1/n составить...

Составить программу для заданной последовательности - C++
Здравствуйте! Есть такой набор чисел: 0 1 2 3 4 5 6 7 8 9 10 22 30 41 50 61 70 81 90 111 200 311 400 511 600 711 800 911 2000 3111 4000...

Составить программу для нахождения минимального элемента массива - C++
1)Известен массив x1,х2,х3,…,х7. Составить программу для нахождения минимального элемента. Исходный массив, найденный элемент вывести на...

Составить программу для нахождения номера максимального элемента массива - C++
4)Известен массив x1,х2,х3,…,х9. Составить программу для нахождения номера максимального элемента. Исходный массив, найденный номер...

Prolog. Написать программу, которая осуществляет ввод с клавиатуры номера элемента и выводит значение для последовательности - C++
Написать программу, которая осуществляет ввод с клавиатуры номера элемента и выводит значение Xn для последовательности Xn+1 = 2Xn - Xn-1...

11
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
20.01.2014, 02:25 #2
Необходимо посчитать переменную в цикле через рекуррентное соотношение.
Можно использовать вместо цикла рекурсию.
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
20.01.2014, 03:04 #3
у вас формула точно правильная?
0
gunslinger
случайный прохожий
1146 / 764 / 197
Регистрация: 20.07.2013
Сообщений: 2,137
20.01.2014, 05:05 #4
На Builder'e:
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
// ULONG - unsigned long
struct drob  // структура для хранения числителя и знаменателя дроби
{
  ULONG chis, znam;
} number;
int nod (ULONG x, ULONG y)  // наибольший общий делитель
{
  ULONG j = (x<y) ? x : y;  // находим минимальное из двух чисел
  int k;
  for (ULONG i = 1; i <= j; i++)
    if (x%i==0 && y%i==0)
      k=i;
  return k;
}
drob norm(drob z)  // сокращение дроби
{
  ULONG temp = nod(z.chis, z.znam);
  z.chis /= temp;
  z.znam /= temp;
  return z;
}
drob a(int n)  // дробь в общем виде (исходя из формулы)
{
  ULONG x, y;
  if (n==1)
  {
    x = 1;
    y = 1;
  }
  else
  {
    // при n>9 происходит "переполнение", получаются неправильные значения
    // для сравнения см. функцию test
    x = (n-1)*a(n-1).chis*(n-1)+a(n-1).znam;
    y = (n-1)*a(n-1).znam;
  }
  number.chis = x;
  number.znam = y;
  return number;
}
long double test(int n)  // для проверки
{
  return (n==1) ? 1 : (n-1)*test(n-1)+1./(n-1);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String res = "";
  for (int i = 1; i <= 9; i++)
  {
    a(i);
    res += "a" + IntToStr(i) + " = " + FloatToStr((0.+number.chis)/number.znam) + " = " + \
    IntToStr(norm(number).chis) + "/" + IntToStr(norm(number).znam) + "\n";
  }
  ShowMessage(res);
}
0
Миниатюры
Для последовательности составить программу печати n-го элемента  
MacPrinCip
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 33
20.01.2014, 07:52  [ТС] #5
Цитата Сообщение от some_name Посмотреть сообщение
у вас формула точно правильная?
Для последовательности составить программу печати n-го элемента
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
20.01.2014, 09:44 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Возможно лучше будет ввести новый класс дробь и перегрузить для него операции суммы и умножения на число. Не забываем при возможности сокращать дробь:
Кликните здесь для просмотра всего текста

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
#include<iostream>
#include<cmath>
void Adduction(long long int& x, long long int& y)
{
    long long int k = 2;
    do
    {
        if ((x%k == 0) && (y%k == 0))
          {  x /=k; y /= k; };
    }
    while(k++ < sqrt(x));
}
class Fraction
{
    long long int numerator;
    long long int denominator;
public:
    Fraction (int x, int y): numerator(x), denominator(y)
    {}
    Fraction& operator+ (Fraction Frac)
    {
        numerator = numerator * Frac.denominator + denominator * Frac.numerator;
        denominator = denominator * Frac.denominator;
        Adduction(numerator, denominator);
        return *this;
    }
    Fraction& operator* (int number)
    {
        numerator = numerator * number;
        Adduction(numerator, denominator);
        return *this;
    }
    void Show() const
    {
        std::cout << numerator << '/' << denominator << std::endl;
    }
};
int main()
{
    system("chcp 1251>0");
    int n;
    Fraction a(1, 1);
    std::cout << "Введите номер элемента: "; std::cin >> n;
    for (int k = 2; k <= n; k++)
        a = a * k + Fraction (1, k);
    a.Show();
 
    return 0;
}
0
ya_noob
_
203 / 147 / 9
Регистрация: 08.10.2011
Сообщений: 432
20.01.2014, 11:04 #7
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
#include <iostream>
using namespace std;
 
int gcd( int a, int b )
{
    while ( a && b )
        if ( a %= b )
            b %= a;
    return a ? a : b;
}
 
int main()
{
    int n;
    int p = 1, q = 1; // p / q
    int g;
 
    cin >> n;
    for ( int i = 1; i < n; ++i )
    {
        p = p * i * i + q;
        q *= i;
        g = gcd( p, q );
        p /= g;
        q /= g;
    }
    cout << p << '/' << q << endl;
 
    return 0;
}
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
20.01.2014, 11:27 #8
Простой подсчет показывает, что ваша программа считает не верно. Проверьте...
0
ya_noob
_
203 / 147 / 9
Регистрация: 08.10.2011
Сообщений: 432
20.01.2014, 12:18 #9
Ilot, может пример приведете, где не верно считает. кстати, a2=2, на всякий случай
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
20.01.2014, 12:47 #10
ya_noob, виноват.
У меня изменить к = 2 на к = 1:
C++
1
2
3
 
   for (int k = 1; k <= n; k++)
        a = a * k + Fraction (1, k);
0
MacPrinCip
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 33
20.01.2014, 17:26  [ТС] #11
Ребят, я ее написал. Посмотрите, правильно ли я составил логику??

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
#include <iostream>
#include <math.h>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    cout << "Евгений Волков\n";
    
    double a, c, n, Sum;
    int b, chisl;
    a = 1;
    c = 0;
    Sum = 0;
    
    Sum = a;
    cout << "a1 = " << Sum << endl;
    for(n = 1; n <= 4; n++) {
        Sum = n * Sum + 1 / n;
        chisl = Sum * n;
        cout << "a" << n + 1 << " = " << Sum << " = " << endl << " " << chisl << endl;
        cout << "=-";
        for(b = 0; chisl/10 != 0; b++) {
            b = chisl%10;
            chisl = chisl / 10;
            cout << "-";
        }
        cout << endl;
        cout << " " << n << endl << endl;
    }
 
    system("pause");
    return 0;
}
0
Леонтий_Бурдыл
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 2
11.05.2015, 10:59 #12
а можете сделать эту задачу в паскале через функцию?
0
11.05.2015, 10:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2015, 10:59
Привет! Вот еще темы с ответами:

Составить программу для нахождения первого элемента массива меньше десяти и его номера - C++
3)Известен целочисленный массив x1,х2,х3,…,х10. Составить программу для нахождения первого элемента меньше десяти и его номера. Если такого...

Составить программу печати всех циклов ориентированного графа - C++
Составить программу печати всех циклов ориентированного графа Добавлено через 6 часов 43 минуты help:wall:

Использование стека для печати строки в обратной последовательности - C++
нужно написать программу, которая вводит строку текста и использует объект стека для печати строки в обратной последовательности. очень...

Составить программу вычисления и печати таблицы значений функции при заданных значениях параметров - C++
Составить программу вычисления и печати таблицы значений функции при заданных значениях параметров.


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

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

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