• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ błąd w programie do rozwiązywania delty

Object Storage Arubacloud
0 głosów
540 wizyt
pytanie zadane 10 grudnia 2022 w C i C++ przez Jakub123456 Nowicjusz (160 p.)

Potrzebuje pomocy w znalezieniu błędu w programie robionym w MS Visual Studio, sam już nie wiem gdzie mógłby on być. Robię to pierwszy raz, także podstawy są u mnie na niskim poziomie, więc proszę bez linczusmiley. Problem polega na ciągłym wyświetlaniu ,,1rozwiązanie" i liczeniu rozwiązania pomimo różnych niewiadomych.

#include <iostream>
#include<math.h>

using namespace std;
int main()
{
    float a, b, c, delta{}, wynik1{}, wynik2{}, wynik3{};
    cout<< "podaj a:";
    cin >> a;
    cout<< "podaj b:";
    cin >> b;
    cout<< "podaj c:";
    cin >> c;
    delta=((b * b) - (4*a * c));
    cout << "delta:" << delta << endl;
    if (delta < 0)
    {
        cout << "brak rozwiazan" << endl;
    }
    else if (delta > 0)
    {
        cout << "2 rozwiazania" << endl;
        wynik2=(-b - sqrt(delta)) / (2 * a);
        wynik3=(b - sqrt(delta)) / (2 * a);
        cout << "wynik1:" << wynik2 << endl;
        cout << "wynik2:" << wynik3 << endl;
    }
    else if (delta == 0)
    {
        cout << "1 rozwiazanie" << endl;
        wynik1=(-1 * b) / (2 * a);
        cout << "wynik:" << wynik1 << endl;
    }
       }

 

komentarz 10 grudnia 2022 przez Great Stary wyjadacz (12,360 p.)

BTW:

wynik3=(-b + sqrt(delta)) / (2 * a);
komentarz 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)

Faktycznie, ale to nie rozwiązuje mojego problemusmiley

komentarz 10 grudnia 2022 przez Wiciorny Ekspert (270,690 p.)

@Jakub123456, wykonałem ten program na liczbach i otrzymałem wyniki :) delty.
podaj a:5
podaj b:6
podaj c:7
delta:-104
brak rozwiazan
 

3 odpowiedzi

+1 głos
odpowiedź 10 grudnia 2022 przez ptomeccc Użytkownik (800 p.)

Jednym z potencjalnych błędów w Twoim programie jest brak weryfikacji, czy wprowadzone przez użytkownika wartości dla a, b i c spełniają warunek a ≠ 0. W takim przypadku program zawsze zakłada, że istnieje jedno rozwiązanie równania kwadratowego, niezależnie od wartości wprowadzonych przez użytkownika.

Aby naprawić ten błąd, należy dodać dodatkową instrukcję sprawdzającą, czy a jest różne od 0, i w przypadku gdy a jest równe 0, wyświetlić komunikat o błędzie i zakończyć działanie programu. Możesz to zrobić, dodając następujący kod po wczytaniu wartości a, b i c:

if (a == 0) { cout << "a nie moze byc rowne 0!" << endl; return 0; }

Dodanie tej instrukcji powinno rozwiązać problem.

komentarz 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)

Niestety po dodaniu kodu problem nadal występuje

#include <iostream>
#include<math.h>

using namespace std;
int main()
{
    float a, b, c, delta{}, wynik1{}, wynik2{}, wynik3{};
    cout<< "podaj a:";
    cin >> a;
    cout<< "podaj b:";
    cin >> b;
    cout<< "podaj c:";
    cin >> c;
    if (a == 0)
    {
        cout << "to nie jest równanie kwadratowe" << endl;
        return 0;
    }
    delta==((b * b) - (4*a * c));
    cout << "delta:" << delta << endl;
    else if (delta < 0)
    {
        cout << "brak rozwiazan" << endl;
    }
    else if (delta > 0)
    {
        cout << "2 rozwiazania" << endl;
        wynik2 == (-b - sqrt(delta)) / (2 * a);
        wynik3 == (-b + sqrt(delta)) / (2 * a);
        cout << "wynik1:" << wynik2 << endl;
        cout << "wynik2:" << wynik3 << endl;
    }
    else if (delta == 0)
    {
        cout << "1 rozwiazanie" << endl;
        wynik1 == (-1 * b) / (2 * a);
        cout << "wynik:" << wynik1 << endl;
    }
       }

 

1
komentarz 10 grudnia 2022 przez Great Stary wyjadacz (12,360 p.)
Czemu zamieniłeś wszystkie operatory przypisania(=) na operatory porównania(==)? Teraz kod jest bez sensu. Wcześniejszy kod był poprawny.
komentarz 10 grudnia 2022 przez Wiciorny Ekspert (270,690 p.)
wynik2 == (-b - sqrt(delta)) / (2 * a);

        wynik3 == (-b + sqrt(delta)) / (2 * a);

itp to jest niepoprawne to jest porównanie, a nie przypisanie więc tak naprawdę sprawdzasz czy wynik jest równy temu co po prawej stronie operatora "==", powinieneś zapisać "="
komentarz 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)
To jedna z moich prób po tym, jak już nic nie przynosiło efektu.
0 głosów
odpowiedź 10 grudnia 2022 przez Wiciorny Ekspert (270,690 p.)
edycja 10 grudnia 2022 przez Wiciorny

Generalnie jak wprowadziłem dane :
podaj a:1
podaj b:5
podaj c:2
delta:17
2 rozwiazania
wynik1:-4.56155
wynik2:0.438447

to wyniki otrzymałem. Jesteś pewny, że coś Ci nie umknęło? 
 


#include <iostream>
#include<math.h>
 
using namespace std;
int main()
{
    float a, b, c, delta{}, wynik1{}, wynik2{}, wynik3{};
    cout<< "podaj a:";
    cin >> a;
    cout<< "podaj b:";
    cin >> b;
    cout<< "podaj c:";
    cin >> c;
    delta=((b * b) - (4*a * c));
    cout << "delta:" << delta << endl;
    if (delta < 0)
    {
        cout << "brak rozwiazan" << endl;
    }
    else if (delta > 0)
    {
        cout << "2 rozwiazania" << endl;
        wynik2=(-b - sqrt(delta)) / (2 * a);
        wynik3=(b - sqrt(delta)) / (2 * a);
        cout << "wynik1:" << wynik2 << endl;
        cout << "wynik2:" << wynik3 << endl;
    }
    else if (delta == 0)
    {
        cout << "1 rozwiazanie" << endl;
        wynik1=(-1 * b) / (2 * a);
        cout << "wynik:" << wynik1 << endl;
    }
       }
       

 

komentarz 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)
Wszystko jest kopiuj wklej z programu, więc już kompletnie nie mam pojęcia.
komentarz 10 grudnia 2022 przez Wiciorny Ekspert (270,690 p.)
a jakim programem uruchamiasz? Może coś "siedzi w pamięci aktualnie"?  Sprawdź dobrze.
komentarz 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)
Ogólnie to pisałem program w MS Visual Studio, ale po tylu nieudanych próbach testowałem również program na stronach do C++
0 głosów
odpowiedź 10 grudnia 2022 przez Jakub123456 Nowicjusz (160 p.)

Mały update, MS Visual Studio dalej protestuje, natomiast kod na stronach do C++ zaczął działać, także Dziękuję każdemu kto pomógł, jesteście Wielcy.

PS. Nawet bez założenia że a ma być różne od zera kod działa, tylko daje przy a=0 dziwne wyniki, ale to jak sobie przypomniałem wiadome z równań kwadratowychsmiley.

Podobne pytania

0 głosów
0 odpowiedzi 499 wizyt
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 26 października 2016 w C i C++ przez Kazik98x Obywatel (1,780 p.)
–1 głos
1 odpowiedź 293 wizyt

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...