Last active
May 27, 2016 18:09
-
-
Save Vesely/b913e8e3cbf6f8f1c6a2 to your computer and use it in GitHub Desktop.
Delphi, užitečné funkce: Převody číselných soustav, prvočíslo, odstranění přebytečných mezer, faktoriál...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//********* | |
// Developed by David Veselý | |
// http://davidvesely.cz/ | |
//********* | |
function cifernySoucet(cislo:integer):integer; | |
var cifra, soucet:integer; | |
begin | |
//Pokud je číslo záporne, dej převeď ho na kladné | |
if cislo < 0 then | |
cislo:=-cislo; | |
soucet := 0;//vynulování součtu | |
//Pokud je cislo 0, ukonči cyklus | |
repeat | |
cifra := cislo mod 10; // posledni cifra cisla | |
soucet := soucet + cifra; //přičti cifru k součtu | |
cislo := cislo div 10; // odstraní poslední cifru cisla | |
until cislo = 0; | |
Result := soucet; | |
end; | |
//Příklad použití: showMessage(IntToStr(cifernySoucet(StrToInt(Edit1.Text)))); | |
function jePrvocislo(cislo:integer):boolean; | |
var cifra, i:integer; | |
begin | |
//Pokud je číslo záporne, dej převeï ho na kladné | |
if cislo < 0 then | |
cislo:=-cislo; | |
if cislo = 1 then //jednička není prvočíslo | |
begin | |
Result := false; | |
exit; | |
end; | |
i:=2; | |
while i<(sqrt(cislo)) do | |
begin | |
if (cislo mod i) = 0 then //Pokud jde vydělit, není to prvočíslo | |
begin | |
Result := false; | |
exit; | |
end; | |
inc(i); | |
end; | |
//je to prvocislo | |
Result := true; | |
end; | |
//Příklad použití | |
// if jePrvocislo(StrToInt(Edit1.Text)) then | |
// showMessage('Je to prvočíslo') | |
// else | |
// showMessage('Není to prvočíslo'); | |
function decToBin(dec:integer):integer; | |
var vysledek, d:integer; | |
begin | |
vysledek:=0; | |
d:=1; | |
while dec<>0 do begin | |
vysledek := vysledek + (dec mod 2 * d); //(zbytek po dělení * ciferná pozice) + výsledek | |
dec := dec div 2; //podělí | |
d := d*10; //"určuje cifernou pozici" | |
end; | |
Result:=vysledek; | |
end; | |
//showMessage(IntToStr(decToBin(StrToInt(Edit1.Text)))); | |
function decToBin2(dec:integer):integer; | |
var i, polovina, zbytek:integer; | |
ResultStr:string; | |
begin | |
//**** pomocí stringu **** | |
ResultStr := ''; | |
while dec<>0 do | |
begin | |
zbytek := dec mod 2; | |
if (zbytek <> 0) then | |
ResultStr := '1' + ResultStr | |
else | |
ResultStr := '0' + ResultStr; | |
dec := dec div 2; | |
end; | |
Result := StrToInt(ResultStr); | |
end; | |
//showMessage(IntToStr(decToBin2(StrToInt(Edit1.Text)))); | |
function binToDec(bin:integer):integer; | |
var i, vysledek:integer; | |
begin | |
i:=0; | |
vysledek:=0; | |
while bin<>0 do | |
begin | |
if (bin mod 10)=1 then //Je poslední znak jednička? | |
vysledek := vysledek + trunc(Power(2,i)); | |
bin:= bin div 10; //umaž poslední znak | |
inc(i); | |
end; | |
Result:=vysledek; | |
end; | |
//showMessage(IntToStr(binToDec(StrToInt(Edit1.Text)))); | |
function decToHex(dec:integer):string; | |
var znak:char; | |
vysledek:string; | |
begin | |
vysledek := ''; | |
while dec <> 0 do | |
begin | |
znak := ' '; | |
case (dec mod 16) of //pokud číslo podělím 16, je zbytek.. | |
10: znak := 'A'; | |
11: znak := 'B'; | |
12: znak := 'C'; | |
13: znak := 'D'; | |
14: znak := 'E'; | |
15: znak := 'F'; | |
end; | |
if znak = ' ' then | |
vysledek := intToStr(dec mod 16) + vysledek //Pokud není zbytek (10 až 15) přičti číslo | |
else | |
vysledek := znak + vysledek; | |
dec := dec div 16; //Poděl číslo šestnácti | |
end; | |
Result := vysledek; | |
end; | |
//showMessage(decToHex(StrToInt(Edit1.Text))); | |
function binToHex(bin:integer):string; | |
//matice (binární číslo X hexadecimální číslo) (const == proměnná která nelze přepsat/upravit) | |
const binArray: array[0..15, 0..1] of string = ( | |
('0000', '0'), | |
('0001', '1'), | |
('0010', '2'), | |
('0011', '3'), | |
('0100', '4'), | |
('0101', '5'), | |
('0110', '6'), | |
('0111', '7'), | |
('1000', '8'), | |
('1001', '9'), | |
('1010', 'A'), | |
('1011', 'B'), | |
('1100', 'C'), | |
('1101', 'D'), | |
('1110', 'E'), | |
('1111', 'F') | |
); | |
var binStr, bin4pack, vysledek:string; | |
i:integer; | |
begin | |
vysledek := ''; | |
binStr := IntToStr(bin); | |
//Získáme zbytek po dělení (délka binárního čísla / 4) a doplníme nuly | |
case length(binStr) mod 4 of | |
1: binStr := '000'+BinStr; | |
2: binStr := '00'+BinStr; | |
3: binStr := '0'+BinStr; | |
end; | |
while (length(binStr)>0) do | |
begin | |
bin4pack := copy(binStr, length(binStr)-3, 4); //zkopírujeme poslední 4 znaky | |
Delete(BinStr, length(binStr)-3, 4); //odstraníme poslední 4 znaky | |
for i:=1 to 16 do | |
begin | |
if bin4pack=binArray[i-1, 0] then | |
vysledek := binArray[i-1, 1]+vysledek; //Vezmeme z matice příslušný hexadecimální znak a přidáme k výsledku | |
end; | |
end; | |
Result := vysledek; | |
end; | |
//showMessage(binToHex(StrToInt(Edit1.Text))); | |
function hexToBin(hex:string):integer; | |
//Pole binárních čísel | |
const bins: array[0..15] of string = ( | |
'0000', '0001','0010','0011','0100','0101','0110', '0111', | |
'1000', '1001','1010','1011','1100', '1101','1110','1111' | |
); | |
var i:integer; | |
vysledek:string; | |
begin | |
vysledek := ''; | |
for i:=length(hex) downto 1 do | |
vysledek := bins[strToInt('$'+hex[i])]+vysledek; | |
Result := StrToInt(vysledek); | |
{ | |
Vysvětlivka pro: "('$'+hex[i])" | |
- Převede písmena z hexadecimálního čísla na binární čísla | |
- Např.: A => 10, | |
7B => 711, | |
3F6 => 3156 | |
} | |
end; | |
//showMessage(IntToStr(hexToBin(Edit1.Text))); | |
function hexToDec(hex:string):integer; | |
begin | |
Result := StrToInt64('$'+hex); | |
end; | |
//showMessage(IntToStr(hexToDec(Edit1.Text))); | |
function odstranPrebytecneMezery(retezec:string):string; | |
var poziceDvojmezery:integer; | |
begin | |
poziceDvojmezery := pos(' ', retezec); | |
while poziceDvojmezery <> 0 do | |
begin | |
Delete(retezec, poziceDvojmezery, 1); | |
poziceDvojmezery := pos(' ', retezec); | |
end; | |
Result := retezec; | |
end; | |
//showMessage(odstranPrebytecneMezery(Edit1.Text)); | |
function faktorial(cislo:integer):integer; | |
var vysledek, i:integer; | |
begin | |
//Pokud je číslo záporné vypiš chybu | |
if cislo < 0 then | |
raise Exception.Create('Faktoriál nelze udělat ze záporného čísla!'); | |
vysledek := 1; | |
for i:=1 to cislo do | |
vysledek := vysledek * i; | |
Result := vysledek; | |
end; | |
//showMessage(IntToStr(faktorial(StrToInt(Edit1.Text)))); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment