Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.041 c
4-1155197722
ph0sgen
2006-08-10 12:15
2006.12.17
проблема с ReadFile


15-1164462735
Оззя
2006-11-25 16:52
2006.12.17
1-е число Мерсенна


2-1164560054
alex810
2006-11-26 19:54
2006.12.17
Вопрос по SQL запросам


2-1164737960
Ezorcist
2006-11-28 21:19
2006.12.17
вопрос про uses


2-1164797502
Riply
2006-11-29 13:51
2006.12.17
Сортировка массива с сохранением "перестановок"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский