Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Задача на массивы   Найти похожие ветки 

 
Shell   (2006-11-22 19:16) [0]

Здравствуйте, подскажите пожалуйста как решить вот такую задачу:
Многочлен степени N задан своими коэффициентами an, an-1,  an-2, …, a2, a1, a0 (коэффициент ai стоит при x в степени i):
Вот формула многочлена: P{x}=AnXn+An-1Xn-1+...+A2X2+AX+A(Xn-степень, An-номер многочлена)
Помогите написать программу для вычисления P(x): число N, все коэффициенты и x вводятся с клавиатуры, N <= 20. Коэффициенты и x - вещественные числа.

Зарание благодарен Вам за помошь.


 
Рамиль ©   (2006-11-22 19:40) [1]

А в чем, собственно, проблема?
Проходишь по циклу в массив и считаешь.


 
Shell   (2006-11-22 19:51) [2]

Я не много не догоняю как это сделать.Просто эту тему в школе мы начали проходить только сегодня.


 
Джо ©   (2006-11-22 19:57) [3]

> [2] Shell   (22.11.06 19:51)
> Просто эту тему в
> школе мы начали проходить только сегодня.

И что, уже сразу задание задали?


 
Shell   (2006-11-22 19:59) [4]

Да


 
ProgRAMmer Dimonych ©   (2006-11-22 20:00) [5]

Что вообще проходите? Turbo Pascal?


 
Алхимик ©   (2006-11-22 20:04) [6]

Попробуй "на пальцах" объяснить как ты видишь решение задачи, с переводом на паскакаль поможем. :)
p.s. А вы говорите у студентов обострение... Школа атакует! :)


 
ProgRAMmer Dimonych ©   (2006-11-22 20:17) [7]

> Алхимик ©   (22.11.06 20:04) [6]

Школа атаковала всегда, т.к. нормальных учебников по инфе ещё не написано...


 
Lazy_Coder   (2006-11-22 21:45) [8]

На CBuilder5 это будет выгдядеть так:
#include <vector.h>
#include <stdio.h>
#include <conio.h>
#include <vcl.h>
#include <math.h>
...
bool flag=false;
cout << "Vasya Pupkin SOFTWARE presents : *Calculator*\r\n";
AnsiString buf;
float fbuf;
vector <float> coef;
vector <float> eks;
coef.clear();
eks.clear();
int i=0;
while(!flag)
{
cout << "Коэффициент при "+IntToStr(i)+"-й степени >";
cin >> buf;
if(buf=="")flag=true; //Пустая строка - конец ввода
else
 {
 try
  {
  fbuf=StrToFloat(buf);
  coef.push_back(fbuf);
  i++;
  }
 catch(...)
  {
  cout << "Ошибка ввода!\n";
  }
 }
}
for(int i=0;i<coef.size();i+=0)  //Пока всё не введеш
{
cout << "x в "+IntToStr(i)+"-й степени >";
cin >>buf;
try
 {
 fbuf=StrToFloat(fbuf);
 eks.push_back(fbuf);
 i++;
 }
catch(...)
 {
 cout << "Internal Error #34523456134";
 }  
}
// Вычисления
float p=0;
float x,a;
for(int i=0;i<coef.size();i++)
{
x=eks[i];
a=coef[i];
p+=pow(eks,i)*a;
}
cout << "\n";
cout << "Значение многочлена >"+FloatToStrF(p,ffGeneral,12,12);
cin >> buf;

P.S. В трубопаскакаль сами переводите...

Блин, чё я такой пьяный сегодня?


 
Джо ©   (2006-11-22 21:53) [9]

> Блин, чё я такой пьяный сегодня?

Когда трезвый — на Делфи пишешь? ;)


 
Lazy_Coder   (2006-11-22 21:59) [10]

Удалено модератором
Примечание: офтопик


 
palva ©   (2006-11-23 00:08) [11]

> Школа атаковала всегда, т.к. нормальных учебников по инфе ещё не написано...

Как это не написано!?
Курош. Курс высшей алгебры.
Написан лет 40 назад. Доступен десятикласснику. Открыть главу про многочлены и прочитать, что такое схема Горнера. Или поискать в интернете этого Горнера.


 
ProgRAMmer Dimonych ©   (2006-11-23 00:11) [12]

> palva ©   (23.11.06 00:08) [11]
Инфа одним Горнером не ограничивается. Я вообще предпочитаю не занижать информатику до уровня математики.


 
Anatoly Podgoretsky ©   (2006-11-23 00:17) [13]

> palva  (23.11.2006 0:08:11)  [11]

Про многочлены говоришь, тогда тебе в другую ветку :-)


 
Думкин ©   (2006-11-23 06:20) [14]


> ProgRAMmer Dimonych ©   (23.11.06 00:11) [12]

Вы хотели сказать "не возвышать". Не оговаривайтесь так больше.

> palva ©   (23.11.06 00:08) [11]

Причем тут Горнер? Горнер тут совсем ни при чем.

> Shell   (22.11.06 19:16)  

Раз проходили, значит это ДЗ. Делай его сам или приставай к учителю.


 
Думкин ©   (2006-11-23 06:23) [15]


> > palva ©   (23.11.06 00:08) [11]

Извиняюсь, поспешил. Горнер причем. Спутался. :)


 
palva ©   (2006-11-23 10:24) [16]

Думкин ©   (23.11.06 06:23) [15]

Если f делить на (x - a) то остаток и будет равен искомому f(a).

Деление многочленов столбиком, кстати, проходят в школах (возможно, некоторых?). В нашей сельской школе мы проходили. Правда было это давненько.


 
Думкин ©   (2006-11-23 11:07) [17]


> palva ©   (23.11.06 10:24) [16]

Я же написал, что согласен. К чему ваш пост? То что вы описали, называется теорема Безу.


 
Думкин ©   (2006-11-23 11:09) [18]

Но возник вопрос - как связана схема Горнера и теорема Безу?


 
Думкин ©   (2006-11-23 11:18) [19]


> palva ©   (23.11.06 10:24) [16]

Поискал про схему. Я немного иное имел в виду - вычислительную схему Горнера, она как раз коррелирует с сабжем. при чем полностью.

Как же соотносятся  с сабжем ваши слова - не понимаю.


 
Lazy_Coder   (2006-11-23 11:27) [20]

На трезвую голову посмотрел, а ведь в программе ошибка. Икс то один на всех !

Таким образом, прога в Паскале будет выглядеть так:
program polynome;
uses crt;
var i,num:integer;
var p,x,an:real;
var a:array of real[1..21];
begin
clrscr;
write("Type maximun power(less or equal 20):");
readln(num);
writeln("Please enter coefficients");
for i:=1 to num+1 do
begin
write("Power :",i-1," >");
readln(an);
a[i]:=an;
end;
write("Type x:");
readln(x);
p:=0
for i:=1 to num+1 do
begin
an=a[i];
p:=p+an*x^(i-1);
end;
writeln("Result:",p);
repeat until keypressed;
end.

Я мог где- нибудь ошибиться, но в целом прога должна работать.


 
Shell   (2006-11-23 12:10) [21]

Спасибо за алгоритм, но вот маленькая проблема Паскаль не знает знак степени  "^"
p:=p+an*x^(i-1);
Как это исправить?


 
isasa ©   (2006-11-23 12:19) [22]

^ - это от Бейсика. :)
uses math;
...
power (...)


 
Shell   (2006-11-23 12:38) [23]

В паскале нет math;
Можно ли обойтись без него?


 
Anatoly Podgoretsky ©   (2006-11-23 12:42) [24]

Можно, через логорифмы. Спроси у учителя.


 
Jeer ©   (2006-11-23 12:52) [25]


> Shell   (23.11.06 12:10) [21]


x^2 == x*x
x^3 == x*x*x
...


 
Lazy_Coder   (2006-11-23 13:21) [26]

В степень можно возвести так:
x^n=exp(n*ln(x));
exp - экспонента
ln - натуральный логарифм
по - моему в они доступны по-умолчанию, если нет - можно нажать <Ctrl+F1>, при этом выделить слово - в справке указан модуль.
Можно и так:
function power(var x:real,var a:integer):real
var ret:real;
begin
ret:=1;
for i:=1 to a do ret:=ret*x;
power:=ret; {Не помню точно, как идет возврат значения... По-моему, так.}
end;

Потом в проге вызываешь
a=x^n как a=power(x,n);

Люди, а как насчёт моего вопроса(про DataSet)? Мне всё ещё интересно узнать ваше мнение.


 
Anatoly Podgoretsky ©   (2006-11-23 13:26) [27]


> Люди, а как насчёт моего вопроса(про DataSet)? Мне всё ещё
> интересно узнать ваше мнение.

А ссылку привести религия не позволяет.


 
Lazy_Coder   (2006-11-23 15:23) [28]


> > Люди, а как насчёт моего вопроса(про DataSet)? Мне всё
> ещё
> > интересно узнать ваше мнение.
>
> А ссылку привести религия не позволяет


А что же так резко-то?
Есть ведь вещи, которые для наших "религий" общие, VCL например.
И Midas, кстати, тоже. Ещё не известно, какая "религия" , была раньше (т.е. на чём вышеуказанные библиотеки написаны.). А может, Delphi -это секта :-)
Кстати, раньше я программировал только на Delphi(Ну, ещё на Basic,Fortan,Asm)- пока не стал изучать С/C++.


 
Lazy_Coder   (2006-11-23 19:18) [29]

Да-а... Зря только время потратил, мастера млин.
Не знаете сами, так и говорите сразу.


 
Shell   (2006-11-24 17:28) [30]

Пожалуйста люди помогите, код не работает а именно не могу возвести в степень


 
Shell   (2006-11-24 17:28) [31]

Пожалуйста люди помогите, код не работает а именно не могу возвести в степень


 
Virgo_Style ©   (2006-11-24 17:52) [32]

Shell   (24.11.06 17:28) [31]
код не работает


какой?


 
TUser ©   (2006-11-24 19:13) [33]

Алгоритм кого-то есть для этого.

result := An;
for i := n-1 downto 0 do
 result *= X
 result += Ai


 
Shell   (2006-11-26 12:27) [34]

TUser ©
Можно чуть по подробнее а то я не могу понять.
Если можно то покажите пример


 
Shell   (2006-11-26 12:29) [35]

TUser ©
Можно чуть по подробнее а то я не могу понять.
Если можно то покажите пример,а то очень нужно сделать программу.


 
Anatoly Podgoretsky ©   (2006-11-26 12:35) [36]

> Shell  (26.11.2006 12:29:35)  [35]

Это и есть пример, две последнии строчки перевести в Паскалевскую форму.


 
Shell   (2006-11-26 12:50) [37]

result *= X
result += Ai
Я что то не пойму что значат знак + и *
И как это работает


 
Anatoly Podgoretsky ©   (2006-11-26 16:55) [38]

> Shell  (26.11.2006 12:50:37)  [37]

Это си, первое умножение, а второе сложение.


 
ShellX   (2006-11-26 17:58) [39]

Я всё таки не могу понятькак правильно будет выглядит прога, пожалуйста мастера помогите, мне очень нужна эта программа.Задание нужно сдать к среде, времени мало, пожалуйста помогите!


 
Palladin ©   (2006-11-26 18:36) [40]

:) Умри достойно, как мужчина!


 
ShellX   (2006-11-26 18:43) [41]

Не ну серьёзно помогите, я не думаю что эта задача очень сложная для Вас, а для меня она покачто не из лёгких.


 
SergP ©   (2006-11-26 22:16) [42]


> [41] ShellX   (26.11.06 18:43)
> Не ну серьёзно помогите, я не думаю что эта задача очень
> сложная для Вас, а для меня она покачто не из лёгких.


Ну а думать тогда кто будеть?

Ладно... Скажем так: возведение в степень тебе нафик не нужно...
Так как такой код:

...
for i:=1 to num+1 do
begin
an=a[i];
p:=p+an*x^(i-1);
end;
...


Можно заменить таким:

...
k:=1;
for i:=1 to num+1 do
begin
an=a[i];
p:=p+an*k;
k:=k*x;
end;
...


 
TUser ©   (2006-11-27 05:44) [43]

result := A[n];
for i := n-1 downto 0 do begin
result = result * X
result = result + A[i]
end;


 
Думкин ©   (2006-11-27 06:26) [44]

Схема Горнера и есть. Зря помогли. :(


 
Sania ©   (2006-11-27 09:01) [45]

Если вводятся сперва X, а потом многочлен, то можно на ходу считать,
тогда для любого к-ва иксов прога будет считать "мгновенно" :)
Вроде так:
Program MN;
uses CRT;
var Res,x,C:Real;
i,count:integer;
Begin
WriteLN("X=");
// Можно массив иксов
ReadLN(x);
WriteLN("Введите степень");
ReadLN(Count);
WriteLN("Введите 1 коэф");
ReadLN(C);
RES=c;
for i=count-1 to downto 0 do
Begin
WriteLN("Введите ",i," коэф");
ReadLN(C);
// Можно массив X обрабатывать
Res:=Res*X+C;
End;
// Выводим
WriteLN(res);
ReadKey;
End.


 
Shell   (2006-11-27 11:56) [46]

>Схема Горнера и есть. Зря помогли. :(
Cхема Горнера Нужна для нахождения X а не для суммы многочлена, так что она не причём


 
TUser ©   (2006-11-28 12:18) [47]


> Shell   (27.11.06 11:56) [46]

Просто с вики ошибка Ж)


 
Думкин ©   (2006-11-28 12:24) [48]


> Shell   (27.11.06 11:56) [46]

Что такое сумма многочлена?


 
palva ©   (2006-11-28 13:10) [49]


> Думкин ©   (23.11.06 11:18) [19]
> Как же соотносятся  с сабжем ваши слова - не понимаю.

Не заглядывал в ветку, поэтому не видел вашего вопроса. Когда я прочитал ваше [14], что схема Горнера не причем, я полез в Яндекс и увидел, что почти везде схема Горнера определяется как способ деления многочлена f(x) на одночлен x - a. Я подумал что вас (и многих, наверное, тоже) ввело в заблуждение именно это, поэтому привел соображение, которое оказалось формулировкой теоремы Безу.


 
Думкин ©   (2006-11-28 13:23) [50]

> palva ©   (28.11.06 13:10) [49]

Тогда я просто упустил немного, а затем исправился. Впрочем, пустое.
Главное, что автору просто надо знать альнертнативную запись многочлена и эта запись известна как схема Горнера. По крайней мере мне. :)

Но тут уже говорят, что с ее помощью ищется некий странный Х, а вовсе не частное или произведение, а уже тем более не сумма многочлена. :)


 
Jeer ©   (2006-11-28 13:34) [51]


> Shell   (27.11.06 11:56) [46]
>
> >Схема Горнера и есть. Зря помогли. :(
> Cхема Горнера Нужна для нахождения X а не для суммы многочлена,
>  так что она не причём


Схема Горнера - это метод вычисления многочленов.
Pn(x) = ((((..  + A2)*x + A1)*x + A0

К методам же относятся метод произведений, интерполяционная схема Ньютона, методы Мотцкина - Белаги - Пана.


 
inkvizitor ©   (2006-11-28 14:03) [52]


> Shell   (26.11.06 12:50) [37]

рекурентную формулу найди сначала.
там проще будет.



Страницы: 1 2 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.043 c
15-1164740254
IMHO
2006-11-28 21:57
2006.12.17
28 ноября: В Москве образовались многочисленные пробки


2-1165065342
Defort
2006-12-02 16:15
2006.12.17
Директивы


2-1164575843
Sat
2006-11-27 00:17
2006.12.17
проблеммы с классом


15-1164270914
TauRus
2006-11-23 11:35
2006.12.17
Вычисление SIN, как еще можно сделать?


3-1160209191
Serj74
2006-10-07 12:19
2006.12.17
FastReport &amp; Photo