Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Funkcja logiczna

Ostatnio zmodyfikowano 2013-03-09 10:41
Autor Wiadomość
data17
Temat założony przez niniejszego użytkownika
[C++] Funkcja logiczna
» 2013-03-09 00:28:02
Napisz funkcję logiczną która zwraca w wyniku informację czy dla zadanej przez parametr x udało się obliczyć:

f(x)=2x/pierw(x-4)*(x+15.5)
Wartość funkcji f(x) ma być zwrócone jako y drugi parametr funkcji. Następnie napisz program który dla kolejnych liczb od x=3.5,3.75,...,x=6 wyświetli wartość f(x) lub info, że wartość jest nieokreślona.

C/C++
#include <iostream>
#include <math.h>

using namespace std;


bool logic( float x, float y );

int main()
{
    float y;
    for( float x = 3.5; x <= 6; x += 0.25 )
    {
        cout << logic( x, y ) << endl;
    }
   
    return 0;
}



bool logic( float x, float y )
{
    y = 2 * x / sqrt( x - 4 ) *( x + 15.5 );
   
    if( sqrt( x - 4 ) *( x + 15.5 ) == 0 )
         cout << "Wartosc nie dostepna" << endl;
    else
         return true;
   
}

Na razie mam coś takiego nie dokońca działa poprawnie bo wyświetla chyba dla wartości 4 błąd i jakąś liczbę a dla reszty same 1...
P-77951
unimator
» 2013-03-09 10:41:26
C/C++
bool logic( float x, float y );
//...
cout << logic( x, y ) << endl;

Jestem ciekawe co według Ciebie miałaby wyświetlić taka linijka kodu (chodzi mi o tego printa rzecz jasna.

C/C++
bool logic( float x, float y )
{
    y = 2 * x / sqrt( x - 4 ) *( x + 15.5 );
   
    if( sqrt( x - 4 ) *( x + 15.5 ) == 0 )
         cout << "Wartosc nie dostepna" << endl;
    else
         return true;
   
}
Teoretycznie wartość zwracana jest albo zawsze określona (i jest prawdziwa, bo zwracasz jawnie true), albo jest nieokreślona (ale dla funkcji logic a nie tej f(x)) bo nie zwracasz nic innego jeśli if będzie prawdziwy, czyli dopuszczasz do wystąpienia Undefined behavior, bo wątpię, że standard coś takiego kompiluje bez warningów. U mnie zawsze jak funkcja dojeżdża do końca i nic nie zwraca to jest jakiś warning.

Podpowiem tylko tyle, że jeśli chcesz wyświetlać wynik poza funkcją (a tak jest teoretycznie elastyczniej), to poza logiczną wartością zwracaną przez funkcję logic musisz jeszcze jakoś wyciągnąć z niej wartość y. Oczywiście w ten sposób jaki nam podałeś nie da się tego zrobić. Należy użyć do tego referencji/wskaźników, struktur lub tablic (polecam jednak to pierwsze z naciskiem na referencję). Twoja funkcja powinna wyglądać np. tak:
C/C++
bool logic( float x, float & y );
Jeśli nie rozumiesz co robi ten znaczek '&' to poczytaj sobie o zwracaniu kilku wartości przez funkcję (temat tak pospolity, że raczej dasz radę wygooglować, a nie ma sensu, żeby tłumaczyć to po raz n-ty).
P-77960
« 1 »
  Strona 1 z 1