[C] Obliczanie wartości funkcji. Problem z zapisem dziedziny

0
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main ()

{
    int k;
    double x,a,b,c,d,y;
    const double EPS = 0.000001;
    
    a=exp(x)+x;
    b=cos(M_PI*x);
    c=tan(b);
    
    do {
        printf ("Podaj punkt: ");
        k=scanf("%lf",&x);
        if(k==0)
        printf ("\n\tBledny format\n\n");
        if((fabs(a)>1)||(fabs(-b)<EPS)||(fabs(-c)<EPS))
        printf ("Punkt nie nalezy do dziedziny.\t Podaj inny.\n\n");
        fflush(stdin);
       }while ((k==0)||(fabs(a)>1)||(fabs(-b)<EPS)||(fabs(-c)<EPS));
    
    d=1/b;
    y=asin(a)-sqrt(c);
    printf ("Wartosc funkcji y wynosi [%f]",y);
    
    getch ();
    return 0;
    
}

W razie pytań.
Pierwsze zabezpieczenie wraz z fflush dotyczy tego by nie wpisać czasem jakiejś litery lub znaku zamiast liczby.
Stałą M_PI każą nam używać.

Program ma obliczać wartość tej funkcji. Ale gdzieś coś nie mogę dojść co jest źle w tej dziedzinie. Może jakąś prostą głupotę popełniłem?

Mógłbym liczyć na waszą pomoc?

Przepraszam jeśli zapis programu jest nie czytelny. Starałem się jak mogłem. Zatem proszę nie zwracajcie na to uwagi :]

Pozdrawiam.

0

używasz niezainicjowanych zmiennych (pokiełbasiłeś kolejność wykonywania instrukcji).

Co ci daje fabs(-cos)? Nie uważasz, że to trochę śmieszne.

Nie sprawdzałem poprawności warunków, poczekam, aż poprawisz kolejność instrukcji.

0

fakt. nie to wkleiłem.
Ale to co teraz wkleje nie działa i tak jak powinno :/

 
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main ()

{
    int k;
    double x,a,b,c,d,y;
    const double EPS = 0.000001;
   
   
    do {
        printf ("Podaj punkt: ");
        k=scanf("%lf",&x);
        
        if(k==0)
        printf ("\n\tBledny format\n\n");
        a=exp(x)+x;
        b=cos(M_PI*x);
        c=tan(b);
         
        if((fabs(a)>1)||(fabs(-b)<EPS)||(fabs(-c)<EPS))
        printf ("Punkt nie nalezy do dziedziny.\t Podaj inny.\n\n");
        
       fflush(stdin);
       }while ((k==0)||(fabs(a)>1)||(fabs(-b)<EPS)||(fabs(-c)<EPS));
   
    d=1/b;
    y=asin(a)-sqrt(d);
    printf ("Wartosc funkcji y wynosi [%f]",y);
   
    getch ();
    return 0;
   
}
0

To ja ponowię pytanie MarkaR22 - czym się różni fabs(-x) od fabs(x) ?

0

heh. czepiacie się szczegółów, które i tak nie zmieniają działania programu w żadnym stopniu.

to tylko estetyka, którą zajmę się jak skończę projekt.

Nasiedziałem się nad tym niby prostym zadaniem kilka godzinek, ale się udało samemu bez nikogo pomocy zrobić :D Satysfakcja gwarantowana :D

0

Czegoś jeszcze brakuje, bo c jest jest tylko ustawione i użyte w warunku, a to jest zbędne bo jeśli b jest różne od zera to c na pewno też jest różne od zera (fabs(b) jest zawsze <= 1 więc nie ma problemu z okresowością tangensa). Potem nie widzę byś użył c do obliczeń.

0

później trochę inaczej to zapisałem.

d=1/c . Tam przez pomyłkę inaczej zapisałem tę funkcję.

0

teraz mam tak cały program:

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main ()

{
    int k;
    double a,b,c,d,e,f,g,h,x;
    const double EPS = 0.000000001;
    
    do {
        printf ("Podaj punkt: ");
        k=scanf("%lf",&x);
        a=cos(M_PI*x);
        b=tan((a*M_PI)/(180));
        c=1/b;
        d=(exp(x)+x);
        if (k==0)
        printf ("\n\n\tB\210\251dny format !!!\n\n");
        if ((k!=0)&&((fabs(d)>1)||(fabs(a)<EPS)||(fabs(b)<EPS)||(d<0)))
        printf ("\n\n\tPunkt nie nale\276y do dziedziny funkcji !!!\n\n");
        fflush(stdin);
        }while ((k==0)||(fabs(d)>1)||(fabs(a)<EPS)||(fabs(b)<EPS)||(d<0));
        e=sqrt(c);
        f=asin(d);
        g=f*180/M_PI;
        h=g-e;
        printf ("\n\tWarto\230\206 funkcji y wynosi [%f]",h);
     

getch ();
return 0;
    
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1