Import inicial después del "/var incident". :(
authorLeandro Lucarella <llucax@gmail.com>
Sun, 23 Mar 2003 07:10:16 +0000 (07:10 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 23 Mar 2003 07:10:16 +0000 (07:10 +0000)
12 files changed:
DESCRIPCION.TXT [new file with mode: 0644]
TP1-1C-2000.rtf [new file with mode: 0644]
arch_cmd.pas [new file with mode: 0644]
gral.pas [new file with mode: 0644]
ldc.pas [new file with mode: 0644]
pila_c.pas [new file with mode: 0644]
prog_grl.pas [new file with mode: 0644]
programa.pas [new file with mode: 0644]
salida.txt [new file with mode: 0644]
tabla.pas [new file with mode: 0644]
test.txt [new file with mode: 0644]
turbo.dsk [new file with mode: 0644]

diff --git a/DESCRIPCION.TXT b/DESCRIPCION.TXT
new file mode 100644 (file)
index 0000000..743887d
--- /dev/null
@@ -0,0 +1,44 @@
+\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
diff --git a/TP1-1C-2000.rtf b/TP1-1C-2000.rtf
new file mode 100644 (file)
index 0000000..f1039d1
--- /dev/null
@@ -0,0 +1,281 @@
+{\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
diff --git a/arch_cmd.pas b/arch_cmd.pas
new file mode 100644 (file)
index 0000000..20ffc90
--- /dev/null
@@ -0,0 +1,70 @@
+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
diff --git a/gral.pas b/gral.pas
new file mode 100644 (file)
index 0000000..d6f0641
--- /dev/null
+++ b/gral.pas
@@ -0,0 +1,50 @@
+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
diff --git a/ldc.pas b/ldc.pas
new file mode 100644 (file)
index 0000000..f3fc655
--- /dev/null
+++ b/ldc.pas
@@ -0,0 +1,373 @@
+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
diff --git a/pila_c.pas b/pila_c.pas
new file mode 100644 (file)
index 0000000..04e5002
--- /dev/null
@@ -0,0 +1,226 @@
+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
diff --git a/prog_grl.pas b/prog_grl.pas
new file mode 100644 (file)
index 0000000..92c5659
--- /dev/null
@@ -0,0 +1,366 @@
+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
diff --git a/programa.pas b/programa.pas
new file mode 100644 (file)
index 0000000..ac755d6
--- /dev/null
@@ -0,0 +1,225 @@
+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
diff --git a/salida.txt b/salida.txt
new file mode 100644 (file)
index 0000000..ba9d80f
--- /dev/null
@@ -0,0 +1,85 @@
+\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
diff --git a/tabla.pas b/tabla.pas
new file mode 100644 (file)
index 0000000..f88be52
--- /dev/null
+++ b/tabla.pas
@@ -0,0 +1,262 @@
+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
diff --git a/test.txt b/test.txt
new file mode 100644 (file)
index 0000000..227e040
--- /dev/null
+++ b/test.txt
@@ -0,0 +1,85 @@
+\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
diff --git a/turbo.dsk b/turbo.dsk
new file mode 100644 (file)
index 0000000..1cf1778
Binary files /dev/null and b/turbo.dsk differ