Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- /* run this program using the console pauser or add your own getch, system("pause") or input loop */
- void wyswietl_row(int *tab){
- if(tab[0] == 0){
- if(tab[1] > 0){
- if(tab[2] == 0){
- printf("%dxx = 0\n",tab[1] );
- }else if(tab[2] > 0){
- printf("%dxx + %d = 0\n",tab[1],tab[2] );
- }else if(tab[2] < 0){
- printf("%dxx + (%d) = 0\n",tab[1],tab[2] );
- }
- }else if(tab[1] < 0){
- if(tab[2] == 0){
- printf("%dxx = 0\n",tab[1] );
- }else if(tab[2] > 0){
- printf("%dxx + %d = 0\n",tab[1],tab[2] );
- }else if(tab[2] < 0){
- printf("%dxx + (%d) = 0\n",tab[1],tab[2] );
- }
- }else if(tab[1] == 0){
- if(tab[2] != 0){
- printf("Rownanie sprzeczne \n");
- exit(0);
- }else{
- printf("rownanie tozsamosciowe \n" );
- exit(0);
- }
- }
- }else{
- if(tab[1] > 0){
- if(tab[2] > 0){
- printf("%dxxxx + %dxx + %d = 0 \n",tab[0],tab[1],tab[2] );
- }else if(tab[2] < 0){
- printf("%dxxxx + %dxx + (%d) = 0 \n",tab[0],tab[1],tab[2] );
- }else if(tab[2] == 0){
- printf("%dxxxx + %dxx = 0 \n",tab[0],tab[1] );
- }
- }else if(tab[1] < 0){
- if(tab[2]> 0){
- printf("%dxxxx + (%dxx) + %d = 0 \n",tab[0],tab[1],tab[2] );
- }else if(tab[2] < 0){
- printf("%dxxxx + (%dxx) + (%d) = 0 \n",tab[0],tab[1],tab[2] );
- }else if(tab[2] == 0){
- printf("%dxxxx + %dxx = 0 \n",tab[0],tab[1] );
- }
- }else if(tab[1] == 0){
- if(tab[2] > 0){
- printf("%dxxxx + %d = 0 \n",tab[0],tab[2] );
- }else if(tab[2] < 0){
- printf("%dxxxx + (%d) = 0 \n",tab[0],tab[2] );
- }else if(tab[2] == 0){
- printf("%dxxxx = 0 \n",tab[0] );
- }
- }
- }
- }
- double oblicz_delte(int *tab){
- int temp = 1.0 * (pow(tab[1],2)) - (4*tab[0]*tab[2]);
- return temp;
- }
- double sqrt_heron(double delta,double err){
- if(delta < 0){
- delta = -1.0 * delta;
- }
- double temp = 1.0 * (delta / 2);
- double temp2 = 1.0 * (delta / temp);
- for(;;){
- if(fabs(temp - temp2) < err || pow(temp,2) == delta){
- break;
- }else{
- temp = (1.0*temp+temp2) / 2;
- temp2 = (1.0*delta) / (1.0*temp);
- }
- }
- if(delta < 0 ){
- return -1 * temp;
- }
- return temp;
- }
- double sqrt_newton(double delta,double err){
- if(delta < 0){
- delta = -1.0 * delta;
- }
- double temp = 1.0 * (delta / 2);
- double temp2 = temp;
- temp = temp2 - ((1.0*pow(temp2,2) - delta*1.0) / (2.0*temp2));
- for(;;){
- if(fabs(temp - temp2) < err || pow(temp,2) == delta){
- break;
- }else{
- temp2 = temp;
- temp = temp2 - ((pow(temp2,2) - delta ) / (2*temp2));
- }
- }
- if(delta < 0 ){
- return -1 * temp;
- }
- return temp;
- }
- void oblicz_pierwiastki(int *tab,double *x1r,double *x2r,double *x3r,double *x4r,
- double *x1u,double *x2u,double *x3u,double *x4u,double err){
- double delta,pdelta;
- delta = oblicz_delte(tab);
- if(err == 0){
- if(delta < 0){
- pdelta = sqrt(-delta);
- }else{
- pdelta = sqrt(delta);
- }
- }else if(err > 0.1){
- pdelta = sqrt_newton(delta,err);
- }else if(err > 0 && err < 0.1){
- pdelta = sqrt_heron(delta,err);
- }
- printf("delta wynosi : %f\n",delta );
- if(tab[0] != 0){
- if(delta > 0){
- //printf("pdelta wynosi : %f\n",pdelta );
- *x1r = (-tab[1]-pdelta) / (2*tab[0]);
- *x2r = (-tab[1]+pdelta) / (2*tab[0]);
- //printf("pierwiastki wynosza : x1 = %f, x2 = %f \n",*x1r,*x2r);
- }else if(delta < 0){
- //printf("pdelta wynosi : %f \n",pdelta );
- pdelta = pdelta * -1;
- *x1r = (tab[1]*(-1.0)) / (2*tab[0]*1.0);
- *x2r = *x1r;
- *x1u = (-pdelta*1.0) / (2*tab[0]*1.0);
- *x2u = -(*x1u);
- //printf("pierwiastki wynosza x1 = %f + %fi, x2 = %f + %fi\n",*x1r,*x1u,*x2r,*x2u);
- }else if(delta == 0){
- //printf("pdelta wynosi : %f0\n",pdelta );
- *x1r = (-tab[1]) / (2 * tab[0]);
- //printf("pierwaiastek wynosi x1 = %f \n", *x1r);
- }
- }else{
- *x1r = (-tab[2]*1.0 / tab[1]*1.0);
- //printf("pierwiastek wynosi x1 = %f\n",*x1r );
- }
- double temp = 0.0,temp2 = 0.0,temp3 = 0.0,temp4 = 0.0;
- if(delta > 0){
- temp = *x1r,temp2 = *x2r;
- if(err == 0){
- if(temp > 0){
- *x1r = sqrt(temp);
- *x2r = -(*x1r);
- }else if( temp < 0){
- *x1r = 0;
- *x2r = 0;
- *x1u = sqrt(-temp);
- *x2u = -(*x1u);
- }
- if(temp2 > 0){
- *x3r = sqrt(temp2);
- *x4r = -(*x3r);
- }else if(temp2 < 0){
- *x3r = 0;
- *x4r = 0;
- *x3u = sqrt(-temp);
- *x4u = -(*x1u);
- }
- }else if(err > 0.1){
- if(temp > 0){
- *x1r = sqrt_newton(temp,err);
- *x2r = -(*x1r);
- }else if( temp < 0){
- *x1r = 0;
- *x2r = 0;
- *x1u = sqrt_newton(-temp,err);
- *x2u = -(*x1u);
- }
- if(temp2 > 0){
- *x3r = sqrt_newton(temp2,err);
- *x4r = -(*x3r);
- }else if(temp2 < 0){
- *x3r = 0;
- *x4r = 0;
- *x3u = sqrt_newton(-temp2,err);
- *x4u = -(*x1u);
- }
- }else if(err > 0 && err < 0.1){
- if(temp > 0){
- *x1r = sqrt_heron(temp,err);
- *x2r = -(*x1r);
- }else if( temp < 0){
- *x1r = 0;
- *x2r = 0;
- *x1u = sqrt_heron(-temp,err);
- *x2u = -(*x1u);
- }
- if(temp2 > 0){
- *x3r = sqrt_heron(temp2,err);
- *x4r = -(*x3r);
- }else if(temp2 < 0){
- *x3r = 0;
- *x4r = 0;
- *x3u = sqrt_heron(-temp2,err);
- *x4u = -(*x1u);
- }
- }
- }else if(delta < 0){
- temp = *x1r,temp2 = *x1u,temp3 = *x2r,temp4 = *x2u;
- if(err == 0){
- *x1r = sqrt(((sqrt(pow(temp,2) + pow(temp2,2)) + temp)/2));
- *x1u = sqrt(((sqrt(pow(temp,2) + pow(temp2,2)) - temp)/2));
- *x2r = (*x1r);
- *x2u = -(*x1u);
- *x3r = -sqrt(((sqrt(pow(temp3,2) + pow(temp4,2)) + temp3)/2));
- *x3u = sqrt(((sqrt(pow(temp3,2) + pow(temp4,2)) - temp3)/2));
- *x4r = (*x3r);
- *x4u = -(*x3u);
- }else if(err > 0.1){
- *x1r = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) + temp)/2),err);
- *x1u = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) - temp)/2),err);
- *x2r = *x1r;
- *x2u = -(*x1u);
- *x3r = -sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) + temp3)/2),err);
- *x3u = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) - temp3)/2),err);
- *x4r = (*x3r);
- *x4u = -(*x3u);
- }else if(err > 0 && err <= 0.1){
- *x1r = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) + temp)/2),err);
- *x1u = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) - temp)/2),err);
- *x2r = *x1r;
- *x2u = -(*x1u);
- *x3r = -sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) + temp3)/2),err);
- *x3u = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) - temp3)/2),err);
- *x4r = (*x3r);
- *x4u = -(*x3u);
- }
- }else if(delta == 0){
- temp = *x1r;
- if(temp > 0){
- if(err == 0){
- *x1r = sqrt(temp);
- }else if(err > 0.1){
- *x1r = sqrt_newton(temp,err);
- }else if(err > 0 && err < 0.1){
- *x1r = sqrt_heron(temp,err);
- }
- *x2r = -(*x1r);
- //printf("pierwiastki wynosza : x1 = %f, x2 = %f \n",*x1r,*x2r);
- }else if(temp < 0){
- if(err == 0){
- *x1u = sqrt(-temp);
- }else if(err > 0.1){
- *x1u = sqrt_newton(-temp,err);
- }else if(err > 0 && err < 0.1){
- *x1u = sqrt_heron(-temp,err);
- }
- *x2u = -(*x1u);
- }
- }
- //printf("x1r = %f x1u = %f\n",*x1r,*x1u );
- //printf("x2r = %f x2u = %f\n",*x2r,*x2u );
- //printf("x3r = %f x3u = %f\n",*x3r,*x3u );
- //printf("x4r = %f x4u = %f\n",*x4r,*x4u );
- }
- void dodaj_l_zespolone(double *sr, double *su,double *x1r,double *x2r,
- double *x3r, double *x4r,double *x1u,double *x2u, double *x3u, double *x4u){
- *sr = *x1r + *x2r + *x3r + *x4r;
- *su = *x1u + *x2u + *x3u + *x4u;
- }
- void odejmij_l_zespolone(double *rr, double *ru,double *x1r,double *x2r,
- double *x3r, double *x4r,double *x1u,double *x2u, double *x3u, double *x4u )
- {
- *rr = *x1r - *x2r - *x3r - *x4r;
- *ru = *x1u - *x2u - *x3u - *x4u;
- return;
- }
- void formatuj_l_zespolone(double rzecz, double uroj)
- {
- printf("%lf ", rzecz);
- if (uroj < 0)
- printf("+ (%lfi)\n", uroj);
- else
- printf("+ %lfi\n", uroj);
- return;
- }
- void wyswietl_wyniki(double x1r, double x2r, double x3r, double x4r, double x1u, double x2u, double x3u, double x4u, double sr, double su, double rr, double ru) {
- printf("\n\n");
- printf("x1: ");
- formatuj_l_zespolone(x1r, x1u);
- if(x2r !=0 || x2u != 0){
- printf("x2:");
- formatuj_l_zespolone(x2r, x2u);
- }
- if(x3r != 0 || x3u != 0){
- printf("x3:");
- formatuj_l_zespolone(x3r, x3u);
- }
- if(x4r != 0 || x4u != 0){
- printf("x4:");
- formatuj_l_zespolone(x4r, x4u);
- }
- printf("\n\n");
- printf("Suma : ");
- formatuj_l_zespolone(sr, su);
- printf("Roznica: ");
- formatuj_l_zespolone(rr, ru);
- return;
- }
- int main(int argc, char *argv[]) {
- int temp;
- double error;
- scanf("%lf",&error);
- int tab[3];
- for(temp = 0;temp<3;temp++){
- scanf("%d",&tab[temp]);
- }
- double x1r = 0.0,x2r = 0.0,x3r = 0.0,x4r = 0.0;
- double x1u = 0.0,x2u = 0.0,x3u = 0.0,x4u = 0.0;
- double sr = 0.0,su = 0.0,rr = 0.0,ru= 0.0;
- wyswietl_row(tab);
- oblicz_pierwiastki(tab,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u,error);
- dodaj_l_zespolone(&sr,&su,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u);
- odejmij_l_zespolone(&rr,&ru,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u);
- wyswietl_wyniki(x1r,x2r,x3r,x4r,x1u,x2u,x3u,x4u,sr,su,rr,ru);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement