--- /dev/null
+\r
+\r
+Descripcion de los Archivos:\r
+=========== == === ========\r
+\r
+Programa Principal del TP.\r
+-------- --------- --- --\r
+ PROGRAMA.EXE Ejecutable.\r
+ PROGRAMA.PAS Codigo fuente.\r
+\r
+Programa para generar archivos de comando.\r
+-------- ---- ------- -------- -- -------\r
+ ARCH_CMD.EXE Ejecutable.\r
+ ARCH_CMD.PAS Codigo fuente.\r
+\r
+Archivos de Prueba.\r
+-------- -- ------\r
+ TEST.CMD Archivo de Comandos de Prueba.\r
+ TEST.TXT Resultados de la ejecución de TEST.CMD\r
+\r
+Unidad General para la TDA TABLA.\r
+------ ------- ---- -- ---------\r
+ GRAL.PAS Codigo fuente.\r
+ GRAL.TPU Unidad compilada.\r
+\r
+Unidad con la TDA de Lista Doblemente Enlazada.\r
+------ --- -- --- -- ----- ---------- --------\r
+ LDC.PAS Codigo fuente.\r
+ LDC.TPU Unidad compilada.\r
+\r
+Unidad con la TDA de Pila implementada con Cursores.\r
+------ --- -- --- -- ---- ------------ --- --------\r
+ PILA_C.PAS Codigo fuente.\r
+ PILA_C.TPU Unidad compilada.\r
+\r
+Unidad con Funciones, Procedimientos y Tipos Generales para trabajar con archivos de comandos.\r
+------ --- --------- -------------- - ----- --------- ---- -------- --- -------- -- --------\r
+ PROG_GRL.PAS Codigo fuente.\r
+ PROG_GRL.TPU Unidad compilada.\r
+\r
+Unidad con la TDA TABLA.\r
+------ --- -- --- -----\r
+ TABLA.PAS Codigo fuente.\r
+ TABLA.TPU Unidad compilada.
\ No newline at end of file
--- /dev/null
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang3082\deflangfe3082{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}\r
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f5\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica;}\r
+{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f28\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Arial Rounded MT Bold;}\r
+{\f30\froman\fcharset238\fprq2 Times New Roman CE;}{\f31\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f33\froman\fcharset161\fprq2 Times New Roman Greek;}{\f34\froman\fcharset162\fprq2 Times New Roman Tur;}\r
+{\f35\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f36\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f37\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f38\fswiss\fcharset238\fprq2 Arial CE;}{\f39\fswiss\fcharset204\fprq2 Arial Cyr;}\r
+{\f41\fswiss\fcharset161\fprq2 Arial Greek;}{\f42\fswiss\fcharset162\fprq2 Arial Tur;}{\f43\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f44\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f45\fswiss\fcharset186\fprq2 Arial Baltic;}\r
+{\f46\fmodern\fcharset238\fprq1 Courier New CE;}{\f47\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f49\fmodern\fcharset161\fprq1 Courier New Greek;}{\f50\fmodern\fcharset162\fprq1 Courier New Tur;}{\f51\fmodern\fcharset177\fprq1 Courier New (Hebrew);}\r
+{\f52\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f53\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\r
+\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red255\green255\blue255;\r
+\red229\green229\blue229;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\r
+\s15\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext15 Standard;}{\s16\ql \li0\ri0\sb240\sa120\keepn\nowidctlpar\faauto\rin0\lin0\itap0 \r
+\f5\fs28\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext17 Heading;}{\s17\ql \li0\ri0\sa120\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext17 Text body;}{\r
+\s18\qc \li0\ri0\sa120\keepn\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs28\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext15 Heading 1;}{\s19\qc \li0\ri0\sa60\keepn\nowidctlpar\faauto\rin0\lin0\itap0 \r
+\b\i\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext15 Heading 2;}{\s20\qc \li0\ri0\keepn\nowidctlpar\faauto\rin0\lin0\itap0 \f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext15 Heading 3;}{\r
+\s21\qj \fi720\li0\ri0\keepn\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs22\ul\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext15 Heading 4;}{\s22\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \r
+\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext22 WW-Texto comentario;}{\s23\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \r
+\sbasedon15 \snext23 Header;}{\s24\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext24 Footer;}{\r
+\s25\qj \li0\ri0\sb240\keep\nowidctlpar\faauto\rin0\lin0\itap0 \b\f28\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext26 Ejercicio;}{\s26\ql \fi1\li720\ri0\sb120\nowidctlpar\faauto\rin0\lin720\itap0 \r
+\i\f28\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext26 Explicaci\'f3n Ejercicio;}{\s27\ql \fi-283\li1003\ri0\sb120\nowidctlpar\faauto\rin0\lin1003\itap0 \f28\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \r
+\sbasedon26 \snext27 Item Ejercicio;}{\s28\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext28 Hanging indent;}{\s29\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \r
+\i\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon15 \snext29 WW-Sangr\'eda 2 de t. independiente;}{\s30\qj \fi1\li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 \f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \r
+\sbasedon15 \snext30 WW-Sangr\'eda 3 de t. independiente;}{\s31\ql \li0\ri0\sa120\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon17 \snext31 Table Contents;}{\r
+\s32\qc \li0\ri0\sa120\nowidctlpar\faauto\rin0\lin0\itap0 \b\i\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon31 \snext32 Table Heading;}{\*\cs33 \additive WW-Fuente de p\'e1rrafo predeter.;}{\*\cs34 \additive \fs16 \sbasedon33 \r
+WW-Ref. de comentario;}{\*\cs35 \additive \sbasedon33 Page Number;}{\*\cs36 \additive \scaps\f2\fs20 \sbasedon33 Codigo Pascal;}{\*\cs37 \additive \f14 WW8Num3z0;}{\*\cs38 \additive \f28 WW8Num4z0;}{\*\cs39 \additive \f28 WW8Num5z0;}{\*\cs40 \additive \r
+\f28 WW8Num6z0;}{\*\cs41 \additive \f28 WW8Num7z0;}{\*\cs42 \additive \f28 WW8Num8z0;}{\*\cs43 \additive \f14 WW8Num9z0;}{\*\cs44 \additive \f14 WW8Num10z0;}{\*\cs45 \additive \f28 WW8Num11z0;}{\*\cs46 \additive \f14 WW8Num13z0;}{\*\cs47 \additive \f28 \r
+WW8Num14z0;}{\*\cs48 \additive \f14 WW8Num15z0;}{\*\cs49 \additive \f3 WW8Num16z0;}{\*\cs50 \additive \f2 WW8Num16z1;}{\*\cs51 \additive \f14 WW8Num16z2;}{\*\cs52 \additive \f3 WW8Num16z3;}{\*\cs53 \additive \f2 WW8Num16z4;}{\*\cs54 \additive \f14 \r
+WW8Num16z5;}{\*\cs55 \additive \f3 WW8Num16z6;}{\*\cs56 \additive \f2 WW8Num16z7;}{\*\cs57 \additive \f14 WW8Num16z8;}{\*\cs58 \additive \f3 WW8Num17z0;}{\*\cs59 \additive \f3 WW8Num18z0;}{\*\cs60 \additive \f3 WW8Num19z0;}{\*\cs61 \additive \f3 \r
+WW8Num20z0;}{\*\cs62 \additive \f28 WW8Num21z0;}{\*\cs63 \additive \f14 WW8Num23z0;}{\*\cs64 \additive \f3 WW8Num24z0;}{\*\cs65 \additive \f3 WW8Num26z0;}{\*\cs66 \additive \f28 WW8Num27z0;}{\*\cs67 \additive \f3 WW8NumSt2z0;}{\*\cs68 \additive \f5 \r
+WW8NumSt26z0;}{\s69\ql \li0\ri0\widctlpar\tqc\tx4419\tqr\tx8838\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext69 header;}{\s70\ql \li0\ri0\widctlpar\r
+\tqc\tx4419\tqr\tx8838\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext70 footer;}}{\*\listtable{\list\listtemplateid1{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\r
+\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-1080\li1800 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\r
+\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\r
+\'02\'02.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-180\li2520 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\chbrdr\r
+\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li3240 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \r
+\chshdng0\chcfpat1\chcbpat1 \fi-360\li3960 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \r
+\fi-180\li4680 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li5400 }{\listlevel\levelnfc4\r
+\levelnfcn4\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li6120 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\r
+\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-180\li6840 }{\listname WW8Num22;}\listid1}{\list\listtemplateid2{\listlevel\levelnfc23\levelnfcn23\r
+\leveljc0\leveljcn0\levelfollow2\levelstartat0\levelspace0\levelindent0{\leveltext\'01\'b7;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\r
+\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0\r
+{\leveltext\'01\'a7;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'b7;}{\levelnumbers;}\f3\r
+\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \r
+\chshdng0\chcfpat1\chcbpat1 \fi-360\li3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'a7;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \r
+\fi-360\li4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'b7;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li5400 }{\listlevel\levelnfc23\r
+\levelnfcn23\leveljc0\leveljcn0\levelfollow2\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow2\r
+\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'a7;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 \fi-360\li6840 }{\listname WW8Num16;}\listid2}}{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}\r
+{\listoverride\listid2\listoverridecount0\ls2}}{\info{\title 1\'ba TP 1\'ba 2000}{\author RUTH GHIZZARDI}{\keywords 7541 algo 2cuat2000 1par1TP}{\operator Leandro Lucarella}{\creatim\yr2000\mo3\dy28\hr18\min8}{\revtim\yr2000\mo4\dy25\hr11\min45}\r
+{\printim\yr2000\mo4\dy12\hr15\min59}{\version2}{\edmins54}{\nofpages4}{\nofwords1148}{\nofchars6546}{\*\company Luca - Soft}{\nofcharsws8038}{\vern8249}}\margl1134\margr1134\margt3166\margb964 \r
+\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale114\viewzk2\nolnhtadjtbl \fet0\sectd \r
+\sbknone\linex0\headery709\sectdefaultcl {\header \trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat1\cltxlrtb\clftsWidth3\clwWidth6237 \r
+\cellx6207\clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat1\cltxlrtb\clftsWidth3\clwWidth3970 \cellx10177\pard\plain \r
+\s18\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \b\f1\fs28\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\r
+\par }\pard\plain \s19\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \b\i\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs20 \r
+\par }\pard\plain \s20\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs20 \cell }\pard\plain \s19\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \r
+\b\i\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs20 \r
+\par }{\fs28\cf8 \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs28\cf8 \trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\r
+\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat1\cltxlrtb\clftsWidth3\clwWidth6237 \cellx6207\clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\r
+\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat1\cltxlrtb\clftsWidth3\clwWidth3970 \cellx10177\row }\trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \r
+\clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrl\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \cellx7058\r
+\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\r
+\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\pard\plain \s23\qr \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\i Grupo\cell \r
+}\pard \s23\ql \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 {\cell \cell \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \r
+\trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\r
+\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrl\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \cellx7058\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\r
+\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\row \r
+}\trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \cellx7058\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \r
+\clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\pard\plain \r
+\s23\qr \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\i Nota \cell }\pard \s23\ql \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 {\cell \cell \cell \r
+}\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\r
+\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \r
+\cellx7058\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \r
+\clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\row }\trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\r
+\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \cellx7058\clvertalt\clbrdrt\brdrnone \r
+\clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\r
+\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\pard\plain \s23\qr \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 \r
+\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\i Corrigi\'f3\cell }\pard \s23\ql \li0\ri0\nowidctlpar\intbl\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0 {\cell \cell \cell }\pard\plain \r
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-30\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\r
+\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1985 \cellx1955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrnone \clcbpat18\cltxlrtb\clftsWidth3\clwWidth5103 \r
+\cellx7058\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrnone \clbrdrb\brdrs\brdrw20\brsp40\brdrcf16 \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat18\cltxlrtb\clftsWidth3\clwWidth1701 \cellx10177\row }\pard\plain \s23\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\faauto\rin0\lin0\itap0 \r
+\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\r
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}\r
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\r
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s28\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \r
+\f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\fs24 Trabajo Pr\'e1ctico 1- TDA TABLA\r
+\par }{\r
+\par Se desea definir e implementar un TDA \'93TABLA\'94. Este TDA se utiliza para almacenar datos identificados por una clave \'fanica (se diferencia entre Clave y el resto de los Datos almacenados). Una TABLA puede estar ordenada o no \r
+por la Clave. El TDA TABLA tiene funciones similares a una tabla de una Base de Datos: se pueden insertar elementos, modificar, borrar, consultar, etc. Los datos almacenados en la TABLA est\'e1n encapsulados, s\'f3lo puede accederse a ellos a trav\'e9\r
+s de las primitivas del TDA TABLA.\r
+\par \r
+\par }\pard\plain \s15\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs22\ul Operaciones que se pueden realizar sobre el TDA TABLA:\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\fs22 Inserci\'f3n: Inserta un elemento en la TABLA en el lugar indicado. Esta operaci\'f3\r
+n causa que si la TABLA se encontraba ordenada, luego de la misma se encuentre desordenada (ya que esta inserci\'f3n no toma en cuenta la Clave del elemento). \r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Inserci\'f3n Ordenada: Inserta ordenado por clave. Esta operaci\'f3n s\'f3lo es v\'e1lida si la TABLA se encuentra ordenada anteriormente. \r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Ordenar TABLA: Utilizando alg\'fan m\'e9todo de ordenamiento dado en clase se ordena la TABLA por su clave. \r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Buscar por Clave: Se posiciona en el registro con la Clave indicada.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Buscar por Rango: Recupera los datos correspondientes a las Claves que se encuentran en el rango indicado. La TABLA debe estar ordenada.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Borrar Corriente: Elimina el elemento actual de la TABLA.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Modificar Corriente: Modifica los datos del elemento actual de la TABLA. \r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Limpiar TABLA: Elimina todo el contenido de la TABLA.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Posicionarse en un elemento: Mover el elemento corriente al primero de la TABLA, al \'faltimo, al siguiente o al anterior.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Confirmar todas las operaciones realizadas (Commit): Se hacen definitivas todas las modificaciones realizadas en la TABLA desde el \'fa\r
+ltimo commit/rollback, una vez hecho un commit, no se pueden deshacer las modificaciones realizadas.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Anular todas las operaciones realizadas (Rollback): Se deshacen las modificaciones realizadas en la TABLA desde el \'fa\r
+ltimo commit/rollback, una vez hecho un rollback, no se pueden recuperar las modificaciones realizadas.\r
+\par }\pard \s15\qj \li1080\ri0\nowidctlpar\faauto\rin0\lin1080\itap0 {\i\fs22 Estas dos \'faltimas operaciones no deben ser implementadas.\r
+\par }\pard \s15\qj \li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 {\fs22 \r
+\par }{\fs22\ul Primitivas del TDA TABLA\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Crear ( var T: T_TABLA)\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T nunca fue creada.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: T creada y vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Function T_TABLA_Vacia ( T: T_TABLA ) : boolean\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T creada.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si T tiene elementos, entonces es FALSE, sino es TRUE.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Function T_TABLA_Llena ( T: T_TABLA ) : boolean\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T creada.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si T tiene lugar para insertar nuevos elementos, entonces es FALSE, sino es TRUE.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Function T_TABLA_Ordenada ( T: T_TABLA ) : boolean\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si T est\'e1 ordenada, entonces es verdadero, sino es falso.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Elem_Cte ( T: T_TABLA , var R: T_REGISTRO )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: R contiene el registro corriente.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Mover_Cte ( var T: T_TABLA , M: T_MOVIM, var error: boolean )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE :T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si M = primero, el nuevo corriente es el primer registro y error es falso.\r
+\par }\pard \s15\qj \li2160\ri0\nowidctlpar\faauto\rin0\lin2160\itap0 {\fs22 Si M = ultimo, el nuevo corriente es el \'faltimo registro y error es falso.\r
+\par Si M = siguiente, el nuevo corriente es el siguiente registro del actual corriente y error es falso. Si el corriente era el \'faltimo registro, entonces error es verdadero y el corriente sigue siendo el \'faltimo registro.\r
+\par Si M = anterior, el nuevo corriente es el anterior registro del actual corriente y error es falso. Si el corriente era el primer registro, entonces error es verdadero y el corriente sigue siendo el primer registro.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Insertar ( var T: T_TABLA , R: T_REGISTRO, M: T_MOVIM )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T no est\'e1 llena.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si M = primero, R se agreg\'f3, es el primer registro y el nuevo corriente.\r
+\par }\pard \s15\qj \li2127\ri0\nowidctlpar\faauto\rin0\lin2127\itap0 {\fs22 Si M = ultimo, R se agreg\'f3, es el \'faltimo registro y el nuevo corriente.\r
+\par Si M = siguiente, R se agreg\'f3, es el siguiente registro del corriente, y es el nuevo corriente \r
+\par Si M = anterior, R se agreg\'f3, es el anterior registro del corriente, y es el nuevo corriente.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Limpiar ( var T: T_TABLA )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T creada.\r
+\par {\listtext\pard\plain\s15 \f2\fs22\lang1033\langfe3082\langnp1033 \hich\af2\dbch\af0\loch\f2 o\tab}}{\fs22\lang1033\langfe3082\langnp1033 POST: T vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Borrar_Cte ( var T: T_TABLA )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Se elimin\'f3 el registro corriente. El nuevo registro corriente es el siguiente del borrado, si el borrado era el \'faltimo, entonces el nuevo corriente es el primero.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Modif_Cte ( var T: T_TABLA , R: T_REGISTRO )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: El contenido del actual corriente fue actualizado co\r
+n R. Si T estaba ordenada y no se modificaron los datos de la clave del corriente, entonces T sigue ordenada. Si T estaba ordenada y se modificaron los datos de la clave del corriente, entonces si la nueva clave rompe el orden de T, T no est\'e1 m\'e1\r
+s ordenada.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Ordenar ( var T: T_TABLA )\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: T se encuentra ordenada por la clave de sus registros.\r
+\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s15\qj \fi-360\li1080\ri0\nowidctlpar\faauto\ls2\rin0\lin1080\itap0 {\b\fs22 Procedure T_TABLA_Buscar_Clave ( var T: T_TABLA , C: T_CLAVE, var error boolean)\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 {\fs22 PRE : T no vac\'eda.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: Si C es una clave que existe en T, entonces el nuevo corriente es el registro con clave C y error es falso, sino error es verdadero y el corriente no cambia.\r
+\par }\pard \s15\qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22 \r
+\par }\pard\plain \s21\qj \li720\ri0\keepn\nowidctlpar\faauto\rin0\lin720\itap0 \f11\fs22\ul\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {Enunciado\r
+\par }\pard\plain \s28\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {Se pide:\r
+\par {\listtext\pard\plain\s15 \f11\fs22 \hich\af11\dbch\af0\loch\f11 1.\tab}}\pard\plain \s15\qj \fi-1080\li1800\ri0\nowidctlpar\tx2268\faauto\ls1\rin0\lin1800\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs22 \r
+Implementar el TDA TABLA, utilizando para ello una Lista Doblemente Enlazada implementada con cursores (la Lista Doblemente Enlazada se debe definir e implementar basandose en la implementaci\'f3n de Listas con Cursores proporcionada por la c\'e1tedra).\r
+\r
+\par }\pard\plain \s30\qj \fi1\li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 \f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {Se deben codificar las primitivas del TDA TABLA antes mencionadas, respetando las PRE y POST condiciones enunciadas.\r
+\r
+\par }\pard\plain \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs22 Tambi\'e9\r
+n debe desarrollarse el procedimiento abstracto Buscar_por_Rango; este debe devolver una Pila cuyos elementos ser\'e1n del tipo Registro definido para el TDA TABLA (la Pila debe implementarse con cursores, basandose en la implementaci\'f3n propo\r
+rcionada por la c\'e1tedra).\r
+\par Los datos que debe almacenar el TDA TABLA son: DNI (clave) y NOMBRE (datos).\r
+\par Las primitivas del tipo TDA_TABLA deben usar las primitivas de listas definidas. Salvo las operaciones InsertarOrdenado, Buscar por clave y por rango, qu\r
+e son procedimientos de aplicacion complejos, el resto en general son llamadas directas de las primitivas de TABLA a las primitivas de LISTA.}{\r
+\par }{\fs22 \r
+\par {\listtext\pard\plain\s15 \f11\fs22 \hich\af11\dbch\af0\loch\f11 2.\tab}}\pard \s15\qj \fi-1080\li1800\ri0\nowidctlpar\tx2268\faauto\ls1\rin0\lin1800\itap0 {\fs22 Desarrollar un programa que utilice el TDA TABLA antes definido. Este programa deber\'e1\r
+ recibir 2 nombres de archivo como par\'e1metro: un archivo de entrada cuyo contenido son comandos que indican operaciones a realizar sobre una Tabla del tipo TB_TABLA y uno de salida para el resultado de las operaciones.\r
+\par }\pard \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 {\fs22 El archivo de entrada contendr\'e1 comandos que indican operaciones.\r
+\par Este archivo es una archivo secuencial y tiene el siguiente formato de registro:\r
+\par }{\f0\fs22 \tab T_registro_entrada = record\r
+\par \tab \tab }{\f0\fs22\lang1033\langfe3082\langnp1033 Comando\tab : string[2];}{\lang1033\langfe3082\langnp1033 \r
+\par }{\f0\fs22\lang1033\langfe3082\langnp1033 \tab \tab DNI\tab \tab : string[8];\r
+\par \tab \tab Nombre\tab : string[40];\r
+\par \tab \tab Movimiento\tab : string[1];\r
+\par \tab \tab DNI_hasta\tab : string[8];\r
+\par \tab End;\r
+\par }{\fs22\lang1033\langfe3082\langnp1033 \r
+\par }{\fs22 Los comandos posibles y sus par\'e1metros son los siguientes:\r
+\par \tab \r
+\par }\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \r
+\clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \r
+\clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\pard \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 {\b\fs22 Comando\cell Descripci\'f3n\cell DNI\cell Nombre\cell Movim.\cell \r
+DNI_Hasta\cell Salida\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\fs22 \trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \r
+\clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \r
+\clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\r
+\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\r
+\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {IN\cell Insertar com\'fan\cell <DNI>\cell <Nombre>\cell \r
+<P/U/S/A>\cell *\cell -\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \r
+\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {IO\cell Insertar Ordenado\cell <DNI>\cell <Nombre>\cell *\cell *\cell -\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \r
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \r
+\cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \r
+\cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \r
+\cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {OR\cell Ordenar Tabla\cell *\cell *\cell *\cell *\cell -\cell }\pard\plain \r
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \r
+\cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \r
+\cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {BC\cell \r
+Buscar por Clave\cell <DNI>\cell *\cell *\cell *\cell Datos de la Clave\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \r
+\trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \r
+\s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {BR\cell Buscar por Rango\cell <DNI desde>\cell *\cell *\cell <DNI hasta>\cell Datos Rango\cell }\pard\plain \r
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \r
+\cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \r
+\cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {LS\cell \r
+Listar Tabla\cell *\cell *\cell *\cell *\cell Datos Tabla\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\r
+\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \r
+\cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \r
+\cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \r
+\s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {LC\cell Listar Corriente\cell *\cell *\cell *\cell *\cell Datos Corriente\cell }\pard\plain \r
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \r
+\cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \r
+\cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {BO\cell \r
+Borrar\cell *\cell *\cell *\cell *\cell -\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \r
+\clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\r
+\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \r
+\cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \r
+\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {MO \cell Modificar\cell <DNI>\cell <Nombre>\cell *\cell *\cell -\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \r
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \r
+\cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \r
+\cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \r
+\cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\r
+\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \r
+\cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \r
+\cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\pard\plain \s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {LI\cell Limpiar Tabla\cell *\cell *\cell *\cell *\cell -\cell }\pard\plain \r
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\trowd \trqc\trleft-23\trftsWidth1 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1106 \cellx1083\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1990 \r
+\cellx3073\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth882 \cellx3955\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1371 \cellx5326\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1327 \r
+\cellx6653\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth1216 \cellx7869\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\r
+\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\brdrs\brdrw5\brsp40\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1088 \cellx8957\row }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\f11\fs20 \r
+\par En el caso que no corresponda pasar alg\'fan par\'e1metro, dicho campo en el archivo contendr\'e1 un *.\r
+\par \r
+\par El programa deber\'e1 procesar el archivo de entrada, realizando las operaciones indicadas por los comandos en una Tabla del tipo TB_TABLA, e ir volcando en el archivo de salida el resultado de las operaciones, de la siguiente manera:\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard\plain \s15\qj \fi-360\li1800\ri0\nowidctlpar\faauto\ls2\ilvl1\rin0\lin1800\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs22 Por cada l\'ed\r
+nea del archivo de entrada procesada se debe grabar una l\'ednea en el archivo de salida indicando el comando recibido.\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}Si la operaci\'f3n realizada da error, se debe grabar una l\'ednea en el archivo de salida con el texto ERROR (puede ser mas expl\'edcito si se desea).\r
+\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}Si la operaci\'f3n indicada debe tener alguna salida (comandos BC, BR, LC, LS), se debe grabar una l\'ed\r
+nea en el archivo de salida por cada elemento a mostrar con los datos: <DNI> <NOMBRE>.\r
+\par }\pard \s15\qj \li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 {\fs22 \r
+\par }\pard \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 {\fs22 \r
+\par }\pard \s15\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22 \r
+\par }}
\ No newline at end of file
--- /dev/null
+program GeneradorDeArchivosDeComandos;\r
+{\r
+ Programa para generar archivos de comandos\r
+}\r
+\r
+uses\r
+ PROG_GRL, DOS;\r
+\r
+var\r
+ fSal: T_ARCHIVO_COMANDOS;\r
+ c: T_COMANDO;\r
+ dir: dirstr;\r
+ fname: namestr;\r
+ ext: extstr;\r
+\r
+begin\r
+ mensajeDeEntrada( 'Programa para crear archivos de comandos.' );\r
+ if paramcount < 1 then begin\r
+ fsplit( paramstr( 0 ), dir, fname, ext );\r
+ writeln;\r
+ writeln;\r
+ writeln( 'ERROR: numero de parametros incorrectos.' );\r
+ writeln;\r
+ writeln( 'Modo de uso:' );\r
+ writeln( ' ', fname, ' archivo_entrada' );\r
+ writeln;\r
+ writeln;\r
+ writeln( 'Numero de parametros incorrecto. Uso comandos <archivo_de_salida>' );\r
+ exit; { -------------------------------------> SALE DEL PROGRAMA!!!!!!!!!! }\r
+ end;\r
+ if ( not existeArchivo( paramstr( 1 ) ) ) then\r
+ writeln( 'Escribiendo en el "', paramstr( 1 ), '".' )\r
+ else\r
+ writeln( 'Sobrescribiendo en el archivo "', paramstr( 1 ), '".' );\r
+ assign( fSal, paramstr( 1 ) );\r
+ rewrite( fSal );\r
+ while true do begin { Repite hasta que el comando sea nulo }\r
+ writeln;\r
+ writeln;\r
+ writeln( 'INGRESO DE UN NUEVO REGISTRO' );\r
+ writeln( '======= == == ===== ========' );\r
+ writeln;\r
+ write( 'Comando (IN, IO, OR, BC, BR, LS, LC, BO, MO, LI): ' );\r
+ readln( c.comando );\r
+ if ( c.comando = '' ) then\r
+ exit; { ----------> SALE DEL PROGRAMA!!!!!!!!!! }\r
+ write( 'DNI: ' );\r
+ readln( c.dni );\r
+ if ( c.dni = '' ) then\r
+ c.dni := '*';\r
+ write( 'Nombre: ' );\r
+ readln( c.nombre );\r
+ if ( c.nombre = '' ) then\r
+ c.nombre := '*';\r
+ write( 'Movimiento (P, U, A, S): ' );\r
+ readln( c.movimiento );\r
+ if ( c.movimiento = '' ) then\r
+ c.movimiento := '*';\r
+ write( 'DNI_hasta: ' );\r
+ readln( c.dni_hasta );\r
+ if ( c.dni_hasta = '' ) then\r
+ c.dni_hasta := '*';\r
+ write( fSal, c );\r
+ end;\r
+ writeln;\r
+ writeln( 'Se escribio correctamente el archivo "', paramstr( 1 ), '".' )\r
+ writeln( 'FIN DEL PROGRAMA' )\r
+ writeln;\r
+end.\r
+\r
--- /dev/null
+unit GRAL;\r
+{ funciones y datos y tipo generales de los TDA de almacenamiento }\r
+\r
+interface\r
+\r
+{ aca se define el famoso tipo_elem }\r
+type\r
+ T_GRAL_DNI = longint;\r
+ T_GRAL_Persona = record\r
+ dni : T_GRAL_DNI;\r
+ nombre : String[20];\r
+ end;\r
+\r
+ T_CLAVE = T_GRAL_DNI;\r
+ T_REGISTRO = T_GRAL_Persona;\r
+\r
+{ esta funcion devuelve la clave de un elemento almacenado }\r
+{ PRE : ninguna }\r
+{ POST: devuelve la clave de un elemento E }\r
+function T_GRAL_Devolver_Clave_Elem( r: T_REGISTRO): T_CLAVE;\r
+\r
+{ este procedimiento se usa en recorridos e imprime los datos del elemento }\r
+{ PRE : ninguna }\r
+{ POST: se imprimieron los datos }\r
+procedure T_GRAL_Procesar_Elem_Recorrido ( var r: T_REGISTRO);\r
+\r
+{ compara dos elementos completos para ver si cumplen con el criterio o no }\r
+FUNCTION T_GRAL_Comparar_Elementos( a: T_REGISTRO; b: T_REGISTRO ): boolean;\r
+\r
+implementation\r
+\r
+{ esta funcion devuelve la clave de un elemento almacenado }\r
+function T_GRAL_Devolver_Clave_Elem( r: T_REGISTRO): T_CLAVE;\r
+begin\r
+ T_GRAL_Devolver_Clave_Elem := r.dni;\r
+end;\r
+\r
+{ este procedimiento se usa en recorridos e imprime los datos del elemento }\r
+procedure T_GRAL_Procesar_Elem_Recorrido ( var r: T_REGISTRO);\r
+BEGIN\r
+ \r
+END;\r
+\r
+{ compara dos elementos completos para ver si cumplen con el criterio o no }\r
+FUNCTION T_GRAL_Comparar_elementos( a: T_REGISTRO; b: T_REGISTRO ): boolean;\r
+BEGIN\r
+ T_GRAL_Comparar_Elementos := ( a.dni = b.dni );\r
+END;\r
+\r
+end.\r
--- /dev/null
+unit LDC;\r
+\r
+{\r
+ IMPLEMENTACION : LISTAS DOBLES\r
+ ALMACENAMIENTO : CURSORES\r
+\r
+}\r
+\r
+{ ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular }\r
+interface\r
+\r
+{ usa las funciones generales de TDAs }\r
+uses GRAL;\r
+\r
+{ maximo tamano del cursor }\r
+const LDC_MAX_CURSOR = 100;\r
+\r
+{ tipos propios de la lista para definir el cursor }\r
+TYPE\r
+ LDC_puntero = integer;\r
+\r
+const\r
+ LDC_nulo : LDC_puntero = 0;\r
+\r
+type\r
+\r
+ LDC_nodo = RECORD\r
+ Elem : T_REGISTRO;\r
+ Sig : LDC_puntero;\r
+ Ant : LDC_puntero;\r
+ END;\r
+\r
+\r
+ { ahora le toca definir el cursor }\r
+ LDC_Almac = record\r
+ almacenamiento : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Nodo;\r
+ siguientes : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Puntero;\r
+ { anteriores : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Puntero; PREGUNTAR SI ES NECESARIO }\r
+ primero_dispo : LDC_Puntero;\r
+ end;\r
+\r
+\r
+ LDC_LDC = RECORD\r
+ almac : LDC_Almac;\r
+ primero: LDC_puntero;\r
+ corriente : LDC_puntero;\r
+ END;\r
+\r
+ LDC_movimiento = ( LDC_primero, LDC_siguiente, LDC_anterior );\r
+\r
+\r
+{ ========= }\r
+{ INTERFASE }\r
+\r
+\r
+PROCEDURE LDC_Inicializar( VAR l: LDC_LDC );\r
+FUNCTION LDC_vacio( l: LDC_LDC): BOOLEAN;\r
+FUNCTION LDC_lleno( l: LDC_LDC): BOOLEAN;\r
+PROCEDURE LDC_elem_cte( l: LDC_LDC; VAR r: T_REGISTRO);\r
+PROCEDURE LDC_modif_cte( VAR l: LDC_LDC; r: T_REGISTRO);\r
+PROCEDURE LDC_mover_cte( VAR l: LDC_LDC; m: LDC_movimiento; VAR error: BOOLEAN );\r
+PROCEDURE LDC_borrar_cte( VAR l: LDC_LDC );\r
+PROCEDURE LDC_insertar( VAR l: LDC_LDC; m: LDC_movimiento; r: T_REGISTRO );\r
+PROCEDURE LDC_vaciar( VAR l: LDC_LDC );\r
+PROCEDURE LDC_copiar( a: LDC_LDC; VAR b: LDC_LDC );\r
+\r
+implementation\r
+\r
+{ CURSORES DE ESTA IMPLEMENTACION }\r
+{ ========================================================================== }\r
+{ inicializar el almacenamiento }\r
+{ PRE : 'almac' no esta inicializado }\r
+{ POST: 'almac' esta inicializado y vacio }\r
+procedure LDC_Almac_Inicializar( VAR almac : LDC_Almac );\r
+var i : LDC_Puntero;\r
+begin\r
+ almac.primero_dispo := 1;\r
+ for i := 1 to LDC_MAX_CURSOR - 1 do\r
+ begin\r
+ almac.siguientes[i] := i + 1;\r
+ end;\r
+{ for i := 1 to LDC_CURSOR_MAX - 1 do\r
+ begin\r
+ almac.anteriores[i + 1] := i; PREGUNTAR !!!!!!\r
+ end;}\r
+ almac.siguientes[LDC_MAX_CURSOR] := LDC_Nulo;\r
+ {almac.anteriores[1] := LDC_Nulo;}\r
+end;\r
+\r
+{ ========================================================================== }\r
+{ saber si hay lugar para reservar un nuevo elemento en el almacenamiento }\r
+{ PRE : 'almac' esta inicializado }\r
+{ POST: si hay lugar en 'almac' para un nuevo elemento,\r
+ entonces retorna TRUE y sino FALSE }\r
+function LDC_Almac_HayLugar( almac : LDC_Almac ): boolean;\r
+begin\r
+ LDC_Almac_HayLugar := ( almac.primero_dispo <> LDC_Nulo );\r
+end;\r
+\r
+{ ========================================================================== }\r
+{ el pedido de un nuevo elemento al almacenamiento }\r
+{ PRE : 'almac' esta inicializado }\r
+{ POST: si hay lugar en 'almac' para un nuevo elemento,\r
+ entonces 'puntero' tiene una referencia a un nuevo elemento del almacenamiento\r
+ sino 'puntero' tiene el valor TTDA_Nulo }\r
+procedure LDC_Almac_Reservar( VAR almac : LDC_Almac; VAR puntero : LDC_Puntero );\r
+begin\r
+ if not LDC_Almac_HayLugar( almac ) then\r
+ puntero := LDC_Nulo\r
+ else begin\r
+ puntero := almac.primero_dispo;\r
+ almac.primero_dispo := almac.siguientes[ puntero ];\r
+ end;\r
+end;\r
+\r
+{ ========================================================================== }\r
+{ liberar un elemento del almacenamiento }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: 'almac' libero el nodo apuntado por 'puntero' y 'puntero' vale TTDA_Nulo }\r
+procedure LDC_Almac_Liberar( VAR almac : LDC_Almac; VAR puntero : LDC_Puntero );\r
+begin\r
+ almac.siguientes[ puntero ] := almac.primero_dispo;\r
+ almac.primero_dispo := puntero;\r
+ puntero := LDC_Nulo;\r
+end;\r
+\r
+{ ========================================================================== }\r
+{ acceder al elemento del almacenamiento apuntado por un puntero }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: 'elemento' tiene una copia del elemento apuntado por 'puntero' }\r
+procedure LDC_Almac_Acceder( almac : LDC_Almac; puntero : LDC_Puntero; VAR elemento : LDC_Nodo );\r
+begin\r
+ elemento := almac.almacenamiento[ puntero ];\r
+end;\r
+\r
+{ ========================================================================== }\r
+{ modificar el elemento del almacenamiento apuntado por un puntero }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: el elemento de 'almac' apuntado por 'puntero' tiene una copia de 'elemento' }\r
+procedure LDC_Almac_Modificar( VAR almac : LDC_Almac; puntero : LDC_Puntero; elemento : LDC_Nodo );\r
+begin\r
+ almac.almacenamiento[ puntero ] := elemento;\r
+end;\r
+\r
+\r
+\r
+{ Estas son los dos procedimientos principales de la aplicacion }\r
+\r
+PROCEDURE LDC_Inicializar( VAR l: LDC_LDC );\r
+BEGIN\r
+ LDC_Almac_Inicializar( l.almac );\r
+ l.primero := LDC_Nulo;\r
+ l.corriente := LDC_Nulo;\r
+END;\r
+\r
+FUNCTION LDC_vacio( l: LDC_LDC): BOOLEAN;\r
+BEGIN\r
+ LDC_vacio := ( l.Primero = LDC_Nulo);\r
+END;\r
+\r
+FUNCTION LDC_lleno( l: LDC_LDC): BOOLEAN;\r
+BEGIN\r
+ LDC_lleno := not LDC_Almac_HayLugar( l.almac );\r
+END;\r
+\r
+PROCEDURE LDC_elem_cte( l: LDC_LDC; VAR r: T_REGISTRO);\r
+var n : LDC_Nodo;\r
+BEGIN\r
+ { accedo al almacenamiento por el nodo corriente }\r
+ LDC_Almac_Acceder( l.almac, l.Corriente, n );\r
+\r
+ { y se lo asigno al parametro }\r
+ r := n.Elem;\r
+END;\r
+\r
+PROCEDURE LDC_modif_cte( VAR l: LDC_LDC; r: T_REGISTRO);\r
+var n : LDC_Nodo;\r
+BEGIN\r
+ { accedo al almacenamiento por el nodo corriente }\r
+ LDC_Almac_Acceder( l.almac, l.Corriente, n );\r
+\r
+ { y la asigno al parametro }\r
+ n.Elem := r;\r
+\r
+ { y modifico el almacenamiento }\r
+ LDC_Almac_Modificar( l.almac, l.Corriente, n );\r
+END;\r
+\r
+PROCEDURE LDC_mover_cte( VAR l: LDC_LDC; m: LDC_movimiento; VAR error: BOOLEAN );\r
+VAR n : LDC_Nodo;\r
+BEGIN\r
+ error := FALSE;\r
+ CASE m OF\r
+ LDC_primero:\r
+ l.Corriente := l.Primero;\r
+ LDC_siguiente: begin\r
+ { accedo al almacenamiento por el nodo corriente }\r
+ LDC_Almac_Acceder( l.almac, l.Corriente, n );\r
+\r
+ IF ( n.Sig = LDC_Nulo ) THEN\r
+ error := TRUE\r
+ ELSE\r
+ l.corriente := n.sig;\r
+ end;\r
+ LDC_anterior: begin\r
+ { accedo al almacenamiento por el nodo corriente }\r
+ LDC_Almac_Acceder( l.almac, l.Corriente, n );\r
+\r
+ IF ( n.ant = LDC_Nulo ) THEN\r
+ error := TRUE\r
+ ELSE\r
+ l.corriente := n.ant;\r
+ end;\r
+ END;\r
+END;\r
+\r
+PROCEDURE LDC_borrar_cte( VAR l: LDC_LDC );\r
+VAR nc : LDC_Nodo; { Nodo Corriente }\r
+ nac : LDC_Nodo; { Nodo Anterior al Corriente }\r
+ npc: LDC_Nodo; { Nodo Posterior al Corriente }\r
+ tmpp: LDC_Puntero;\r
+BEGIN\r
+ if l.corriente = l.primero then begin\r
+ LDC_Almac_Acceder( l.almac, l.primero, nc );\r
+ l.primero := nc.Sig;\r
+ LDC_Almac_Liberar( l.almac, l.corriente );\r
+ l.corriente := l.primero;\r
+ if ( l.primero <> LDC_Nulo ) then begin { SI NO ERA EL UNICO ELEMENTO }\r
+ LDC_Almac_Acceder( l.almac, l.primero, nc ); {--------------}\r
+ nc.Ant := LDC_Nulo; {-------------------------- PREGUNTAR }\r
+ LDC_Almac_Modificar( l.almac, l.primero, nc); {-------------}\r
+ end;\r
+ end\r
+ else begin\r
+ LDC_Almac_Acceder( l.almac, l.corriente, nc );\r
+ LDC_Almac_Acceder( l.almac, nc.Ant, nac );\r
+ nac.Sig := nc.Sig;\r
+ LDC_Almac_Modificar( l.almac, nc.Ant, nac );\r
+ if ( nc.Sig <> LDC_Nulo ) then begin\r
+ LDC_Almac_Acceder( l.almac, nc.Sig, npc );\r
+ npc.Ant := nc.Ant;\r
+ LDC_Almac_Modificar( l.almac, nc.Sig, npc );\r
+ end;\r
+ LDC_Almac_Liberar( l.almac, l.corriente );\r
+ if ( nc.Ant <> LDC_Nulo ) then\r
+ l.corriente := nc.Ant\r
+ else\r
+ l.corriente := nc.Sig;\r
+ end;\r
+END;\r
+\r
+PROCEDURE LDC_insertar( VAR l: LDC_LDC; m: LDC_movimiento; r: T_REGISTRO );\r
+VAR\r
+ p : LDC_puntero;\r
+ n : LDC_Nodo;\r
+ na: LDC_Nodo;\r
+ ns: LDC_Nodo;\r
+ np: LDC_Puntero;\r
+BEGIN\r
+ { n.Ant := LDC_Nulo; { AGREGADO }\r
+ LDC_Almac_Reservar( l.almac, np );\r
+ n.Elem := r;\r
+ CASE m OF\r
+ LDC_primero: begin\r
+ n.Sig := LDC_Nulo;\r
+ n.Ant := LDC_Nulo;\r
+ if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO }\r
+ LDC_Almac_Acceder( l.almac, l.primero, na );\r
+ na.Ant := np;\r
+ LDC_Almac_Modificar( l.almac, l.primero, na );\r
+ n.Sig := l.primero;\r
+ end;\r
+ LDC_Almac_Modificar( l.almac, np, n );\r
+ l.primero := np;\r
+ end;\r
+ LDC_siguiente: begin\r
+ n.Ant := LDC_Nulo;\r
+ n.Sig := LDC_Nulo;\r
+ if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO }\r
+ LDC_Almac_Acceder( l.almac, l.corriente, na );\r
+ n.Ant := l.corriente;\r
+ n.Sig := na.Sig;\r
+ na.Sig := np;\r
+ LDC_Almac_Modificar( l.almac, l.corriente, na );\r
+ end\r
+ else\r
+ l.primero := np;\r
+ if ( n.Sig <> LDC_Nulo ) then begin\r
+ LDC_Almac_Acceder( l.almac, n.Sig, ns );\r
+ ns.Ant := np;\r
+ LDC_Almac_Modificar( l.almac, n.Sig, ns );\r
+ end;\r
+ LDC_Almac_Modificar( l.almac, np, n );\r
+ end;\r
+ LDC_anterior: begin\r
+ n.Ant := LDC_Nulo;\r
+ n.Sig := LDC_Nulo;\r
+ if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO }\r
+ LDC_Almac_Acceder( l.almac, l.corriente, ns );\r
+ n.Sig := l.corriente;\r
+ n.Ant := ns.Ant;\r
+ ns.Ant := np;\r
+ LDC_Almac_Modificar( l.almac, l.corriente, ns );\r
+ end\r
+ else\r
+ l.primero := np;\r
+ if ( n.Ant <> LDC_Nulo ) then begin\r
+ LDC_Almac_Acceder( l.almac, n.Ant, na );\r
+ na.Sig := np;\r
+ LDC_Almac_Modificar( l.almac, n.Ant, na );\r
+ end\r
+ else { Si el Anterior es nulo, entonces estoy insertando atras del primero }\r
+ l.primero := np;\r
+ LDC_Almac_Modificar( l.almac, np, n );\r
+ end;\r
+ END; { case m of }\r
+ l.Corriente := np;\r
+END;\r
+\r
+PROCEDURE LDC_vaciar( VAR l: LDC_LDC );\r
+VAR np : LDC_Puntero;\r
+ n : LDC_Nodo;\r
+\r
+BEGIN\r
+ np := l.primero;\r
+ while( np <> LDC_Nulo ) do begin\r
+ LDC_Almac_Acceder( l.almac, np, n );\r
+ LDC_Almac_Liberar( l.almac, np );\r
+ np := n.sig;\r
+ end;\r
+ l.primero := LDC_Nulo;\r
+ l.corriente := LDC_Nulo;\r
+END;\r
+\r
+{ pre: 'a' y 'b' estan creadas y 'b' esta vacia }\r
+{ POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero }\r
+PROCEDURE LDC_copiar( a : LDC_LDC; VAR b : LDC_LDC );\r
+VAR np : LDC_Puntero;\r
+ n : LDC_Nodo;\r
+ mp : LDC_Puntero;\r
+ m : LDC_Nodo;\r
+ ms : LDC_Puntero;\r
+ ma : LDC_Puntero;\r
+\r
+BEGIN\r
+ if ( a.primero = LDC_Nulo ) then exit;\r
+ np := a.primero;\r
+ LDC_Almac_Acceder( a.almac, np, n );\r
+ LDC_Almac_Reservar( b.almac, mp );\r
+ b.primero := mp;\r
+ b.corriente := mp;\r
+ m.elem := n.elem;\r
+ m.Ant := LDC_Nulo;\r
+\r
+ while ( n.sig <> LDC_Nulo ) do begin\r
+\r
+ LDC_Almac_Reservar( b.almac, ms );\r
+ m.sig := ms;\r
+ LDC_Almac_Modificar( b.almac, mp, m );\r
+\r
+ np := n.sig;\r
+ LDC_Almac_Acceder( a.almac, np, n );\r
+\r
+ m.Ant := mp; { n.Ant; } \r
+ mp := ms;\r
+ m.elem := n.elem;\r
+\r
+ end;\r
+ m.sig := LDC_Nulo;\r
+ LDC_Almac_Modificar( b.almac, mp, m );\r
+END;\r
+\r
+end.\r
--- /dev/null
+unit PILA_C;\r
+{\r
+\r
+ IMPLEMENTACION : pilas\r
+\r
+ ALMACENAMIENTO : CURSORES\r
+}\r
+\r
+\r
+\r
+{ ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular }\r
+\r
+interface\r
+\r
+{ usa las funciones generales de TDAs }\r
+uses\r
+ GRAL;\r
+\r
+{ maximo tamano del cursor }\r
+const\r
+ PILAC_MAX_CURSOR = 100;\r
+\r
+{ tipos propios de la lista para definir el cursor }\r
+TYPE\r
+ PILAC_puntero = integer;\r
+\r
+const\r
+ PILAC_nulo : PILAC_puntero = 0;\r
+\r
+type\r
+ PILAC_nodo = RECORD\r
+ Elem : T_REGISTRO;\r
+ Sig : PILAC_puntero;\r
+ END;\r
+\r
+ { ahora le toca definir el cursor }\r
+ PILAC_Almac = record\r
+ almacenamiento : array [ 1 .. PILAC_MAX_CURSOR ] of PILAC_Nodo;\r
+ siguientes : array [ 1 .. PILAC_MAX_CURSOR ] of PILAC_Puntero;\r
+ primero_dispo : PILAC_puntero;\r
+ end;\r
+\r
+ T_PILAC = RECORD\r
+ almac : PILAC_Almac;\r
+ primero: PILAC_puntero;\r
+ END;\r
+\r
+{ ========= }\r
+\r
+{ INTERFASE }\r
+\r
+PROCEDURE PILAC_Inicializar( VAR l: T_PILAC );\r
+FUNCTION PILAC_vacio( l: T_PILAC): BOOLEAN;\r
+FUNCTION PILAC_lleno( l: T_PILAC): BOOLEAN;\r
+PROCEDURE PILAC_poner( VAR l: T_PILAC; VAR e: T_REGISTRO );\r
+PROCEDURE PILAC_sacar( VAR l: T_PILAC; VAR e: T_REGISTRO);\r
+PROCEDURE PILAC_vaciar( VAR l: T_PILAC );\r
+PROCEDURE PILAC_copiar( a: T_PILAC; VAR b: T_PILAC );\r
+\r
+\r
+implementation\r
+\r
+{ CURSORES DE ESTA IMPLEMENTACION }\r
+{ ========================================================================== }\r
+{ inicializar el almacenamiento }\r
+{ PRE : 'almac' no esta inicializado }\r
+{ POST: 'almac' esta inicializado y vacio }\r
+\r
+procedure PILAC_Almac_Inicializar( VAR almac : PILAC_Almac );\r
+ var\r
+ i : PILAC_Puntero;\r
+\r
+ begin\r
+ almac.primero_dispo := 1;\r
+ for i := 1 to PILAC_MAX_CURSOR - 1 do\r
+ begin\r
+ almac.siguientes[i] := i + 1;\r
+ end;\r
+ almac.siguientes[PILAC_MAX_CURSOR] := PILAC_Nulo;\r
+ end;\r
+\r
+{ ========================================================================== }\r
+{ saber si hay lugar para reservar un nuevo elemento en el almacenamiento }\r
+{ PRE : 'almac' esta inicializado }\r
+{ POST: si hay lugar en 'almac' para un nuevo elemento,\r
+ entonces retorna TRUE y sino FALSE }\r
+function PILAC_Almac_HayLugar( almac : PILAC_Almac ): boolean;\r
+ begin\r
+ PILAC_Almac_HayLugar := not ( almac.primero_dispo = PILAC_Nulo );\r
+ end;\r
+\r
+{ ========================================================================== }\r
+{ el pedido de un nuevo elemento al almacenamiento }\r
+{ PRE : 'almac' esta inicializado }\r
+{ POST: si hay lugar en 'almac' para un nuevo elemento,\r
+ entonces 'puntero' tiene una referencia a un nuevo elemento del almacenamiento\r
+ sino 'puntero' tiene el valor TTDA_Nulo }\r
+procedure PILAC_Almac_Reservar( VAR almac : PILAC_Almac; VAR puntero : PILAC_Puntero );\r
+ begin\r
+ if not PILAC_Almac_HayLugar( almac )\r
+ then\r
+ puntero := PILAC_Nulo\r
+ else begin\r
+ puntero := almac.primero_dispo;\r
+ almac.primero_dispo := almac.siguientes[ puntero ];\r
+ end;\r
+ end;\r
+\r
+{ ========================================================================== }\r
+{ liberar un elemento del almacenamiento }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: 'almac' libero el nodo apuntado por 'puntero' y 'puntero' vale TTDA_Nulo }\r
+procedure PILAC_Almac_Liberar( VAR almac : PILAC_Almac; VAR puntero : PILAC_Puntero );\r
+ begin\r
+ almac.siguientes[ puntero ] := almac.primero_dispo;\r
+ almac.primero_dispo := puntero;\r
+ puntero := PILAC_Nulo;\r
+ end;\r
+\r
+{ ========================================================================== }\r
+{ acceder al elemento del almacenamiento apuntado por un puntero }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: 'elemento' tiene una copia del elemento apuntado por 'puntero' }\r
+procedure PILAC_Almac_Acceder( almac : PilaC_Almac; puntero : PILAC_Puntero; VAR elemento : PILAC_Nodo );\r
+ begin\r
+ elemento := almac.almacenamiento[ puntero ];\r
+ end;\r
+\r
+{ ========================================================================== }\r
+{ modificar el elemento del almacenamiento apuntado por un puntero }\r
+{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento }\r
+{ POST: el elemento de 'almac' apuntado por 'puntero' tiene una copia de 'elemento' }\r
+procedure PILAC_Almac_Modificar( VAR almac : PILAC_Almac; puntero : PILAC_Puntero; elemento : PILAC_Nodo );\r
+ begin\r
+ almac.almacenamiento[ puntero ] := elemento;\r
+ end;\r
+\r
+{ Estas son los dos procedimientos principales de la aplicación }\r
+PROCEDURE PILAC_Inicializar ( VAR l: T_PILAC );\r
+ BEGIN\r
+ PILAC_Almac_Inicializar( l.almac );\r
+ l.primero := PILAC_Nulo;\r
+ END;\r
+\r
+FUNCTION PILAC_vacio( l: T_PILAC): BOOLEAN;\r
+ BEGIN\r
+ PILAC_vacio := ( l.Primero = PILAC_Nulo);\r
+ END;\r
+\r
+FUNCTION PILAC_lleno( l: T_PILAC): BOOLEAN;\r
+ BEGIN\r
+ PILAC_lleno := not PILAC_Almac_HayLugar( l.almac );\r
+ END;\r
+\r
+PROCEDURE PILAC_poner ( VAR l: T_PILAC; var e: T_REGISTRO);\r
+ VAR\r
+ n : PILAC_Nodo;\r
+ np: PILAC_Puntero;\r
+\r
+ BEGIN\r
+ n.Elem := e;\r
+ n.sig := l.primero;\r
+ PILAC_Almac_Reservar( l.almac, np );\r
+ PILAC_Almac_Modificar( l.almac, np, n );\r
+ l.primero := np;\r
+ END;\r
+\r
+{ pre: no esta vacia }\r
+PROCEDURE PILAC_sacar ( VAR l: T_PILAC; VAR e: T_REGISTRO);\r
+ VAR\r
+ n : PILAC_Nodo;\r
+ tmp : PILAC_Nodo;\r
+ tmpp: PILAC_Puntero;\r
+\r
+ BEGIN\r
+ PILAC_Almac_Acceder( l.almac, l.primero, n );\r
+ PILAC_Almac_Liberar( l.almac, l.primero );\r
+ l.primero := n.Sig;\r
+ { y se lo asigno al parametro }\r
+ e := n.Elem;\r
+ END;\r
+\r
+PROCEDURE PILAC_vaciar ( VAR l: T_PILAC );\r
+ VAR\r
+ np : PILAC_Puntero;\r
+ n : PILAC_Nodo;\r
+\r
+ BEGIN\r
+ np := l.primero;\r
+ while( np <> PILAC_Nulo ) do begin\r
+ PILAC_Almac_Acceder( l.almac, np, n );\r
+ PILAC_Almac_Liberar( l.almac, np );\r
+ np := n.sig;\r
+ end;\r
+ l.primero := PILAC_Nulo;\r
+ END;\r
+\r
+{ pre: 'a' y 'b' estan creadas y 'b' esta vacia }\r
+{ POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero }\r
+PROCEDURE PILAC_copiar ( a : T_PILAC; VAR b : T_PILAC );\r
+ VAR\r
+ np, mp, tmpp : PILAC_Puntero;\r
+ n,m : PILAC_Nodo;\r
+\r
+ BEGIN\r
+ if a.primero = PILAC_Nulo then exit;\r
+ np := a.primero;\r
+ PILAC_Almac_Acceder( a.almac, np, n );\r
+ PILAC_Almac_Reservar( b.almac, mp );\r
+ b.primero := mp;\r
+ m.elem := n.elem;\r
+ while( n.sig <> PILAC_Nulo ) do begin\r
+ PILAC_Almac_Reservar( b.almac, tmpp );\r
+ m.sig := tmpp;\r
+ PILAC_Almac_Modificar( b.almac, mp, m );\r
+ np := n.sig;\r
+ PILAC_Almac_Acceder( a.almac, np, n );\r
+ mp := tmpp;\r
+ m.elem := n.elem;\r
+ end;\r
+ m.sig := PILAC_Nulo;\r
+ PILAC_Almac_Modificar( b.almac, mp, m );\r
+ END;\r
+\r
+end.\r
+\r
--- /dev/null
+unit PROG_GRL;\r
+\r
+{\r
+ Unidad General para utilizar con los programas que utilicen el archivo de comandos\r
+ Tambien incluye algunas funciones y procedimientos utiles para la manipulacion de datos.\r
+}\r
+\r
+interface\r
+\r
+ uses\r
+ GRAL, DOS, CRT, TABLA;\r
+\r
+ type\r
+ T_COMANDO = record\r
+ Comando: string[2];\r
+ DNI: string[8];\r
+ Nombre: string[40];\r
+ Movimiento: string[1];\r
+ DNI_hasta: string[8];\r
+ end;\r
+ ID_COMANDO = ( INS, INSO, ORDEN, BC, BR, LS, LC, BO, MO, LI, DESC );\r
+\r
+ T_ARCHIVO_COMANDOS = file of T_COMANDO;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra un mensaje de bienvenida al programa\r
+ {----------------------------------------------------------------------------}\r
+ procedure mensajeDeEntrada( descripcion: String );\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: verifica si existe un archivo.\r
+ {----------------------------------------------------------------------------}\r
+ function existeArchivo( nombre: String ): boolean;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Procesa los parametros de la ejecucion del programa\r
+ {----------------------------------------------------------------------------}\r
+ procedure procesarParametros( var archivoEntrada: T_ARCHIVO_COMANDOS; var archivoSalida: text; var error: boolean );\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra un mensaje de error y la sintaxis del programa.\r
+ {----------------------------------------------------------------------------}\r
+ procedure errorParametros;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra mensaje introductorio en archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+ procedure intro( var f: text );\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un dato del tipo T_MOVIM en un string\r
+ {----------------------------------------------------------------------------}\r
+ function movimToStr( m: T_MOVIM): string;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un dato del tipo ID_COMANDO en un string\r
+ {----------------------------------------------------------------------------}\r
+ function comandoToStr( c: ID_COMANDO ): string;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un string en un dato del tipo ID_COMANDO\r
+ {----------------------------------------------------------------------------}\r
+ function strToComando( s: string ): ID_COMANDO;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un string en un dato del tipo T_MOVIM\r
+ {----------------------------------------------------------------------------}\r
+ function strToMovim( s: string; var error: boolean ): T_MOVIM;\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega el texto de un comando a ejecutar en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+ procedure agregaComando( var f: text; c: T_COMANDO );\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega mensaje de error en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+ procedure agregaError( var f: text; cmd, msg: string );\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega mensaje de error en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+ procedure agregaRegistro( var f: text; cmd: string; r: T_REGISTRO );\r
+\r
+\r
+implementation\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra un mensaje de bienvenida al programa\r
+ {----------------------------------------------------------------------------}\r
+ procedure mensajeDeEntrada( descripcion: String );\r
+\r
+ begin\r
+ writeln;\r
+ writeln( 'ALGORITMOS Y PROGRAMACION II - Trabajo Practico n. 1' );\r
+ writeln( 'GRUPO 22 - Primer Cuatrimestre 2000' );\r
+ writeln;\r
+ writeln( descripcion );\r
+ writeln;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: verifica si existe un archivo.\r
+ {----------------------------------------------------------------------------}\r
+\r
+ function existeArchivo( nombre: String ): boolean;\r
+\r
+ { funcion extrida de la ayuda del Turbo Pascal 7 }\r
+\r
+ var\r
+ arch: text;\r
+\r
+ begin\r
+ {$I-}\r
+ Assign( arch, nombre );\r
+ FileMode := 0; { Solo lectura }\r
+ Reset( arch );\r
+ Close( arch );\r
+ {$I+}\r
+ ExisteArchivo := (IOResult = 0) and (nombre <> '');\r
+ end;\r
+\r
+ {-- Fin de la Funcion ExisteArchivo --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Procesa los parametros de la ejecucion del programa\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure procesarParametros( var archivoEntrada: T_ARCHIVO_COMANDOS; var archivoSalida: text; var error: boolean );\r
+\r
+ begin\r
+ if ( paramcount = 2 ) then begin\r
+ if ( existeArchivo( paramstr( 1 ) ) ) then begin\r
+ assign( archivoEntrada, paramstr( 1 ) );\r
+ reset( archivoEntrada );\r
+ assign( archivoSalida, paramstr( 2 ) );\r
+ rewrite( archivoSalida );\r
+ error := false;\r
+ end\r
+ else\r
+ error := true;\r
+ end\r
+ else\r
+ error := true;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento procesarParametros --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra un mensaje de error y la sintaxis del programa.\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure errorParametros;\r
+\r
+ var\r
+ dir: dirstr;\r
+ fname: namestr;\r
+ ext: extstr;\r
+\r
+ begin\r
+ fsplit( paramstr( 0 ), dir, fname, ext );\r
+ writeln;\r
+ writeln;\r
+ writeln( 'ERROR: No se pudieron abrir los archivos o numero de parametros incorrectos.' );\r
+ writeln( ' Verifique que el archivo de comandos exista y que el archivo de salida no.' );\r
+ writeln( ' Ademas asegurese de que tenga permiso de escritura en la unidad que desee' );\r
+ writeln( ' guardar el archivo de salida.' );\r
+ writeln;\r
+ writeln( 'Modo de uso:' );\r
+ writeln( ' ', fname, ' archivo_entrada archivo_salida' );\r
+ writeln;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento errorParametros --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Muestra mensaje introductorio en archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure intro( var f: text );\r
+\r
+ begin\r
+ writeln( f );\r
+ writeln( f );\r
+ writeln( f, 'Archivo de Comandos : ', ParamStr( 1 ) );\r
+ writeln( f, 'Archivo de Informacion : ', ParamStr( 2 ) );\r
+ writeln( f );\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un dato del tipo T_MOVIM en un string\r
+ {----------------------------------------------------------------------------}\r
+\r
+ function movimToStr( m: T_MOVIM): string;\r
+\r
+ begin\r
+ case ( m ) of\r
+ T_MOVIM_primero:\r
+ movimToStr := 'P';\r
+ T_MOVIM_ultimo:\r
+ movimToStr := 'U';\r
+ T_MOVIM_anterior:\r
+ movimToStr := 'A';\r
+ T_MOVIM_siguiente:\r
+ movimToStr := 'S';\r
+ end;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un dato del tipo ID_COMANDO en un string\r
+ {----------------------------------------------------------------------------}\r
+\r
+ function comandoToStr( c: ID_COMANDO ): string;\r
+\r
+ begin\r
+ case ( c ) of\r
+ INS:\r
+ comandoToStr := 'IN';\r
+ INSO:\r
+ comandoToStr := 'IO';\r
+ ORDEN:\r
+ comandoToStr := 'OR';\r
+ BC:\r
+ comandoToStr := 'BC';\r
+ BR:\r
+ comandoToStr := 'BR';\r
+ LS:\r
+ comandoToStr := 'LS';\r
+ LC:\r
+ comandoToStr := 'LC';\r
+ BO:\r
+ comandoToStr := 'BO';\r
+ MO:\r
+ comandoToStr := 'MO';\r
+ LI:\r
+ comandoToStr := 'LI';\r
+ else\r
+ comandoToStr := 'DE';\r
+ end;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un string en un dato del tipo ID_COMANDO\r
+ {----------------------------------------------------------------------------}\r
+\r
+ function strToComando( s: string ): ID_COMANDO;\r
+\r
+ begin\r
+ if ( ( s = 'IN' ) or ( s = 'in' ) or ( s = 'In' ) or ( s = 'iN' ) ) then\r
+ strToComando := INS\r
+ else if ( ( s = 'IO' ) or ( s = 'io' ) or ( s = 'Io' ) or ( s = 'iO' ) ) then\r
+ strToComando := INSO\r
+ else if ( ( s = 'OR' ) or ( s = 'or' ) or ( s = 'Or' ) or ( s = 'oR' ) ) then\r
+ strToComando := ORDEN\r
+ else if ( ( s = 'BC' ) or ( s = 'bc' ) or ( s = 'Bc' ) or ( s = 'bC' ) ) then\r
+ strToComando := BC\r
+ else if ( ( s = 'BR' ) or ( s = 'br' ) or ( s = 'Br' ) or ( s = 'bR' ) ) then\r
+ strToComando := BR\r
+ else if ( ( s = 'LS' ) or ( s = 'ls' ) or ( s = 'Ls' ) or ( s = 'lS' ) ) then\r
+ strToComando := LS\r
+ else if ( ( s = 'LC' ) or ( s = 'lc' ) or ( s = 'Lc' ) or ( s = 'lC' ) ) then\r
+ strToComando := LC\r
+ else if ( ( s = 'BO' ) or ( s = 'bo' ) or ( s = 'bO' ) or ( s = 'Bo' ) ) then\r
+ strToComando := BO\r
+ else if ( ( s = 'MO' ) or ( s = 'mo' ) or ( s = 'mO' ) or ( s = 'Mo' ) ) then\r
+ strToComando := MO\r
+ else if ( ( s = 'LI' ) or ( s = 'li' ) or ( s = 'Li' ) or ( s = 'lI' ) ) then\r
+ strToComando := LI\r
+ else\r
+ strToComando := DESC;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Funcion: Convierte un string en un dato del tipo T_MOVIM\r
+ {----------------------------------------------------------------------------}\r
+\r
+ function strToMovim( s: string; var error: boolean ): T_MOVIM;\r
+\r
+ begin\r
+ error := false;\r
+ if ( ( s = 'P' ) or ( s = 'p' ) ) then\r
+ strToMovim := T_MOVIM_primero\r
+ else if ( ( s = 'U' ) or ( s = 'u' ) ) then\r
+ strToMovim := T_MOVIM_ultimo\r
+ else if ( ( s = 'A' ) or ( s = 'a' ) ) then\r
+ strToMovim := T_MOVIM_anterior\r
+ else if ( ( s = 'S' ) or ( s = 's' ) ) then\r
+ strToMovim := T_MOVIM_siguiente\r
+ else begin\r
+ strToMovim := T_MOVIM_primero;\r
+ error := true;\r
+ end;\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega el texto de un comando a ejecutar en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure agregaComando( var f: text; c: T_COMANDO );\r
+\r
+ var\r
+ err: boolean;\r
+ m: string;\r
+\r
+ begin\r
+ writeln( f );\r
+ write( f, '>>> ', comandoToStr( strToComando( c.comando ) ) ); { Para que aparezca en mayusculas }\r
+ write( f, ' ; ', c.dni );\r
+ write( f, ' ; ', c.nombre );\r
+ m := movimToStr( strToMovim( c.Movimiento, err ) );\r
+ if ( err ) then begin\r
+ if ( c.movimiento = '*' ) then\r
+ m := 'Desconocido'\r
+ else\r
+ m := 'Ninguno';\r
+ end;\r
+ write( f, ' ; ', m ); { Para que aparezca en mayusculas }\r
+ write( f, ' ; ', c.dni_hasta );\r
+ writeln( f );\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega mensaje de error en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure agregaError( var f: text; cmd, msg: string );\r
+\r
+ begin\r
+ writeln( f, ' * ' + comandoToStr( strToComando( cmd ) ) + ' ERROR: ' + msg );\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+\r
+\r
+ {----------------------------------------------------------------------------}\r
+ {- Procedimiento: Agrega mensaje de error en el archivo de salida\r
+ {----------------------------------------------------------------------------}\r
+\r
+ procedure agregaRegistro( var f: text; cmd: string; r: T_REGISTRO );\r
+\r
+ var\r
+ s1, s2: string;\r
+\r
+ begin\r
+ s1 := ' @ ' + comandoToStr( strToComando( cmd ) ) + ' REGISTRO: Clave = ';\r
+ s2 := ' | Nombre = ' + r.nombre;\r
+ writeln( f, s1, r.dni, s2 );\r
+ end;\r
+\r
+ {-- Fin del Procedimiento --}\r
+end.
\ No newline at end of file
--- /dev/null
+program TrabajoPracticoI;\r
+\r
+{\r
+ ALGORITMOS Y PROGRAMACIÓN II\r
+ ========== = ============ ==\r
+\r
+ TRABAJO PRÁCTICO NÚMERO 1\r
+ ~~~~~~~ ~~~~~~~~ ~~~~~~ ~\r
+\r
+ Catedra: Carolo\r
+ =======\r
+\r
+ 1er Cuatrimestre 2000\r
+ --- ------------ ----\r
+\r
+ Grupo: 22\r
+ =====\r
+}\r
+\r
+ uses\r
+ PROG_GRL, GRAL, TABLA, PILA_C;\r
+\r
+var\r
+ tbl: T_TABLA;\r
+ p: T_PILAC;\r
+ fEnt: T_ARCHIVO_COMANDOS;\r
+ fSal: text;\r
+ id: ID_COMANDO;\r
+ m: T_MOVIM;\r
+ c: T_COMANDO;\r
+ r: T_REGISTRO;\r
+ err: boolean;\r
+ cmd: ID_COMANDO;\r
+ valerr: integer;\r
+ s: string;\r
+ dni: T_CLAVE;\r
+\r
+begin\r
+ mensajeDeEntrada( 'Programa para procesar archivos de comandos.' );\r
+ procesarParametros( fEnt, fSal, err );\r
+ if ( err ) then begin\r
+ errorParametros;\r
+ exit; { ----------------------------------> SALE DEL PROGRAMA!!!! }\r
+ end;\r
+ intro( fSal );\r
+ { Inicializacion de TADs }\r
+ T_TABLA_Crear( tbl );\r
+ PILAC_Inicializar( p );\r
+\r
+ { Lectura de datos hasta EOF }\r
+ while ( not eof( fEnt ) ) do begin\r
+ read( fEnt, c );\r
+ cmd := strToComando( c.comando );\r
+ agregaComando( fSal, c );\r
+\r
+ { Ejecuta segun tipo comando }\r
+ case ( cmd ) of\r
+\r
+ { Insersion }\r
+ INS: begin\r
+ val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' )\r
+ else begin\r
+ r.nombre:= c.nombre;\r
+ if ( T_TABLA_Llena( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Llena!' )\r
+ else begin\r
+ m := strToMovim( c.Movimiento, err );\r
+ if ( err ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Movimiento NO valido ("' + movimToStr( m ) + '")!' )\r
+ else begin\r
+ T_TABLA_Insertar( tbl, m, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Insersion Ordenada }\r
+ INSO: begin\r
+ val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' )\r
+ else begin\r
+ r.nombre:= c.nombre;\r
+ if ( T_TABLA_Llena( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Llena!' )\r
+ else if ( not T_TABLA_Ordenada( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' )\r
+ else begin\r
+ T_TABLA_Insertar_Ord( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Ordenar }\r
+ ORDEN: begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else\r
+ T_TABLA_Ordenar( tbl );\r
+ end;\r
+\r
+ { Buscar Clave }\r
+ BC: begin\r
+ val( c.dni, dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' )\r
+ else if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else if ( not T_TABLA_Ordenada( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' )\r
+ else begin\r
+ T_TABLA_Buscar_Clave( tbl, dni, err );\r
+ if ( err ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'No se encontro la clave "' + c.dni + '"!' )\r
+ else begin\r
+ T_TABLA_Elem_Cte( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Buscar Rango }\r
+ BR: begin\r
+ val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' )\r
+ else begin\r
+ val( c.dni_hasta, dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI_hasta incorrecto!' )\r
+ else begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else if ( not T_TABLA_Ordenada( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' )\r
+ else begin\r
+ T_TABLA_Buscar_por_Rango( tbl, r.dni, dni, p, err );\r
+ if ( err ) then\r
+ agregaError( fSal, comandoToStr( cmd ),\r
+ 'No se encontro ninguna clave "' + c.dni + '-' + c.dni_hasta + '"!' )\r
+ else begin\r
+ while ( not PILAC_vacio( p ) ) do begin\r
+ PILAC_sacar( p, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+ end;\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Listar Tabla }\r
+ LS: begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else begin\r
+ T_TABLA_Mover_Cte( tbl, T_MOVIM_primero, err );\r
+ err:= false;\r
+ while ( not err ) do begin\r
+ T_TABLA_Elem_Cte( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ T_TABLA_Mover_Cte( tbl, T_MOVIM_siguiente, err );\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Listar Corriente }\r
+ LC: begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else begin\r
+ T_TABLA_Elem_Cte( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+\r
+ { Borrar Corriente }\r
+ BO: begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else begin\r
+ T_TABLA_Elem_Cte( tbl, r );\r
+ T_TABLA_Borrar_Cte( tbl );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+\r
+ { Modificar Corriente }\r
+ MO: begin\r
+ val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint }\r
+ if ( valerr <> 0 ) then { Si hay un error al convertir }\r
+ agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' )\r
+ else begin\r
+ if ( T_TABLA_Vacia( tbl ) ) then\r
+ agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' )\r
+ else begin\r
+ T_TABLA_Elem_Cte( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ r.nombre:= c.nombre;\r
+ T_TABLA_Modif_Cte( tbl, r );\r
+ agregaRegistro( fSal, comandoToStr( cmd ), r );\r
+ end;\r
+ end;\r
+ end;\r
+\r
+ { Limpiar Tabla }\r
+ LI:\r
+ T_TABLA_Limpiar( tbl );\r
+\r
+ { Comando Desconocido }\r
+ else\r
+ agregaError( fSal, comandoToStr( cmd ), 'Comando Desconocido!' )\r
+\r
+ end; { case ( cmd ) of }\r
+ end; { while ( not eof( fEnt ) ) do begin }\r
+ close( fSal );\r
+ close( fEnt );\r
+ writeln( 'Archivo ', paramstr( 1 ), ' procesado con exito.' );\r
+ writeln( 'Puede ver la salida y/o errores en el archivo ', paramstr( 2 ) );\r
+ writeln( 'FIN DEL PROGRAMA' );\r
+end.
\ No newline at end of file
--- /dev/null
+\r
+\r
+Archivo de Comandos : test.cmd\r
+Archivo de Informacion : salida.txt\r
+\r
+\r
+>>> IN ; 27215947 ; Leandro Lucarella ; P ; *\r
+ @ IN REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> IN ; 22309900 ; Roberto Ayala ; A ; *\r
+ @ IN REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+\r
+>>> IO ; 33401023 ; Pedro Almodobar ; Desconocido ; *\r
+ * IO ERROR: Tabla Desordenada!\r
+\r
+>>> IN ; 22928288 ; Juan Carlos Altavista ; U ; *\r
+ @ IN REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+\r
+>>> IN ; IN ; 78331990 ; A ; *\r
+ * IN ERROR: DNI incorrecto!\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ * BC ERROR: Tabla Desordenada!\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+\r
+>>> OR ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ @ BC REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> IO ; 56000444 ; Tito Puente ; Desconocido ; *\r
+ @ IO REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+\r
+>>> BR ; 27215947 ; * ; Desconocido ; 60000000\r
+ @ BR REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+ @ BR REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> MO ; 56000444 ; Raul Alfonsin ; Desconocido ; *\r
+ @ MO REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+ @ MO REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ @ BC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LC ; * ; * ; Desconocido ; *\r
+ @ LC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> IN ; 10923476 ; Federico Lupiz ; P ; *\r
+ @ IN REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> OR ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LI ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ * LS ERROR: Tabla Vacia!\r
--- /dev/null
+unit TABLA;\r
+\r
+{\r
+ IMPLEMENTACION : TABLA\r
+ ALMACENAMIENTO : LISTA DOBLE CON CURSORES\r
+\r
+}\r
+\r
+interface\r
+\r
+{ usa las funciones generales de TDAs }\r
+uses\r
+ GRAL, LDC, PILA_C;\r
+\r
+{ tipos propios de la tabla }\r
+type\r
+ T_TABLA = record\r
+ datos: LDC_LDC;\r
+ ordenada: boolean;\r
+ end;\r
+\r
+ T_MOVIM = ( T_MOVIM_primero, T_MOVIM_ultimo, T_MOVIM_siguiente, T_MOVIM_anterior );\r
+\r
+\r
+{ ========= }\r
+{ INTERFASE }\r
+\r
+PROCEDURE T_TABLA_Crear( VAR t: T_TABLA );\r
+{ PRE : T nunca fue creada.\r
+ POST: T creada y vacía.}\r
+FUNCTION T_TABLA_Vacia( t: T_TABLA): BOOLEAN;\r
+{ PRE : T creada.\r
+ POST: Si T tiene elementos, entonces es FALSE, sino es TRUE.}\r
+FUNCTION T_TABLA_Llena( t: T_TABLA): BOOLEAN;\r
+{ PRE : T creada.\r
+ POST: Si T tiene lugar para insertar nuevos elementos, entonces es FALSE, sino es TRUE.}\r
+FUNCTION T_TABLA_Ordenada( t: T_TABLA): BOOLEAN;\r
+{ PRE : T no vacía.\r
+ POST: Si T está ordenada, entonces es verdadero, sino es falso.}\r
+PROCEDURE T_TABLA_Elem_Cte( t: T_TABLA; VAR r: T_REGISTRO);\r
+{ PRE : T no vacía.\r
+ POST: R contiene el registro corriente.}\r
+PROCEDURE T_TABLA_Mover_Cte( VAR t: T_TABLA; m: T_MOVIM; VAR error: BOOLEAN );\r
+{ PRE : T no vacía.\r
+ POST:\r
+ Si M = primero, el nuevo corriente es el primer registro y error es falso.\r
+ Si M = ultimo, el nuevo corriente es el último registro y error es falso.\r
+ Si M = siguiente, el nuevo corriente es el siguiente registro del actual corriente y error es falso.\r
+ Si el corriente era el ultimo registro, entonces error es verdadero y el corriente sigue siendo el\r
+ ultimo registro.\r
+ Si M = anterior, el nuevo corriente es el anterior registro del actual corriente y error es falso. Si el corriente era\r
+ el primer registro, entonces error es verdadero y el corriente sigue siendo el primer registro.}\r
+PROCEDURE T_TABLA_Insertar( VAR t: T_TABLA; m: T_MOVIM; r: T_REGISTRO );\r
+{ PRE : T no llena.\r
+ POST:\r
+ Si M = primero, R se agregó, es el primer registro y el nuevo corriente.\r
+ Si M = ultimo, R se agregó, es el último registro y el nuevo corriente.\r
+ Si M = siguiente, R se agregó, es el siguiente registro del corriente, y es el nuevo corriente \r
+ Si M = anterior, R se agregó, es el anterior registro del corriente, y es el nuevo corriente.}\r
+Procedure T_TABLA_Insertar_Ord( var t: T_TABLA ; var r: T_REGISTRO);\r
+{ PRE : T no llena y ordenada.\r
+ POST: El regitro r se insertó en la tabla t de tal manera que esta continúa ordenada y r es el nuevo corriente.\r
+ Si ya existía un registro con la misma clave que r, se inserta después que este.}\r
+PROCEDURE T_TABLA_Limpiar( VAR t: T_TABLA );\r
+{ PRE : T creada.\r
+ POST: T vacía.}\r
+PROCEDURE T_TABLA_Borrar_Cte( VAR t: T_TABLA );\r
+{ PRE : T no vacía.\r
+ POST: Se elimino el registro corriente. El nuevo registro corriente es el siguiente del borrado,\r
+ si el borrado era el ultimo, entonces el nuevo corriente es el primero.}\r
+PROCEDURE T_TABLA_Modif_Cte( VAR t: T_TABLA; r: T_REGISTRO);\r
+{ PRE : T no vacía.\r
+ POST: El contenido del actual corriente fue actualizado con R. Si T estaba ordenada y no se modificaron los datos\r
+ de la clave del corriente, entonces T sigue ordenada. Si T estaba ordenada y se modificaron los datos de la clave\r
+ del corriente, entonces si la nueva clave rompe el orden de T, T no está más ordenada.}\r
+PROCEDURE T_TABLA_Ordenar( VAR t: T_TABLA );\r
+{ PRE : T no vacía.\r
+ POST: T se encuentra ordenada por la clave de sus registros.}\r
+PROCEDURE T_TABLA_Buscar_Clave( VAR t: T_TABLA; c: T_CLAVE; var error: boolean );\r
+{ PRE : T no vacía y ordenada.\r
+ POST: Si C es una clave que existe en T, entonces el nuevo corriente es el registro con clave C y error es falso,\r
+ si no error es verdadero y el corriente es el elemento más cercano al buscado cuya clave es mayor que c.}\r
+PROCEDURE T_TABLA_Buscar_Por_Rango( VAR t: T_TABLA; desde, hasta: T_CLAVE; var p: T_PILAC; var error: boolean );\r
+{ PRE : T no vacía y ordenada. El valor de la clave desde es menor que el valor de la clave hasta. La pila p está vacía.\r
+ POST: Tengo todos los registros cuyas claves se encuetran entre los valores desde y hasta almacendados en la pila p,\r
+ si encuontró como mínimo una clave. El valor de error es false.\r
+ Si no encontró ninguna clave, entonces p sigue vacía y error es true.}\r
+\r
+implementation\r
+\r
+PROCEDURE T_TABLA_Crear( VAR t: T_TABLA );\r
+ begin\r
+ LDC_Inicializar( t.datos );\r
+ t.ordenada := true;\r
+ end;\r
+\r
+FUNCTION T_TABLA_Vacia( t: T_TABLA): BOOLEAN;\r
+ begin\r
+ T_TABLA_Vacia := LDC_vacio( t.datos );\r
+ end;\r
+\r
+FUNCTION T_TABLA_Llena( t: T_TABLA): BOOLEAN;\r
+ begin\r
+ T_TABLA_Llena := LDC_lleno( t.datos );\r
+ end;\r
+\r
+FUNCTION T_TABLA_Ordenada( t: T_TABLA): BOOLEAN;\r
+ begin\r
+ T_TABLA_Ordenada := t.ordenada;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Elem_Cte( t: T_TABLA; VAR r: T_REGISTRO);\r
+ begin\r
+ LDC_elem_cte( t.datos, r );\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Mover_Cte( VAR t: T_TABLA; m: T_MOVIM; VAR error: BOOLEAN );\r
+ var mov: LDC_movimiento;\r
+ begin\r
+ error := false;\r
+ if ( m <> T_MOVIM_ultimo ) then begin\r
+ case m of\r
+ T_MOVIM_primero:\r
+ mov := LDC_primero;\r
+ T_MOVIM_siguiente:\r
+ mov := LDC_siguiente;\r
+ T_MOVIM_anterior:\r
+ mov := LDC_anterior;\r
+ end;\r
+ LDC_mover_cte( t.datos, mov, error );\r
+ end\r
+ else begin\r
+ while ( not error ) do\r
+ LDC_mover_cte( t.datos, LDC_siguiente, error );\r
+ error := false;\r
+ end;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Insertar( VAR t: T_TABLA; m: T_MOVIM; r: T_REGISTRO );\r
+ var mov : LDC_movimiento;\r
+ error: boolean;\r
+ begin\r
+ if ( m <> T_MOVIM_ultimo ) then begin\r
+ case m of\r
+ T_MOVIM_primero:\r
+ mov := LDC_primero;\r
+ T_MOVIM_siguiente:\r
+ mov := LDC_siguiente;\r
+ T_MOVIM_anterior:\r
+ mov := LDC_anterior;\r
+ end;\r
+ LDC_insertar( t.datos, mov, r );\r
+ end\r
+ else begin\r
+ if ( not T_TABLA_Vacia( t ) ) then\r
+ T_TABLA_Mover_Cte( t, T_MOVIM_ultimo, error);\r
+ LDC_insertar( t.datos, LDC_siguiente, r );\r
+ end;\r
+ t.ordenada := false;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Insertar_Ord( var t: T_TABLA ; var r: T_REGISTRO);\r
+ var\r
+ err: boolean;\r
+ reg: T_REGISTRO;\r
+\r
+ begin\r
+ T_TABLA_Buscar_Clave( t, r.dni, err ); {me queda el corriente en el posterior mas cercano}\r
+ T_TABLA_Elem_Cte( t, reg );\r
+ if ( reg.dni > r.dni ) then\r
+ T_TABLA_Insertar( t, T_MOVIM_anterior, r )\r
+ else\r
+ T_TABLA_Insertar( t, T_MOVIM_siguiente, r );\r
+ t.ordenada:= true\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Limpiar( VAR t: T_TABLA );\r
+ begin\r
+ LDC_vaciar( t.datos );\r
+ t.ordenada := true;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Borrar_Cte( VAR t: T_TABLA );\r
+ begin\r
+ LDC_borrar_cte( t.datos );\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Modif_Cte( VAR t: T_TABLA; r: T_REGISTRO);\r
+ var\r
+ tmp: T_REGISTRO;\r
+ begin\r
+ T_TABLA_Elem_Cte( t, tmp );\r
+ if ( r.dni <> tmp.dni ) then\r
+ t.ordenada := false;\r
+ LDC_modif_cte( t.datos, r );\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Ordenar( VAR t: T_TABLA );\r
+ var\r
+ tmp: T_TABLA;\r
+ r: T_REGISTRO;\r
+ err: boolean;\r
+ actual: T_CLAVE;\r
+\r
+ begin\r
+ T_TABLA_Elem_Cte( t, r );\r
+ actual := r.dni;\r
+ err := false;\r
+ T_TABLA_Crear( tmp );\r
+ LDC_copiar( t.datos, tmp.datos );\r
+ T_TABLA_Limpiar( t );\r
+ T_TABLA_Elem_cte( tmp, r );\r
+ T_TABLA_Insertar( t, T_MOVIM_primero, r );\r
+ T_TABLA_Mover_Cte( tmp, T_MOVIM_siguiente, err );\r
+ while ( not err ) do begin\r
+ T_TABLA_Elem_cte(tmp, r);\r
+ T_TABLA_Insertar_Ord(t, r);\r
+ T_TABLA_Mover_Cte( tmp, T_MOVIM_siguiente, err );\r
+ end;\r
+ T_TABLA_Buscar_Clave( t, actual, err );\r
+ t.ordenada:= true;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Buscar_Clave( VAR t: T_TABLA; c: T_CLAVE; var error: boolean );\r
+ var\r
+ r: T_REGISTRO;\r
+\r
+ begin\r
+ error:= false;\r
+ T_TABLA_Mover_Cte( t, T_MOVIM_primero, error );\r
+ T_TABLA_Elem_Cte( t, r );\r
+ while ( ( r.dni < c ) and not error ) do begin\r
+ T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, error );\r
+ T_TABLA_Elem_Cte( t, r );\r
+ end;\r
+ if ( r.dni <> c ) then\r
+ error := true;\r
+ end;\r
+\r
+PROCEDURE T_TABLA_Buscar_Por_Rango( VAR t: T_TABLA; desde, hasta: T_CLAVE; var p: T_PILAC; var error: boolean );\r
+ var\r
+ err: boolean;\r
+ r: T_REGISTRO;\r
+\r
+ begin\r
+ error:= true;\r
+ T_TABLA_Buscar_Clave( t, desde, err );\r
+ T_TABLA_Elem_Cte( t, r );\r
+ if ( r.DNI <= hasta ) then begin\r
+ PILAC_poner( p, r );\r
+ T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, err );\r
+ T_TABLA_Elem_Cte( t, r );\r
+ while ( ( r.DNI <= hasta ) and not err ) do begin\r
+ PILAC_poner( p, r );\r
+ T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, err );\r
+ T_TABLA_Elem_Cte( t, r );\r
+ end;\r
+ error := false;\r
+ end;\r
+ end;\r
+\r
+end.
\ No newline at end of file
--- /dev/null
+\r
+\r
+Archivo de Comandos : test.bin\r
+Archivo de Informacion : test.txt\r
+\r
+\r
+>>> IN ; 27215947 ; Leandro Lucarella ; P ; *\r
+ @ IN REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> IN ; 22309900 ; Roberto Ayala ; A ; *\r
+ @ IN REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+\r
+>>> IO ; 33401023 ; Pedro Almodobar ; Desconocido ; *\r
+ * IO ERROR: Tabla Desordenada!\r
+\r
+>>> IN ; 22928288 ; Juan Carlos Altavista ; U ; *\r
+ @ IN REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+\r
+>>> IN ; IN ; 78331990 ; A ; *\r
+ * IN ERROR: DNI incorrecto!\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ * BC ERROR: Tabla Desordenada!\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+\r
+>>> OR ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ @ BC REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> IO ; 56000444 ; Tito Puente ; Desconocido ; *\r
+ @ IO REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+\r
+>>> BR ; 27215947 ; * ; Desconocido ; 60000000\r
+ @ BR REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+ @ BR REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+\r
+>>> MO ; 56000444 ; Raul Alfonsin ; Desconocido ; *\r
+ @ MO REGISTRO: Clave = 56000444 | Nombre = Tito Puente\r
+ @ MO REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> BC ; 27215947 ; * ; Desconocido ; *\r
+ @ BC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LC ; * ; * ; Desconocido ; *\r
+ @ LC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> IN ; 10923476 ; Federico Lupiz ; P ; *\r
+ @ IN REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> OR ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz\r
+ @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala\r
+ @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist\r
+ @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella\r
+ @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin\r
+\r
+>>> LI ; * ; * ; Desconocido ; *\r
+\r
+>>> LS ; * ; * ; Desconocido ; *\r
+ * LS ERROR: Tabla Vacia!\r