From d243edb83c53aebfe1386bc55470ce9d907d0f69 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Sun, 23 Mar 2003 07:10:16 +0000 Subject: [PATCH 1/1] =?utf8?q?Import=20inicial=20despu=C3=A9s=20del=20"/va?= =?utf8?q?r=20incident".=20:(?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- DESCRIPCION.TXT | 44 ++++++ TP1-1C-2000.rtf | 281 ++++++++++++++++++++++++++++++++++++ arch_cmd.pas | 70 +++++++++ gral.pas | 50 +++++++ ldc.pas | 373 ++++++++++++++++++++++++++++++++++++++++++++++++ pila_c.pas | 226 +++++++++++++++++++++++++++++ prog_grl.pas | 366 +++++++++++++++++++++++++++++++++++++++++++++++ programa.pas | 225 +++++++++++++++++++++++++++++ salida.txt | 85 +++++++++++ tabla.pas | 262 ++++++++++++++++++++++++++++++++++ test.txt | 85 +++++++++++ turbo.dsk | Bin 0 -> 3654 bytes 12 files changed, 2067 insertions(+) create mode 100644 DESCRIPCION.TXT create mode 100644 TP1-1C-2000.rtf create mode 100644 arch_cmd.pas create mode 100644 gral.pas create mode 100644 ldc.pas create mode 100644 pila_c.pas create mode 100644 prog_grl.pas create mode 100644 programa.pas create mode 100644 salida.txt create mode 100644 tabla.pas create mode 100644 test.txt create mode 100644 turbo.dsk diff --git a/DESCRIPCION.TXT b/DESCRIPCION.TXT new file mode 100644 index 0000000..743887d --- /dev/null +++ b/DESCRIPCION.TXT @@ -0,0 +1,44 @@ + + +Descripcion de los Archivos: +=========== == === ======== + +Programa Principal del TP. +-------- --------- --- -- + PROGRAMA.EXE Ejecutable. + PROGRAMA.PAS Codigo fuente. + +Programa para generar archivos de comando. +-------- ---- ------- -------- -- ------- + ARCH_CMD.EXE Ejecutable. + ARCH_CMD.PAS Codigo fuente. + +Archivos de Prueba. +-------- -- ------ + TEST.CMD Archivo de Comandos de Prueba. + TEST.TXT Resultados de la ejecución de TEST.CMD + +Unidad General para la TDA TABLA. +------ ------- ---- -- --------- + GRAL.PAS Codigo fuente. + GRAL.TPU Unidad compilada. + +Unidad con la TDA de Lista Doblemente Enlazada. +------ --- -- --- -- ----- ---------- -------- + LDC.PAS Codigo fuente. + LDC.TPU Unidad compilada. + +Unidad con la TDA de Pila implementada con Cursores. +------ --- -- --- -- ---- ------------ --- -------- + PILA_C.PAS Codigo fuente. + PILA_C.TPU Unidad compilada. + +Unidad con Funciones, Procedimientos y Tipos Generales para trabajar con archivos de comandos. +------ --- --------- -------------- - ----- --------- ---- -------- --- -------- -- -------- + PROG_GRL.PAS Codigo fuente. + PROG_GRL.TPU Unidad compilada. + +Unidad con la TDA TABLA. +------ --- -- --- ----- + TABLA.PAS Codigo fuente. + 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 index 0000000..f1039d1 --- /dev/null +++ b/TP1-1C-2000.rtf @@ -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;} +{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f5\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica;} +{\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;} +{\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;} +{\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;} +{\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;} +{\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);} +{\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; +\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; +\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;}{ +\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 +\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;}{ +\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 +\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;}{ +\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 +\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 +\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;}{ +\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 +\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 +\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 +\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 +\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;}{ +\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 +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 +\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 +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 +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 +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 +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 +\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 +\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 +\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 +\'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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +{\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 +\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 +\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 +\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 +\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 +\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} +{\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} +{\printim\yr2000\mo4\dy12\hr15\min59}{\version2}{\edmins54}{\nofpages4}{\nofwords1148}{\nofchars6546}{\*\company Luca - Soft}{\nofcharsws8038}{\vern8249}}\margl1134\margr1134\margt3166\margb964 +\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale114\viewzk2\nolnhtadjtbl \fet0\sectd +\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 +\cellx6207\clvertalt\clbrdrt\brdrs\brdrw20\brsp40\brdrcf15 \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw20\brsp40\brdrcf15 \clcbpat1\cltxlrtb\clftsWidth3\clwWidth3970 \cellx10177\pard\plain +\s18\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \b\f1\fs28\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 { +\par }\pard\plain \s19\qc \li0\ri0\keepn\nowidctlpar\intbl\faauto\rin0\lin0 \b\i\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs20 +\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 +\b\i\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs20 +\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 +\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 +\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 +\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 +\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 +\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 +}\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 +\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 +\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 +\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 +}\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 +\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 +\clcbpat18\cltxlrtb\clftsWidth3\clwWidth1418 \cellx8476\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \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 \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 +}\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 { +\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 )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\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 +\f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\fs24 Trabajo Pr\'e1ctico 1- TDA TABLA +\par }{ +\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 +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 +s de las primitivas del TDA TABLA. +\par +\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: +\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 +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). +\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. +\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. +\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. +\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. +\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Borrar Corriente: Elimina el elemento actual de la TABLA. +\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. +\par {\listtext\pard\plain\s15 \f3\fs22 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Limpiar TABLA: Elimina todo el contenido de la TABLA. +\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. +\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 +ltimo commit/rollback, una vez hecho un commit, no se pueden deshacer las modificaciones realizadas. +\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 +ltimo commit/rollback, una vez hecho un rollback, no se pueden recuperar las modificaciones realizadas. +\par }\pard \s15\qj \li1080\ri0\nowidctlpar\faauto\rin0\lin1080\itap0 {\i\fs22 Estas dos \'faltimas operaciones no deben ser implementadas. +\par }\pard \s15\qj \li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 {\fs22 +\par }{\fs22\ul Primitivas del TDA TABLA +\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) +\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. +\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: T creada y vac\'eda. +\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 +\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. +\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. +\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 +\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. +\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. +\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 +\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. +\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. +\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 ) +\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. +\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: R contiene el registro corriente. +\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 ) +\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. +\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. +\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. +\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. +\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. +\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 ) +\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. +\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. +\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. +\par Si M = siguiente, R se agreg\'f3, es el siguiente registro del corriente, y es el nuevo corriente +\par Si M = anterior, R se agreg\'f3, es el anterior registro del corriente, y es el nuevo corriente. +\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 ) +\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. +\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. +\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 ) +\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. +\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. +\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 ) +\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. +\par {\listtext\pard\plain\s15 \f2\fs22 \hich\af2\dbch\af0\loch\f2 o\tab}POST: El contenido del actual corriente fue actualizado co +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 +s ordenada. +\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 ) +\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. +\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. +\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) +\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. +\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. +\par }\pard \s15\qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22 +\par }\pard\plain \s21\qj \li720\ri0\keepn\nowidctlpar\faauto\rin0\lin720\itap0 \f11\fs22\ul\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {Enunciado +\par }\pard\plain \s28\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f11\fs22\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {Se pide: +\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 +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). + +\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. + +\par }\pard\plain \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs22 Tambi\'e9 +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 +rcionada por la c\'e1tedra). +\par Los datos que debe almacenar el TDA TABLA son: DNI (clave) y NOMBRE (datos). +\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 +e son procedimientos de aplicacion complejos, el resto en general son llamadas directas de las primitivas de TABLA a las primitivas de LISTA.}{ +\par }{\fs22 +\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 + 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. +\par }\pard \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 {\fs22 El archivo de entrada contendr\'e1 comandos que indican operaciones. +\par Este archivo es una archivo secuencial y tiene el siguiente formato de registro: +\par }{\f0\fs22 \tab T_registro_entrada = record +\par \tab \tab }{\f0\fs22\lang1033\langfe3082\langnp1033 Comando\tab : string[2];}{\lang1033\langfe3082\langnp1033 +\par }{\f0\fs22\lang1033\langfe3082\langnp1033 \tab \tab DNI\tab \tab : string[8]; +\par \tab \tab Nombre\tab : string[40]; +\par \tab \tab Movimiento\tab : string[1]; +\par \tab \tab DNI_hasta\tab : string[8]; +\par \tab End; +\par }{\fs22\lang1033\langfe3082\langnp1033 +\par }{\fs22 Los comandos posibles y sus par\'e1metros son los siguientes: +\par \tab +\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 +\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 +\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 +\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 +\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 +\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 +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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 \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 \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\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 +\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 +\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 +\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 +\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {IO\cell Insertar Ordenado\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 \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\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\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 \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\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 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {OR\cell Ordenar Tabla\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 \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\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\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 \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\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 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {BC\cell +Buscar por Clave\cell \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 +\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 +\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 +\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 +\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 +\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 +\s15\qc \li0\ri0\nowidctlpar\intbl\faauto\rin0\lin0 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {BR\cell Buscar por Rango\cell \cell *\cell *\cell \cell Datos Rango\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\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 \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\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 \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\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 \f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {LS\cell +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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +\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 +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 +\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 +\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 +\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 +\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 +\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 +\f11\fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {MO \cell Modificar\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 \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\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\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 \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\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrr\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 \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\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 \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\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\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 {LI\cell Limpiar Tabla\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 \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\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\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 \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\brdrs\brdrw5\brsp40\brdrcf1 \clbrdrb +\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 +\par En el caso que no corresponda pasar alg\'fan par\'e1metro, dicho campo en el archivo contendr\'e1 un *. +\par +\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: +\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 +nea del archivo de entrada procesada se debe grabar una l\'ednea en el archivo de salida indicando el comando recibido. +\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). +\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 +nea en el archivo de salida por cada elemento a mostrar con los datos: . +\par }\pard \s15\qj \li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 {\fs22 +\par }\pard \s15\qj \li1134\ri0\nowidctlpar\faauto\rin0\lin1134\itap0 {\fs22 +\par }\pard \s15\qj \fi720\li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22 +\par }} \ No newline at end of file diff --git a/arch_cmd.pas b/arch_cmd.pas new file mode 100644 index 0000000..20ffc90 --- /dev/null +++ b/arch_cmd.pas @@ -0,0 +1,70 @@ +program GeneradorDeArchivosDeComandos; +{ + Programa para generar archivos de comandos +} + +uses + PROG_GRL, DOS; + +var + fSal: T_ARCHIVO_COMANDOS; + c: T_COMANDO; + dir: dirstr; + fname: namestr; + ext: extstr; + +begin + mensajeDeEntrada( 'Programa para crear archivos de comandos.' ); + if paramcount < 1 then begin + fsplit( paramstr( 0 ), dir, fname, ext ); + writeln; + writeln; + writeln( 'ERROR: numero de parametros incorrectos.' ); + writeln; + writeln( 'Modo de uso:' ); + writeln( ' ', fname, ' archivo_entrada' ); + writeln; + writeln; + writeln( 'Numero de parametros incorrecto. Uso comandos ' ); + exit; { -------------------------------------> SALE DEL PROGRAMA!!!!!!!!!! } + end; + if ( not existeArchivo( paramstr( 1 ) ) ) then + writeln( 'Escribiendo en el "', paramstr( 1 ), '".' ) + else + writeln( 'Sobrescribiendo en el archivo "', paramstr( 1 ), '".' ); + assign( fSal, paramstr( 1 ) ); + rewrite( fSal ); + while true do begin { Repite hasta que el comando sea nulo } + writeln; + writeln; + writeln( 'INGRESO DE UN NUEVO REGISTRO' ); + writeln( '======= == == ===== ========' ); + writeln; + write( 'Comando (IN, IO, OR, BC, BR, LS, LC, BO, MO, LI): ' ); + readln( c.comando ); + if ( c.comando = '' ) then + exit; { ----------> SALE DEL PROGRAMA!!!!!!!!!! } + write( 'DNI: ' ); + readln( c.dni ); + if ( c.dni = '' ) then + c.dni := '*'; + write( 'Nombre: ' ); + readln( c.nombre ); + if ( c.nombre = '' ) then + c.nombre := '*'; + write( 'Movimiento (P, U, A, S): ' ); + readln( c.movimiento ); + if ( c.movimiento = '' ) then + c.movimiento := '*'; + write( 'DNI_hasta: ' ); + readln( c.dni_hasta ); + if ( c.dni_hasta = '' ) then + c.dni_hasta := '*'; + write( fSal, c ); + end; + writeln; + writeln( 'Se escribio correctamente el archivo "', paramstr( 1 ), '".' ) + writeln( 'FIN DEL PROGRAMA' ) + writeln; +end. + diff --git a/gral.pas b/gral.pas new file mode 100644 index 0000000..d6f0641 --- /dev/null +++ b/gral.pas @@ -0,0 +1,50 @@ +unit GRAL; +{ funciones y datos y tipo generales de los TDA de almacenamiento } + +interface + +{ aca se define el famoso tipo_elem } +type + T_GRAL_DNI = longint; + T_GRAL_Persona = record + dni : T_GRAL_DNI; + nombre : String[20]; + end; + + T_CLAVE = T_GRAL_DNI; + T_REGISTRO = T_GRAL_Persona; + +{ esta funcion devuelve la clave de un elemento almacenado } +{ PRE : ninguna } +{ POST: devuelve la clave de un elemento E } +function T_GRAL_Devolver_Clave_Elem( r: T_REGISTRO): T_CLAVE; + +{ este procedimiento se usa en recorridos e imprime los datos del elemento } +{ PRE : ninguna } +{ POST: se imprimieron los datos } +procedure T_GRAL_Procesar_Elem_Recorrido ( var r: T_REGISTRO); + +{ compara dos elementos completos para ver si cumplen con el criterio o no } +FUNCTION T_GRAL_Comparar_Elementos( a: T_REGISTRO; b: T_REGISTRO ): boolean; + +implementation + +{ esta funcion devuelve la clave de un elemento almacenado } +function T_GRAL_Devolver_Clave_Elem( r: T_REGISTRO): T_CLAVE; +begin + T_GRAL_Devolver_Clave_Elem := r.dni; +end; + +{ este procedimiento se usa en recorridos e imprime los datos del elemento } +procedure T_GRAL_Procesar_Elem_Recorrido ( var r: T_REGISTRO); +BEGIN + +END; + +{ compara dos elementos completos para ver si cumplen con el criterio o no } +FUNCTION T_GRAL_Comparar_elementos( a: T_REGISTRO; b: T_REGISTRO ): boolean; +BEGIN + T_GRAL_Comparar_Elementos := ( a.dni = b.dni ); +END; + +end. diff --git a/ldc.pas b/ldc.pas new file mode 100644 index 0000000..f3fc655 --- /dev/null +++ b/ldc.pas @@ -0,0 +1,373 @@ +unit LDC; + +{ + IMPLEMENTACION : LISTAS DOBLES + ALMACENAMIENTO : CURSORES + +} + +{ ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular } +interface + +{ usa las funciones generales de TDAs } +uses GRAL; + +{ maximo tamano del cursor } +const LDC_MAX_CURSOR = 100; + +{ tipos propios de la lista para definir el cursor } +TYPE + LDC_puntero = integer; + +const + LDC_nulo : LDC_puntero = 0; + +type + + LDC_nodo = RECORD + Elem : T_REGISTRO; + Sig : LDC_puntero; + Ant : LDC_puntero; + END; + + + { ahora le toca definir el cursor } + LDC_Almac = record + almacenamiento : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Nodo; + siguientes : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Puntero; + { anteriores : array [ 1 .. LDC_MAX_CURSOR ] of LDC_Puntero; PREGUNTAR SI ES NECESARIO } + primero_dispo : LDC_Puntero; + end; + + + LDC_LDC = RECORD + almac : LDC_Almac; + primero: LDC_puntero; + corriente : LDC_puntero; + END; + + LDC_movimiento = ( LDC_primero, LDC_siguiente, LDC_anterior ); + + +{ ========= } +{ INTERFASE } + + +PROCEDURE LDC_Inicializar( VAR l: LDC_LDC ); +FUNCTION LDC_vacio( l: LDC_LDC): BOOLEAN; +FUNCTION LDC_lleno( l: LDC_LDC): BOOLEAN; +PROCEDURE LDC_elem_cte( l: LDC_LDC; VAR r: T_REGISTRO); +PROCEDURE LDC_modif_cte( VAR l: LDC_LDC; r: T_REGISTRO); +PROCEDURE LDC_mover_cte( VAR l: LDC_LDC; m: LDC_movimiento; VAR error: BOOLEAN ); +PROCEDURE LDC_borrar_cte( VAR l: LDC_LDC ); +PROCEDURE LDC_insertar( VAR l: LDC_LDC; m: LDC_movimiento; r: T_REGISTRO ); +PROCEDURE LDC_vaciar( VAR l: LDC_LDC ); +PROCEDURE LDC_copiar( a: LDC_LDC; VAR b: LDC_LDC ); + +implementation + +{ CURSORES DE ESTA IMPLEMENTACION } +{ ========================================================================== } +{ inicializar el almacenamiento } +{ PRE : 'almac' no esta inicializado } +{ POST: 'almac' esta inicializado y vacio } +procedure LDC_Almac_Inicializar( VAR almac : LDC_Almac ); +var i : LDC_Puntero; +begin + almac.primero_dispo := 1; + for i := 1 to LDC_MAX_CURSOR - 1 do + begin + almac.siguientes[i] := i + 1; + end; +{ for i := 1 to LDC_CURSOR_MAX - 1 do + begin + almac.anteriores[i + 1] := i; PREGUNTAR !!!!!! + end;} + almac.siguientes[LDC_MAX_CURSOR] := LDC_Nulo; + {almac.anteriores[1] := LDC_Nulo;} +end; + +{ ========================================================================== } +{ saber si hay lugar para reservar un nuevo elemento en el almacenamiento } +{ PRE : 'almac' esta inicializado } +{ POST: si hay lugar en 'almac' para un nuevo elemento, + entonces retorna TRUE y sino FALSE } +function LDC_Almac_HayLugar( almac : LDC_Almac ): boolean; +begin + LDC_Almac_HayLugar := ( almac.primero_dispo <> LDC_Nulo ); +end; + +{ ========================================================================== } +{ el pedido de un nuevo elemento al almacenamiento } +{ PRE : 'almac' esta inicializado } +{ POST: si hay lugar en 'almac' para un nuevo elemento, + entonces 'puntero' tiene una referencia a un nuevo elemento del almacenamiento + sino 'puntero' tiene el valor TTDA_Nulo } +procedure LDC_Almac_Reservar( VAR almac : LDC_Almac; VAR puntero : LDC_Puntero ); +begin + if not LDC_Almac_HayLugar( almac ) then + puntero := LDC_Nulo + else begin + puntero := almac.primero_dispo; + almac.primero_dispo := almac.siguientes[ puntero ]; + end; +end; + +{ ========================================================================== } +{ liberar un elemento del almacenamiento } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: 'almac' libero el nodo apuntado por 'puntero' y 'puntero' vale TTDA_Nulo } +procedure LDC_Almac_Liberar( VAR almac : LDC_Almac; VAR puntero : LDC_Puntero ); +begin + almac.siguientes[ puntero ] := almac.primero_dispo; + almac.primero_dispo := puntero; + puntero := LDC_Nulo; +end; + +{ ========================================================================== } +{ acceder al elemento del almacenamiento apuntado por un puntero } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: 'elemento' tiene una copia del elemento apuntado por 'puntero' } +procedure LDC_Almac_Acceder( almac : LDC_Almac; puntero : LDC_Puntero; VAR elemento : LDC_Nodo ); +begin + elemento := almac.almacenamiento[ puntero ]; +end; + +{ ========================================================================== } +{ modificar el elemento del almacenamiento apuntado por un puntero } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: el elemento de 'almac' apuntado por 'puntero' tiene una copia de 'elemento' } +procedure LDC_Almac_Modificar( VAR almac : LDC_Almac; puntero : LDC_Puntero; elemento : LDC_Nodo ); +begin + almac.almacenamiento[ puntero ] := elemento; +end; + + + +{ Estas son los dos procedimientos principales de la aplicacion } + +PROCEDURE LDC_Inicializar( VAR l: LDC_LDC ); +BEGIN + LDC_Almac_Inicializar( l.almac ); + l.primero := LDC_Nulo; + l.corriente := LDC_Nulo; +END; + +FUNCTION LDC_vacio( l: LDC_LDC): BOOLEAN; +BEGIN + LDC_vacio := ( l.Primero = LDC_Nulo); +END; + +FUNCTION LDC_lleno( l: LDC_LDC): BOOLEAN; +BEGIN + LDC_lleno := not LDC_Almac_HayLugar( l.almac ); +END; + +PROCEDURE LDC_elem_cte( l: LDC_LDC; VAR r: T_REGISTRO); +var n : LDC_Nodo; +BEGIN + { accedo al almacenamiento por el nodo corriente } + LDC_Almac_Acceder( l.almac, l.Corriente, n ); + + { y se lo asigno al parametro } + r := n.Elem; +END; + +PROCEDURE LDC_modif_cte( VAR l: LDC_LDC; r: T_REGISTRO); +var n : LDC_Nodo; +BEGIN + { accedo al almacenamiento por el nodo corriente } + LDC_Almac_Acceder( l.almac, l.Corriente, n ); + + { y la asigno al parametro } + n.Elem := r; + + { y modifico el almacenamiento } + LDC_Almac_Modificar( l.almac, l.Corriente, n ); +END; + +PROCEDURE LDC_mover_cte( VAR l: LDC_LDC; m: LDC_movimiento; VAR error: BOOLEAN ); +VAR n : LDC_Nodo; +BEGIN + error := FALSE; + CASE m OF + LDC_primero: + l.Corriente := l.Primero; + LDC_siguiente: begin + { accedo al almacenamiento por el nodo corriente } + LDC_Almac_Acceder( l.almac, l.Corriente, n ); + + IF ( n.Sig = LDC_Nulo ) THEN + error := TRUE + ELSE + l.corriente := n.sig; + end; + LDC_anterior: begin + { accedo al almacenamiento por el nodo corriente } + LDC_Almac_Acceder( l.almac, l.Corriente, n ); + + IF ( n.ant = LDC_Nulo ) THEN + error := TRUE + ELSE + l.corriente := n.ant; + end; + END; +END; + +PROCEDURE LDC_borrar_cte( VAR l: LDC_LDC ); +VAR nc : LDC_Nodo; { Nodo Corriente } + nac : LDC_Nodo; { Nodo Anterior al Corriente } + npc: LDC_Nodo; { Nodo Posterior al Corriente } + tmpp: LDC_Puntero; +BEGIN + if l.corriente = l.primero then begin + LDC_Almac_Acceder( l.almac, l.primero, nc ); + l.primero := nc.Sig; + LDC_Almac_Liberar( l.almac, l.corriente ); + l.corriente := l.primero; + if ( l.primero <> LDC_Nulo ) then begin { SI NO ERA EL UNICO ELEMENTO } + LDC_Almac_Acceder( l.almac, l.primero, nc ); {--------------} + nc.Ant := LDC_Nulo; {-------------------------- PREGUNTAR } + LDC_Almac_Modificar( l.almac, l.primero, nc); {-------------} + end; + end + else begin + LDC_Almac_Acceder( l.almac, l.corriente, nc ); + LDC_Almac_Acceder( l.almac, nc.Ant, nac ); + nac.Sig := nc.Sig; + LDC_Almac_Modificar( l.almac, nc.Ant, nac ); + if ( nc.Sig <> LDC_Nulo ) then begin + LDC_Almac_Acceder( l.almac, nc.Sig, npc ); + npc.Ant := nc.Ant; + LDC_Almac_Modificar( l.almac, nc.Sig, npc ); + end; + LDC_Almac_Liberar( l.almac, l.corriente ); + if ( nc.Ant <> LDC_Nulo ) then + l.corriente := nc.Ant + else + l.corriente := nc.Sig; + end; +END; + +PROCEDURE LDC_insertar( VAR l: LDC_LDC; m: LDC_movimiento; r: T_REGISTRO ); +VAR + p : LDC_puntero; + n : LDC_Nodo; + na: LDC_Nodo; + ns: LDC_Nodo; + np: LDC_Puntero; +BEGIN + { n.Ant := LDC_Nulo; { AGREGADO } + LDC_Almac_Reservar( l.almac, np ); + n.Elem := r; + CASE m OF + LDC_primero: begin + n.Sig := LDC_Nulo; + n.Ant := LDC_Nulo; + if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO } + LDC_Almac_Acceder( l.almac, l.primero, na ); + na.Ant := np; + LDC_Almac_Modificar( l.almac, l.primero, na ); + n.Sig := l.primero; + end; + LDC_Almac_Modificar( l.almac, np, n ); + l.primero := np; + end; + LDC_siguiente: begin + n.Ant := LDC_Nulo; + n.Sig := LDC_Nulo; + if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO } + LDC_Almac_Acceder( l.almac, l.corriente, na ); + n.Ant := l.corriente; + n.Sig := na.Sig; + na.Sig := np; + LDC_Almac_Modificar( l.almac, l.corriente, na ); + end + else + l.primero := np; + if ( n.Sig <> LDC_Nulo ) then begin + LDC_Almac_Acceder( l.almac, n.Sig, ns ); + ns.Ant := np; + LDC_Almac_Modificar( l.almac, n.Sig, ns ); + end; + LDC_Almac_Modificar( l.almac, np, n ); + end; + LDC_anterior: begin + n.Ant := LDC_Nulo; + n.Sig := LDC_Nulo; + if ( l.primero <> LDC_Nulo ) then begin { NO ESTA VACIO EL ALMACENAMIENTO } + LDC_Almac_Acceder( l.almac, l.corriente, ns ); + n.Sig := l.corriente; + n.Ant := ns.Ant; + ns.Ant := np; + LDC_Almac_Modificar( l.almac, l.corriente, ns ); + end + else + l.primero := np; + if ( n.Ant <> LDC_Nulo ) then begin + LDC_Almac_Acceder( l.almac, n.Ant, na ); + na.Sig := np; + LDC_Almac_Modificar( l.almac, n.Ant, na ); + end + else { Si el Anterior es nulo, entonces estoy insertando atras del primero } + l.primero := np; + LDC_Almac_Modificar( l.almac, np, n ); + end; + END; { case m of } + l.Corriente := np; +END; + +PROCEDURE LDC_vaciar( VAR l: LDC_LDC ); +VAR np : LDC_Puntero; + n : LDC_Nodo; + +BEGIN + np := l.primero; + while( np <> LDC_Nulo ) do begin + LDC_Almac_Acceder( l.almac, np, n ); + LDC_Almac_Liberar( l.almac, np ); + np := n.sig; + end; + l.primero := LDC_Nulo; + l.corriente := LDC_Nulo; +END; + +{ pre: 'a' y 'b' estan creadas y 'b' esta vacia } +{ POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero } +PROCEDURE LDC_copiar( a : LDC_LDC; VAR b : LDC_LDC ); +VAR np : LDC_Puntero; + n : LDC_Nodo; + mp : LDC_Puntero; + m : LDC_Nodo; + ms : LDC_Puntero; + ma : LDC_Puntero; + +BEGIN + if ( a.primero = LDC_Nulo ) then exit; + np := a.primero; + LDC_Almac_Acceder( a.almac, np, n ); + LDC_Almac_Reservar( b.almac, mp ); + b.primero := mp; + b.corriente := mp; + m.elem := n.elem; + m.Ant := LDC_Nulo; + + while ( n.sig <> LDC_Nulo ) do begin + + LDC_Almac_Reservar( b.almac, ms ); + m.sig := ms; + LDC_Almac_Modificar( b.almac, mp, m ); + + np := n.sig; + LDC_Almac_Acceder( a.almac, np, n ); + + m.Ant := mp; { n.Ant; } + mp := ms; + m.elem := n.elem; + + end; + m.sig := LDC_Nulo; + LDC_Almac_Modificar( b.almac, mp, m ); +END; + +end. diff --git a/pila_c.pas b/pila_c.pas new file mode 100644 index 0000000..04e5002 --- /dev/null +++ b/pila_c.pas @@ -0,0 +1,226 @@ +unit PILA_C; +{ + + IMPLEMENTACION : pilas + + ALMACENAMIENTO : CURSORES +} + + + +{ ACLARACIONES : implementamos tambien aca los cursores porque son para estos nodos en particular } + +interface + +{ usa las funciones generales de TDAs } +uses + GRAL; + +{ maximo tamano del cursor } +const + PILAC_MAX_CURSOR = 100; + +{ tipos propios de la lista para definir el cursor } +TYPE + PILAC_puntero = integer; + +const + PILAC_nulo : PILAC_puntero = 0; + +type + PILAC_nodo = RECORD + Elem : T_REGISTRO; + Sig : PILAC_puntero; + END; + + { ahora le toca definir el cursor } + PILAC_Almac = record + almacenamiento : array [ 1 .. PILAC_MAX_CURSOR ] of PILAC_Nodo; + siguientes : array [ 1 .. PILAC_MAX_CURSOR ] of PILAC_Puntero; + primero_dispo : PILAC_puntero; + end; + + T_PILAC = RECORD + almac : PILAC_Almac; + primero: PILAC_puntero; + END; + +{ ========= } + +{ INTERFASE } + +PROCEDURE PILAC_Inicializar( VAR l: T_PILAC ); +FUNCTION PILAC_vacio( l: T_PILAC): BOOLEAN; +FUNCTION PILAC_lleno( l: T_PILAC): BOOLEAN; +PROCEDURE PILAC_poner( VAR l: T_PILAC; VAR e: T_REGISTRO ); +PROCEDURE PILAC_sacar( VAR l: T_PILAC; VAR e: T_REGISTRO); +PROCEDURE PILAC_vaciar( VAR l: T_PILAC ); +PROCEDURE PILAC_copiar( a: T_PILAC; VAR b: T_PILAC ); + + +implementation + +{ CURSORES DE ESTA IMPLEMENTACION } +{ ========================================================================== } +{ inicializar el almacenamiento } +{ PRE : 'almac' no esta inicializado } +{ POST: 'almac' esta inicializado y vacio } + +procedure PILAC_Almac_Inicializar( VAR almac : PILAC_Almac ); + var + i : PILAC_Puntero; + + begin + almac.primero_dispo := 1; + for i := 1 to PILAC_MAX_CURSOR - 1 do + begin + almac.siguientes[i] := i + 1; + end; + almac.siguientes[PILAC_MAX_CURSOR] := PILAC_Nulo; + end; + +{ ========================================================================== } +{ saber si hay lugar para reservar un nuevo elemento en el almacenamiento } +{ PRE : 'almac' esta inicializado } +{ POST: si hay lugar en 'almac' para un nuevo elemento, + entonces retorna TRUE y sino FALSE } +function PILAC_Almac_HayLugar( almac : PILAC_Almac ): boolean; + begin + PILAC_Almac_HayLugar := not ( almac.primero_dispo = PILAC_Nulo ); + end; + +{ ========================================================================== } +{ el pedido de un nuevo elemento al almacenamiento } +{ PRE : 'almac' esta inicializado } +{ POST: si hay lugar en 'almac' para un nuevo elemento, + entonces 'puntero' tiene una referencia a un nuevo elemento del almacenamiento + sino 'puntero' tiene el valor TTDA_Nulo } +procedure PILAC_Almac_Reservar( VAR almac : PILAC_Almac; VAR puntero : PILAC_Puntero ); + begin + if not PILAC_Almac_HayLugar( almac ) + then + puntero := PILAC_Nulo + else begin + puntero := almac.primero_dispo; + almac.primero_dispo := almac.siguientes[ puntero ]; + end; + end; + +{ ========================================================================== } +{ liberar un elemento del almacenamiento } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: 'almac' libero el nodo apuntado por 'puntero' y 'puntero' vale TTDA_Nulo } +procedure PILAC_Almac_Liberar( VAR almac : PILAC_Almac; VAR puntero : PILAC_Puntero ); + begin + almac.siguientes[ puntero ] := almac.primero_dispo; + almac.primero_dispo := puntero; + puntero := PILAC_Nulo; + end; + +{ ========================================================================== } +{ acceder al elemento del almacenamiento apuntado por un puntero } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: 'elemento' tiene una copia del elemento apuntado por 'puntero' } +procedure PILAC_Almac_Acceder( almac : PilaC_Almac; puntero : PILAC_Puntero; VAR elemento : PILAC_Nodo ); + begin + elemento := almac.almacenamiento[ puntero ]; + end; + +{ ========================================================================== } +{ modificar el elemento del almacenamiento apuntado por un puntero } +{ PRE : 'almac' esta inicializado y 'puntero' fue pedido al almacenamiento } +{ POST: el elemento de 'almac' apuntado por 'puntero' tiene una copia de 'elemento' } +procedure PILAC_Almac_Modificar( VAR almac : PILAC_Almac; puntero : PILAC_Puntero; elemento : PILAC_Nodo ); + begin + almac.almacenamiento[ puntero ] := elemento; + end; + +{ Estas son los dos procedimientos principales de la aplicación } +PROCEDURE PILAC_Inicializar ( VAR l: T_PILAC ); + BEGIN + PILAC_Almac_Inicializar( l.almac ); + l.primero := PILAC_Nulo; + END; + +FUNCTION PILAC_vacio( l: T_PILAC): BOOLEAN; + BEGIN + PILAC_vacio := ( l.Primero = PILAC_Nulo); + END; + +FUNCTION PILAC_lleno( l: T_PILAC): BOOLEAN; + BEGIN + PILAC_lleno := not PILAC_Almac_HayLugar( l.almac ); + END; + +PROCEDURE PILAC_poner ( VAR l: T_PILAC; var e: T_REGISTRO); + VAR + n : PILAC_Nodo; + np: PILAC_Puntero; + + BEGIN + n.Elem := e; + n.sig := l.primero; + PILAC_Almac_Reservar( l.almac, np ); + PILAC_Almac_Modificar( l.almac, np, n ); + l.primero := np; + END; + +{ pre: no esta vacia } +PROCEDURE PILAC_sacar ( VAR l: T_PILAC; VAR e: T_REGISTRO); + VAR + n : PILAC_Nodo; + tmp : PILAC_Nodo; + tmpp: PILAC_Puntero; + + BEGIN + PILAC_Almac_Acceder( l.almac, l.primero, n ); + PILAC_Almac_Liberar( l.almac, l.primero ); + l.primero := n.Sig; + { y se lo asigno al parametro } + e := n.Elem; + END; + +PROCEDURE PILAC_vaciar ( VAR l: T_PILAC ); + VAR + np : PILAC_Puntero; + n : PILAC_Nodo; + + BEGIN + np := l.primero; + while( np <> PILAC_Nulo ) do begin + PILAC_Almac_Acceder( l.almac, np, n ); + PILAC_Almac_Liberar( l.almac, np ); + np := n.sig; + end; + l.primero := PILAC_Nulo; + END; + +{ pre: 'a' y 'b' estan creadas y 'b' esta vacia } +{ POST: 'b' tiene una copia de los elementos de 'a' y el corriente esta en el primero } +PROCEDURE PILAC_copiar ( a : T_PILAC; VAR b : T_PILAC ); + VAR + np, mp, tmpp : PILAC_Puntero; + n,m : PILAC_Nodo; + + BEGIN + if a.primero = PILAC_Nulo then exit; + np := a.primero; + PILAC_Almac_Acceder( a.almac, np, n ); + PILAC_Almac_Reservar( b.almac, mp ); + b.primero := mp; + m.elem := n.elem; + while( n.sig <> PILAC_Nulo ) do begin + PILAC_Almac_Reservar( b.almac, tmpp ); + m.sig := tmpp; + PILAC_Almac_Modificar( b.almac, mp, m ); + np := n.sig; + PILAC_Almac_Acceder( a.almac, np, n ); + mp := tmpp; + m.elem := n.elem; + end; + m.sig := PILAC_Nulo; + PILAC_Almac_Modificar( b.almac, mp, m ); + END; + +end. + diff --git a/prog_grl.pas b/prog_grl.pas new file mode 100644 index 0000000..92c5659 --- /dev/null +++ b/prog_grl.pas @@ -0,0 +1,366 @@ +unit PROG_GRL; + +{ + Unidad General para utilizar con los programas que utilicen el archivo de comandos + Tambien incluye algunas funciones y procedimientos utiles para la manipulacion de datos. +} + +interface + + uses + GRAL, DOS, CRT, TABLA; + + type + T_COMANDO = record + Comando: string[2]; + DNI: string[8]; + Nombre: string[40]; + Movimiento: string[1]; + DNI_hasta: string[8]; + end; + ID_COMANDO = ( INS, INSO, ORDEN, BC, BR, LS, LC, BO, MO, LI, DESC ); + + T_ARCHIVO_COMANDOS = file of T_COMANDO; + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra un mensaje de bienvenida al programa + {----------------------------------------------------------------------------} + procedure mensajeDeEntrada( descripcion: String ); + + {----------------------------------------------------------------------------} + {- Funcion: verifica si existe un archivo. + {----------------------------------------------------------------------------} + function existeArchivo( nombre: String ): boolean; + + {----------------------------------------------------------------------------} + {- Procedimiento: Procesa los parametros de la ejecucion del programa + {----------------------------------------------------------------------------} + procedure procesarParametros( var archivoEntrada: T_ARCHIVO_COMANDOS; var archivoSalida: text; var error: boolean ); + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra un mensaje de error y la sintaxis del programa. + {----------------------------------------------------------------------------} + procedure errorParametros; + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra mensaje introductorio en archivo de salida + {----------------------------------------------------------------------------} + procedure intro( var f: text ); + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un dato del tipo T_MOVIM en un string + {----------------------------------------------------------------------------} + function movimToStr( m: T_MOVIM): string; + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un dato del tipo ID_COMANDO en un string + {----------------------------------------------------------------------------} + function comandoToStr( c: ID_COMANDO ): string; + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un string en un dato del tipo ID_COMANDO + {----------------------------------------------------------------------------} + function strToComando( s: string ): ID_COMANDO; + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un string en un dato del tipo T_MOVIM + {----------------------------------------------------------------------------} + function strToMovim( s: string; var error: boolean ): T_MOVIM; + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega el texto de un comando a ejecutar en el archivo de salida + {----------------------------------------------------------------------------} + procedure agregaComando( var f: text; c: T_COMANDO ); + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega mensaje de error en el archivo de salida + {----------------------------------------------------------------------------} + procedure agregaError( var f: text; cmd, msg: string ); + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega mensaje de error en el archivo de salida + {----------------------------------------------------------------------------} + procedure agregaRegistro( var f: text; cmd: string; r: T_REGISTRO ); + + +implementation + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra un mensaje de bienvenida al programa + {----------------------------------------------------------------------------} + procedure mensajeDeEntrada( descripcion: String ); + + begin + writeln; + writeln( 'ALGORITMOS Y PROGRAMACION II - Trabajo Practico n. 1' ); + writeln( 'GRUPO 22 - Primer Cuatrimestre 2000' ); + writeln; + writeln( descripcion ); + writeln; + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Funcion: verifica si existe un archivo. + {----------------------------------------------------------------------------} + + function existeArchivo( nombre: String ): boolean; + + { funcion extrida de la ayuda del Turbo Pascal 7 } + + var + arch: text; + + begin + {$I-} + Assign( arch, nombre ); + FileMode := 0; { Solo lectura } + Reset( arch ); + Close( arch ); + {$I+} + ExisteArchivo := (IOResult = 0) and (nombre <> ''); + end; + + {-- Fin de la Funcion ExisteArchivo --} + + {----------------------------------------------------------------------------} + {- Procedimiento: Procesa los parametros de la ejecucion del programa + {----------------------------------------------------------------------------} + + procedure procesarParametros( var archivoEntrada: T_ARCHIVO_COMANDOS; var archivoSalida: text; var error: boolean ); + + begin + if ( paramcount = 2 ) then begin + if ( existeArchivo( paramstr( 1 ) ) ) then begin + assign( archivoEntrada, paramstr( 1 ) ); + reset( archivoEntrada ); + assign( archivoSalida, paramstr( 2 ) ); + rewrite( archivoSalida ); + error := false; + end + else + error := true; + end + else + error := true; + end; + + {-- Fin del Procedimiento procesarParametros --} + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra un mensaje de error y la sintaxis del programa. + {----------------------------------------------------------------------------} + + procedure errorParametros; + + var + dir: dirstr; + fname: namestr; + ext: extstr; + + begin + fsplit( paramstr( 0 ), dir, fname, ext ); + writeln; + writeln; + writeln( 'ERROR: No se pudieron abrir los archivos o numero de parametros incorrectos.' ); + writeln( ' Verifique que el archivo de comandos exista y que el archivo de salida no.' ); + writeln( ' Ademas asegurese de que tenga permiso de escritura en la unidad que desee' ); + writeln( ' guardar el archivo de salida.' ); + writeln; + writeln( 'Modo de uso:' ); + writeln( ' ', fname, ' archivo_entrada archivo_salida' ); + writeln; + end; + + {-- Fin del Procedimiento errorParametros --} + + {----------------------------------------------------------------------------} + {- Procedimiento: Muestra mensaje introductorio en archivo de salida + {----------------------------------------------------------------------------} + + procedure intro( var f: text ); + + begin + writeln( f ); + writeln( f ); + writeln( f, 'Archivo de Comandos : ', ParamStr( 1 ) ); + writeln( f, 'Archivo de Informacion : ', ParamStr( 2 ) ); + writeln( f ); + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un dato del tipo T_MOVIM en un string + {----------------------------------------------------------------------------} + + function movimToStr( m: T_MOVIM): string; + + begin + case ( m ) of + T_MOVIM_primero: + movimToStr := 'P'; + T_MOVIM_ultimo: + movimToStr := 'U'; + T_MOVIM_anterior: + movimToStr := 'A'; + T_MOVIM_siguiente: + movimToStr := 'S'; + end; + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un dato del tipo ID_COMANDO en un string + {----------------------------------------------------------------------------} + + function comandoToStr( c: ID_COMANDO ): string; + + begin + case ( c ) of + INS: + comandoToStr := 'IN'; + INSO: + comandoToStr := 'IO'; + ORDEN: + comandoToStr := 'OR'; + BC: + comandoToStr := 'BC'; + BR: + comandoToStr := 'BR'; + LS: + comandoToStr := 'LS'; + LC: + comandoToStr := 'LC'; + BO: + comandoToStr := 'BO'; + MO: + comandoToStr := 'MO'; + LI: + comandoToStr := 'LI'; + else + comandoToStr := 'DE'; + end; + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un string en un dato del tipo ID_COMANDO + {----------------------------------------------------------------------------} + + function strToComando( s: string ): ID_COMANDO; + + begin + if ( ( s = 'IN' ) or ( s = 'in' ) or ( s = 'In' ) or ( s = 'iN' ) ) then + strToComando := INS + else if ( ( s = 'IO' ) or ( s = 'io' ) or ( s = 'Io' ) or ( s = 'iO' ) ) then + strToComando := INSO + else if ( ( s = 'OR' ) or ( s = 'or' ) or ( s = 'Or' ) or ( s = 'oR' ) ) then + strToComando := ORDEN + else if ( ( s = 'BC' ) or ( s = 'bc' ) or ( s = 'Bc' ) or ( s = 'bC' ) ) then + strToComando := BC + else if ( ( s = 'BR' ) or ( s = 'br' ) or ( s = 'Br' ) or ( s = 'bR' ) ) then + strToComando := BR + else if ( ( s = 'LS' ) or ( s = 'ls' ) or ( s = 'Ls' ) or ( s = 'lS' ) ) then + strToComando := LS + else if ( ( s = 'LC' ) or ( s = 'lc' ) or ( s = 'Lc' ) or ( s = 'lC' ) ) then + strToComando := LC + else if ( ( s = 'BO' ) or ( s = 'bo' ) or ( s = 'bO' ) or ( s = 'Bo' ) ) then + strToComando := BO + else if ( ( s = 'MO' ) or ( s = 'mo' ) or ( s = 'mO' ) or ( s = 'Mo' ) ) then + strToComando := MO + else if ( ( s = 'LI' ) or ( s = 'li' ) or ( s = 'Li' ) or ( s = 'lI' ) ) then + strToComando := LI + else + strToComando := DESC; + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Funcion: Convierte un string en un dato del tipo T_MOVIM + {----------------------------------------------------------------------------} + + function strToMovim( s: string; var error: boolean ): T_MOVIM; + + begin + error := false; + if ( ( s = 'P' ) or ( s = 'p' ) ) then + strToMovim := T_MOVIM_primero + else if ( ( s = 'U' ) or ( s = 'u' ) ) then + strToMovim := T_MOVIM_ultimo + else if ( ( s = 'A' ) or ( s = 'a' ) ) then + strToMovim := T_MOVIM_anterior + else if ( ( s = 'S' ) or ( s = 's' ) ) then + strToMovim := T_MOVIM_siguiente + else begin + strToMovim := T_MOVIM_primero; + error := true; + end; + end; + + {-- Fin del Procedimiento --} + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega el texto de un comando a ejecutar en el archivo de salida + {----------------------------------------------------------------------------} + + procedure agregaComando( var f: text; c: T_COMANDO ); + + var + err: boolean; + m: string; + + begin + writeln( f ); + write( f, '>>> ', comandoToStr( strToComando( c.comando ) ) ); { Para que aparezca en mayusculas } + write( f, ' ; ', c.dni ); + write( f, ' ; ', c.nombre ); + m := movimToStr( strToMovim( c.Movimiento, err ) ); + if ( err ) then begin + if ( c.movimiento = '*' ) then + m := 'Desconocido' + else + m := 'Ninguno'; + end; + write( f, ' ; ', m ); { Para que aparezca en mayusculas } + write( f, ' ; ', c.dni_hasta ); + writeln( f ); + end; + + {-- Fin del Procedimiento --} + + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega mensaje de error en el archivo de salida + {----------------------------------------------------------------------------} + + procedure agregaError( var f: text; cmd, msg: string ); + + begin + writeln( f, ' * ' + comandoToStr( strToComando( cmd ) ) + ' ERROR: ' + msg ); + end; + + {-- Fin del Procedimiento --} + + + {----------------------------------------------------------------------------} + {- Procedimiento: Agrega mensaje de error en el archivo de salida + {----------------------------------------------------------------------------} + + procedure agregaRegistro( var f: text; cmd: string; r: T_REGISTRO ); + + var + s1, s2: string; + + begin + s1 := ' @ ' + comandoToStr( strToComando( cmd ) ) + ' REGISTRO: Clave = '; + s2 := ' | Nombre = ' + r.nombre; + writeln( f, s1, r.dni, s2 ); + end; + + {-- Fin del Procedimiento --} +end. \ No newline at end of file diff --git a/programa.pas b/programa.pas new file mode 100644 index 0000000..ac755d6 --- /dev/null +++ b/programa.pas @@ -0,0 +1,225 @@ +program TrabajoPracticoI; + +{ + ALGORITMOS Y PROGRAMACIÓN II + ========== = ============ == + + TRABAJO PRÁCTICO NÚMERO 1 + ~~~~~~~ ~~~~~~~~ ~~~~~~ ~ + + Catedra: Carolo + ======= + + 1er Cuatrimestre 2000 + --- ------------ ---- + + Grupo: 22 + ===== +} + + uses + PROG_GRL, GRAL, TABLA, PILA_C; + +var + tbl: T_TABLA; + p: T_PILAC; + fEnt: T_ARCHIVO_COMANDOS; + fSal: text; + id: ID_COMANDO; + m: T_MOVIM; + c: T_COMANDO; + r: T_REGISTRO; + err: boolean; + cmd: ID_COMANDO; + valerr: integer; + s: string; + dni: T_CLAVE; + +begin + mensajeDeEntrada( 'Programa para procesar archivos de comandos.' ); + procesarParametros( fEnt, fSal, err ); + if ( err ) then begin + errorParametros; + exit; { ----------------------------------> SALE DEL PROGRAMA!!!! } + end; + intro( fSal ); + { Inicializacion de TADs } + T_TABLA_Crear( tbl ); + PILAC_Inicializar( p ); + + { Lectura de datos hasta EOF } + while ( not eof( fEnt ) ) do begin + read( fEnt, c ); + cmd := strToComando( c.comando ); + agregaComando( fSal, c ); + + { Ejecuta segun tipo comando } + case ( cmd ) of + + { Insersion } + INS: begin + val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' ) + else begin + r.nombre:= c.nombre; + if ( T_TABLA_Llena( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Llena!' ) + else begin + m := strToMovim( c.Movimiento, err ); + if ( err ) then + agregaError( fSal, comandoToStr( cmd ), 'Movimiento NO valido ("' + movimToStr( m ) + '")!' ) + else begin + T_TABLA_Insertar( tbl, m, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + end; + end; + + { Insersion Ordenada } + INSO: begin + val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' ) + else begin + r.nombre:= c.nombre; + if ( T_TABLA_Llena( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Llena!' ) + else if ( not T_TABLA_Ordenada( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' ) + else begin + T_TABLA_Insertar_Ord( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + end; + + { Ordenar } + ORDEN: begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else + T_TABLA_Ordenar( tbl ); + end; + + { Buscar Clave } + BC: begin + val( c.dni, dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' ) + else if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else if ( not T_TABLA_Ordenada( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' ) + else begin + T_TABLA_Buscar_Clave( tbl, dni, err ); + if ( err ) then + agregaError( fSal, comandoToStr( cmd ), 'No se encontro la clave "' + c.dni + '"!' ) + else begin + T_TABLA_Elem_Cte( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + end; + + { Buscar Rango } + BR: begin + val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' ) + else begin + val( c.dni_hasta, dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI_hasta incorrecto!' ) + else begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else if ( not T_TABLA_Ordenada( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Desordenada!' ) + else begin + T_TABLA_Buscar_por_Rango( tbl, r.dni, dni, p, err ); + if ( err ) then + agregaError( fSal, comandoToStr( cmd ), + 'No se encontro ninguna clave "' + c.dni + '-' + c.dni_hasta + '"!' ) + else begin + while ( not PILAC_vacio( p ) ) do begin + PILAC_sacar( p, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + end; + end; + end; + end; + + { Listar Tabla } + LS: begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else begin + T_TABLA_Mover_Cte( tbl, T_MOVIM_primero, err ); + err:= false; + while ( not err ) do begin + T_TABLA_Elem_Cte( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + T_TABLA_Mover_Cte( tbl, T_MOVIM_siguiente, err ); + end; + end; + end; + + { Listar Corriente } + LC: begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else begin + T_TABLA_Elem_Cte( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + + { Borrar Corriente } + BO: begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else begin + T_TABLA_Elem_Cte( tbl, r ); + T_TABLA_Borrar_Cte( tbl ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + + { Modificar Corriente } + MO: begin + val( c.dni, r.dni, valerr ); { Convierte el DNI en string a DNI en longint } + if ( valerr <> 0 ) then { Si hay un error al convertir } + agregaError( fSal, comandoToStr( cmd ), 'DNI incorrecto!' ) + else begin + if ( T_TABLA_Vacia( tbl ) ) then + agregaError( fSal, comandoToStr( cmd ), 'Tabla Vacia!' ) + else begin + T_TABLA_Elem_Cte( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + r.nombre:= c.nombre; + T_TABLA_Modif_Cte( tbl, r ); + agregaRegistro( fSal, comandoToStr( cmd ), r ); + end; + end; + end; + + { Limpiar Tabla } + LI: + T_TABLA_Limpiar( tbl ); + + { Comando Desconocido } + else + agregaError( fSal, comandoToStr( cmd ), 'Comando Desconocido!' ) + + end; { case ( cmd ) of } + end; { while ( not eof( fEnt ) ) do begin } + close( fSal ); + close( fEnt ); + writeln( 'Archivo ', paramstr( 1 ), ' procesado con exito.' ); + writeln( 'Puede ver la salida y/o errores en el archivo ', paramstr( 2 ) ); + writeln( 'FIN DEL PROGRAMA' ); +end. \ No newline at end of file diff --git a/salida.txt b/salida.txt new file mode 100644 index 0000000..ba9d80f --- /dev/null +++ b/salida.txt @@ -0,0 +1,85 @@ + + +Archivo de Comandos : test.cmd +Archivo de Informacion : salida.txt + + +>>> IN ; 27215947 ; Leandro Lucarella ; P ; * + @ IN REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> IN ; 22309900 ; Roberto Ayala ; A ; * + @ IN REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + +>>> IO ; 33401023 ; Pedro Almodobar ; Desconocido ; * + * IO ERROR: Tabla Desordenada! + +>>> IN ; 22928288 ; Juan Carlos Altavista ; U ; * + @ IN REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + +>>> IN ; IN ; 78331990 ; A ; * + * IN ERROR: DNI incorrecto! + +>>> BC ; 27215947 ; * ; Desconocido ; * + * BC ERROR: Tabla Desordenada! + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + +>>> OR ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> BC ; 27215947 ; * ; Desconocido ; * + @ BC REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> IO ; 56000444 ; Tito Puente ; Desconocido ; * + @ IO REGISTRO: Clave = 56000444 | Nombre = Tito Puente + +>>> BR ; 27215947 ; * ; Desconocido ; 60000000 + @ BR REGISTRO: Clave = 56000444 | Nombre = Tito Puente + @ BR REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> MO ; 56000444 ; Raul Alfonsin ; Desconocido ; * + @ MO REGISTRO: Clave = 56000444 | Nombre = Tito Puente + @ MO REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> BC ; 27215947 ; * ; Desconocido ; * + @ BC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LC ; * ; * ; Desconocido ; * + @ LC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> IN ; 10923476 ; Federico Lupiz ; P ; * + @ IN REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> OR ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LI ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + * LS ERROR: Tabla Vacia! diff --git a/tabla.pas b/tabla.pas new file mode 100644 index 0000000..f88be52 --- /dev/null +++ b/tabla.pas @@ -0,0 +1,262 @@ +unit TABLA; + +{ + IMPLEMENTACION : TABLA + ALMACENAMIENTO : LISTA DOBLE CON CURSORES + +} + +interface + +{ usa las funciones generales de TDAs } +uses + GRAL, LDC, PILA_C; + +{ tipos propios de la tabla } +type + T_TABLA = record + datos: LDC_LDC; + ordenada: boolean; + end; + + T_MOVIM = ( T_MOVIM_primero, T_MOVIM_ultimo, T_MOVIM_siguiente, T_MOVIM_anterior ); + + +{ ========= } +{ INTERFASE } + +PROCEDURE T_TABLA_Crear( VAR t: T_TABLA ); +{ PRE : T nunca fue creada. + POST: T creada y vacía.} +FUNCTION T_TABLA_Vacia( t: T_TABLA): BOOLEAN; +{ PRE : T creada. + POST: Si T tiene elementos, entonces es FALSE, sino es TRUE.} +FUNCTION T_TABLA_Llena( t: T_TABLA): BOOLEAN; +{ PRE : T creada. + POST: Si T tiene lugar para insertar nuevos elementos, entonces es FALSE, sino es TRUE.} +FUNCTION T_TABLA_Ordenada( t: T_TABLA): BOOLEAN; +{ PRE : T no vacía. + POST: Si T está ordenada, entonces es verdadero, sino es falso.} +PROCEDURE T_TABLA_Elem_Cte( t: T_TABLA; VAR r: T_REGISTRO); +{ PRE : T no vacía. + POST: R contiene el registro corriente.} +PROCEDURE T_TABLA_Mover_Cte( VAR t: T_TABLA; m: T_MOVIM; VAR error: BOOLEAN ); +{ PRE : T no vacía. + POST: + Si M = primero, el nuevo corriente es el primer registro y error es falso. + Si M = ultimo, el nuevo corriente es el último registro y error es falso. + Si M = siguiente, el nuevo corriente es el siguiente registro del actual corriente y error es falso. + Si el corriente era el ultimo registro, entonces error es verdadero y el corriente sigue siendo el + ultimo registro. + 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.} +PROCEDURE T_TABLA_Insertar( VAR t: T_TABLA; m: T_MOVIM; r: T_REGISTRO ); +{ PRE : T no llena. + POST: + Si M = primero, R se agregó, es el primer registro y el nuevo corriente. + Si M = ultimo, R se agregó, es el último registro y el nuevo corriente. + Si M = siguiente, R se agregó, es el siguiente registro del corriente, y es el nuevo corriente + Si M = anterior, R se agregó, es el anterior registro del corriente, y es el nuevo corriente.} +Procedure T_TABLA_Insertar_Ord( var t: T_TABLA ; var r: T_REGISTRO); +{ PRE : T no llena y ordenada. + POST: El regitro r se insertó en la tabla t de tal manera que esta continúa ordenada y r es el nuevo corriente. + Si ya existía un registro con la misma clave que r, se inserta después que este.} +PROCEDURE T_TABLA_Limpiar( VAR t: T_TABLA ); +{ PRE : T creada. + POST: T vacía.} +PROCEDURE T_TABLA_Borrar_Cte( VAR t: T_TABLA ); +{ PRE : T no vacía. + POST: Se elimino el registro corriente. El nuevo registro corriente es el siguiente del borrado, + si el borrado era el ultimo, entonces el nuevo corriente es el primero.} +PROCEDURE T_TABLA_Modif_Cte( VAR t: T_TABLA; r: T_REGISTRO); +{ PRE : T no vacía. + POST: El contenido del actual corriente fue actualizado con 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á más ordenada.} +PROCEDURE T_TABLA_Ordenar( VAR t: T_TABLA ); +{ PRE : T no vacía. + POST: T se encuentra ordenada por la clave de sus registros.} +PROCEDURE T_TABLA_Buscar_Clave( VAR t: T_TABLA; c: T_CLAVE; var error: boolean ); +{ PRE : T no vacía y ordenada. + POST: Si C es una clave que existe en T, entonces el nuevo corriente es el registro con clave C y error es falso, + si no error es verdadero y el corriente es el elemento más cercano al buscado cuya clave es mayor que c.} +PROCEDURE T_TABLA_Buscar_Por_Rango( VAR t: T_TABLA; desde, hasta: T_CLAVE; var p: T_PILAC; var error: boolean ); +{ 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. + POST: Tengo todos los registros cuyas claves se encuetran entre los valores desde y hasta almacendados en la pila p, + si encuontró como mínimo una clave. El valor de error es false. + Si no encontró ninguna clave, entonces p sigue vacía y error es true.} + +implementation + +PROCEDURE T_TABLA_Crear( VAR t: T_TABLA ); + begin + LDC_Inicializar( t.datos ); + t.ordenada := true; + end; + +FUNCTION T_TABLA_Vacia( t: T_TABLA): BOOLEAN; + begin + T_TABLA_Vacia := LDC_vacio( t.datos ); + end; + +FUNCTION T_TABLA_Llena( t: T_TABLA): BOOLEAN; + begin + T_TABLA_Llena := LDC_lleno( t.datos ); + end; + +FUNCTION T_TABLA_Ordenada( t: T_TABLA): BOOLEAN; + begin + T_TABLA_Ordenada := t.ordenada; + end; + +PROCEDURE T_TABLA_Elem_Cte( t: T_TABLA; VAR r: T_REGISTRO); + begin + LDC_elem_cte( t.datos, r ); + end; + +PROCEDURE T_TABLA_Mover_Cte( VAR t: T_TABLA; m: T_MOVIM; VAR error: BOOLEAN ); + var mov: LDC_movimiento; + begin + error := false; + if ( m <> T_MOVIM_ultimo ) then begin + case m of + T_MOVIM_primero: + mov := LDC_primero; + T_MOVIM_siguiente: + mov := LDC_siguiente; + T_MOVIM_anterior: + mov := LDC_anterior; + end; + LDC_mover_cte( t.datos, mov, error ); + end + else begin + while ( not error ) do + LDC_mover_cte( t.datos, LDC_siguiente, error ); + error := false; + end; + end; + +PROCEDURE T_TABLA_Insertar( VAR t: T_TABLA; m: T_MOVIM; r: T_REGISTRO ); + var mov : LDC_movimiento; + error: boolean; + begin + if ( m <> T_MOVIM_ultimo ) then begin + case m of + T_MOVIM_primero: + mov := LDC_primero; + T_MOVIM_siguiente: + mov := LDC_siguiente; + T_MOVIM_anterior: + mov := LDC_anterior; + end; + LDC_insertar( t.datos, mov, r ); + end + else begin + if ( not T_TABLA_Vacia( t ) ) then + T_TABLA_Mover_Cte( t, T_MOVIM_ultimo, error); + LDC_insertar( t.datos, LDC_siguiente, r ); + end; + t.ordenada := false; + end; + +PROCEDURE T_TABLA_Insertar_Ord( var t: T_TABLA ; var r: T_REGISTRO); + var + err: boolean; + reg: T_REGISTRO; + + begin + T_TABLA_Buscar_Clave( t, r.dni, err ); {me queda el corriente en el posterior mas cercano} + T_TABLA_Elem_Cte( t, reg ); + if ( reg.dni > r.dni ) then + T_TABLA_Insertar( t, T_MOVIM_anterior, r ) + else + T_TABLA_Insertar( t, T_MOVIM_siguiente, r ); + t.ordenada:= true + end; + +PROCEDURE T_TABLA_Limpiar( VAR t: T_TABLA ); + begin + LDC_vaciar( t.datos ); + t.ordenada := true; + end; + +PROCEDURE T_TABLA_Borrar_Cte( VAR t: T_TABLA ); + begin + LDC_borrar_cte( t.datos ); + end; + +PROCEDURE T_TABLA_Modif_Cte( VAR t: T_TABLA; r: T_REGISTRO); + var + tmp: T_REGISTRO; + begin + T_TABLA_Elem_Cte( t, tmp ); + if ( r.dni <> tmp.dni ) then + t.ordenada := false; + LDC_modif_cte( t.datos, r ); + end; + +PROCEDURE T_TABLA_Ordenar( VAR t: T_TABLA ); + var + tmp: T_TABLA; + r: T_REGISTRO; + err: boolean; + actual: T_CLAVE; + + begin + T_TABLA_Elem_Cte( t, r ); + actual := r.dni; + err := false; + T_TABLA_Crear( tmp ); + LDC_copiar( t.datos, tmp.datos ); + T_TABLA_Limpiar( t ); + T_TABLA_Elem_cte( tmp, r ); + T_TABLA_Insertar( t, T_MOVIM_primero, r ); + T_TABLA_Mover_Cte( tmp, T_MOVIM_siguiente, err ); + while ( not err ) do begin + T_TABLA_Elem_cte(tmp, r); + T_TABLA_Insertar_Ord(t, r); + T_TABLA_Mover_Cte( tmp, T_MOVIM_siguiente, err ); + end; + T_TABLA_Buscar_Clave( t, actual, err ); + t.ordenada:= true; + end; + +PROCEDURE T_TABLA_Buscar_Clave( VAR t: T_TABLA; c: T_CLAVE; var error: boolean ); + var + r: T_REGISTRO; + + begin + error:= false; + T_TABLA_Mover_Cte( t, T_MOVIM_primero, error ); + T_TABLA_Elem_Cte( t, r ); + while ( ( r.dni < c ) and not error ) do begin + T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, error ); + T_TABLA_Elem_Cte( t, r ); + end; + if ( r.dni <> c ) then + error := true; + end; + +PROCEDURE T_TABLA_Buscar_Por_Rango( VAR t: T_TABLA; desde, hasta: T_CLAVE; var p: T_PILAC; var error: boolean ); + var + err: boolean; + r: T_REGISTRO; + + begin + error:= true; + T_TABLA_Buscar_Clave( t, desde, err ); + T_TABLA_Elem_Cte( t, r ); + if ( r.DNI <= hasta ) then begin + PILAC_poner( p, r ); + T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, err ); + T_TABLA_Elem_Cte( t, r ); + while ( ( r.DNI <= hasta ) and not err ) do begin + PILAC_poner( p, r ); + T_TABLA_Mover_Cte( t, T_MOVIM_siguiente, err ); + T_TABLA_Elem_Cte( t, r ); + end; + error := false; + end; + end; + +end. \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..227e040 --- /dev/null +++ b/test.txt @@ -0,0 +1,85 @@ + + +Archivo de Comandos : test.bin +Archivo de Informacion : test.txt + + +>>> IN ; 27215947 ; Leandro Lucarella ; P ; * + @ IN REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> IN ; 22309900 ; Roberto Ayala ; A ; * + @ IN REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + +>>> IO ; 33401023 ; Pedro Almodobar ; Desconocido ; * + * IO ERROR: Tabla Desordenada! + +>>> IN ; 22928288 ; Juan Carlos Altavista ; U ; * + @ IN REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + +>>> IN ; IN ; 78331990 ; A ; * + * IN ERROR: DNI incorrecto! + +>>> BC ; 27215947 ; * ; Desconocido ; * + * BC ERROR: Tabla Desordenada! + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + +>>> OR ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> BC ; 27215947 ; * ; Desconocido ; * + @ BC REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> IO ; 56000444 ; Tito Puente ; Desconocido ; * + @ IO REGISTRO: Clave = 56000444 | Nombre = Tito Puente + +>>> BR ; 27215947 ; * ; Desconocido ; 60000000 + @ BR REGISTRO: Clave = 56000444 | Nombre = Tito Puente + @ BR REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + +>>> MO ; 56000444 ; Raul Alfonsin ; Desconocido ; * + @ MO REGISTRO: Clave = 56000444 | Nombre = Tito Puente + @ MO REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> BC ; 27215947 ; * ; Desconocido ; * + @ BC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LC ; * ; * ; Desconocido ; * + @ LC REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> IN ; 10923476 ; Federico Lupiz ; P ; * + @ IN REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> OR ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + @ LS REGISTRO: Clave = 10923476 | Nombre = Federico Lupiz + @ LS REGISTRO: Clave = 22309900 | Nombre = Roberto Ayala + @ LS REGISTRO: Clave = 22928288 | Nombre = Juan Carlos Altavist + @ LS REGISTRO: Clave = 27215947 | Nombre = Leandro Lucarella + @ LS REGISTRO: Clave = 56000444 | Nombre = Raul Alfonsin + +>>> LI ; * ; * ; Desconocido ; * + +>>> LS ; * ; * ; Desconocido ; * + * LS ERROR: Tabla Vacia! diff --git a/turbo.dsk b/turbo.dsk new file mode 100644 index 0000000000000000000000000000000000000000..1cf1778abbe3a84f43786b0618c533aa1443d94e GIT binary patch literal 3654 zcmb`K&u`O66vw}g^Q)yT8@h<4ht{Pjq7IZLl_)9_!f{9%a8=83FO{XLB@vCNnkq>T zz4Ra0z3l~Y;<_s?{1707xbO$?51`eqmOo(+D}jLb96NQJ6x;1iG?SU}y!r8&_ukBy z+l{rlq^~ybu5L*AYV&@pz9kiE8`Tk{<%x89LQczxLQXf%4gqfl0WqUW>YTMuD(4r~ z-78i>QI|AR$yDm6EN~;6L?QcI6Yi%3!v-enT`I31(x9b~xJgI|e;9HW5`@{@h} zdA95UB>aIWMK?t8*v$s|Z^M)K!DB&&cbk?W&@?$PJPs-00oBEYDM~x=WXw{L1HD zKG5KA?O4UH_LxBv*;c+xPkwi(N5L_mJ$~=0?oX=q@XO#D6*=tjV_SS7@)mgbxkUEy zV^qwK*>(8w$S&<}eyn_xJ(MpPKXNsWr`f@I{9;f1s7ZMJ+o6?h{-65Cs2FS_96#X4 zF8%ZO(|So$R#eyFw*7nmQQ;vxJznfTwEG_IJD&Br^x|H6u0Q03b!#76?@xsLpzHHL z8NFxRS@O204#Y4Z+w8(vE-!V)-*UOx^FWr%nAmbfFFP0L;p|2+(#7tA@3Eof9kshj z=gx8%QeADsqq|8=8iKFWIzE&gr}s(zLLe(44p3Ci`(l&XRw4M_0U@NQ zuO+jj-6~t=l95}~XR#j4p}GeW)`QMxed7BQZ_j#tq-QJVBhR;Ut##^>ROe(*Qr20H zQ*&mo##x}#w&K4`@1+lwE~bsR>g4Mi5{>%+5;%!&eWT)A#2y ze7dLLXL_u}=txN76}{Y|{quNjp}AA kUu%4(;%mCYC!B}ji#{Mi-6ZB~%~rj!gF-H+jnl*M8_4Q-_5c6? literal 0 HcmV?d00001 -- 2.43.0