Y¤z§A¤£¤Ó¥i¯à¥Î¨ìªºFree Pascalªºtechniques
FreePascal§@¬°·í«e¬y¦æªºPascal½s;¹¡A¤ä«ù¤F³\¦h¤¤»yªk¡A¥]¬A°w¹ïTP©MDelphiªº¤ä´©¡CFreePascal¦³¤@¨Ç¥\¯à¤@¯ë«Ü¤Ö¥Î¨ì¡A²{¦b¨Ó¬Ý¬Ý~
¥H¤U¤º®e«ÜBT¡A«Ü¤£ªeÃÉ¡C¤£¤Ö¥]§t¤F¤Q¤ÀÁபº½sµ{²ßºD¡Aªì¾ÇªÌ¶¹D¡AMM½ÐµLµø¦¹¤å~¡C¶È¨Ñ°Ñ¦Ò~
WARNING: the things below are really awful.
PG13 Level.
[¥H¤U¬Y¨Ç§Þ¥©©Î³\¥i¥H¤p´T«×´£°ªµ{§Ç®Ä²v¡C]
¤@¡Dªð¦^¦a§}¹Bºâ²Å
C/C++¤¤¦³Ó«Ü¦³¦Wªº¹Bºâ²Å&¥Î¨Óªð¦^Åܶqªº¦a§}¡C¦]¬°Pascal¹ï«ü°wªº¨Ì¿à¨S¦³C¨º¼ËÅãµÛ¡A§Ú¤@ª½¼g¤F´X¦~µ{§Ç³£¨S¦³²z¹L°ÊºA¦sÀx¡]Dynamic¡^¡Cª½¨ì¦³¤@¦¸¾Ç²ßpascal¤¤¹Bºâ²Åªº°õ¦æµ¥¯Å®É¬Ý¨ì¡Apascal¦³Ãþ¦üªº¹Bºâ²Å¡A@¡C
²³©Ò©Pª¾¡A¦pªG¥H¤U©w¸q
Type pLongint = ^longint;
Var s : pLongint;
³o¸Ìlongint«eªº¼Ð¸¹ªí¥Ü«ü°wÃþ«¬¡C¦Ó¦bµ{§Ç¤¤½Õ¥Îsªí¥Ü½Õ¥Î«ü°wsªº¦a§}¡As^¤~ªí¥Üs¹ï©óªº¼Æ¾Ú¡C
¨º¤\³oÓ@¦³¤°麽»ùÈ©O¡H
¤@¯ë¨SÔ£¯S¤jªº»ùÈ¡A³o´N¬O¦h¼Æ¤Hª¾¹D^¤£ª¾¹D@ªºì¦]~¦ÓNOIp¦Ò¹L@¡A©ó¬O´N¨Ó½Æ²ß¤@¤U¡C
@¥i¥H¨ú¬YÓÅܶq©ÎªÌ¹Lµ{ªº¦a§}¡C
¦p¡G
Var s : Longint;
¥Î@s¥i¥H¨ú¦^s¹ïÀ³Åܶqªº¤º¦s¦a§}~¡]·íµM¬Oµ{§Ç¦Û¤vªº½u©Ê¤º¦s¦a§}¡A¥Î32¦ì¥|¦r¸`µL²Å¸¹¾ã¼Æªí¥Ü¡C¡^
³oÓ¥\¯à¹ï©ó°ÊºA©MÀRºA¼Æ¾Úµ²ºc²V¥Î®É«D±`¦³¥Î¡C[?]
¤G¡DÃa²ßºD¡Abreak¡Aexit¡Ahalt¡Agotoªº«e¥@¤µ¥Í
Break¥Î©ó°h¥X·í«e´`Àô¡]¦^°é¡^¡Aexit¥Î©ó°h¥X¤lµ{¡]¦b¥Dµ{§Ç¤¤·|±j¨î°h¥Xµ{§Ç¡^¡Ahalt±j°hµ{§Ç¡C¦bFpascalªºfunction¤¤¡A¥i¥Hª½±µexit(¨ç¼Æªð¦^È)°h¥X¡Cª`·NÀq»{FP¤U¡A¦pªGª½±µhalt¥i¯à¾ÉP¿é¥X¤å¥óªº¤º®e¥á¥¢¡C½t¥Ñ¦b©ó¡A¼g¤J¨ìªF¦èÁÙ¦bbuffer¡C°£«D§A¸Õ³õflush¡A§_«h¤Á°Oclosefile¡C¡]³o¸Ì¤£¬O§Ú§âclose¿ù¼g¦¨closefile¡A§Ú¬O¾Ç²ßDelphiªº¡^
Break¡Aexit¡Ahalt¡Agoto²z½×¤W¥i¥H§¹¥þÁ×§K¡C¥L̪º¤£©M¿Óªº§C«Uªº¦s¦b¨Ï±oµ{§Ç¦³¦hÓ¤J¤f¥X¤f©M¹B§@¸ô½u¡A¨Ï±oµ²ºc¤Æ½sµ{¤Q¤À¤£©ö¡AµM¦Ó¡A¾A·íªº¹B¥Î¥i¥H¨Ï¥N½X§ó¥[¨q¦â¥iÀ\[¨Ó·½½Ð¨D]¡C
·í¦~¤@¹D²³æªº20¦æ¼Ðµ{ªº«öASCII´À´«¦r²ÅªºÃD¥Ø¡Aµ§ªÌ©Ò¨£¦³¤H¥Î¤F´XÓgoto¡Aexit¦b¤£¦Pªº¤lµ{§Ç¤¤¸õ¨Ó¸õ¥h¡]·sªºFPC2.0¤£¤ä«ù¡A¦b1.9¤~¤ä«ù¡^~¼g¤F100¦h¦æ~[¨Ó·½½Ð¨D]
³oÂI¤×¨äªì¾ÇªÌ¤Å¾Ç~
«D¦bProgramming³õ¤WºNª¦ºu¥´¦h¦~ªº¤H³t³tÂ÷¶}¡A§_«h~«á±§ó¥[Ws¡C
¤T¡DInline
¾Ú»¡¾Ç²ß¤FC¡C¦ý¬On°Q½×ªº¤£¬O¦bpascal¤¤´¡¤Jc©ÎªÌ·J½s¡C¡]³oÓ¯S©Ê¨S¦³¦Ò¹L~¡^
Inline¥i¥H¸ò¦bprocedure©Îfunctionªº©w¸q¦Z¡Aªí¥Ü´£¥Üinline½sĶ¡C
Procedure dfs ( I : Longint ); inline;
Begin
…
End;
³o·|¥O½s;¹¥Hinline´¡¤Jªº¤è¦¡½sͤlµ{¡C³o¹ï©óswap¨âÓÅܶq¤§Ãþªº¤p¹Lµ{«Ü¦³´£°ª®Ä²vªº·N¸q¡C¹ï©ó§ó¦hªº¤]³\¤]¥i¥H´£³t[¨Ó·½½Ð¨D]~§ÚªºUSACOªºbetsy´N¬O³o¼ËAªº¡A¥Î¨CÓ³£inline½sĶªº¤è¦¡±q1.085sªºTLE¨ì0.903sªºAC¡C
©Î³\¥i¥H¤p´T´£®Ä¡C
¥|¡AÃþCªº¥\¯à¡C
Åܶq¥i¥Hª½±µ¦b©w¸q®É¹w©wÈ¡C
/*C++ Code* Fragment/
Int a=72;
Int c,d;
/*C++ Code Fragment*/
PASCAL¤¤¥i¥H:
//Pascal Code Fragment
Var a : Longint = 72;
Var c,d : Longint ;
//Pascal Code Fragment
PASCAL¤¤¥´¶}½sͶ}Ãö¡]¦boptions¤¤©Î{$operator(s?) on}¡^¥i¥H¥´¶}¤U¦C¡G
A+=1; // a:=a+1
a-=1
a*=2
a/=2
Ãþ¦üCªºoperator¡C
¥i±¤ÁÙ¬O¤£¯à²³æÀH³B¥Ó½ÐÅܶq~¤]¤£¯à¥Î++¡C
¤¡A¨ç¼Æ«¸ü¡A©w¸q¾Þ§@²Å¡C
FP¤¤¤ä´©¨ç¼Æ«¸ü¡A¥u¦³¨ç¼ÆªºÅܼƤ£§¹¥þ¬Û¦P¡]¥]¬AÅܼÆÃþ«¬¡^¡C©Ò¥H
Procedure love(a:integer);
Procedure love(a:longint);
¬O§¹¥þ¤£¦Pªº¨âÓªF¦è~³o¤@ÂI±`±`¥O¤Hconfuse¡A¤×¨ä¬O³\¦h¤H¤£²zinteger©Mlongint¡I
³o¤]·N¨ýµÛ¨ç¼ÆForwardªº®ÉÔ¤]n¦³§¹¾ãªº°Ñ¼Æ¦Cªí¡A¤U±¼¶¼g®É¤]n¡I
Operator¥i¥H¦Û©w¸q¡C
¤»¡D¨ç¼Æ¥i¥Hªð¦^½ÆÂøÃþ«¬
¥i¥Hªð¦^¼Æ²Õ¡B°O¿ý¡B¶°¦Xµ¥¡C
§Ú¤£±ÀÂË¡A¦ý¶V¬O¤£±ÀÂ˪º¶Vn»¡¡A¦]¬°°÷µTº¾¡C
¤C¡D¥Î«ü°w¦^·¹¡I¡I
·Q¶H·j¯Á®É§A»Ýn¹M¾ú¤@´ÊDFS¾ð¡AµM«á¿é¥X²Å¦X³W©wªº¸`ÂI¨ì®Úªº§Ç¦C¡C
ÅãµMDFS¡CµM¦Ó¹Lµ{¤£¯àª½±µÅª¤J¤W¼h¹Lµ{ªºÅܶq¡A©Ò¥Hªð¦^¥X³B§Ç¦C¬OÓ°ÝÃD¡C¤]¤£¯àª½±µexit¡C¦]¬°¦pªG¦³¦hÓ¸`ÂIªº¸ô®|n¿é¥X¡A§An«·s»¼Âk¶i¥hµM«á¬Æ¦Ün§P«¿é¥X«ç¤\¼Ë~
«Ü²³æ¡A§â¤@Ópre«ü°w§@¬°°Ñ¼Æ¶Çµ¹¤lµ{¡A¨Ï¥¦±o¨ì¤@±ø±q®Ú¨ì·í«e¸`ÂIªº¸ô®|ºc¦¨ªºÃì¿ö¡]linked list¡^¡C
¤K¡D¦ì¹Bºâ
Xor, or, and, shl, shr, xor, not…
¤j®an¦Y¹¡¡AG¤~¯à°µ¦n¦ì¹Bºâ¡C
¤E¡B«ü°w
¤£¬O«ÜµTº¾¡C
New, dispose, ^, getmem, freemem, nil, GPE¦Ó¤w¡C
¤Q¡Bsizeof
«Ü²³æ¡A¤£¹L¬O§_°ÊºA¼Æ¾Úµ²ºc¤S¦³¤£¦P¡C
¤Q¤@¡C°ÊºA¼Æ²Õ~
·í·í·í·í~ ¡]±B§¶i¦æ¦±¡^
²×©ó»¡¹D³o¸Ì~§Ú¤@ª½¥H¬°°ÊºA¼Æ²Õn¦Û¤v¥Î«ü°w¥h°µ~
¤µ¤Ñ¤Wfpcªºcommunity¤~§Ë²M·¡~
Example¡G
//PASCAL
//by phoeagon
//for tripley
Var
C : array of array of longint;
Begin
Setlength(c,100); //c is now an array [0..99], each element is a one-dimension
//dynamic array
Setlength(c[10],100);//c[10]is now an array[0..9]of longint;~~~
….
End.
«Ü¦n«Üws~
¤Q¤G¡Bansistring¡Bint64.
¤U±¶V来¶V恶¤ß~
§Úª¾¹D会¦³¤H¤£¬Û«H¤W¤åªº§i¥Ü闯进来¡C
§ÚÁÙ¬O¦A»¡¤@¹M~¥H¤U¤º®e«ÜBT¡A«Ü¤£ªeÃÉ¡C¤£¤Ö¥]§t¤F¤Q¤ÀÁபº½sµ{²ßºD¡Aªì¾ÇªÌ¶¹D¡AMM½ÐµLµø¦¹¤å~¡C¶È¨Ñ°Ñ¦Ò~ ¤Á°O¤Á°O~MM¤£¯à¾Çªº¦p¦¹µTº¾~§_«h´Á±æ§äMMªºOIers¨Ó§äµ§ªÌªº³Â·Ð´N¤£±o¤F¤F~
¤Q¤T¡BÅܼÆÁÙ¬O±`¶q¡H
Constùتº¥s±`¶q¡Avarùتº¥sÅܼÆ~¼o¸Ü~
¦ý¬O¡A¦b¤lµ{¶Ç»¼°Ñ¼Æ®É¡A¦pªG¤£»Ýn§ïÅÜÅܼưѼƪºÈ¡A¤S§Æ±æ¤£n«þ¨©Åܶq¶Ç»¼¡A¥i¥H¥[¤Wconst¼ÐÃÑ¡A´N¹³var¤@¼Ë¥[¡A¥i¥H¥[§Ö³t«×¡]¤ñvar§Ö¡A¤£¹L³o¨ú¨M¤_½s;¹~¡^
§ó¥[äú¤ßªº¬O¡A±`¶q¬O¥i¥HÅܪº~¡I¡I¡I¥un¥´¶}F***Pascal©ÎDelphi©Îlazªºoptions¤¤compilerªº¤@¶µ¡A¥´¶}“Assignable typed constants”´N¥i¥H¤F~©ÎªÌ¥[¤W½sĶ°Ñ¼Æ$J+¡C
¬°¦ó±`¶q¬O¥iÅܪº?³o¬O爲¤F¦V¤UÝ®e16-bitªºpascal©Mdelphi~
¤Q¥|¡BÁÙ¬OÂ÷¤£¶}C¡I
§Úª¾¹D¦³¤Hn§ì¨g¤F¡A³o¸ÌÁÙ¬On»¡C~³o¸Ì¤£¸ò¤W±©M¦b¤@°_¬O¦]¬°¡A³o¸Ì¤Óäú¤ß¤F~
¦bC¤¤Åܶq¨ä¹ê¬O¤£½×Ãþ«¬ªº¡A§A¥i¥H§â¥¬º¸«¬½áȵ¹¾ã¼Æ¡A¤]¥i¥H§âchar½áȵ¹¥¬º¸«¬~Á`¤§¥u¬O¤º¦s¤¤¨ºÓ¾÷¾¹½Xªº«þ¨©~¡]Ãþ¦ü»PCPU¤¤ªº±H¦s¾¹¡A¥u¬O¦W¦r¤£¦P¡^
¦ý¬O°Q¹½ªºPascal©~µM¤£Åý~
©ó¬O¡A¸g¹L¤£¾Ó§V¤O¡AF***PASCAL¤¤¡A¥H¤ÎDelphi¤¤¡A¦³¤F¤@ºØ·B¬üC¤¤Åܶq¡Avariant¡CVariant¯u¬O¦n¥S§Ì¡A¸õ¹L©Ò¦³ªºÃþ«¬ÀË´ú~¬Û·í¤_¸U¯à§Î¡]¤£§¹¥þ·Ç½T~¡^¡C
//by phoeagon (word ¦Ñ¬O§âp¤j¼g¡A«Ü¤£¤j¤è¬üÆ[±oÅé~)
//for tripley
var
i:longint;
x:variant;
j:char;
q:boolean;
begin
x:=q; i:=x;
x:=j; q:=x;
x:=i; j:=x;
end.
½Ðª`·N¨CÓ¤£¦PÃþ«¬ªºÅܶq¬O¦p¦óÅܤƪº~¦ý¬O¥¦«ÜºC~
¤Q¤¡BÁÙ¬O¼Æ¾ÚÃþ«¬
¼Æ¾ÚÃþ«¬±j¨îÂà´«¡A¤S¥s¦r²Å¬M®g¡C
¦plongint(‘N’)¥i¥H±j¨î§âcharÅܦ¨longint~Á`¤§¸ÕµÛ§aÃþ«¬¦WºÙÅܦ¨³æ¤¸¨ç¼Æ~
ÁÙ¦³³\¦h¨ç¼Æ¡C
¨ä¤¤¡A³Ìn»¡ªº¬O¡A¡A¡A¡Around¡C
Round~«Ü³Â·Ð~¤@¨Çª©¥»¨½¬O¥|±Ë¤¤J¡A¤@¨Ç¬O»È¦æ®a±Ë¤J~¦]¬°round¨Ï¥Î¤FCPUªºMPU¡A¼Æ¾Ç¨ó³B²z¾¹¡A³o¨Ç³B²z¾¹¡A¦³ªº¾÷¾¹¦³¦³ªº¨S¦³¡]¥Dn¬O¦Ñ·Ý¾÷¨S¦³¡^¡A¦³ªº¬O»È¦æ®a±Ë¤Jªkµ¥µ¥~«Ü¥i¦R¤F~
ÅܶqÁÙ¥i¥H¥Îhi¨ú¥X°ª¦r¸`ªº¤º®e¡Alo¨ú¥X§C¦r¸`ªº¤º®e¡A¥Îswap§@¥æ´«°ª§C¦r¸`¡A¥Îhigh¨ú¥XÅܶq¤W¡Alow¨ú¥XÅܶq¤U¡I¡I¡I
¼Æ¾ÚÃþ«¬ÁÙ¦³¤å¥ó~¶°¦X¡B°O¿ý¡B¼Æ²Õ¡B°ÊºA«ü°w¡BªTÁ|¡B¤l¬É¡C¨ä¤¤Åܶq¬Û®e©ÊªºÀË´ú¤]¬O«Ü©_©Çªº~
(to be continued)
|