0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 4
|
|
1 | |
Пожалуйста нужно исправить ошибки в коде или написать его заного24.01.2019, 16:45. Показов 1001. Ответов 1
Тема курсовой роботы: Разработка программы для численного решения уравлений методом половинного деления
Помогите пожалуйста написать данный код для программы на языке с++. У меня есть сам код могу ниже скину но там куча ошибок и не могу разобраться в нем. Это очень срочно помогите пожалуйста. #include <conio.h> #include <math.h> #include <stdio.h> #include <locale.h> #include <windows.h> #include <graphics.h> const int X0=400, Y0=300, k=100; const float pi=3.14; int n=0, v, n_max, n1; float a, b, c, gr1, gr2, eps; float q, r, Q, R, m, A, B, R1, Q1; float x, f1, f2, fm, x1, g, s, f, pog, pog1, j, t; float F1(float x){ return a*x*x*x+b*x+c; } float F2(float x){ return a*sin(x+b)+c; } float F3(float x){ return a*log(fabs(x+b))+c; } float sign(float x){ if(x==0)return 0; if(x>0) return 1; else return -1; } #include"graphic.cpp" main() { setlocale(LC_CTYPE, "Russian"); printf ("Выберите уравнение:\n1)y=a*x*x*x+b*x+c\n2)y=a*sin(x+b)+c\n3)y=a*ln|x+b|+c\nВвод:"); scanf("%d", &v); switch(v) { case 1:break; case 2:break; case 3:break; defaultrintf("Введен неверное значение! Программа закрывается!\n"); system("pause"); exit(0); } fflush(stdin); printf("Введите точность eps:"); while(!scanf("%f", &eps)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\n Введите точность eps:"); } if(eps<0||eps==0){ printf("Точность не может быть отрицательной или равной нулю!Программа закрывается!\n"); system("pause"); exit(0); } fflush(stdin); printf("Введите границы:\ngr1="); while(!scanf("%f", &gr1)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\ngr1="); } fflush(stdin); printf("gr2="); while(!scanf("%f", &gr2)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\ngr2="); } if(gr1>gr2){ s=gr1; g=gr2; gr1=g; gr2=s; } g=gr1; s=gr2; fflush(stdin); printf("Введите коэффициенты:\na="); while(!scanf("%f", &a)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\na=:"); } fflush(stdin); printf("b="); while(!scanf("%f", &b)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\nb="); } fflush(stdin); printf("c="); while(!scanf("%f", &c)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\nc=:"); } fflush(stdin); printf("Введите максимальное число делений:"); while(!scanf("%d", &n_max)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\n Введите максимальное число делений:"); } if(n_max<0||n_max==0){ printf("Количество делений не может быть вещественным числом или меньше, либо равным нулю!\nПрограмма закрывается!\n"); system("pause"); exit(0); } fflush(stdin); switch(v) {case 1: while(fabs(gr2-gr1)>eps){ n++; x=(gr1+gr2)/2; f1=F1(x); f2=F1(gr2); if(fabs(f1)<eps) {break;} if (f2*f1<0) {gr1=x;} else {gr2=x;} } if(a==0&&b!=0){ x1=-c/b; break; } if(a!=0){ q=b/a; r=c/a; Q=-(3*q)/9; R=(27*r)/54; Q1=pow(Q, 3); R1=pow(R, 2); if(R1<Q1) {m=acos(R/sqrt(Q1))/3; x1=-2*sqrt(Q)*cos(m); } if(R1>=Q1) {A=-sign(R)*pow(fabs(R)+sqrt(R1-Q1), 0.33); if(A!=0) {B=Q/A; } if(A==0) {B=0; } x1=(A+B); } } if(!((g<=x1)&&(s>=x1))||a==0&&b==0){ printf("В интервале [%.3f;%.3f] корня нет!\n", g, s); system("pause"); exit(0); } x=(gr2+gr1)/2; fm=F1(x); break; case 2: while(fabs(gr2-gr1)>eps){ n++; x=(gr1+gr2)/2; f1=F2(x); f2=F2(gr2); if(fabs(f1)<eps) {break;} if (f2*f1<0) {gr1=x;} else {gr2=x;} } if(c/a>1||c/a<-1){ printf("В интервале [%.3f;%.3f] корня нет!\n", g, s); system("pause"); exit(0); } if(!((g<=x1)&&(s>=x1))||a==0){ printf("В интервале [%.3f;%.3f] корня нет!\n", g, s); system("pause"); exit(0); } x=(gr2+gr1)/2; for(n1=0;n1<=1000;n1++) { j=-asin(c/a)-b-pi*n1; if(((x-0.03*x)<=j)&&((x+0.03*x)>=j)){ x1=j; } } for(n1=0;n1<=1000;n1++){ j=-asin(c/a)-b+pi*n1; if(((x-0.03*x)<=j)&&((x+0.03*x)>=j)){ x1=j; } } fm=F2(x); break; case 3: while(fabs(gr2-gr1)>eps){ n++; x=(gr1+gr2)/2; f1=F3(x); f2=F3(gr2); if(fabs(f1)<eps) {break;} if (f2*f1<0) {gr1=x;} else {gr2=x;} } x1=pow(M_E, (-c/a))-b; if(!((g<=x1)&&(s>=x1))||a==0){ printf("В интервале [%.3f;%.3f] корня нет!\n", g, s); system("pause"); exit(0); } if(gr2+b<0){ printf("В интервале [%f;%f] корня нет!\n", g, s); system("pause"); exit(0); } x=(gr2+gr1)/2; fm=F3(x); break; } pog1=fabs(x-x1); if(x1>x){ pog=fabs((x-x1)/x1)*100; } if(x==0&&x1==0){ pog=0; } else{ pog=fabs((x1-x)/x)*100; } if(n>n_max){ printf("За %d шаг(ов) корень не найден. Продолжаем?\n1)Да\n2)Нет\nВвод:", n_max); while(!scanf("%d", &t)){ while(getchar() != '\n'); printf("Ошибка ввода!Попробуйте снова!\nВвод:"); } if(t==1){ printf("Приближенное x=%.3f\nF(x)=%.3f\nКоличество делений n=%d \nТочное x=%.3f\nАбсолютная погрешность=%.3f\nОтносительная погрешность=%.3f%%\n", x, fm, n, x1, pog1, pog); system("pause"); } if(t==2){ printf("Корень не подсчитан!Программа закрывается!\n"); system("pause"); exit(0); } else{ printf("Неверный ввод!Программа закрывается!\n"); system("pause"); exit(0); } } else{ printf("Приближенное x=%.3f\nF(x)=%.3f\nКоличество делений n=%d \nТочное x=%.3f\nАбсолютная погрешность=%.3f\nОтносительная погрешность=%.3f%%\n", x, fm, n, x1, pog1, pog); system("pause"); } initwindow(800, 600); Axes(); Plot(); getch(); closegraph(); } graphic.cpp – отображение графиков функций и процесс вычисления корня float ScreenX(float x){ return(x-g)/(s-g)*getmaxx(); } float ScreenY(float y){//ïåðåâîä y â êîîðäèíàòû ýêðàíà float y_min, y_max; y_min=-(600-Y0)/k; y_max=Y0/k; return getmaxy() - (y-y_min)/(y_max-y_min)*getmaxy(); } void Point(float x, float y, int color){ float xe, ye; xe=ScreenX(x); ye=ScreenY(y); if(xe>=0&&xe<800&&ye>=0&&ye<600) putpixel(xe, ye, color); } void Plot(){ float x, h, x_min, x_max; h=0.0001;//øàã for(x=g;x<=s;x+=h) switch(v) { case 1: Point(x, F1(x), RED); break; case 2: Point(x, F2(x), RED); break; case 3: Point(x, F3(x), RED); break; } } void Axes() { setcolor(8); line(400, 0, 400, 599); line(0, 300, 799, 300); }
0
|
24.01.2019, 16:45 | |
Ответы с готовыми решениями:
1
Исправить ошибки в коде, пожалуйста! Помогите, пожалуйста, исправить ошибки в коде Пожалуйста, нужно найти ошибки в этом коде, нужно сделать в Codeblocks! Подскажите, пожалуйста, как исправить ошибки в коде (новичок) |
Just Do It!
|
|
24.01.2019, 17:56 | 2 |
здесь код более компактнее:
http://studlab.com/news/metod_... -07-14-886 чем то не подходит? формулу полинома там тока поменять на свою.
0
|
24.01.2019, 17:56 | |
24.01.2019, 17:56 | |
Помогаю со студенческими работами здесь
2
нужно исправить ошибки в коде Нужно исправить ошибки в коде Нужно исправить ошибки в коде Нужно исправить 2 ошибки в коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |