Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Цикл

Ответить
Настройки темы
C/C++ - Цикл

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: ganselo
Дата: 07-01-2010
как данное выражение (см. картинку) считать в цикле???

Отправлено: 18:21, 24-10-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


ganselo, одним циклом не получится, нужно два. Причём второй вложенный в первый.
Первый для финальное суммирования, второй для просчёта составляющих суммы (отнимание хсов, операции в числители и знаменатели и умножении на y, если сразу его к операции в числитель не закинуть).
Что-то типа
Код: Выделить весь код
	int L,n=10,x=1,member;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
	{
		member=((x-x1)/(x0-x1))y0;
	}
		L=L+member;
	}
А значения x0,x1...xn и y0,y1...yn имеют какую-то зависимость например от заданных x и от y, если такой имеется, или их должны вводить на каждом этапе цикла?

Отправлено: 19:02, 24-10-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Цитата Admiral:
Admiral »
В общем задача такая: даны n точек в плоскости. Нужно построить многочлен степени n-1, проходящий через эти точки.
Чтобы построить многочлен степени n-1 можно воспользоватся формулой (см. картинку). Если в эту формулу вместо x подставить значение x0, то мы полу4им значение y0 (L(x0)=y0, L(x1)=y1... L(xn)=yn). Вот я никака не соображу как найти этот многочлен. Мб есть у каво какие соображения... хелп)

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 21:24, 24-10-2008 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Подставляешь в формулу вместо букв с индексами значения точек xi и yi, получаешь формулу. Если хочешь многочлен в виде a0 + a1*x + a2*x^2... раскрой скобки

Отправлено: 15:59, 28-10-2008 | #4


Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Вот что получилось...
Код: Выделить весь код
/**Dano n tochek. Postroit' mnogochlen prohodyashiy cherez dannie tochki.
(Postroenie interpolyacionnogo mnogochlena v yavnom vide. Metod Lagranja)
**/

#include <stdio.h>
#include <time.h>
#include <graphics.h>
#define N 10

int driver=DETECT, mode;
int n, xl=80, xr=620, yl=20, yr=430;
double a, b, max=-100000, min=100000;

double f(double *x, double *y, double X);
void OXY(double a, double b, double M, double m);
void tochki(double *x, double *y, double kx, double ky, double x0, double y0);
void graphic(double kx, double ky, double x0, double y0, double *x, double *y);

int main()
{
    int  i;
    double j, Y, kx, ky, x0, y0, m, M;
    printf ("Vvedite kol-vo tochek :");
    scanf ("%d", &n);
    double x[n], y[n];

    srand (time(NULL));
    for (i=0; i<n; i++)
    {
        x[i]=1+rand()%400;
        y[i]=1+rand()%400;
    }
    m=x[0];
    M=x[0];
    for (i=0; i<n; i++)
    {
        if (M<x[i]) M=x[i];
        if (m>x[i]) m=x[i];
    }
    a=m; b=M;

    initgraph(&driver, &mode, "");
    for (j=a; j<b; j=j+0.1)
    {
        if (f(x, y, j)>max) max=f(x, y, j);
        if (f(x, y, j)<min) min=f(x, y, j);
    }

    kx=(xr-xl)/(b-a);
    ky=(yr-yl)/(max-min);
    x0=xl-a*kx;
    y0=yr+min*ky;

    OXY(a, b, max, min);
    graphic(kx, ky, x0, y0, x, y);
    tochki(x, y, kx, ky, x0, y0);

    getch();
    closegraph();


return 0;
}


double f(double *x, double *y, double X)
{
    int i, j;
    double B, L=0;
    for(j=0; j<n; j++)
    {
        B=y[j];
        for(i=0; i<n; i++)
        {
            if(i!=j) B=B*(X - x[i])/(x[j] - x[i]);
        }
    L+=B;
    }
return L;
}

void OXY(double a, double b, double M, double m)
{
    int i;
    double x, y;
    char h[10];
    setcolor (9);
    rectangle (xl, yl, xr, yr);
    setcolor (7);
    for(i=0; i<=N; i++)
    {
        x=a+i*(b-a)/N;
        sprintf(h,"%.1f",x);
        outtextxy(xl+i*(xr-xl)/N-10,yr+10,h);
        y=M-i*(M-m)/N;
        sprintf(h,"%.1f",y);
        outtextxy(xl-70,yl+i*(yr-yl)/N-5,h);
    }
}

void tochki(double *x, double *y, double kx, double ky, double x0, double y0)
{
    double tx, ty;
    setcolor (5);
    for (int i=0; i<n; i++)
    {
        tx=x0+x[i]*kx;
        ty=y0-f(x, y, x[i])*ky;
        circle (tx, ty, 3);
        circle (tx, ty, 2);
        circle (tx, ty, 1);
    }
}

void graphic(double kx, double ky, double x0, double y0, double *x, double *y)
{
    double xm, ym;
    for (double j=a; j<b; j=j+0.01)
    {
        xm=x0+j*kx;
        ym=y0-f(x, y, j)*ky;
        putpixel(xm,ym,7);
    }
}

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 12:13, 31-10-2008 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Цикл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Цикл с использованием имен файлов Bastet Скриптовые языки администрирования Windows 5 05-07-2010 19:28
не работает цикл php: while ($row = mssql_fetch_row($result)) zvezda_t Тест-форум 1 25-01-2010 12:34
Разное - Программа для решения простых Судоку (бесконечный цикл) m.s.dos Программирование и базы данных 3 07-01-2009 05:05
C/C++ - [решено] Всего один цикл Balbec Программирование и базы данных 4 16-05-2008 15:09
бесконечный цикл. Функция не возвращает FALSE ? xamelion Вебмастеру 5 19-09-2005 14:21




 
Переход