Nie wychodzace wartosci w kodzie

0

Hej,

Mam za zadanie wykonać pewną funkcję.
screenshot-20231115235836.png

Mój kod:

#include <iostream>
#include <iomanip>
using namespace std;

double bw(double x) {
    if (x > 0) {
        return x;
    }
    else {
        x = -x;
        return x;
    }
}

long long oblicz_pierwiastek(long long x, long long e) {
    double w = 1;

    double wzor = (w * w) - x;

    while (bw(wzor) >= e) {
        w = ((x / w) + w) / 2;
    }
    return w;
}


int main() {
    double x, e;

    cout << "Podaj wartosc x i e" << endl;
    cin >> x >> e;

    cout << fixed << setprecision(8);
    cout << "Wynik wynosi: " << oblicz_pierwiastek(x, e) << endl;
    cout << "Wartosc bezwzgledna wynosi " << bw(x) << endl;
}

Niestety, ale po wpisaniu wartosci, nic dalej sie nie dzieje, nie zwraca zadnych wartosci.
screenshot-20231115235958.png

Czy cos pominalem? Dziekuje za pomoc

2

proponuje użyć debuggera, a jak nie ma to wyświetlić wartości zmiennych na konsoli i tym sposobem odkryć gdzie jest problem.

2
#include <iostream>
#include <cmath> /* ze względu na funkcję fabs */
using namespace std;

double oblicz_pierwiastek (double x, double e)
{
        double w;

        w = 1.0;
        while (fabs (w * w - x) >= e)
                w = (x / w + w) / 2.0;
        return w;
}

int main ()
{
        double x, e, w;

        cout << "x=? ";
        cin >> x;
        cout << "e=? ";
        cin >> e;
        w = oblicz_pierwiastek (x, e);
        cout << "Wynik: " << w << '\n';
        return 0;
}
1

Obliczenia pierwiastka na long'u (a nwet long long'u) to kiepsko.
Zwłaszcza że temat nawet przypomina o dokładności po przecinku

Skąd to skopiowałeś?

2
Marius.Maximus napisał(a):

proponuje użyć debuggera, a jak nie ma to wyświetlić wartości zmiennych na konsoli i tym sposobem odkryć gdzie jest problem.

Rozszerzając tę sugestię, chodzi o to żebyś dowiedział się w trakcie wykonywania programu czy: funkcje dostają takie parametry, jakie myślisz, wyliczają takie wartości, jakie myślisz, i ogólnie czy wszystko wykonuje się w taki sposób, jaki myślisz.

Podpowiedź:

  • Jakie wartości "x" oraz "e" dostajesz w funkcji "oblicz_pierwiastek" na start? (tj. jakie wartości widzisz w środku tej funkcji, a nie w miejscu jej wywołania)
  • Jakie wartości "w" wyliczają ci się po każdej iteracji pętli while? I jaką wartość ma wtedy "bw(wzor)", na podstawie którego sprawdzasz czy pętla powinna się zatrzymać czy nie?

Z tym pomoże ci debugger, który pozwoli ci zobaczyć jak się wykonuje program krok po kroku, i jakie wartości mają poszczególne zmienne w tym czasie. Ewentualnie jego ubogim przybliżeniem będzie właśnie wypisywanie wartości zmiennych na konsoli w strategicznych miejscach.

2

W idealnym świecie najpierw koncept na kartce albo w głowie a potem piszemy kod , sprawdzamy krok po kroku czy działa zgodnie z kartką , nanosimy drobne korekty i koniec końców musi działać.

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