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

Схема Горнера - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.69
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
15.11.2010, 23:22     Схема Горнера #1
код схемы Горнера
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
64
65
/*
 * 6
 * 3
 * 1 3 -2 1 -1 1
 *
 * Ответ: 439
 */
 
#include <stdlib.h>     /** EXIT_FAILURE **/
#include <iostream>
using namespace std;
 
int main( int argc, char *argv[] )
{
    register unsigned int i;
    unsigned int n;
    cout << "Введите количество элементов: ";
    cin >> n;
 
    if ( n < 1 )
    {
        cerr << "Требуется хотя бы два элемента." << endl;
        return EXIT_FAILURE;
    }
 
    double *a = new double [n];
    double *b = new double [n];
 
    cout << "Введите эпсилон: ";
    double eps; cin >> eps;
 
    cout << "Введите " << n << " исходн. элем.:" << endl;
    for ( i = 0; i < n; i++ ) cin >> a[i];
 
    cout << endl;
 
    /* Рисуем верхнюю рамку */
    for ( i = 0; i < n; i++ ) cout << "+-------"; cout << "+" << endl;
 
    /* Выводим исходные элементы */
    for ( i = 0; i < n; i++ ) cout << "| " << a[i] << "\t"; cout << "|" << endl;
 
    /* Снова рамка */
    for ( i = 0; i < n; i++ ) cout << "+-------"; cout << "+" << endl;
 
    /* По условию, первый элемент b равен первому элементу a */
    b[0] = a[0];
    cout << "| " << *b << "\t";
    for( i = 1; i < n; i++ )
    {
        b[i] = b[i - 1] * eps;
        /* В этом месте b[i] будет равно значению, записываемому во вторую строчку */
        b[i] += a[i];
        cout << "| " << b[i] << "\t";
    }
    cout << "+" << endl;
 
    /* И ещё одна завершающая рамка */
    for ( i = 0; i < n; i++ ) cout << "+-------"; cout << "+" << endl << endl;
    cout << "Ответ: " << b[n-1] << endl;
 
    delete []b;
    delete []a;
    return 0;
}
программа на С++, как можно под БорландС переделать.

общаяя задача: Исследование уравнения. Даны натуральное число n и целые числа f0, ... , fn. Исследовать существование целочисленных корней уравнения f0*x^n+f1*x^(n-1)+...+fn=0. Если fn=0, то имеется корень, равный 0; если же fn!=0, то целочисленный корень, если он существует, принадлежит конечному множеству положительных и отрицатльных делителей числа fn. Здесь следует определить подпрограмму, которая по двум заданным числам k и m (m>k>=0) позволяет определить значение наименьшего делителя числа m, превышающего k, а так же подпрограмму вычисления значения многочлена по схеме Горнера : y=(...((f0*x+f1)*x+f2)*x+...+f(n-1)*x+fn

Добавлено через 5 часов 33 минуты
препод будет меня жеско иметь)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
17.11.2010, 22:06  [ТС]     Схема Горнера #21
можно вкратце объяснения хоть какое-нибудь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 12:01  [ТС]     Схема Горнера #22
как балаболить , так все горазды, а как помочь, так никто
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 12:41     Схема Горнера #23
Ладно, тогда продолжим балаболить.
Честное слово, я уже устал задавать этот вопрос, но придётся снова это сделать: скажите наконец, что вам не ясно?
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 12:51  [ТС]     Схема Горнера #24
Ничего не понятно, читаю книги, методички, но не могу вникнуть и составить такие сложные программы.. только когда мне помогут, я начинаю понимать, иду к преподу , он начинает меня расспрашивать каждую букву/слово в программе, и через 10 минут. я понимаю, что программу можно было написать за 30 минут и все так просто
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 13:01     Схема Горнера #25
Так вы конкретно спрашивайте. Вот вы выложили код. И начали твердить, что не можете его переделать под Borland C++. Я вам 3 раза сказал, что ничего переделывать не надо, всё и так готово. На третий раз вы, вроде бы, поняли меня. Но нет, потом опять попросили выложить код на борланде. Человек решил постебаться и дал вам ваш же код, скопированный из первого поста. Вы наконец-таки продвинулись дальше - попросили "объяснения хоть какое-нибудь" (с). Т.е. сразу этого объяснения попросить было нельзя, надо было подождать, пока тема на растянется больше, чем на одну страницу.
ОК, теперь я спрашиваю вас - что именно вам не понятно. Но вы отвечаете, что вам ничего не понятно. И что мы, которые стараются всеми силами помочь вам, должны на это отвечать? Как вам помогать? Пока вы не конкретизируете вопрос (пусть будет длинный список, но список вопросов, а не заявления "мне ничего не понятно") - помочь вам мы будем не в состоянии, и отнюдь не из нашей вредности.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 13:05  [ТС]     Схема Горнера #26
этот код, который я воложил, он на с++ работает, а на борланде кучу ошибок выдает)
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 13:06     Схема Горнера #27
Хоть что-то. Какие ошибки? Телепаты дружно смотались в Турцию, так что давайте текст ошибок.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 13:07  [ТС]     Схема Горнера #28
http://codepad.org/M1gy8APd
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 13:08     Схема Горнера #29
Расширение файла какое? Если *.c - поменяйте на *.cpp
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 13:30  [ТС]     Схема Горнера #30
я проверяю только на этом сайте, ибо 7 стоит, и с++ не работает, поэтому поменять не могу
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 13:32     Схема Горнера #31
Ну вы молодец - выбрали компилятор Си, хотя программа написана на Си++, и спрашиваете, почему выдаётся куча ошибок... Выберите на сайте компилятор Си++.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 13:32  [ТС]     Схема Горнера #32
http://codepad.org/LcH1gzch
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 13:36     Схема Горнера #33
Цитата Сообщение от OffSide Посмотреть сообщение
ибо 7 стоит
И что? У меня стоит 7, и прекрасно уживаются несколько компиляторов (сред, точнее)... В чём проблема?

Добавлено через 1 минуту
Сайт - это вам не консоль. У вас в программе есть места, где надо вводить данные, но на сайте вы ничего ввести не сможете. Просто временно закомментируйте все строчки с cin, и те данные, которые в них вводятся, инициализируйте явно.
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 14:15  [ТС]     Схема Горнера #34
http://codepad.org/BE0qwzf5 че токо не пробовал, никак

Добавлено через 11 минут
не подскажешь, что почитать на тему "написание программы с использованием подпрограммы", как эта задача
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 14:18     Схема Горнера #35
Балин, форум глюканул... Я отправил ссылку на исправленный вариант, но она не пришла...
http://codepad.org/fHR3KfU5
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 14:21  [ТС]     Схема Горнера #36
а что в моем исправленном варианте не так, вроде то же самое, только по-другому
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 14:25     Схема Горнера #37
Естественно не так. Мало того, что вы пытаетесь ввести с клавиатуры что-то в тройку (что само по себе абсурдно), так ещё в остальных местах у вас остался ввод с клавиатуры. Просмотрите внимательно свой и мой код и сравните.

Добавлено через 2 минуты
Цитата Сообщение от OffSide Посмотреть сообщение
вроде то же самое, только по-другому
Красиво)))
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
21.11.2010, 14:27  [ТС]     Схема Горнера #38
Цитата Сообщение от silent_1991 Посмотреть сообщение

Добавлено через 2 минуты

Красиво)))
дадада, у меня часто такое)))

/* Рисуем верхнюю рамку */ /* Снова рамка */ /* И ещё одна завершающая рамка */

что за рамки? и можно объяснение какое-нибудь к принципу работы
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.11.2010, 15:28     Схема Горнера #39
Ну рамки - формирование таблицы из плюсов, тире и вертикальных чёрточек, чтобы красиво было. Таблица, кстати, кривовато рисуется)))
А схема, на самом деле, элементарная)))
Она позволяет вычислять значения многочлена при заданном значении x = x0.
Пусть есть многочлен:

P_n(x) = a_n * x^n + a_(n - 1) * x^(n - 1) + ... + a_1 * x + a_0

(В нашей программе эти коэффициенты - a_n, a_(n - 1), ..., a_1, a_0 - элементы массива, степень многочлена тоже вводится)
Перепишем многочлен в более удобный для нас вид:

P_n(x) = a_0 + a_1 * x + a_2 * x^2 + ... + a_(n - 1) * x^(n - 1) + a_n * x^n

Теперь оставим a_0 за скобками, а из скобок (в которые возьмём всю оставшуюся часть многочлена) вынесем x:

P_n(x) = a_0 + x * (a_1 + a_2 * x + ... + a_(n - 1) * x^(n - 2) + a_n * x^(n - 1))

Как видно, в скобках остался многочлен меньшей на 1 степени, чем исходный, и в качестве свободного члена у него выступает a_1. Повторим с многочленом в скобках ту же операцию, т.е. оставим за скобками a_1, остальное возьмём в скобки (уже вторые для исходного многочлена) и вынесем за них x:

P_n(x) = a_0 + x * (a_1 + x * (a_2 + ... + a_(n - 1) * x^(n - 3) + a_n * x^(n - 2)))

Будем повторять эту процедуру, пока в самых внутренних скобках не получим многочлен первой степени, т.е. пока не добьёмся такого вида:

P_n(x) = a_0 + x * (a_1 + x * (a_2 + ... + x * (a_(n - 1) + a_n * x)...))

Теперь вопрос - начерта мы всё это делали)) Вот ответ: теперь мы легко можем вычислить значение исходного многочлена, не возводя ничего не в какие степени. Делается это просто. Сначала x0 подставляется в самый внутренний многочлен первой степени - в a_(n - 1) + a_n * x, и, соответственно, вычисляется значение этого многочлена. Пусть это будет b_(n - 1). Получим:

P_n(x) = a_0 + x * (a_1 + x * (a_2 + ... + x * (a_(n - 2) + x * b_(n - 1))...))

Т.е. мы уже на один шаг ближе к результату - скобок у нас стало на одну пару меньше. Повторяем предыдущий шаг с внутренним многочленом первой степени - с a_(n - 2) + x * b_(n - 1) - снова получаем результат - некоторое b_(n - 2). Подставив его в P_n(x), получим ещё более простой многочлен. Делаем так, пока не получим выражение вида a_0 + x * b_1, подставив в которое x0 и получим окончательный ответ - значение многочлена b_0 = P_n(x) в точке x0.

Не по теме:

Вообще говоря, вся прелесть схемы Горнера не в этом, а в простом вычислении результата деления двух многочленов, но сейчас не об этом)))

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2010, 18:24     Схема Горнера
Еще ссылки по теме:

Нахождение целых корней многочлена методом Горнера C++
C++ Организовать расчет полинома с использованием алгоритма Горнера
C++ Схема Горнера
Вычислить значение многочлена, воспользовавшись схемой Горнера C++
C++ Полином по правилу Горнера

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

Или воспользуйтесь поиском по форуму:
OffSide
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 111
22.11.2010, 18:24  [ТС]     Схема Горнера #40
общаяя задача: Исследование уравнения. Даны натуральное число n и целые числа f0, ... , fn. Исследовать существование целочисленных корней уравнения f0*x^n+f1*x^(n-1)+...+fn=0. Если fn=0, то имеется корень, равный 0; если же fn!=0, то целочисленный корень, если он существует, принадлежит конечному множеству положительных и отрицатльных делителей числа fn. Здесь следует определить подпрограмму, которая по двум заданным числам k и m (m>k>=0) позволяет определить значение наименьшего делителя числа m, превышающего k, а так же подпрограмму вычисления значения многочлена по схеме Горнера : y=(...((f0*x+f1)*x+f2)*x+...+f(n-1)*x+fn


а под общую задачу мою, что нужно подделать и схему горнера, просят как подпрограамму сделать
Yandex
Объявления
22.11.2010, 18:24     Схема Горнера
Ответ Создать тему
Опции темы

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