Na FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmaNa FreeHostingu Endora běžà desĂtky tisĂc webĹŻ. PĹ™idejte se ještÄ› dnes!
VytvoĹ™it web zdarmatrid_spol = '__!!##$$--00112233445566778899'; trid_czlat2 = trid_spol+'aA µbBcCĽ¬dDÔŇeE‚Ř·fFgGhHiI·ÖjJkKlLmMnNoO˘ŕpPq'+ 'QrRýüsSçćtT¶›uUŁé…ŢvVxXyYěízZ§¦'; trid_czwin = trid_spol+'aAáÁbBcCčČdDďĎeEéÉěĚfFgGhHiIíÍjJkKlLmMnNoOóÓpPq'+ 'QrRřŘsSšŠtTťŤuUúÚůŮvVxXyYýÝzZžŽ'; type PsortTable=^TSortTable; TsortTable=array[0..255] of byte; var _sysTridiciTbl:TSortTable; sysTridiciTbl:PSortTable; Procedure PripravTridiciTabulku(t:string); var a,b:byte; begin b:=Length(t); if odd(b) then begin dec(b);delete(t,b,1);end; {delka retezce musi byt suda} for a:=1 to b do sysTridiciTbl^[byte(t[a])]:=(a-1) div 2; b:=b div 2; for a:=0 to 255 do begin if Pos(char(a),t)=0 then begin sysTridiciTbl^[a]:=b; inc(b); if b>255 then b:=b; end; end; end;
Function CmpChar(a,b:char):shortint; var c,d:byte; begin c:=sysTridiciTbl^[byte(a)]; d:=sysTridiciTbl^[byte(b)]; if c<d then CmpChar:=1 else if c>d then CmpChar:=-1 else CmpChar:=0; end; Function CmpString(var s1,s2:string):boolean; {kdyz je dle tridici tabulky s1<=s2 vrati true, jinak false} var a,b,c,d:byte; e:shortint; begin a:=Length(s1); b:=Length(s2); if a<b then c:=a else c:=b; {budeme porovnavat pocet znaku v kratsim retezci} for d:=1 to c do begin e:=CmpChar(s1[d],s2[d]); if e<>0 then Break; end; if e=0 then CmpString:=b>=a {kdyz i po projiti celeho useku jsou retezce ident.} else CmpString:=e>0; end;
const trid_spol = '__!!##$$--00112233445566778899'; trid__ch = #255#255; trid_czlat2 = trid_spol+'aA µbBcCĽ¬dDÔŇeE‚Ř·fFgGhH'+trid__ch+'iI·ÖjJkKlLm'+ 'MnNoO˘ŕpPqQrRýüsSçćtT¶›uUŁé…ŢvVxXyYěízZ§¦'; trid_czwin = trid_spol+'aAáÁbBcCčČdDďĎeEéÉěĚfFgGhH'+trid__ch+'iIíÍjJkKlLm'+ 'MnNoOóÓpPqQrRřŘsSšŠtTťŤuUúÚůŮvVxXyYýÝzZžŽ'; trid_rudos = trid_spol+' €·˘‚Łƒ¤„ˇ…ń𦆧‡¨ˆ©‰ŞŠ«‹¬¦Ť®ŽŻ¬ŕá‘â’ă“ä”ĺ•ć–'+ 'ç—č˜é™ęšë›ě¶íťîžďĽ'+ 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVxXyYzZ'; type PsortTable=^TSortTable; TsortTable=array[0..{!}256{!}] of byte;Spřežka CH bude vložena na místo
trid__ch. Do znakových sad, které CH neznají, prostě nebudeme trid__ch uvádět.trid__ch[1]Procedure PripravTridiciTabulku(t:string); var a,b:byte; begin b:=Length(t); if odd(b) then begin dec(b);delete(t,b,1);end; {delka retezce musi byt suda} for a:=1 to b do sysTridiciTbl^[byte(t[a])]:=(a-1) div 2; b:=b div 2; for a:=0 to 255 do begin if Pos(char(a),t)=0 then begin sysTridiciTbl^[a]:=b; inc(b); if b>255 then b:=b; end; end; if Pos(trid__ch,t)<>0 then sysTridiciTbl^[256]:=1 else sysTridiciTbl^[256]:=0; end; Function Nahrad_ch(var s:string;c:byte):boolean; var a:byte; z:boolean; begin z:=false; for a:=1 to c do if (s[a]='c') or (s[a]='C') then if (a<>c) and ((s[a+1]='h') or (s[a+1]='H')) then begin s[a]:=trid__ch[1]; z:=true; end; Nahrad_ch:=z; end; Function CmpString(var s1,s2:string):boolean; {kdyz je dle tridici tabulky s1<=s2 vrati true, jinak false} var a,b,c,d:byte; e:shortint; z1,z2:boolean; poms1:string; poms2:string; begin a:=Length(s1); b:=Length(s2); if a<b then c:=a else c:=b; {budeme porovnavat pocet znaku v kratsim retezci} if sysTridiciTbl^[256]=1 then begin poms1:=s1; poms2:=s2; z1:=Nahrad_ch(s1,c); z2:=Nahrad_ch(s2,c); end; for d:=1 to c do begin e:=CmpChar(s1[d],s2[d]); if e<>0 then Break; end; if e=0 then CmpString:=b>=a {kdyz i po projiti celeho useku jsou retezce ident.} else CmpString:=e>0; if sysTridiciTbl^[256]=1 then begin if Z1 then s1:=poms1; if Z2 then s2:=poms2; end; end;
Function CmpNum(var s1,s2:string;var d:byte;c:byte):shortint; {Bohuzel nelze snadno pouzit proceduru VAL - selhala by u cisel s vice rady nez pojme longint} var a,b:byte; t1,t2:string; w1,w2:word; i1,i2:integer; begin a:=d; repeat t1:=Copy(s1,a,4); t2:=Copy(s2,a,4); Val(t1,w1,i1); Val(t2,w2,i2); if (i1=0) and (i2=0) then begin if w1>w2 then begin CmpNum:=-1;Exit;end; if w1<w2 then begin CmpNum:=1;Exit;end; end; if i1=i2 then {zde uz vime, ze i1=i2<>0} begin t1:=Copy(s1,a,i1-1); t2:=Copy(s2,a,i2-1); Val(t1,w1,i1); Val(t2,w2,i2); if w1>w2 then begin CmpNum:=-1;Exit;end; if w1<w2 then begin CmpNum:=1;Exit;end; end; if i1<>i2 then begin if i1<>0 then begin t1:=Copy(s1,a,i1-1);Val(t1,w1,i1);end; if i2<>0 then begin t2:=Copy(s2,a,i2-1);Val(t2,w2,i2);end; if w1>w2 then begin CmpNum:=-1;Exit;end; if w1<w2 then begin CmpNum:=1;Exit;end; CmpNum:=0; if i1<i2 then d:=i1 else d:=i2; Exit; end; inc(a,4); until 1=2; end; Function CmpString(var s1,s2:string):boolean; {kdyz je dle tridici tabulky s1<=s2 vrati true, jinak false} var a,b,c,d:byte; e:shortint; z1,z2:boolean; poms1:string; poms2:string; begin a:=Length(s1); b:=Length(s2); if a<b then c:=a else c:=b; {budeme porovnavat pocet znaku v kratsim retezci} if sysTridiciTbl^[256]=1 then {zna tridici sada anomalii s CH?} begin poms1:=s1; poms2:=s2; z1:=Nahrad_ch(s1,c); {"C" v "CH" nahradi zastupnym znakem} z2:=Nahrad_ch(s2,c); {to same i v druhem retezci} end; d:=1; while d<=c do begin if (byte(s1[d])>=byte('0')) and (byte(s1[d])<=byte('9')) and (byte(s2[d])>=byte('0')) and (byte(s2[d])<=byte('9')) then e:=CmpNum(s1,s2,d,c) else e:=CmpChar(s1[d],s2[d]); if e<>0 then Break; inc(d); end; {while} if e=0 then CmpString:=b>=a {kdyz i po projiti celeho useku jsou retezce ident.} else CmpString:=e>0; if sysTridiciTbl^[256]=1 then begin if Z1 then s1:=poms1; {probehla zamena u S1? Tak to vrat zpatky} if Z2 then s2:=poms2; {to same v druem retezci} end; end;