Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Algorytm konwersji liczb z binarnych na dziesiętne
KeeL
post 21.09.2010, 17:00:02
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Witam,

Czy posiada ktoś takowy algorytm, lub byłby tak miły mi napisać?

PS Pytałem wujka, ale nie dał mi odpowiedzi.

Z góry dziękuję i pozdrawiam KeeL


Jeśli ktoś nie wie o jakiego wujka chodzi to pisać na pw.
Go to the top of the page
+Quote Post
Pawel_W
post 21.09.2010, 17:16:17
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


człowieku, to jest podstawówka... smile.gif i nie mów, ze szukałeś, bo wystarczy wpisać "liczby binarne" do googla, i pierwsza strona (Wikipedia):
Cytat
Np. liczba zapisana w dziesiętnym systemie liczbowym jako 10, w systemie dwójkowym przybiera postać 1010, gdyż:

jak dalej nie łapiesz zasady, wg której to się zamienia, to trochę niżej masz "Zmiany systemu"

Ten post edytował Pawel_W 21.09.2010, 17:17:20
Go to the top of the page
+Quote Post
KeeL
post 21.09.2010, 17:23:50
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


to umiem, ale potrzebuje algorytmu który by dało się przepisać na program lub schematu blokowego. Potrzebuje konwersji w dwie strony.

Ten post edytował KeeL 21.09.2010, 17:27:40
Go to the top of the page
+Quote Post
Crozin
post 21.09.2010, 17:30:03
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A co to jest niby to powyżej jak nie algorytm zamiany?
Go to the top of the page
+Quote Post
KeeL
post 21.09.2010, 17:44:31
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


ok, to w takim razię się źle wyraziłem w 1 poście.

Moglibyście mi pomóc jak zamienić ten algorytm na program? Taki krótki opis.
Go to the top of the page
+Quote Post
bim2
post 21.09.2010, 18:28:33
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Ja cię proszę...

Liczysz długosc ciagu zer i jedynek. Lecisz od końca pętlą pobierając konkretny znak z ciągu.
  1. for($i = strlen($ciag); $i>=0; $i--)

Zwiększasz wartośc o jeden jakiejś zmiennej tymczasowej. I normlanie mnożysz z dwójką do potęgi zmiennej tymczasowej oraz dodajesz do wczesniejszych mnożeń.
  1. $liczba += $ciąg{$i} * 2^$tmp;
  2. $tmp++;


Poradzisz sobie tak żeby ci to działało.

Btw. W wszystkich językach istnieją gotowe funkcje do konwersji takich rzeczy raczej winksmiley.jpg

Aha, można jedną rzecz tutaj zoptymalizować ale będzie to zadanie dla ciebie.

Ten post edytował bim2 21.09.2010, 18:29:25


--------------------
Go to the top of the page
+Quote Post
Zyx
post 21.09.2010, 18:28:55
Post #7





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Pętla idąca od najwyższej potęgi dwójki do najniższej i sprawdzająca czy dana potęga mieści się w liczbie i jeśli tak, odejmująca ją od tej liczby i pisząca "1".


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
KeeL
post 21.09.2010, 18:33:02
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Dzięki chłopaki, rozjaśniliście mi już wszystko smile.gif

A z dziesiętnego na binarny zadziałało by takie rozwiązanie:

Pętla, i dzielenie przez 2, jeśli zostaje reszta dopisz 1, a jeżeli nie dopisz 0 do stringa?
Go to the top of the page
+Quote Post
Zyx
post 21.09.2010, 18:38:37
Post #9





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Raczej nie reszta, bo wtedy będziesz prawie wyłącznie jedynki wypisywać smile.gif. Sprawdzasz wynik dzielenia czy jest większy od zera, a resztę podstawiasz za liczbę do kolejnej iteracji. I tak - to jest inny pomysł na ten algorytm. Ja osobiście wolę wariant z odejmowaniem, gdyż odejmowanie jest wykonywane przez komputer dużo szybciej, niż dzielenie, ale z drugiej strony dzielenie da się uogólnić na dowolny system liczbowy.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
KeeL
post 21.09.2010, 18:42:58
Post #10





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


To który to sposób?

Go to the top of the page
+Quote Post
bim2
post 21.09.2010, 18:44:15
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Zyx, czemu nie reszta? Jeśli podzieli np 10 na 2, zapisze 0, później 5 na 2, zapisze 1, potem (oczywiście zaokrąglanie w dół) 2 na 2, zapisze 0, no i przy jedynce zapisuje 1. Aha, jeszcze trzeba reverse zrobić i dam nam to 1010 winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Zyx
post 21.09.2010, 18:48:02
Post #12





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


A, bo zrozumiałem (nie wiedzieć czemu), że on potęgami dwójki chce dzielić. Faktycznie, było, że dwa. Mój drugi sposób działa przy założeniu, że będziemy przez potęgi dwójki dzielić, a nie przez dwa.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
KeeL
post 21.09.2010, 18:49:20
Post #13





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


smile.gif

Ok, dzięki jescze raz i sorki za ten źle napisany początek smile.gif
Go to the top of the page
+Quote Post
Piotrek05
post 21.09.2010, 20:32:58
Post #14





Grupa: Zarejestrowani
Postów: 8
Pomógł: 2
Dołączył: 25.04.2010

Ostrzeżenie: (0%)
-----


A ja ostatnio tak sobie napisałem skrypt przeliczający liczbę z systemu dziesiętnego na binarny. Napisałem takim sposobem jaki pierwszy przyszedł mi do głowy. Pewnie dałoby się jakoś go uprościć ale u mnie wygląda tak:

  1. $liczba = (intval($_POST['liczba']));
  2. $pierw = (intval($_POST['liczba']));
  3. $reszty = array();
  4. if (is_int($liczba))
  5. {
  6. while($liczba > 0) {
  7. $liczba = floor($liczba / 2);
  8. $reszta = $liczba % 2;
  9. $reszty[] = $reszta;
  10. }
  11. $reszty = array_reverse($reszty);
  12. $reszty[] = 0;
  13. echo "Liczba " .$pierw. " zapisana w systemie binarnym to ";
  14. for($i = 1; $i < sizeof($reszty); $i++) {
  15. echo $reszty[$i];
  16. }
  17. }
  18. ?>
Go to the top of the page
+Quote Post
nospor
post 21.09.2010, 20:55:35
Post #15





Grupa: Moderatorzy
Postów: 36 468
Pomógł: 6300
Dołączył: 27.12.2004




nie:
  1. $liczba = (intval($_POST['liczba']));
  2. $pierw = (intval($_POST['liczba']));

a:
  1. $pierw = $liczba = (intval($_POST['liczba']));


if (is_int($liczba))
Jesli dwie linijki wczesniej $liczba rzutujesz na INTa to trudno by nim nie był winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Crozin
post 21.09.2010, 21:19:38
Post #16





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


btw: http://www.google.com/search?hl=en&cli...q=&gs_rfai= (nie wynajduj koła na nowo).
Go to the top of the page
+Quote Post
Pawel_W
post 21.09.2010, 21:28:40
Post #17





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 21.09.2010, 22:19:38 ) *
btw: http://www.google.com/search?hl=en&cli...q=&gs_rfai= (nie wynajduj koła na nowo).

a tu post devnula z tematu "Quiz PHP"
  1. <?for($l=123;$l;$l>>=1)$b=($l%2).$b;echo$b;

wyświetli odpowiednik binarny dla 123 smile.gif

EDIT:
@Speedy
pisałem już o tym...

Ten post edytował Pawel_W 21.09.2010, 21:34:18
Go to the top of the page
+Quote Post
Speedy
post 21.09.2010, 21:31:57
Post #18





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Cytat(KeeL @ 21.09.2010, 18:00:02 ) *
Witam,

Czy posiada ktoś takowy algorytm, lub byłby tak miły mi napisać?

PS Pytałem wujka, ale nie dał mi odpowiedzi.

Z góry dziękuję i pozdrawiam KeeL


Jeśli ktoś nie wie o jakiego wujka chodzi to pisać na pw.


To następnym razem zapytaj ciocię. Ciocię Wikipedię.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.05.2024 - 07:11