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++ - Wczytanie wielu cyfr i zliczenie ich oraz lustrzane odbicie

Ilmen 12 Lis 2014 15:13 3417 34
  • #1 12 Lis 2014 15:13
    Ilmen
    Poziom 8  

    Witam mam pewien problem, którego nie jestem w stanie sam rozwiązać. Czy mógłby mi ktoś na chłopski rozum wytłumaczyć jak stworzyć program do którego można wpisać (prawie)nieskończenie wiele liczb, które następnie program zliczy i pokaże ile jest liczb nieujemnych.

    Oraz mam problem z napisaniem programu, który pokazuje lustrzane odbicie podanej liczby.

    0 29
  • #2 12 Lis 2014 15:21
    witoldwitoldowicz
    Poziom 28  

    Zainteresuj sie std::vector. Wpisać z konsoli? Co to jest lustrzane odbicie?

    0
  • #4 12 Lis 2014 15:35
    Ilmen
    Poziom 8  

    I jeszcze muszę to zrobić tak aby nie pokazywało zera.

    0
  • #6 12 Lis 2014 16:41
    vonar
    Poziom 28  

    A po co w ogóle przechowywać te wszystkie liczby? Nie lepiej na bieżąco je liczyć?

    Co do „lustrzanego odbicia”, to chyba najłatwiej będzie liczbę snprintfnąć i odczytać łańcuch wynikowy od końca.

    0
  • #8 12 Lis 2014 20:41
    mcvsama
    Poziom 15  

    Autor napisał, że chce „(prawie) nieskończenie wiele liczb”. To już nasuwa rozwiązanie, żeby nie robić żadnych tablic ani wektorów, tylko zliczać na bieżąco.

    0
  • #10 12 Lis 2014 22:17
    mcvsama
    Poziom 15  

    Nie ma znaczenia, czy ręcznie czy z pliku. Założenie „nieskończenie wiele” implikuje, że nie wystarczy pamięci na tablice.

    Nawet gdyby nie było tego założenia, to i tak nie ma żadnego powodu, żeby tworzyć tablice, bo takie rozwiązanie będzie zawsze większe (kod) i wolniejsze (alokacje i niepotrzebne pisanie po pamięci).

    0
  • #12 12 Lis 2014 22:23
    mcvsama
    Poziom 15  

    A co chcesz przetwarzać? :-) Polecenie jest jasne i proste: program na zliczyć liczby nieujemne.

    A zastosowanie jest też proste: zaliczenie przedmiotu. ;-)

    0
  • #14 13 Lis 2014 15:25
    Ilmen
    Poziom 8  

    Czujnik w muzeum w ciągu dnia wykonał serię regularnych pomiarów poziomu zanieczyszczenia powietrza w pomieszczeniu. Wiadomo, że wizyta każdego zwiedzającego powoduje wzrost zanieczyszczenia powietrza.
    Dyrektor muzeum chciałby oszacować, ilu zwiedzających było tego dnia w muzeum. Napisz program, który obliczy, ile istotnie różnych pomiarów o dodatnim poziomie zanieczyszczenia zarejestrował czujnik.

    Wejście
    Wejście składa się z co najmniej dwóch wierszy. Każdy wiersz zawiera jedną liczbę całkowitą. Pierwszy wiersz zawiera liczbę 0 ? wynik pierwszego pomiaru czujnika. Kolejne wiersze zawierają kolejne wyniki pomiarów, będące nieujemnymi liczbami całkowitymi. Wyniki pomiarów są podane w porządku niemalejącym. Ostatni wiersz zawiera liczbę ?1, oznaczającą koniec wejścia.
    Wejście będzie zawierać co najwyżej 100000 liczb. Żadna liczba na wejściu nie przekroczy 1000000000. Wyjście Jedyny wiersz wyjścia powinien zawierać liczbę różnych liczb dodatnich występujących na wejściu. Jeśli wejście nie zawiera żadnej liczby dodatniej, poprawnym wynikiem jest 0.

    I drugie: Zapisem lustrzanym liczby naturalnej n nazywamy liczbę złożoną z tych samych cyfr co n, tylko w odwrotnej kolejności. Oto kilka przykładów liczb oraz ich zapisów lustrzanych. Zauważ, że jeśli liczba
    n ma na końcu zera, to w jej zapisie lustrzanym te zera nie występują: liczba zapis lustrzany
    123
    321
    55600
    655
    7
    7
    Napisz program, który wyznaczy zapis lustrzany danej liczby n.

    Wejście
    Wejście zawiera jedną liczbę naturalną
    n(1?n?1000000000).
    Wyjście
    Jedyny wiersz wyjścia powinien zawierać zapis lustrzany liczby
    n.

    Są to ćwiczenia z pętli while. Byłbym wdzięczny za pomoc i wytłumaczenie działania takiego programu.

    0
  • #16 13 Lis 2014 15:56
    mcvsama
    Poziom 15  

    Hmm? Czemu k != 0? Nie zadziała np. dla 1003.

    Swoją drogą, rzeczy typu system("chcp…") czy system("pause") zadziałają tylko pod Windows. <conio.h> też jest niepotrzebny (i o ile pamiętam to DOS-owy nagłówek). Bez tego też powinno działać. :-)

    0
  • #18 13 Lis 2014 16:01
    Ilmen
    Poziom 8  

    Dla 1003 działa, sprawdzałem. Dzięki :)

    0
  • Pomocny post
    #19 13 Lis 2014 16:05
    mcvsama
    Poziom 15  

    Niekoniecznie. Miałem nie robić, bo jestem leniem, ale co tam. Moja wersja funkcji „mirrorującej” (w C++, jako że temat jest oznaczony C++):

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #20 13 Lis 2014 16:08
    witoldwitoldowicz
    Poziom 28  

    Jakbyś k *= 10; dał na początek to nie musiał byś dzielić.

    0
  • #22 14 Lis 2014 10:16
    mcvsama
    Poziom 15  

    Hmm… Przede wszystkim w C nie ma nagłówków <cstdio> ani <fstream>. :-) Reszta kodu wygląda OK, poza tym, że jest dziwnie sformatowana. W treści zadania była też mowa o tym, żeby program podliczył liczbę *różnych* liczb dodatnich, tj. jeśli się powtarzają, to nie należy zwiększać licznika.

    0
  • #24 14 Lis 2014 10:34
    mcvsama
    Poziom 15  

    Liczby są w porządku niemalejącym, więc wystarczy sprawdzić czy się nie powtarzają.
    Program bierze dane ze standardowego wejścia (w terminalu trzeba przekierować dane z pliku wejściowego, np. ./program < plik_wejsciowy.txt).
    Oczywiście na szybko, mogą być błędy:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #26 14 Lis 2014 10:47
    Ilmen
    Poziom 8  

    Czy jest funkcja ręcznego wprowadzenia potrzebnych liczb?

    0
  • #28 14 Lis 2014 11:39
    Ilmen
    Poziom 8  

    Nie działa. Źle pokazuje EOLN i sprawdzarka nie akceptuje możliwości aby był to jeden wiersz [musi być jeden na jeden pomiar]. Niemniej wcisnąłem "pomógł" :)

    0
  • #30 14 Lis 2014 11:43
    Ilmen
    Poziom 8  

    Obecny program polega na wpisaniu w jednym wierszu wszystkich pomiarów, np. 0 1 2 3 4 5 -1. Okazuje się, że powinno być tak:
    0
    1
    2
    3
    4
    5
    -1

    Dodano po 46 [sekundy]:

    Dobrze zlicza cyfry tylko jest mankament z wprowadzaniem cyfr.

    0