Hi am in prob. 4 me its now or never to pass. get a program to do.
Convert binary to decimal
octal to decimal
some1 can help me.
i need some PRO so if interest post ur mail id and i'll mail u my paper
if some1 no some these codes so post plz WITH COMMENTS

A number is a number is a number is a number, no matter how it is represented for us humans. 10 dec == A hex == 12 oct == 1010 bin. …

You are very close.

You need to move line 22 up before line 19.
On line 19 you accidentally used the wrong variable. (Also, is the same as `strDigit := strBin[[b][i]intLoop[/i][/b]]` .)

The difference between binary (radix 2) and some other system is how much you multiply by …

I've already given you all the help I can without giving you the answer. You have to use your brain now.

Think about what you know about converting binary to decimal, and apply the same logic to octal. Then try it and see if it works.

I suggest …

Remember, a char is a different type than an integer. You cannot add or multiply characters.

Also remember, the point is that the digits 0, 1, 2, 3, ... are representations of numbers, not numbers themselves.

Line 23: `Result:=result+[b]octal[len][/b]*base;` You'll have to convert the bolded part from a …

I recommend writing yourself a little procedure to do it

You'll have to write that function yourself.

For hexadecimal, remember that the values of the digits are:
digits: values
0..9: 0..9
A..F: 10..15

So the `DigitToInt( 'C' )` should return the value 12.
Good luck.

## All 25 Replies

A number is a number is a number is a number, no matter how it is represented for us humans. 10 dec == A hex == 12 oct == 1010 bin. The only difference is in the radix.

dec: base 10
hex: base 16
oct: base 8
bin: base 2

The radix is the difference between digit powers. In decimal:
1 == 1 * 10^0
10 == 1 * 10^1
100 == 1 * 10^2
1,000 == 1 * 10^3
etc.

The same is true in other radices. For example, binary:
1 == 2 * 2^0 (001b == 1 * 10b^0)
2 == 2 * 2^1 (010b == 1 * 10b^1)
4 == 2 * 2^2 (100b == 1 * 10b^2)
etc.

So, to convert between bases, you first need to decompose a human-readable representation from its radix into an actual number. Then you need to compose that number into the desired human-readable representation of a given radix.

For example: convert 1010 binary into a number:

``````str    := '1010';
number := (char_to_int( str ) * pow( radix, 3 ))
+ (char_to_int( str ) * pow( radix, 2 ))
+ (char_to_int( str ) * pow( radix, 1 ))
+ (char_to_int( str ) * pow( radix, 0 ));``````

Neither 'char_to_int' nor 'pow' exist, you'll have to write them. But you should be able to see the progression for each power.

Now, for the basic algorithm:

``````number := 0;
for i := 1 to length( str )
number := (number * radix) +char_to_int( str[i] );``````

To convert a number into a string is the reverse process.

Hope this helps.

i'll make this and its work well convert binary 2 decimal comment the first line and the others plz

``````Program BinToDec (input,output);
uses wincrt;
Var
strBin: string;
intLen: integer;
intCol: integer;
intDec: integer;
intLoop: integer;
strDigit: string;

begin;
Write('Enter a binary number: ');
intLen:=Length(strBin);
intCol:=1;
intDec:=0;
For intLoop:= 1 to intLen do
begin;
strDigit:=copy(strBin,intLen,1);
if strDigit = '1' then
intDec:= intDec + intCol;
intCol:= intCol * 2;
end;
writeln(strBin,' is ',intDec, ' as a decimal number.');
End.``````

i got some help in my exercise book so can u plz comments this
and help me how can i change this code to convert octal to decimal and binary to hexadecimal

HELP radix is the base or explain;
and thanks for ur help

You are very close.

You need to move line 22 up before line 19.
On line 19 you accidentally used the wrong variable. (Also, is the same as `strDigit := strBin[[b][i]intLoop[/i][/b]]` .)

The difference between binary (radix 2) and some other system is how much you multiply by on line 19.

can u help me plese for OCTAL to decimal and Binary to hexadecimal.
its for 30 may 2008
help how can i validate (mean if some one put 1001a its not good)
help plz

I've already given you all the help I can without giving you the answer. You have to use your brain now.

Think about what you know about converting binary to decimal, and apply the same logic to octal. Then try it and see if it works.

I suggest you write yourself a little function that takes a character and turns it into an integer or complains if it is invalid for the base. Its header might look something like this: `[B]function[/B] CharToInt( c: [B]char[/B]; base: [B]integer[/B] ): [B]integer[/B];` Then you can say `intCol := CharToInt( 'A', 8 );` If A is valid for octal (base 8) then intCol gets the value 10.
If A is not valid for octal then intCol gets the value -1 (invalid).
Etc.

Good luck.

Got problem when converting Octal to decimal
Help plz
Here's the code:

``````Procedure OctToDec;
Var
Octal:string;
Len:integer;
counter:integer;
base:integer;
result:integer;
Begin
Write('Enter an octal number: ');
Counter:=1;
result:=0;
base:=1;
for Len:=length(octal) downto counter do
Begin
If not (octal[Len] in ['0'..'7']) then
Begin
Writeln('This is not an Octal number!');
Halt;

end
Else
Result:=result+octal[len]*base;
base:=base*8;
end;
Writeln(result);
end;``````

thanks for the help

Remember, a char is a different type than an integer. You cannot add or multiply characters.

Also remember, the point is that the digits 0, 1, 2, 3, ... are representations of numbers, not numbers themselves.

Line 23: `Result:=result+[b]octal[len][/b]*base;` You'll have to convert the bolded part from a character into a number. I recommend writing yourself a little procedure to do it, so you can change the code to something like: `Result:=result+[b]DigitToInt(octal[len])[/b]*base;` Very good job on the procedure, by the way.

You don't actually need the 'counter' variable. Just use `[b]downto[/b] 1` .

Hope this helps.

Thank you Very much

so i remain only the Binary to Hexadecimal to do
how can i modify the code for this, its a bit harder 4 me to understand

Thank you again

``Result:=result+DigitToInt(octal[len])*base;``

unknown identifier

i use

``````Var
i,code:integer;
{4 line 23}
Val(octal[len],i,code);
Result:=result+i*base;``````

I recommend writing yourself a little procedure to do it

You'll have to write that function yourself.

For hexadecimal, remember that the values of the digits are:
digits: values
0..9: 0..9
A..F: 10..15

So the `DigitToInt( 'C' )` should return the value 12.
Good luck.

Sorry 4 disturbace
i dont understand how to break it in 4

sorry again

What?

i mean
4 Hexadecimal dont no how to break it in 4
e.g: 10110011101

will become start from right 0101 1001 1101
This is 5 9 D

10110011101 is binary. You don't have to break it into anything. Just convert it to a number.

Once you get your number from the first step, convert it into hexadecimal: 59D.

Remember, the difference between digit powers is the radix.
Remember, binary and decimal and octal and whatever is text, writing, strings, human readable stuff. They aren't numbers.

Convert a string to a number using one radix.
Convert the number to a string using another radix.

Just convert it 4 a number YOU mean Convert bin to dec
and then convert the Dec into Hex

is wat i understand is right?

No, I mean convert bin (a string) to integer. Then convert the integer to hex (another string).

I hope that makes more sense.

am stressing submit date is 30 may 2008 i have to make bin to hex else i'll lose 20 marks.
plz more explanation on how to convert this integer to hex. Binary (string) to integer i no how to do this, but then i have no idea. plz more explanation.

You've already got code that converts octal to a number (which you call OctToDec).

Remember, "octal", "decimal", etc. --these are not numbers. They are strings. Only people read and write strings.

A number is an integer or a real or some other scalar type. Computers understand numbers, not strings.

So conversion from, say, binary to octal is a two-step process.

1. Convert your binary (string) in to a number (integer).
2. Convert your number (integer) to an octal (string).

You'll need two procedures: one for each step.

Remember, you've already done step 1 once (with an octal string to an integer). You can do it the same way for binary or decimal or hexadecimal --the only difference between them is the radix: 2 (binary), 8 (octal), 10 (decimal), or 16 (hexadecimal).
For your OctToDec routine (listed here) you've got the radix (the number 8) on line 24, and the set of valid digits on line 16. I don't know how you fixed line 23 to convert the digit (a character) to a number (integer), but you'll have to do the same sort of thing for every radix. Except for those three lines, everything else is the same.

To go the other way the math is just reversed. Instead of building up a number by tearing down a string, you'll build up a string by tearing down a number.

Think about it a bit and give it a go. I'll check back to see how you're doing.

i solve the line 23 by using

``````var
i:integer;
code:integer;

Begin

Val(octal[len],i,code);
Result:=Result+i*base;``````

my problem is how to make this

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111

this break in 4 1010 = A

Forget the 4 digits thing. You are trying to skip a step. (Though you may not realize it...)

Just take a single digit at a time. For binary, it should be a zero or a one.

``````i, n, foo: integer;
...
result := 0;
for i := 1 to length( s ) do
begin
// validate digit is a binary digit
if not (s[i] in ['0','1'])
then complain_that_its_not_a_binary_number;
// convert that digit into a number
val( s[i], n, foo );
result := result * 2;
result := result + n;
end;``````

This is the exact same thing you did before with the octal: only three things have changed:
line 7: the set of valid digits have changed
line 10: ok, well that hasn't changed...

You'll have to watch how you translate individual digits from hexadecimal. I suggest using upcase, pos, and a string that looks like this: `'0123456789ABCDEF'` Hope this helps.

hello i do it like this:

``````function bintohex(binary:string):string;
var
counter,upperbound,lowerbound:integer;
tempbin,hex:string;
begin
counter:=length(binary);
upperbound:=0;
lowerbound:=0;
tempbin:='';
hex:='';
while(Upperbound<counter) do
begin
while(lowerbound<=(upperbound+4)) do
begin
tempbin:=tempbin+binary[lowerbound];
lowerbound:=lowerbound+1;
end;

if(bintodec(tempbin)=0) then
begin
hex:=hex+'0';
end;
if(bintodec(tempbin)=1) then
begin
hex:=hex+'1';
end;if(bintodec(tempbin)=2) then
begin
hex:=hex+'2';
end;
if(bintodec(tempbin)=3) then
begin
hex:=hex+'3';
end;
if(bintodec(tempbin)=4) then
begin
hex:=hex+'4';
end;
if(bintodec(tempbin)=5) then
begin
hex:=hex+'5';
end;
if(bintodec(tempbin)=6) then
begin
hex:=hex+'6';
end;
if(bintodec(tempbin)=7) then
begin
hex:=hex+'7';
end;
if(bintodec(tempbin)=8) then
begin
hex:=hex+'8';
end;
if(bintodec(tempbin)=9) then
begin
hex:=hex+'9';
end;
if(bintodec(tempbin)=10) then
begin
hex:=hex+'A';
end;
if(bintodec(tempbin)=11) then
begin
hex:=hex+'B';
end;
if(bintodec(tempbin)=12) then
begin
hex:=hex+'C';
end;
if(bintodec(tempbin)=13) then
begin
hex:=hex+'D';
end;
if(bintodec(tempbin)=14) then
begin
hex:=hex+'E';
end;
if(bintodec(tempbin)=15) then
begin
hex:=hex+'F';
end;
Upperbound:=upperbound+4;
tempbin:='';
end;
bintohex:=hex;
end;``````

how u would to it plz today its my last day post plz.

I'm sorry, but I've already given you the answer without actually writing code. You'll have to think about it yourself now...

Good luck.

Program finished

******************
Number conversion
1. Binary to decimal
2. Octal to decimal

******************

Here's the code FOR EVERYONE:

``````Program NumberConversion;

Uses wincrt;

Const
max = 30; {this is used for declaring ARRAY}

Type

Var
decimal: longint;
i: integer;

Begin
writeln(' Number conversion:'); {This line displayed only {Number conversion) and same for other line.}
writeln('   1. Binary to decimal');
Writeln('   2. Octal to decimal');
Writeln('   4. Exit');

Procedure PressAnyKey; {Procedure to show the Menu by pressing any key when a conversion is finished.}
Begin
Writeln; {leave a line.}
Write('Press Any Key for Main Menu...');
clrscr; {Clear the screen.}
End; {Stop the PressAnyKey procedure.}

function BinToDec(binary:string):integer; {Procedure to convert binary to decimal.}
Var  {this line Binary is declared as string.}
Len:integer; {Len means Length declared as integer.}
base:integer; {base is the base of the binary and declared as integer.}
Result:longint; {Result is the final result and declared as integer.}
Begin
Write('Enter a binary number: ');
result:=0; {Result initialised as 0.}
base:=1; {base initialised as 1.}
for Len:=length(binary) downto 1 do {loop from  string length down to 1 (binary reads from right to left).}
begin
If not (binary[Len] in ['1','0']) then {validation, if the string does not contains 1 , 0 or both.}
begin

writeln('This is not a binary number!');
writeln; {leave a line.}
Halt; {Stop the Loop.}

end
else
if (binary[len]='1') then {Verify if see 1 in string}
result:= result+ base; {convert Binary to Decimal (The result).}
base:=base*2; {increment base by 2.}
end;
BinToDec:=Result;
End;

Procedure OctToDec;
Var
Octal:string;
Len:integer;
counter:integer;
base:integer;
result:longint;
i,code:integer;
Begin
Write('Enter an octal number: ');
result:=0;
base:=1;
for Len:=length(octal) downto 1 do {loop from  string length down to 1 (Octal reads from right to left).}
Begin
If not (octal[Len] in ['0'..'7']) then {validation, if the string does not contain only from 0 to 7.}
Begin
Writeln('This is not an Octal number!');
Writeln;
Halt; {stop the loop.}

end
Else
Val(octal[len],i,code); {This line converts string into integer.}
Result:=result+i*base; {Converts Octal into Decimal (the result).}
base:=base*8; {octal base increment by 8}
end;
Writeln('The decimal number is ',result); {the answer}
end;

{This procedure works the conversion of dec to hex.}
Procedure convert(decimal: longint; Var i: integer; Var hexa: hexadecimal);
Begin
i := 1;
while decimal <> 0 do
Begin
hexa[i] := decimal mod 16;
decimal := decimal div 16;
i := i + 1;
end;
end;

Var j: integer;
Begin
{This is how you make a hex number}
For j := (i - 1) downto 1 do
Begin
if hexa[j] < 10 then
write(output, hexa[j])
else
Begin
{Here, program checks for number larger than 10 to write a letter instead of number}
Case hexa[j] of
10: write(output, 'A');
11: write(output, 'B');
12: write(output, 'C');
13: write(output, 'D');
14: write(output, 'E');
15: write(output, 'F');
End; {End of Case}
End; {End of ELSE}
End; {End of FOR loop}
End; {End of Procedure}

Procedure BinToHex; {This contains all the other procedure to get the final answer
var
decimal:longint;
binary:string;
Begin
decimal:=bintodec(binary);
convert(decimal, i, hexa);
writetothescreen(i, hexa);
End;

Procedure SelectOption;{here this is use to make your choice}
var
option:integer;
binary:string;
Begin
If not option in [1..4] then
writeln('invalid choice')
Else
If (option=1) Then
begin
clrscr;
Writeln('**Binary to Decimal conversion**');
writeln;
decimal:=BinToDec(binary);
writeln ('The Decimal number is: ',decimal); {Display the Result.}
PressAnyKey;
SelectOption;
end;
If (option=2) then
Begin
clrscr;
Writeln('**Octal to Decimal conversion**');
Writeln;
OctToDec;
PressAnyKey;
SelectOption;
End;
If (option=3) then
Begin
clrscr;
writeln;
BinToHex;
writeln;
PressAnyKey;
SelectOption;
End;
If(option=4) then
Begin
clrscr;
Writeln('Press Alt+F4 to exit');
end;
end;

Begin {The main Program}
SelectOption;

End.{End the main program}``````

Thanks Duoas for ur help
thanks very much

Good job!

BTW, what compiler are you using? I had to pull out my old TP4 to compile it...

you'll get the compiler am using here:

its for windows

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.