Ĺadny brzuch
Witajcie!!
jestem tu nowy :) ale chcialbym sie zapytac jak mozna (w delphi) wykonac takie dzialanie
80A3400-80000000/4
otrzymuje wynik :lol: i konwertuje go z hex do dec B)
chodzi o progtam ktory by mial np. 2 edity i po wpisaniu w jeden z nich pijawia sie przeliczona wersja w drugim edicie ( i wice wersa)
pozdrawiam piotremis
Użytkownik piotremis edytował ten post 24 czerwiec 2005, 17:01
Mam nadzieję, że nie liczysz, że ktoś napisze całkowicie gotowy program :).
Zamiana dziesiętnego na HEX (wynik jest jako łańcuch więc możesz od razu dać do Edita):
function KonwertujNaXEX(Dec: Cardinal): String; var R: Byte; S: String; begin S := ''; repeat R := Dec mod 16; Dec := Dec div 16; case R of 0..9: Insert(IntToStr(R), S, 0); 10..15: Insert(Chr(55 + R), S, 0); end; until Dec = 0; Result := S; end;
Wywołujez to np. tak:
edit1.text:=Konwertuj(1000); //zapis liczby 1000 w systemie szesnastkowym
A tu masz z szesnastkowego na dziesiętny:
function KonwertujNaDec(Hex: String): string; var T, n, Suma: Integer; begin Suma:=0; for n:=1 to Length(Hex) do begin T:=0; case Hex[n] of '0'..'9': T:=StrToInt(Hex[n]); 'A'..'F': T:=Ord(Hex[n])-55; end; Suma:=Suma+(T*Round(Power(16,Length(Hex)-n))); end; Result:=Inttostr(Suma); end;
wywołujesz tak:
edit1.Text := KonwertujNaDec('45A8BC');
Witam
Po co pisać własne funkcje do konwersji skoro są gotowe?
KonwertujNaHex odpowiada IntToHex w drugim parametrze trzeba podać ilość miejsc (najczęsciej 8)
KonwertujNaDec odowiada StrToInt z tym, że jako parametr musisz podać '$' + string_do_konwersji
Pozdrawiam
Użytkownik kAzek edytował ten post 24 czerwiec 2005, 20:03
Witam
Po co pisać własne funkcje do konwersji skoro są gotowe?
Witam
chocby po to by sie czegos nauczyc... Takie funkcje to juz prawie jak komponenty :]
Witam
No chyba po to :)
przepraszam z sie nei idzywalem ale nie bylo mnie w chacie. Dzieki za procedurki mysle ze cos z tym wykombinuje :)
ps. mam problem
var nahex:string; wynik:integer; dzialanie:string; begin nahex:=inttohex(strtoint('$'+edit1.Text),8); dzialanie:= nahex-inttohex(80000000,8)/inttohex(4,8) X end;
co mam wstwaic zamiast 'x' zeby to odielo i podzielilo?? bo ';' nie idzie :( pokazuje ze 'Operator not applicable to this operand' :(
Użytkownik piotremis edytował ten post 25 czerwiec 2005, 17:35
dzialanie:= nahex-inttohex(80000000,8)/inttohex(4,8); end;
cos niebardzo :( bo niemozna wpisywac liter :( same cyfry
Ale jak wpisywać? Niezbyt rozumiem problem. Gdzie je chcesz wpisywać? Przecież to jest wynik obliczeń tu nie ma nic do wspisywania. Wynik jest w systemie dziesiętnym, a jak chcesz w szesnastkowym to pierwsze IntToStr zamien na IntToHex oraz przed ostatnim nawiasem daj:
,8
Witam
Może o to chodzi??
Deklaracje zmiennych:
var wynik: integer; cyfra1, cyfra2, cyfra3: integer;
I prosty kodzik:
cyfra1:= StrToInt('$' + Edit1.Text); //Zaluzmy ze podajemy hexdecymalnie cyfra2:= StrToInt('$' + Edit2.Text); //Zaluzmy ze podajemy hexdecymalnie cyfra3:= StrToInt(Edit3.Text); //Zaluzmy ze podajemy dziesietnie wynik := cyfra1 - Round(cyfra2 / cyfra3); //to musi byc zaokraglone jezeli //zmienne typu integer (chyba że dzielisz bez reszy to cyfra2 div iloraz) label1.Caption:= IntToStr(wynik); //wynik dziesiętnie label2.Caption:= IntToHex(wynik, 8); //wynik szestnastkowo
Można całe obliczenie umieścić w jednej linijce, ale wydaje mi się, że tak jest bardziej przejrzyste
Pozdrawiam
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
jestem tu nowy :) ale chcialbym sie zapytac jak mozna (w delphi) wykonac takie dzialanie
80A3400-80000000/4
otrzymuje wynik :lol: i konwertuje go z hex do dec B)
chodzi o progtam ktory by mial np. 2 edity i po wpisaniu w jeden z nich pijawia sie przeliczona wersja w drugim edicie ( i wice wersa)
pozdrawiam piotremis
Użytkownik piotremis edytował ten post 24 czerwiec 2005, 17:01
Mam nadzieję, że nie liczysz, że ktoś napisze całkowicie gotowy program :).
Zamiana dziesiętnego na HEX (wynik jest jako łańcuch więc możesz od razu dać do Edita):
function KonwertujNaXEX(Dec: Cardinal): String; var R: Byte; S: String; begin S := ''; repeat R := Dec mod 16; Dec := Dec div 16; case R of 0..9: Insert(IntToStr(R), S, 0); 10..15: Insert(Chr(55 + R), S, 0); end; until Dec = 0; Result := S; end;
Wywołujez to np. tak:
edit1.text:=Konwertuj(1000); //zapis liczby 1000 w systemie szesnastkowym
A tu masz z szesnastkowego na dziesiętny:
function KonwertujNaDec(Hex: String): string; var T, n, Suma: Integer; begin Suma:=0; for n:=1 to Length(Hex) do begin T:=0; case Hex[n] of '0'..'9': T:=StrToInt(Hex[n]); 'A'..'F': T:=Ord(Hex[n])-55; end; Suma:=Suma+(T*Round(Power(16,Length(Hex)-n))); end; Result:=Inttostr(Suma); end;
wywołujesz tak:
edit1.Text := KonwertujNaDec('45A8BC');
Witam
Po co pisać własne funkcje do konwersji skoro są gotowe?
KonwertujNaHex odpowiada IntToHex w drugim parametrze trzeba podać ilość miejsc (najczęsciej 8)
KonwertujNaDec odowiada StrToInt z tym, że jako parametr musisz podać '$' + string_do_konwersji
Pozdrawiam
Użytkownik kAzek edytował ten post 24 czerwiec 2005, 20:03
Witam
Po co pisać własne funkcje do konwersji skoro są gotowe?

Witam
chocby po to by sie czegos nauczyc... Takie funkcje to juz prawie jak komponenty :]

Witam
No chyba po to :)

przepraszam z sie nei idzywalem ale nie bylo mnie w chacie. Dzieki za procedurki mysle ze cos z tym wykombinuje :)
ps. mam problem
var nahex:string; wynik:integer; dzialanie:string; begin nahex:=inttohex(strtoint('$'+edit1.Text),8); dzialanie:= nahex-inttohex(80000000,8)/inttohex(4,8) X end;
co mam wstwaic zamiast 'x' zeby to odielo i podzielilo?? bo ';' nie idzie :( pokazuje ze 'Operator not applicable to this operand' :(
Użytkownik piotremis edytował ten post 25 czerwiec 2005, 17:35
dzialanie:= nahex-inttohex(80000000,8)/inttohex(4,8); end;

cos niebardzo :( bo niemozna wpisywac liter :( same cyfry
Ale jak wpisywać? Niezbyt rozumiem problem. Gdzie je chcesz wpisywać? Przecież to jest wynik obliczeń tu nie ma nic do wspisywania. Wynik jest w systemie dziesiętnym, a jak chcesz w szesnastkowym to pierwsze IntToStr zamien na IntToHex oraz przed ostatnim nawiasem daj:
,8
Witam
Może o to chodzi??
Deklaracje zmiennych:
var wynik: integer; cyfra1, cyfra2, cyfra3: integer;
I prosty kodzik:
cyfra1:= StrToInt('$' + Edit1.Text); //Zaluzmy ze podajemy hexdecymalnie cyfra2:= StrToInt('$' + Edit2.Text); //Zaluzmy ze podajemy hexdecymalnie cyfra3:= StrToInt(Edit3.Text); //Zaluzmy ze podajemy dziesietnie wynik := cyfra1 - Round(cyfra2 / cyfra3); //to musi byc zaokraglone jezeli //zmienne typu integer (chyba że dzielisz bez reszy to cyfra2 div iloraz) label1.Caption:= IntToStr(wynik); //wynik dziesiętnie label2.Caption:= IntToHex(wynik, 8); //wynik szestnastkowo
Można całe obliczenie umieścić w jednej linijce, ale wydaje mi się, że tak jest bardziej przejrzyste
Pozdrawiam