m.in. zamiana systemu dwójkowego na dziesiętny

0

Kto wie jak zrobić ten program w języku C? nie mogę znaleŹć nigdzie na necie gotowego kodu a sam nie umiem to zrobić. Proszę o pomoc! Z góry dzięki

"Napisz procedure słuzaca do przekształcania ciagu znaków reprezentujacego
liczbe w układzie o podstawie d na typ unsigned long. Mozesz załozyc,
ze d należy do {2,3,...,16}

0

Poszukaj jak oblicza się wartość liczby binarnej na kartce i przepisz to do programu. Dla d < 10 nie ma problemu, a później dochodzą jeszcze litery więc trzeba je uwzględnić.

0

Przede wszystkim przypomnij sobie definicję liczby o dowolnej podstawie. Dla d == 10 jest to:
c0100 + c110</sup>1 + c2102 + c310</sup>3 + ... + cn10^n
gdzie c0..cn są wartościami cyfr od 0..d-1 w kolejności od najmniej do najbardziej znaczącej.
Krótko mówiąc siedmiocyfrowa liczba zapisana za ich pomocą w ludzkiej notacji miałaby postać np. c6c5c4c3c2c1c0.
Teraz wychodząc z tej definicji musisz tylko pobierać kolejne znaki reprezentujące wartości cyfr od 0 do 15 (0...F) i zbudować liczbę przez zsumowanie kolejnych wag podstawy pomnożonych przez wartości odpowiednich cyfr. Można to zrobić tak aby najpierw sprawdzić ilość cyfr i na jej podstawie wyznaczyć najwyższą potęgę (np. dla siedmiu cyfr o postawie 11 pierwsza z nich to będzie c6
116), albo odwrócić kolejność cyfr i idąc od najmniej znaczącej sumować kolejne wagi z podstawą mnożoną kolejny raz przez siebie zamiast użycia potęgowania. W tym drugim wypadku liczba np. 794A3 o podstawie 11 będzie miała postać 3110 + 10111 + 4112 + 9113 + 7114, co w programie rozwinie się do 31 + 1011 + 41111 + 9111111 + 711111111.
Łatwo zauważyć, że kolejne wartości potęgi 11 można trzymać w zmiennej i dla każdej kolejnej bardziej znaczącej cyfry mnożyć ją tylko przez wartość podstawy (tutaj 11). Oczywiście trzeba też konwertować znak A na wartość cyfry 10 podobnie jak pozostałe cyfry B...F na 11..15 w przypadku podstaw dochodzących do 16.

Teraz powinieneś już samodzielnie sklecić taką proceduję za pomocą dwóch pętli i potęgi lub jednej pętli i funkcji reverse odwracającej wcześniej kolejność znaków cyfr w reprezentacji liczby.

0
#!/usr/bin/env ruby

puts "Podstawa liczby zrodlowej"
s_b = gets.to_i #wczytaj z wejścia liczbę i skonwertuj ja na integera
puts "Podaj liczbe"
l = gets.chomp.split("") # tutaj robię tak, by kazdy znak był pod osobnym indeksem w tablicy, w C++ masz to domyślnie:)

res=0 //rezultat, integer
l.reverse.each_with_index do |x,indx| #innymi słowy: odwróć kolejność tablicy, a następnie przeleć wszystkie elementy po kolei, podstawiając pod indx numer indeksu, a pod x wartość tablica[indx]
        #tutaj jeszcze sobie sprawdz, czy x jest w zakresie, zamien A..F na 10..15 itd
        res+=(s_b**indx)*x.to_i #do resa dodaj podstawę do potęgi numer indeksu razy obecna cyfra
end

puts res

Krótki skrypt w rubim z komentarzami, przepisz sobie na cpp:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1