Новичок
Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.11.2012
Репутация: нет Всего: нет
|
значения функции у меня выводятся..то что будет координатными осями,прямые я провела.. а как дальше запуталась.. для того чтобы построить нужный график нужно каждую точку перевести в систему координат экрана, т.е. умножена на масштаб, переведена в целый тип и сдвинута на расстояние соответствующее положению оси координат. чтото вроде этого должно быть:: | Код | x1=x0+int(mx*x); y1=y0-int(my*y); moveto(x1,y1);lineto(x1,y1);
|
где x0=320(640/2); y0=240(480/2);- это начало координат в центре экрана mx и my - масштаб на который нужно умножать.. вот его то я и незнаю как правильно посчитать.. mx=620/(реальные значения)-начальные и конечные значения графика у меня разные могут быть,потому что все три функции на разных интервалах вызываются,как правильно записать незнаю:cry: my=440/максимум принятых значений функции - их тоже разное колличество.. как записать незнаю... подскажите как. Я хоть немного на верном пути рассуждаю??на всякий случай программа с функциями для которых нужен график | Код | #include <graphics.h> // vkljy4it' opisanie grafi4eskix fynkcij С/С++ Borland'ah #include<stdio.h> #include <conio.h> // opisanie fynkcij vvoda-vivoda s konsoli(dlja getch()) #include <math.h> // opisanie matemati4eskix fynkcij (dlja sin) #include<stdlib.h> #include <fstream>//rabota s failami
float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} float f2 (float x) /*vira*enie 2*/ {return(exp(x)/x);} float f3 (float x)/*vira*enie 3*/ {return (1/(3+2*cos(x)));}
float proizv1(float (*f)(float),float x) {/* pervaja proizvodnaja iz klassi4eskogo opredelenija eto f'(x)=(f(x0)-f(x))/(x-x0) */ /* opredelim proizvodnyjy s tochnost'jy h=x-x0=0.001 */ /* znachit x0=x-h */ /*polychaem znachenie dlja proizvodnoj (f(x-h)-f(x)/h */ float h;float res; h=0.001; res = ( (*f)(x) - (*f)(x - h) ) / h; return res; }
float proizv2( float (*f)(float), float x) {/*vtoraja proizvodnaja iz klassi4eskogo opredelenija*/ /* eto f''(x)=(f'(x))' proizvodnaja ot proizvodnoj*/ float h; float res; h=0.001; res = (proizv1( f, x ) - proizv1(f, x - h)) / h; return res;
} int grafik() {setcolor(5); line(320,0,320,480); line(0,240,640,240);}
float tochki(float (*t)(float),float xn,float xk,float dx) //vizov bydet tochki(proizv2,xn,xk,dx) {float x1,y; int i; system("cls"); FILE *toch; toch=fopen("reshenie.txt","w"); printf(" __________________________\n"); printf("|___i____|___x___|_____y___|\n"); fprintf(toch," __________________________\n"); fprintf(toch,"|___i____|___x___|_____y___|\n"); i=0; for (x1=xn;x1<=xk;x1+=dx) {proizv2(t,x1); i++; printf("|___%d____|___%1.f__|__%.5f__|\n",i,x1,proizv2(t,x1)); fprintf(toch,"|___%d____|___%1.f__|__%.5f__|\n",i,x1,proizv2(t,x1)); } printf("tochka peregiba:\n"); fprintf(toch,"tochka peregiba:\n"); /*yslovie syshestvovanija tochki peregiba*/ grafik(); for (x1=xn;x1<=xk;x1+=dx) { if ( (proizv2(t,x1))*(proizv2(t,x1+1))<=0 ) { printf(" x=%1.f y=%.5f\n",x1,proizv2(t,x1)); fprintf(toch," x=%1.f y=%.5f\n",x1,proizv2(t,x1)); } //tochka peregiba tam, gde fynkcija menjaet znak } fclose(toch); }
int menu_vibor_usl3()//OFORMLENIE MENU DLJA YSLOVIJ {cleardevice(); setcolor(2); line(160,40,545,40);//gorizontali outtextxy(250,45," 1. x*cos(x))/(1+ pow(x,2) "); line(160,70,545,70); outtextxy(300,75," 2. exp(x)/x "); line(160,100,545,100); outtextxy(280,105," 3. 1/(3+2*cos(x)) "); line(160,130,545,130);
line(160,40,160,130);//vertiikali line(545,40,545,130); }
void vibor_f( ) {int n; system("cls"); menu_vibor_usl3(); printf("S kakoj fynkciej bydem rabotat'?\n"); scanf("%d",&n); switch(n) {case 1: tochki(f1,-4,4,1); break;//dlja pervoj fynkcii na intervale -4 4 case 2: tochki(f2,-6,1,1); break;//dlja vtoroj fynkcii na intervale -6 1 case 3: tochki(f3,0,4,1); break;//dlja tret'ej fynkcii na intervale 0 4 case 0: break; default:printf("Nevernij re*im\n"); } } void o_zadanii3() {system("cls"); printf("Opredelit' est' li tochka peregiba na zadannom intervale:\n\n"); printf(" (x*cos(x))/(1+ pow(x,2)) na prome*ytke -4 4 \n\n"); printf(" exp(x)/x na prome*ytke -6 1 \n\n"); printf(" 1/(3+2*cos(x))na prome*ytke 0 4 \n\n");
FILE *z;//rabota s failom z=fopen("zadanie.txt","w"); fprintf(z,"Opredelit' est' li tochka peregiba na zadannom intervale:\n\n"); fprintf(z," (x*cos(x))/(1+ pow(x,2)) na prome*ytke -4 4 \n\n"); fprintf(z," exp(x)*pow(x,-1) na prome*ytke -6 1 \n\n"); fprintf(z," 1/(3+2*cos(x)) na prome*ytke 0 4 \n\n"); fclose(z); }
void yslovie3() {system("cls"); printf("Neobkhodimoe uslovie sushchestvovaniya tochki peregiba:\n"); printf("esli funkciya f(x),dvazhdi differentsiruemaya v nekotoroy okrestnosti tochki x0,\n"); printf("imeet v x0 tochku peregiba, to f''(x0)=0\n\n");
FILE *y;//rabota s failom y=fopen("yslovie.txt","w"); fprintf(y,"Neobkhodimoe uslovie sushchestvovaniya tochki peregiba:\n"); fprintf(y,"esli funkciya f(x),dvazhdi differentsiruemaya v nekotoroy okrestnosti tochki x0,\n") ; fprintf(y,"imeet v x0 tochku peregiba, to f''(x0)=0\n\n"); fclose(y);
} void programma3() { system("cls"); printf("Programmy vipolnila i sostavila stydentka gryppi IUSz-12\n"); printf("Udal'cova Marina Aleksandrovna\n\n"); FILE *p;//rabota s failom p=fopen("programma.txt","w"); fprintf(p,"Programmy vipolnila i sostavila stydentka gryppi IUSz-12\n"); fprintf(p,"Udal'cova Marina Aleksandrovna\n"); fclose(p); } int menu3() {system("cls"); cleardevice(); setcolor(15); line(160,40,430,40);//gorizontali outtextxy(250,45," 1.O ZADACHE "); line(160,70,430,70); outtextxy(165,75," 2.YSLOVIE VIPOLNENIJA PROGRAMMI "); line(160,100,430,100); outtextxy(200,105," 3.VIPOLNENIE PROGRAMMI "); line(160,130,430,130); outtextxy(235,135," 4.O PROGRAMME "); line(160,160,430,160); outtextxy(260,165," 0.VIHOD "); line(160,190,430,190); line(160,40,160,190);//vertikali line(430,40,430,190); } void vibor3()//VIBOR PYNKTA MENU {int n; met: menu3(); scanf("%d",&n); switch (n) {case 1:o_zadanii3();break; case 2:yslovie3();break; case 3:vibor_f(); break; case 4:programma3();break; case 0:break; default:printf("Nevernij re*im\n"); } system("pause"); goto met; } int main() { /* Avtomati4eskoe opredlenie grafi4eskix parametrov */ int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, ""); // Inicializacija grafi4eskogo re*ima setbkcolor(0); // delaem cvet fona setcolor(0); // i cvet menu vibor3(); system("pause"); // o*idanie na*atija pol'zovatelem ljyboj klavishi closegraph(); // vihod iz grafi4esogo re*ima return 0; }
|
x у меня это x1 и все значения которые в цикл с ним относятся.. y это proizv2(t,x1)
|