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

Zatrzymanie dzialania programu (dzialanie na zmiennych tekstowych)

Object Storage Arubacloud
+1 głos
454 wizyt
pytanie zadane 5 stycznia 2021 w C i C++ przez Adyn Nowicjusz (190 p.)

Dzień dobry,

próbuje zrobić kalkulator obslugujacy dzialania na stringach, zrobilem juz wszystko z wyjatkiem dzielenia. Próbuje napisac to tak, aby odejmowac od pierwszej liczby druga, i tyle ile sie zmiesic wynosi ilosc całkowitych dzielnikow. Problem polega na czyms w kodzie, funkcja nie zatrzymuje sie tylko zapętla a ja nie wiem jak ja zatrzymac. Mowiac bardziej zrozumiale, chce zatrzymac funkcje w momencie kiedy program dojdzie do momentu, kiedy pierwsza liczba odjac druga liczba bedzie wartoscia ujemna. Bylbym wdzieczny za jakąkolwiek sugestie. Ponizej zamieszczam kod i wynik dzialania programu.

wynik dzialania programu

int main()
{
    string pierwszaLiczba,drugaLiczba;
    string wynik;
    int dzielnik;
    cin >> pierwszaLiczba >> drugaLiczba;
    wynik = pierwszaLiczba;
    cout << wynik.at(0) << endl;
    cout << odejmowanie(wynik,drugaLiczba) << endl;
    cout << odejmowanie(wynik,drugaLiczba).at(0) << endl;
    while(odejmowanie(wynik,drugaLiczba).at(0) <= '0')
    {
        wynik = odejmowanie(wynik,drugaLiczba);
        cout << " wynik - " << wynik << endl;
        cout << " wynik.at - " << odejmowanie(wynik,drugaLiczba).at(0) << endl;
        dzielnik++;
        cout << " dzielnik - " << dzielnik << endl;
    }
    return 0;
}

 

komentarz 5 stycznia 2021 przez TOM_CPP Pasjonat (22,640 p.)

Dlaczego wykonujesz dzielenie na obiektach typu std::string a nie na typach wbudowanych (np. double)? Jeżeli Twój kalkulator musi obsługiwać liczby niemieszczące się w standardowych typach, to IMHO o wiele łatwiej skorzystać jest z gotowych rozwiązań przykład

 

komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)
Przeznaczony jest tak jak wspomniales do duzych liczb nie mieszczacych sie w wbudowanych typach, dlatego string
komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)

@TOM_CPP, a co do gotowych rozwiazan, raczej musze sie opierac na jakichs wlasnych pomyslach, nawet jesli nie sa do konca przemyslane. Nie ma sposobu zeby uratowac ten powyzszy zamysl?

komentarz 5 stycznia 2021 przez TOM_CPP Pasjonat (22,640 p.)
Wszystko zależy od tego czy dzielisz liczby całkowite, czy też dzielenie musi być przeprowadzone na liczbach zmiennoprzecinkowych ( w tym drugim przypadku będzie to o wiele bardziej skomplikowane - gdzie musisz uwzględnić mantysę i cecha liczby )
komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)
cale szczescie tylko calkowite
komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)

@TOM_CPP, to mógłbym liczyć na jakąś wskazówkę? 

komentarz 5 stycznia 2021 przez Krojo Nowicjusz (220 p.)
Nie do końca rozumiem treści tego co chcesz zrobić. Chodzi Ci o wpisywanie za każdym razem dwóch liczb o dużym zakresie i wyświetlaniu ich różnicy do momentu, w którym jest ona mniejsza od 0?
komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)
To generalnie ma być dzielenie, taki schemat dzielenia stringów. Np.

Musze wiedziec ile to jest 20 podzielone na dwa, wiec odejmuje to 2 tyle razy az 20 wyniesie 0. Odejmie sie 10 razy, tak więc 20 podzielone na 2 wynosi 10. To juz otrzymalem, jednak program dalej dzieli liczbe. Zalozmy ze dziele 32 na 3, zostaje reszta 02, w tym miejscu chcialbym zatrzymac program. Jednak on dalej odejmuje od tej dwojki i tworzy bledna petle.
komentarz 5 stycznia 2021 przez Krojo Nowicjusz (220 p.)
Jeśli ten program koniecznie musi być oparty o zmienne tekstowe(co bardo komplikuje sprawę) to dobrze było by gdybyś obie liczby przechowywał w tablicy lub wektorze i tam dokonywał odejmowania. Jeśli się nie mylę to liczby nie będą Ci potrzebne na późniejszym etapie programu. Za każdym razem odejmując je od siebie przechowuj nową wartość w tablicy, w której początkowo była pierwsza liczba, za każdym razem sprawdzając czy liczba znajdująca się w pierwszej tablicy jest większa od drugiej. Jeśli tak jest, działasz rekurencyjnie, jeśli nie to zależnie od tego jaka wartość znajdzie się w pierwszej tablicy wiesz czy jest ona podzielna czy nie.
komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)
Dzięki, mozliwe ze to tez by sie udalo, jednak udalo mi sie problem rozwiazac w nieco inny sposob, jednak wszystkim bardzo dziekuje za pomoc. Wszystko okazalo sie bardzo proste, wystarczylo zadbac aby wszystkie lancuchy znakowe byly tej samej dlugosci, wtedy program sie nie zapetla. Jak kogos interesuje jak to wyglada, to moge sie podzielic wynikiem.

1 odpowiedź

+2 głosów
odpowiedź 5 stycznia 2021 przez TOM_CPP Pasjonat (22,640 p.)

Polecam przestudiować implementację takiego rozwiązania zobacz , gdzie wewnętrznie liczby całkowite reprezentowane są za pomocą kontenera std::vector<int>. Wszystko jest już tam napisane, wystarczy zrozumieć kod i wybrać odpowiednie kawałki dla swojego kalkulatora, albo użyć całej gotowej klasy BigNumber, dołączając ją wcześniej za pomocą #include do swojego kodu.

komentarz 5 stycznia 2021 przez Adyn Nowicjusz (190 p.)
Dziekuje bardzo, juz zabieram sie do analizy
1
komentarz 5 stycznia 2021 przez TOM_CPP Pasjonat (22,640 p.)

Tutaj jeszcze przykład jak używać tej biblioteki:

wandbox.org/permlink/68u9oBYlfcXMyznp

Podobne pytania

0 głosów
2 odpowiedzi 826 wizyt
pytanie zadane 15 grudnia 2018 w C i C++ przez Rzepek Bywalec (2,050 p.)
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 22 marca 2018 w PHP przez dawid6512 Gaduła (4,550 p.)
0 głosów
3 odpowiedzi 248 wizyt
pytanie zadane 19 listopada 2019 w C i C++ przez Niepokonana7999 Bywalec (2,270 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...