Autor Wątek: Jak rozwiazac to zadanie ? proste pytanie  (Przeczytany 3380 razy)

Offline _user

  • Użytkownik

# Marzec 15, 2015, 12:05:13
Hej, jak byscie w mozliwie jak najprostszy sposob wykonali to zadanie:
"Napisz funkcję, która będzie wczytywała liczby ze standardowego wejścia i zwracała wczytaną wartość. Funkcja ma zagwarantować, że zwracana liczba zawsze jest poprawna. Oznacza to, że funkcja będzie musiała pytać użytkownika o wprowadzenie liczby dopóki nie poda poprawnej. "

?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline zx81 (taxi_dr...

  • Użytkownik
    • Something Beautiful team

  • +2
# Marzec 15, 2015, 13:25:55
Hej! no, a Ty jak to zrobiles
"Napisz funkcję, która będzie wczytywała liczby ze standardowego wejścia i zwracała wczytaną wartość. Funkcja ma zagwarantować, że zwracana liczba zawsze jest poprawna. Oznacza to, że funkcja będzie musiała pytać użytkownika o wprowadzenie liczby dopóki nie poda poprawnej. "?

Offline Oti

  • Użytkownik

  • +4
# Marzec 15, 2015, 13:42:57
Algorytm:

1. Wczytaj liczbę ze standardowego wejścia
2. Sprawdź, czy liczba jest poprawna-jak nie jest, to idź do 1.
3. Zwróć wczytaną liczbę.

Mam nadzieję, że pomogłem. Pozdrawiam.

Offline Gimer

  • Użytkownik
    • Portfolio

  • +1
# Marzec 15, 2015, 14:03:08
Może _user chce gotową odpowiedź ale zapomniał podać języka?

Offline ison

  • Użytkownik

  • +16
# Marzec 15, 2015, 14:38:50
Jako, że nie wiadomo o jaki język chodzi, to zakładam, że dowolny. Podaję rozwiązanie w brainfucku:
>+[->,>+<----------[++++++++++<]>>]<<<<[<<]>>[.>>]

Offline _user

  • Użytkownik

  • +1
# Marzec 15, 2015, 15:52:09
Ohhh kurcze, tak sie zapedzilem ze zapomnialem podac jezyka xD Przepraszam, c++ :)
Mam juz swoj kod na to zadanie ale niee wiem, wolalbym zebyscie go nie poprawiali, to jest na tyle krotki kod ze jakby ktos mogl to poprosze o rozwiazane zadania w mozliwie jak najprostszych, takich podstawowych metodach z samych poczatkow nauki, i sobie porownam z moim :)

Offline laggyluk

  • Użytkownik
    • twitter

  • +2
# Marzec 15, 2015, 15:54:57
najprostszym możliwym sposobem jest założenie tematu na forum

Offline _user

  • Użytkownik

# Marzec 15, 2015, 16:00:35
Tak wiem, dlatego to zrobilem :)
To jakby ktos mogl bylbym wdzieczny

Offline _user

  • Użytkownik

# Marzec 15, 2015, 16:13:40
Tak wiem, dlatego to zrobilem :)

Algorytm:

1. Wczytaj liczbę ze standardowego wejścia
2. Sprawdź, czy liczba jest poprawna-jak nie jest, to idź do 1.
3. Zwróć wczytaną liczbę.

Mam nadzieję, że pomogłem. Pozdrawiam.
Ale jak liczba ma byc nie poprawna ?
Zdanie jest w 17 lekcji tego kursu - > http://cpp0x.pl/kursy/Kurs-C++/1
Chce je rozwiazac tylko przy pomocy wiedzy zdobytej przez te 17 lekcji, jakby ktos pomogl bede wdzieczny.

Offline Oti

  • Użytkownik

# Marzec 15, 2015, 16:26:36
Najlepiej załóż sobie, że liczba ma być z przedziału np. od 10 do 20 i sprawdzaj tylko ten warunek. Nie baw się w nic bardziej skomplikowanego, bo nie ma sensu. Myślę, że autor kursu miał na myśli właśnie coś w tym stylu.

Offline remz

  • Użytkownik

# Marzec 15, 2015, 17:08:46
int wczytajLiczbe()
{
    std::string tekst;

    while(true)
    {
        std::cin >> tekst;

        int cyfry = 0;
        bool minus = false;

        for(unsigned int i = 0; i < tekst.size(); i++)
        {
            if(std::isdigit(tekst[i]))
            {
                cyfry++;
            }
            else if(tekst[i] == '-' && cyfry == 0 && !minus)
            {
                minus = true;
            }
            else
            {
                cyfry = 0;
                break;
            }
        }

        if(cyfry > 0)
            return std::atoi(tekst.c_str());
    }
}
« Ostatnia zmiana: Marzec 15, 2015, 17:14:43 wysłana przez remz »

Offline mickwa

  • Użytkownik

# Marzec 15, 2015, 17:13:26
może zamień liczbę na string i sprawdzaj czy każdy znak z tego stringa jest cyfrą. Jeśli każdy znak jest cyfrą, to znaczy że wczytałeś poprawną liczbę. (opcjonalnie czy liczba nie zaczyna się od zera np. 007)

Potem możesz lekko podnieść poprzeczkę: Może być wersja z liczbą z kropką lub przecinkiem - sprawdzaj czy jest dokładnie 1 taki znak w stringu. np 0.003 jest OK, ale 0.00.03 już nie.

Offline Kyroaku

  • Użytkownik

# Marzec 15, 2015, 17:13:39
Myślę, że liczba "poprawna" to taka, która występuje w menu i myślę, że o to autorowi chodziło. Tzn o to, aby klikać w menu, aż użytkownik wybierze poprawne działanie.

To oznacza, że wystarczy sprawdzić, czy pod liczbą, która wybrałeś kryje się jakaś opcja w menu.

@UP, UP/UP
Autor jest w 17 części kursu, do którego podał linka i podkreślił, że nie chce używać rzeczy, których nie rozumie...
« Ostatnia zmiana: Marzec 15, 2015, 17:19:20 wysłana przez Kyroaku »

Offline _user

  • Użytkownik

# Marzec 15, 2015, 18:36:41
Znowu moja glupota xd pare lekcji wczesniej jest opisany sposob ktory bedzie pomocny mi zeby to zrobic, teraz dam juz sobie rade, i dziekuje :)

Offline deadeye

  • Użytkownik

# Marzec 16, 2015, 00:07:37
int wczytajLiczbe()
{
...
   
}

Troche przekombinowane, wystarczy:
int number = 0;
do
{
std::cin.clear();
std::cin.sync();
std::cin >> number;
} while (!std::cin.good());