NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: převod

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
citroen8
Člen
Avatar
citroen8:14.4.2015 14:58

Ahoj, potřeboval bych moci s příkladem. Má převést číslo desítkové soustavy na dvojkovou. Bez použití funkce decbin. Předem díky :)

 
Odpovědět
14.4.2015 14:58
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na citroen8
Ondřej Štorc:14.4.2015 14:59

A co třeba použít modulo a for cykly?

Nahoru Odpovědět
14.4.2015 14:59
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
shaman
Člen
Avatar
Odpovídá na citroen8
shaman:14.4.2015 15:06

Nejake tipy najdes na php.net. Pouzil by som asi tuto funkciu

http://php.net/manual/en/function.decbin.php#92368
Editováno 14.4.2015 15:08
Nahoru Odpovědět
14.4.2015 15:06
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Lukáš Červený:14.4.2015 17:22

Bez použití funkce decbin :)

Převod z desítkové do dvojkové soustavy spočívá v postupném dělení výchozího čísla (a vzniklých podílů) dvojkou, přičemž se zapisuje zbytek po dělení. Postupuje se až do chvíle, kdy dostaneš výsledek nula.
Příklad, chci převést číslo 23:

23 : 2 = 11 => zb. 1
11 : 2 = 5  => zb. 1
 5 : 2 = 2  => zb. 1
 2 : 2 = 1  => zb. 0
 1 : 2 = 0  => zb. 1

Výsledek pak přečteš odspoda: 10111

V PHP bych to řešil, jak již Ondřej zmínil, cyklem, ale hezčí kód bude s cyklem while. Budeš mít nějakou proměnnou, ve které budeš skladovat mezivýsledek a v podmínce budeš mít > 0.

Zbytek po dělení zjistíš modulem: $mezivysledek % 2
Nový mezivýsledek zjistíš zaokrouhlením dolů: floor($mezivysledek / 2)

Pokud budeš výsledek zapisovat do řetězce, např. takto:
$string .= $mezivysledek % 2;
musíš ho nakonec otočit: strrev($string)

Doufám, že je to dost srozumitelné :)

Editováno 14.4.2015 17:25
 
Nahoru Odpovědět
14.4.2015 17:22
Avatar
shaman
Člen
Avatar
Odpovídá na Lukáš Červený
shaman:14.4.2015 22:40

Na php.net pod kazdym prikazom mas vacsinou aj alternativne riesenia, takisto ak si kliknes na moj link, tak tam najdes hotove riesenie bez pouzitia funkcie decbin. Je smiesne, ze si si tam ani neklikol a dal si mi rovno minusko. Lukas, pre teba zvlaste, tu plne funcknu funkciu odpisem sem

<?php

function BCDec2Bin($Input='') {
$Output='';
if(preg_match("/^\d+$/",$Input)) {
   while($Input!='0') {
     $Output.=chr(48+($Input{strlen($Input)-1}%2));
     $Input=BCDiv($Input,'2');
   }
   $Output=strrev($Output);
}
return(($Output!='')?$Output:'0');
}

?>
Nahoru Odpovědět
14.4.2015 22:40
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Lukáš Červený:14.4.2015 23:17

Ať klikám, jak klikám, nic se neděje... A to ani nehledím na to, že já jsem ti to mínus nedal. Přiznávám se, na odkazovanou stránku jsem sice koukal, ale špatně, zřejmě už jenom proto, že jsi odkazoval na dokumentaci pro funkci decbin.
Z původního příspěvku tazatele jsem pochopil, že má zřejmě za úkol nějaké řešení vymyslet a ne opsat funkci z netu, navíc takovou, která používá rozšíření (v tomto případě BCMath), bez kterého se jde dost dobře obejít. Proto jsem se ho snažil nasměrovat nějakou cestou, aby pochopil, o co jde, a funkci ať si dá do kupy sám.

Editováno 14.4.2015 23:18
 
Nahoru Odpovědět
14.4.2015 23:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.