Prevod sustav – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prevod sustav – C / C++ – Fórum – Programujte.comPrevod sustav – C / C++ – Fórum – Programujte.com

 

Dodo0
Newbie
22. 10. 2008   #1
-
0
-

Ahojte
Len tam som rozmyslal z dlhej chvile ze si spravim program ktoremu zadam lubovolne cislo v desiatkovej sustave napr 5 a program mi to prevedie do dvojkovej sustavy vysledok by mal byt 101...
Ja som len tak skusal nieco zatial som sa dostal po toto:
"predom upozornujem ze to co som vytvoril nefunguje a ja som si vedomi toho ze to mam zle len vam chcem ukazat ako som nato isiel ja"

#include <iostream>
float funkcia(float);
int main()
{
using namespace std;
float cislo;
cout << "Zadaj lubovolne cislo v desiatkovej sustave: ";
cin >> cislo;
float vysledok = funkcia(cislo);
cout << "Cislo v dvojkovej sustave je: " << vysledok << endl;
cin.get();
cin.get();
return 0;
}
float funkcia(float n)
{
float hodnota = n;
float hodnota2;
using namespace std;
while (hodnota > 0)
{
hodnota = hodnota /2;
hodnota2 = hodnota - n / 2;
if (hodnota2 > 0)
cout << "1";
else
cout << "0";
}
return hodnota;
}

Ja som sa pasoval s tymi zvyskami a tak hh. Mne by mozno pomohlo keby tam v tej mojej funkcii ako delim to cislo 7.0 / 2 tak bude vysledok 3.5 keby som vedel ako mam chitit ten samotny zvysok tych 0.5 a ten iba porovnavat ci je vecsi alebo rovny nule a podla toho zapisat hodnotu 1 alebo 0 tak by som to asi aj vedel spravit ale nevedel som ako nato ak sa to tak vobec da :)
Mohli by ste mi ukazat co mam spravit inak alebo popripade aj uplne iny sposob ako by sa to dalo spravit? :)
Dakujem

Nahlásit jako SPAM
IP: 87.244.222.–
MaS0
Návštěvník
22. 10. 2008   #2
-
0
-

protože do dvojkovej soustavy nemůžeš převádět číslo s desetinou čárkou, bude stačit místo "float hodnota" proměnná typu int, a pak když dělíš 7/2 je výsledek 3 zbytek po dělení můžeš zjistit 7%2(to se rovná 1)

s tiskem v binární soustavě je to těžší (cout poskytuje funkce pro nastavení výstupu v osmičkovej soustavě- cout<<oct- a šestnáckovej- cout<<hex- , ale do dvojkovej neznam)

#include <iostream>

#include <string>
int funkcia(int n);
using namespace std;
string bin;

void funkcia(int n){
int hodnota = n;
int hodnota2;
while (hodnota != 0) {
hodnota2 = hodnota% 2
hodnota = hodnota /2;
bin+=hodnota2;
};
cout << "Cislo v dvojkovej sustave je: ";
for(int a=bin.size; ;a--)
cout << bin[a-1];


nevim jesli to bude fungovat...zkus to

Nahlásit jako SPAM
IP: 195.146.114.–
KIIV
~ Moderátor
+43
God of flame
22. 10. 2008   #3
-
0
-

To MaS : jakpak si zjistil ze se neda do binarni soustavy prevest i desetinna cast?
jiste ze se da..

jinak muze autor udelat cislo - ((int)cislo)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MaS0
Návštěvník
22. 10. 2008   #4
-
0
-

v tom cyklu má být ještě podmínka for(int a=bin.size; a>0;a--)

To KIIV : omlouvám se...

Nahlásit jako SPAM
IP: 195.146.114.–
Dodo0
Newbie
22. 10. 2008   #5
-
0
-

To MaS : ja som to z toho tvojho kodu moc nepochopil. Kde mas hlavnu funkciu main? A henta funkcia ktoru tam mas rozpisanu to si napisal iba ze co ma byt cisto v tej funkcii ktoru som si vytvoril? Ak ano je tam dost veci ktorim nerozumiem napr: bin+=hodnota2; alebo for(int a=bin.size; ;a--) a string bin;
cout << bin[a-1];
ale docela ma to zaujimalo a skusal som nad tym sediet a napadlo ma taketo nieco bez vlastnej funkcie :)



#include <iostream>
int main()
{
using namespace std;
int cislo;
cout << "Zadaj lubovolne cislo v desiatkovej sustave: ";
cin >> cislo;
int hodnota = cislo;
float hodnota2;
while (hodnota > 0)
{
hodnota2 = hodnota%2;
if (hodnota2 > 0)
{
hodnota = hodnota /2;
cout << "1";
}
else
{
cout << "0";
hodnota = hodnota /2;
}
}
cin.get();
cin.get();
return 0;
}



Funguje to a ide mi to paradne ;)

Nahlásit jako SPAM
IP: 87.244.222.–
MaS0
Návštěvník
22. 10. 2008   #6
-
0
-

omlouvám se já jsem si to nevyzkoušel, takže tam je dost chyb........tady je to celé (správně to převádí celá čísla)

#include <iostream>

#include <string>
void funkcia(int);
using namespace std;
string bin;
int main()
{
int cislo;
cout << "Zadaj lubovolne cislo v desiatkovej sustave: ";
cin >> cislo;
funkcia(cislo);

cin.get();
cin.get();
return 0;
}

void funkcia(int n){
int hodnota = n;
int hodnota2;
while (hodnota != 0) {
hodnota2 = hodnota% 2;
hodnota = hodnota /2;
bin+=('0'+hodnota2); //přidá to do řetězce číslici-'0' má ASCII kód 48, pokud je "hodnota 2" rovna 0 ASCII kód se
// nezmění a přidá se "0", pokud je "hodnota2" rovna 1 ASCII kód je 49=='1' atd.
};
cout << "Cislo v dvojkovej sustave je: ";
for(int a=bin.size(); a>0;a--)
cout << bin[a-1];
}


ten tvuj příklad mi nějak nejde (pokud zadám 2, vypíše to 01, což je podle mého názoru špatně)->musí se to vypsat pospátku a proto tam mám ten cyklus for(int a=bin.size(); a>0;a--)....

Nahlásit jako SPAM
IP: 195.146.114.–
Bald3rr0
Super člen
22. 10. 2008   #7
-
0
-

To MaS :

for(int a=bin.size(); a>0;a--)
Není zrovna moc dobrý nápad, protože se bude pokaždé zjišťovat bin.size(), která, né zrovna v tomto případě, ale při větším počtu prvků může zabírat spoustu času a výkonu.

Udělal bych to spíše takto:
int a = bin.size();

for(int n = 0; n <= a; n++)
cout << bin[a-n];

Nahlásit jako SPAM
IP: 82.100.0.–
MaS0
Návštěvník
22. 10. 2008   #8
-
0
-

To Bald3rr : no to je pravda, ale podle mě je v těchto příkladech (zde na fóru) důležitější, že to funguje a efektivita je druhořadá, nicméně máš pravdu....

Nahlásit jako SPAM
IP: 195.146.114.–
Bald3rr0
Super člen
22. 10. 2008   #9
-
0
-

To MaS : Jasný, já tě nechtěl nějak provokovat nebo tak, ale "Co se v mládí naučíš, ve stáří jako když najdeš". :)

Nahlásit jako SPAM
IP: 82.100.0.–
KIIV
~ Moderátor
+43
God of flame
22. 10. 2008   #10
-
0
-

To Bald3rr : mam pocit ze prvni argument cyklu for se vykona pouze pri startu cyklu... pokud by to bylo v druhem nebo tretim pak by to opravdu krasne zlikvidlovalo rychlost...
sem o tom zakladal i jedno vlakno :D 2MB retezec a kdyz se prochazel s tim strlen v podmince foru tak to bylo neskutecne pomale

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bald3rr0
Super člen
22. 10. 2008   #11
-
0
-

To KIIV : Děkuji za upřesnění, aspoň jsem zase o něco chytřejší. MaSovi se omlouvám.

Nahlásit jako SPAM
IP: 82.100.0.–
KIIV
~ Moderátor
+43
God of flame
22. 10. 2008   #12
-
0
-

To Bald3rr : v pohode... nekdy je lepsi na to myslet vice nez na to zapomenout uplne :D

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
THE_Megamix
~ Anonymní uživatel
2 příspěvky
24. 10. 2008   #13
-
0
-

čaute programatori, mal by som jednu taku prosbičku, s programovanim ešte len začinam a sedim nad riešením tejto ulohy už dosť dlho a nie a nie sa k tomu dostať, tak Vas chcem poprosiť ci by ste mi nevedeli len slovne napisať algoritmus takehoto zadania :

Navrhni algoritmus pre prevod racionálnych čísel z desiatkovej sústavy do ľubovoľnej inej
(od 2-kovej po 16-stkovú). Vstupy do algoritmu budú: číslo N ( N patrí do (0,1) ) v desiatkovej
sústave a základ sústavy z ( z patrí do <2........16> ), do ktorej sa bude číslo prevádzať. Prevod urobte na
10 platných desatinných miest, alebo aj menej, ak nastane prípad, že číslo má v sústave
z desatinný rozvoj menej ako 10 miest.

Nahlásit jako SPAM
IP: 84.47.54.–
KIIV
~ Moderátor
+43
God of flame
24. 10. 2008   #14
-
0
-

To THE_Megamix : tak si najdi jak se prepocitava desitkova soustava s desetinnou casti na binarni ...
a kdyz ses schopnej provest ty kroky tak, aby si to na papire prevedl, tak bys mohl zvladnout i ten algoritmus

mimo to je pomerne trivialni

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Dodo0
Newbie
24. 10. 2008   #15
-
0
-

To THE_Megamix : Ak poznas algoritmicke znacky tak sa ti staci pozriet na zdrojak ktory som tu napisal a mozes si to podla toho spravit

Nahlásit jako SPAM
IP: 87.244.222.–
THE_Megamix
~ Anonymní uživatel
2 příspěvky
24. 10. 2008   #16
-
0
-

no poznam ale nepoznam C++ .. hovorim ze sa v tomto obore pohybujem asi 5 dni a nikto mi neporadil zatial konkretnejšie

Nahlásit jako SPAM
IP: 84.47.54.–
paul270
Návštěvník
24. 10. 2008   #17
-
0
-

k tomu, co ty chceš potřebuješ nějaký ten cyklus, znát proměnné a jak se s nimy pracuje, ale to spíš přeháním, k tomuhle potřebuješ fakt minimum, co se naučíš za 5 minut. Krom toho na internetu je spousta takovýchto zdrojáků, takže něco najít nebude problém.

Pokud chceš něco konkrétnějšího, tak se na to musíš nejprve zeptat, ty si sem v klidu napíšeš zadání DÚ a myslíš, že dostaneš hotovej program, to ani omylem - taky předveď, že máš snahu to pochopit, jinak ti nikdo radit nebude.

Nahlásit jako SPAM
IP: 88.103.71.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 73 hostů

Podobná vlákna

C++ prevod z M/s na KM/H — založil defender

C# převod — založil Pavel Suchý

Prevod mien — založil Kent

Prevod z VB6 do C# — založil maxpower

8080 prevod — založil Jurosh

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý