Skocz do zawartości

  •  
  • Mini kompendium
  • MimeTeX
  • Regulamin

Zdjęcie
        STUDIA        

Funkcja odwracanie kolejności cyfr w C



  • Nie możesz napisać tematu
  • Zaloguj się aby odpowiedzieć
6 odpowiedzi w tym temacie

#1 sebo33

sebo33

    Nowicjusz

  • Jr Użytkownik
  • 4 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 20.01.2016 - 02:03

Witam. Jestem początkujący i mam do napisania funkcję w języku C, która odwraca kolejność liczb (np. dodatnia liczba wejściowa 345 ma zostać wyświetlona jako liczba 543; ujemna liczba wejściowa - 321 ma zostać wyświetlona jako liczba -123). Mam problem z liczbami ujemnymi, gdyż jak w przykładzie zamiast -123 wyświetla mi 123-. Nie wiem w ogóle jak zapisać, żeby ten minus został na początku wyświetlany, więc wygląda to jak wygląda:

Spoiler
(tab);i++)

 


  • 0

Afroman

    Kombinator

  • Użytkownik
3
  • Płeć:Kobieta

Napisano 25.09.2011 - 17:55

#2 Jarekzulus

Jarekzulus

    Wielki Analityk

  • +Mods
  • Redaktor
  • 4210 postów
3410
Profesor
  • Płeć:Mężczyzna

Napisano 20.01.2016 - 10:21

Tak bez kodu

 

Najpierw zapytaj czy badana liczba jest większa od 0

Jeśli tak to masz swój kod i gra

 

Jeśli nie,  odwróć tylko moduł tej liczby czyli 321 a na koniec przemnóż przez -1 i masz wynik.

 

Rozwiązanie może mało eleganckie ale na pewno zadziała.


  • 1

:wave: :wave: :wave: Jeśli rzuciłem choć promyczek światła na problem który postawiłeś - podziękuj. pre_1433974176__syg.jpgNad kreską


#3 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 20.01.2016 - 15:36


Rozwiązanie może mało eleganckie ale na pewno zadziała.

Niestety nie zadziała. Żeby wykonywać operacje arytmetyczne (np mnożenie przez -1, które chcesz robić) albo porównywanie z 0 to trzeba wczytany ciąg znaków reprezentować jako liczbę no i tu trafiamy na problem ograniczonej precyzji typów liczbowych w C. Czyli jak podam na wejściu bardzo małą liczbę np -32323232323232323, a Ty w kodzie gdzieś spróbujesz to zamieniać na inta, to już się robi problematycznie.

 

Moja propozycja jest taka, żeby zrobić to co Jarek zaproponowała ale bez odnoszenia się do liczb tylko cały czas pracując na ciagu znaków. Porównanie z 0 to po prostu sprawdzenie czy pierwszy znak jest równy "-", a dalej to już tak jak chciałeś robić, tylko poprawnie, bo ten kod, który wrzuciłeś jest zły.


  • 1

#4 sebo33

sebo33

    Nowicjusz

  • Jr Użytkownik
  • 4 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 21.01.2016 - 01:50

Wiem, że może proszę o zbyt wiele ale czy dało by się jaśniej rozpisać co jest nie tak i jak mogę to ogarnąć bo nie wychodzi mi tak, żeby działało poprawnie z tym minusem.


  • 0

#5 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 21.01.2016 - 18:45

Napiszę Ci w pseudokodzie, a Ty spróbuj to przepisać w C. Zakładam poprawność wejścia (tzn że tam faktycznie jest liczba i nie będę tego sprawdzał)

  1. Wczytaj napis z wejścia do tablicy znaków A.
  2.  n := liczba wczytanych znaków
  3. Jeśli A[0] == "-" to wypisz na wyjście "-", a następnie A[n-1], A[n-2],...,A[1]
  4. W przeciwnym wypadku wypisz A[n-1], A[n-2],...,A[1], A[0]

Jak będziesz miał problem, żeby to ogarnąć w C, to pisz, ale wrzuć jakiś kod, żeby było z czym pracować (i wcześniej sprawdź czy chociaż się kompiluje) :)


  • 1

#6 sebo33

sebo33

    Nowicjusz

  • Jr Użytkownik
  • 4 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 22.01.2016 - 00:31

Wielkie dzięki. Wsparcie tu i pewnej osoby, którą spotkałem i udało się. Jeśli chodzi o tą funkcję to wszystko działa tak jak chciałem. 

Na koniec małe pytanko. Gdybym miał mały problem z inną funkcją to mam zakładać nowy temat czy mogę tutaj?


  • 0

#7 Ereinion

Ereinion

    Mega Rozkminiacz z Marsa

  • $Jr Admin
  • 2104 postów
1008
Starszy Wykładowca I
  • Płeć:Mężczyzna

Napisano 22.01.2016 - 01:23

Załóż nowy temat, chyba że ta nowa funkcja byłaby kontynuacją tego, co tutaj było robione. A i cieszę się, że Ci się udało :)


  • 0