Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2009, 07:10   #1
milate
 
Регистрация: 22.03.2009
Сообщений: 9
По умолчанию полином лагранжа

Доброго времени суток!
Помогите исправить ошибку. В программировании я не эксперт, могла где-то не то написать. Вобщем ошибок как таковых при компиляции не выдает, а когда начинаю вводить числа, вводится только 2 числа, а дальше ни туда ни сюда
Код:
Код:
 #include <stdio.h>
 #include <math.h>
 #include <conio.h>
 #define max 10
 void main( )
{
 int i,k,n;
 float px,x[max],y[max],P,Lag, chis,znam;
 scanf("%f", &px);
 scanf("%f",&x[max]);
 scanf("f", &y[max]);
 chis=1;
 znam=1;
 for (k=0; k!=n; k++)
 {
  if (k==i) continue;
  chis*=px-x[k];
 }
  for (k=0; k!=n; k++)
  {
   if (x[i]==x[k]) continue;
   znam*=x[i]-x[k];
  }
  P=chis/znam;
  P*=y[i];
  Lag+=P;
  printf("%f", Lag);
}
milate вне форума Ответить с цитированием
Старый 21.05.2009, 09:42   #2
Qousio
Пользователь
 
Аватар для Qousio
 
Регистрация: 02.05.2009
Сообщений: 27
По умолчанию

Попробуйте вместо Scanf использовать cin >>
Чем более читаете, не размышляя, тем более, уверяетесь, что много знаете, а чем более размышляете, читая, тем яснее видите, что знаете еще очень мало.
Qousio вне форума Ответить с цитированием
Старый 21.05.2009, 09:55   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

scanf("%f", &y[max]);
Хотя что-то я не глянул... Глупость там написана. Вы так массив хотите ввести?
pu4koff вне форума Ответить с цитированием
Старый 22.05.2009, 13:51   #4
milate
 
Регистрация: 22.03.2009
Сообщений: 9
По умолчанию

все исправила, так вроде работает, на счет массива, не знаю, почему так написала
посмотрите, правильно ли теперь,
Код:
Код:
 #include <stdio.h>
 #include <math.h>
 #include <conio.h>
 #define max 10
 void main()
{
 int i,k,n;
 float px,x[max],y[max],P,Lag, chis,znam;
 scanf("%f", &px);
 printf("px=\n");
 scanf("%d",&n);
 printf ("n=\n");
 chis=1;
 znam=1;
 for (k=0; k!=n; k++)
 {
  if (k==i) continue;
  chis*=px-x[k];
 }
  for (k=0; k!=n; k++)
  {
   if (x[i]==x[k]) continue;
   znam*=x[i]-x[k];
  }
  P=chis/znam;
  P*=y[i];
  Lag+=P;
  printf("%f", Lag);
}
milate вне форума Ответить с цитированием
Старый 22.05.2009, 14:25   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вроде всё пучком теперь
pu4koff вне форума Ответить с цитированием
Старый 22.05.2009, 14:59   #6
milate
 
Регистрация: 22.03.2009
Сообщений: 9
Радость

Спасибо, если бы ты не сказал ничего про массив, так бы наверно и сидела...
milate вне форума Ответить с цитированием
Старый 24.05.2009, 13:08   #7
milate
 
Регистрация: 22.03.2009
Сообщений: 9
По умолчанию

Вот еще, есть другой код:
Код:
 #include <stdio.h>
 #include <math.h>
//объявляем функцию, считающую полином
//n - количество узлов интерполяции
//f - массив значений функции в узлах интерп-и
//х - значение ч в тех же точках
//t - значение х в точке, где считается полином
 double lagrange(int n, double x[10], double f[10], double t)
{
 double result;
 int i, j;
 for (j=0; j<=n-1; j++)
 {
 for (i=j+1; i<=n; i++)
 {
 f[i]=((t-x[j])*f[i]-(t-x[i])*f[j])/(x[i]-x[j]);
 }
 }
result=f[n];
return result;
}
void main()
{
double x[10], y[10], f[10], a[20], l[20], sh=0.01;
int i,j,z;
//считаем и распеатываем значения ф-ции 
//в точках узлов интерполяции
for (i=0; i<9; i++)
{
x[i]=0.04+sh*i;
printf("x=%lf\t", x[i]);
y[i]=exp(-1/x[i]);
f[i]=y[i];
printf("y=%if\n", y[i]);
}
printf("\n\n");
sh=0.005;
for (i=0; i<18; i++)
{
a[i]=0.04+sh*i;
printf("x=%lf\t", a[i]);
//вызываем ф-wb.? считающую значение полинома
//и заносим в массив l[i]
l[i]=double lagrange(9, x[i], f[i], a[i]);
for (j=0; j<9; j++)
{
f[j]=y[j];
}
printf("y=%lf\n", l[i]);
}
printf("\n\n");
}
При компиляции выдается ошибка в строке l[i]=double lagrange(9, x[i], f[i], a[i]);
не могу понять в чем причина
milate вне форума Ответить с цитированием
Старый 24.05.2009, 13:32   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Потому что надо: l[i] = lagrange(9, x[i], f[i], a[i]);
pu4koff вне форума Ответить с цитированием
Старый 24.05.2009, 13:37   #9
milate
 
Регистрация: 22.03.2009
Сообщений: 9
По умолчанию

все равно выдает ошибку имнно на этой строке
milate вне форума Ответить с цитированием
Старый 24.05.2009, 13:40   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Блин. Не посмотрел параметры функции:
l[i] = lagrange(9, x, f, a[i]);
Кошмар... Как Вы пишите программы, что сами не понимаете какие параметры передавать надо?
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула Лагранжа Diablo221 Помощь студентам 3 16.05.2009 20:56
Интерполяционный полином Ньютона - Visual Basic gred Помощь студентам 1 26.02.2009 20:12
Интерполяционный многочлен лагранжа 3.14oner Паскаль, Turbo Pascal, PascalABC.NET 2 10.11.2008 17:30
Рассчитать полином с помощью функции. Паскаль. Nexx Помощь студентам 8 04.12.2007 22:19
Интерполяционный полином Ньютона Skay Общие вопросы Delphi 2 19.10.2007 22:18