logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++: Jak napisać program do rozwiązywania równań kwadratowych?

Siwy_19 08 Gru 2005 18:06 60689 42
Najlepsze odpowiedzi

Jak napisać w C++ program rozwiązujący równanie kwadratowe, także dla delty ujemnej i przypadku a = 0?

Zacznij od poprawnej struktury programu: wczytuj `a`, `b`, `c` osobno (`cin >> a >> b >> c`), licz deltę jako `delta = b*b - 4*a*c`, a warunek na równanie kwadratowe sprawdzaj przez `a != 0`, nie odwrotnie [#2070350] Dla delty dodatniej licz dwa pierwiastki rzeczywiste, dla `delta == 0` jeden podwójny, a dla `delta < 0` nie wypisuj błędnie `Re` i `Im` z osobnych wzorów — część rzeczywista ma być taka sama w obu pierwiastkach: `Re = -b/(2*a)`, `Im = fabs(sqrt(fabs(delta))/(2*a))`, więc wypisujesz `x1 = Re + iIm` i `x2 = Re - iIm` [#2076230] Zmiennych nie deklaruj jako `int`, tylko co najmniej `float` lub lepiej `double`, bo inaczej tracisz ułamki i wyniki będą błędne [#2079294] Warto też obsłużyć przypadki `a == 0`, `b == 0`, `c == 0`: wtedy masz równanie liniowe, sprzeczność albo tożsamość, a nie równanie kwadratowe [#2079394] Jeśli chcesz bezpieczniej sprawdzać zera dla typów zmiennoprzecinkowych, użyj tolerancji typu `e = 1e-15` i porównuj `fabs(x) < e` zamiast `x == 0` [#2079394]
Wygenerowane przez model językowy.
REKLAMA
  • #1 2065865
    Siwy_19
    Poziom 10  
    Posty: 41
    Ocena: 2
    Witam.
    Moze mi ktos podac link do strony z rozwiązaniem równania kwadratowego w C++.
    Znalazlem kilka wskazówek ale po wpisaniu w buildera nie działało.
    Prosze o pomoc.
  • REKLAMA
  • #2 2067699
    Krook
    Poziom 16  
    Posty: 164
    Pomógł: 18
    Ocena: 4
    ale w c++ pod windows czy pod DOS??
    Jak pod DOS to powinienem mieć gdzieś gotowy programik.
  • REKLAMA
  • #3 2069891
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Witam.
    Podłącze się do tematu, żeby nowego nie zaczynać, gdyż mam podobny problem. Muszę napisać program w C++ który rozwiązuje równanie kwadratowe, z tym że stwierdzenie że nie ma rozwiązania przy delcie<0 nie wchodzi w grę. Napisałem takie coś, ale nie mam pojęcia czemu nie działa. Czy są tutaj jakieś poważniejsze błędy w myśleniu?

    //---------------------------------------------------------------------------

    #pragma hdrstop
    #include <stdio.h>
    #include <iostream.h>
    #include <math.h>
    #include <stdlib.h>
    using namespace std;
    //---------------------------------------------------------------------------

    #pragma argsused

    int main(int argc, char* argv[])
    {
    std::cout<<"Wprowadz liczbe a,b i c\n";
    int a,b,c;
    float f;
    cin>>a,b,c;
    int delta;
    cout<<"\nDelta: "<<delta=(b*b-4*a*c);
    if(a==0)
    {
    if(delta>=0)
    {
    int x1,x2;
    cout<<"\nPierwiastek x1: "<<x1=((-b-sqrt(delta))/(2*a));
    cout<<"\nPierwiastek x2: "<<x2=((-b+sqrt(delta))/(2*a));
    }
    else
    {
    int Re,Ia;
    cout<<"\nPierwiastek Re: "<<Re=((-b-sqrt(-delta))/(2*a));
    cout<<"\nPierwiastek Ia: "<<Ia=((-b+sqrt(-delta))/(2*a));
    }
    }
    else
    {
    cout<<"Funkcja nie jest kwadratowa: "<<endl;
    }
    system("PAUSE");
    return 0;
    }
    //---------------------------------------------------------------------------
  • #4 2070350
    smaug
    Poziom 13  
    Posty: 38
    Pomógł: 4
    Ocena: 4
    Są tu zasadnicze błędy składniowe:
    Zamiast:
    Powinno byc:

    Ten kod raczej nie działa:
    cout<<"\nDelta: "<<delta=(b*b-4*a*c);

    Lepiej by było:
    delta=(b*b-4*a*c); cout<<"\nDelta: "<<delta;


    Ten kod powoduje błąd logiczny:
    Powinno byc:

    Uwagi jak wyzej nt:
    
      cout<<"\nPierwiastek x1: "<<x1=((-b-sqrt(delta))/(2*a));
      cout<<"\nPierwiastek x2: "<<x2=((-b+sqrt(delta))/(2*a));
    

    oraz
    
      cout<<"\nPierwiastek Re: "<<Re=((-b-sqrt(-delta))/(2*a));
      cout<<"\nPierwiastek Ia: "<<Ia=((-b+sqrt(-delta))/(2*a));
    

    Proponuje poprawic na:
    
      cout<<"\nPierwiastek x1: "<<((-b-sqrt(delta))/(2*a));
      cout<<"\nPierwiastek x2: "<<((-b+sqrt(delta))/(2*a));
    

    i
    
      cout<<"\nPierwiastek Re: "<<((-b-sqrt(-delta))/(2*a));
      cout<<"\nPierwiastek Ia: "<<((-b+sqrt(-delta))/(2*a));
    

    A zamiast:
    system("PAUSE");

    Użyć getch() z conio.h (a widze ze uzywasz kompilatora Mikrosoftu) bądź ewentualnie getchar() z stdio.h (to w kompilatorach, ktore nie maja conio.h - np. gcc)
  • #5 2070676
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Dzięki.
    Używam BorlandC++ Buldier 6.0. On jest Microsoftu?
    Podając kod programu kożystałem z przykładowych rozwiązań podawanych przez wykładowców i zazwyczaj działało - co prawda nie zawsze w pełni tak jak sie chciało - ale jakoś. Czy wersja kompilatora ma duże znaczenie? Chodzi mi o Borlanda 5 i 6.
  • #6 2070708
    smaug
    Poziom 13  
    Posty: 38
    Pomógł: 4
    Ocena: 4
    Oj, widac sie pomylilem (wysnulem bledne wnioski na podstawie #pragma hdrstop - wydawalo mi sie, ze to jest Microsyfu, ale uswiadomiles mi, ze sie mylilem :). BCB jest oczywiscie Borlanda, nie MS.

    Generalnie w tego typu zadaniach wersja kompilatora duzego znaczenia nie ma.
  • #7 2070800
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Faktycznie, Twoja opinia bardzo się przydała!
    Oto program:

    //---------------------------------------------------------------------------

    #pragma hdrstop

    //---------------------------------------------------------------------------

    #include <iostream.h>
    #include <math.h>
    #pragma argsused
    using namespace std;
    //FUNKCJA KWADRATOWA
    int main(int argc, char* argv[])
    {
    cout<<"Wprowadz liczbe :\n";
    int a,b,c;
    float f;
    cin>>a>>b>>c;;
    int delta;
    delta=((b*b)-(4*a*c));
    if(a!=0)
    {
    if(delta>=0)
    {
    cout<<"\nPierwiastek x1: "<<((-b-sqrt(delta))/(2*a));
    cout<<"\nPierwiastek x2: "<<((-b+sqrt(delta))/(2*a))<<endl;

    }
    else
    {
    cout<<"\nPierwiastek Re: "<<((-b-sqrt(-delta))/(2*a));
    cout<<"\nPierwiastek Ia: "<<((-b+sqrt(-delta))/(2*a))<<endl;
    }
    }
    else
    {
    cout<<"Funkcja nie jest kwadratowa: "<<endl;
    }
    system("PAUSE");
    return 0;
    }
    //---------------------------------------------------------------------------
  • #8 2070808
    smaug
    Poziom 13  
    Posty: 38
    Pomógł: 4
    Ocena: 4
    Jak rozumiem teraz program juz dziala? Czy powiniennem nadal szukać błędów?
  • #9 2070821
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Chyba nie, gdyż wpisywałem te same liczby co wykładowca i wyniki pokrywają się. Sprubuje ją jeszcze rozszerzyć do poziomu funkcji liniowej, gdyż warunek a!=0 poniekąd nie załatwia całego zadania.
    Na razie dodaje programik.
    Dołączam kompletny programik (13:48):
    Załączniki:
    • Funkcja Kwadratowa2.exe (15 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Funkcja Kwadratowa.exe (14.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #10 2071310
    Siwy_19
    Poziom 10  
    Posty: 41
    Ocena: 2
    dzięki za pomoc.Poradziłem sobie sam, lecz miałem problemy z pierwiastkami z delty ujemnej.(l. zespolone ) ale juz dzieki waszej pomocy udalo mi sie napisac ten program.
  • #11 2072893
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Odnośnie samego zadania, Siwy_19 czy nie jesteś czasem na Politechnice Śląskiej, na 1 roku?
  • REKLAMA
  • #12 2073279
    _kamil
    Poziom 12  
    Posty: 41
    Dzieki Panowie mi się to napewno przyda:)
    niezbyt umiem C++ a w czwartek mam zaliczenie z tego zadania :)
    Pozdro dla Polibudy :)
    __________________
    Mam pytanie o co chodzi a mianowicie dlaczego tam jest też Re i Ia
    to chyba liczby zespolone nie ???
    A jak nie to co to za wartosci ?
    _________________
    I jeszcze jedno pytanie mozna zrobic tak by przy wpisywaniu liczb pokazały sie litery dla których wpisuje sie wartości??
    np:
    Wpisz liczby:
    a=....wpisujesz/enter
    b= ...wpisujesz itd
  • #14 2076230
    Kraszan_t
    Poziom 12  
    Posty: 30
    Pomógł: 2
    Ocena: 1
    Panowie,
    zastanówcie się co piszecie. Jak widzę to liczby zespolone nie są dla was czymś oczywistym. Każda liczba zespolona posiada część rzeczywistą Re i urojoną Im. W związku z tym pisanie
    Re=(-b-sqrt(-delta))/(2*a);
    Im=(-b+sqrt(-delta))/(2*a);
    JEST BZDURĄ

    W rozwiązaniu równania kwadratowego dla delty ujemnej otrzymujemy dwa pierwiastki zespolone - sprzężone. To znaczy, że część rzeczywista jest w obu przypadkach taka sama a urojona różni się znakiem, czyli:
    Re=-b/(2*a);
    Im=fabs(sqrt(fabs(delta))/(2*a));

    cout << "x1 = " << Re << " + i" << Im << endl;
    cout << "x2 = " << Re << " - i" << Im << endl;

    W programie brakuje rozwiązań dla a = 0 - r. liniowe, a=0 i b=0 - wyraz wolny c.
    Powodzenia i nie marnujcie swojego czasu na szukaniu gotowców tylko sami piszcie programy.
    P.S. A u kogo macie zaliczenie?
  • #15 2076805
    _kamil
    Poziom 12  
    Posty: 41
    w sumie nie wiem jak sie on nazywa :d
    a to moze by umial zaimplementowac dla liniowej i dla a=0 i b=0
  • #16 2077532
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Faktycznie, Kraszan_t masz rację co do pierwiastków zespolonych. Dopiero teraz znalazłem komplet wzorów w poradniku, a przedtem kożystałem z algorytmu w magicznych bloczkach wykładowcy. A problem opcji b=0 i c=0 był jużtylko formalnością.

    Dodano po 3 [minuty]:

    Miałeś rację, Kraszan_t co do pierwiastków. Oparłem sie na projekcje w magicznych bloczkach naszego wykładowcy. Dopiero teraz znalazłem właściwe wzory, a pozostała część z b=0 i c=0 jest dużo prostsza do wykonania.
    Dzięki!
  • #17 2077735
    _kamil
    Poziom 12  
    Posty: 41
    @fuutro: podzielisz sie tym z innymi :> :D

    mam pytanie gdzie wkleic ten kod:
    
    cout << "x1 = " << Re << " + i" << Im << endl;
    cout << "x2 = " << Re << " - i" << Im << endl; 

    aktualnie moj progrma wyglada tak:
    
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    #include <iostream.h>
    #include <math.h>
    #pragma argsused
    using namespace std;
    //FUNKCJA KWADRATOWA
    int main(int argc, char* argv[])
    {
    cout<<"Wprowadz liczbe :\n";
    int a,b,c;
    float f;
    cout << "a= ";
    cin >>a;
    cout << "b= ";
    cin >>b;
    cout << "c= ";
    cin >> c;
    int delta;
    delta=((b*b)-(4*a*c));
    if(a!=0)
    {
    if(delta>=0)
    {
    cout<<"\nPierwiastek x1: "<<((-b-sqrt(delta))/(2*a));
    cout<<"\nPierwiastek x2: "<<((-b+sqrt(delta))/(2*a))<<endl;
    
    }
    else
    {
    cout<<"\nPierwiastek Re: "<<(-b/(2*a));
    cout<<"\nPierwiastek Im: "<<fabs(sqrt(fabs(delta))/(2*a))<<endl;
    }
    }
    else
    {
    cout<<"Funkcja nie jest kwadratowa: "<<endl;
    }
    system("PAUSE");
    return 0;
    }
  • #18 2077759
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    A co mi tam........

    //---------------------------------------------------------------------------

    #pragma hdrstop

    //---------------------------------------------------------------------------

    #include <iostream.h>
    #include <math.h>
    #pragma argsused
    using namespace std;
    //FUNKCJA KWADRATOWA
    int main(int argc, char* argv[])
    {
    cout<<"Wprowadz liczbe :\n";
    int a,b,c;
    float f;
    cin>>a>>b>>c;;
    int delta;
    delta=((b*b)-(4*a*c));
    if(a!=0)
    {
    if(delta>=0)
    {
    cout<<"\nPierwiastek x1: "<<((-b-sqrt(delta))/(2*a));
    cout<<"\nPierwiastek x2: "<<((-b+sqrt(delta))/(2*a))<<endl;
    }
    else
    {
    int Re,Im;
    Re=-b/(2*a);
    Im=fabs(sqrt(fabs(delta))/(2*a));
    cout<<"x1= "<<Re<<"+i"<<Im<<endl;
    cout<<"x2= "<<Re<<"-i"<<Im<<endl;
    }
    }
    else
    {
    cout<<"Funkcja nie jest kwadratowa:\n";
    if(b!=0)
    {
    cout<<"Funkcja liniowa:\n";
    cout<<"Pierwiastek x: "<<(-c/b)<<endl;
    }
    else
    {
    if(c!=0)
    {
    cout<<"Rownanie sprzeczne:\n"<<endl;
    }
    else
    {
    cout<<"Pierwiastek x: "<<c<<endl;
    }
    }
    }
    system("PAUSE");
    return 0;
    }
    //---------------------------------------------------------------------------



    Ale zastanawiam sie nad ostatnimi liniami, odnośnie liczby c.
  • REKLAMA
  • #19 2077772
    _kamil
    Poziom 12  
    Posty: 41
    Dzieki jestem winny CI browarka :) z ktorej grupy jestes :>
  • #20 2077797
    fuutro
    Poziom 43  
    Posty: 9921
    Pomógł: 1450
    Ocena: 835
    Jestem w piątej grupie.
  • #21 2077816
    _kamil
    Poziom 12  
    Posty: 41
    a jak to mozna uzyskać by wyświetlał cos po przecinku jakiejs liczby ??
    bo wedlug programu 5/3 = 1

    a i druga kwestia zdaje mi sie ze cos zle liczy zespolone mi caly czas liczy 0+i0

    Dodano po 2 [minuty]:

    a jak wstawisz za c=0 to nie ejst rownanie sprzeczne przeciez?
  • #22 2078673
    Siwy_19
    Poziom 10  
    Posty: 41
    Ocena: 2
    Ja mam zaliczenie u
    dr.Artura Pasierbka.
    Pozdro wszystkich z Politechniki Śląskiej :)))
  • #23 2079220
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    dalej macie problem z tym rownaniem? a dlaczego a.b.c maja byc int? a jakbym chcial policzyc -/3x2+PIx+e=0 to co wtedy?

    pozdrawiam wszystkich (z bozej laski) informatykow. o 15.00 znajdziecie w tym miejscu rozwiazanie.
  • #24 2079294
    Kraszan_t
    Poziom 12  
    Posty: 30
    Pomógł: 2
    Ocena: 1
    Jeszcze raz ...
    Wyniki jakie otrzymał __kamil są spowodowane delkaracjami zmiennych, nie powinno się deklarować abc jako int, to samo x1,x2, x0, delta, re, im

    Te zmienne powinny być co najmniej float

    ...
    float a, b, c;
    double x1, x2, x0, delta, Re, Im;
    ...

    :)
    Jeszcze trochę i ten program będzie dobry, narazie jest kulawy.
  • #25 2079394
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    #include "stdafx.h"
    #include "iostream.h"
    #include "math.h"

    #define e 1e-15 //to jest chyba zasadnicza czesc poprawnosci dzialania. ustaw jak chcesz ale swiadomie

    int _tmain(int argc, _TCHAR* argv[])
    {
    int count = 0; //liczba rozwiazan: -1 sprzecznosc, -2 tozsamosc
    double a = 0.0;
    double b = 0.0;
    double c = 0.0;
    double delta = 0.0;
    double x1 = 0.0; //real
    double x2 = 0.0; //imagis

    cout << "podaj a: ";
    cin >> a;
    cout << "podaj b: ";
    cin >> b;
    cout << "podaj c: ";
    cin >> c;

    delta = b * b - 4 * a * c;

    if (fabs(a) < e)//a==0
    {
    if (fabs(b) < e)//b==0
    {
    if (fabs(c) < e)//c==0
    //rownanie 0=0
    count = -2;
    else
    //sprzecznosc 0==const
    count = -1;
    }
    else
    {//a==0, b!=0 rownanie liniowe
    x1 = -c / b;
    count = 1;
    }
    }
    else
    {
    if (fabs(delta) < e)//delta==0
    {//x1
    x1 = -b / (2 * a);
    count = 1;
    }
    else
    {
    if (delta < 0)
    {//real, imagis
    x1 = -b / (2 * a);
    x2 = fabs(sqrt(fabs(delta)) / (2 * a));
    }
    else
    {//x1, x2
    x1 = (-b - fabs(sqrt(fabs(delta))) / (2 * a));
    x2 = (-b + fabs(sqrt(fabs(delta))) / (2 * a));
    }
    count = 2;
    }
    }

    switch (count)
    {
    case -2:
    cout << "0=0!";
    break;
    case -1:
    cout << "c=0!";
    break;
    case 1:
    cout << "1 Rozwiazanie: " << x1;
    break;
    case 2:
    if (delta < 0)
    {
    cout << "1 Rozwiazanie: " << x1 << "+" << x2 << "i" << endl;
    cout << "2 Rozwiazanie: " << x1 << "-" << x2 << "i" << endl;
    }
    else
    {
    cout << "1 Rozwiazanie: " << x1 << endl;
    cout << "2 Rozwiazanie: " << x2 << endl;
    }
    break;
    case 0: //pozostaw 0 na blad: algorytm nie kontroluje wszystkich sciezek
    default:
    cout << "jakis blad!";
    break;
    }

    cin >> delta;
    return 0;
    }
  • #26 2079483
    Kraszan_t
    Poziom 12  
    Posty: 30
    Pomógł: 2
    Ocena: 1
    Do spros:

    Jaki sens ma liczenie delty jeżeli a=0? Przecież to nie jest wtedy r. kwadratowe!
    Dodatkowo przez switch'a dołożono więcej linijek kodu. Wystarczy dobre zagnieżdżanie if'ów.
  • #27 2079559
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    do Kraszan_t:
    jak ci sie nie widzi liczenie delty w tym miejscu to przesun tam gdzie ci sie widzi byle nie na koniec.

    program ma przede wszystkim pokazywac w jaki sposob nalezy zapisywac programy a nie jak maja one dzialac.
    jestem programista zawodowym od ponad 10 lat i wiem po co takie banaly sie na studiach tworzy, nie po to zeby wiedziec jak obliczyc cos co mozna w pamieci ale po to zeby sie pisac nauczyc.
    ten przyklad zawiera kilka waznych spraw odnosnie dobrego kodowania. wymieniam w kolejnosci wystapienia a nie waznosci:
    1. zmienne sa zadeklarowane na poczatku bloku i ZAINICJALIZOWANE!
    2. isnieje podzial na bloki:
    a) pobranie danych (cin << abc)
    b) preproces (wylicznie delty)
    c) algorytm wlasciwy (obliczenie)
    d) postproces (brak linijki ale jest odstep!)
    e) zwrocenie wynikow (wyswietlenie)
    f) koniec programu (cin<< cokolwiek)

    w praktyce: teraz np jak sie cos robi nie tak jak chcesz to wiesz gdzie szukac i nie miesza ci sie zmienna z wejsciem wyjsciem czy algorytmem. mozesz skupic sie na problemie a nie na programie :)

    kolejna wazna rzecz ze zwykle na zaliczeniu nie patrzy sie czy sa dobre wyniki bo nie ma programow bez bledow ale czy jest poprawnie zakodowane. czy sa zachowane powyzsze relacje czy sa odpowiednio zrobione wciecia. po tym sie poznaje dobry kod a nie po tym jak dziala.

    a ify ci wszystkiego nie zalatwia. oczywiscie w ify tam gdzie jest algorytm mozesz wrzucic to co jest w switchu oczywiscie ze tak. ale wyobraz sobie ze teraz dostales problem zsumowania tego wyniku z wynikiem jakiejs funkcji ktora masz juz zapisana i ktora jakis tam wynik zwraca.

    wtedy co? w kazdym miejscu w algorytmie gdzie tylko cos wyswietlasz musisz dodawac. a tak poprostu za moimi ifami wstawisz jako postproces np:
    x1 += funkcja (a,b,c);
    i wszystko policzy sie jak nalezy przy minimalnych zmianach. a zauwaz ze algortymy zwykle sa bardziej skomplikowane i skladaja sie z wielu wywolan. dlatego tak wazne jest odpowiednie kodowanie i w odpowiedniej kolejnosci

    do
    fuutro
    __kamil:
    jak mi przyniesiecie ten program to chociaz komentarze wytnijcie i wstawcie swoje bo wygonie :)
  • #28 2079650
    Kraszan_t
    Poziom 12  
    Posty: 30
    Pomógł: 2
    Ocena: 1
    Panie Spros!

    Jeżeli daje Pan taki świetny wykład na forum, to czemu nie powiedział Pan swoim studentom o istnieniu funkcji. Gdyby próbowali ich użyć wcześniej (piszę o kolejności wypowiedzi w temacie) jasne, że program wyglądałby inaczej. A miarą profesjonalizmu w pisaniu oprogramowania nie są lata tylko rodzaje projektów w jakich się uczestniczyło. Ja też pisałem rozwiązanie r. kw. na początku nauki programowania. Niestety nie było komputerów, czyt. prog. na kartce,a program był w Fortranie - język używany do dziś w rozwiązaniach przemysłowych.
    I jeszcze ... Po co umieszcza Pan rozwiązanie problemu na forum? Jaką ocenę dostaną Studenci? Zapytam wprost - na ile się Pan ocenia?
    Życzę miłej pracy ze studentami a Wam Studenci więcej naukowców, którzy dają rozwiązanie problemu za nim go postawią.
  • #29 2079755
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    problemem nie jest zdobycie rozwiazania. problemem jest zdobycie rozwiazania poprawnego. nigdy nie masz pewnosci ze student przychodzacy do zaliczenia sam zrobil co mial zrobic. to nie my mamy ich nauczyc ale oni sami maja zdobywac wiedze a my sie z nimi tylko dzielimy doswiadczeniem. to nie jest podstawowka zeby wymuszac na nich nauke. chca albo nie chca.
    niektorzy zrobia to sami ale poznam to, a inni przyniosa standardowe rozwiazanie zaczerpniete z ksiazki albo internetu o tym tez bede wiedzial. nie tylko oni maja do niego dostep, ja rowniez. wiekszosc przedmiotow sie zalicza bez zadnego zaangazowania intelektualnego i emocjonalnego - to jest zrozumiale. ale jesli poznajemy cos chocby tylko pobieznie to chociaz zapoznajmy sie z istota sprawy a nie jakimis szczegolami. skupmy sie na filarze problemu a nie na jego wybranym szczegole bez patrzenia na calosc.
    u mnie studenci nie dostaja ocen za rozwiazanie. u mnie sie dostaje ocene za sposob rozwiazania. niestety czesto jest tak ze wlasny sposob trzeba ocenic nizej niz gotowca z neta. ale coz. student musi powinien wiedziec kiedy i gdzie poszukac a kiedy pomyslec.
  • #30 2079810
    _kamil
    Poziom 12  
    Posty: 41
    #define e 1e-15 

    o co Chodzi w tej linijce kodu>>>???

    i puytanie mi wyskakuj błąd przy tej linijce
    #include "stdafx.h"

    nie umie znaleźć tego modułu

    probowalem zmienic na
    #include <stdafx.h>

    ale tez nic to nie dało

Podsumowanie tematu

✨ Dyskusja dotyczyła napisania programu w C++ rozwiązującego równania kwadratowe, w tym obsługi pierwiastków zespolonych dla delty ujemnej. Poruszono kwestie poprawnej składni, deklaracji zmiennych (zalecane typy float lub double zamiast int), oraz prawidłowego obliczania delty i pierwiastków. Wskazano błędy w użyciu operatorów wejścia/wyjścia (np. cin >> a >> b >> c zamiast cin >> a,b,c) oraz logiczne błędy w warunkach (np. if(a!=0) zamiast if(a==0)). Omówiono sposób wyświetlania części rzeczywistej i urojonej pierwiastków zespolonych, podkreślając, że część rzeczywista jest taka sama dla obu rozwiązań, a część urojona różni się znakiem. Zaproponowano strukturę programu z podziałem na fazy: pobieranie danych, preproces (obliczenie delty), algorytm rozwiązania, postproces i wyświetlanie wyników. Poruszono także kwestie dokładności porównań zmiennoprzecinkowych z użyciem stałej epsilon (np. #define e 1e-15) dla poprawnego rozpoznawania zer. Wskazano na możliwość rozszerzenia programu o obsługę równań liniowych (a=0) i przypadków szczególnych (b=0, c=0). Użytkownicy dzielili się fragmentami kodu, poprawkami i sugestiami dotyczącymi formatowania wejścia (np. wyświetlanie komunikatów "a=", "b=", "c=" przed wprowadzeniem wartości). Poruszono też temat wersji kompilatora (Borland C++ Builder 5 i 6) i ich wpływu na działanie programu, stwierdzając, że nie jest to kluczowe dla tego typu zadań. Wskazano na potrzebę samodzielnego pisania programów i rozumienia algorytmów zamiast korzystania z gotowych rozwiązań. Na koniec zaprezentowano kompletny, działający program uwzględniający wszystkie omówione aspekty, w tym obsługę pierwiastków zespolonych i przypadków brzegowych.
Wygenerowane przez model językowy.
REKLAMA