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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 22:37   #1
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию график функции sinx, построит функцию на основе многочлена (по формуле Лагранжа).

написал программку, которая сперва рисует график функции sinx, потом, получив данные об интервале и количестве точек строит функцию на основе многочлена (по формуле Лагранжа).

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>

float x[20] , y[20] ;
int n ;

float f(float x) {return sin(x/2)*x ;}

float lagr(float x) {
float y=0, d ;
for (int i=0 ; i<n ; ++i) {d=y[i] ;
			   for (int j=0 ; j<n ; ++j)
			   if(j!=i) d*=(x-x[j])/(x[i]-x[j]);
			   y+=d ;
			   }
return (y) ;
}

int main() {
   int xx=80, yy=60,a, b, h ,i, gdriver =DETECT, gmode;
   float xd, yd, x, y ;
   initgraph(&gdriver, &gmode, "");
   setcolor(getmaxcolor());
   line(0, 240, 640, 240);
   line(320, 0 , 320, 480);
   line(635, 245, 640, 240) ;
   line(635, 235, 640, 240) ;
   line(315, 5 , 320, 0) ;
   line(325, 5 , 320, 0) ;
   for (x=xx, y=yy; x<640, y<480 ; x+=xx, y+=yy) {
   line (x, 240+3, x, 240+3) ;
   line (320+3, y, 320+3, y) ; }

   for (x=-8; x<8 ; x+=0.1) {
   y=f(x) ;
   xd=320+x*xx ; yd=240-y*yy ;
   setcolor(19) ;
   if (x==-8) moveto(xd, yd) ; else lineto(xd, yd) ; }

   printf("Vvedite granici intervala a, b: ") ;
   scanf("%d, %d", &a, &b) ;
   printf("vvedite kolichestvo tochek: ") ;
   scanf("%d",&n) ;
   h=(b-a)*(n-1) ;
   x[0]=a ; x[n-1]=b ;
   for(i=0, x=a ; x<=b ; x+=h, ++i) {

   x[i]=x ; y[i]=f(x) ;}
   for (x=-8 ; x<8 ; x+=0,1) {
   y=lagr(x) ;
   xd=320+x*xx ; yd=240-y*yy ;
   setcolor(12) ;
   if (x==-8) moveto(xd, yd) ; else lineto(xd, yd) ; }

   getch() ;
   return (0) ;
}
Так вот, при компиляции выдаётся ошибка Invalid indirection, компиль тычет в место после упоминания об глобальном массиве.
Код:
 x[0]=a ; x[n-1]=b//указывает на = и - ;
В чём проблема? Сперва думал что проблема в обращении к глобальному массиву, однако прочитал в книги что если глобальные элементы объявлены до их использования то никаких спец. приёмов для обращения к ним (вроде приставки extern) не требуется...

Последний раз редактировалось Alexcomeback; 17.04.2009 в 22:57.
Alexcomeback вне форума Ответить с цитированием
Старый 18.04.2009, 10:39   #2
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

итак...не совсем так...почитай как функции пишутся.
float lagr(float x)
получается, что х у тебя теперь просто флоат, а не массив типа флоат внутри это функции. а ты к нему как к функции обрашаешься. наверное правильнее было бы float lagr(float* argument) ...и измение x на argument или еще какое другое название..вначале так хоть понятно будет.

Последний раз редактировалось radiohobbyt; 18.04.2009 в 10:44.
radiohobbyt вне форума Ответить с цитированием
Старый 18.04.2009, 14:08   #3
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

хм.. Насколько я понимаю, float x и float x[20] - разные элементы, первая - просто локальная переменная, вторая - глобальный массив.. По идее конфликтов не должно возникать..
Спасибо за совет, попробую исправить..
Alexcomeback вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построить график по формуле Prof Помощь студентам 1 02.06.2008 08:07