• 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

42 Warsaw Coding Academy
0 głosów
932 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,660 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 (280,610 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,660 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 (280,610 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 (280,610 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 (280,610 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 556 wizyt
0 głosów
1 odpowiedź 351 wizyt
pytanie zadane 26 października 2016 w C i C++ przez Kazik98x Obywatel (1,780 p.)
–1 głos
1 odpowiedź 560 wizyt

93,377 zapytań

142,380 odpowiedzi

322,532 komentarzy

62,727 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...