Stačí v cyklu while dělit číslo dvojkou, dokud nevyjde nula. Na zbytek
po dělení je tu operátor %, např (53 % 2) vrátí 1. Výsledky si přidávej
do stringu jako s = s + zbytek.ToString(). String poté jen převrátíš
metodou s = s.Reverse();
EDIT: Algoritmus máš tady: http://www.matweb.cz/prevod
Další EDIT: Abych ještě řekl, co je tam špatně, tak hlavně to
převádění na string (je zbytečné, pomalé, matoucí), navíc záleží na
OS jaký máš desetinný oddělovač, tu čárky by ti anglické Windows
nevzaly. Věčně tam něco konvertuješ, není to potřeba.
publicvoid ZBinarni()
{
float b = 0;
int f = z.ToString().Length; //// z je číslo k převodu do bin. soustavy,...;string x = "";
while (z.ToString().Length - b > 0)
{
x = z.ToString().Substring(f - 1, f);
if (x == "1")
mezipocet = (float) (Math.Pow(2, b));
vysledek = vysledek + mezipocet;
f--;
b++;
}
}
Hlásí mi to, že Substring je mimo rozsah. Děkuji za pomoc.
Substring má dva argumenty a to index, od kterého chceš vybírat a počet
znaků, které chceš vybrat. Zkus tam místo f dát 1. Pro převod z jakékoli
soustavy do desítkové můžeš použít Hornerovo schéma. Spočívá v tom,
že k výsledku přičítáš jednotlivé cifry čísla a vynásobíš je
základem. vysledek = (vysledek+cifra)/zaklad; Tohle provedeš u každé cifry
a nakonec vysledek vydělíš základem (pro dvojkovou soustavu 2, pro
osmičkovou 8 apod.)
To je zajímavé, jsem něvěděl, že nějaké takovéhle schéma existuje
Jinak jsem někde míval metodu, která převedla z desítkové do libovolné
a další z libovolné do desítkové, vlastně je to jednoduché, jen se tam
musí řešit zástupné znaky za čísla > 9. Jestli tady matesax něco
vytvoří, možná by se to mohlo dát do sekce algoritmy.
You are the greatest project you will ever work on.
Tommy
Neregistrovaný
Tommy:20.12.2012 19:22
Zdravím lidi.... pomůžete mi prosím někdo? mám podobný problém s
převodem do binární soustavy, mě však nefunguje vůbec příkaz string...
Takže to zkouším s přidáváním do pole... pracuji v programu MS Visual
Studio... vytvořil jsem něco takového:
#include <stdio.h>
int main(void) {
int z,a, *pole;
printf("Zadejte cislo: \n");
scanf("%d", &z);
while ((int) z != 0)
{
a = ((int) z % 2);
*pole = a;
z = z / 2;
printf("%d", *pole);
}
return 0;
}
ale stále mi to nefunguje... poradíte mi prosím někdo?
Ano... píšu to v C... poradíš mi teda prosím, jak to rozchodit?
potřebuju aby mi to klasicky převádělo číslo z desítkové do dvojkové
soustavy... tak jsem si nastavil dělení se zbytkem a aby mi to zbytky
ukládalo do pole, ale to mi nejde :/
Já se v tom kódu moc nevyznam, ale z toho co vidim zapisuješ ty zbytky
pořád do prvního prvku (*pole), musíš první zapsat do pole[0], druhej do
pole[1] atd. Navíc ten pointer neni inicializovanej, musíš mu přidělit
paměť. A proč vůbec to pole děláš přes pointer, nemůžeš udělat
klasický statický pole?
int vysledek = cislo;
int i = 0;
do
{
int v = vysledek / 2; // celočíselněint zbytek = vysledek % 2;
vysledek = v;
pole[i] = zbytek; // tady si do pole uložíš zbytek
i++;
} while (vysledek != 0);
Do céčka si to převeď už sám, jistě to bude triviální úprava. Pole
musíš pak otočit, jinak to bude pozpátku.
A nepomohl bys mi prosím trochu víc? Já jsem už našel spoustu i v
jiných jazycích... ale když jsem zkoušel "přepsat" do Céčka, nikdy mi to
nefungovalo... natož otočení pole
Převod z desítkové soustavy do interního formátu přece děláš funkcí
scanf("%d",&num); Proto se ptám, zda to tak zadávajícímu
stačí. Vlastně jen řešíš výstup čísla ve dvojkové soustavě, ale ne
převod.
Já to číslo ale načítam v desítkový soustavě, k čemu myslíš že je
tam ta funkce dec_to_bin? Vypisuje se to nakonec jako řetězec, kterej ta
funkce vrací přes pointer.
Přebírá jako parametr proměnnou typu int (číslo v desítkový
soustavě) a převede ho do textový podoby toho čísla v binární soustavě.
Ten text pak vrátí. Nevim jak jinak to myslíš aby pracoval s desítkovou
soustavou.
Díky moc... jen bych ještě jako laik potřeboval poradit, jak v programu
MS Visual Studio vytvořit .exe soubor prosím... omlouvám se za hloupé
dotazy, jsem vážně začátečník...
A jak je pls možný, že když spouštím zkoušku ještě v programu MS
Visual Studio, chce to po mě stisknutí libovolné klávesy na ukončení a v
již vytvořeném .exe souboru se vypne hned s výsledkem, takže ani není
možné ho přečíst?
To je sice pravda, ale když s nim pracuješ tak ho chápeš jako číslo v
desítkový soustavě. Uživatel ho zadává v desítkový soustavě. Pochybuju
že by to měl převádět z textovýho řetězce, reprezentujícího číslo.
Myslim že přesně takhle to chtěl.
V desítkové soustavě je datový typ decimal, který je v C#, ale není v
C. Když pracuji s datovým typem int, chápu ho jako číslo ve dvojkovém
doplňku a podle toho s ním také pracuji.
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Tommy
Neregistrovaný
Tommy:21.12.2012 20:33
Poradíte mi prosím??
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
int val, i, j;
char str[sizeof(int) * 8];
printf("Hodnota v desitkove soustave:");
scanf("%d", &val);
i = 0;
while (val > 0) {
str[i] = (val % 2) + 48;
val /= 2;
i++;
}
for (j = i - 1; j >= 0; j--) printf("%c", str[j]);
printf(" v binarni soustave\n");
printf ( "Press Enter to continue..." );
getchar ();
return 0;
}
s velkou pomocí už jsem nějak na takovéhle úrovni... potřeboval bych
pomoct s pár maličkostma... tak třeba potřeboval bych tam dát podmínku if
a else... protože potřebuju aby kdyžto bude například záporné číslo
nebo písmena, aby mi to napsalo chybovou hlášku... jenže jakmile tam dám
místo while if, přestane mi fungovat převod do binární soustavy a vždy mi
napíše výsledek 1
...potom bych ještě potřeboval pomoct s tím, že když tu aplikaci spustím
ještě v programu MS Visual studio, chce to po mě stisknutí klávesy pro
ukončení, ale ve vytvořené .exe aplikaci se ukončí automaticky spolu s
výsledkem, takže výsledek ani nejde přečíst....
...poradíte mi prosím?
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Tommy
Neregistrovaný
Tommy:21.12.2012 21:44
Paráda... tohle vyřešeno... teď už zbývá jen nějak zajistit, aby se
mi .exe soubor nevypínal současně se zobrazením výsledku... nenapadá
někoho něco prosím?? Zkoušel jsem i
printf("Stisknete libovolnou klavesu pro ukonceni\n");
getchar();
když to zkouším spustit v MS VS, normálně je třeba stisknout klávesu
na vypnutí... ale v .exe souboru se to vypíná hned
No, a proc to delite dvema a na integer nepouzijete shift operaci?
A proc otevirate tema z roku 2012? V roce 2022 to asi nebude nikdo cist. Kazdy
si radeji zada nove.
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.