[C++] Getallen converter

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedendag geachte forumleden :9,

Ik ben een beginneling in C++, en ik probeer voor de grap een getallen converter te schrijven,
die werkt met Dec, Hex, Bin, Oct en Gray.
Hij rekent eerst van iets naar Decimaal, en daarna van Decimaal naar gewenst.

Nou heb ik dus een probleem, want nu wil ik (natuurlijk) ook Hexadecimaal erbij in gooien.
Het probleem is dus: Hoe doe ik dat, aangezien dat met letters werkt, is het nogal lastig om ermee te rekenen.

Ik zal even een stukje script hier neer kwakken, kunnen jullie een beetje bekijken wat ik gedaan heb.
Dit is het stukje van iets naar Decimaal, daaronder komt dan ook nog eens een gelijkwaardig script voor Decimaal naar gewenst.
Verder komt erboven nog, de invoer van wat naar wat, (bv Decimaal naar Binair) en de invoer van het getal.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//invoer1 is de ingevoerde waarde
//tallig is hoeveel tallig het stelsel is (Decimaal = 10, Binair = 2, Hexadecimaal = 16, enz)

//Variabelen klaarmaken
invoer2 = invoer1;
uitkomst = 0;
waarde = 1;
meestlinks1 = 1;

//Kijken hoeveel cijfers er achter het meest linkse cijfer staat, en welke waarde het meest linkse cijfer heeft
//Met "waarde" bedoel ik trouwens: bij 10110 (binair) is de waarde van het 3e getal 4
while (invoer1 > 1) {
waarde = waarde*tallig;
invoer1 = invoer1/10;
meestlinks1 = meestlinks1*10;
}

//Per cijfer uitrekenen welke waarde deze heeft, en deze bij elkaar optellen voor de uitkomst
while (waarde > 0) {
meestlinks2 = invoer2/meestlinks1;
uitkomst = uitkomst+(meestlinks2*waarde);
waarde = waarde/tallig;
meestlinks2 = meestlinks2*meestlinks1;
invoer2 = invoer2-meestlinks2;
meestlinks1 = meestlinks1/10;
}

Dit is dus het script, voor het omzetten.

Verder had ik zelf al wel wat bedacht, maar dat is misschien een beetje omslachtig.
Dat is door de Hexadecimale invoer
bijvoorbeeld: 23A
in een array te plaatsen
invoer[1] = 2, invoer[2] = 3, invoer[3] = A (of 10)
En dan per variabele uit te rekenen wat de waarde is in het Decimaal:
invoer[1] = 2*256, invoer[2] = 3*16, invoer[3] = A*1 (of 10*1)
en dit bij elkaar op te tellen:
2*256+3*16+10*1 = 570

Maar ik neem aan dat het veel sneller kan!
Hebben jullie misschien een idee?

Groeten,
Dikharz

Edit: Codetags toegevoegd

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Als eerste een huishoudelijke mededeling: Gebruik code tags (dus [code=c++] met bijbehorende sluit tag) om je code leesbaar te houden.

Vervolgens over je vraag.

Bedenk dat Oct, Dec en Hex puur representatie vormen zijn. Het is dus helemaal niet nodig om intern alles om te gaan zetten. Sterker nog. In het computer geheugen worden de waarden sowieso binair onthouden.

Waar het converteren van belang is is op het punt waar je van je string een int/long maakt en waar je van je int/long weer een string maakt. Dat zijn de punten waarop je je conversie toe moet passen. Aangezien je daar werkt met het interpreteren van strings maakt het dus helemaal niet meer uit dat je met letters aan de gang moet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op maandag 22 juni 2009 @ 16:29:
Bedenk dat Oct, Dec en Hex puur representatie vormen zijn. Het is dus helemaal niet nodig om intern alles om te gaan zetten. Sterker nog. In het computer geheugen worden de waarden sowieso binair onthouden.
Hallo Janoz,
Over de text hierboven:
Volgens mij gaat u ervan uit dat dit script ergens nuttig voor moet zijn.
Dit is echter niet zo; De enige redenen waarom ik dit maak,
is om er wat van op te steken en omdat ik het leuk vindt (als hobby), maar vooral ook omdat het kan :9

Maar toch bedankt voor je reactie! ;)

P.S. overigens ben ik geen ICT-er, dus let op uw taalgebruik (alstublieft)! :P

[ Voor 6% gewijzigd door Verwijderd op 22-06-2009 16:46 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 22 juni 2009 @ 16:43:
[...]


Hallo Janoz,
Over de text hierboven:
Volgens mij gaat u ervan uit dat dit script ergens nuttig voor moet zijn.
Dit is echter niet zo; De enige redenen waarom ik dit maak,
is om er wat van op te steken en omdat ik het leuk vindt (als hobby), maar vooral ook omdat het kan :9

Maar toch bedankt voor je reactie! ;)
Neem eens een kijkje in Getallen en talstelsels FAQ; en dan met namen de stukken over opslag en representatie ;)

offtopic:
C++ code noem je geen 'script' :X


Verder: je kunt moeilijk gaan doen met "converteren" enzo, of eens kijken naar bestaande zaken :)

[ Voor 11% gewijzigd door RobIII op 22-06-2009 16:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 14:46

remco_k

een cassettebandje was genoeg

code:
1
//tallig is hoeveel tallig het stelsel is (Decimaal = 10, Binair = 2, Hexadecimaal = 10, enz)

Hexadecimaal is een 16 tallig stelsel.

Verder gewoon wat RobIII zegt. :)

[ Voor 11% gewijzigd door remco_k op 22-06-2009 16:49 ]

Alles kan stuk.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
remco_k schreef op maandag 22 juni 2009 @ 16:48:
Hexadecimaal is een 16 tallig stelsel.
Oh verrek! wat dom! zal het meteen ff aanpassen :P
Pagina: 1