Prevod z 10 do 2 sústavy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prevod z 10 do 2 sústavy – C / C++ – Fórum – Programujte.comPrevod z 10 do 2 sústavy – C / C++ – Fórum – Programujte.com

 

Eddy7770
Duch
21. 2. 2012   #1
-
0
-

Zdravím.Chcem previesť číslo 45967 z dekadického ,do binárneho tvaru.Robil som to systémom ,kde som hľadal vždy zvyšok po delení číslom 2. Dostal som výsledok ,ale v opačnom poradí.Mohli by ste mi poradiť ,ako by som mal tie čísla usporiadať opačne? Som úplný začiatočník..... tu je môj kód.

#include <stdio.h>
#include <conio.h>
int main()
{
    int a = 45967;
    int b;
    int c;
    do{
        a = a / 2;
        printf("\n");
        printf("%d",a);
        printf("\t");
        printf("%d",b = a % 2);
    }while(a >= 1);
    getch();
    return 0;
}
Nahlásit jako SPAM
IP: 91.127.211.–
KIIV
~ Moderátor
+43
God of flame
21. 2. 2012   #2
-
0
-

je nekolik moznosti...

ukladat do pole a to pak vypsat opacne

ukladat do pole opacne a pak vypsat

moje oblibene: ukladat do retezce odzadu a pak vypsat

....

mimochodem mam pocit ze ti ten program ted nepocita spravne.. zbytek po deleni musis dostat pred tim nez cislo vydelis 2

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
22. 2. 2012   #3
-
+2
-
Zajímavé

#1 Eddy777
Alebo niečo takéto by mohlo fungovať, potom to stačí prekonvertovať zo stringu na integer...

string decToBin(int number) {
  if(number == 0) return "0";
  if(number == 1) return "1";
  
  if(number%2 == 0) return decToBin(number / 2) + "0";
  else return decToBin(number / 2) + "1";
}
Nahlásit jako SPAM
IP: 91.127.240.–
vitamin+8
Grafoman
22. 2. 2012   #4
-
+1
-
Zajímavé

i<<=1i<<=1i<<=1#1 Eddy777
Cisla su ulozene v binarnom tvare, printf ich ale zobrazuje ako dekadicke. V podstate ti staci zistit sposob ako pristupovat k jednotlivym bitom. Ak ti staci zobrazovat jednotlive bity tak sa to da spravyt aj bez poli.

int a = 666;

//zacina od najnizsej vahy
for(unsigned i = 1; i; i*=2){ //i<<=1
	if(i <= (unsigned)a){
		if(a & i)putchar('1');
		else putchar('0');
	}
	else break;
}
	
putchar('\n');

//zacina od najvyzsej vahy
for(unsigned i = (1 << (sizeof(unsigned)*8-1)); i; i/=2){ //i>>=1
	if(i <= (unsigned)a){
		if(a & i)putchar('1');
		else putchar('0');
	}
}
Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Samot10
~ Anonymní uživatel
26 příspěvků
22. 2. 2012   #5
-
0
-

ako nacrtol uz vitamin, ostal by som v tej bitovej "vrstve"...ziadne modulo alebo podobne, stacia len bitove posuny a &...
ukladat to alebo priamo vypisovat by nemal byt problem, nejake sposoby tu uz su...

Nahlásit jako SPAM
IP: 147.229.206.–
Eddy7770
Duch
29. 2. 2012   #6
-
0
-

Zdravím, vybral som si metódu pri ktorej výsledok hodím do poľa ,a to pole potom vypíšem z opačnej strany (potrebujem sa naucit pracovat s polami) .... Hadzem sem zdrojak,pretoze mi to nejde otocit a neviem co robim zle.

#include <stdio.h>
#include <conio.h>
int main()
{
    int a = 45967;
    int b;
    int c;
    int i;
    int pole[c];
    c = 0;
    
    while(a >= 1){
        a = a / 2;
        printf("\n");
        b = a % 2;
        printf("%d",b);
        pole[c] = b;
        
    }
    printf("\n");
    b = i;
    for(i=c-1; i>=0; i--){ 
        printf("%d", pole[i]);
    }    
    getch();
    return 0;
}
Nahlásit jako SPAM
IP: 78.99.59.–
KIIV
~ Moderátor
+43
God of flame
29. 2. 2012   #7
-
0
-

int pole[c];  - c musi byt znamo a konstantni v dobe prekladu - to nesplnujes ani nahodou

dejme tomu ze mas vstupni cislo jako integer - pak integer muze mit na 32bitovem procesoru 32bitu (a jeden bit je znamenko)

proc si proste neudelat pole:  char pole[33] = {0};

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
1. 3. 2012   #8
-
0
-

#6 Eddy777
Mas tam aj zopar logickych chyb. 

Premenna c ma pocas celeho programu hodnotu 0, cize si prepisujes len prvy "bit" v pole[]. Tak ako napisal KIIV, velkost pola musi byt znama pri preklade (ak allokujes na stacku). Je zbytocne alokovat pole int-ov ked potrebujes uchovavat len hodnotu 0 a 1. Dalej ignorujes zaporne hodnoty. Pouzivas zbitocne vela premennych, napr premenna 'b' a 'c' je uplne zbytocna. A hlavne:

KIIV

mimochodem mam pocit ze ti ten program ted nepocita spravne.. zbytek po deleni musis dostat pred tim nez cislo vydelis 2

Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Doomista+1
Stálý člen
5. 3. 2012   #9
-
0
-

1) <bitset.h> a UTFG

2) pokud mám v desítkové nějaké číslo, řekněme 1555, ověříme zda je liché (ANO), pokud ano poslední číslo v binárce je 1, pak základní číslo vydělíme dvěma a usekneme zbytek. Máme 777. Opět je liché, předposlední číslo je 1. Vydělíme dvěma - 388, je sudé, poslední trojčíslí je 011, vydělíme - 194 => 0011, dělíme - 97 => 10011, dělíme - 48 => 010011, dělíme - 24 => 0010011, dělíme: 12 => 00010011, dělíme: 6 => 000010011, dělíme: 3 => 1000010011, dělíme: 1 => 11000010011. Taky možnost, co?

Nahlásit jako SPAM
IP: 83.240.1.–
Na vše stačí iostream...
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, 38 hostů

Podobná vlákna

Prevod z hexadecimalnej sustavy — založil street punk

Ciselne sustavy — založil devilfish

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ý