prevod z desiatkovej do dvojkovej

Programovacie jazyky, rady, poradňa...
RnT
Amateur
Amateur
Príspevky: 20
Registrovaný: 16 feb 2008, 21:25

prevod z desiatkovej do dvojkovej

Príspevok od používateľa RnT »

Ahojte,na cviceniach sme mali takuto ulohu:Prevedte lubovolne cislo zapisane v dekadickej sustave do binarnej sustavy,s pouzitim cyklu s podmienkou na konci.Tak som si zacal pisat kod veselo s chladnou hlavou:

Kód: Vybrať všetko

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{   int n,zvysok;
    printf("Napis cislo: ");
    scanf("%d",&n);
    do{
        zvysok=(n%2);     
        printf("%d",zvysok); 
        n/=2;
        }while(n!=0);
        printf("\n");               
    system("PAUSE");
    return EXIT_SUCCESS;
}
Po spusteni som vsak nadabil na problem,ze vysledne cislo vypisuje program v opacnom tvare ako ma byt(cize napr. 18 nenapise ako 10010,ale ako 01001).Profesor nam vyslovne zakazal pouzit na upravu pole,kedze sme sa ho este na prednaskach neucili.Preto sa obraciam na vas s prosbou o riesenie tohoto problemu.Prosim vas do odpovede napiste cely zdrojovy kod aj popis ako ste uvazovali respektive ako ste k tomu dosli. Uricite sa to da,sam profak to vraj ukazoval,vsak u mna bola priroda prednejsia-WC. Bol by som vam velmi vdacny keby sa niekto nasiel a vyriesil to.dikes
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

mam pre teba dobru spravu - tvoj zdrojak pracuje spravne :D
ale teraz k veci..jedine riesenie, ktore ma momentalne napada je zhruba nasledovne:
1. nacitas cislo v desiatkovej sustave (premenna cislo)
2. v nejakom cykle budes umocnovat dvojku, kym nebude vysledok vacsi alebo rovny ako cislo (premenna pom)
3. pom vydelis dvomi
4. v dalsom cykle budes porovnavat pom s cislo:
ak bude cislo vacsie alebo rovne ako pom na vystup posles 1 a cislo = cislo - pom;
inak na vystup posles 0
pom vydelis dvomi
cyklus opakujes pokial pom>=1;

Kód: Vybrať všetko

int pom=1, cislo;

printf("Napis cislo: ");
scanf("%d",&cislo);

do {
  pom *= 2;
  } while (pom<=cislo);

pom = pom/2;

do {
  if (cislo>=pom) {
    printf("1");
    cislo = cislo - pom;
  }
  else
    printf("0");
  pom = pom/2;
} while (pom>=1);
toto si daj do main a skus to skompilovat..mozno to bude hadzat nejake chyby, ale mal by si to dokazat opravit..sam som zvedavy, ci to bude fungovat :)

\\tak to skompiloval v Jave a (prekvapujuco) funguje..
RnT
Amateur
Amateur
Príspevky: 20
Registrovaný: 16 feb 2008, 21:25

Príspevok od používateľa RnT »

kamo,ty si riadny manik :D ..dikes,pozrem sa na to hlbsie,ale az zajtra dnes som uz out
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

a retazce ste uz brali (myslim char[]) .. to sa da tiez pouzit ako pole :)
tomPD
Star
Star
Používateľov profilový obrázok
Príspevky: 679
Registrovaný: 17 okt 2005, 14:41
Bydlisko: Senec
Kontaktovať používateľa:

Príspevok od používateľa tomPD »

retazec v C je tiez len pole tak myslim ze by mu to "nezozral"
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

ale ked s nim nebude narabat ako s polom tak preco nie
...
Expert
Expert
Príspevky: 157
Registrovaný: 07 apr 2006, 18:13

Príspevok od používateľa ... »

rekurziu ste asi este nepreberali, co? :)
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

aj keby ano, tak na toto pouzit rekurziu je blbost
Napísať odpoveď