Главная страница
    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]

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



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

Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.041 c
2-1164635692
Draught
2006-11-27 16:54
2006.12.17
Событие DBEdit - нажатие Enter или другой заданой клавиши


6-1153823399
Leonid
2006-07-25 14:29
2006.12.17
Отправка e-mail при регистрации программы у заказчика


2-1164789915
Sergg
2006-11-29 11:45
2006.12.17
Удаление всех файлов в папке


15-1164670569
vasIzmax
2006-11-28 02:36
2006.12.17
Вопрос не по теме


2-1164782214
Unknowing
2006-11-29 09:36
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский