Wartości zmiennej zmienia się w stałą Eulera

0

Witam, mam problem z fragmentem programu w C++, mam pewną zmienną, wypisuję jej wartość (500) na ekranie, w następnej linijce kodu robię to drugi raz. Za pierwszym razem wszystko jest w porządku ale za drugim razem wartość wypisana jest w postaci stałej eulera. To tylko fragment programu. Będę bardzo wdzięczny za wszelką pomoc.

0

To wrzuć ten fragment kodu albo przenieś się na forum jasnowidzów :)

6

To nie jest żadna postać Eulera.

Przy wypisywaniu liczb typu float/double przez cout jest kilka możliwych formatów.
Jednym z nich jest std::scientific, http://www.cplusplus.com/reference/ios/scientific/.
Zapis x e y oznacza x*10^y, czyli zwykła notacja naukowa. e to skrót od exponent
Domyślnie cout korzysta z niej dla dużych/małych liczb.
To samo dzieje się w niektórych kalkulatorach.
Przyczyną są ograniczenia konsoli i prostych wyświetlaczy LCD.

0

Tak, ale ja nie zmieniłem wartości tej zmiennej tzn używając cout każę wypisać zmienną która ma wartość 500 w następnej linijce kody robię to samo ale tym razem program wypisuje już całkiem co innego.

1
#include <iostream>
#include <math.h>
#include <cstdlib>
using namespace std;

long double f(long double x, long double n, long double wsp[])
{
int i=2;
long double fx=0;
	while (i<=n)
	{
	fx=fx+wsp[i]*pow(x,i);
	i++;
	}
cout<<endl<<"LICZE FX  "<<wsp[1]<<endl;

return fx+wsp[0]+wsp[1]*x;
}

int glowna()
{
cout<<"Podaj stopien funkcji: ";
int n;
cin>>n;
cout<<endl<<endl<<"Podaj pierwszy wyraz funkcji: ";
long double a;
cin>>a;
cout<<"Podaj drugi wyraz funkcji: ";
long double b;
cin>>b;
long double wsp[n];
    for (int i=0; i<=n; i++)
    {
    cout<<"Podaj wspolczynik przy x^"<<i<<": ";
    cin>>wsp[i];
    }
cout<<"Jakiej dokladnosci wyniku oczekujesz: ";
long double d;
cin>>d;
long double fb=f(b, n, wsp);
if ( f(a,n,wsp)*fb>=0)
{
cout<<endl<<"Warunek f(a)*f(b)<0 nie jest spelniony"<<endl<<endl;
return 0;
}
bool pr=1;
    while (pr=1)
    {
    long double x=(a+b)/2;
    cout<<endl<<endl<<"TUTAJx: "<<wsp[1]<<endl<<endl;
    long double fx=f(x,n,wsp);
    cout<<endl<<endl<<"TUTAJy: "<<wsp[1]<<endl<<endl;
    fb=f(b, n, wsp);
    cout<<endl<<endl<<"TUTAJz: "<<wsp[1]<<endl<<endl;


    cout<<endl<<endl<<"TUTAJsss: "<<wsp[1]<<endl<<endl;

    system ("pause");
    }
}

int main()
{
bool pg=1;
	while (pg==1)
	{
	glowna();
	}
}

znaczniki code

0

Dodam jeszcze że na innym kompie gdzie mam procesor 64 i na kompilatorze DEV nie było problemu.

0

Tego nie idzie przeczytać :)

0

Co masz na myśli znaczników "=="

0

Wiem ale tak naprawdę szukam kogoś kto mi powie co może wpłynąć na to że zmienna która w jednej linijce kodu ma wartość np 500 w następnej ma już nie wiadomo co? Mam na jutro ten program na uczelnie i już mnie krew zalewa.

0

Aby pokolorowało składnie.
NP:

int main()
{
bool pg=1;
    while (pg==1)
    {
    glowna();
    }
} 
0

Jakie dane podajesz, że wyskakuje taki błąd jak opisujesz ?

0

Nie nie to wygląda tak:

long double s=500;
cout<<s;
cout<<s;
 

W konsoli wygląda to tak:
"500
blabla (stała Eulera ileś tam)"

To jest tylko fragment i coś z reszty programu zakłóca to bo jakbym wpisał tylko to wszystko jest ok. Pytanie co może spowodować powyższą sytuacje.

0

Burdel w kodzie?
Dla jakiego wywołania to ci się sypie?

0

Masz wstawiony kod powyżej, trochę go zwaliłem kod jak szukałem błędu. Ale tutaj to jest nieistotne.Program sypie się przy wypisywaniu wsp[1] dokładnie. Za pierwszym razem wypisuje wartość prawidłową np 500. Ale cout który jest tylko linijke niżej wypisuje już nie wiadomo co. Nic się z tą zmienną nie dziej więc jak to możliwe.

0

Ale podaj mi dla jakich danych to ci się robi bo odpaliłem ten kod u siebie i żadnej liczby eulera nie widzę =.=

0

wpisz takie dane:
1
-100
50
150
500
Z TYMŻE ŻE MI TEŻ DZIAŁAŁ NA 64BITOWYM KOMPIE I NA DEV KOMPILATORZE ALE NA INNYCH KOMBINACJAHCH JUŻ NIE

0

Ja dodam tylko, że to e to nie jest liczba eulera jak z uporem maniaka piszesz. E oznacza 10 do potęgi. np 3e-23 to jest 3 razy 10 do -23.

Tu masz linka w której trochę pisze o notacji naukowej: http://j_rucka.republika.pl/INFORMATYKA/Turbo_Pascal/tp07.html
Poczytaj bo jak wykładowca usłyszy o liczbie eulera to ci da kopa w kosmos :)

1

W każdej pętli masz off-by-one bo robisz pętle od 0 do n podczas gdy tablica o n elementach ma indeksy od 0 do n-1...

0

jejku każdy z was pisze tu nie o tym co jest problemem, jeśli nie znacie rozwiązania problemu to może lepiej się nie wypowiadać?

przecież nie ma w moim programie błędu off-by-one

0

Jak zwał, tak zwał. Tu

    for (int i=0; i<=n; i++)
    {
    cout<<"Podaj wspolczynik przy x^"<<i<<": ";
    cin>>wsp[i];
    }

przekraczasz zakres tablicy.

0

Jak to przekraczam? Jak wpisuję n=0 to program pętla wykonuje się raz i pyta mnie o i[0]
dla n=1 wykonuje się 2 razy dla i[0] i i[1]
i tak dalej,
nie widzę problemu w tej pętli

OK masz racje, dzięki wielkie

0

Nie rozumiem tego:

(...)nie widzę problemu w tej pętli

OK masz racje, dzięki wielkie

skoro edytować postu nie mogłeś.
Zanim napiszesz

jejku każdy z was pisze tu nie o tym co jest problemem, jeśli nie znacie rozwiązania problemu to może lepiej się nie wypowiadać?

przeczytaj odpowiedzi 2x, a jak jeszcze nie rozumiesz, to przeczytaj jeszcze 10x. Jak nie chcesz, żeby ludzie się wypowiadali to nie zakładaj tematu.

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