Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

A procedure that won't work

DirtyKDirtyK Posts: 35Member
I need to write a procedure:
procedure HextoDec
(const Hexstr: string; var DecOut : integer);
I need to write this without using 'read' or 'write' within it.

I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers

[code]
procedure HexToDec (const hexstr: string ; DecOut: integer);

const
HexValues : string [16] ='0123456789ABCDEF';

var
i : integer;


begin
DecOut := 0;
case Length(Hexstr) of
0: DecOut := 0;
1..8: for i:=1 to Length(Hexstr) do
DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
else for i:=1 to 8 do
DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;


end;
end;
[/code]

Comments

  • zibadianzibadian Posts: 6,349Member
    : I need to write a procedure:
    : procedure HextoDec
    : (const Hexstr: string; var DecOut : integer);
    : I need to write this without using 'read' or 'write' within it.
    :
    : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    :
    : [code]
    : procedure HexToDec (const hexstr: string ; DecOut: integer);
    :
    : const
    : HexValues : string [16] ='0123456789ABCDEF';
    :
    : var
    : i : integer;
    :
    :
    : begin
    : DecOut := 0;
    : case Length(Hexstr) of
    : 0: DecOut := 0;
    : 1..8: for i:=1 to Length(Hexstr) do
    : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : else for i:=1 to 8 do
    : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    :
    :
    : end;
    : end;
    : [/code]
    :
    Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
  • DirtyKDirtyK Posts: 35Member
    : : I need to write a procedure:
    : : procedure HextoDec
    : : (const Hexstr: string; var DecOut : integer);
    : : I need to write this without using 'read' or 'write' within it.
    : :
    : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : :
    : : [code]
    : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : :
    : : const
    : : HexValues : string [16] ='0123456789ABCDEF';
    : :
    : : var
    : : i : integer;
    : :
    : :
    : : begin
    : : DecOut := 0;
    : : case Length(Hexstr) of
    : : 0: DecOut := 0;
    : : 1..8: for i:=1 to Length(Hexstr) do
    : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : else for i:=1 to 8 do
    : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : :
    : :
    : : end;
    : : end;
    : : [/code]
    : :
    : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.

    Right, changed that...
    Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    cheers
    :

  • zibadianzibadian Posts: 6,349Member
    : : : I need to write a procedure:
    : : : procedure HextoDec
    : : : (const Hexstr: string; var DecOut : integer);
    : : : I need to write this without using 'read' or 'write' within it.
    : : :
    : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : :
    : : : [code]
    : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : :
    : : : const
    : : : HexValues : string [16] ='0123456789ABCDEF';
    : : :
    : : : var
    : : : i : integer;
    : : :
    : : :
    : : : begin
    : : : DecOut := 0;
    : : : case Length(Hexstr) of
    : : : 0: DecOut := 0;
    : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : else for i:=1 to 8 do
    : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : :
    : : :
    : : : end;
    : : : end;
    : : : [/code]
    : : :
    : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    :
    : Right, changed that...
    : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : cheers
    : :
    :
    :
    The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
  • DirtyKDirtyK Posts: 35Member
    : : : : I need to write a procedure:
    : : : : procedure HextoDec
    : : : : (const Hexstr: string; var DecOut : integer);
    : : : : I need to write this without using 'read' or 'write' within it.
    : : : :
    : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : :
    : : : : [code]
    : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : :
    : : : : const
    : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : :
    : : : : var
    : : : : i : integer;
    : : : :
    : : : :
    : : : : begin
    : : : : DecOut := 0;
    : : : : case Length(Hexstr) of
    : : : : 0: DecOut := 0;
    : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : else for i:=1 to 8 do
    : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : :
    : : : :
    : : : : end;
    : : : : end;
    : : : : [/code]
    : : : :
    : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : :
    : : Right, changed that...
    : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : cheers
    : : :
    : :
    : :
    : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.

    Sorry I meant to put the code in with the last message.... here you go...
    [code]
    uses
    SysUtils;
    var
    user: string;
    prop : integer;



    procedure HexToDec (const hexstr: string ;var DecOut: integer);

    const
    HexValues : string [16] ='0123456789ABCDEF';

    var
    i : integer;


    begin
    DecOut := 0;
    case Length(Hexstr) of
    0: DecOut := 0;
    1..8: for i:=1 to Length(Hexstr) do
    DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    else for i:=1 to 8 do
    DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;


    end;
    end;
    begin
    writeln ('Please enter the Hex number you wish to convert...');
    readln (user);
    begin
    HexToDec(User);

    readln (prop) ;
    end;
    end.
    [/code]
    :

  • zibadianzibadian Posts: 6,349Member
    : : : : : I need to write a procedure:
    : : : : : procedure HextoDec
    : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : :
    : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : :
    : : : : : [code]
    : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : :
    : : : : : const
    : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : :
    : : : : : var
    : : : : : i : integer;
    : : : : :
    : : : : :
    : : : : : begin
    : : : : : DecOut := 0;
    : : : : : case Length(Hexstr) of
    : : : : : 0: DecOut := 0;
    : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : else for i:=1 to 8 do
    : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : :
    : : : : :
    : : : : : end;
    : : : : : end;
    : : : : : [/code]
    : : : : :
    : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : :
    : : : Right, changed that...
    : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : cheers
    : : : :
    : : :
    : : :
    : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    :
    : Sorry I meant to put the code in with the last message.... here you go...
    : [code]
    : uses
    : SysUtils;
    : var
    : user: string;
    : prop : integer;
    :
    :
    :
    : procedure HexToDec (const hexstr: string ;var DecOut: integer);
    :
    : const
    : HexValues : string [16] ='0123456789ABCDEF';
    :
    : var
    : i : integer;
    :
    :
    : begin
    : DecOut := 0;
    : case Length(Hexstr) of
    : 0: DecOut := 0;
    : 1..8: for i:=1 to Length(Hexstr) do
    : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : else for i:=1 to 8 do
    : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    :
    :
    : end;
    : end;
    : begin
    : writeln ('Please enter the Hex number you wish to convert...');
    : readln (user);
    : begin
    : HexToDec(User);
    :
    : readln (prop) ;
    : end;
    : end.
    : [/code]
    : :
    :
    :
    You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
  • DirtyKDirtyK Posts: 35Member
    : : : : : : I need to write a procedure:
    : : : : : : procedure HextoDec
    : : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : : :
    : : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : : :
    : : : : : : [code]
    : : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : : :
    : : : : : : const
    : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : :
    : : : : : : var
    : : : : : : i : integer;
    : : : : : :
    : : : : : :
    : : : : : : begin
    : : : : : : DecOut := 0;
    : : : : : : case Length(Hexstr) of
    : : : : : : 0: DecOut := 0;
    : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : else for i:=1 to 8 do
    : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : :
    : : : : : :
    : : : : : : end;
    : : : : : : end;
    : : : : : : [/code]
    : : : : : :
    : : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : : :
    : : : : Right, changed that...
    : : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : : cheers
    : : : : :
    : : : :
    : : : :
    : : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    : :
    : : Sorry I meant to put the code in with the last message.... here you go...
    : : [code]
    : : uses
    : : SysUtils;
    : : var
    : : user: string;
    : : prop : integer;
    : :
    : :
    : :
    : : procedure HexToDec (const hexstr: string ;var DecOut: integer);
    : :
    : : const
    : : HexValues : string [16] ='0123456789ABCDEF';
    : :
    : : var
    : : i : integer;
    : :
    : :
    : : begin
    : : DecOut := 0;
    : : case Length(Hexstr) of
    : : 0: DecOut := 0;
    : : 1..8: for i:=1 to Length(Hexstr) do
    : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : else for i:=1 to 8 do
    : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : :
    : :
    : : end;
    : : end;
    : : begin
    : : writeln ('Please enter the Hex number you wish to convert...');
    : : readln (user);
    : : begin
    : : HexToDec(User);
    : :
    : : readln (prop) ;
    : : end;
    : : end.
    : : [/code]
    : : :
    : :
    : :
    : You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
    :
    I've added a writeln after calling the procedure... is this what you meant by writing it to screen? but i don't understand which integer parameter i have forgotten or where to put it...?
    Sorry...
  • zibadianzibadian Posts: 6,349Member
    : : : : : : : I need to write a procedure:
    : : : : : : : procedure HextoDec
    : : : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : : : :
    : : : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : : : :
    : : : : : : : [code]
    : : : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : : : :
    : : : : : : : const
    : : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : : :
    : : : : : : : var
    : : : : : : : i : integer;
    : : : : : : :
    : : : : : : :
    : : : : : : : begin
    : : : : : : : DecOut := 0;
    : : : : : : : case Length(Hexstr) of
    : : : : : : : 0: DecOut := 0;
    : : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : else for i:=1 to 8 do
    : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : :
    : : : : : : :
    : : : : : : : end;
    : : : : : : : end;
    : : : : : : : [/code]
    : : : : : : :
    : : : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : : : :
    : : : : : Right, changed that...
    : : : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : : : cheers
    : : : : : :
    : : : : :
    : : : : :
    : : : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    : : :
    : : : Sorry I meant to put the code in with the last message.... here you go...
    : : : [code]
    : : : uses
    : : : SysUtils;
    : : : var
    : : : user: string;
    : : : prop : integer;
    : : :
    : : :
    : : :
    : : : [red]procedure HexToDec (const hexstr: string ;var DecOut: integer);[/red]
    : : :
    : : : const
    : : : HexValues : string [16] ='0123456789ABCDEF';
    : : :
    : : : var
    : : : i : integer;
    : : :
    : : :
    : : : begin
    : : : DecOut := 0;
    : : : case Length(Hexstr) of
    : : : 0: DecOut := 0;
    : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : else for i:=1 to 8 do
    : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : :
    : : :
    : : : end;
    : : : end;
    : : : begin
    : : : writeln ('Please enter the Hex number you wish to convert...');
    : : : readln (user);
    : : : begin
    : : : [blue]HexToDec(User);[/blue]
    : : :
    : : : readln (prop) ;
    : : : end;
    : : : end.
    : : : [/code]
    : : : :
    : : :
    : : :
    : : You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
    : :
    : I've added a writeln after calling the procedure... is this what you meant by writing it to screen? but i don't understand which integer parameter i have forgotten or where to put it...?
    : Sorry...
    :
    If you look at the procedure declaration (red in the code), you will see 2 parameters: hexstr and DecOut. In your procedure call (blue) there is only 1: user. This means that the code doesn't compile. And if it does, it does not know what to do with the DecOut parameter. The call code must include more code to tell the computer what to do with the DecOut value. In other words, you need to add a second parameter to the calling code, which is the variable, into which the result of the conversion needs to be stored.
  • DirtyKDirtyK Posts: 35Member
    : : : : : : : : I need to write a procedure:
    : : : : : : : : procedure HextoDec
    : : : : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : : : : :
    : : : : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : : : : :
    : : : : : : : : [code]
    : : : : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : : : : :
    : : : : : : : : const
    : : : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : : : :
    : : : : : : : : var
    : : : : : : : : i : integer;
    : : : : : : : :
    : : : : : : : :
    : : : : : : : : begin
    : : : : : : : : DecOut := 0;
    : : : : : : : : case Length(Hexstr) of
    : : : : : : : : 0: DecOut := 0;
    : : : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : : else for i:=1 to 8 do
    : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : :
    : : : : : : : :
    : : : : : : : : end;
    : : : : : : : : end;
    : : : : : : : : [/code]
    : : : : : : : :
    : : : : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : : : : :
    : : : : : : Right, changed that...
    : : : : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : : : : cheers
    : : : : : : :
    : : : : : :
    : : : : : :
    : : : : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    : : : :
    : : : : Sorry I meant to put the code in with the last message.... here you go...
    : : : : [code]
    : : : : uses
    : : : : SysUtils;
    : : : : var
    : : : : user: string;
    : : : : prop : integer;
    : : : :
    : : : :
    : : : :
    : : : : [red]procedure HexToDec (const hexstr: string ;var DecOut: integer);[/red]
    : : : :
    : : : : const
    : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : :
    : : : : var
    : : : : i : integer;
    : : : :
    : : : :
    : : : : begin
    : : : : DecOut := 0;
    : : : : case Length(Hexstr) of
    : : : : 0: DecOut := 0;
    : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : else for i:=1 to 8 do
    : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : :
    : : : :
    : : : : end;
    : : : : end;
    : : : : begin
    : : : : writeln ('Please enter the Hex number you wish to convert...');
    : : : : readln (user);
    : : : : begin
    : : : : [blue]HexToDec(User);[/blue]
    : : : :
    : : : : readln (prop) ;
    : : : : end;
    : : : : end.
    : : : : [/code]
    : : : : :
    : : : :
    : : : :
    : : : You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
    : : :
    : : I've added a writeln after calling the procedure... is this what you meant by writing it to screen? but i don't understand which integer parameter i have forgotten or where to put it...?
    : : Sorry...
    : :
    : If you look at the procedure declaration (red in the code), you will see 2 parameters: hexstr and DecOut. In your procedure call (blue) there is only 1: user. This means that the code doesn't compile. And if it does, it does not know what to do with the DecOut parameter. The call code must include more code to tell the computer what to do with the DecOut value. In other words, you need to add a second parameter to the calling code, which is the variable, into which the result of the conversion needs to be stored.
    :
    Excellent working now!!!! Thank-you!!!

  • DirtyKDirtyK Posts: 35Member
    : : : : : : : : : I need to write a procedure:
    : : : : : : : : : procedure HextoDec
    : : : : : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : : : : : :
    : : : : : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : : : : : :
    : : : : : : : : : [code]
    : : : : : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : : : : : :
    : : : : : : : : : const
    : : : : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : : : : :
    : : : : : : : : : var
    : : : : : : : : : i : integer;
    : : : : : : : : :
    : : : : : : : : :
    : : : : : : : : : begin
    : : : : : : : : : DecOut := 0;
    : : : : : : : : : case Length(Hexstr) of
    : : : : : : : : : 0: DecOut := 0;
    : : : : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : : : else for i:=1 to 8 do
    : : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : : :
    : : : : : : : : :
    : : : : : : : : : end;
    : : : : : : : : : end;
    : : : : : : : : : [/code]
    : : : : : : : : :
    : : : : : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : : : : : :
    : : : : : : : Right, changed that...
    : : : : : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : : : : : cheers
    : : : : : : : :
    : : : : : : :
    : : : : : : :
    : : : : : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    : : : : :
    : : : : : Sorry I meant to put the code in with the last message.... here you go...
    : : : : : [code]
    : : : : : uses
    : : : : : SysUtils;
    : : : : : var
    : : : : : user: string;
    : : : : : prop : integer;
    : : : : :
    : : : : :
    : : : : :
    : : : : : [red]procedure HexToDec (const hexstr: string ;var DecOut: integer);[/red]
    : : : : :
    : : : : : const
    : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : :
    : : : : : var
    : : : : : i : integer;
    : : : : :
    : : : : :
    : : : : : begin
    : : : : : DecOut := 0;
    : : : : : case Length(Hexstr) of
    : : : : : 0: DecOut := 0;
    : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : else for i:=1 to 8 do
    : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : :
    : : : : :
    : : : : : end;
    : : : : : end;
    : : : : : begin
    : : : : : writeln ('Please enter the Hex number you wish to convert...');
    : : : : : readln (user);
    : : : : : begin
    : : : : : [blue]HexToDec(User);[/blue]
    : : : : :
    : : : : : readln (prop) ;
    : : : : : end;
    : : : : : end.
    : : : : : [/code]
    : : : : : :
    : : : : :
    : : : : :
    : : : : You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
    : : : :
    : : : I've added a writeln after calling the procedure... is this what you meant by writing it to screen? but i don't understand which integer parameter i have forgotten or where to put it...?
    : : : Sorry...
    : : :
    : : If you look at the procedure declaration (red in the code), you will see 2 parameters: hexstr and DecOut. In your procedure call (blue) there is only 1: user. This means that the code doesn't compile. And if it does, it does not know what to do with the DecOut parameter. The call code must include more code to tell the computer what to do with the DecOut value. In other words, you need to add a second parameter to the calling code, which is the variable, into which the result of the conversion needs to be stored.
    : :
    : Excellent working now!!!! Thank-you!!!

    Any chance you could tell me how come this procedure doesn't work when it's pretty much in the same format?

    [code]
    uses
    SysUtils;
    var
    user, prop : integer;
    result : string;
    procedure DecToHex (Const Number : integer; var Hexstr : string);

    const
    HexValue : string [16] = '0123456789ABCDEF';

    var

    remainder : integer;

    begin
    HexStr := '';
    while Number > 0 do
    begin
    Remainder := Number mod 16;
    HexStr := HexValue[Remainder + 1] + HexStr;
    Number := Number div 16 ;



    end;
    end;
    begin
    writeln (' please enter number');
    readln (user);
    DecToHex (user, result);
    writeln(result);
    readln (prop);
    end.
    : [/code]
    :

  • zibadianzibadian Posts: 6,349Member
    : : : : : : : : : : I need to write a procedure:
    : : : : : : : : : : procedure HextoDec
    : : : : : : : : : : (const Hexstr: string; var DecOut : integer);
    : : : : : : : : : : I need to write this without using 'read' or 'write' within it.
    : : : : : : : : : :
    : : : : : : : : : : I have earlier written a function which canverts from Hex to Dec successfully and have been trying to swap bits of it around so that it will work as this procedure but to know avail... I've included where I have got so far and would be very grateful if anyone could offer me some advice... Cheers
    : : : : : : : : : :
    : : : : : : : : : : [code]
    : : : : : : : : : : procedure HexToDec (const hexstr: string ; DecOut: integer);
    : : : : : : : : : :
    : : : : : : : : : : const
    : : : : : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : : : : : :
    : : : : : : : : : : var
    : : : : : : : : : : i : integer;
    : : : : : : : : : :
    : : : : : : : : : :
    : : : : : : : : : : begin
    : : : : : : : : : : DecOut := 0;
    : : : : : : : : : : case Length(Hexstr) of
    : : : : : : : : : : 0: DecOut := 0;
    : : : : : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : : : : else for i:=1 to 8 do
    : : : : : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : : : : :
    : : : : : : : : : :
    : : : : : : : : : : end;
    : : : : : : : : : : end;
    : : : : : : : : : : [/code]
    : : : : : : : : : :
    : : : : : : : : : Your code does not have a variable DecOut parameter. That is required for the actual variable in the calling code to be changed.
    : : : : : : : :
    : : : : : : : : Right, changed that...
    : : : : : : : : Have put the procedure into a program to test it but can't get it to work... could you give me a clue as to what i'm missing now?
    : : : : : : : : cheers
    : : : : : : : : :
    : : : : : : : :
    : : : : : : : :
    : : : : : : : The procedure itself works perfectly. Please, post your calling code. Perhaps that's where the error is.
    : : : : : :
    : : : : : : Sorry I meant to put the code in with the last message.... here you go...
    : : : : : : [code]
    : : : : : : uses
    : : : : : : SysUtils;
    : : : : : : var
    : : : : : : user: string;
    : : : : : : prop : integer;
    : : : : : :
    : : : : : :
    : : : : : :
    : : : : : : [red]procedure HexToDec (const hexstr: string ;var DecOut: integer);[/red]
    : : : : : :
    : : : : : : const
    : : : : : : HexValues : string [16] ='0123456789ABCDEF';
    : : : : : :
    : : : : : : var
    : : : : : : i : integer;
    : : : : : :
    : : : : : :
    : : : : : : begin
    : : : : : : DecOut := 0;
    : : : : : : case Length(Hexstr) of
    : : : : : : 0: DecOut := 0;
    : : : : : : 1..8: for i:=1 to Length(Hexstr) do
    : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : : else for i:=1 to 8 do
    : : : : : : DecOut := 16*DecOut + Pos(Upcase(Hexstr[i]), HexValues)-1;
    : : : : : :
    : : : : : :
    : : : : : : end;
    : : : : : : end;
    : : : : : : begin
    : : : : : : writeln ('Please enter the Hex number you wish to convert...');
    : : : : : : readln (user);
    : : : : : : begin
    : : : : : : [blue]HexToDec(User);[/blue]
    : : : : : :
    : : : : : : readln (prop) ;
    : : : : : : end;
    : : : : : : end.
    : : : : : : [/code]
    : : : : : : :
    : : : : : :
    : : : : : :
    : : : : : You forgot the integer parameter in the call. Also you don't write the converted value to screen, so you don't see if it worked.
    : : : : :
    : : : : I've added a writeln after calling the procedure... is this what you meant by writing it to screen? but i don't understand which integer parameter i have forgotten or where to put it...?
    : : : : Sorry...
    : : : :
    : : : If you look at the procedure declaration (red in the code), you will see 2 parameters: hexstr and DecOut. In your procedure call (blue) there is only 1: user. This means that the code doesn't compile. And if it does, it does not know what to do with the DecOut parameter. The call code must include more code to tell the computer what to do with the DecOut value. In other words, you need to add a second parameter to the calling code, which is the variable, into which the result of the conversion needs to be stored.
    : : :
    : : Excellent working now!!!! Thank-you!!!
    :
    : Any chance you could tell me how come this procedure doesn't work when it's pretty much in the same format?
    :
    : [code]
    : uses
    : SysUtils;
    : var
    : user, prop : integer;
    : result : string;
    : procedure DecToHex (Const Number : integer; var Hexstr : string);
    :
    : const
    : HexValue : string [16] = '0123456789ABCDEF';
    :
    : var
    :
    : remainder : integer;
    :
    : begin
    : HexStr := '';
    : while Number > 0 do
    : begin
    : Remainder := Number mod 16;
    : HexStr := HexValue[Remainder + 1] + HexStr;
    : [red]Number := Number div 16 ;[/red]
    :
    :
    :
    : end;
    : end;
    : begin
    : writeln (' please enter number');
    : readln (user);
    : DecToHex (user, result);
    : writeln(result);
    : readln (prop);
    : end.
    : : [/code]
    : :
    :
    :
    According to the procedure declaration, the number parameter is constant. This means that it cannot be changed within the procedure. The red line, however, tries to change it. The simplest solution would be to make the parameter changable, but not variable.
    Explanation:
    constant parameter: cannot be changed inside the procedure/function. Indicated by placing "const" before the parameter name
    variable parameter: if changed, returns the change to the calling variable. Indicated by placing "var" before the parameter name
    changable parameter: can be changed, but will not return the change back to the calling variable. Indicated by placing nothing before the parameter name
Sign In or Register to comment.