Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ rozwinięcie dziesiętne liczb.

Illustrata 08 Maj 2012 16:58 2364 10
  • #1 08 Maj 2012 16:58
    Illustrata
    Poziom 13  

    Witam, czy idzie jakość sprawdzić czy w rozwinięciu dziesiętnym liczby występuje cyfra 1? Czy C++ ma takie możliwości?

    0 10
  • Pomocny post
    #2 08 Maj 2012 17:25
    mickpr
    Poziom 39  

    C++ ma możliwości takie, jak jego programista, wyszukanie cyfry 1 w liczbie można zrealizować sposobem brutalnym - zamieniając liczbę na string, lub matematycznie.
    A problem rozwinięcia liczby : http://www.math.edu.pl/rozwiniecie-dziesietne..
    Więc żaden problem :)

    0
  • #3 08 Maj 2012 18:16
    Illustrata
    Poziom 13  

    mickpr napisał:
    C++ ma możliwości takie, jak jego programista, wyszukanie cyfry 1 w liczbie można zrealizować sposobem brutalnym - zamieniając liczbę na string, lub matematycznie.
    A problem rozwinięcia liczby : http://www.math.edu.pl/rozwiniecie-dziesietne..
    Więc żaden problem :)


    Bardzo dziękuje, czy istnieje jakaś funkcja sprawdzająca czy w stringu występuje szukany ciąg znaków? Np. Ala ma kota i chce się dowiedzieć czy znajduje się w tym zdaniu słowo Ala.

    A mógłby Kolega rozwinąć myśl o sposobie matematycznym na ten problem?

    Mam problem, spróbowałem tej metody brutalnej, zamieniam liczbę na string, ale mój kod zawsze dokleja do stringa nową liczbę. Mój kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W czym problem?

    0
  • Pomocny post
    #4 08 Maj 2012 19:11
    mickpr
    Poziom 39  

    Illustrata napisał:
    Bardzo dziękuje, czy istnieje jakaś funkcja sprawdzająca czy w stringu występuje szukany ciąg znaków?

    np.
    strchr - http://www.cplusplus.com/reference/clibrary/cstring/strchr/
    strstr - http://www.cplusplus.com/reference/clibrary/cstring/strstr/
    Illustrata napisał:
    A mógłby Kolega rozwinąć myśl o sposobie matematycznym na ten problem?

    Wyszukanie cyfr w liczbie bez użycia typów znakowych (string, char).
    Każda liczba dziesiętna to ciąg cyfr każda z cyfr (idąc w lewo) jest podnoszona do kolejnej potęgi liczby 10. Wystarczy porównać kolejne cyfry z cyfrą "1". Jak mówiłem ta metoda jest o wiele trudniejsza. Wymaga odpowiedniego algorytmu.

    Illustrata napisał:
    Mam problem, spróbowałem tej metody brutalnej, zamieniam liczbę na string, ale mój kod zawsze dokleja do stringa nową liczbę. Mój kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W czym problem?

    Mylisz się, to nie jest kod - to 3 instrukcje wyrwane z kontekstu.
    Podaj cały kod.
    Dlaczego używasz stringstream, string nie wystarczy?

    0
  • #5 08 Maj 2012 19:16
    Illustrata
    Poziom 13  

    Dziękuje z poprzednimi pytaniami sobie poradziłem, teraz mam inne pytanie, ile maksymalnie znaków "pomieści" string?

    Czy może mieć takie zakres jak long long int 18 446 744 073 709 551 615?
    A double?

    0
  • #6 08 Maj 2012 19:24
    Defice
    Poziom 25  

    Do stringa możesz generalnie wpisać dowolną liczbę. Do stringa możesz generalnie zapisać nawet jakiś cały plik tekstowy, więc jego pojemnością się nie martw

    0
  • #7 08 Maj 2012 20:08
    1371637
    Użytkownik usunął konto  
  • #8 09 Maj 2012 06:48
    Defice
    Poziom 25  

    http://edu.i-lo.tarnow.pl/inf/utils/010_2010/1001.php

    Tu masz informacje dotyczące zakresów zmiennych w C++.

    Jeśli natomiast chodzi o to wyświetlanie to jeśli używasz aplikacji konsolowej to nie wiem szczerze jak to zrobić. Będziesz musiał czyścić chyba ekran przed każdym wyrzuceniem sumy na niego, natomiast w okienku to proste. Nie wiem do czego konkretnie tego potrzebujesz ale wszelkie stopery czy zegarki robi się za pomocą timeraów.

    O timerach już nie raz było więc zapraszam do lektury:

    https://www.elektroda.pl/rtvforum/topic579785.html

    0
  • #9 09 Maj 2012 09:46
    Xitami
    Poziom 29  

    for(i=0;;i++)
    printf("\r %d", i);

    0
  • #10 09 Maj 2012 15:13
    Dariusz Bismor
    Poziom 17  

    Po pierwsze, gratuluję autorowi wątku prawidłowego w C++ sposobu konwersji liczb na typ "string". Gdyby jeszcze potrzebne było wyszukiwanie pewnych znaków w "stingu", polecam funkcje składowe "find_first_of", "find_last_of", "find_first_not_of", "substr", itd.

    Wbrew temu, co ktoś tutaj napisał, "string" nie ma nieskończonej pojemności, największa możliwa do zapisu liczba znaków zwracana jest przez funkcję składową max_size().

    W C++ najprostszym sposobem sprawdzenia pojemności, wartości maksymalnych, minimalnych, czy dokładności, jest użycie szablonu numeric_limits (trzeba załączyć nagłówek <limits>). Istnienie tego szablonu przewiduje Standard (punkt 18.2.1), gdyż wartości te zależą od implementacji!.

    Jeżeli chcemy sprawdzić, jaką największą liczbę typu double można zapisać używając naszej implementacji, piszemy:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Co do wypisywania w tej samej linii, obawiam się, że rozwiązanie, które podał Xitami, a które w języku C++ brzmi raczej:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    nigdy nie będzie w pełni przenośne - czyli będzie mocno zależne od typu terminala. Na przykład w systemach unixowych zaleca się wykorzystanie biblioteki ncurses dla osiągnięcia tego (i wielu innych) efektu.

    HTH,
    Dariusz

    0
  • #11 09 Maj 2012 17:41
    Defice
    Poziom 25  

    Dariusz Bismor napisał:


    Wbrew temu, co ktoś tutaj napisał, "string" nie ma nieskończonej pojemności, największa możliwa do zapisu liczba znaków zwracana jest przez funkcję składową max_size().



    Źle zostałem zrozumiany, chodziło mi raczej o to że przy rzutowaniu liczb na stringa nie ma o co się martwić, jakby nie było to raczej liczby nie są zbyt długie i ilość znaków nie zostanie przekroczona bo to dobre kilka tysięcy znaków.

    0