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++] program znajdujący działanie arytmetyczne...

bee_m 29 Gru 2005 21:18 1784 7
REKLAMA
  • #1 2128115
    bee_m
    Poziom 2  
    Posty: 3
    Problem przedstawia się następująco:

    muszę napisać program, który uzyska zadaną sumę
    musi w tym celu używać cyfr od 1 do 9 w różnych ustawieniach (wszystkich cyfr) oraz dodawania i odejmowania
    np. 100 (123+4-5+67-89 = 100)

    Następnie muszę to uogólnić na liczby od 1 do np. 25

    Napisać wersję dla cyfr szesnastkowych: 0123456789ABCDEF dla uzyskania szesnastkowego 100 itp.


    Mam z tym ogromne kłopoty, za każdą wskazówkę dotyczącą konstrukcji algorytmu, badź techniczne wskazówki będę wdzięczna

    -----------------------------------------------------------------------------------
    baba- informatyk jest jak świnka morska
    ni to świnka
    ni to morska
  • REKLAMA
  • #2 2128424
    Marian83
    Poziom 20  
    Posty: 360
    Pomógł: 50
    Ocena: 7
    A ilość liczb które należy dodac jest w jakiś sposób ograniczona??Moze jakis random petla , sprawdzanie sumy.
  • REKLAMA
  • #3 2128603
    duzamasa
    Poziom 14  
    Posty: 99
    Pomógł: 5
    Ocena: 1
    Robi się to tak:
    1) sprawdzasz, czy następny znak jest cyfrą, jeśli tak, to wczytujesz liczbę; jeśli nie, to jest to błąd, suma = liczba;
    2) sprawdzasz, czy następny znak to '+', '-'; jeśli tak, to zapamiętujesz to działanie;
    3) jeśli znakiem tym jest '=', to wypisujesz sumę na ekran i kończysz wczytywać; jeśli nie jest to żaden z wymienionych znaków, to wystąpił błąd
    4) wczytujesz następną liczbę (jak w (1)) ale wykonujesz już operację suma += liczba lub suma -= liczba
    5) zaczynasz od punktu (2)
    W książce B. Stroustrup "Język C++" jest świetny przykład kalkulatora pokazujący działanie takiego algorytmu (znacznie ulepszonego).
  • REKLAMA
  • REKLAMA
  • #5 2129154
    lukego
    Poziom 17  
    Posty: 296
    Pomógł: 6
    Ocena: 7
    Proponuję wszystkie możliwe kombinacje liczb, a plusy minusy niech lecą jak w systemie binarnym tj. na przykładzie 4 działań
    ++++
    +++-
    ++-+
    ++--
    +-++
    +-+-
    +--+
    +---

    itd.
  • #6 2129422
    bee_m
    Poziom 2  
    Posty: 3
    duzamasa >
    chyba nie rozumiem tego, co napisałeś
    mam użyc dziewieciu cyfr, tak pokombinowanych w liczby, żeby użyć je wszystkie i je pododawac i poodejmować

    lukego, jak łatwo policzyć
    kombinacji jest 9! czyli 362880
    możliwości ułożenia dziewięciu cyfr grupkami jest:
    9 * 2(jedna liczba 9-cio cyfrowa razy 2 bo może być + lub -)
    8+1 *4(jedna liczba 8 cyfrowa+1 cyfrowa razy cztery bo może być +
    lub -)

    .... takich ustawien dla 9cyfr jest 29
    po uwzględnieniu plusów i minusów jest 1442 działąnia (okienkowe)
    po pomnożeniu tego przez liczbe kombinacji

    wychodzi
    523272960 działań do sprawdzenia...

    teraz tylko kwestia wsadzenia tego w kod... a tego to już nie potrafie

    pomocy... ma ktos pomysł?
    bo przecież nawet jak stworze kod znajdujacy wszystkie kombinacje bez powtórzen
    to jak mam zaprogramowac te "szkieleciki działan"... przeciez ich recznie nie wpisze
  • #7 2129881
    duzamasa
    Poziom 14  
    Posty: 99
    Pomógł: 5
    Ocena: 1
    Racja bee_m, nie zrozumiałem :D
  • #8 2130355
    lukego
    Poziom 17  
    Posty: 296
    Pomógł: 6
    Ocena: 7
    Jeżli liczb ma być 9 to piszesz najbardziej nachamowo jak się da :) czyli :
    9 pętli for w sobie przydzielających kolejne liczby itd. a to wszystko w ogromnej pętli która za każdym razem będzie zmieniała znaki.

    Boję się tylko że :

    Kombinacji nie jest tyle ile napisałeś ale duuuuuużo więcej, O ile teraz ja się nie mylę to będzie 2^9 * 25^9 to jest 2 z (chyba) 18 zerami. Tego tak się nie robi, tylko robi się dynamiczne sprawdzanie czy suma 2 liczb jest mniejsza od zadanej, potem czy suma par liczb itd. :)

    Przykro mi...

Podsumowanie tematu

✨ Dyskusja dotyczy problemu napisania programu w C++, który dla cyfr od 1 do 9 (oraz uogólnienia do zakresu 1–25) znajdzie kombinacje działań arytmetycznych (dodawanie i odejmowanie) prowadzące do uzyskania zadanej sumy, np. 100 (przykład: 123+4-5+67-89=100). W dalszej części zadania wymagana jest wersja dla systemu szesnastkowego (cyfry 0–9 oraz A–F) i uzyskanie szesnastkowej wartości 100. Wskazano, że problem generuje ogromną liczbę kombinacji (rzędu setek milionów), co wymaga efektywnego algorytmu. Proponowano podejście oparte na generowaniu wszystkich możliwych podziałów cyfr na liczby oraz przypisaniu znaków plus i minus w sposób analogiczny do systemu binarnego. Zwrócono uwagę na konieczność dynamicznego sprawdzania sum częściowych, aby uniknąć eksplozji kombinatorycznej. Podano też wskazówki dotyczące implementacji parsera prostych wyrażeń arytmetycznych, np. według przykładu z książki B. Stroustrupa "Język C++". Wspomniano o bibliotece Boost.Spirit jako narzędziu do parsowania wyrażeń. Podkreślono, że ręczne wpisywanie wszystkich możliwych "szkieletów działań" jest nierealistyczne, dlatego potrzebne jest programowe generowanie i testowanie kombinacji.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA