Sunteți pe pagina 1din 746

Tras los pasos de un

Hacker

Nstor Marroqun
Tras los pasos de un
Hacker
Nstor Marroqun
Copyright-2.010

Reservados todos los derechos:

Ninguna parte de la historia narrada (la obra literaria) puede ser reproducida, grabada o recuperada
por ningn medio, transmitida de cualquier forma fsica o electrnica sin el permiso por escrito de
Nstor Marroqun.

El trabajo acadmico, as como los ejercicios resueltos y propuestos son de libre distribucin
conforme lo estipulan las mltiples licencias de acceso pblico a la informacin, siempre y cuando
usted reconozca y nombre a sus autores.

Todas las marcas y productos mencionados pertenecen a sus legtimos dueos y empresas
fabricantes.

Publicacin electrnica de:


NMC Research Ca. Ltda.
Inti Oe2-449 y Galo Molina.
Quito Ecuador

Marketing y Comercializacin:

Correo-e: sales@nmcresearch.com

Pgina web: http://www.nmcresearch.com

Soporte: support@nmcresearch.com

Informacin: info@nmcresearch.com

Obra registrada en el Instituto Ecuatoriano de la Propiedad Intelectual.


IEPI Trmite No: 001171. Certificado No: 033671.
Rev. 1.00 - 02 de julio del ao 2.010

ISBN(e-book): 978-9-942030-19-1
ISBN (book): 978-1-453850-43-5

Impreso en los Estados Unidos de Norte Amrica.

Rev. 1.1012 de agosto de 2.012

-2 -
DEDICATORIA

Dedico este, el trabajo sobre mi vida, en especial:

A mis padres Carlos y Cecilia, a mi esposa Anita, a mis hijos Daniel y Nstor por
haber soportado las locuras de este hombre y las consecuencias de las mismas,
por su cario y apoyo incondicional.

AJessenia quien con su visin y consejo propici que finalmente esta obra salga a
la luz, por su paciencia y por todo el tiempo que compartimos juntos revisando
este texto.

A mis amigos en general y de forma particular a mis compaeros militares de la


promocin de oficiales del Ejrcito Ecuatoriano correspondiente al ao 1.990.

A quienes han sido mis ocultos compaeros, ellos, los denominados CABALLEROS
DEL SILENCIO, personal del Servicio de Inteligencia de las Fuerzas Militares del
Ecuador, quienes en su momento marcaron mi vida, en primer lugar al
solicitarme colaboracin, luego al perseguirme y finalmente al permitir que
forme a algunos agentes en el arte del Hacking a todos ellos mi gratitud
entraable.

Nstor Marroqun
Autor

-3-
-4-
Un gran poder, conlleva una gran responsabilidad

Benjamn Franklin
(1.706-1.790, Estadista y cientfico Estadounidense)

-5-
-6-
CONTENIDO

Introduccin (I).......................................................................................................................................... - 29 -

Captulo I. Historia de la Computacin............................................................................................ - 35 -

1.1 Antecedentes Histricos.................................................................................................... - 35 -

1.2 Generaciones de las computadoras.............................................................................. - 43 -

Primera generacin................................................................................................................. - 43 -

Segunda Generacin................................................................................................................ - 44 -

Tercera Generacin................................................................................................................. - 46 -

Cuarta generacin.................................................................................................................... - 47 -

1.3 Las Computadoras................................................................................................................ -48

Supercomputadoras................................................................................................................ -48

Macrocomputadoras o Mainframes................................................................................. - 49 -

Minicomputadoras................................................................................................................... -50

Microcomputadoras o PC...................................................................................................... - 51 -

Estaciones de trabajo o Workstations............................................................................ -52 -

1.4 Lenguajes de Programacin............................................................................................. - 53 -

COBOL (1.951)........................................................................................................................... - 55 -

FORTRAN (1.954) .................................................................................................................... - 55 -

ALGOL (1.958)........................................................................................................................... - 56 -

LISP (1.959)................................................................................................................................ - 57 -

FORTH (1.960).......................................................................................................................... - 58 -

-7-
Tras los pasos de un... Hacker

BASIC (1.964)............................................................................................................................. - 59 -

PASCAL (1.970)......................................................................................................................... - 61 -

ADA (1.975)................................................................................................................................ - 62 -

LOGO (1.976).............................................................................................................................. - 62 -

C (1.978)....................................................................................................................................... - 63 -

JAVA (1.991)............................................................................................................................... - 64

Notas y Bibliografa....................................................................................................................... - 65 -

Introduccin (II)......................................................................................................................................... - 69 -

Captulo II. Nmeros y Sistemas de Numeracin ....................................................................... - 73 -

2.1 Concepto de nmero............................................................................................................ - 73 -

2.2 Concepto de Sistema de Numeracin........................................................................... - 73 -

2.3 Representacin de los nmeros..................................................................................... - 73 -

2.4 Transformacin de nmeros entre sistemas de numeracin ........................... - 77 -

2.4.1 De un sistema en base b al sistema decimal............................................. - 77 -

Ejercicios resueltos: .......................................................................................................... - 79 -

Ejercicios propuestos:...................................................................................................... - 83 -

2.4.2 Del sistema decimal a un sistema en base b............................................. - 85 -

Ejercicios resueltos: .......................................................................................................... - 87 -

Ejercicios propuestos:...................................................................................................... - 93 -

2.4.3 De un sistema en base b a un sistema en base c..................................... - 95 -

Caso especial......................................................................................................................... - 95 -

Ejercicios resueltos: .......................................................................................................... - 97 -

Ejercicios propuestos.....................................................................................................- 101 -

-8-
Contenido

2.5 Operaciones fundamentales en los sistemas de numeracin..........................- 103 -

2.5.1 Suma.........................................................................................................................- 103 -

Definicin.............................................................................................................................- 103 -

Elementos............................................................................................................................- 103 -

Propiedades........................................................................................................................- 104 -

a) Propiedad Clausurativa......................................................................................- 104 -

b) Propiedad Conmutativa.....................................................................................- 104 -

c) Propiedad Asociativa...........................................................................................- 104 -

d) Propiedad Modulativa.........................................................................................- 104 -

Procedimiento ...................................................................................................................- 105 -

Ejercicios resueltos: ........................................................................................................- 107 -

Ejercicios propuestos:....................................................................................................- 109 -

2.5.2 Resta.........................................................................................................................- 111 -

Definicin.............................................................................................................................- 111 -

Elementos............................................................................................................................- 111 -

Propiedades........................................................................................................................- 111 -

a) Propiedad Clausurativa......................................................................................- 111 -

b) Propiedad Asociativa...........................................................................................- 111 -

c) Propiedad Modulativa.........................................................................................- 112 -

Procedimiento ...................................................................................................................- 112 -

Ejercicios resueltos: ........................................................................................................- 114 -

Ejercicios propuestos:....................................................................................................- 117 -

2.5.3 Multiplicacin......................................................................................................- 119 -

-9-
Tras los pasos de un... Hacker

Definicin.............................................................................................................................- 119 -

Elementos............................................................................................................................- 119 -

Propiedades........................................................................................................................- 119 -

a) Propiedad Clausurativa......................................................................................- 119 -

b) Propiedad Conmutativa.....................................................................................- 119 -

c) Propiedad Asociativa...........................................................................................- 120

d) Propiedad Modulativa.........................................................................................- 120

e) Inverso Multiplicativo.........................................................................................- 120

Procedimiento ...................................................................................................................- 120

Ejercicios resueltos: ........................................................................................................- 122 -

Ejercicios propuestos:....................................................................................................- 127 -

2.5.4 Divisin...................................................................................................................- 129 -

Definicin.............................................................................................................................- 129 -

Elementos............................................................................................................................- 129 -

Propiedades........................................................................................................................- 129 -

a) Propiedad Clausurativa......................................................................................- 129 -

b) Propiedad Modulativa.........................................................................................- 129 -

Procedimiento ...................................................................................................................- 130 -

Ejercicios resueltos: ........................................................................................................- 134 -

Ejercicios propuestos:....................................................................................................- 141 -

Notas y Bibliografa.....................................................................................................................- 142 -

Introduccin (III).....................................................................................................................................- 145 -

Captulo III. Lgica Binaria.................................................................................................................- 147 -

- 10 -
Contenido

Ejercicios resueltos: ........................................................................................................- 148

Ejercicios propuestos:....................................................................................................- 151 -

3.1 lgebra de Boole.........................................................................................................- 153 -

Definicin.........................................................................................................................................- 153 -

3.2 Operaciones lgicas...................................................................................................- 153 -

No (NOT, ).................................................................................................................................- 153 -

a) Tabla de Verdad.................................................................................................- 154 -

b) Compuerta Lgica..............................................................................................- 154 -

O (Suma lgica, or, +)............................................................................................................- 154 -

a) Tabla de Verdad.................................................................................................- 154 -

b) Compuerta Lgica..............................................................................................- 155 -

Y (producto lgico, AND, )................................................................................................- 155 -

a) Tabla de Verdad.................................................................................................- 155 -

b) Compuerta Lgica..............................................................................................- 155 -

Onegado (NOR, +)...............................................................................................................- 156 -

a) Tabla de Verdad.................................................................................................- 156 -

b) Compuerta Lgica..............................................................................................- 156 -

Y negada (NAND, - ).............................................................................................................- 156 -

a) Tabla de Verdad.................................................................................................- 157 -

b) Compuerta Lgica..............................................................................................- 157 -

O exclusivo (XOR,).............................................................................................................- 157 -

a) Tabla de Verdad.................................................................................................- 158

b) Compuerta Lgica..............................................................................................- 158

- 11 -
Tras los pasos de un... Hacker

O exclusivo negado. (EQV, ) ...........................................................................................- 158


a) Tabla de Verdad.................................................................................................- 158

b) Compuerta Lgica..............................................................................................- 159 -

Ejercicios resueltos:....................................................................................................................- 159 -

Ejercicios propuestos:................................................................................................................- 165 -

3.3 Leyes del lgebra de Boole....................................................................................- 169 -

a) Ley Clausurativa..................................................................................................................- 169 -

b) Ley Conmutativa..................................................................................................................- 169 -

c) Ley Asociativa.......................................................................................................................- 169 -

d) Ley Distributiva...................................................................................................................- 170 -

3.4 Teoremas del lgebra de Boole ...........................................................................- 171 -

Ejercicios resueltos:....................................................................................................................- 172 -

Ejercicios propuestos:................................................................................................................- 175 -

Notas y Bibliografa.....................................................................................................................- 177

Introduccin (IV).....................................................................................................................................- 179 -

Captulo IV. La informacin................................................................................................................- 181 -

4.1 Definicin.......................................................................................................................- 181 -

4.2 Organizacin y ponderacin..................................................................................- 182 -

4.2.1 Bit......................................................................................................................................- 182 -

4.2.2 Byte...................................................................................................................................- 183 -

4.2.3 Mltiplos y submltiplos.........................................................................................- 184 -

4.2.4 Caracteres (smbolos)..............................................................................................- 185 -

4.2.5 Campo..............................................................................................................................- 185 -

- 12 -
Contenido

4.2.6 Registro...........................................................................................................................- 186 -

4.2.7 Archivo ............................................................................................................................- 186 -

4.2.8 Base de datos................................................................................................................- 186 -

4.3 Los datos.........................................................................................................................- 187 -

4.3.1 Definicin.......................................................................................................................- 187 -

4.3.2 Clases de datos.............................................................................................................- 187 -

4.3.3 Datos numricos.........................................................................................................- 187 -

a) Datos numricos enteros..........................................................................................- 188 -

b) Datos numricos reales.............................................................................................- 188 -

4.3.4 Datos no numricos...................................................................................................- 188 -

a) Datos no numricos tipo hilera..............................................................................- 189 -

b) Datos no numricos tipo lgico.............................................................................- 189 -

4.4 Los operadores............................................................................................................- 189 -

a) Operadores aritmticos.............................................................................................- 189 -

b) Operadores de relacin.............................................................................................- 190 -

c) Operadores lgicos......................................................................................................- 190 -

4.5 Funciones normalizadas en informtica..........................................................- 190 -

4.6 Errores............................................................................................................................- 191 -

a) Errores de sintaxis.......................................................................................................- 192 -

b) Errores de uso ...............................................................................................................- 192 -

c) Errores de lgica...........................................................................................................- 192 -

4.7 Expresiones informticas.......................................................................................- 192 -

Ejercicios resueltos:....................................................................................................................- 193 -

- 13 -
Tras los pasos de un... Hacker

Ejercicios propuestos:................................................................................................................- 199 -

Notas y Bibliografa.....................................................................................................................- 202 -

Introduccin (V).......................................................................................................................................- 205 -

Captulo V. Arquitectura de una computadora..........................................................................- 211 -

5.1 Dispositivo de control y proceso.........................................................................- 213 -

5.1.1 Unidad de Control......................................................................................................- 214 -

5.1.2 Unidad Aritmtico Lgica.......................................................................................- 215 -

5.1.3 Memoria para el uso del dispositivo de control y proceso ......................- 215 -

5.1.4 Interfaz de conexin con el camino de datos o bus.....................................- 215 -

5.1.4.1 Interfaz de conexin con los dispositivos de memoria.....................- 216 -

5.1.4.2 Interfaz de conexin con los dispositivos de entrada y salida.......-216 -

5.1.5 Reloj..................................................................................................................................- 216 -

5.2 El camino de datos.....................................................................................................- 217 -


5.3 Dispositivos de memoria.........................................................................................- 218

5.3.1. Memorias ROM .........................................................................................................- 218

5.3.2. Memorias RAM .........................................................................................................- 219 -

5.3.3. Unidades de almacenamiento masivo............................................................- 220

5.4 Dispositivos y unidades de entrada...................................................................- 221 -

5.5 Dispositivos y unidades de salida.......................................................................- 222 -

5.6 Programas de control de dispositivos...............................................................- 222 -

5.7 Programas del sistema.............................................................................................- 223 -

5.8 Programas de aplicacin.........................................................................................- 223 -

Notas y Bibliografa.....................................................................................................................- 224 -

- 14 -
Contenido

Introduccin (VI).....................................................................................................................................- 227 -

Captulo VI. Fundamentos de la programacin.........................................................................- 231 -

6.1 Algoritmo................................................................................................................................- 231 -

6.2 Caractersticas......................................................................................................................- 232 -

6.2.1 Finitud.....................................................................................................................- 232 -

6.2.2 Definibilidad.........................................................................................................- 232 -

6.2.3 Entrada...................................................................................................................- 232 -

6.2.4 Salida.......................................................................................................................- 233 -

6.2.5 Efectividad.............................................................................................................- 233 -

6.3 Teorema del programa estructurado.........................................................................- 233 -

6.4 Instrucciones que definen las estructuras de control en BASIC....................- 237 -

6.4.1 Estructuras de control secuencial...............................................................- 238 -

6.4.2 Estructuras de control condicional............................................................- 243 -

6.4.3 Estructuras de control iterativo..................................................................- 247 -

Notas y Bibliografa.....................................................................................................................- 252 -

Introduccin (VII)....................................................................................................................................- 255 -

Captulo VII. Elaboracin de algoritmos con BASIC................................................................- 261 -

Ejercicios resueltos:....................................................................................................................- 263 -

Ejercicios propuestos:................................................................................................................- 291 -

Notas y Bibliografa.....................................................................................................................- 293 -

Introduccin (VIII)..................................................................................................................................- 295 -

Captulo VIII. Bucles, funciones y subrutinas con BASIC........................................................- 299 -

8.1. Iteraciones y bucles...................................................................................................- 299 -

- 15 -
Tras los pasos de un... Hacker

8.1.1 Bucles determinados e indeterminados...........................................................- 299 -

8.1.2 Bucles anidados...........................................................................................................- 300 -

Ejercicios resueltos:....................................................................................................................- 301 -

8.2 Funciones.......................................................................................................................- 314 -

Ejercicios resueltos:....................................................................................................................- 315 -

8.3 Subrutinas......................................................................................................................- 327 -

Ejercicios resueltos:....................................................................................................................- 328 -

Ejercicios propuestos:................................................................................................................- 343 -

Notas y Bibliografa.....................................................................................................................- 344 -

Introduccin (IX)......................................................................................................................................- 347 -

Captulo IX. Arreglos, mtodos de clasificacin y bsqueda................................................- 351 -

9.1 Arreglos...........................................................................................................................- 351 -

Vectores y matrices.....................................................................................................................- 355 -

Ejercicios resueltos:....................................................................................................................- 356 -

9.2 Mtodos de clasificacin..........................................................................................- 373 -

La implementacin......................................................................................................................- 375 -

9.2.1 Mtodos por insercin .............................................................................................- 380 -

Insercin Directa....................................................................................................................- 380 -

Mtodo de Shell.......................................................................................................................- 384 -

9.2.2 Mtodos por intercambio.......................................................................................- 388 -

Mtodo de la burbuja............................................................................................................- 388 -

Mtodo paralelo de Batcher..............................................................................................- 391 -

Mtodo Quick Sort.................................................................................................................- 394 -

- 16 -
Contenido

Mtodo de la sacudida (cctel).........................................................................................- 398 -

9.2.3 Mtodos por seleccin..............................................................................................-401 -

Seleccin directa.....................................................................................................................-402 -

Heap Sort....................................................................................................................................-405 -

Mtodo de Cambio.................................................................................................................- 409 -

Laboratorio de informtica......................................................................................................- 413 -

Resultados del laboratorio.......................................................................................................- 422 -

Ejercicios propuestos:................................................................................................................- 427 -

9.3 Mtodos de bsqueda...............................................................................................- 429 -

9.3.1 Bsqueda secuencial.................................................................................................- 429 -

Ejercicios resueltos:....................................................................................................................-430

9.3.2 Bsqueda en arreglos ordenados........................................................................-434 -

Ejercicios resueltos:....................................................................................................................-436 -

Notas y Bibliografa.....................................................................................................................- 444 -

Introduccin (X).......................................................................................................................................- 447

Captulo X. Virus y antivirus...............................................................................................................-451 -

10.1 Preliminares.................................................................................................................-451 -

10.2 Algo de historia............................................................................................................-454 -

Los comienzos...............................................................................................................................-454 -

Los aos 80.....................................................................................................................................- 455 -

El comienzo de los virus............................................................................................................- 457 -

Empiezan los programas antivirus......................................................................................- 458 -

10.3 Qu es un virus informtico?...............................................................................- 472 -

- 17 -
Tras los pasos de un... Hacker

10.4 Cmo funciona un virus informtico?.............................................................- 472 -

10.5 Clasificacin de los virus informticos..............................................................- 473 -

Virus Pers.................................................................................................................................- 473 -

Bomba lgica..................................................................................................................................- 473 -

Gusano o worm .............................................................................................................................- 474 -

Virus de macro..............................................................................................................................- 474 -

Caballo de Troya...........................................................................................................................- 474 -

Fallos de seguridad en el diseo de algunos sistemas.................................................- 475 -

10.6 Formas de infeccin..................................................................................................- 476 -

10.7 Efectos destructivos de los virus.........................................................................- 478 -

10.8 Formas de ocultamiento..........................................................................................- 478 -

10.9 Prevencin, deteccin y eliminacin .................................................................- 479 -

Windows 95 y superiores.........................................................................................................- 480 -

Problemas con Windows 95 y superiores.........................................................................- 480 -

Virus en la Internet......................................................................................................................- 481 -

10.10Qu es un antivirus?................................................................................................-482 -

Qu debemos buscar en un antivirus?..............................................................................- 483 -

Cmo reaccionarante una infeccin?...............................................................................- 484 -

Notas y Bibliografa.....................................................................................................................- 484 -

Captulo XI. La historia.........................................................................................................................- 487 -

11.1 Los comienzos..............................................................................................................- 487 -

11.2 Agentes del Servicio de Inteligencia. El momento que el guila perdi sus
huevos..........................................................................................................................................- 488 -

- 18 -
Contenido

11.3 La confirmacin que el invento serva..............................................................- 495 -

11.4 La visita a Holanda.....................................................................................................- 498 -

11.5 La cacera de brujas...................................................................................................-501 -

11.6 La Comdex de La Vegas de 1.997.........................................................................- 503 -

11.7 La persecucin judicial.............................................................................................-506 -

11.8 El premio a la innovacin tecnolgica en Amrica Latina en 2.000....-508

11.9 Atrapenal delincuente!..........................................................................................- 510 -

11.10El hack a un portal bancario..................................................................................- 514 -

11.11Reventando claves de las cuentas de correos electrnicos .....................- 516 -

11.12Suplantando direcciones de correo electrnico ...........................................- 517 -

11.13El cifrador de flujo NMC Stream......................................................................- 519 -

11.14El Sistema de Comunicaciones Seguro (NMCSCS)..................................- 520

11.15Actualidad......................................................................................................................- 521 -
Breve glosario de trminos.................................................................................................................- 523 -

Anexos...........................................................................................................................................................- 579 -

Anexo I. NMC Stream.........................................................................................................................- 581 -

Descripcin y formalizacin del NMC Stream.............................................................- 581 -

Definicin algortmica del NMCStream.........................................................................- 583 -

La funcin h.....................................................................................................................................- 584 -

Aproximacin al nivel de seguridad alcanzado..............................................................-586 -

Conclusiones...................................................................................................................................- 589 -

Notas y Bibliografa.....................................................................................................................- 589 -

La implementacin......................................................................................................................- 593 -

- 19 -
Tras los pasos de un... Hacker

Anexo II. Cdigo ASCII..........................................................................................................................- 623 -

Anexo III. Instrucciones en True BASIC........................................................................................- 629 -

Estructuras e Instrucciones Ordinarias........................................................................- 629 -

Instrucciones de Entrada y Salida...................................................................................- 630 -

Instrucciones para el manejo de Archivos..................................................................- 630 -

Funciones y Subrutinas........................................................................................................- 631 -

Instrucciones de Grficas y Sonido.................................................................................- 631 -

Instrucciones MAT.................................................................................................................- 632 -

Estructuras de Mdulo.........................................................................................................- 632 -

Manejo de Excepciones........................................................................................................- 633 -

Subrutinas internas...............................................................................................................- 633 -

Listado Alfabtico de las Instrucciones en True BASIC.........................................- 635 -

Instruccin BOXAREA...............................................................................................................- 635 -

Instruccin BOX CIRCLE............................................................................................................- 635 -

Instruccin BOXCLEAR.............................................................................................................- 635 -

Instruccin BOXELLIPSE.........................................................................................................- 636 -

Instruccin BOX KEEP................................................................................................................- 636 -

Instruccin BOX LINES..............................................................................................................- 636 -

Instruccin BOX SHOW..............................................................................................................- 636 -

Instruccin CALL..........................................................................................................................- 636 -

Instruccin CLEAR.......................................................................................................................- 637 -

Instruccin DATA.........................................................................................................................- 637 -

Instruccin DECLARE DEF.......................................................................................................- 637 -

- 20 -
Contenido

Instruccin DEF............................................................................................................................- 638 -

Estructura DEF..............................................................................................................................- 638 -

Instruccin DIM ............................................................................................................................- 639 -

Iteracin DO....................................................................................................................................- 639 -

Instruccin DRAW.......................................................................................................................- 639 -

Instruccin END............................................................................................................................- 640

Instruccin END DEF..................................................................................................................- 641 -

Instruccin END IF......................................................................................................................- 641 -

Instruccin END PICTURE........................................................................................................- 641 -

Instruccin END SELECT..........................................................................................................- 641 -

Instruccin END SUB..................................................................................................................- 641 -

Instruccin EXIT DEF.................................................................................................................- 641 -

Instruccin EXIT DO....................................................................................................................- 642 -

Instruccin EXIT FOR.................................................................................................................- 642 -

Instruccin EXIT PICTURE.......................................................................................................- 642 -

Instruccin EXITSUB.................................................................................................................- 642 -

Instruccin EXTERNAL..............................................................................................................- 643 -

Instruccin FLOOD ......................................................................................................................- 643 -

Iteracin FOR.................................................................................................................................- 643 -

Instruccin IF.................................................................................................................................- 644 -

Estructura IF...................................................................................................................................- 644 -

Instruccin INPUT .......................................................................................................................- 645 -

Instruccin LET.............................................................................................................................- 645 -

- 21 -
Tras los pasos de un... Hacker

Instruccin LIBRARY..................................................................................................................- 645 -

Instruccin LINE INPUT............................................................................................................- 646 -

Instruccin LOCAL.......................................................................................................................- 646 -

Instruccin LOOP.........................................................................................................................- 646 -

Instruccin MAT INPUT ............................................................................................................- 647 -

Instruccin MAT LINE INPUT.................................................................................................- 647 -

Instruccin MAT PRINT ............................................................................................................- 647 -

Instruccin MATREAD..............................................................................................................- 648

Instruccin NEXT.........................................................................................................................- 648

Instruccin OPTIONANGLE....................................................................................................- 648

Instruccin OPTIONTYPO .......................................................................................................- 649 -

Instruccin PAUSE.......................................................................................................................- 649 -

Estructura PICTURE....................................................................................................................- 649 -

Instruccin PLAY..........................................................................................................................- 650

Instrucciones PLOT.....................................................................................................................- 650

Instruccin PLOT POINTS........................................................................................................- 650

Instruccin PLOT LINES............................................................................................................- 650

Instruccin PLOTAREA.............................................................................................................- 651 -

Instruccin PLOTTEXT.............................................................................................................- 651 -

Instruccin PLOTsin parmetros.........................................................................................- 651 -

Instruccin PRINT........................................................................................................................- 652 -

Instruccin PROGRAM ...............................................................................................................- 653 -

Instruccin RANDOMIZE..........................................................................................................- 653 -

- 22 -
Contenido

Instruccin READ.........................................................................................................................- 653 -

Instruccin REM...........................................................................................................................- 653 -

Instruccin RESTORE.................................................................................................................- 654 -

Estructura SELECTCASE..........................................................................................................- 654 -

Instruccin SETBACK................................................................................................................- 655 -

Instruccin SETCOLOR.............................................................................................................- 655 -

Instruccin SET MODE...............................................................................................................- 656 -

Instruccin SETWINDOW........................................................................................................- 656 -

Instruccin SOUND......................................................................................................................- 656 -

Instruccin STOP..........................................................................................................................- 656 -

Estructura SUB..............................................................................................................................- 657 -

Estructura WHEN.........................................................................................................................- 657 -

Anexo IV. Funciones Internas en True BASIC.............................................................................- 659 -

Funciones Matemticas.......................................................................................................- 659 -

Funciones de Fecha y Hora.................................................................................................- 660

Funciones String a Nmeros..............................................................................................- 660

Funciones de Transformacin de Strings....................................................................- 661 -

Funciones de Bsqueda en Strings.................................................................................- 661 -

Funciones en Arreglos..........................................................................................................- 661 -

Funciones MAT (matrices).................................................................................................- 662 -

Listado Alfabtico de las Funciones en True BASIC................................................- 663 -

Funcin ABS....................................................................................................................................- 663 -

Funcin ACOS.................................................................................................................................- 663 -

- 23 -
Tras los pasos de un... Hacker

Funcin ANGLE.............................................................................................................................- 663 -

Funcin ASIN..................................................................................................................................- 663 -

Funcin ATN...................................................................................................................................- 664 -

Funcin CEIL..................................................................................................................................- 664 -

Funcin CHR$................................................................................................................................- 664 -

Funcin de Arreglo CON............................................................................................................- 665 -

Funcin COS....................................................................................................................................- 665 -

Funcin COSH................................................................................................................................- 665 -

Funcin COT...................................................................................................................................- 665 -

Funcin CPOS.................................................................................................................................- 665 -

Funcin CPOSR..............................................................................................................................- 666 -

Funcin CSC....................................................................................................................................- 666 -

Funcin DATE................................................................................................................................- 667 -

Funcin DATE$..............................................................................................................................- 667 -

Funcin DEG ...................................................................................................................................- 667 -

Funcin DET...................................................................................................................................- 667 -

Funcin DOT...................................................................................................................................- 668

Funcin EPS....................................................................................................................................- 668

Funcin EXLINE............................................................................................................................- 668

Funcin EXLINE$..........................................................................................................................- 668

Funcin EXP....................................................................................................................................- 669 -

Funcin EXTEXT$.........................................................................................................................- 669 -

Funcin EXTYPE...........................................................................................................................- 669 -

- 24 -
Contenido

Funcin FP.......................................................................................................................................- 670 -

Funcin de Arreglo IDN.............................................................................................................- 670 -

Funcin INT....................................................................................................................................- 670 -

Funcin de Arreglo INV.............................................................................................................- 670 -

Funcin IP........................................................................................................................................- 670 -

Funcin LBOUND..........................................................................................................................- 671 -

Funcin LCASE$............................................................................................................................- 671 -

Funcin LEN ...................................................................................................................................- 671 -

Funcin LOG...................................................................................................................................- 672 -

Funcin LOG10..............................................................................................................................- 672 -

Funcin LOG2.................................................................................................................................- 672 -

Funcin LTRIM$...........................................................................................................................- 672 -

Funcin MAX..................................................................................................................................- 673 -

Funcin MAXLEN .........................................................................................................................- 673 -

Funcin MAXNUM........................................................................................................................- 673 -

Funcin MAXSIZE.........................................................................................................................- 673 -

Funcin MIN ...................................................................................................................................- 673 -

Funcin MOD..................................................................................................................................- 674 -

Funcin NCPOS..............................................................................................................................- 674 -

Funcin NCPOSR...........................................................................................................................- 674 -

Funcin de Arreglo NUL$.........................................................................................................- 675 -

Funcin NUM..................................................................................................................................- 675 -

Funcin NUM$...............................................................................................................................- 676 -

- 25 -
Tras los pasos de un... Hacker

Funcin ORD...................................................................................................................................- 676 -

Funcin PI........................................................................................................................................- 676 -

Funcin POS....................................................................................................................................- 677 -

Funcin POSR.................................................................................................................................- 677 -

Funcin RAD...................................................................................................................................- 678 -

Funcin REMAINDER.................................................................................................................- 678 -

Funcin REPEAT$........................................................................................................................- 678 -

Funcin RND ..................................................................................................................................- 678 -

Funcin ROUND ............................................................................................................................- 679 -

Funcin RTRIM$...........................................................................................................................- 679 -

Funcin RUNTIME.......................................................................................................................- 679 -

Funcin SEC....................................................................................................................................- 679 -

Funcin SGN ...................................................................................................................................- 680 -

Funcin SIN.....................................................................................................................................- 680 -

Funcin SINH.................................................................................................................................- 680 -

Funcin SIZE...................................................................................................................................- 680 -

Funcin SQR...................................................................................................................................- 681 -

Funcin STR$.................................................................................................................................- 681 -

Funcin STRWIDTH....................................................................................................................- 681 -

Funcin TAB...................................................................................................................................- 681 -

Funcin TAN...................................................................................................................................- 682 -

Funcin TANH ...............................................................................................................................- 682 -

Funcin TIME.................................................................................................................................- 682 -

- 26 -
Contenido

Funcin TIME$..............................................................................................................................- 683 -

Funcin TRIM$..............................................................................................................................- 683 -

Funcin de Arreglo TRN............................................................................................................- 683 -

Funcin TRUNCATE....................................................................................................................- 683 -

Funcin UBOUND.........................................................................................................................- 684 -

Funcin UCASE$...........................................................................................................................- 684 -

Funcin USING$............................................................................................................................- 684 -

Funcin VAL...................................................................................................................................- 685 -

Funcin de Arreglo ZER............................................................................................................- 685 -

Anexo V. Explicacin de los Mensajes de Error.........................................................................- 687 -

ndice Alfabtico.......................................................................................................................................- 719 -

- 27 -
Tras los pasos de un... Hacker

- 28 -
INTRODUCCIN (I)

Esta es la historia de mi vida, en tan pocos aos he vivido tantas y tantas


aventuras informticas, por las cuales para algunos represento un peligro
(especialmente para los organismos de control y poder de mi pas), para otros
soy una especie de leyenda o hroe a quien imitar. Por mis logros de
investigador cientista en el campo de la Informtica, he conseguido un espacio en
el concierto informtico local y mundial. No deseo que los hechos que relato en
este libro sean tomados al pie de la letra o como hechos histricos (aunque en mi
vida lo son); ms bien, pudieran ser atribuidos a la imaginacin y audacia propia
de un Hacker (con todo lo vivido hay que tomar precauciones), ya que algunas de
las situaciones que describo son de difcil comprobacin1 pero que han ocurrido
y solo las cuento con fines didcticos. Deslindo cualquier responsabilidad que me
pueda conllevar acciones o demandas de cualquier tipo.
El lector despus de analizar este texto podr sacar sus propias conclusiones y
sabr valorar el mensaje que este libro pretende difundir.
Tambin mis lectores ms jvenes, podrn introducirse en este fascinante mundo
de las Ciencias de la Computacin de una manera poco convencional y en s muy
emocionante. Usando la narrativa como herramienta motivadora, podrn
aprender algunos temas tcnicos que son materia de estudio en varios cursos de
computacin e informtica, donde explico en un lenguaje prctico y de fcil
entendimiento cmo incursionar en el arte de la programacin?
En fin, preprense que aqu comienza

... Nacun da lunes 23 de noviembre de 1.970 en la Ciudad de Quito, capital de la


Repblica del Ecuador, mi nacimiento segn dicen mis padres (Carlos y Cecilia, a
ellos mi respeto, cario y gratitud por todo lo que han hecho) y en especial mi

1 Especialmente los episodios relacionados con los militares y las agencias de investigacin del Gobierno de los Estados Unidos de Norte Amrica, ya
que existe una poltica de secretismo en ciertos aspectos que si salieran a la luz pblica, se conmocionara a la sociedad y sin duda cambiara la
Historia Nacional, usualmente existe una negativa oficial en confirmar tal o cual hecho; sino, pregunten al Gobierno Norteamericano si existe el
rea 51.

- 29 -
Tras los pasos de un... Hacker

madre, tuvo demasiadas complicaciones, ya que el periodo de mi gestacin, fue


truncado cumplido el sexto mes con una intervencin quirrgica que tena por
objetivo salvar la vida de mi madre. Los mdicos que la atendieron procedieron
con esta operacin; adems, aprovecharon para saber en qu condiciones me
encontraba?

Las posibilidades de sobrevivir eran de un 20%, pes aproximadamente 1 Kg y


mi vida se sostena con los aparatos que hoy en da prolongan la vida a las
personas que en otro tiempo o en otras circunstancias inevitablemente moriran,
pero en mi caso por suerte esto no sucedi. Las cosas no fueron tan fciles, en
artculo de muerte, aproximadamente a los 18 das de nacido, fui bautizado en la
Iglesia Catlica de Iaquito, el 11 de diciembre de 1.970 bajo los nombres de
Nstor Napolen. Aunque soy muy escptico de los temas religiosos y
paranormales, sin lugar a dudas creo que estos nombres influyeron en mi vida,
por esta razn har una breve resea de los mismos:

Nstor, es uno de los hroes legendarios de la Ilada. El menor de los 12


hijos que tuvieron sus padres Neleo y Cloris. El nico, que al no haber
participado en la aventura de sus hermanos que intentaron el robo de los
bueyes de Gerin, se salv de la matanza de los Nereidas protagonizada
por Hrcules. Fue uno de los Argonautas y en la guerra contra Troya se
distingui tanto por su arrojo en los combates como por su buen consejo
y elocuencia. Los sitiadores de Troya sentan por l una gran veneracin.
En su juventud se distingui en la guerra contra los arcadios y los eleos,
as como en la de los lapitas y los centauros. Nstor es en la Ilada y la
Odisea el prototipo del anciano experimentado, prudente y comprensivo
cuyo consejo es tan decisivo en la guerra como las armas. l, convenci a
Aquiles para que se uniese a la expedicin contra Troya y se reconcilie
con Agamenn. Nstor recibi la visita de Telmaco y sentenci cuando
vio la deslumbrante belleza de Helena, que justificaba la razn de aquella
cruel guerra.

Napolen (1.769-1.821), emperador de los franceses (1.804-1.815) que


consolid e instituy muchas de las reformas de la Revolucin Francesa.
Asimismo fue uno de los ms grandes militares de todos los tiempos,
conquist la mayor parte de Europa e intent modernizar las naciones en
las que gobern. Naci el 15 de agosto de 1.769 en Ajaccio (Crcega) y
recibi el nombre de Napoleone. Era el segundo de los ocho hijos de

- 30 -
La historia... Introduccin (I).

Carlos Bonaparte y Letizia Ramolino, miembros ambos de la pequea


burguesa corso-italiana. Su padre trabajaba como abogado y luch por la
independencia de Crcega; despus que los franceses ocuparan la isla en
1.768, ejerci como fiscal y juez e ingres en la aristocracia francesa con
el ttulo de conde.
Gracias a la influencia de su padre, la formacin de Napolen en Brienne y
en la Escuela Militar de Pars estuvo subvencionada por el propio Rey
Luis XVI. Termin sus estudios en 1.785 a los 16 aos y sirvi en un
regimiento de artillera con el grado de teniente. Una vez que dio
comienzo la Revolucin Francesa, pas a ser teniente coronel de la
Guardia Nacional Corsa (1.791); sin embargo, cuando Crcega declar su
independencia en 1.793, Bonaparte decididamente partidario del rgimen
republicano huy a Francia con su familia. Fue nombrado jefe de
artillera del ejrcito encargado de la reconquista de Toln, una base
naval alzada en armas contra la Repblica con el apoyo de Gran Bretaa
(que junto a Prusia, Austria, Holanda y Espaa, tras la declaracin de
guerra francesa a sta ltima, haban constituido la Primera Coalicin
contra Francia en 1.793). Reemplaz a un general herido y distribuyendo
hbilmente sus caones, expuls del puerto a las naves britnicas y
reconquist finalmente esta posicin. Como recompensa por su accin
Bonaparte fue ascendido a general de brigada a la edad de 24 aos. En
1.795 salv al gobierno revolucionario restableciendo el orden tras una
insurreccin realista desatada en Pars, acciones realizadas cuya
influencia histrica hizo que el gran Bolvar d la ansiada libertad a 5 de
nuestras naciones del dominio espaol y como podrn ver en el relato de
mi vida, las cualidades de ambos personajes se han presentado y sin
querer se han manifestado pero desde mi caballo de batalla, la
informtica.

Una vez pasada esta etapa de crisis en mi incipiente vida y con las condiciones
econmicas y polticas del pas de entonces (para los que no sepan, hay que
acotar que en el Ecuador se instaur una dictadura militar en 1.972), las
medicinas y tratamientos para poder darme una calidad de vida aceptable, hacan
que mi padre dentro de sus posibilidades de trabajo como mecnico, que no eran
diferentes a las de la mayora de la poblacin de clase media baja, haga esfuerzos
extraordinarios para solventar estos gastos y los que vendran.

- 31 -
Tras los pasos de un... Hacker

Pas el tiempo y al cumplir dos aos, todava perda de manera intempestiva la


coordinacin para caminar, de esta manera frecuentemente visitaba el Hospital
BACA ORTIZ, ya sea por las roturas de cabeza producidas por las cadas o por las
infecciones intestinales provocadas por todas y cada una de las cosas que un nio
de esa edad se lleva a su boca, nada especial que otros nios de mi pas no hayan
pasado hasta el momento, solo que para mi delicada salud, la carga de agentes
externos era demasiada para que mis disminuidas defensas corporales puedan
hacerles frente.
Al cursar el tercer ao de mi vida, por un descuido de mi abuela materna
(Antonia), inger veneno para ratas; veneno conocido en el medio como 10-80,
una vez ms llegu a la Sala de Emergencias del antes citado centro de salud y
los mdicos hicieron hasta lo imposible para salvarme la vida, desconozco los
nombres de quienes intervinieron en tan heroica accin, pero a todos ellos mi
sincero agradecimiento. Posterior a este incidente, durante los aos que me
atendieron y me trataron en tan noble institucin, los mdicos me conocan como
el nio que burl a la muerte; palabras predestinatorias de lo que en el futuro
hara al burlar a los sistemas del Departamento de Defensa de los Estados
Unidos de Norte Amrica y los sistemas anti-hackers que la CIA (Central
Intelligence Agency) y el FBI (Federal Bureau of Investigations) tienen instalados
en sus servidores de informacin a los cuales se tena acceso a travs de la
Internet (ARPANET), lo mismo que al atacar con fines didcticos al servidor de
correo electrnico del Ministerio de Defensa del Ecuador (Comando Conjunto de
las Fuerzas Armadas), atacar algunos portales bancarios locales con el nico afn
de probar qu tan seguros? eran sus esquemas de autenticacin; y, finalmente
cuando se desat la persecucin y la cacera de brujas por atrapar al
delincuente, hice uso de todos mis recursos intelectuales, materiales e
informticos para evitar que los grupos de lite de la Polica Nacional y Fuerzas
Militares de mi pas me atraparan (nada nuevo en la historia de un Hacker).
Transcurrira el tiempo, hasta cumplir 4 aos articulaba muy pocas frases,
siempre fui callado y de pocas palabras, as como renuente a estar con otros
nios, me gustaba la soledad y la observacin de las cosas, miraba el vuelo de los
pjaros, el caminar de los insectos, el movimiento de ciertos juguetes que para la
poca eran fuera de serie, ya que podan autopropulsarse al retrocederlos y
soltarlos. Juguetes que me los regalara mi to Tarquino, ya que por su carrera
militar, constantemente haca cursos en diversas partes del mundo y en una de
esas ocasiones haba comprado estos juguetes en Ciudad de Panam.

- 32 -
La historia... Introduccin (I).

Este inters innato de saber: Por qu existen estas cosas?, Cmo funcionan?,
Dnde estn los principios que las hacen funcionar?, etc., motivaban mi falta de
inters de realizar las actividades que otros nios a esa edad hacen y se
consideran normales, lo que yo haca dadas las manifestaciones tempranas de
inteligencia fuera de lo normal, determinaron que mis familiares cercanos me
pusieran el sobrenombre de GENIO.
Por fin lleg la etapa escolar, al cumplir 5 aos ingres sin pasar por la
preparatoria a primer grado de la Escuela Fiscal Luciano Andrade Marn
ubicada al norte de la capital, por razones de trabajo de mi padre no pude
terminar este primer ao de la escuela y volv a tomar este curso en la Escuela
Particular Paulo Sexto, escuela y colegio religioso regido por los Padres
Josefinos, ubicado al sur de Quito. En esta etapa de mi vida estudiantil, sobresal
en aprovechamiento y conducta, siendo uno de los mejores egresados de la
escuela en mencin. No era raro que sacara 13 sobre 10 (hoy se califica sobre 20
puntos), ya que en los ejercicios desarrollados en clase, el profesor de turno para
motivar a su alumnado ofreca 1 punto al examen al que terminara primero tal o
cual ejercicio, siempre fui el primero en mi clase y siempre obtena estos puntos,
al sacar 10 sobre 10 en el examen, no era raro que me quedaran debiendo puntos
para el prximo examen o ao. En las ferias de ciencias propona desarrollar
ambiciosos proyectos, que siempre eran galardonados al final del ao con sendos
diplomas y felicitaciones por parte de las autoridades de la escuela y colegio, he
perdido la cuenta del nmero de diplomas que poseo por haber sobresalido en
ciencias en la etapa escolar.
Avanza el tiempo y llegan los aos 80s, especficamente el ao de 1.983,
empezaba la etapa colegial y a la vez la primera ocasin que tuve de toparme con
una calculadora/computadora (Tandy Radio Shack modelo TRS-80 Pocket
Computer II, Fig. 40) que mi to Ral haba adquirido para cursar su carrera de
ingeniera civil en la Universidad Central del Ecuador. Al ver uno de los juegos
que posea esta mquina qued fascinado, y ms que fascinado, naci mi inters
por conocer: Cmo funcionaba esta maravillosa mquina?, Cmo poda jugar de
manera inteligente?, Cules eran los fundamentos que hacan funcionar estos
programas?
Pero como todo tiene una historia y para entender algo, uno tiene que conocer su
historia, me puse a investigar la Historia de la Computacin para satisfacer
algunas interrogantes que tena: Cuntas clases de computadoras existen?, Por
cules criterios las clasifican?, Cules son los ms importantes lenguajes de

- 33 -
Tras los pasos de un... Hacker

programacin que el hombre ha creado para programarlas?


En fin, muchos tpicos que hasta ese entonces permanecan en el ms absoluto
misterio, ya que en ese tiempo tener clases de computacin en el colegio sonaba a
ficcin...
Ms adelante, cuando retome el relato de mi vida continuar contndoles cmo
aprenda programar una computadora?
Hasta entonces, aprendan un poco de la Historia de la Computacin

- 34 -
CAPTULO I. HISTORIA DE LA COMPUTACIN

1.1 ANTECEDENTESHISTRICOS

Cuando el hombre tom conciencia de que existe y que adems de l existen otras
cosas que complementan su ambiente, como son agua, rocas, rboles, animales,
etc., sinti la necesidad de tomar propiedad de estos elementos, automticamente
con los medios que la naturaleza le haba dotado, intuitivamente surgi la idea de
nmero y con esta idea desarroll un mtodo para poder contar sus
pertenencias, empez con la utilizacin de sus dedos, con la invencin de la
escritura y de sus guarismos, inmediatamente cre los correspondientes a los de
su idea intuitiva de cantidad o nmero, es decir, los que hoy conocemos como
dgitos decimales.

FIG. 1. CONTABILIDAD BABILONIA.

Con la necesidad creada de llevar una cuenta de sus rebaos de ovejas, vacas,
cerdos, caballos, la produccin de sus sembros, cunto maz?, arroz, dtiles,
naranjas, etc., tiene y produce la tierra, saber cuntos de su especie existen en su
comarca?, nace una de las ciencias que ms ha fascinado al hombre, la
matemtica; y, con ella, grandes pensadores en la historia de la humanidad la
fueron perfeccionando, comenzando con los antiguos babilonios (Fig.1), los
grandes matemticos rabes, los griegos (Euclides, Pitgoras, etc.), los chinos
entre otros, que dieron forma y pudieron cristalizar ideas en conceptos

- 35 -
Tras los pasos de un... Hacker

matemticos, axiomas y teoremas, stos produciran a su vez los que se conocen


como mtodos numricos, que no son otra cosa que la aplicacin de los teoremas
y axiomas en la realizacin de clculos, como son por ejemplo, el mtodo de la
obtencin de la raz cuadrada, el clculo de la funcin trigonomtrica coseno, la
obtencin del rea de un tringulo, etc.

Los mtodos numricos que son llevados a cabo por las computadoras, son los
que en informtica se denominan algoritmos.
Con el perfeccionamiento de las formas de llevar a cabo estos clculos, el uso de
las primitivas formas de ayudarse para la obtencin de respuestas en las que no
utilice sus dedos, surge en la antigua China hace unos 5.000 aos una mquina
para agilizar la contabilidad, el denominado BACO (Fig. 2); al transcurrir el
tiempo, el hombre siempre ha querido agilizar los clculos; ha diseado
mquinas mecnicas para realizarlos.

FIG. 2. EL BACO.

Es el inventor y pintor Leonardo Da Vinci (1.452-1.519) quien ide una mquina


que fuese capaz de realizar sumas, la misma que quedara solo en diseo. En el
ao 1.642, cuando el joven matemtico francs Blaise Pascal (1.623-1.662, Fig.3,
en su honor existe un lenguaje de programacin de computadoras llamado
PASCAL), crea la primera sumadora mecnica que se denomin LA PASCALINA
(Fig. 4) como ayuda para que su padre pueda hacer sumas sin equivocarse. Esta
funcionaba a base de engranes y ruedas.

- 36 -
Historia de la Computacin... Captulo I.

FIG. 3. BLAISE PASCAL FIG. 4. LA PASCALINA.

Siguiendo el curso de esta historia, Charles Babbage (1.792-1.871, Fig. 5), quien
con sus ideas, si hubiera nacido 100 aos despus habra revolucionado la
historia de la humanidad; inventa una mquina que con las limitaciones
tecnolgicas de su poca era capaz de calcular tablas matemticas, a su invento lo
denomin la MQUINA DIFERENCIAL (Fig. 6).

FIG. 5. CHARLES BABBAGE. FIG. 6. MQUINA DIFERENCIAL.

En 1.834, cuando trabajaba en los avances de la mquina que haba creado,


Babbage concibi la idea de una MQUINA ANALTICA. En esencia, esta era una
computadora de propsito general, que era capaz de sumar, restar, multiplicar y
dividir (estos mtodos los estudiaremos a fondo en este texto) a una velocidad de
una suma por segundo!
El diseo requera miles de engranes y mecanismos que ocupaban el rea de un
estadio de ftbol, Babbage trabaj en su mquina analtica hasta su muerte. Los
planos del detalle de su mquina, describan las caractersticas que hoy son parte
de la computadora.
Siguiendo en este interesante relato, la mquina de tejer inventada en 1.801 por

- 37 -
Tras los pasos de un... Hacker

Joseph Marie Jacquard (1.753-1.834) usada todava en la actualidad, se controla


por medio de tarjetas perforadas.
El telar de Jacquard opera de la siguiente manera: Las tarjetas se perforan
estratgicamente y se acomodan en cierta secuencia para indicar un diseo de
tejido en particular.
Charles Babbage quiso aplicar el concepto de las tarjetas perforadas del telar en
su mquina analtica.

FIG. 7. LADY ADA BYRON DE LOVELACE.

En 1.843, Lady Ada Augusta Byron de Lovelace (1.815-1.852, en su honor un


lenguaje de programacin de computadoras se llama ADA, Fig. 7), sugiri la idea
de que las tarjetas perforadas pudieran adaptarse de manera que propiciaran
que la mquina de Babbage repitiera ciertas operaciones.
Por estas ideas, a Lady Byron se la considera la primera programadora.
En el nuevo mundo, la oficina de censos de los Estados Unidos de Norte Amrica,
comision al experto en estadstica Herman Hollerith (1.860-1.929, Fig. 8), para
que llevara a cabo el censo de 1.890. Para conseguir esto, Hollerith ide y
construy una mquina que era capaz de leer tarjetas perforadas y contabilizar
estos resultados, con esta mquina el censo se termin en slo tres aos y la
oficina se ahorr alrededor de 5 millones de dlares. As empieza lo que hoy
conocemos como procesamiento automtico de datos. Hollerith no copi las
ideas de Jacquard, sino que su trabajo se bas en la denominada fotografa de

- 38 -
Historia de la Computacin... Captulo I.

perforacin, con la que algunas compaas de transporte ferroviario de la poca


expedan boletos con descripciones fsicas del pasajero; los conductores hacan
orificios en los boletos que describan el color de cabello, de los ojos y la forma de
la nariz del pasajero.
Estos detalles le dieron a Hollerith la idea de hacer una fotografa perforada de
cada persona que iba a ser censada. Con el logro de este contrato con el gobierno,
Hollerith funda la Tabulating Machine Company, luego form la Computing
Tabulating Recording Company.

FIG. 8. HOLLERITH.

Los resultados de las mquinas tabuladoras tenan que ser actualizados de


manera manual, hasta que en 1.919 la Computing Tabulating Recording
Company anunci la aparicin de la impresora/listadora. Esta innovacin
revolucion la manera en que las empresas efectuaban sus operaciones y es en
1.924 cuando la compaa de Hollerith, cambia el nombre por el mundialmente
conocido International Business Machines Co. (Logo IBM, Fig. 9).

FIG. 9. LOGOTIPO ORIGINAL DE LA IBM.

- 39 -
Tras los pasos de un... Hacker

Una antigua patente de un dispositivo que mucha gente crey que era la primera
computadora digital electrnica, se invalid en 1.973 por orden de un tribunal
federal y oficialmente se le dio el crdito a John Vincent Atanasoff (1.903-1.995,
Fig. 10) como el inventor de la computadora digital electrnica. El Dr. Atanasoff,
catedrtico de la Universidad Estatal de Iowa, desarroll la primera computadora
digital electrnica entre los aos 1.937 a 1.942.

FIG. 10. ATANASOFF. FIG. 11. BERRY.

Llam a su invento la computadora Atanasoff-Berry solo ABC (Atanasoff-Berry


Computer). Un estudiante graduado, Clifford Edward Berry (1.918-1.963, Fig.
11) fue de til ayuda en la construccin de la computadora ABC. (Fig. 12).

Algunos autores consideran que no hay una sola persona a la que se le pueda
atribuir el haber inventado la computadora, sino que fue el esfuerzo de muchas
personas.

FIG. 12. COMPUTADORA ABC.

- 40 -
Historia de la Computacin... Captulo I.

Sin embargo en el antiguo edificio de Fsica de la Universidad de Iowa aparece


una placa con la siguiente leyenda: La primera computadora digital electrnica
de operacin automtica del mundo, fue construida en este edificio en 1.939 por
John Vincent Atanasoff, matemtico y fsico de la facultad de la Universidad,
quien concibi la idea y por Clifford Edward Berry estudiante graduado en fsica.
Poco tiempo despus, Mauchly y Eckert, despus de varias conversaciones con el
Dr. Atanasoff, leer los apuntes que describan los principios de la computadora
ABC y verla personalmente, el Dr. John W. Mauchly (1.907-1.980, Fig. 13)
colabor con J. Presper Eckert, Jr. (1.919-1.995, Fig. 14) para desarrollar una
mquina que calculara tablas de trayectoria de proyectiles para el ejrcito
estadounidense.

FIG. 13. JOHN MAUCHLY. FIG. 14. PRESPER ECKERT.

El proyecto final, una computadora electrnica completamente operacional a


gran escala, se termin en 1.946 y se llam ENIAC (Electronic Numerical
Integrator And Computer, Fig. 15), Integrador Numrico y Calculador
Electrnico. La ENIAC construida para aplicaciones de la Segunda Guerra
Mundial se fabric en 30 meses por un equipo de cientficos que trabajaban
contra reloj.
La ENIAC, mil veces ms veloz que sus predecesoras electromecnicas, irrumpi
como un importante descubrimiento en la tecnologa de la computacin. Pesaba
30 toneladas y ocupaba un espacio de 450 metros cuadrados, llenaba un cuarto
de 6m x 12m y contena 18.000 bulbos, tena que programarse manualmente
conectndola a 3 tableros que contenan ms de 6.000 interruptores.
Ingresar un nuevo programa era un proceso muy tedioso que requera das o
incluso semanas. A diferencia de las computadoras actuales que operan con un
sistema binario (0,1) la ENIAC operaba con uno decimal (0,..., 9), la ENIAC

- 41 -
Tras los pasos de un... Hacker

requera una gran cantidad de electricidad. Una leyenda cuenta que la ENIAC,
construida en la Universidad de Pennsylvania, bajaba las luces de Filadelfia
siempre que se activaba.
La imponente escala y las numerosas aplicaciones generales de la ENIAC,
sealaron el comienzo de la primera generacin de computadoras.

FIG. 15. MAUCHLY Y LA ENIAC.

En 1.954, John von Neumann (1.903-1.957, Fig. 16), que haba trabajado con
Eckert y Mauchly en la Universidad de Pennsylvania, public un artculo acerca
del almacenamiento, carga y ejecucin de los programas.
El concepto de programa almacenado, permiti la lectura de un programa dentro
de la memoria de la computadora, el mismo, que despus de su ejecucin no
necesitaba que sus instrucciones vuelvan a ser ingresadas.
La primera computadora en usar el citado concepto fue la llamada EDVAC
(Electronic Discrete Variable Automatic Computer, es decir Computadora
Automtica Electrnica de Variable Discreta), desarrollada por Von Neumann,
Eckert y Mauchly.
Los programas almacenados dieron a las computadoras una flexibilidad y
confiabilidad tremenda, hacindolas ms rpidas y sujetas a menos errores que
los programas mecnicos.

- 42 -
Historia de la Computacin... Captulo I.

FIG. 16. JOHNVONNEUMANN.

Una computadora con capacidad de programa almacenado podra ser utilizada


para varias aplicaciones, cargando y ejecutando el programa apropiado. Hasta
este punto, los programas y datos podan ser ingresados en la computadora slo
con la notacin binaria, que es el nico cdigo que las computadoras entienden.
Ahora, paremos un momento este interesante relato, para hablar de lo que los
informticos conocen como Generaciones de las Computadoras.

1.2 GENERACIONES DE LAS COMPUTADORAS

PRIMERA GENERACIN
(De 1.951 a 1.958, Tecnologa Electromecnica)
Las computadoras de la primera generacin emplearon bulbos para procesar
informacin. Los operadores ingresaban los datos y programas en un cdigo
especial por medio de tarjetas perforadas. El almacenamiento interno se lograba
con un tambor que giraba rpidamente, sobre el cual un dispositivo de
lectura/escritura colocaba marcas magnticas. Esas computadoras de bulbos
eran mucho ms grandes y generaban ms calor que los modelos

- 43 -
Tras los pasos de un... Hacker

contemporneos, Eckert y Mauchly contribuyeron al desarrollo de computadoras


de la Primera Generacin formando una compaa privada y construyendo la
UNIVACI (UNIVersal Automatic Computer I, Computadora Automtica Universal
I, Fig. 17.), que la oficina de censos de los Estados Unidos de Norteamrica utiliz
para realizar el censo de 1.950.
La IBM tena el monopolio de los equipos de procesamiento de datos, basndose
en tarjetas perforadas y estaba teniendo un gran auge en productos como
rebanadores de carne, bsculas para comestibles, relojes y otros artculos; sin
embargo no haba logrado el contrato para el censo de 1.950.

FIG. 17. UNIVAC

Comenz entonces a construir computadoras electrnicas y su primera entrada


comercial fue en 1.953.

SEGUNDA GENERACIN
(De 1.959 a 1.964, tecnologa de Transistores)
El invento del transistor (Fig. 18) hizo posible una nueva generacin de
computadoras, ms rpidas, ms pequeas y con menores necesidades de
ventilacin y energa.
Sin embargo, su costo segua siendo un factor significativo del presupuesto de

- 44 -
Historia de la Computacin... Captulo I.

una compaa. Las computadoras de la segunda generacin tambin utilizaban


redes de ncleos magnticos (Fig. 19) en lugar de tambores giratorios para el
almacenamiento primario.
Estos ncleos contenan pequeos anillos de material magntico, enlazados entre
s, en los cuales podan almacenarse datos e instrucciones.

FIG. 18. EL TRANSISTOR. FIG. 19. NCLEO MAGNTICO.

Los programas de computadoras tambin mejoraron, el COBOL desarrollado


durante la primera generacin estaba ya disponible comercialmente. Los
programas escritos para una computadora podan transferirse a otra con un
mnimo esfuerzo.

FIG. 20. IBM 311.

Para escribir un programa, el programador ya no requera entender plenamente


el funcionamiento del hardware de la computadora. Las computadoras de la

- 45 -
Tras los pasos de un... Hacker

segunda generacin eran substancialmente ms pequeas y rpidas que las de


bulbos y se usaban para nuevas aplicaciones, como en los sistemas de reservas en
las lneas areas, control de trfico areo y simulaciones para uso general.

Las empresas comenzaron a aplicar las computadoras a tareas de


almacenamiento de registros, como manejo de inventarios, nmina y
contabilidad. La Marina de los Estados Unidos de Norte Amrica utiliz las
computadoras para crear el primer simulador de vuelo (Whirlwind I).
Honeywell se coloc como el primer competidor durante la segunda generacin
de computadoras.
Burroughs, Univac, NCR, CDC, Honeywell, los ms grandes competidores de IBM
(Fig. 20), durante la dcada de 1.960 se conocieron como el grupo BUNCH (por
sus siglas).

TERCERA GENERACIN
(De 1.964 a 1.971, Tecnologa de Circuitos Integrados)
Las computadoras de la tercera generacin surgieron con el desarrollo de los
circuitos integrados (pastillas de silicio) en las cuales se colocan miles de
componentes electrnicos, en una integracin en miniatura.
Las computadoras nuevamente se hicieron ms pequeas, ms rpidas,
despedan menos calor y eran energticamente ms eficientes. Antes del
advenimiento de los circuitos integrados, las computadoras estaban diseadas
para aplicaciones matemticas o de negocios, pero no para las dos cosas a la vez.
Los circuitos integrados permitieron a los fabricantes de computadoras
incrementar la flexibilidad de los programas y estandarizar sus modelos.
La IBM 360 (Fig. 21), una de las primeras computadoras comerciales que us
circuitos integrados; poda realizar, tanto anlisis numrico como administracin
procesamiento de archivos.
Los clientes podan escalar sus sistemas 360 a modelos IBM de mayor tamao y
podan todava correr sus programas actuales. Las computadoras trabajaban a
tal velocidad que proporcionaban la capacidad de correr ms de un programa de
manera simultnea (ejecucin de programas en tiempo compartido). Por
ejemplo la computadora poda estar calculando la nmina y aceptando pedidos al
mismo tiempo. Con la introduccin del modelo 360, IBM acapar el 70% del

- 46 -
Historia de la Computacin... Captulo I.

mercado.

FIG. 21. IBM 360.

Para evitar competir directamente con IBM, la empresa DEC (Digital Equipment
Corporation), dirigi sus esfuerzos hacia computadoras pequeas. Mucho ms
pequeas, mucho ms econmicas de fabricar y por consiguiente su precio de
venta fue ms asequible que las computadoras grandes, las minicomputadoras se
desarrollaron durante la segunda generacin pero alcanzaron su mayor auge
entre 1.960 y 1.970.

CUARTA GENERACIN
(De 1.971 a ?.???, tecnologa de microprocesadores)
Dos mejoras en la tecnologa de las computadoras marcan el inicio de la cuarta
generacin: El reemplazo de las memorias con ncleos magnticos por las de
chips de silicio; y, la colocacin de muchos ms componentes en un chip producto
de la miniaturizacin de los circuitos electrnicos.
El tamao reducido del chip microprocesador (Fig. 22), hizo posible la creacin
de las computadoras personales.
Hoy en da las tecnologas LSI (Large Scale Integration, integracin a gran escala)
y VLSI (Very Large Scale Integration, integracin a muy gran escala) permiten que
cientos de miles de componentes electrnicos se almacenen en un chip.

- 47 -
Tras los pasos de un... Hacker

FIG. 22. MICROPROCESADOR.

Usando la VLSI, un fabricante puede hacer que una computadora pequea del
tamao de un cuaderno (notebook), supere a una computadora de la primera
generacin que ocupaba un cuarto completo.

Nota del autor:


Podramos dar por terminada esta referencia a la Historia de la Computacin, del desarrollo y
optimizacin que han tenido estas mquinas desde los aos de 1.980 hasta nuestros das,
fabricantes como Intel, AMD, Texas Instruments, Nokia, etc., han miniaturizado tanto las partes
de una computadora, que hoy en da podemos tener prcticamente una potente computadora en
nuestro telfono celular.
Finalizamos en este punto la Historia de la Computacin, ya que no se olviden que esta
investigacin la hice aproximadamente en 1.985, as que como buenos admiradores de los
Hackers les queda el trabajo de completar esta historia e investigar si se ha podido clasificar
nuevas generaciones de las computadoras

1.3 LAS COMPUTADORAS.

Atendiendo a los requerimientos para un uso particular de la computadora, los


fabricantes de hardware, bajo contrato especial con los gobiernos de los pases
desarrollados elaboran las supercomputadoras.

SUPERCOMPUTADORAS
Una supercomputadora (Fig. 23) es el tipo de computadora ms potente y ms
rpida que existe en un momento dado. Estas mquinas estn diseadas para

- 48 -
Historia de la Computacin... Captulo I.

procesar enormes cantidades de informacin en poco tiempo y son dedicadas a


una tarea especfica.

FIG. 23. SUPERCOMPUTADORA COLLOSSUS.

As mismo son las ms caras, sus precios alcanzan los 300 millones de dlares y
ms, cuentan con un sistema especial de control de temperatura para eliminar el
calor que algunos componentes generan.
Unos ejemplos de tareas a las que son expuestas las supercomputadoras son los
siguientes:
Bsqueda y estudio de la energa y armas nucleares.
Bsqueda de yacimientos petrolferos con grandes bases de datos
ssmicos.
El estudio y prediccin de tornados.
El estudio y prediccin del clima de cualquier parte del mundo.
La elaboracin de maquetas y proyectos de la creacin de aviones,
simuladores de vuelo, etc.
Debido a su precio son muy pocas las supercomputadoras que se construyen en
un ao.

MACROCOMPUTADORAS O MAINFRAMES
Las macrocomputadoras son tambin conocidas como mainframes (Fig. 24). Los
mainframes son grandes, rpidos y caros sistemas que son capaces de soportar
los requerimientos de cientos de usuarios simultneamente as como cientos de

- 49 -
Tras los pasos de un... Hacker

dispositivos de entrada y salida. Los mainframes tienen un costo que va desde


350.000 dlares hasta varios millones de dlares. De alguna forma los
mainframes son ms poderosos que las supercomputadoras porque soportan
ms programas simultneamente, pero las supercomputadoras pueden ejecutar
un solo programa ms rpido que un mainframe.

FIG. 24. MAINFRAME IBM 360/20.

En el pasado, los mainframes ocupaban cuartos completos o hasta pisos enteros


de algn edificio, hoy en da, un mainframe es parecido a una hilera de archiveros
en algn cuarto con piso falso, esto para ocultar los cientos de cables de los
perifricos y su temperatura tiene que estar controlada.

MINICOMPUTADORAS
En 1.960 surgi la minicomputadora (Fig. 25), una versin ms pequea de la
macrocomputadora. Al ser orientada a tareas especficas, no requera de todos
los perifricos que necesita un mainframe, esto ayud a reducir el precio y costos
del mantenimiento.
Las minicomputadoras, en tamao y poder de procesamiento, se encuentran
entre los mainframes y las estaciones de trabajo.
En general, una minicomputadora es un sistema multiproceso (varios procesos
en paralelo) capaz de soportar de 10 hasta 200 usuarios simultneamente.

- 50 -
Historia de la Computacin... Captulo I.

FIG. 25. MINICOMPUTADORA IBM.

Actualmente se usan para almacenar grandes bases de datos, automatizacin


industrial y aplicaciones multiusuario.

MICROCOMPUTADORAS O PC
Las microcomputadoras o Computadoras Personales (PCs, Personal Computer),
tuvieron su origen con la creacin de los microprocesadores.

FIG. 26. IBM PC.

Un microprocesador es una computadora en un chip, es un circuito integrado


independiente de otros especializados. Las PCs son computadoras para uso
personal, relativamente baratas y actualmente se encuentran en las oficinas,
escuelas y hogares.
El trmino PC se deriva del hecho que para el ao de 1.981, la IBM Co., puso a la

- 51 -
Tras los pasos de un... Hacker

venta su modelo IBM PC (Fig.26), la cual se convirti en un tipo de computadora


ideal para uso personal, de ah que el trmino PC se estandariz y los clones que
salieron posteriormente fabricados por otras empresas fueron llamados PC
compatibles, usando procesadores del mismo tipo que las IBM PC, a un costo
menor podan ejecutar el mismo tipo de programas.
Existen otros tipos de microcomputadoras como la Macintosh (Fig. 27) que no
son compatibles con la IBM PC, pero que en muchos de los casos se les llama
tambin PCs, por ser de uso personal.
En la actualidad existen varios diseos de una PC:
Computadoras personales con un gabinete tipo mini torre, separado del
monitor.

FIG. 27. MACINTOSH.

Computadoras personales porttiles Laptop o Notebook son


computadoras que integran en una sola unidad compacta el monitor y la
CPU, estn diseadas para poder ser transportadas de un lugar a otro. Se
alimentan por medio de bateras recargables, pesan entre 2 y 5 kilos, la
mayora trae integrada una pantalla LCD (Liquid Crystal Display).

ESTACIONES DETRABAJO OWORKSTATIONS

Las estaciones de trabajo se encuentran por debajo de las minicomputadoras y


las macrocomputadoras (por el poder de procesamiento). Las estaciones de
trabajo son un tipo de computadoras que se utilizan para aplicaciones que se
requieran de poder de procesamiento moderado y capacidades de grficos de

-52 -
Historia de la Computacin... Captulo I.

alta calidad, se usan principalmente en:


Aplicaciones de Ingeniera CAD. (Computer Aided Design, Diseo Asistido
por Computadora)
CAM. (Computer Aided Manufacturing, Fabricacin Asistida por
Computadora)
Publicidad.
Creacin de Software en redes.

La palabra Workstation o estacin de trabajo se utiliza para referirse a


cualquier computadora que est conectada a una red de rea local (LAN, Local
Area Network).

1.4 LENGUAJES DE PROGRAMACIN

Los lenguajes de programacin sirven para fabricar los programas de


computadoras o SOFTWARE, existen, por su forma de trabajar, tres grupos
principales: los compiladores, los intrpretes (tambin conocidos como lenguajes
de alto nivel) y los lenguajes mquina (tambin conocidos como lenguajes de
bajo nivel). Los primeros funcionan de la siguiente manera: el programador
tiene que escribir todo el cdigo fuente del programa y dada la orden necesaria,
el compilador, verifica en primer lugar la sintaxis del programa digitado, luego la
estructura del programa, si no existe ningn error, procede a crear una versin
del programa en un cdigo llamado objeto, con un programa especial
denominado enlazador o linker une todas las piezas necesarias para generar una
versin ejecutable del programa y solo en este momento podemos observar si el
programa realiza las operaciones deseadas. Por el contrario, los intrpretes
ejecutan instruccin por instruccin el cdigo fuente y podemos en cualquier
momento verificar los resultados que arroja el programa, en la actualidad la
mayora de los lenguajes de programacin de alto nivel trabajan de las dos
maneras.
Un captulo aparte lo constituyen los lenguajes mquina ya que sus diseos estn
orientados a optimizar y sacar el mayor provecho del microprocesador y
controlar las funciones de la computadora. Este es el nico lenguaje que entiende
la computadora y es especfico para cada grupo de computadoras; as, todos los
lenguajes de alto nivel generarn una versin del programa que se ha escrito en

- 53 -
Tras los pasos de un... Hacker

lenguaje mquina. Una cosa importante que vale la pena recalcar, del cdigo
fuente escrito en un lenguaje de alto nivel siempre se puede obtener su
equivalente en lenguaje mquina, pero es extremadamente difcil, a partir de un
programa en lenguaje mquina, obtener una versin del mismo en un lenguaje de
alto nivel (a este proceso se lo conoce como ingeniera reversa o inversa, que es
sancionado en muchos pases que respetan la propiedad intelectual de un
programa, incluido el Ecuador).
Por su orientacin, los lenguajes de programacin como ya se mencion, los
podemos dividir en:
a) Lenguajes de alto nivel: A este grupo pertenecen lenguajes como COBOL
(COmmon Business - Oriented Language, Lenguaje orientado a la gestin
en negocios), FORTRAN (FORmula TRANslation, Lenguaje orientado a la
resolucin de frmulas, muy usado en aplicaciones cientficas), ALGOL
(ALGOrithmic Language, Lenguaje orientado para aplicaciones
cientficas), LISP (LISt Processing), FORTH (FOuRTH-generation
language), BASIC (Beginners All-purpose Symbolic Instruction Code,
Lenguaje de uso general), PASCAL, ADA, LOGO, C, etc., los cuales estn
orientados a que el humano entienda la lgica del programa, lo modifique
y mantenga el cdigo. Las aplicaciones modernas son desarrolladas en
este tipo de lenguajes.
b) Lenguajes de bajo nivel: Cuyo programa editor se lo conoce como
ensamblador y el programa obtenido como programa en lenguaje
mquina, los cuales sirven para hacer programas de uso especfico en
una computadora, en estos lenguajes se desarrollan por ejemplo: los
controladores de la computadora, las rutinas del BIOS (Basic
Input/Output System), los controladores de las tarjetas de video, mdems
y perifricos especializados. Este tipo de lenguajes, estn orientados a
que su sintaxis sea entendida por la mquina y no por el ser humano; por
lo que, los programas escritos en estos lenguajes son de difcil
comprensin, por consiguiente dificultan su mantenimiento y
portabilidad.

Revisemos un poco la historia de los principales lenguajes de programacin de


alto nivel por orden cronolgico de creacin:

- 54 -
Historia de la Computacin... Captulo I.

COBOL (1.951)

(COmmon Business - Oriented Language)


COBOL nace en 1.951, auspiciado por el Departamento de Defensa de los Estados
Unidos de Norte Amrica, para facilitar la administracin de las aplicaciones
programadas hasta aquel tiempo directamente en el HARDWARE de la
computadora y es en 1.952, que el equipo liderado por Grace Murria Hopper
(1.906-1.992, Fig. 28) una oficial de la Marina de EE. UU., desarroll el primer
compilador, un programa que puede traducir enunciados parecidos al ingls a un
cdigo binario comprensible para una computadora. A este lenguaje se lo llam
COBOL (COmmon Business - Oriented Language); sus siglas, nos dicen los
objetivos bsicos para los que fue diseado este lenguaje, que est especializado
en tareas de gestin, el cual ha sido muy popular para el desarrollo de varias
aplicaciones; especialmente, las diseadas para las mini computadoras y grandes
equipos, por su popularidad, se han creado varios estndares.

FIG. 28. GRACE HOPPER.

FORTRAN (1.954)

(FORmula TRANslation)
FORTRAN se desarroll en 1.954, el lder de este proyecto fue John Backus
(1.924-, Fig. 29). FORTRAN I, la primera versin fue implementada sobre la

- 55 -
Tras los pasos de un... Hacker

computadora IBM 704 en 1.956, dos aos ms tarde, evolucion y se present el


FORTRAN II. En el periodo comprendido entre 1.958 a 1.962, FORTRAN se
implement sobre varias computadoras. FORTRAN III fue desarrollado en ese
periodo, pero debido a que su diseo dependa demasiado de la mquina, nunca
se distribuy para uso pblico.
En 1.962 FORTRAN IV fue desarrollado para las computadoras IBM 7090/7094.
Durante esos mismos aos la American Standards Association despus llamada
ANSI (American National Standards Institute), form un comit para definir una
versin estndar de FORTRAN.

FIG. 29. JOHNBACKUS.

Este comit produjo dos versiones estndares de FORTRAN en 1.966: la


denominada Basic FORTRAN que era similar a FORTRAN II, la otra se llam
FORTRAN y era similar a FORTRAN IV.
El uso de FORTRAN est casi destinado nicamente al rea de las aplicaciones
cientficas y de la ingeniera, ltimamente las versiones de FORTRAN extienden
funciones que permiten que FORTRAN sea tambin utilizado en el procesamiento
de datos y procesamiento de textos.

ALGOL (1.958)

(ALGOrithmic Language)
ALGOL surge en 1.958 a raz de un proyecto del cientfico dans Peter Naur
(1.928-, Fig. 30), un consorcio internacional promovi el desarrollo de un
programa de alto nivel, inicialmente para aplicaciones cientficas, que algn

- 56 -
Historia de la Computacin... Captulo I.

tiempo ms tarde se plasmara en el ALGOL. A pesar de sus cualidades para


clculos numricos, el tratamiento de entradas/salidas y procesos recursivos, el
ALGOL es uno de los lenguajes que no ha evolucionado con el paso del tiempo.

FIG. 30. PETER NAUR.

LISP (1.959)

(LISt Processing)
LISP nace en 1.959 y fue diseado para la manipulacin de frmulas simblicas.
Su uso es extensivo en el campo de la Inteligencia Artificial, expresa algoritmos
recursivos a partir del clculo lambda.
Fue desarrollado por John McCarthy (1.927-, Fig. 31) y su equipo, en los aos de
1.956 a 1.958 e implementado de 1.959 a 1.962, consista en representar la
informacin en un lenguaje formal y desarrollar un programa que razonara
haciendo inferencias (se definen unas reglas de lgica y se puede decir que se dan
las bases del razonamiento humano) sobre ella.
Las representaciones eran en forma de estructura de listas. Durante la primera
implementacin (59-62) se le aadieron caractersticas prog y la funcin
eval, las cuales dieron lugar al LISP1.5.
LISP se implement experimentalmente sobre el IBM 704 en 1.960 y se
desarroll un intrprete para uso productivo en 1.962. Se han producido varios
dialectos de LISP (MACLISP e INTERLISP) adems del compilador usado en
Berkeley llamado FranzLisp. LISP todava no ha sido estandarizado.
Su uso est restringido a aplicaciones de inteligencia artificial y robtica, recibe
datos en forma de smbolos y estructuras de expresiones simblicas. Trabaja la

- 57 -
Tras los pasos de un... Hacker

diferenciacin simblica, integracin y verificacin de teoremas matemticos, en


las versiones ms modernas, se busca la manera de que comprenda el lenguaje
natural humano, visin por computadora, robtica, representacin del
conocimiento y sistemas expertos.

FIG. 31. JOHNMCCARTHY.

FORTH (1.960)

(FOuRTH-generation language)
FORTH, fue creado en 1.960 por el astrnomo Charles Moore (1.9??-, Fig. 32)
con una sintaxis parecida a LISP, utiliza notacin polaca inversa para los clculos.
Es usado ampliamente en aplicaciones de control de procesos, sistemas de
tiempo real, robtica e inteligencia artificial. Maneja nicamente nmeros
enteros. Est orientado al desarrollo de software para microcontroladores y
microprocesadores. Proporciona una gran velocidad de ejecucin y un manejo
eficiente de la memoria.
A pesar de estar catalogado como lenguaje de alto nivel, mantiene una acusada
proximidad con la mquina. Otra caracterstica reseable en su evolucin: El
FORTH permite al usuario crear sus propios comandos de una forma similar a
como se hace en LOGO; FORTH garantiza el acceso rpido al catlogo de
funciones que mantiene (en l se incluyen las rutinas definidas por el usuario).

FORTH es muy similar a LOGO, ambos son ampliables e interactivos, la principal


diferencia entre ellos proviene de los usuarios a los que estn destinados.
Mientras que LOGO tiene fundamentalmente carcter educativo, FORTH estaba
destinado a usuarios que exigan velocidad de ejecucin (a costa de la cual

- 58 -
Historia de la Computacin... Captulo I.

admitirn algunas incomodidades). Existen tres dialectos principales de FORTH:


el fig FORTH (de FORTH Interest Group) y los estndares FORTH-79 y
FORTH-83.

FIG. 32. CHARLES MOORE.

BASIC (1.964)

(Beginners All-purpose Symbolic Instruction Code)


BASIC es iniciado en 1.963 y puesto a punto en 1.964 en el Dartmouth College por
los profesores John G. Kemeny (1.926-1.992, Fig. 33, izquierda) y Thomas E.
Kurtz (1.928-, Fig. 33, derecha), basados principalmente en los conceptos y
forma de trabajar del FORTRAN y el ALGOL, su primera ejecucin exitosa fue el 1
de mayo de 1.964, concebido como un lenguaje interactivo, polivalente, de fcil
aprendizaje y uso. Es el lenguaje de programacin de computadoras que ms
usuarios a nivel mundial tiene, por ejemplo, un dialecto de BASIC, es el usado
para programar las denominadas macros en paquetes comerciales mundialmente
famosos como lo es el entorno integrado Microsoft Office, de la empresa
americana Microsoft Corp. (Lder indiscutible de la industria informtica) y es
gracias a esta empresa que BASIC debe su mayor popularidad en el mundo.
Sus fundadores Bill Gates (1.955-, Fig.34) y Paul Allen (1.953-, Fig.35), en 1.975
implementan una versin de BASIC, que la denominan GW-BASIC. Cuando la IBM
lanza su primera microcomputadora en el ao 1.981, incorpora de fbrica una
versin licenciada de Microsoft denominada BASICA, que era puesta en un chip
de la computadora, este factor hace que todas las fbricas de microcomputadoras
para ser competitivas en el mercado incluyeran un dialecto propio de BASIC con
caractersticas que eran dependientes del hardware de cada fabricante, por
consiguiente, los usuarios de estas computadoras para el desarrollo de

- 59 -
Tras los pasos de un... Hacker

programas, aprenderan a programar en BASIC.


Los programas desarrollados en una versin determinada de BASIC, no se
ejecutaban en otra versin, requeran que el programador hiciera los cambios
necesarios para que funcione en la computadora de otro fabricante; cada dialecto
que apareca en el mercado, se iba ms y ms alejando de la concepcin original
del BASIC.

FIG. 33. JOHN G. KEMENY & THOMAS E. KURTZ.

El BASIC ya era popular, incluso antes del gran boom de la PC, ya que tambin era
incorporado en las grandes computadoras y enseado en casi todas las escuelas y
universidades de Estados Unidos y el mundo.

FIG. 34. BILL GATES. FIG. 35. PAUL ALLEN.

- 60 -
Historia de la Computacin... Captulo I.

Los creadores originales del BASIC en el ao de 1.983, fundan la empresa True


BASIC Inc., con el objetivo de crear una versin moderna de BASIC, que cumpla
con los estndares internacionales, para que el cdigo de programas que se
desarrollen en este lenguaje sea portable con un mnimo de cambios o ninguno
en la mayora de los casos, la versin as desarrollada la denominaron True
BASIC, su uso principal es el mbito educativo y desarrollo profesional de
aplicaciones.

PASCAL (1.970)

(En honor a Blaise Pascal.)


PASCAL fue desarrollado en la dcada de 1.960 por el profesor Niklaus Wirth
(1.934-, Fig. 36) y es en el ao de 1.969 en la Escuela Politcnica de Zrich que
vio la luz pblica partiendo de los fundamentos del ALGOL.
En los aos 60 se ofrecieron soluciones para extender, revisar y actualizar
ALGOL. Niklaus Wirth, un miembro original del comit de trabajo de ALGOL,
desarroll una versin especial conocida como ALGOL W.
Ms tarde, el propio grupo de trabajo de ALGOL desarroll una extensin ms
rica y elaborada conocida como ALGOL.
ALGOL 68 fue un lenguaje de propsito general con aplicaciones en un amplio
rango de reas disciplinarias, sus desarrolladores tuvieron dificultad en elaborar
compiladores para el ALGOL 68 y hubo discrepancia entre los miembros del
grupo de trabajo sobre la posibilidad de que este nuevo lenguaje fuera demasiado
ambicioso para ser prctico.

FIG. 36. NICKLAUS WIRTH.

- 61 -
Tras los pasos de un... Hacker

Wirth dise un sucesor ms reducido del ALGOL 68 y lo llam PASCAL. Su


primer compilador se implement en 1.970 y una nueva versin revisada fue
definida e implementada en 1.973, el manual de usuario de este PASCAL, se
convirti en la definicin estndar aceptada universalmente del PASCAL, la cual
fue formalmente estandarizada en 1.983.
El uso principal del PASCAL es el de la enseanza de tcnicas de programacin
estructurada, implementacin y desarrollo de nuevos algoritmos.

ADA (1.975)

(En honor a Lady Ada Augusta Byron de Lovelace)


ADA nace en 1.975 y fue patrocinado por el Departamento de Defensa de los
Estados Unidos que vio un problema en el crecimiento del costo del software
especializado. En las computadoras denominadas empotradas haba ausencia
de un lenguaje de programacin adecuado y de un entorno de programacin para
desarrollar y mantener ese software.
Fue entonces, que en 1.975 se form un grupo de trabajo para ver si se poda
combinar el software existente o si era necesario crear uno nuevo. Despus de
varios intentos por combinar este software (Woodenman en 1.975, Tinman
1.976, Ironman 1.977, Steelman 1.978) se lleg a la conclusin de que era
necesario crear uno nuevo, lo cual los llev a recibir proyectos siendo el del
equipo dirigido por J.M. Ishbia de la firma CII-Honeywell-Bull en 1.979 el ms
conveniente y fue bautizado como ADA en reconocimiento a Lady Ada Augusta
Byron, hija de Lord Byron, conocida como la primera programadora.
El uso de este lenguaje puede ser adecuado a los sistemas de programacin
empotrados y al mantenimiento de programas.

LOGO (1.976)
LOGO se desarrolla en 1.976 por el equipo dirigido por Seymour Papert (1.9??,
Fig. 37) en el Laboratorio de Inteligencia Artificial del MIT (Massachusetts
Institute of Technology, Instituto Tecnolgico de Massachusetts), principalmente
orientado a aplicaciones de inteligencia artificial y enseanza. El mismo lenguaje
LOGO, tiene versiones especficas que se usan para ese fin y derivados de este
que se usan para programar robots en fbricas. LOGO se inspir en el trabajo

- 62 -
Historia de la Computacin... Captulo I.

anterior de Papert (miembro del equipo de desarrollo del LISP), el lenguaje LISP.
Asimismo un mdulo lunar fue programado con una variante del lenguaje LOGO.
Son poco conocidas por el pblico estas aplicaciones y tambin que la versin de
LOGO Grfico desarrollada en Argentina se usa en la Comisin de Energa
Atmica para diseo de carga del reactor nuclear de Atocha.
LOGO no es solamente un lenguaje de programacin muy difundido en el mbito
de la educacin, sino que es tambin un conjunto de materiales disponibles para
someter a prueba al usuario, ya sea nio, adolescente o adulto, sobre su
capacidad de organizar sus ideas al tratar de ordenar algo a la computadora.

FIG. 37. SEYMOUR PAPERT.

LOGO se apoya en una teora de conocimiento basada en los estudios de Piaget y


explicada por Seymour Papert (MIT) en su libro Desafo a la Mente.
El uso frecuente de LOGO, pone en evidencia el proceso intelectual realizado por
las personas y facilita la autocorreccin de las fallas en el razonamiento lgico.
La forma de usar la computadora con utilitarios o con LOGO no se contrapone, se
complementa. Ya que en el primer caso la mquina se usa para hacer algunas
operaciones o procesos ms fcilmente y en el segundo caso se usa para entender
cmo funcionan estos procesos? La aplicacin prctica de este lenguaje se
encuentra principalmente en el campo educativo y como herramienta de
simulacin de los procesos en Inteligencia Artificial.

C (1.978)
Cvio la luz pblica en el ao de 1.978 y fue desarrollado a comienzos de los aos
1.970 por Dennis Ritchie (1.941-, Fig.38) en la Bell Telephone Laboratories Inc.

- 63 -
Tras los pasos de un... Hacker

(Hoy conocida como AT&TBell Laboratories). Su funcionamiento se basa en los


resultados que se obtuvieron de dos lenguajes anteriores que fueron BCPL y el B,
que tambin se desarrollaron en la Bell Laboratories. C fue inicialmente
utilizado nicamente con fines de laboratorio en la Bell y es en 1.978, cuando
Brian Kernigham (1.9??-, Fig. 39) y Dennis Ritchie publican una descripcin
definitiva del lenguaje C, la misma que es conocida como K&RC.

FIG. 38. DENNIS RITCHIE. FIG. 39. BRIAN KERNIGHAM.

Despus de esa definicin, los profesionales de la computacin vieron en C, el


lenguaje que tanto haban esperado y comenzaron a promover su uso en todo
campo, educativo, de investigacin y profesional. Fue tanta su difusin que a
mediados de la dcada de 1.980, la popularidad del Chaba recorrido el mundo.
Dada su popularidad la ANSI defini un estndar del lenguaje (el denominado
comit X3J11), fruto de esta estandarizacin todos los compiladores e
intrpretes de C pueden portar su cdigo con un mnimo de esfuerzo.
En la actualidad C es el lenguaje utilizado para el desarrollo profesional de
aplicaciones, tanto a nivel de hardware como de software. El C es un lenguaje de
uso general.

JAVA (1.991)

Java es un lenguaje de programacin orientado a objetos desarrollado por Sun


Microsystems a principios de los aos 90. El lenguaje en s mismo toma mucha
de su sintaxis de C y C++, pero tiene un modelo de objetos ms simple y elimina

- 64 -
Historia de la Computacin... Captulo I.

herramientas de bajo nivel, que suelen inducir a muchos errores, como la


manipulacin directa de punteros o memoria.

Las aplicaciones Java estn tpicamente compiladas en un bytecode, aunque la


compilacin en cdigo mquina nativo tambin es posible. En el tiempo de
ejecucin, el bytecode es normalmente interpretado o compilado a cdigo nativo
para la ejecucin, aunque la ejecucin directa por hardware del bytecode por un
procesador Java tambin es posible.

La implementacin original y de referencia del compilador, la mquina virtual y


las bibliotecas de clases de Java fueron desarrolladas por Sun Microsystems en
1.995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y
evolucin del lenguaje a travs del Java Community Process, si bien otros han
desarrollado tambin implementaciones alternativas de estas tecnologas de Sun,
algunas incluso bajo licencias de software libre.

Entre noviembre de 2.006 y mayo de 2.007, Sun Microsystems liber la mayor


parte de sus tecnologas Java bajo la licencia GNU GPL, de acuerdo con las
especificaciones del Java Community Process, de tal forma que prcticamente
todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de
Sun que se requiere para ejecutar los programas Java an no lo es).

NOTAS Y BIBLIOGRAFA
Sobre esta historia de las computadoras y de los lenguajes de programacin, las
notas han sido elaboradas en base a publicaciones de revistas especializadas y la
consulta de los siguientes textos:

- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las


Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- INTEGRATED ELECTRONICS: Analog and Digital Circuits and Systems,
Jacob Millman Chirstos Halkias, McGraw Hill and Electronic

- 65 -
Tras los pasos de un... Hacker

Engineering Series / Kogakusha Ltd., Publicado en los Estados Unidos de


Norte Amrica, 1.972.
- CMO PROGRAMAR COMPUTADORAS, URMO S.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Manual del Microprocesador 80386, Chris H. PappasWilliam H. Murray,
III, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
1.983.
- CONEXIONES EN EL IBM PC/XT/AT, Teora y prctica de perifricos,
comunicaciones y configuraciones, M. D. Seyer, Red Editorial
Iberoamericana REI Andes Ltda., Prentice Hall Inc., 1.985.
- CP/M Users Guide, Digital Research 1.982, SPECTRAVIDEO
INTERNATIONAL LTD., Hong Kong, 1.985.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y
BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- 80386 Gua del programador y Manual de referencia, Intel Corporation
1.986, Ediciones Anaya Multimedia S.A., Septiembre de 1.989.
- ABIOS for IBM PS/2 Computers and Compatibles, Phoenix Technologies
Ltd., AddisonWesley Publishing Company Inc., Junio de 1.989.
- Introduccin al 80386, Intel Corporation 1.985, Ediciones Anaya
Multimedia S.A., 1.989.
- Organizacin y diseo de computadores La interfaz hardware /
software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- System BIOS for IBM PCs, Compatibles, and EISA Computers, Phoenix
Technologies Ltd., AddisonWesley Publishing Company Inc., Noviembre
de 1.995.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- PC World Ecuador, http://www.pcworld.com.ec/pcw_catt/index.php

- 66 -
Historia de la Computacin... Captulo I.

- PC Magazine, http://www.pcmag.com
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- Apuntes de clase, Nstor Marroqun Carrera, aos 1.9831.992.
- Trabajos de varios autores publicados en la worldwide web.

- 67 -
Tras los pasos de un... Hacker

- 68 -
INTRODUCCIN (II)

...Todos los das tena una ansiedad por llegar a la casa, luego de cumplir con mis
tareas escolares, y esperar a que mi to Ral llegara a su vez de la universidad
para pedirle me deje jugar con tan fascinante aparato. Jugar al ahorcado,
carrera de autos o adivina la palabra, como les comentaba anteriormente,
deseaba vehementemente aprender a programar esta computadora, cuyas
caractersticas entre otras eran:
Procesador: Sharp LH5801 corriendo a 1.3 MHz (comparada a la velocidad de mi
mquina actual una Toshiba Satellite 2400 CDS que corre a 1,7 GHz, es decir
1.307,69 veces ms lenta).

Memoria RAM (Random Access Memory) de 2 KB (suena a nada el da de hoy, la


computadora en la que escrib este texto tiene nada menos que 512 MB de
memoria RAM, 262.144 veces ms memoria que esta computadora y solo han
pasado aproximadamente 25 aos entre el aparecimiento de la Tandy Radio
Shack TRS-80 Pocket Computer II (Fig.40) y mi computadora actual).

FIG. 40. TANDY RADIO SHACK TRS-80 POCKET COMPUTER II.

Para almacenar programas y datos se conectaba una unidad de cinta, nada


diferente a un toca cinta normal ya que igual se poda escuchar msica. Con una
interfaz apropiada se conectaba a esta unidad para almacenar y transferir
archivos a la computadora. El principal inconveniente de este mecanismo, era
que para ubicar un archivo en particular, se tena manualmente que recorrer la
cinta hasta una posicin aproximada donde estaba la grabacin buscada con

- 69 -
Tras los pasos de un... Hacker

ayuda del contador de la cinta para as poder realizar la lectura. (La


computadora que les comento me sirvi para la creacin de este texto tiene una
unidad de disco duro de 80 GB, se podra decir que equivale a tener 1310.720
cintas de casete de aquella poca).
Pantalla LCD (Liquid Crystal Display) monocromtica de 26 caracteres (130x7
pixeles, nicamente desplegaba caracteres, la Toshiba Satellite tiene 1.024x768
pixeles y 32 bits para definir los colores, es decir puede desplegar colores y sus
gamas hasta 16777.216 variaciones, as como 256 niveles de transparencia).
Se poda conectar a una impresora tipo mini plotter (Fig. 41), equipada con
plumillas de 4 colores, muy parecida a las impresoras de una caja registradora
pero que serva para listar programas y obtener resultados impresos de los
clculos realizados.

FIG. 41. TRS-80 CONECTADA A SU IMPRESORA.

Pues bien, el reto entonces para mi to, y por ende para m, era aprender a
programar esta computadora, ya que tampoco mi to tena formacin de
programador y en la universidad recin le estaban enseando las bases de la
programacin con fines de aplicacin en lo que sera su carrera de ingeniero civil.
Como podrn ver, estamos ya hablando de bytes, RAM, Kilobytes, Megabytes,
Gigabytes, pixeles, trminos hoy por hoy muy usados en la jerga informtica,
pero Qu son? Qu significan?
Bueno, para m eran palabras totalmente desconocidas medidas de qu? ya que
hasta ese entonces por el uso cotidiano entenda lo que era un metro, un
Kilmetro, entonces al leer y escuchar byte y Kilobyte, saba intuitivamente que
se trataba de una medida. Al enterarme que un byte era el conjunto de 8 bits y

- 70 -
La historia... Introduccin (II).

que un bit era la representacin de un dgito binario, de all su nombre (viene


del ingls binary digit, 0 o 1), descubr que adems de los nmeros que haba
manejado (nmeros en el sistema decimal) y la forma de hacer los clculos
aritmticos, tambin estas representaciones numricas existan en otros sistemas
de numeracin. Les invito a conocer algo de estos sistemas de numeracin, ya
que entenderlos nos ayuda a comprender de mejor manera algunos valores
necesarios para programar una computadora...

- 71 -
Tras los pasos de un... Hacker

- 72 -
CAPTULO II. NMEROS Y SISTEMAS DE NUMERACIN

En este captulo aprenderemos algunas de las definiciones y usos de los nmeros


en varios sistemas que para nuestro inters sirven para su representacin como
son el sistema binario, el octal y el hexadecimal.

2.1 CONCEPTO DE NMERO


En su manera ms simple, podemos decir que nmero es la representacin
mental y simblica de una cantidad. Con esta representacin se puede referir en
forma cmoda la cantidad de elementos que tiene una coleccin o conjunto de
individuos de una misma especie.
Ejemplo: Tres manzanas, cinco pases, dos computadoras.

2.2 CONCEPTO DE SISTEMA DE NUMERACIN


Un sistema de numeracin, es un conjunto de reglas que nos permiten con una
cantidad finita de smbolos, representar un nmero cualquiera.
Ejemplo: El sistema binario, el octal, el decimal.

2.3 REPRESENTACIN DE LOS NMEROS

Los hombres para representar su idea intuitiva de nmero, desde la antigedad


han ideado diversas formas de expresar esta idea. Todos conocemos su
representacin expresada a travs de los dedos de las manos, con la invencin de

- 73 -
Tras los pasos de un... Hacker

la escritura cada cultura ha inventado su propia forma de expresar los nmeros.


Sabemos la forma en que los representaban los antiguos babilonios en su
escritura cuneiforme (Fig. 1), la forma en que los representaban los antiguos
egipcios en los jeroglficos, los antiguos griegos, los antiguos rabes, los antiguos
romanos, los antiguos chinos e indios. Con el transcurrir del tiempo, cuando ya
se formaliz la matemtica como tal, se escogieron algunos smbolos que
representaran a estos nmeros. As tambin de una forma general se dio lugar a
la creacin de los sistemas de numeracin, estos smbolos son:
0, representa la ausencia de cantidad, se llama cero
1, representa al uno
2, representa al dos
3, representa al tres
4, representa al cuatro
5, representa al cinco
6, representa al seis
7, representa al siete
8, representa al ocho
9, representa al nueve

Con estos smbolos y otros auxiliares tomados de las letras del alfabeto se puede
representar cualquier nmero definido en un sistema de numeracin en
particular.
Ejemplo:
100, representa una coleccin de cien elementos en el sistema decimal.
10102, representa al nmero diez en el sistema binario.
238, representa al nmero diecinueve en el sistema octal.
FF16, representa al nmero doscientos cincuenta y cinco en el sistema
hexadecimal.

Podemos definir esta representacin formalmente como: Cualquier nmero n, se


puede representar por un conjunto finito de smbolos preestablecidos, ordenados
en una secuencia, que dadas las reglas, nos permitan inferir la idea de cantidad.
Con estos antecedentes, en primer lugar para tener un sistema de numeracin,
hay que definir este conjunto finito de smbolos. 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9 los
conoceremos como dgitos decimales. Lo representaremos en forma matemtica
como:

- 74 -
Nmeros y Sistemas de Numeracin... Captulo II.

N= {0,1, 2, 3, 4, 5, 6, 7, 8, 9}
Definido este conjunto (Nmeros Naturales), podemos dar las reglas que se han
de seguir para calcular el peso posicional de cada smbolo del nmero, para
esto:
1. Definimos un inicio con un punto, al que llamaremos punto decimal o
fraccionario. Se lo conoce tambin como coma decimal.
2. Definimos una base b que ser el nmero de elementos del conjunto N, en
este caso 10.
3. Todo smbolo hacia la izquierda de la coma decimal, tendr un factor
multiplicativo o peso positivo ascendente comenzando en 1, 10, 100,
1.000, etc., o lo que es lo mismo 100, 101, 102, 103,..., 10i-1. Donde i, nos
indicar el nmero de smbolos que estn a la izquierda del nmero
decimal.
4. Todo smbolo hacia la derecha de la coma decimal, tendr un factor
divisor o peso negativo ascendente comenzando con el 0.1, 0.01, 0.001,
etc., o lo que es lo mismo 10-1, 10-2, 10-3,..., 10-j. Donde j, nos indicar el
nmero de smbolos que estn la derecha de la fraccin decimal.
Estas reglas las podemos generalizar en la siguiente expresin matemtica:
Sea n la secuencia de smbolos:
n = xi-1 ... x1x0, y-1y-2... y-j
Tal que x e y N e i representa la posicin del smbolo a la izquierda de la coma
decimal y j la posicin del smbolo a la derecha de la coma decimal.
Donde:
n, representa la secuencia de smbolos.
x e y, un smbolo cualquiera del conjunto N.
i, el valor de la posicin de los smbolos a la izquierda de la coma decimal.
j, el valor de la posicin de los smbolos a la derecha de la coma decimal.

Para obtener el valor real de cada posicin, multiplicaremos cada elemento x por
10i-1,
donde i nos indica el valor de la posicin del smbolo x, en caso que el
smbolo numrico se encuentre a la izquierda de la coma decimal; o por 10-j en
caso que este smbolo se encuentre a la derecha de la coma decimal, donde jnos
indica el valor de la posicin del smbolo y.

- 75 -
Tras los pasos de un... Hacker

Con estas reglas dadas, calculemos cunto representa el nmero decimal


425,106?
Verifiquemos en primer lugar, que los smbolos pertenezcan al conjunto de
smbolos del sistema decimal ya definido como N.
Ahora, separemos el nmero en sus dgitos y los multiplicamos por su peso
posicional, as obtendremos:
4 x 10(3-1) = 400 cuatro centenas
2 x 10(2-1) = 20 dos decenas
5 x 10(1-1) = 5 cinco unidades
1 x 10(-1) = 0,1 una dcima
0 x 10(-2) = 0,00 cero centsimas
6 x 10(-3) = 0,006 seis milsimas

Para comprobar que estamos hablando del mismo nmero, sumemos los valores
reales calculados, as obtendremos el valor real de 425,106 (cuatro centenas ms
dos decenas ms cinco unidades coma una dcima ms cero centsimas ms seis
milsimas o lo que es lo mismo cuatrocientos veinticinco unidades ciento seis
milsimas).

Nota del autor:


Ustedes pensarn que las operaciones que estamos utilizando para esta explicacin deberan de
estar definidas previamente como la suma, resta, multiplicacin, divisin, potenciacin, etc., las
asumiremos conocidas, solo se utilizan para efectos didcticos.

Ms tarde aprenderemos a sumar como lo hace una computadora y veremos que


a partir de este procedimiento podremos hacer restas, multiplicaciones y
divisiones.
El objetivo de este texto no es tratar a profundidad conceptos matemticos
relacionados con los nmeros, se recomienda revisar los conceptos de nmeros
enteros, nmeros ordinales, nmeros enteros positivos, nmeros enteros
negativos, nmeros reales, etc., as como la realizacin de las operaciones
fundamentales con estos nmeros.
Como nos pudimos dar cuenta, aparecen otros elementos que sern necesarios

- 76 -
Nmeros y Sistemas de Numeracin... Captulo II.

para trabajar en estos sistemas de numeracin, como es el uso de la base del


sistema, este valor est dado por el nmero de elementos del conjunto de
smbolos definidos en este caso fue el de 10. Entonces diremos, que nb es un
nmero en base b. Esta representacin ser necesaria cuando trabajemos con
nmeros que no sean del sistema decimal.
Ejemplo: 1010,01012 as nos indica que ste es un nmero del sistema
binario o un nmero en base 2 (dos).

En informtica tenemos principalmente que aprender a dominar los sistemas de


numeracin: binario (base 2), octal (base 8) y el hexadecimal (base 16).

2.4 TRANSFORMACIN DE NMEROS ENTRE SISTEMAS DE


NUMERACIN
Para transformar nmeros reales de diversos sistemas de numeracin, definimos
dos procedimientos. El primero para obtener un nmero real decimal dado su
equivalente en base b; y, el segundo para obtener el nmero real en base b a
partir de su correspondiente decimal.
Para realizar estos procedimientos, asumiremos definidos y conocidos los
procedimientos de suma, resta, multiplicacin y divisin, as como el de
potenciacin y sumatoria de nmeros reales en el sistema decimal.

2.4.1 DE UN SISTEMA EN BASE BAL SISTEMA DECIMAL


Para obtener el valor decimal de un nmero real que est expresado en cualquier
sistema de numeracin (en base b), realizaremos el desarrollo de la siguiente
frmula:
l m
bx i by j
N 10 i
. 1
j
.
i 1 j 1

(1)

- 77 -
Tras los pasos de un... Hacker

Donde:

N10 es el nmero decimal.


x es el valor del smbolo del nmero en la posicin i.
y es el valor del smbolo del nmero en la posicin j.
i es el indicador posicional del smbolo x, hacia la izquierda de la coma
decimal.
les el nmero total de smbolos x a la izquierda de la coma decimal.
j es el indicador posicional del smbolo y hacia la derecha de la coma
decimal.
m es el nmero total de smbolos y a la derecha de la coma decimal.
b es la base del sistema de numeracin.

Ejemplo: Transformar el nmero 11014 a su correspondiente decimal.


1. Identifiquemos la base del sistema, observamos que el nmero pertenece
al sistema de base 4, es decir, b = 4.
Sabemos que el conjunto de smbolos, en sistemas de numeracin
menores a diez, es subconjunto de ste en forma cardinal, por ejemplo: el
sistema en base dos, tendr como conjunto de smbolos 0 y 1, el sistema
en base tres, tendr como conjunto de smbolos 0, 1 y 2. As
anlogamente para los otros sistemas menores a la base diez.
Para sistemas de numeracin mayores a diez, reemplazamos los valores
que superen a diez, por los que correspondan a las primeras letras del
alfabeto en maysculas, por ejemplo: el sistema en base once, tendr
como elementos los smbolos 0,1,2,3,4,5,6,7,8,9 y A entonces el valor
de A ser 10.
En el ejemplo, observamos que el conjunto de smbolos del sistema en
base cuatro ser 0, 1,2 y 3.
2. Ahora, verifiquemos si los smbolos del nmero corresponden a los del
sistema de numeracin referido. Todos corresponden, por tanto es un
nmero vlido.
3. Luego procedemos a identificar los valores de m y l, en este caso slo
tendr valor para m, es igual a cuatro, m = 4.
4. Evaluemos la frmula, para esto construyamos una gua posicional de los
smbolos del nmero dado.

- 78 -
Nmeros y Sistemas de Numeracin... Captulo II.

Valor del ndice i-1 = 3 2 1 0


Valor del ndice -j = -1 -2 -3
Smbolos de N4 = 1 1 0 1 ,
Valor de posicin = 4 3 2 1 , 1 2 3
^
Punto fraccionario

As aplicando la frmula, tenemos que:


N10 = 1x4 + 1x4 + 0x4+ 1x40
= 1x64 + 1x16 + 0x4 + 1x1
= 64 + 16 + 0 + 1
= 81

Es decir, el nmero 11014 es equivalente a 81 decimal.

EJERCICIOS RESUELTOS:

Ejemplo 1. Dado el nmero 10102 obtener el nmero decimal correspondiente.

Desarrollemos el procedimiento utilizado en el ejemplo:

Valor del ndice i-1 = 3 2 1 0


Valor del ndice -j = -1 -2 -3
Smbolos de N2 = 1 0 1 0 ,
Valor de posicin = 4 3 2 1 , 1 2 3
^
Punto fraccionario

Aplicando la frmula, tenemos que:

N10 = 1x23 + 0x22 + 1x21 + 0x20


= 1x8 + 0x4 + 1x2 + 0x1
=8 + 0 + 2 + 0
= 10

Solucin: 10102 = 1010

- 79 -
Tras los pasos de un... Hacker

Ejemplo 2. Dado el nmero 3456 obtener el nmero decimal correspondiente.

Utilicemos el procedimiento desarrollado en el ejemplo:


Valor del ndice i-1 = 2 1 0
Valor del ndice -j = -1 -2 -3
Smbolos de N6 = 3 4 5 ,
Valor de posicin = 3 2 1 , 1 2 3
^
Punto fraccionario

Aplicando la frmula, tenemos que:

N10 = 3x62 + 4x61 + 5x60


= 1x36 + 4x6 + 5x1
= 36 + 24 + 5
= 137

Solucin: 3456 = 13710

Ejemplo 3. Dado el nmero 631428 obtener el nmero decimal


correspondiente.

Aplicando la frmula, tenemos que:

N10 = 6x84 + 3x83 + 1x82 + 4x81 + 2x80


= 6x4096 + 3x512 + 1x64 + 4x8 + 2x1
= 24576 + 1536 + 64 + 32 + 2
= 26210

Solucin: 631428 = 2621010

Dado el nmero A3B58BB.09212 obtener el nmero decimal


Ejemplo 4.

correspondiente.

Aplicando la frmula, tenemos que:

N10 = Ax126 + 3x125 + Bx124 + 5x123 + 8x122 + Bx121 + Bx120 + 0x12-1


+ 9x12-2 + 2x12-3

- 80 -
Nmeros y Sistemas de Numeracin... Captulo II.

= 10x2985984 + 3x248832 + 11x 20736 + 5x1728 + 8x144 + 11x12


+ 11x1 + 0x1/12 + 9x1/144 + 2x1/1728
= 29859840 + 746496 + 228096 + 8640 + 1152 + 132 + 11 + 1/12
+ 9/144 + 2/1728
= 30844367,147
Solucin: A3B58BB,09212 = 30844367,14710

Observamos que en este ejercicio los smbolos del conjunto base, se reemplazan
por las primeras letras del alfabeto y cuyo valor es el de la posicin cardinal que
ocupan en el sistema de numeracin, as el A= 10 y B = 11.

Dado el nmero FAC1A102116


Ejemplo 5. obtener el nmero decimal
correspondiente.

Aplicando la frmula, tenemos que:

N10 = Fx168 + Ax167 + Cx166 + 1x165 + Ax164 + 1x163 + 0x162 + 2x161


+ 1x160
= 15x4294967296 + 10x268435456 + 12x16777216 + 1x1048576 +
10x65536 + 1x4096 + 0x256 + 2x16 + 1x1
= 64424509440 + 2684354560 + 201326592 + 1048576 + 655360 +
4096 + 0 + 32 + 1
= 67311898657

Solucin: FAC1A102116 = 6731189865710

- 81 -
Tras los pasos de un... Hacker

- 82 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS:

Ejercicio 1. Dado el nmero 1012 obtener el nmero decimal correspondiente.

Ejercicio 2. Dado el nmero 2023 obtener el nmero decimal correspondiente.

Ejercicio 3. Dado el nmero 1304 obtener el nmero decimal correspondiente.

Ejercicio 4. Dado el nmero 43315 obtener el nmero decimal correspondiente.

Ejercicio 5. Dado el nmero 13787 obtener el nmero decimal correspondiente.

Ejercicio 6. Dado el nmero 1839 obtener el nmero decimal correspondiente.

Ejercicio 7. Dado el nmero AB012 obtener el nmero decimal correspondiente.

Ejercicio 8. Dado el nmero CAB014 obtener el nmero decimal correspondiente.

Ejercicio 9. Dado el nmero ABEA116 obtener el nmero decimal correspondiente.

Ejercicio 10. Dado el nmero 1011013 obtener el nmero decimal correspondiente.

Ejercicio Dado el nmero 1314BPON30 obtener el nmero decimal


11.

correspondiente.

Ejercicio 12. Dado el nmero 345708121 obtener el nmero decimal correspondiente.

Ejercicio Dado el nmero


13. 84A19EN25 obtener el nmero decimal
correspondiente.

Ejercicio Dado el nmero 10101111102 obtener el nmero decimal


14.

correspondiente.

Dado el nmero 11111111,101012 obtener el nmero decimal


Ejercicio 15.
correspondiente.
Dado el nmero 1001111000,1011012 obtener el nmero decimal
Ejercicio 16.
correspondiente.

Dado el nmero 1034761,3248 obtener el nmero decimal


Ejercicio 17.
correspondiente.

- 83 -
Tras los pasos de un... Hacker

Dado el nmero 1365321766,2378 obtener el nmero decimal


Ejercicio 18.
correspondiente.
Dado el nmero FFBA0013FAB,A6543F16 obtener el nmero decimal
Ejercicio 19.
correspondiente.

Dado el nmero FAB0ABAC0123,CA1B765116 obtener el nmero


Ejercicio 20.
decimal correspondiente.

- 84 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.4.2 DEL SISTEMA DECIMAL A UN SISTEMA EN BASE B


Si nosotros deseamos transformar un nmero decimal a otro nmero que sea su
equivalente en otro sistema de numeracin en base b, tenemos que realizar el
siguiente procedimiento que es vlido para la parte entera del nmero (en (1) los
smbolos de x):
1. Dividir el nmero decimal por la base del sistema de numeracin al que
deseamos transformar el nmero, hasta obtener un residuo menor que
esta base o igual a cero.
2. El cociente calculado, lo transformamos en dividendo y procedemos
sucesivamente con el paso 1 hasta obtener un cociente menor a la base
del sistema deseado.
3. Tomaremos el ltimo cociente y los residuos obtenidos en orden inverso
a como han ido apareciendo, concatenados estos smbolos obtendrn el
nmero entero en la base b deseada.
Para obtener el nmero fraccionario equivalente en un sistema en base b,
seguiremos el siguiente proceso (en (1) los smbolos de y):
1. Multiplicar la parte fraccionaria por la base del sistema de numeracin al
que deseamos transformar el nmero.
2. Separar la parte entera de esta multiplicacin y colocar esta parte entera
como smbolo del nmero fraccionario en la base b. La parte fraccionaria
restante, volver a realizar el paso 1 hasta obtener como resultado cero
fraccionario.

Nota del autor:


Cuando nuestra fraccin no produce resultado cero, obtendremos smbolos fraccionarios en la
base b, hasta tres veces el nmero de dgitos fraccionarios tenga el nmero decimal.

Ejemplo: Transformar el nmero 32110 a su correspondiente ternario (base


3).
1. Observamos que el nmero es entero, por tanto, solo realizaremos el
proceso para transformar nmeros enteros.
2. Empezamos las divisiones sucesivas.

- 85 -
Tras los pasos de un... Hacker

321 | 3 .
02 |107| 3 .
21 | 17| 35| 3 .
0 | 2| 05| 11| 3 .
2| 2| 3 | 3 .
0 | 1

3. Como ya obtenemos un cociente menor que la base deseada, adems el


ltimo residuo es cero, entonces procedemos a tomar los smbolos en
orden inverso a como han ido apareciendo, as obtendremos nuestro
nmero transformado, por tanto tenemos que:
32110 = 1022203

Ejemplo: Transformar el nmero 124,34210 al sistema binario (base 2).


1. Transformemos la parte entera del nmero (x en (1)).
124 | 2 .
04 | 62| 2 .
0 | 02| 31| 2 .
0| 11| 15| 2 .
1| 1| 7 | 2 .
1 | 3 | 2 .
1 | 1

As obtenemos la parte entera del nmero en base b.


2. Trasformemos la parte fraccionaria del nmero (y en (1)).
0, 0 , 342 (x2) = 0,684
0 0 | 684 (x2) = 1,368
1 1 | 368 (x2) = 0,736
0 0 | 736 (x2) = 1,472
1 1 | 472 (x2) = 0,944
0 0 | 944 (x2) = 1,888
1 1 | 888 (x2) = 1,776
1 1 | 776 (x2) = 1,552
1 1 | 552 (x2) = 1,104
1 1 | 104 (x2) = 0,208
0 0 | 208 (x2) = 0,416
0 0 | 416 (x2) = 0,832
0 0 | 832 (x2) = 1,664

- 86 -
Nmeros y Sistemas de Numeracin... Captulo II.

1 1 | 664 (x2) = 1,328


1 1 | 328 (x2) = 0,656
0 0 | 656 (x2) = 1,312
1 1 | 312 (...)

3. Formemos la parte fraccionaria del nmero en base b.


0,34210 = 0,0101011110001101...2

4. Procedamos a sumar los nmeros transformados (x e y en (1)) y as


obtendremos el nmero real en la base deseada.
124,34210 = 1111100,0101011110001101...2

EJERCICIOS RESUELTOS:

Ejemplo 6. Dado el nmero 7310 obtener el nmero en base 7.

Utilicemos el procedimiento mencionado en los ejemplos:


1. Transformemos la parte entera del nmero.
73 | 7 .
3 | 10| 7 .
3| 1

2. As obtenemos la parte entera del nmero en base b.

7310 = 1337

Solucin: 7310 = 1337

Dado el nmero 8413110 obtener el nmero correspondiente en el


Ejemplo 7.
sistema hexadecimal (base 16).

- 87 -
Tras los pasos de un... Hacker

Utilicemos el procedimiento mencionado en los ejemplos.

Transformemos la parte entera del nmero.

84131 | 16 .
41 | 5258 | 16 .
93 | 45 | 328 | 16 .
131 | 138 | 8 | 20 | 16 .
3 | 10 | | 4 | 1

A

As obtenemos la parte entera del nmero en base b.

8413110 = 148A316

Solucin: 8413110 = 148A316

Dado el nmero 451,62510 obtener el nmero correspondiente en el


Ejemplo 8.
sistema binario (base 2).

Utilicemos el procedimiento mencionado en los ejemplos.

Transformemos la parte entera del nmero:


451| 2 .
05 | 225 | 2 .
11| 02 | 112 | 2 .
1| 05 | 12 | 56 |2.
1 | 0 | 16 | 28 |2 .
0 | 08 | 14 | 2 .
0 | 0 | 7 | 2 .
1 | 3 | 2 .
1 | 1

As obtenemos la parte entera del nmero en base b.

45110 = 1110000112

- 88 -
Nmeros y Sistemas de Numeracin... Captulo II.

Transformemos la parte fraccionaria del nmero:


0, 0 , 625 (x2) = 2,250
1 1 | 250 (x2) = 0,500
0 0 | 500 (x2) = 1,000
1 1 | 000 (x2) = 0,000

Formemos la parte fraccionaria del nmero en base b.

0,62510 = 0,1012

Procedemos a sumar los nmeros transformados y as obtenemos el nmero real


en la base deseada:

451,62510 = 111000011,1012

Solucin: 451,62510 = 111000011,1012

Dado el nmero 10343,816110 obtener el nmero correspondiente


Ejemplo 9.

en base 32.

Utilicemos el procedimiento mencionado en los ejemplos.

Transformemos la parte entera del nmero:


10343 | 32 .
074 | 323 | 32 .
103 | 03 | 10
07 | 3 |
7 A

As obtenemos la parte entera del nmero en base b.

1034310 = A3732

Transformemos la parte fraccionaria del nmero:

- 89 -
Tras los pasos de un.. Hacker

0, 0 , 8161 (x32) = 26, 1152


Q 26 TTIE2 (X32) = 3, 6864
3 3| 6864 (x32) = 21, 9.648
L. 21 || 9648 (x32) = 30, 8736
U 30 | 8736 (x32) = 27, 9552
R 27 || 9552 (x32) = 30, 5664
U 30 | 5664 (x32) = 18, 1248
I 18 || 1248 (X32) = 3, 9936
3 3 || 9936 (x32) = 31, 7952
v 31 | 7952 (x32) = 25, 4464
P 25 || 4464 (x32) = 14, 2848
E 14 || 2848 (X32) 9, 11.36
9 9 || 11.36

Formemos la parte fraccionaria del nmero en base b.

0.81610 = 0.03LURUI3VPE932

Procedemos a sumar los nmeros transformados y as obtenemos el nmero real


en la base deseada.

1034381610 = A3703LURUI3VPE932

solucin: 10343816110 = A37,03LURUI3VPE932

Ejemplo 1o. Dado el nmero 3842431,000312510 obtener el nmero


correspondiente en base 20.

Transformemos la parte entera del nmero:


3842431 | 2 (O
184 | 192121 | 2 (O
042 | 121 | 9 (5 O (5 | 2 (O
0.24 | 0.121 | 1 60 | 48 (O | 2 (O
43 | 01 | 06 | 8 (O | 24 | 2 (O

31 | 1 | 6 || 0 || 4 || 1
ll l
|
B |

As obtenemos la parte entera del nmero en base b.

- 90 -
Nmeros y Sistemas de Numeracin... Captulo II.

384243110 = 14061B20

Transformemos la parte fraccionaria del nmero:


0, 0 , 0003125 (x20) = 0,00625
0 0|00625 (x20) = 0,125
0
2
A 10 125
0 | 0
2 5 (x20) = 10,00
2,5

Formemos la parte fraccionaria del nmero en base b.

0,000312510 = 0,002A20

Procedemos a unir los nmeros transformados y as obtenemos el nmero real


en la base deseada.

3842431,000312510 = 140661B,002A20

Solucin: 3842431,000312510 = 140661B,002A20

- 91 -
Tras los pasos de un... Hacker

- 92 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS:

Ejercicio 21. Dado el nmero decimal 6510 obtener nmero correspondiente en base
3.

Ejercicio 22. Dado el nmero decimal 8610 obtener el nmero correspondiente en


base 5.

Ejercicio 23. Dado el nmero decimal 75,8110 obtener el nmero correspondiente en


base 16.

Ejercicio 24. Dado el nmero decimal 95,6410 obtener el nmero correspondiente en


base 8.

Ejercicio 25. Dado el nmero decimal 13610 obtener el nmero correspondiente en


base 2.

Ejercicio 26. Dado el nmero decimal 24710 obtener el nmero correspondiente en


base 21.
Dado el nmero decimal 861,34110 obtener el nmero correspondiente
Ejercicio 27.
en base 32.
Dado el nmero decimal 937,93110 obtener el nmero correspondiente
Ejercicio 28.
en base 2.
Dado el nmero decimal 81454,6510 obtener el nmero correspondiente
Ejercicio 29.
en base 16.

Ejercicio 30. Dado el nmero decimal 21362,56710 obtener el nmero


correspondiente en base 4.

Dado el nmero decimal 32146138,34110 obtener el nmero


Ejercicio 31.
correspondiente en base 8.

Ejercicio Dado el nmero decimal 813,84384110 obtener el nmero


32.

correspondiente en base 16.

Dado el nmero decimal 121346,3143110 obtener el nmero


Ejercicio 33.
correspondiente en base 7.

- 93 -
Tras los pasos de un... Hacker

Dado el nmero decimal 123456,78901310 obtener el nmero


Ejercicio 34.
correspondiente en base 6.

Ejercicio Dado el nmero decimal 3571,159310 obtener el nmero


35.

correspondiente en base 15.

Dado el nmero decimal 201357,913210110 obtener el nmero


Ejercicio 36.
correspondiente en base 4.

Dado el nmero decimal 0,381432168110 obtener el nmero


Ejercicio 37.
correspondiente en base 2.

Dado el nmero decimal 4321461,84356710 obtener el nmero


Ejercicio 38.
correspondiente en base 8.

Ejercicio 39. Dado el nmero decimal 2135879,16879310 obtener el nmero


correspondiente en base 16.

Dado el nmero decimal 23,131499821610 obtener el nmero


Ejercicio 40.
correspondiente en base 16.

- 94 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.4.3 DE UN SISTEMA EN BASE B A UN SISTEMA EN BASE C


Para obtener la equivalencia de un nmero en base c, de otro dado en base b, se
sigue en siguiente procedimiento:
1. Transformamos el nmero en base b a su equivalente decimal.

2. Transformamos el nmero decimal obtenido a su correspondiente en


base c.

CASO ESPECIAL
Cuando tenemos un nmero binario, podemos transformar directamente a su
correspondiente, en cualquier base que sea potencia de dos (este mtodo es
tambin llamado mtodo directo), nicamente dividiendo el nmero binario en
grupos, cuyo nmero de elementos sern iguales al del nmero binario que
corresponda al mximo valor del smbolo de la base deseada; y, transformaremos
el grupo correspondiente a su valor en la base deseada, este nmero resultante
corresponde al nmero en la base deseada. (La divisin del nmero binario en
grupos, los tomaremos desde el punto fraccionario, los enteros hacia la izquierda
y los fraccionarios hacia la derecha, este procedimiento es recproco, para
transformar nmeros en base potencia de dos, al correspondiente binario).

Ejemplo: Transformar el nmero BAC016 a su correspondiente en base 9.


1. Transformemos el nmero a decimal:

Aplicando la frmula tenemos que:

N10 = Bx163 + Ax162 + Cx161 + 0x160


= 11x4096 + 10x256 + 13x16 + 0x1
= 45056 + 2560 + 192
= 4780810

2. Transformemos el decimal a la base deseada:

- 95 -
Tras los pasos de un... Hacker

Empezamos las divisiones sucesivas.


47808 | 9 .
28 | 5312 | 9 .
10 | 81 | 590 | 9 .
18 | 02 | 50 | 65 | 9 .
0 | 2 | 5 | 2 | 7

3. As obtenemos nuestro nmero transformado, es decir:

4780810 = 725209

Por tanto obtenemos la respuesta:

BAC016 = 725209

Ejemplo: Transformar el nmero 10101111,010112 al sistema octal (base


8).

1. Observamos que 8 = 23, sabemos adems que 78 = 1112, por tanto


utilizaremos el mtodo directo de transformacin y procedemos a dividir
el nmero en grupos de tres smbolos (si es necesario completaremos el
grupo con ceros).

N2 = 010 101 111 , 010 1102

2. Sustituimos estos grupos por sus correspondientes en la base 8, as


obtendremos:

N2 = 010 101 111 , 010 1102


V V V V V
N8 = 2 5 7 , 2 68

3. Procedemos a unir los nmeros transformados y as obtenemos el


nmero en la base deseada:

10101111,010112 = 257,268

- 96 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS RESUELTOS:

Ejemplo 11. Dado el nmero 5436 obtener el nmero correspondiente en base


11.

Utilicemos el procedimiento mencionado en los ejemplos.

1. Transformemos el nmero a decimal:

Aplicando la frmula, tenemos que:

N10 = 5x62 + 4x61 + 3x60


= 5x36 + 4x6 + 3x1
= 180 + 24 + 3
= 20710

2. Transformemos el decimal a la base deseada:

Empezamos las divisiones sucesivas.


207 | 11 .
97 | 18 | 11 .
9 | 7 | 1

3. As obtenemos nuestro nmero transformado, es decir:

5436 = 17911

Solucin: 5436 = 17911

Dado el nmero 2101,102213 obtener el nmero correspondiente


Ejemplo 12.

en el sistema de base 7.

Utilicemos el procedimiento mencionado en los ejemplos:

1. Transformemos el nmero a decimal:

Aplicando la frmula, tenemos que:

- 97 -
Tras los pasos de un.. Hacker

N10 2x3 + 1x3 + Ox3 + 1x3 + 1x3 + Ox3 + 2x3


2x3 + 1x3
2x27 + 1x 9 + 0x3 + 1x1 + 1x1/3 + 0x1/9 + 2x1/27
2x1/81 + 1x1/243
54 + 9 + 0 + 1 + 0, 333333 + 0 + 0, 0.740 74 + 0, 02.4691
0, 004115
64, 43.62130

2. Transformemos el decimal a la base deseada:

Empezamos las divisiones sucesivas.


64 |
1 | | 7 .
| 1

3. As obtenemos la parte entera del nmero en base b.

6410 = 1217

4. Transformaremos la parte fraccionaria del nmero.


0, 0, 4.36213 (x'7) = 3, 053491
3 3 || 053491 (x7) = 0,374437
o 0|374437 (x7) = 2, 621059
2 2| 621059 (x7) = 4,347413
4 4 |347413 (x7) = 2, 431891
2 2|431891 (x7) = 3,023237
3 3 || 023237 (x7) = 0, 162659
o 0| 162659 (x7) = 1, 138613
1 1 | 138613 (x7) = 0,970291
o O|970291 (x7) = 6,792037
6 6 |792037 (x7) = 5, 544259
5 5 |544259 (x7) = 3,809813
3 3 |809813 (x7) = 5, 668691
5 5 | 621059 (x7) = 4, 680837
4 4 | 680837 (x7) = 4,765859
4 4 |765859 (x7) = 5,361013
5 5 |361013 (x7) = 2,527091
2 2|527091 (x7) = 3, 689637
3 3 | 689637

- Q8 -
Nmeros y Sistemas de Numeracin... Captulo II.

5. Formemos la parte fraccionaria del nmero en base b.

0,43621310 = 0,302423010653544523...7

6. As obtenemos nuestro nmero transformado, es decir:

64,43621310 = 121,302423010653544523...7

Solucin: 2101,102213 = 121,302423010653544523...7

Ejemplo
13. Dado el nmero 1010110,0101112 obtener el nmero
correspondiente en el sistema de base 4.

Utilicemos el procedimiento mencionado en los ejemplos.

1. Transformemos el nmero utilizando el mtodo directo:

Formaremos grupos de 2 smbolos, ya que 4=22 o lo que es lo mismo


34=112, portanto:

N2 = 01 01 01 10,01 01 112
V V V V V V V
N4 = 1 1 1 2, 1 1 34

N4 = 1112,1134

Solucin: 1010110,0101112 = 1112,1134

Dado el nmero 11110101011001,101111012 obtener el nmero


Ejemplo 14.

correspondiente en el sistema de base 8.

Utilicemos el procedimiento mencionado en los ejemplos.

1. Transformemos el nmero utilizando el mtodo directo:

Formaremos grupos de 2 smbolos, ya que 8=23 o lo que es lo mismo


78=1112 por tanto:

- 99 -
Tras los pasos de un... Hacker

N2 = 011 110 101 011 001,101 111 0102


V V V V V V V V
N8 = 3 6 5 3 1, 5 7 28

N8 = 36531,5728

Solucin: 11110101011001,101111012 = 36531,5728

Ejemplo 15. Dado el nmero 1111111111111111,1111111111112 obtener el


nmero correspondiente en el sistema de base 16.

Utilicemos el procedimiento mencionado en los ejemplos.

1. Transformemos el nmero utilizando el mtodo directo:

Formaremos grupos de 4 smbolos.

N2 = 1111 1111 1111 1111 ,1111 1111 11112


V V V V V V V
N16 = F F F F , F F F16
N16 = FFFF,FFF16

Solucin: 1111111111111111,1111111111112 = FFFF,FFF16

- 100 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS

Transformar los siguientes nmeros de base n a su correspondiente en base m.


Ejercicio Dado el nmero PERMISO,503590129
41. obtener el nmero
correspondiente en el sistema de base 3.
Dado el nmero 321021,31245 obtener el nmero correspondiente en el
Ejercicio 42.
sistema de base 21.
Dado el nmero 371461,67219 obtener el nmero correspondiente en el
Ejercicio 43.
sistema de base 8.
Dado el nmero ABA170838,53713 obtener el nmero correspondiente
Ejercicio 44.
en el sistema de base 12.
Dado el nmero 231EK0,3BF21 obtener el nmero correspondiente en el
Ejercicio 45.
sistema de base 23.
Dado el nmero NENA832HI,J0324 obtener el nmero correspondiente
Ejercicio 46.
en el sistema de base 14.
Dado el nmero BACA0E328515 obtener el nmero correspondiente en
Ejercicio 47.
el sistema de base 31.
Dado el nmero FA031CAEC16 obtener el nmero correspondiente en el
Ejercicio 48.
sistema de base 13.
Dado el nmero A93231,845A11 obtener el nmero correspondiente en
Ejercicio 49.
el sistema de base 27.
Dado el nmero 93210012301,3312 obtener el nmero correspondiente
Ejercicio50.
en el sistema de base 36.
Dado el nmero 10110101102 obtener el nmero correspondiente en el
Ejercicio 51.
sistema de base 4.
Dado el nmero 100110101102 obtener el nmero correspondiente en
Ejercicio 52.
el sistema de base 4.

- 101 -
Tras los pasos de un... Hacker

Dado el nmero 1100110,1101002 obtener el nmero correspondiente


Ejercicio 53.
en el sistema de base 8.

Ejercicio Dado el nmero 1101101,0011101112 obtener el nmero


54.

correspondiente en el sistema de base 8.

Ejercicio Dado el nmero 001010,01111101112 obtener el nmero


55.

correspondiente en el sistema de base 8.

Ejercicio Dado el nmero 110,01110110111112 obtener el nmero


56.

correspondiente en el sistema de base 16.

Ejercicio Dado el nmero 00100101010,0000012 obtener el nmero


57.

correspondiente en el sistema de base 16.


58.
Ejercicio Dado el nmero 1100001,0100100112 obtener el nmero
correspondiente en el sistema de base 16.

Dado el nmero 11001111,111100111012 obtener el nmero


Ejercicio 59.
correspondiente en el sistema de base 32.
Dado el nmero 11011101111001011110110,11101110111001110111102 obtener el
Ejercicio 60.
nmero correspondiente en el sistema de base 32.

- 102 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.5 OPERACIONES FUNDAMENTALES EN LOS SISTEMAS DE


NUMERACIN
En esta seccin de la obra, definiremos y aprenderemos las cuatro operaciones
fundamentales, es decir: La suma, la resta, la multiplicacin y la divisin, pero con
una particularidad, que utilizaremos los sistemas de numeracin y de manera
preferente los que utiliza la informtica, es decir el hexadecimal, octal y binario.

2.5.1 SUMA

DEFINICIN
Es la operacin o procedimiento mediante el cual agrupamos elementos de la
misma clase, el smbolo que indica este proceso es el signo ms (+).

La suma tiene cierta importancia en la informtica, pues es en ella que la


computadora basa su funcionamiento para realizar todas las operaciones
aritmticas (principal diseo de una ALU (Arithmetic Logic Unit), cuando veamos
algo de la Arquitectura de una Computadora toparemos este tema).

ELEMENTOS
En la suma intervienen: los sumandos que son las cantidades a agruparse para
obtener el resultado final o total.

Sumandos Total
Ejemplo: 3810 + 4510 = 8310

{A,B,C} + {D,E,F} = {A,B,C,D,E,F}

a+b=c ; a, b, c R

- 103 -
Tras los pasos de un... Hacker

PROPIEDADES
En la suma encontramos definidas las siguientes propiedades:

A) PROPIEDAD CLAUSURATIVA

La suma de elementos de la misma clase, dan origen a otro de la misma clase.

Ejemplo: a + b = c ; a, b, c R
314 + 224 = 1134

B) PROPIEDAD CONMUTATIVA

El orden de los sumandos no altera el resultado final.


Ejemplo: 1012 + 1102 = 10112

1102 + 1012 = 10112

C) PROPIEDAD ASOCIATIVA

Los sumandos se pueden agrupar y el resultado final no altera.


Ejemplo: (1FE16 + A1016) + CB716 = 1FE16 + (A1016 +CB716)

COE16 + CB716 = 1FE16 + 16C716

8C516 = 18C516

D) PROPIEDAD MODULATIVA
Si a una cantidad le adicionamos el elemento cero o ausencia de cantidad, este no
altera.
Ejemplo: 7618 + 08 = 761 8

- 104 -
Nmeros y Sistemas de Numeracin... Captulo II.

PROCEDIMIENTO
Para sumar en cualquier sistema de numeracin, debemos tener en cuenta el
orden lgico de la sucesin de cantidades y su respectivo smbolo y de cmo se
lleva el acarreo es este sistema (valor auxiliar que sumaremos a la siguiente cifra
a la izquierda de la que estamos sumando, en la computadora en el procesador
aritmtico tambin existe un registro especial que lleva el acarreo, cuando se
sobrepasa del lmite se produce un error denominado overflow o de
desbordamiento, cuando veamos algo de la Arquitectura de una Computadora
profundizaremos el tema), observando el orden de los smbolos que representan
las cantidades.
Claro est que el sistema de referencia es el decimal, podemos sumar y de hecho
en cualquier sistema, cuyo procedimiento es idntico al que utilizamos en el
decimal, observando los consejos anteriormente citados, as:

Binario
2 Ternario
3 7 Octal
8 Decimal
10 Hexadecimal
16

0
0 0 0 0 0 1
1 1 1 1 1 2
10 2 2 2 2 3
10100
10001
10000
1110
1101
1011
1010
111
100
11
10101
10011
10010
1111
1100
1001
1000
110
101 202
122
121
112
111
102
101
21
11
10
210
201
200
120
110
100
22
20
12 26
23
22
20
16
14
13
10
30
25
21
15
12
11
6
5
4
3 24
21
20
16
15
13
12
25
23
22
17
14
11
10
7
6
5
4
3 20
17
16
14
13
11
10
21
19
18
15
12
9
8
7
6
5
4
3 4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
.
. . . . . .
. . . . . .
. . . . .
Tabla 1. Nmeros en varios sistemas de numeracin.

a) Colocar correctamente los nmeros.


b) Sumar cifra por cifra y el acarreo si existiere, si se produce
acarreo llevarlo a la siguiente cifra ubicada a la izquierda de la

- 105 -
Tras los pasos de un... Hacker

que produjo el acarreo.


c) Repetir el paso b, hasta que no tengamos ms cifras que sumar.

Ejemplo: Sumar 103110 y 89510

1. Colocamos correctamente los nmeros:

1 0 3 1 10
+ 8 9 5 10

2. Procedemos a sumar cifra por cifra y si hay acarreo lo sumaremos a la


siguiente, comenzamos por la derecha de los nmeros:
1 acarreo
1 0 3 1 10
+ 8 9 5 10

1 9 2 6 10

En este ejemplo se produce un acarreo ya que 310 + 910 = 1210, entonces


escribiremos 210 en el resultado y el 110 al acarreo a la siguiente cifra a la
izquierda de donde realizamos la suma.

Ejemplo: Sumar 3214 y 1134.

1. Colocamos correctamente los nmeros:

3 2 14
+1 1 34

2. Procedemos a sumar cifra por cifra y si hay acarreo lo sumaremos a la


siguiente, comenzamos por la derecha de los nmeros:
1 1 1 acarreo
3 2 14
+ 1 1 34
1 1 0 04

- 106 -
Nmeros y Sistemas de Numeracin... Captulo II.

Como observamos en este sistema, el siguiente valor al definido de 34 es el 104,


pero no podemos escribir este nmero, sino nicamente su cifra que corresponde
a la posicin que sumamos y por ende nuestro acarreo es de 14.

EJERCICIOS RESUELTOS:

Sumar las siguientes cantidades:

Ejemplo 16. Sumar 8419 y 2389.


1 0 1
acarreo
8 4 1 9
+ 2 3 8 9
1 1 8 0 9

Solucin: 8419 + 2389 = 11809

Ejemplo 17. Sumar 24315 y 243215.


1 1 1 acarreo
2 4 3 15
+ 2 4 3 2 15
3 2 3 0 25

Solucin: 24315 + 243215 = 323025

Ejemplo 18. Sumar 10111102; 11012 y 110112.


1 1 1
1 0 1 1 .
1 1 0 0 1 1 1 acarreo
1 0 1 1 1 1 02
+ 1 1 0 12
1 1 0 1 12
1 0 0 0 0 1 1 02

Solucin: 101111102 + 11012 + 110112 = 100001102

- 107 -
Tras los pasos de un.. Hacker

Ejemplo 19. Sumar FE101; FA0, BC1, y BAC0,00BDe.


* a carreo
F E 1 0 , 0 0 0 0.
+ F A 0, B C 0 0.
B A C 0, 0 0 B. De
1 C 8 7 0, B C B De

solucin: FE101 + FA0, BC1, + BAC0,00BD1 = 10870, BCBD,

Ejemplo 2o. Sumar 758; 101,58; 1731,3108 y 1654,2768.


2 2 1.

El CE JCC e O

(O 3

solucin:75g + 101,5g + 1731,310 + 1654,276g =4004,306g

- 108 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS:

Sumar las siguientes cantidades:

Ejercicio 61. Sumar 101012 y 101102.

Ejercicio 62. Sumar 1235 y 42105.

Ejercicio 63. Sumar FED16 y 103B16.

Ejercicio 64. Sumar PACO36 y CAMI36.

Ejercicio 65. Sumar 1010110112; 10101112 y 101012.

Ejercicio 66. Sumar 765018; 10108 y 77108.

Ejercicio 67. Sumar FE1316; 100016 y 101B16.

Ejercicio 68. Sumar 101010011012; 10111102 y 1010112.

Ejercicio 69. Sumar 10101,01012 y 101,012.

Ejercicio 70. Sumar FEBC,01516 y 10FD,CE16.

Ejercicio 71. Sumar 3102118 y 3219,B0C18.

Ejercicio 72. Sumar 31639 y 2310,2169.

Ejercicio 73. Sumar 210311; 643,21211 y 246,38111.

Ejercicio 74. Sumar 245,819; 3210,169 y 38,4169.

Ejercicio 75. Sumar BERTE536; SUMA,389136 y RATON,JOY36.

Ejercicio 76. Sumar 2504,3612; 8310,45312 y 38AB,34B12.

Ejercicio 77. Sumar 241,326; 321,0326; 3215,32466 y 30111,3456.

Ejercicio 78. Sumar 9999,3215;321BAC,3115;3613B,CD00E15 y 3261,6615.

Ejercicio 79. Sumar 231,68516;3FEBA,00116;837AC0,EC0B16 y BAC,00B16.

Ejercicio 80. Sumar RETIRO,FIN36; AQU, TER36; MINA,LA036 y SUMA,TORIA36.

- 109 -
Tras los pasos de un... Hacker

- 110 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.5.2 RESTA

DEFINICIN
Es la operacin o procedimiento mediante el cual se disminuye elementos de la
misma clase, de una agrupacin de estos y cuya cantidad resultante complementa
a la cantidad disminuyente, el smbolo que indica este proceso es el signo menos
(-).

ELEMENTOS
Los elementos que intervienen en la resta, son: el minuendo que es la cantidad de
la que restaremos, el sustraendo que es la cantidad que restamos y el resultado
final o total.

Minuendo - Sustraendo = Total


Ejemplo: 4510 - 4510 = 1510

368 - 128 = 248

PROPIEDADES
En la resta encontramos definidas las siguientes propiedades:

A) PROPIEDAD CLAUSURATIVA

La resta de elementos de la misma clase, dan origen a otro del mismo gnero.

Ejemplo: d- e = f ; d, e, f R
266 - 106 = 156

B) PROPIEDAD ASOCIATIVA
El minuendo y los sustraendos se pueden asociar sin que el total vare.

- 111 -
Tras los pasos de un... Hacker

Ejemplo: (325 - 125) - 135 = 325 - (125 + 135)

205 - 135 = 325 - 305

25 = 25

Cuando apliquemos esta propiedad hay que tener en cuenta que los sustraendos
cuando se asocian se transforman en sumandos.

C) PROPIEDAD MODULATIVA
Si al minuendo se le resta el 0 o elemento nulo, el minuendo no se altera.

Ejemplo: 812 - 012 = 812

PROCEDIMIENTO
Aprenderemos como se resta, sumando; parece contradictorio pero as es como
nuestra computadora lo hace, ms an, trabajaremos con este proceso en todos
los sistemas de numeracin, pero para entender este mtodo, definiremos
primero una idea fundamental, como es, la idea de complemento (en la ALU
(Arithmetic Logic Unit), o en espaol Unidad Aritmtico Lgica, que es algo as
como el msculo del microprocesador de una computadora, este clculo de
complemento puede ser a 1 o a 2, dependiendo cmo? haya sido diseada tal
unidad, en fin como dije cuando veamos algo de la Arquitectura de una
Computadora, toparemos este tema); as, complemento es todo aquello que no
pertenezca a una cantidad dada, pero est comprendido en un universo definido,
con la siguiente propiedad, que ste complemento, sumado a dicha cantidad nos
d como resultado el universo definido, as por ejemplo: Si definimos un universo
de 100 alumnos y en un curso existen 32 alumnos, el complemento del curso ser
por lo tanto 68 alumnos.
Para restar por medio de complementos, seguiremos el siguiente procedimiento:

a) Hallar el complemento del sustraendo, en el universo definido por el

- 112 -
Nmeros y Sistemas de Numeracin... Captulo II.

minuendo.
b) Sumar el minuendo y el complemento obtenido.

c) Sumar las cifras que estn fuera del lmite de cifras posicionales a esta
cantidad obtenida, tendremos como respuesta el resultado final de la
resta.

Ejemplo: De 510 restar 210


a) Analizamos el universo que define el minuendo, en este caso 510,
obtenemos como universo el conjunto cantidades comprendidas en el
rango de [010:910]
b) Hallamos el complemento del sustraendo, lo hallamos como: 210 + 710 =
910 nmero mximo del universo, nuestro complemento ser el 710.

c) Procedemos a la suma:

510
+ 710
1210

d) Observamos que la cifra 110 sobrepasa el nmero de cifras del minuendo


y sustraendo, por tanto desplazamos esta cifra y la sumamos a la que
queda.
510
+ 710
1210
+>110

e) El resultado310
final es 310
Ejemplo: De 101012 restar 10012
a) Determinamos el universo, en este caso es la cantidad 111112
b) Hallamos el complemento de 10012 como regla completaremos el nmero
al universo definido; as, 010012 y hallamos el complemento, cambiando

- 113 -
Tras los pasos de un... Hacker

los 0 por 1 y viceversa:

Nmero = 010012

Complemento = 101102
c) Procedemos a la suma del minuendo y el complemento:

1 0 1 0 12
+ 1 0 1 1 02
1 0 1 0 1 12

d) Separamos la cifra que sobrepasa el lmite del universo y sumamos al


resultado obtenido:
1 0 1 0 12
+ 1 0 1 1 02
1 0 1 0 1 12
+> 12
1 1 0 02

e) El resultado final es 11002

EJERCICIOS RESUELTOS:

Efectuar las siguientes restas, utilizando el mtodo del complemento:

Ejemplo 21. De 3214 restar 134.

Encontremos el complemento del sustraendo, s= 0134 s = 3204


1 1 acarreo
3214
+ 3204
13014
+ >14
3024

Solucin: 3214 -134 = 3024

- 114 -
Nmeros y Sistemas de Numeracin... Captulo II.

Ejemplo 22. De FE0116 restar BA016.

Encontremos el complemento del sustraendo, s= 0BA016 s= F45F16

1 1 1
acarreo
FE0116
+ F45F16
1F26016
+ >116
F26116

Solucin: FE0116 -BA016 = F26116

Ejemplo 23. De PERICO36 restar OCHO36.

Encontremos el complemento del sustraendo, s= 00OCHO36 s=ZZBNIB36


1 1 1 1
acarreo
P E R I C O36
+ Z Z B B I B36
1 P E 3 5 U Z36
+ >136
P E 3 5 V 036

Solucin: PERICO36 -OCHO36 = PE35V036

Ejemplo 24. De 843110 restar 244310.

Encontremos el complemento del sustraendo, s=Z44310 s=755610

1 acarreo
8 4 3 110
+ 7 5 5 610
1 5 9 8 710
+ >110
5 9 8 810

Solucin: 843110 -244310 = 598810

- 115 -
Tras los pasos de un... Hacker

Ejemplo 25. De 101010111,10112 restar 1010111,1012.

Encontremos el complemento del sustraendo,

s = 001010111,10102
s= 110101000,01012

1111111111 111 acarreo


101010111,10112
+ 110101000,01012
1100000000,00002
+ >12
100000000,00012

Solucin: 101010111,10112 - 1010111,10112 = 100000000,00012

- 116 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS:

Efectuar las siguientes restas utilizando el mtodo del complemento:


Ejercicio 81. De 101012 restar 10112.

Ejercicio 82. De 3146 restar 236.

Ejercicio 83. De 2157 restar 1107.

Ejercicio 84. De 91A11 restar A311.

Ejercicio 85. De 24P30 restar AD30.

Ejercicio 86. De 34512 restar 1812;4512.

Ejercicio 87. De 84ABA0112 restar 5091012; 8321A12.

Ejercicio 88. De 100101011012 restar 1011012; 101111112.

Ejercicio 89. De 63P20530 restar83K2M30; 2158330.

Ejercicio 90. De 25613AF16 restar F63A16; B0CA16.

Ejercicio 91. De 23A,8CD16 restar 23,C0316.

Ejercicio 92. De 12613,845611 restar A132,311.

Ejercicio 93. De 243261,4316217 restar 1021,6317.

Ejercicio 94. De 83416,3143110 restar 21645,37110.

Ejercicio 95. De SALTO,BIRTU36 restar AME05C36.

Ejercicio 96. De 3216895,6132110 restar 21321,56710; B314,3510.

Ejercicio 97. De 436425,208 restar 1010,3218; 21321,61328.

Ejercicio 98. De 938AFC,00ABD16 restar FFCD,162116; AC0,BED16.

Ejercicio 99. De A38514,32113 restar A0321,6113; CBA,ABC13.

Ejercicio 100. De 236143AFC16 restar 21,632116; 0,02BF00116.

- 117 -
Tras los pasos de un... Hacker

- 118 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.5.3 MULTIPLICACIN

DEFINICIN
Es la operacin o procedimiento, mediante el cual se amplifica una cantidad dada,
tantas veces como lo indica otra de la misma clase, el smbolo que indica la
multiplicacin es el signo por (x *).

ELEMENTOS
Los elementos que intervienen en la multiplicacin son: los factores o
multiplicandos y el producto o resultado total.

Multiplicandos Producto o total


Ejemplo: 2310 x 1910 = 43710

PROPIEDADES
En la multiplicacin encontramos definidas las siguientes propiedades:

A) PROPIEDAD CLAUSURATIVA

La multiplicacin de dos cantidades, dan origen a otra de la misma clase.


Ejemplo: 3F16 x 1316 = 4AD16

3218 x 768 = 312368

B) PROPIEDAD CONMUTATIVA
El orden de los factores no altera el producto o resultado final.

Ejemplo: 8110 x 2510 = 202510

- 119 -
Tras los pasos de un... Hacker

2510 x 8110 = 202510

C) PROPIEDAD ASOCIATIVA

Los factores se pueden agrupar sin que altere el producto o total.


Ejemplo: (1012 x 102) x 10112 = 1012 x (102 x 10112)

10102 x 10112 = 1012 x 101102

11011102 = 11011102

D) PROPIEDAD MODULATIVA
Si a un nmero en cualquier sistema, multiplicamos por 1b el nmero no altera.

Ejemplo: 3F2816 x 116 = 3F2816

243215 x 15 = 23421 5

E) INVERSO MULTIPLICATIVO
Todo nmero tiene su inverso multiplicativo excepto el 0b, cuyo producto ser
igual a 1n.
Ejemplo: 325
310 7x 110 = 110
310

x 17 = 17
3257

PROCEDIMIENTO
La multiplicacin en cualquier sistema, se rige por el mismo procedimiento que
para los nmeros decimales, pero aprenderemos, como se multiplica, sumando
en cualquier sistema, para esto, seguiremos los siguientes pasos:

- 120 -
Nmeros y Sistemas de Numeracin... Captulo II.

a) Sumamos el primer factor, tantas veces nos indique la primera cifra del
otro factor (a partir de la derecha del nmero).

b) Acarreamos la primera cifra de esta suma (a partir de la derecha del


nmero).
c) Sumamos el primer factor, tantas veces nos indique la siguiente cifra del
siguiente factor y escribimos estos sumandos a la altura de la cifra
siguiente del acarreo.
d) Obtenemos este total y bajamos el acarreo.

e) Repetimos los pasos b al d tantas veces sean necesarios.

Ejemplo: Multiplicar 43110 x 72510.

Primero por el mtodo generalizado:

43110
x 72510
215510
+ 862 10
3017 10
31247510

Por el mtodo de sumas sucesivas:


43110
x 72510
43110 \
43110 |
+ 43110 | 5 veces
43110 |
43110acarreo
/
215510
43110 \
+ 431 10 / 2 veces
1077510acarreo
431 10 \
431 10 |
431 10 |

- 121 -
Tras los pasos de un... Hacker

+ 431 10 | 7 veces
431 10 |
431 10 |
431 10 /
31247510

El producto de multiplicar 43110 x 72510 = 31247510.

Como observamos, obtenemos la misma respuesta, cuando trabajamos en


cualquier otro sistema de numeracin, es aconsejable utilizar el segundo mtodo.
Ejemplo: Multiplicar F3516 x 7A16.
F3516
x 7A16
92316acarreo
F3516 \
F3516 |
F3516 |
F3516 |
+ F3516 A16 veces en este caso 10 veces.
F3516 |
F3516 |
F3516 |
F3516 |
F3516 /
981216acarreo
F35 16 \
F35 16 |
F35 16 |
+ F35 16 | 716 veces
F35 16 |
F35 16 |
F35 16 /
73F4216

El producto de multiplicar F3516 x 7A16 =73F4216.

EJERCICIOS RESUELTOS:

Efectuar las siguientes multiplicaciones:

- 122 -
Nmeros y Sistemas de Numeracin... Captulo II.

Ejemplo 26. Multiplicar 23215 x 325.


23215
x 325
23215
+ 23215
101425
2321 5
+ 2321 5
2321 5
1403225

Solucin: 23215 x 325 = 1403225

Ejemplo 27. Multiplicar 32411 xA311.


32411
x A311
32411
+ 32411
32411
97111
324 11
324 11
324 11
324 11
324 11
+ 324 11
324 11
324 11
324 11
324 11
3003111

Solucin: 32411 xA311 = 3003111

- 123 -
Tras los pasos de un... Hacker

Ejemplo 28. Multiplicar FBC16 x3116.


FBC16
x 3116
FBC16
FBC 16
+ FBC 16
FBC 16
302FC16

Solucin: FBC16 x 3116 = 302FC16

Ejemplo 29. Multiplicar 1011011,1011012 x 10110,112.


1011011,1011012
x 10110,11 2
10110111011012
+1011011101101 2
1000100110001112
+0000000000000 2
1000100110001112
+1011011101101 2
11111100001011112
+1011011101101 2
1001101010111111112
+0000000000000 2
1001101010111111112
+1011011101101 2
100000100110001111112

Ahora, el nmero de smbolos fraccionarios sern la suma de las posiciones de los


smbolos fraccionarios de los factores que participaron en esta multiplicacin, en
este caso sern 8 posiciones fraccionarias.

Solucin: 1011011,1011012 x 10110,112 = 100000100110,001111112

- 124 -
Nmeros y Sistemas de Numeracin... Captulo II.

Ejemplo 30. Multiplicar 326,BA0116 xA,01316.

326,BA0116
x A,013 16
326BA0116
+ 326BA0116
326BA0116
9742E0316
+ 326BA01 16
3BDFCE1316
+ 000000 16
3BDFCE1316
+ 326BA01 16
16
16
16
16
16
16
16
16
16
1F870206E1316

Solucin: 326,BA0116 xA,01316 = 1F87,0206E1316

- 125 -
Tras los pasos de un... Hacker

- 126 -
Nmeros y Sistemas de Numeracin... Captulo II.

EJERCICIOS PROPUESTOS:

Efectuar las siguientes multiplicaciones:


Ejercicio 101. Multiplicar 3214 x114.

Ejercicio 102. Multiplicar 10102 x1112.

Ejercicio 103. Multiplicar 1F616 x13B16.

Ejercicio 104. Multiplicar 81619 x2149.

Ejercicio 105. Multiplicar 10101112 x 10102.

Ejercicio 106. Multiplicar FAC16 x32116.

Ejercicio 107. Multiplicar FAC32 x MIL32.

Ejercicio 108. Multiplicar DOS32 x CIEN32.

Ejercicio 109. Multiplicar 1013F16 x1FF16.

Ejercicio 110. Multiplicar 75208 x 3618.

Ejercicio 111. Multiplicar 231,56110 x81,0610.

Ejercicio 112. Multiplicar 850,3AB16 x21,CD16.

Ejercicio 113. Multiplicar ABDAC,FA16 x32,6116.

Ejercicio 114. Multiplicar 321768,219 x 0,61379.

Ejercicio 115. Multiplicar 101011011,011012 x 101,01012.

Ejercicio 116. Multiplicar 101321,0113214 x 21012,3214.

Ejercicio 117. Multiplicar 216178,COL32 x 221,63BOR32.

Ejercicio 118. Multiplicar 21613,214310 x 2532,1670910.

Ejercicio 119. Multiplicar 21613BAC,F0116 x 0,1132A16.

Ejercicio 120. Multiplicar 1013210,3COLI30 x 0,03FLOR30.

- 127 -
Tras los pasos de un... Hacker

- 128 -
Nmeros y Sistemas de Numeracin... Captulo II.

2.5.4 DIVISIN

DEFINICIN
Es la operacin o procedimiento, mediante el cual logramos establecer la relacin
que existe de una cantidad respecto de otra dada, el smbolo que indica esta
operacin es el signo dividido para ( /).

ELEMENTOS
Los elementos que intervienen en una divisin son: el dividendo, cantidad sobre
la cual estableceremos la relacin; el divisor, cantidad que se relaciona con el
dividendo; el cociente, cantidad que expresa la relacin del dividendo y el divisor;
y, el residuo, cantidad que sumada al producto del cociente con el divisor se
obtiene el dividendo.

Dividendo Divisor Cociente


Ejemplo: 3810 610 = 610 y Residuo 210

PROPIEDADES
En la divisin tenemos definidas las siguientes propiedades:

A) PROPIEDAD CLAUSURATIVA
La divisin de dos cantidades, dan origen a otra de la misma clase.
Ejemplo: 217 37 = 57

312368 768 = 3218

B) PROPIEDAD MODULATIVA
La divisin de toda cantidad para la unidad, da como cociente la misma cantidad.

- 129 -
Tras los pasos de un... Hacker

Ejemplo: 324 14 = 32 4

PROCEDIMIENTO
Para poder dividir dos nmeros en cualquier sistema, aprenderemos a dividir
sumado, para lo cual seguiremos el siguiente proceso:

a) Escribimos nuestro dividendo, tomamos las primeras cifras como tenga el


divisor, comenzando desde la izquierda.
b) Comparamos el primer grupo con el divisor, si este (el divisor) es mayor
tomamos la siguiente cifra y repetimos el paso b.
c) Hallamos el complemento del divisor, en el universo definido por el
dividendo, en el grupo determinado.

d) Sumamos estas cantidades y trasladamos el acarreo del resultado y


volvemos a sumar, el acarreo y la cantidad sin el mismo.

e) Repetimos los pasos b hasta el d, tantas veces como sea necesario hasta
que el resultado final de las sumas sea menor que el divisor.

f) Contamos las veces que sumamos el complemento, hasta que este


resultado sea menor que el divisor, este valor nos indica la primera cifra
del cociente.

g) Bajemos la siguiente cifra y procedemos como nos indican los pasos c, d, e


y f.
h) Para hallar la fraccin, al ltimo residuo, le aumentamos un 0b y
repetimos los pasos a hasta el g, hasta hallar un residuo 0b el universo
definido.

Ejemplo: Dividir 322110 4510.


Paso a) tomamos el dividendo 322110, tomamos las dos primeras cifras, es decir
3210.

- 130 -
Nmeros y Sistemas de Numeracin... Captulo II.

Paso b) comparamos 3210 con 4510, vemos que el divisor es mayor, por tanto
tomamos la siguiente cifra, tendremos 32210, volvemos a comparar, como la
condicin es falsa continuamos con el proceso.
Paso c) hallamos el complemento del divisor en el universo definido por 32210, es
decir 99910, ahora s = 4510 su complemento ser s=95410, entonces se cumple
que:

s+ s = 99910.
Pasos d) y e).

322 110
+ 95410 (1) (primera suma)
127610 (R=1)
+>110
+ 277
95410
10 (2) (segunda
(27710 es suma)
mayor que 4510 por tanto continuamos con d) y e))

123110 (R=2)
+>110
+118610
23210
95410 (3) es suma)
(tercera
(23210
(R=3) mayor que 4510 por tanto continuamos con d) y e))

+>110
+1141
187
95410
10
10 (4) (18710 essuma)
(cuarta
(R=4) mayor que 4510 por tanto continuamos con d) y e))

+>110
+109610
14210
95410 (5) (quinta
(14210
(R=5) essuma)
mayor que 4510 por tanto continuamos con d) y e))

+>110
+1051
9710
95410
10 (6) (9710 essuma)
(sexta
(R=7) mayor que 4510 por tanto continuamos con d) y e))

+>110
+ 95410
5210 (7) (sptima
(5210 es mayor
suma, que
veremos
4510 por
que tanto
este valor
continuamos
(7) es con
la primera
d) y e))

100610
+>110 cifra
(R=7) del resultado)

710 (710 es menor que 4510 por tanto continuamos con f))

- 131 -
Tras los pasos de un... Hacker

7110 (Paso g)
+12510
5410 (1) (primera
(en este caso,
suma, este
realizamos
valor (1)
los es
pasos
la segunda
c), d), cifra
y e)) del

+>110 (R=71) resultado)


2610 (2610 es menor que 4510 por tanto continuamos con f)
26010 (Ahora para iniciar las fracciones adicionamos un 010
+95410 (1) y continuamos desde el paso a), primera suma)
121410
+>110 (R=71,1)

+95410
21510 (2) (segunda suma)
116910 (R=71,2)
+>110
17010
112410
+95410 (3)(R=71,3) (tercera suma)

+>110
+95410
12510 (4)
(cuarta suma)
107910
+>110 (R=71,4)

8010
+95410 (5) (quinta suma)
103410 (R=71,5)
+>110
3510 (condicin de fin de procedimiento, 5 primera cifra
35010 Ahora adicionamos un 010, para continuar obteniendo cifras
fraccionaria)

+95410 (1) fraccionarias y continuamos desde el paso a),


primera suma)
130410 (R=71,51)
+>110
30510
+95410 (2) (segunda suma)
125910 (R=71,52)
+>110
+954
26010
10 (3)
121410 (R=71,53) (tercera suma)

+>110
+95410
21510 (4)
(cuarta suma)
116910 (R=71,54)
+>110
17010

- 132 -
Nmeros y Sistemas de Numeracin... Captulo II.

+95410 (5) (quinta suma)


(R=71,55)
112410
+>110
+95410
12510
(R=71,56) (sexta
(6) suma)
107910
+>110
8010
+95410 (7) (sptima suma)
103410 (R=71,57)
+>110
3510 (termina el procedimiento, 7 segunda cifra fraccionaria)

(Como observamos, se repite el valor 3510, lo cual nos indica que la fraccin es
peridica en la ltima cifra)

Solucin: 322110 4510 = 71,5777... 10

Ejemplo: Dividir 10112 1002

Empezamos el proceso de la divisin:

10112
+0112 (1) (primera suma, en este caso como veremos 1)
10002 (es la primera cifra del resultado)
+>12 (R=1)
12 (termina proceso, bajamos la siguiente cifra)
112 (termina proceso, obtendremos que 0 es la siguiente cifra del
resultado, no se hizo ninguna suma)
(R=10)
1102 (Empiezan las fracciones)
+0112 (1) (primera suma)
10012 (R=10,1)
+>12
102 (termina proceso, adicionaremos un 02 paras seguir calculando)
1002 (R=10,10)
(primera suma, 1 es la siguiente cifra del resultado)
+0112(1)
1112 (observamos que hemos obtenido el universo definido, por tanto
terminamos el proceso)
(R=10,11)

Solucin: 10112 1002 = 10,112

- 133 -
Tras los pasos de un... Hacker

EJERCICIOS RESUELTOS:

Efectuar las siguientes divisiones:


Ejemplo 31. Dividir 111111112 101002.

111111112
+010112 (1)
1010102 (R=1)
+ >12
010112
101112
+010112 (1)
1000102 (R=11)
+>12
000112
1112 (0) (R=110)
11112 (0) (R=1100)
1111,02 (Empiezan las fracciones)
+0101 12 (1) (R=1100,1)
10100 12
+>12
101 02
101 002
+010 112 (1) (R=1100,11)
111 112 (Termina proceso)

Solucin: 111111112 101002 = 1100,112

Ejemplo 32. Dividir 32124 234.


32124
+ 104 (1)
1024 (R=1)
+>14
34
314
+1014
104 (1) (R=11)

+>14
24
224 (0) (24 es menor que 234, 224 es menor que 234, por tanto, no
2204 (R=110) se hace ninguna suma, el contador queda en 04 y empiezan

- 134 -
Nmeros y Sistemas de Numeracin... Captulo II.

+ 3104 (1) las fracciones)


11304
+>14 (R=110,1)

1314
+ 3104 (2) (R=110,2)
11014
+>14
1024
+ 3104 (3) (R=110,3)
10124
+>14
134
1304 (R=110,30)
+ 3104 (1)
11004 (R=110,31)
+>14
1014
+ 3104 (2)
10114 (R=110,32)
+>14
124
1204 (R=110,320)
+ 3104 (1)
+>1
10304 (R=110,321)
4
0314
+ 3104 (2)
+>1
10014 (R=110,322)

4
0024
00204 (R=110,3220)

Solucin: 32124 234 = 110,3220 y resto 0,0024

Para hallar el resto contamos las cifras que se adicion hasta el residuo final, se
coloca la coma fraccionaria en el primer cero (si hay fracciones) o completamos
con ceros a la izquierda, en este caso calculamos 4 dgitos fraccionarios y el resto
calculado tiene 4 dgitos, por esta razn el resto es 0,00204.

Ejemplo 33. Dividir 101012 11001002.

- 135 -
Tras los pasos de un... Hacker

101012 (R=0)
1010102 (R=0,0)
10101002 (R=0,00)
(R=0,000)
101010002
+100110112 (1)

1010000112 (R=0,001)
+>12
010001002
100010002
+100110112 (1) (R=0,0010)

1001000112 (R=0,0011)
+>12
001001002
10010002 (R=0,00110)
100100002
+10011011 (1) (R=0,001100)

1001010112 (R=0,001101)
+>12
001011002
10110002 (R=0,0011010)
101100002 (R=0,00110100)
+100110112 (1)
1010010112 (R=0,00110101)
+>12
010011002
100110002 (R=0,001101010)
+100110112 (1)
1001100112 (R=0,001101011)
+>12
001101002

Solucin: 101012 11001002 = 0,0011010112 y resto 0,0001101002

Ejemplo 34. Dividir 598,816 3F,216.


598816
+C0D16 (1) (R=1)
11A516
+>116
1A616
1A68 (R=10)
+FC0D16
16 (1) (R=11)
1167516

- 136 -
Nmeros y Sistemas de Numeracin. Captulo II.

(2) (R=12)

(3) (R=13)

(4) (R=14)

(5) (R=15)

(6) (R=16)

(R=16, 0)
(1) (R=16, 1)

(2) (R=16, 2)

(3) (R=16, 3)

(4) (R=16, 4.)

(5) (R=16,5)

(6) (R=16, 6)

- 137 -
Tras los pasos de un.. Hacker

+FCOD, (7) (R=16, 7.)

+FCOD, (8) (R=16,8)

+FCOD, (9) (R=16, 9)

+FCOD (A) (R=16, A)

+FCOD (B) (R=16, B)

(R=16, B0)
(R=16, B1)

Solucin: 5988, + 3.F,21 = 16, B116 residuo 0,1AE 16

Ejemplo 35. Dividir F385,A011 + BA1,031213.

F385A010
+45EFCED, (1) (R=1)

139756EE.
+ L->11
39756EF,
39756EFO, (R=10)

+F45EFCED (1) (R=11)

12DD46BDD1
+ L->11
2DD46BDE
+F45EFCED (2) (R=12)

- 138 -
Nmeros y Sistemas de Numeracin... Captulo II.

1223368CB16
+>116
223368CC16
1169265B9
+F45EFCED16 (3) (R=13)
16
+>116
169265BA16
10AF162A716
+F45EFCED16 (4) (R=14)

+>116
0AF162A816
AF162A80 (R=14,0)
1A375276D
+F45EFCED16 (1) (R=14,1)
16
+>116
A375276E16
+F45EFCED (2) (R=14,2)
197D4245B16
16
+>116
97D4245C16
+F45EFCED (3) (R=14,3)
18C33214916
16
+>116
8C33214A16
+F45EFCED (4) (R=14,4)
180921E3716
16
+>116
80921E3816
174F11B25
+F45EFCED16 (5) (R=14,5)
16
+>116
74F11B2616
16950181316
+F45EFCED16 (6) (R=14,6)

+>116
6950181416
+F45EFCED (7) (R=14,7)
15DAF150116
16
+>116
5DAF150216
+F45EFCED (8) (R=14,8)
1520E11EF16
16
+>116
520E11F016

- 139 -
Tras los pasos de un... Hacker

+F45EFCED
1466D0EDD16
16 (9) (R=14,9)

+>116
466D0EDE16
13ACC0BCB
+F45EFCED16 (A) (R=14,A)

16
+>116
3ACC0BCC16
12F2B08B916
+F45EFCED16 (B) (R=14,B)

+>116
2F2B08BA16
+F45EFCED16
1238A05A716 (C) (R=14,C)

+>116
238A05A816
117E90295
+F45EFCED16 (D) (R=14,D)

16
+>116
17E9029616
10C47FF83
+F45EFCED16 (E) (R=14,E)

16
+>116
0C47FF8416
100A6FC7116
+F45EFCED16 (F) (R=14,F)

+>116
00A6FC7216

Solucin: F385,A0116 BA1,031216 = 14,F16 resto A,6FC7216

- 140 -
Nmeros y Sistemas de Numeracin. Captulo II.

EJERCICIOS PROPUESTOS:

Efectuar las siguientes divisiones:


Ejercicio 121. 1012 + 112,

Ejercicio 122. 345 + 21.

Ejercicio 123. 9110 + 3710.

Ejercicio 124. 913, + 712.

Ejercicio 125. 4376g + 17g.

Ejercicio 126. 934A1 + 311.

Ejercicio 127. 10101010 + 11011,

Ejercicio 128. 3476g + 573g.

Ejercicio 129. 101101,10112 + 101,1010112.

Ejercicio 130. AF,3B,+95,3CD.

Ejercicio 131. 21,453g + 6,5g.

Ejercicio 132. 10111.110,1011112 + 10111,1012.

Ejercicio 133. 4510 + 13510.

Ejercicio 134. 101,112 + 10110101,1012.

Ejercicio 135. 267 + 651,037.

Ejercicio 136. 83F+ F3BFF.

Ejercicio 137. 1011011111011,110112 + 101101110,10112.

Ejercicio 138. 4376,531 +327,61316g.

Ejercicio 139. FAL2530,61332 + PACO,FIN0132.

Ejercicio 140. 353F6B BDC +216F3FBCE11

- 141 -
Tras los pasos de un... Hacker

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Nmeros y Sistemas de Numeracin, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- LGEBRAELEMENTAL MODERNA, M. O. Gonzlez J. D. Mancill, Editorial


KAPELUSZ, Publicado en Buenos Aires Argentina, 1.962.
- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las
Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- Criptografa: La ocultacin de mensajes y el ordenador, ENCICLOPEDIA
PRCTICA DE LA INFORMTICA APLICADA, TOMO 11, Juan Ignacio
Puyol, EDICIONES SIGLO CULTURAL S.A., Madrid Espaa, Octubre de
1.986.
- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y
BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- 80386 Gua del programador y Manual de referencia, Intel Corporation
1.986, Ediciones Anaya Multimedia S.A., Septiembre de 1.989.
- ABIOS for IBM PS/2 Computers and Compatibles, Phoenix Technologies
Ltd., AddisonWesley Publishing Company Inc., Junio de 1.989.
- Introduccin al 80386, Intel Corporation 1.985, Ediciones Anaya
Multimedia S.A., 1.989.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,
Publicado en los Estados Unidos de Norte Amrica, 1.990.
- Microsoft MASM, Assembly Language Development System Version 6.1.,
Microsoft Corporation 1.987, 1.991, 1.992 U.S. Patent No. 004955066,
Estados Unidos de Norte Amrica, 1.992.

- 142 -
Nmeros y Sistemas de Numeracin... Captulo II.

- Organizacin y diseo de computadores La interfaz hardware /


software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- System BIOS for IBM PCs, Compatibles, and EISA Computers, Phoenix
Technologies Ltd., AddisonWesley Publishing Company Inc., Noviembre
de 1.995.
- LGEBRA LINEAL CON APLICACIONES, George Nakos David Joyner,
International Thompson Editores, Publicado por International Thompson
Editores S.A., 1.999.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Polymorphous Encryption System, Nstor Marroqun Carrera, U.S. Patent
Application No. 20020191786 A1, Diciembre de 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- CLCULOAPLICADO, Laurence D. Hoffman, Gerald L. Bradley, Kenneth H.
Rosen, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
2.004.
- Criptografa y Seguridad en Computadores Cuarta Edicin Versin
4-0.8.1, Manuel Jos Lucena Lpez, Universidad de Jan, Publicacin
Electrnica, Marzo de 2.010.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 143 -
Tras los pasos de un... Hacker

- 144 -
INTRODUCCIN (III)

... Este periodo de aprendizaje me llevara hasta que, tanto en el colegio como por
mis propios medios, dominara algunos conceptos algebraicos, ya que sin ese
conocimiento, ni en sueos podra por fin programar la fascinante computadora.
Fruto de esta actitud autodidacta (vale decir que todos los Hackers son
autodidactas), super sin problemas las materias ms difciles de dominar en la
etapa colegial, que son las relacionadas a la matemtica. Pero para m ya no
tenan ningn misterio; es ms, ayudaba a mis compaeros de curso a entender
lo que aprendamos en clase. Por fin mi to Ral, decide seguir un curso de
programacin BASIC en la Universidad Central del Ecuador, fruto de ello cae en
mi poder una gua de curso elaborada por el Lcdo. Ricardo Ortega que se
denominaba Programacin BASICignoro si l era el autor e instructor, o como
en el colegio tomamos el lgebra de Baldor y otro es el profesor que ensea
esta materia.
No me llev mucho tiempo hasta que comprend que existen variables y
constantes en programacin, pude por fin hacer que la TRS-80 sumara dos
nmeros, qu alegra indescriptible sent! mi primer programa de computadora,
y a la vez, qu decepcin! nicamente haba digitado de la gua de curso algo as:

10 REM Programa que suma dos nmeros


20 LET A=0
30 LET B=0
40 LET C=0
50 PRINT Ingrese nmeros A, B:;
60 INPUT A,B
70 LET C=A+B
80
90 PRINT
END La suma de ;A; + ;B; es ;C

Nueve lneas de un programa donde claramente se identifican: la declaracin de


las variables (lneas 20, 30 y 40), el ingreso de datos (lneas 50 y 60), el
procesamiento de estos datos (lnea 70) y la obtencin de resultados (lnea 80).
Si ustedes disponen de cualquier versin de BASIC, ejecuten este programa y
vean lo que sucede, incluso en una versin moderna como es la de True BASIC.
Pueden obtener o adquirir una copia de esta versin en www.truebasic.com.
Sera conveniente que consigan esta versin original, si quieren que les dirija en
este arte como es el de la programacin.

- 145 -
Tras los pasos de un... Hacker

Pero todava no tena los elementos suficientes para poder entender del todo lo
que estaba haciendo y me top con un tema que en programacin se utiliza, se
trata de la lgica binaria tambin conocida como lgebra de Boole. Con ella los
ingenieros que disean microprocesadores, elaboran sumadores lgicos
(Unidades Aritmtico Lgicas) y dota de las bases para lo que hoy conocemos
como circuitos digitales.
Les invito a conocer algo del lgebra de Boole...

- 146 -
CAPTULO III. LGICA BINARIA

La aplicacin de la Lgica (ciencia de la razn) a algunos campos de la tecnologa


ha sido objeto de estudio por algunos matemticos a travs de la historia, dando
lugar a una teora matemtica que permite establecer relaciones y mtodos
algebraicos con los que podemos estudiar diversos problemas. Tiene
importantes aplicaciones en los campos de la ciberntica, robtica, informtica,
electrnica y electrotecnia. Por ejemplo: la conversin analgico-digital, el
tratamiento automtico de datos, la telefona automtica, los procesos de clculo
y control numricos. El punto de partida de esta ciencia reside en los trabajos de
George Boole (1.815-1.864, Fig. 42) pero fue Claude Shannon (1.916-2.001,
padre de la Teora de la Informacin); quien, casi un siglo despus, encontr las
primeras aplicaciones prcticas para el lgebra de Boole.

FIG. 42. GEORGE BOOLE.

Generalmente empleamos la Lgica Binaria en la expresin conveniente del


estado de magnitudes, cantidades, posiciones, etc., datos de tipo bivalente (dos
nicos valores posibles).

Nuestro razonamiento (juicio) nos hace llegar a conclusiones que bajo ciertas
condiciones, estimamos que el problema enunciado es factible de solucin si la
tiene, si es verdadera o falsa. Observamos que los elementos del razonamiento

- 147 -
Tras los pasos de un... Hacker

son proposiciones o enunciados y conclusiones (juicios) que nos llevan siempre a


lograr una verdad sea afirmativa o negativa. Estudiaremos unos cuantos
ejemplos de problemas de razonamiento.

Ejemplo: Juan compr un animal salvaje. A los dos das de su granja


desaparecen tres gallinas, su primo Jorge inesperadamente gana
$75 y sugiere a Juan que no se deshaga del animal. Los dos buscan
algn rastro de las gallinas pero no lo encuentran. Ahora Juan se
pregunta por qu desaparecieron las gallinas? sabiendo que su
animal permaneci en casa.

Jorge tom las tres gallinas y las vendi. Trat de hacer creer a Juan que
Solucin:
su animal se las comi.

EJERCICIOS RESUELTOS:

Dar la solucin lgica a los siguientes problemas:

Ejemplo 36. Pedro es un estadstico, en su trabajo nos topamos con el siguiente


problema: en la fbrica de automviles se producen 10 autos color rojo, 5
autos color caf, 2 color crema, 3 color blanco y 10 color negro, los autos
rojos tienen llantas radiales, los autos negros tienen radios FM, los cremas
aros de aluminio, los cafs no tienen vidrios y los blancos son de tipo
convertible, l desea distribuir los autos en la sierra y costa, cules irn a
cada regin y cules no?
Solucin:

a) Trazamos un cuadro de las caractersticas de los autos:


Color Rojo Caf Crema Blanco Negro
Extra:
Llantas Radiales *
Radios FM *
Aros de Aluminio *
Sin Vidrios *
Convertibles *

b) Por las caractersticas tabuladas, Pedro da su informe al jefe:

- 148 -
Lgica Binaria... Captulo III.

Irn a la costa los autos blancos y los cremas, a la sierra los rojos y los
negros y los que quedan en la fbrica son los cafs.

Ejemplo37. Alex es polica, de la crcel se fugan 2 reos, en toda la poblacin hay


un brote de gripe, registran el pueblo pero no los encuentran, Alex regresa
con los reos sanos y salvos. Qu deduccin lgica tom Alex para saber
donde estaban los reos? Sabiendo l, que los reclusos no deban
enfermarse, adems estaban vestidos de blanco.

Solucin: Alex dedujo que los reos estaban en el hospital.

- 149 -
Tras los pasos de un... Hacker

- 150 -
Lgica Binaria... Captulo III.

EJERCICIOS PROPUESTOS:

Dar a los siguientes problemas una solucin posible y lgica.

En un pueblo todos sus habitantes son campesinos, viven de lo que


Ejercicio 141.
produce su tierra. Por mandato del presidente del pueblo, ninguno puede
sembrar ms de un producto en su terreno. La produccin sale al mercado que
dirige el presidente y todos comparten los productos. Cul es la ocupacin del
presidente?
En un pas extrao, el pueblo habla todo en sentido opuesto. A Joaqun
Ejercicio 142.
le llega el siguiente mensaje: Todos detestamos entrar de clases. l sabe que
ellos son buenos estudiantes, cul es el verdadero sentido del mensaje?

En un pueblo, existe un barbero, todos los hombres tienen o les crece


Ejercicio 143.
barba, una parte de la poblacin masculina se afeita por si misma y la otra acude
al barbero, pero nadie puede hacer las dos cosas, ahora, quin afeita al barbero?

Un cazador tiene que pasar a la otra orilla de un ro, pero entre sus
Ejercicio 144.
piezas tiene un len (hambriento), una oveja y una paca de heno, cuyos pesos son
50 libras cada uno y el cazador 100, la barca no pude soportar ms de 150 libras.
Cmo pasa el cazador al otro lado sin perder ninguna mercadera?

Un hacendado quiere repartir entre sus cuatro hijos, su terreno de


Ejercicio 145.
manera que todos tengan el mismo terreno y forma, como lo muestra la figura.
Puedes ayudarlo?

Superficie 15 hectreas.

Ahora que hemos razonado un poco, podemos estudiar la Lgica Binaria, la cual
se desarrolla en el lgebra de Boole.

- 151 -
Tras los pasos de un... Hacker

- 152
Lgica Binaria... Captulo III.

3.1 LGEBRA DE BOOLE

DEFINICIN
Es el conjunto de reglas, leyes y teoremas, mediante los cuales las operaciones
lgicas pueden ser expresadas simblicamente en forma de ecuaciones y
manipuladas matemticamente.
En este tratado de lgica, nicamente admitiremos dos posibles resultados, el
verdadero que lo simbolizaremos con el 1 y el falso cuyo smbolo ser el 0. Esta
convencin la utilizaremos ya que estos dgitos son los del sistema binario.

3.2 OPERACIONES LGICAS

Dado un conjunto de estados (pulsos) lgicos A, o dos conjuntos de estados


lgicos A y B, cuyos elementos son los estados posibles 0 y 1; que en la
posibilidad de sus combinaciones, obtendremos un conjunto de estados lgicos
de salida, cuyos elementos son el resultado de la relacin u operacin lgica.
En el lgebra de Boole, encontramos definidas las siguientes operaciones
lgicas:

NO (NOT, )

Los elementos de la negacin, sern verdaderos nicamente si la variable es


negativa y viceversa.
Si A = { x/x sea 0 o 1 }

Entonces
A= {x/x es verdadero six Ayxes falso}

- 153 -
Tras los pasos de un... Hacker

A) TABLA DEVERDAD
A A
0 1
1 0

B) COMPUERTA LGICA

A A

O (SUMA LGICA, OR, +)


Los elementos del conjunto A B sern verdaderos, si existe al menos una
variable verdadera.
Si A = { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

Entonces
A+ B = { x/x es verdadero si xverdadero A o B}

A) TABLA DE VERDAD

A
0 B A+B
0 0
0 1 1
1 0 1
1 1 1

- 154 -
Lgica Binaria... Captulo III.

B) COMPUERTA LGICA

B
A
A+B

Y(PRODUCTO LGICO, AND, )

Los elementos del conjunto A y B, sern verdaderos, si existen nicamente


variables verdaderas.
Si A = { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

Entonces

A B = { x/x es verdadero si xverdadero A y B}

A) TABLA DE VERDAD
A B A B
0 0 0
0 1 0
1 0 0
1 1 1

B) COMPUERTA LGICA

B
A
A B

- 155 -
Tras los pasos de un... Hacker

ONEGADO (NOR, + )

Los elementos de la negacin de O, sern verdaderos si todas las variables de


entrada son falsas.
Si A = { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

Entonces
A+ B = { x/x es verdadero si x A+Byx falso }

A) TABLA DEVERDAD
A B A B A B
0 0 0 1
0 1 1 0
1 0 1 0
1 1 1 0

B) COMPUERTA LGICA

A
A+B
B

YNEGADA (NAND, -)

Los elementos de la negacin de Y, sern verdaderos si al menos una entrada


es falsa.
Si A = { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

- 156 -
Lgica Binaria... Captulo III.

Entonces
A- B = { x/x es verdadero six A Byx falso }

A) TABLA DEVERDAD

A B A B A B
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0

B) COMPUERTA LGICA

B
A
A-B

O EXCLUSIVO (XOR, )
Los elementos de O exclusivo o diferencia simtrica, son falsos si las 2
entradas son iguales.
Si A= { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

Entonces

A B = { x/x es falso si x AyB }

- 157 -
Tras los pasos de un... Hacker

A) TABLA DEVERDAD
A B A B
0 0 0
0 1 1
1 0 1
1 1 0

B) COMPUERTA LGICA

A
A B
B

O EXCLUSIVO NEGADO. (EQV, )


Los elementos de O exclusivo negado, son verdaderos si las 2 entradas son
iguales.
Si A = { x/x sea 0 o 1 }

B= { x/x sea 0 o 1 }

Entonces

A B = { x/x es verdadero si x AyB }

A) TABLA DEVERDAD
A B A B A B
0 0 0 1
0 1 1 0
1 0 1 0
1 1 0 1

- 158 -
Lgica Binaria... Captulo III.

B) COMPUERTA LGICA

A
A B
B

EJERCICIOS RESUELTOS:

Resolver los siguientes ejercicios:

Dados los conjuntos de entrada A, B y C, determinar el conjunto


Ejemplo 38.

resultado, por medio de tablas de verdad, de la siguiente operacin lgica:

A+B C

Si A = {1, 1, 1, 1, 0, 0, 0, 0 }
B = {1, 1, 0, 0, 1, 1, 0, 0 }
C = {1, 0, 1, 0, 1, 0, 1, 0 }

Obtener:

A+B C=?
a) Tablas de verdad:

A A C C A B A+B A+B C A+B C


1 0 1 0 0 1 1 1 0 1
1 0 0 1 0 1 1 1 1 0
1 0 1 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 1 1
0 1 1 0 1 1 1 1 0 1
0 1 0 1 1 1 1 1 1 0
0 1 1 0 1 0 1 1 0 1
0 1 0 1 1 0 1 1 1 0

- 159 -
Tras los pasos de un... Hacker

Solucin: A+B C= {1, 0,0, 1,1, 0, 1,0}

Si en un momento dado, el estado lgico de la entrada de los


Ejemplo 39.

conjuntos A, B, C y D, seran los valores: 1,0, 0 y 1 respectivamente. Disear


la compuerta lgica y la operacin que se produjo para que la salida genere
0.(Dar una solucin, con la intervencin de 4 elementos)

1 A
A 0
0
A+B C-D
0
B
0
0
C B C-D
1

D 1
C-D

Solucin: Operacin A+B C-D

Dados los conjuntos A, B, C, D y E de entrada, hacer las tablas de


Ejemplo 40.
verdad y el diseo de las compuertas lgicas que generen el conjunto
definido por las operaciones lgicas:

A D C+ E B D

Si: A= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
B= {1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}
C= {1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0}
D= {1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0}
E= {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}

a) Diseamos la compuerta lgica:

- 160 -
Lgica Binaria. Captulo III.

o A. Da C + E. B a D

A. De c - E A e D. GB, C + E

Si nosotros introducimos el pulso o bit que corresponde a las lneas de entrada,


obtendremos un pulso particular propio del circuito.

c) Elaboramos las tablas de verdad.


5

AoD B PD C+ E

- 161 -
Tras los pasos de un... Hacker

0 1 0 1 0 1 0 0 0
0 0 0 1 1 0 0 1 1
0 0 0 1 1 0 0 0 0
0 1 0 0 0 1 1 1 1
0 1 0 0 0 1 1 0 1
0 0 0 0 1 1 1 1 1
0 0 0 0 1 1 1 0 1
0 1 0 0 0 0 0 1 1
0 1 0 0 0 0 0 0 0
0 0 0 0 1 1 0 1 1
0 0 0 0 1 1 0 0 0

A D C+E A D C+E A D C+E B D A D C+E B D


1 1 0 1 0 0
1 1 0 1 0 0
0 1 1 0 1 0
0 1 1 0 1 0
1 1 0 1 0 0
1 0 1 0 0 0
0 1 1 0 1 0
0 0 0 1 1 1
1 1 0 1 1 1
1 1 0 1 1 1
0 1 1 0 0 0
0 1 1 0 0 0
1 1 0 1 1 1
1 0 1 0 1 0
0 1 1 0 0 0
0 0 0 1 0 0
0 1 1 0 0 0
0 1 1 0 0 0
0 1 1 0 1 0
0 1 1 0 1 0
0 1 1 0 0 0

- 162 -
Lgica Binaria. Captulo III.

solucin: A D (B)C + E B (B) D = {00000001110010.000.000.000.010.00001,000}

- 163 -
Tras los pasos de un... Hacker

- 164
Lgica Binaria... Captulo III.

EJERCICIOS PROPUESTOS:

Dada la operacin lgica A


Ejercicio 146. B, encontrar por medio de tablas de
verdad, la salida que genera, si:

A= {0,0,1,1}

B = {0,1,0,1}
Dados los conjuntos A, B y C; y definida la operacin lgica A B C,
Ejercicio 147.
disear la compuerta lgica, por medio de tablas de verdad, encontrar el conjunto
resultado, si:
A= {1,1,1,1,0,0,0,0}

B = {1,1,0,0,1,1,0,0}

C = {1,0,1,0,1,0,1,0}
Dados los conjuntos A, B y C; y definida la operacin lgica A B C B
Ejercicio 148.
disear compuerta lgica, por medio de tablas de verdad, encontrar el conjunto
la
resultado, si:

A = {1,0,1,0,1,0,1,0}

B = {1,1,0,0,1,1,0,0}

C = {1,1,1,1,0,0,0,0}
Dados los conjuntos A, B y C; y definida la operacin lgica A B C
Ejercicio 149.
disear la compuerta lgica y por medio de tablas de verdad, encontrar el
conjunto resultado, si:

A = {1,1,0,0,1,1,0,0}

B = {1,0,1,0,1,0,1,0}

C = {1,1,1,1,0,0,0,0}
Dados los conjuntos A, B y C para cada caso pedido, disear la
Ejercicio 150.
compuerta lgica, por medio de tablas de verdad, encontrar el conjunto resultado

- 165 -
Tras los pasos de un... Hacker

de:
a) A B
b) C A B
c) A B C

d) C + A B

Si:

A = {1,0,1,0,1,0,1,0}

B = {1,1,0,0,1,1,0,0}

C = {1,1,1,1,0,0,0,0}
Dadas las entradas A, B, C y D; disear la compuerta lgica que genere
Ejercicio 151.
los siguientes resultados:

a) A BC

b) AC C D
c) B D + C D A

d) D A

Ejercicio 152. Dadas las entradas A, B, C y D por medio de tablas de verdad, encontrar
el conjunto resultado de:

a) A+B+C

b) A D C D B

c) A B B+C

d) A B CD D B
Si la entrada a la operacin lgica A B C, son los valores 1, 0 y 1
Ejercicio 153.
respectivamente para A, B y C. Qu resultado nos arroja dicha operacin?

- 166 -
Lgica Binaria... Captulo III.

Dadas las entradas, cuya posicin corresponde a los valores A, B y C; y


Ejercicio 154.
la
definida operacin lgica:

A B C+ A
Encontrar los valores que arroja dicha operacin para:

a) 1,1,0
b) 0,0,1
c) 1,0,1
d) 0,0,0
e) 1,1,1

Dadas las entradas cuya posicin corresponde a los valores A, B, C, D y


Ejercicio 155.
E; y, definidas las operaciones lgicas:

a) A B C D+E

b) A BE

Encontrar los valores que arroja dichas operaciones para:

a) 1,1,0,1,0
b) 0,1,0,1,1
c) 0,1,0,0,0
d) 1,0,0,0,1
e) 0,1,1,1,1
f) 0,0,1,0,0
g) 1,1,1,1,1
h) 0,0,0,0,0

Si tomamos la siguiente salida: 1, qu operaciones lgicas se


Ejercicio 156.
realizaron?, si sabemos que las entradas fueron A y B cuyos valores son: 0 y 1
respectivamente. (En la operacin no intervendrn ms de dos elementos; por
ejemplo, es vlida la expresin A+B pero no lo es A B+B, observe que generan
la misma salida). Dar dos soluciones.

Si el conjunto de salida tiene por elementos {1,0,0,1}, qu operaciones


Ejercicio 157.
lgicas?, en las que no intervienen ms de dos elementos se produjeron, si

- 167 -
Tras los pasos de un... Hacker

sabemos que las entradas fueron A y B cuyos elementos son: {1,0,1,1} y {0,1,1,0}
respectivamente. Dar 3 soluciones
Si la salida que genera la operacin lgica A B C es 0. Qu valores
Ejercicio 158.
fueron introducidos como entrada en cada valor? Dar una solucin.
Si la salida que genera la operacin lgica A B C es 1. Qu valores
Ejercicio 159.
fueron introducidos como entrada en cada valor? Dar una solucin.
Si en la entrada de una operacin lgica, intervienen los elementos A, B,
Ejercicio 160.
C y D cuyos valores fueron {1,1,1,1}; {0,0,1,1}; {1,0,1,1} y {1,0,1,1}
respectivamente. Qu operaciones lgicas se efectuaron?, si el resultado
arrojado fue {1,1,1,0}. Dar una solucin.

- 168 -
Lgica Binaria... Captulo III.

3.3 LEYES DEL LGEBRA DE BOOLE

A) LEY CLAUSURATIVA

El conjunto resultado de una operacin lgica tendr el mismo campo de


accin que los elementos que participan en la operacin

Si:
A= {0,1}
B= {0,1}

AR B = C C = {0,1}, siendo R, la relacin u operacin lgica.

B) LEY CONMUTATIVA
El orden de los elementos que intervienen en las operaciones lgicas Y y
O, no modifican el conjunto resultado o salida.

Si:
A= {0,1}
B= {0,1}

Se cumple que:

A B=B A

A+ B = B + A

C) LEY ASOCIATIVA

Los elementos que intervienen en las operaciones Y y O se pueden


agrupar.

- 169 -
Tras los pasos de un... Hacker

Si:
A= {0,1}
B= {0,1}
C= {0,1}

Se cumple que:

(A+B)+ C = A+(B+C)

(A B) C=A (B C)

D) LEY DISTRIBUTIVA

Los elementos que intervienen en las operaciones Y y O son distributivos,


cuando se combinan estas operaciones en asociacin.

Si:
A= {0,1}
B= {0,1}
C= {0,1}

Se cumple que:

A (B+C)=A B+A C
A+(B C)=(A+B) (A+C)

- 170 -
Lgica Binaria... Captulo III.

3.4 TEOREMAS DEL LGEBRA DE BOOLE


Se han demostrado los siguientes teoremas:

A+ 0 = A 1er. Teorema de identidad.


A+ 1 = 1 Teorema reduccin a 1.
A+ A = A 1er. Teorema de absorcin.
A+ A=1 1er. Teorema inverso.
A 0=0 Teorema reduccin a 0.
A 1=A 2do. Teorema de identidad.
A A=A 2ro. Teorema de absorcin.
A A=0 2ro. Teorema inverso.
A= A Negacin de una negacin.
A+ A B = A 3er. Teorema de absorcin.
A+ A B = A+B
Teorema de Morgan:

A B = A+B

A+ B = A B

Ejemplo:

Demostrar que A B = A+B

Si:
A= {0,0,1,1}
B= {0,1,0,1}

Usando tablas de verdad de las operaciones tenemos que:

- 171 -
Tras los pasos de un... Hacker

A B A B A B
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0

A B A B
1 1 1
1 0 1
0 1 1
0 0 0

A B = {1,1,1,0} ^ A+ B = {1,1,1,0}

A B = A+B

EJERCICIOS RESUELTOS:

Ejemplo 41. Simplificar: A B+A (B+C)+ B (B+C)

A B+A (B+C)+ B (B+C)=A B+A B+A C+ B B+ B C(PorLey Distributiva)


= A B+ A C + B + B C (Por Teorema g)
= A B+ A C + B (Por Teorema j)
=A B+B+A C
= (A 1 + 1) B+A C (PorTeoremaf)
= B +A C

Solucin: A B+A (B+C)+ B (B+C)=A C+ B

Ejemplo 42. Simplificar: A B+A B+A B CD+ A B C D


AB+AB+ABCD+A B CD = A B (1+CD+CD)+AB(PorTeoremab)

- 172 -
Lgica Binaria... Captulo III.

= A B 1 + A B (Por Teorema f)
= A B + A B (Por Teorema d)

Solucin: A B+AB+ABCD+ABCD = AB + AB

Ejemplo 43. Demostrar: [A B (C+B D)+ A B] C= B C

[AB (C+B D)+AB] C=[A B C+A B B D+AB] C(PorLey Distributiva)

= [A B C+AC +AB] C(Por Teorema h)

= [AB C++A B] C(PorTeoremae)

= [AB C+A B] C(PorTeorema a)

= AB CC+A B C(PorLeyDistributiva)

= AB C+AB C(PorTeoremag)
=(AB+AB) C(PorLeyDistributiva)

= [(A+A)B] C(PorLeyDistributiva)

= 1B C(PorTeorema d)

= B C (Por Teorema f) l.q.q.d (lo que queda demostrado)

Ejemplo 44. Demostrar:(A B+A B) (C D + C D)= B C

(AB+AB) (CD+CD) = [B (A+A)] [C(D+D)] (Por Ley Distributiva)

= [B ] [C ] (Por Teorema d)

= B C (Por Teorema f) l.q.q.d

Ejemplo 45. Demostrar: AB + CD AB CD = (A+B) (C+D)

- 173 -
Tras los pasos de un... Hacker

A B + CD AB CD = (AB + CD) (AB CD) (Por Ley Asociativa)

= (AB) (CD) (AB) (CD) (Por Teorema de Morgan)

= (AB) (CD) (Por Teorema g)

= (A + B) (C + D) (Por Teorema de Morgan) l.q.q.d

- 174 -
Lgica Binaria... Captulo III.

EJERCICIOS PROPUESTOS:

I. SIMPLIFICAR LAS SIGUIENTES EXPRESIONES:

Ejercicio 161. (A+B)(A+C)+A C = ?

Ejercicio 162. B[(ACD+ACD)+(ACD+ACD)]=?

Ejercicio 163. A (B CD+B CD)+A (BC D+B CD) = ?

Ejercicio 164. A B (CD+C D)+AB (CD+CD)+ABCD = ?

Ejercicio 165. AB+AB+CD+CD = ?

Ejercicio 166. A+B (C+D) (C+D)+(AB)=?

Ejercicio 167. {ABC D [(ABC+D) (A+BC+D)] (A+BD+C)}=?

Ejercicio 168. [A(B+C+D) (A+B)]+[A (A+BA)]=?

Ejercicio 169. {A [A+B (C+DC+D)+A CB)]+[A+(A+B) (C+D)]} = ?

{A [AB+(C+D+E+F)+(C+A+E+F) (A+B A+CD)+A]


Ejercicio 170.
{A+B (CE F) (F+EF+E)] (A+BC+E)}} = ?

II. DEMOSTRAR QUE:

Ejercicio 171. A+B+C+D+AB CD= A+B+C+D

Ejercicio 172. A+B C+(A+B+C)+A B D= AB (C+D)

Ejercicio 173. (A+B) (C+D) (E+F) (G+H) = A+B+C+D+E+F+G+H

Ejercicio 174. (ABC)(EGH)+(HIJ) (KLM)=(ABC) (EFG)(HIJ) (KLM)

Ejercicio 175. A B+AB+CE+CE+(AB)+(CE) = AB CE

- 175 -
Tras los pasos de un... Hacker

Ejercicio 176. A+B+CD = A+B+AB+ACD

Ejercicio 177. (A+B)(A+C)(B+C)(B+D) = B(A+C)+CD(A+B)

Ejercicio 178. (A+BC)(B+CD) = A(B+CD)+ABC

Ejercicio 179. A+B+C = (A+B)(A+B+C)+(A+C)(B+C)

Ejercicio 180. (A+C)(A+B+C)+(A+B)(B+C) = (A+C)(B+C)+(A+B)(A+B+C)

Ejercicio 181. A+B+CD = B+AB+CD+AB

Ejercicio 182. A+B+C+D = A (C+D)+(A+C)(B+C)

Ejercicio 183. (A+C)(A+D)+(A+C)(B+C)+B+D = 1

Ejercicio 184. AC+B+D = AE+AE+AB+CE(A+D)+C+DE

Ejercicio 185. A+B+C = A+B+C+AC+BC+ABC+ABC

Ejercicio 186. (A+D)(B+E)(B+C)+(A+D)(C+E)(C+D)+(A+D)(D+E)(D+B) = A(B+C)+D

Ejercicio 187. AB = (A+B)[(A+D)+(A+D)(C+D)+D(A+C)]

Ejercicio 188. A+B+C+D = (A+C)(A+D)+AC+ABC

Ejercicio 189. A+B+C+D = (AB)+(AC)+(A+B)(B+D)


Ejercicio 190. A+B = (A+B)(A+C)+AB+AC

- 176 -
Lgica Binaria... Captulo III.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Lgica Binaria y del lgebra de Boole, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las


Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- INTEGRATED ELECTRONICS: Analog and Digital Circuits and Systems,
Jacob Millman Chirstos Halkias, McGraw Hill and Electronic
Engineering Series / Kogakusha Ltd., Publicado en los Estados Unidos de
Norte Amrica, 1.972.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Manual del Microprocesador 80386, Chris H. PappasWilliam H. Murray,
III, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
1.983.
- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot
Colombia, 1.984.
- CONEXIONES EN EL IBM PC/XT/AT, Teora y prctica de perifricos,
comunicaciones y configuraciones, M. D. Seyer, Red Editorial
Iberoamericana REI Andes Ltda., Prentice Hall Inc., 1.985.
- 80386 Gua del programador y Manual de referencia, Intel Corporation
1.986, Ediciones Anaya Multimedia S.A., Septiembre de 1.989.
- ABIOS for IBM PS/2 Computers and Compatibles, Phoenix Technologies
Ltd., AddisonWesley Publishing Company Inc., Junio de 1.989.
- Introduccin al 80386, Intel Corporation 1.985, Ediciones Anaya
Multimedia S.A., 1.989.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- Organizacin y diseo de computadores La interfaz hardware /
software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- System BIOS for IBM PCs, Compatibles, and EISA Computers, Phoenix
Technologies Ltd., AddisonWesley Publishing Company Inc., Noviembre
de 1.995.

- 177
Tras los pasos de un... Hacker

- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del


Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Polymorphous Encryption System, Nstor Marroqun Carrera, U.S. Patent
Application No. 20020191786 A1, Diciembre de 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- Criptografa y Seguridad en Computadores Cuarta Edicin Versin
4-0.8.1, Manuel Jos Lucena Lpez, Universidad de Jan, Publicacin
Electrnica, Marzo de 2.010.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 178 -
INTRODUCCIN (IV)

... Ahora, tendra que reforzar el conocimiento adquirido para poder manejar la
mtrica informtica y poder organizar la informacin que en adelante manejara.
Les invito a conocer cmo? se pueden manejar y organizar los datos. En
definitiva, procesar la informacin as como aplicar algunas de las funciones que
en computacin estn normalizadas para trabajar con estos datos...

- 179 -
Tras los pasos de un... Hacker

- 180 -
CAPTULO IV. LA INFORMACIN

Por favor, pseme el teclado!, 360 KB almacenan los disquetes de doble


densidad, Una computadora cuesta $600,00 dlares, 2F16 + C16 = 3A16, estas
afirmaciones constituyen informaciones; es decir, son mensajes que indican algo
o tienen un contenido determinado, emitido de cierta forma para que otro
comprenda la idea o mensaje que se quiere transmitir, sobrentendindose que
los entes son de la misma naturaleza o conocen la convencin o protocolo para
intercambiar informacin y que medio de estos se establece la comunicacin, en
el caso de los humanos desempea una funcin social muy importante. Las
informaciones pueden describir una situacin real, explicar una accin, definir
una idea o expresar un estado de nimo, su modo de transmisin puede ser de
diversas formas entre ellas tenemos: la verbal, la escrita, la electrnica entre
otras.

4.1 DEFINICIN
En computacin la informacin ser cualquier seal inteligible o descifrada que
fue transmitida entre la entrada y la salida de un sistema, la misma que es
representada como dato computacional y susceptible de ser procesado en una
computadora o dispositivo automtico de procesamiento de datos.

Nota del autor:


En este concepto, cuando hablamos de descifrado, nos referimos a algo claro y entendible sin
complicacin. Ms adelante cuando deseen estudiar algo de la CRIPTOLOGA, entrarn en ms
detalle del concepto de Criptografa, Criptoanlisis, Mensaje Cifrado y Mensaje Descifrado.
Sobre la Teora de la Informacin, en matemtica hay trabajos muy importantes como los de Claude
Shannon quien es el creador de esta teora. No es el objetivo de este texto profundizar en este tpico,
pero sera interesante, que si tienen curiosidad investiguen este aspecto.

- 181 -
Tras los pasos de un... Hacker

4.2 ORGANIZACIN Y PONDERACIN

La informacin puede ser ponderada; es decir, susceptible de ser medida. La


unidad de informacin es el Byte. La manera de representar la informacin se lo
hace por medio de los datos, en captulos anteriores, mencionamos estos datos y
a manera de ejemplo mostraremos una estructura (organizacin de datos) para
trabajar con los mismos.

Base de datos: Registro Laboral.


Archivo: Libreta de Contactos Familiares.
Registro: Pedro Prez; Alaus # 341; 264591
Campo: Pedro Prez
Carcter: A, B, C,
Byte: 10101010

4.2.1 BIT
Es la porcin bsica de informacin que puede ser procesada por una
computadora o transmitida por dispositivos electrnicos.

Representa a un dgito binario, una seal digital o pulso, un estado de circuito o


un estado lgico. As respectivamente ser 0 1, no existe voltaje o existe voltaje,
apagado o encendido y falso o verdadero.

Su nombre se deriva de la frase inglesa binary digit (dgito binario), que por
facilitad se la acomod al adjetivo bit pequeo, poquito, de nfimo tamao.
Su notacin ser una b (b minscula).

Para que puedan ser procesados o transmitidos los bits, pueden agruparse en
paquetes y a partir de estos grupos se establece la unidad de informacin que se
denomina Byte.

Nota del autor:


Cuando estudiamos los sistemas de numeracin, a la representacin binaria de un dgito
hexadecimal, lo habamos denominado nibble que era la representacin de cuatro dgitos
binarios, entonces al grupo de cuatro bits lo llamaremos tambin nibble.

- 182 -
La informacin... Captulo IV.

4.2.2 BYTE
Es la unidad bsica de informacin computacional que representa un smbolo o
cdigo con el que una computadora puede construir y procesar informacin.
Segn el diseo de la computadora, el Byte puede ser de 8 bits (dependiendo si se
acompaa un bit de paridad, ser de 9 bits), 16 bits, 32 bits, 64 bits o la cantidad
de bits que el fabricante haya dispuesto para este procesamiento bsico de
informacin.

Nota del autor:


En los comienzos de la computacin, se estableci que un Byte tenga una longitud de 8 bits por
razones de economizar espacio en memoria; adems que con estos 8 bits se podan representar los
caracteres y smbolos ms importantes de los alfabetos ingls, francs, portugus y espaol (en
general los alfabetos occidentales). Con los avances de la tecnologa y la necesidad de representar
los smbolos de otros alfabetos como el chino, japons, coreano, ruso, rabe, etc. (en general los
alfabetos orientales), ahora un Byte tiene una longitud de 16 bits; en todo caso, para trminos de
definicin, cuando se hable de Byte en algn cdigo de informacin este representar a un carcter
o cdigo de control especfico.

Su notacin ser una B (b mayscula), as lo diferenciaremos de los bits.

Ejemplo:

La letra A (a mayscula), se representa por el byte 01000001 en el


cdigo ASCII.
La letra a (a minscula), se representa por el byte 01100001 en el
cdigo ASCII.
El smbolo , que significa marca registrada (Trade Mark), se representa
por el byte 0010000100100010 en el cdigo HTML 4.01.

Estos bytes para estos smbolos y letras se encuentran normalizados a travs del
estndar ISO 10646 e ISO 8879. Como podemos ver estos bytes tienen 8 y 16
bits de longitud.

- 183 -
Tras los pasos de un... Hacker

4.2.3 MLTIPLOS Y SUBMLTIPLOS


Como mencionamos anteriormente, en informtica nuestra unidad de
informacin es el Byte. Para cuantificar el espacio en unidades de informacin
que es necesario para el almacenamiento de millones de estos cdigos, la
comunidad informtica internacional ha decidido que existan otras medidas que
se asemejen a las definidas en el Sistema Internacional de unidades (S.I.), as
tendremos los mltiplos normalizados en informtica conocidos como: Kilo Byte,
Mega Byte, Giga Byte, Tera Byte, Peta Byte, Exa Byte, Zetta Byte e Yotta Byte.
En el caso de los submltiplos, tendremos como caso especial a los nibbles y bits,
aqu no se respeta para nada el sistema internacional de unidades y depende si
nuestro byte se lo ha codificado con 8, 16, 32 o 64 bits.

Tenemos entonces la siguiente tabla de equivalencias:

Medidas de la Informacin
(Para nuestra tabla usaremos Bytes de 8 bits)

Smbolo: Nombre: Equivalencia: Longitud: S.I.

YB Yottabyte 280 1208925819614629174706176 bytes. Aprox. 1024

ZB Zettabyte 270 1180591620717411303424 bytes. Aprox. 1021

EB Exabyte 260 1152921504606846976 bytes. Aprox. 1018

PB Petabyte 250 1125899906842624 bytes. Aprox. 1015

TB Terabyte 240 1099511627776 bytes. Aprox. 1012

GB Gigabyte 230 1073741824 bytes. Aprox. 109

MB Megabyte 220 1048576 bytes. Aprox. 106

KB Kilobyte 210 1024 bytes. Aprox. 103

B Byte 20 1 byte. 1=100

n nibble 2-1 0,5 bytes.

b bit. 2-3 0,125 bytes.

Tabla 2. Mltiplos y submltiplos del byte.

- 184 -
La informacin... Captulo IV.

4.2.4 CARACTERES (SMBOLOS)

Los Bytes, dependiendo del cdigo establecido, pueden representar a distintos


caracteres o smbolos de los alfabetos que el hombre ha definido para la
expresin de sus idiomas. As encontramos que en informtica estn
normalizados, por ejemplo: el cdigo EBCDIC (Extended Binary Coded Decimal
Interchange Code), el cdigo ASCII (American Standard Code for Information
Interchange), el cdigo HTML (HyperText Markup Language), UNICODE, etc.
Para cada una de estas tablas se han definido estndares y los podremos
consultar en las publicaciones de la ISO (International Organization for
Standardization).

Los caracteres no equivalen a byte, se representan por un byte determinado para


que el hombre pueda escribir informacin y la misma pueda ser almacenada,
procesada y distribuida segn el inters del emisor de dicha informacin.

4.2.5 CAMPO
Es la longitud de Bytes destinado a almacenar alguna informacin.

Los campos pueden ser de tamao fijo o variable, lo importante es que podemos
nombrarlos para que se agrupen de alguna forma y poder trabajar con ellos.
Ejemplo:

Podemos definir un campo que se llame NOMBRE, en este campo


podramos escribir NSTORMARROQUN.

Cuando organizamos la informacin en una gran BASE DE DATOS, los


campos juegan un papel importante que nos permiten localizar y
recuperar la misma.

- 185 -
Tras los pasos de un... Hacker

4.2.6 REGISTRO
Es la unin concatenada de campos que guardan alguna relacin entre s.

Ejemplo:

Podemos definir un registro que se llame CONTACTO y en el mismo,


podramos definir los campos NOMBRE, DIRECCIN y TELFONO.

4.2.7 ARCHIVO
Es la unin concatenada de registros que guardan alguna relacin entre s.

Ejemplo:

Podemos tener un archivo que se llame LIBRETA DE CONTACTOS, el


mismo que contenga la coleccin de registros denominados CONTACTO.

4.2.8 BASE DE DATOS


Es la coleccin de archivos que guardan alguna relacin entre s.

Ejemplo:

Podemos tener una base de datos que se llame REGISTRO LABORAL, la


misma que conste de los archivos o tablas: LIBRETA DE CONTACTOS,
FAMILIARES, TRABAJOS, etc.

- 186 -
La informacin... Captulo IV.

4.3 LOS DATOS

4.3.1 DEFINICIN

Dato es la representacin de un hecho o instruccin que adoptan una forma de


representacin convencional que permite un tratamiento o procesamiento
automtico por medio de una computadora. Podemos tomarlo como sinnimo de
informacin.

4.3.2 CLASES DE DATOS

Los datos, para su tratamiento informtico se los escribir directamente en un


programa de computacin como datos fijos, pero si queremos ingresarlos desde
el exterior del programa, los definimos como datos variables, los mismos que
tendrn algn nombre y a este dato con nombre, lo identificaremos simplemente
como variable.
Ejemplo:

Dato fijo 3,141592654

Dato variable NOTA


Podemos dividirlos en dos grandes grupos: los datos numricos y los datos no
numricos.

4.3.3 DATOS NUMRICOS


Son aquellos datos que permiten procesar nmeros y a partir de estos obtener
los resultados u otros datos.

Entre los datos numricos podemos diferenciar o definir los siguientes: datos
numricos enteros y datos numricos reales.

- 187 -
Tras los pasos de un... Hacker

A) DATOS NUMRICOS ENTEROS


Tambin conocidos como datos numricos de punto fijo, son aquellos que
no tienen parte fraccionaria, pueden ser: positivos, negativos y el cero. La
utilidad de este tipo de datos estriba en que ocupan menor cantidad de
memoria y la velocidad de procesarlos es mucho mayor que con otro tipo
de datos.
B) DATOS NUMRICOS REALES
Tambin conocidos como datos numricos de punto flotante, son aquellos
que representan los nmeros, tanto su parte entera como su parte
fraccionaria, en teora pueden representar un valor de la recta numrica
real, es decir de:

[- + ]
La magnitud de los datos numricos, tanto enteros como reales, depende de la
computadora utilizada, por lo general su rango suele ser [32768:32767] y
[2.9E39:1.7E38] respectivamente.

Adicionalmente, dependiendo del lenguaje de programacin en el que vayamos a


realizar algn clculo su rango variar conforme se defina, as por ejemplo:

Entero de 8 bits, estar en el rango [-128:127]


Entero de 8 bits sin signo, estar en el rango [0:255]
Entero de 16 bits, estar en el rango [-32768:32767]
Entero de 16 bits sin signo, estar en el rango [0:65535]
Entero de 32 bits, estar en el rango [-2147483648:2147483647]
Entero de 32 bits sin signo, estar en el rango [0:4294967297]

4.3.4 DATOS NONUMRICOS


Son aquellos datos que permiten tratar la informacin codificada, cuyo cdigo no
corresponde a los nmeros como tales; es decir, se tratan como smbolos
codificados y definidos en la computadora, en este tipo de datos podemos
identificar los siguientes: datos no numricos tipo hilera y datos no numricos
tipo lgico.

- 188 -
La informacin... Captulo IV.

A) DATOS NONUMRICOSTIPO HILERA


Tambin conocidos como strings o cadenas de caracteres, corresponden
a la representacin de todos los caracteres definidos en la computadora,
es decir, los dgitos del 0 al 9, las letras de la A a la Z, maysculas y
minsculas, signos de puntuacin, caracteres especiales y de control.
B) DATOS NONUMRICOSTIPOLGICO
Tambin conocidos como booleanos, corresponden a la representacin de
los estados lgicos falso o verdadero.

Nota del autor:


Todos los datos a su vez pueden ser constantes, es decir su valor o contenido no cambiar en el
transcurso de la ejecucin de un programa; y, variables, cuyo valor o contenido cambia de
acuerdo a la necesidad del momento.

4.4 LOS OPERADORES


Son los smbolos que representan la relacin o funcin a aplicar a datos para
obtener otros deseados como resultado.

Los operadores pueden ser: Aritmticos, de relacin y lgicos.


A) OPERADORESARITMTICOS
Son los smbolos que representan a las operaciones aritmticas bsicas,
es decir, la suma con el signo + (ms), la resta con el signo - (menos),
la multiplicacin con el signo * (asterisco) y la divisin con el signo /
(slash).
La computadora los efecta como ya lo estudiamos en captulos
anteriores y la exponenciacin con su signo ^

- 189 -
Tras los pasos de un... Hacker

B) OPERADORES DE RELACIN
Son smbolos que representan o definen relaciones de comparacin entre
expresiones.

En informtica estn definidos 6 operadores de relacin, los mismos que


son:
mayor que con su signo >, igual con su signo =, menor que con si
signo <, mayor o igual que con su signo >=, menor o igual que con
su signo <=; y, distinto de con su signo <>

Definida la expresin de relacin, la computadora genera dos posibles


salidas, es decir, falso o verdadero de acuerdo al grado de verdad que
tenga la expresin.

Este tipo de operadores relacionales se usan en la construccin de


estructuras de decisin en un programa.

C) OPERADORES LGICOS
Son palabras que definen las operaciones lgicas que deseamos efectuar,
encontramos definidos 3 operadores lgicos, estos son: NO (NOT), Y
(AND) y O (OR), estn regidos a las leyes del lgebra de Boole y la
computadora los efecta como tales.

4.5 FUNCIONES NORMALIZADAS EN INFORMTICA

Adems de los operadores definidos anteriormente, en informtica el


programador necesita para obtener los resultados deseados utilizar algunas
funciones matemticas que la mayora de lenguajes de programacin tienen ya
incorporadas. Las mismas que ahorran tiempo y esfuerzo de implementacin, es
decir, son funciones internas que generan la salida deseada al recibir la expresin
o dato de entrada (tambin conocido como parmetro o argumento de la
funcin), pueden ser usadas en la evaluacin de expresiones informticas para
realizar algn clculo especfico o representar alguna expresin algebraica o

- 190 -
La informacin... Captulo IV.

frmula a calcular.

Las funciones que disponemos en la mayora de las computadoras y lenguajes de


programacin son:

(ESPAOL)
FUNCIN FUNCIN
(INGLS) SIGNIFICADO
ABS(x) ABS(x) Valor absoluto de x.
ARCTAN(x) ATN(x) Calcula la funcin arcotangente
de x.
COS (x) COS(x) Calcula la funcin coseno de x.
EXP(x) EXP(x) Calcula la funcin exponencial ex
LOG(x) LOG(x) Calcula el logaritmo vulgar de x.
LN(x) LN(x) Calcula el logaritmo natural dex.
REDONDEA(x, y) ROUND(x, y) Redondearxa y decimales.
SEN(x) SIN(x) Calcula la funcin seno de x.
RCUAD(x) SQR(x) Calcula la raz cuadrada de x.
CENT(x) CINT(x) Devuelve la parte entera de x,
como valor entero.
ENT(x) INT(x) Devuelve la parte entera de x,
como valor real.
ALEAT(x) RND(x) Calcula un valor aleatorio
comprendido entre 0 y x.

Tabla 3. Funciones normalizadas en informtica.

En todos los casos, el argumento x ser un valor numrico.

Para las funciones trigonomtricas el valor de x ser expresado en radianes.

4.6 ERRORES
El tratamiento de errores es de gran importancia para el correcto funcionamiento
de un programa, el programador debe conocer cules? y de qu manera? puede
evitar que estos errores se produzcan.

Los errores pueden ser de 3 tipos (uno de los cuales la computadora nos ayuda a
localizar), estos son: errores de sintaxis, errores de uso y errores de lgica.

- 191 -
Tras los pasos de un... Hacker

A) ERRORES DE SINTAXIS
Se produce cuando escribimos incorrectamente una instruccin o la
expresin no se ajusta a la sintaxis del lenguaje utilizado.

Normalmente el lenguaje de programacin al momento de correr o


ejecutar el programa, nos alertar que este tipo de error se ha cometido.

B) ERRORES DE USO
Se produce cuando usamos incorrectamente el argumento de una
expresin matemtica o el tipo de dato ingresado a una funcin no
corresponde al tipo definido para su correcta evaluacin.
C) ERRORES DE LGICA
Se produce cuando implementamosincorrectamente los procesos de un
programa, obteniendo muchas veces resultados alejados de los deseados.

4.7 EXPRESIONES INFORMTICAS

Jerarqua de los operadores

Operador Tipo Jerarqua


F(x) Funcin. 1
() Parntesis. 2
^ Exponente.
Aritmtico.
3
*,/ Aritmtico.
Multiplicacin
Divisin. o 4

+, - Aritmtico.
5
Suma o resta.
=,=<,<,<>,>,>= Relacional. 5
No Lgica. 6
Y Lgica. 6
O Lgica. 7

Tabla 4. Jerarqua de los operadores.

Las expresiones informticas se forman al relacionar o enlazar datos, ya sean


estos numricos o no numricos, trataremos en este punto las expresiones

- 192 -
La informacin... Captulo IV.

numricas que casi siempre nos acarrean problemas en la ejecucin de los


programas.
Para poder evaluar e implementar una expresin informtica (numrica) de
acuerdo a nuestra necesidad e inteligible a la computadora, debemos respetar la
jerarqua de los operadores; es decir, en la forma que la computadora los
evaluar.
En la Tabla No. 4, mostramos dicha jerarqua por orden de prioridad.

EJERCICIOS RESUELTOS:

Dar solucin a los siguientes ejercicios:

I. De acuerdo a la definicin estudiada, a qu tipo de organizacin


corresponde los siguientes enunciados?
Ejemplo 46. FSICA;38; ALUMNOS

Solucin: Corresponde a la definicin de registro.

Ejemplo 47. Programa EDUCADOR.EXE

Solucin: Corresponde a la definicin de archivo.

Ejemplo 48. Libros de la Biblioteca Central.

Solucin: Corresponde a la definicin de Base de Datos.

II. De acuerdo a la definicin establecida, decir a qu tipo de dato


corresponden los siguientes enunciados?

- 193 -
Tras los pasos de un... Hacker

Ejemplo 49. 38

Solucin: Es un dato numrico tipo entero.

Ejemplo 50. 3,141592654...

Solucin: Es un dato numrico tipo real.

Ejemplo 51. AMIGO

Solucin: Es un dato no numrico tipo string, hilera o cadena.

Ejemplo 52. Verdadero

Solucin: Es un dato tipo lgico.

Ejemplo 53. A, B, C.

Solucin: Es un dato de tipo variable numrico.

Ejemplo 54. PI=3,1416

Solucin: Es un dato de tipo constante numrico.

III. Evaluar las siguientes expresiones. Si se producen errores, decir de


qu tipo? y cul solucin dara?

Ejemplo 55. (3*5+2^3* (8*SEN(0,5236)+83)^3+10)= ?

(3*5+2^3*(8*SEN(0,5236)+83)^3+10)= (3*5+2^3 *(8*(0,5)+83)^3+10)

= (3*5+2^3*(4+83)^3+10)

- 194 -
La informacin... Captulo IV.

= (3*5+2^3*(87) ^3+10)

= (3*5+8* 658503+10)

= (15+5268024 + 10)

= 5268049

Solucin: La expresin evaluada genera el valor 5268049.

Error: No existe.

Se define a la variable AREA como valor entero, la expresin se


Ejemplo 56.

calcula por: AREA = BASE*ALTURA, se ingresan los valores de 8,5 y 2 para


BASEYALTURA respectivamente.

AREA=(8.5) * (2)

AREA= 17,0

Solucin: La expresin evaluada genera el valor de 17,0

Error: Se produjo un error de uso, ya que definimos a AREA como entero y se


gener el valor real 17,0

La posible solucin que daramos sera, definir a la expresin como: AREA =


CENT (BASE*ALTURA)

Ejemplo 57. Tenemos la expresin: 31* 21 +85*SEN(0,7854*10^3

Se encontr un error de sintaxis, la expresin quedara as:

31 * 21 +85*SEN(0,7854) * 10 ^3

Ahora la evaluamos:
31 * 21 +85*SEN(0,7854) * 10 ^ 3 = 31 * 21 +85* 0,7071 *10^3

- 195 -
Tras los pasos de un.. Hacker

= 31 * 21 + 85 * 07071 * 1000

= 651 + 60103,5

= 60754,5

solucin: La expresin genera el valor 60754,5

Ejemplo 58. Se define la expresin: PROXIMO = N (N-1)*(N-2), se ingresa el


valor 36,3 para N. Evaluar la expresin.

PROXIMO = (363) * (363-1) * (363-2)

= (363) * (353) * (343)

= 43951,677

solucin: La expresin genera el valor de 43951,677


Error: No existe.

Ejemplo 59. Se define la expresin:

CAF = (-(5+CENTCZ+B)+3*ABS(Y+X)+25*RCUAD(0,56E+4)^3*SEN(1.0472)

Evaluar la expresin para Z=3, X=8, B=104 e Y=85,3


Procedimiento:

1. Se encontr un error de sintaxis, la expresin podra quedar as:

CAF= (-(5+CENT(Z+B)+3*ABS(Y+X)+25*(748331)^3*SEN(10472)))

2. Evaluamos la expresin:

CAF= (-(5+CENT(Z+B)+3*ABS(Y+X)+25*(748331)^3*SEN(10472)

= (-(5+CENT(3+8)+3*ABS(853+8)+25*(74,8331)^3+(0.866)))

- 196 -
La informacin... Captulo IV.

= (-(5+CENT(11)+3*ABS(93,3)+25*419064,8254+0,866))

= (-(5+11+3*93,3+25*419064,8254+0,866))

= (-(5+11+279,9+10476620,635+0,866))

= (-(10476919,401))

= (-10476919,401)
=-10476919,401

Solucin: La expresin genera el valor -10476919,401

Se define la variable ENTERO como valor entero y se asigna para su


Ejemplo 60.

clculo expresin:
la

ENTERO = REDONDEA(A+B^C+3/A+B/C*D^4)+C/D+A+B+C^D

Evaluar para:

a) A= 1, B = 3, C = 2, D = 5; y,
b) A=3, B = 2, C = 10, D = 13

Procedimiento:
a) Evaluamos la expresin para los valores dados:

ENTERO = REDONDEA(1+3^2+3/1+3/2*5^4)+2/5+1+3+2^5

= REDONDEA(1+9+3/1+3/2*625)+2/5+1+3+2^5

= REDONDEA(1+9+3+937.5)+2/5+1+3+2^5

= REDONDEA(950.5)+2/5+1+3+2^5
=951 +2/5+1+3+2^5

=951 +2/5 +1+3+32

- 197 -
Tras los pasos de un... Hacker

= 987,4

Solucin: La expresin genera el valor 987,4

Error: Se produjo un error de uso, porque el valor generado es real, corrigiendo


este error de uso, podremos tener la expresin as:

ENTERO= CENT(A+B^C+3/A+B/C*D^4)+C/D+A+B+C^13)
b) Evaluamos la expresin para los valores dados:

ENTERO= REDONDEA(3+2^10+3/3+2/10*13^4)+10/13+3+2+10^13

= REDONDEA(3+1024+3/3+2/10*25561)+10/13+3+2+10^13

= REDONDEA(3+1024+1+5712.2)+10/13+3+2+10^13

= REDONDEA(6739,2)+10/13+3+2+10^13

= 6739+10/13+3+2+1E+13

= 6739+0,7692+3+2+1E+13

= 1E+13

Solucin: La expresin genera el valor 1E+13

Error: Se produjo un error de uso, porque el valor generado es real. La nica


forma de evitar este error es definiendo a ENTERO como real.

- 198 -
La informacin... Captulo IV.

EJERCICIOS PROPUESTOS:

Dar solucin a los siguientes problemas:

I. De acuerdo a la definicin decir: A qu tipo de organizacin de datos


corresponden los siguientes enunciados?

Ejercicio 191. B, A, {

Ejercicio 192. 0, 1, 0, 1,1

Ejercicio 193. 10010110, 10111011

Ejercicio 194. CAFE

Ejercicio 195. CASA BLANCA

Ejercicio 196. Nmina del personal de una empresa.

Ejercicio 197. IAC E; Instituto para el Adelanto Cientfico de la Educacin

Ejercicio 198. Nstor Marroqun;

Ejercicio 199. 10101001, 011101011,001010110, 01010101, 10101101

Ejercicio 200. Ciudadanos del Ecuador.

II. De acuerdo a la definicin decir: A qu tipo de dato corresponden los


siguientes enunciados?

Ejercicio 201. 31

Ejercicio 202. 83,67

Ejercicio 203. 24,0

Ejercicio 204. 3134

Ejercicio 205. 1E+38

- 199 -
Tras los pasos de un... Hacker

Ejercicio 206. 1000

Ejercicio 207. 1E+3

Ejercicio 208. VERDAD

Ejercicio 209. Falso

Ejercicio 210. CALCULO

Ejercicio 211. E = 2,718281....

Ejercicio 212. AMERICA

Ejercicio 213. 21341,32E-4

Ejercicio 215.
214. 2133
3261E+3

Ejercicio 216. 1

Ejercicio 217. A = 3261

Ejercicio 218. 245

Ejercicio 219. MAMI

Ejercicio 220. Verdad

III.Evaluar las siguientes expresiones, si se producen errores decir: De qu


tipo? y Qu solucin dara para corregir el error?

Ejercicio 221.35+CENT(21/3+1^3,5+2/3)+10*3/5)=?

Ejercicio 222.3^2^3+8*2/4 = ?

Ejercicio 223.4^(3^2)+25*3*RCUAD(625)=?

Ejercicio 224. (8+3)*(25+6)/(31+1)*3 = ?

- 200 -
La informacin... Captulo IV.

Ejercicio 225.-45.27*2.65*2^6/12-(-131)*10.6/1E+3+3*1E-3=?

Ejercicio 226. SEN(0,6131)+85*COS(0,3161)+3^2=?

Ejercicio 227. INT(3/2)+0,5 = ?

Ejercicio 228. CENT(3/2)+1 = ?

Ejercicio 229.261+361+261^3+216^3+3161*3/1E+21 = ?

Ejercicio 230.31+3*5+(3+10^3+21/3*6)^2+2^3+3/1E+3=?

Se define la variable PERIMETRO como valor entero. La expresin se


Ejercicio 231.
calcula por: PERIMETRO = 31*L+L+L+2*L, se ingresa el valor 2,6 para L.
Encontrar el valor de PERIMETRO.
Se define la variable A32 como valor real, la expresin se calcula por:
Ejercicio 232.
A32 = A+B+C/3+D^E, se ingresan los valores 3, 2, 1, 5, 3 respectivamente a las
variables de la expresin. Encontrar el valor de A32.

Se define la variable DX como valor real, la expresin se calcula por: DX


Ejercicio 233.
= X^3+4*X+3+4/(X-2)+1/X; se ingresan los valores: a) 0, b) 31, c) 2, d) 1,3, para
X. Evaluar para cada caso la expresin que calcula DX.

Se define la variable TANX como valor real, la expresin se evala para


Ejercicio 234.
X expresada en radianes, como:
TANX=(X-X^3/3!+X^5/5!-X^7/7!+X^9/9!-X^11/11!)/(1-X^2/2!+X^4/4!-X^6/6!+X^8/8!-X^10/10!)

Evaluar para: a)X= 0,7854, b)X= 1,0472, c)X= 0.5236, d)X= 1.5708. Nota: n!
significa n factorial, el alumno debe investigar la funcin factorial.
Se define la variable RELX como valor real, la expresin se evala para
Ejercicio 235.
X como: RELX=(X+(X+1)*COS(X^3))/X-2), PARAX=0,6341, debiendo obtenerse
como valor generado el 1,6219.

Se define la variable ENI como valor entero, la expresin se evala para


Ejercicio 236.
A, B y C como: ENI = (A+B^C+(A^B^C), ajustar la expresin para que con valores
como 1, 3 y 5 generen las salidas a) 1025; y, b) 245.

Ejercicio 237. Se define la variable C como valor entero, la expresin se evala para A,

- 201 -
Tras los pasos de un... Hacker

X e Y como: C = A*SEN(X)/SEN(Y), tomando A, X e Y los valores de 872,5, 1,3962


y 1,0603 respectivamente. Calcular el valor de C.
Se define la variable RES como entero, la expresin se evala para CO,
Ejercicio 238.
IN y J, como RES= CO-ENT(IN-1)*LOG(10))*J, tomando las variables CO, IN y J los
valores 34,2 y 13 para que genere las salidas: a)429 y b)21

Ejercicio 239. Se define la variable AN como valor entero, la expresin que calcula AN
se evala para A, I, B, Ly J, como: AN = A+ENT((I+1)*(B^(L-J))+0,5), evaluar la
expresin para a)3, 2,1, 0,3; y, b) 32, 16, 2.1, 63,1 respectivamente.

Se define la variable LADO como valor real, la expresin que calcula


Ejercicio 240.
LADO se evala para A, B y C, como: LADO = A+SEN(B)^TAN(C), evaluar y ajustar
la expresin para: a) 32, 0,6131 y 0,6; b) 21, 1,32 y 2,1; y, c) para que genere con
los valores de 21, 0,61 y 0,3 el valor de 2,6.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de La Informacin y Funciones Estandarizadas en Informtica,
las notas han sido elaboradas en base a publicaciones de revistas especializadas y
la consulta de los siguientes textos:

- LGEBRAELEMENTAL MODERNA, M. O. Gonzlez J. D. Mancill, Editorial


KAPELUSZ, Publicado en Buenos Aires Argentina, 1.962.
- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las
Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- Programacin Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRCTICA DE LA INFORMTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid Espaa, Octubre de 1.986.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte Amrica, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim Repblica Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.

- 202 -
La informacin... Captulo IV.

- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,


Publicado en los Estados Unidos de Norte Amrica, 1.990.
- Programacin en C, Byron S. Gottfried, McGraw Hill / Interamericana de
Espaa S.A., Madrid Espaa, 1.991.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte Amrica, 1.993.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.
- The YOU Based LABORATORY, TI-CBL EXPLORATIONS in Science and
Mathematics, Margo L. Mankus Frank Wattenberg, Weber State
University 1.996, Publicado por True BASIC Inc., 1.996.
- Lets Program It in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte Amrica, 1.996.
- Programming for ENGINEERS in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte Amrica, 1.996.
- LGEBRA LINEAL CON APLICACIONES, George Nakos David Joyner,
International Thompson Editores, Publicado por International Thompson
Editores S.A., 1.999.
- True BASIC Bronze Edition, Users Guide, John G. Kemeny Thomas E.
Kurtz, True BASIC Inc. 2.001, Publicado en los Estados Unidos de Norte
Amrica, 2.001.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Polymorphous Encryption System, Nstor Marroqun Carrera, U.S. Patent
Application No. 20020191786 A1, Diciembre de 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 203 -
Tras los pasos de un... Hacker

- 204 -
INTRODUCCIN (V)

... Pasaba el tiempo, con gran sacrificio y dedicacin (miren que los temas que
hemos tratado, muchos estudiantes de informtica los investigan y aprenden en
los cursos introductorios de los primeros aos de la Universidad pero para un
tercer ao de colegio!... Les explico, en mi pas y en el tiempo en que curs la
secundaria, los periodos acadmicos estaban divididos en: 1 ao de preparatoria
(llamado cariosamente jardn de infantes), 6 aos de escuela primaria
(Escuela), 6 aos de escuela secundaria (Colegio) y finalmente la etapa
universitaria (Universidad)) a ms que como les contaba, la materia de
computacin nunca la recib en mi querido colegio y tampoco de lo que yo s, en
ningn colegio de mi pas se imparta esta materia oficialmente. Las Ciencias de
la Computacin estaban destinadas a estudiarse en la Universidad o en algn
posgrado.

Mi padre, al ver mi inters y el cierto dominio en cuanto al manejo de la


calculadora programable de mi to, al observar una promocin publicitaria de
mediados del ao de 1.986 de una empresa que venda computadoras, decide
comprarme la computadora que se publicitaba. A la semana de haber hecho las
consultas necesarias y tomado la decisin, nos fuimos a comprar la computadora,
se trataba de la Spectravideo SVI-738 Xpress (Fig. 43), una computadora
domstica que tena las siguientes caractersticas:

FIG. 43. COMPUTADORA SPECTRAVIDEO SVI-738.

Computadora: SVI 738.


Fabricante: Spectravideo.
Tipo: Computadora Domstica.
Origen: Hong Kong.

- 205 -
Tras los pasos de un... Hacker

Ao: 1985.
Microprocesador: ZilogZ80A.
Velocidad: 3.6 MHz
RAM: 64 KB. Expandible hasta 144 KB.
ROM: 32 KB.
VRAM: 16 KB.
Chip Grfico: Yamaha V9938, cumpla el estndar MSX2.
Modo Texto: Por defecto 40 caracteres x 24 lneas.
Bajo sistema operativo, 80 caracteres x 24 lneas. (CP/M, MSX-DOS)
Modo Grfico: 256 x 192 pixeles.
Colores: 16 colores.
Chip de Sonido: AY-3-8910.
Sonido: 3 Canales, 8 octavas.
Almacenamiento: Unidad de disquete de 3, Doble lado, Doble Densidad,720 KB.
Puertos E/S: Audio /Video, Interface a toca cinta, 2 Puertos para Joystick, Ranura
para Cartuchos, Sper Conector, 1 RS-232C, 1 Centronics, RGB,
CVBS/RF.
Teclado: Ingls, QWERTY.
Sistema Operativo: CP/MV2.2, MSX DOS V1.0.
Firmware: MSX BASICV1.0.

Como ya era costumbre ma, apenas abr la caja de empaque de tan preciado
regalo, lo primero que saqu fueron los manuales de usuario, ya que aprend a la
mala, que si uno no lee las instrucciones de uso a veces puede daar algn
dispositivo!; en fin, no me tom mucho tiempo en comprender para qu servan?
los famosos disquetes del CP/M V2.2 y el MSX - DOS V1.0 (Fig. 44) que
acompaaban a la computadora (la calculadora programable de mi to no vea
que necesite de algn programa externo para que funcione!), pero mi
computadora haca algunas cosas increbles que la calculadora no; por ejemplo,
de uno de los programas demostrativos que venan grabados en los disquetes, al
ejecutarlo presentaba a un astronauta que viajaba en su nave (todo estilo dibujo
animado y a colores!) en una travesa por el ciberespacio (trmino acuado en
1.982 por William Gibson (1.948-), autor de la novela NEUROMANTE, novela de
ciencia ficcin), publicitaba otros productos de la empresa, deca que tambin se
poda adquirir un procesador de palabras, una hoja de clculo, una agenda de
citas; en fin, tantas y tantas aplicaciones que nunca pens que una computadora
poda tener y qued ms fascinado con mi nuevo aparato; y, cmo no emular! los
grficos animados y la msica que tanto me haban impactado con la
presentacin del astronauta. Con esta motivacin, decid salir a las libreras
especializadas a comprar alguna gua de computacin, algn curso casero de
computacin, algn libro que me pueda ayudar a profundizar mis conocimientos
de programacin. Despus de tanto buscar y de ahorrar algn dinero que mis
padres me daban para comprar el refrigerio en el receso de la jornada escolar o

- 206 -
La historia... Introduccin (V).

de su aporte voluntario, pude adquirir mis primeras guas avanzadas de


programacin y libros de introduccin a las Ciencias de la Computacin. En mi
casa, mi madre (previsora como todas las madres!) se haba preocupado de
adquirir varias enciclopedias de ciencias para que sus hijos no tengan que salir a
las bibliotecas pblicas a realizar las famosas consultas (ahora sin duda que la
Internet nos ayuda a tener las mejores bibliotecas y fuentes de consulta en
nuestra misma casa); y, con el nuevo inquilino electrnico acaparando toda mi
atencin, tom el reto de programarlo y hacer con l, lo que ninguno de mis
compaeros del colegio soaba siquiera, presentar en las ferias de ciencias, la
explicacin con la animacin de los experimentos que se realizaba en los
diferentes laboratorios que desarrollbamos como parte del aprendizaje de las
materias de fsica y qumica. Es as, que pude desarrollar varios programas con
los cuales explicaba y simulaba los fenmenos fsicos estudiados, por ejemplo: La
simulacin de la trayectoria que toma un proyectil cuando es disparado por una
arma (el famoso tiro parablico), el principio que hace volar a los aviones (el
principio de Bernoulli) o el rayo lser, trabajos con los cuales, como les
comentaba, al ser expuestos en las ferias de ciencias, haca que me distinguiera
del resto de los expositores y a la vez cautivaba la atencin del pblico que
visitaba la feria.

FIG. 44. SISTEMAS OPERATIVOS DE LA SPECTRAVIDEO SVI-738.

Siguiendo con mis investigaciones de la computadora, escudriando las


direcciones de memoria de la ROM (Read Only Memory), me top con la
informacin de la empresa y de los autores de la versin del lenguaje de
programacin que vena incorporado en mi computadora, es decir, el famoso
MSX BASIC V1.0, as como la mencin que haca a que este lenguaje (el BASIC)
era la creacin de los cientficos John G. Kemeny y Thomas E. Kurtz, profesores

- 207 -
Tras los pasos de un... Hacker

del Dartmouth College, localizado en una pequea ciudad de los Estados Unidos
de Norte Amrica llamada Hanover, Estado de New Hampshire. Fue as que me
obsesion con poder contactarme con los autores del lenguaje que me haba
permitido realizar tantas cosas y decid enviarles a travs de mis amigos que
residan en Nueva York una carta de admiracin y que me informen cmo poda
hacer para aprender a programar de mejor manera mi computadora?

Al poco tiempo, recib una contestacin de la empresa que haban formado y que
podan guiarme con textos y con la versin del mejor lenguaje de programacin
para aprender a pensar como programador y as desarrollar de mejor forma los
programas que quisiera realizar; me llegaron varios libros de programacin y
algunas versiones originales con sus respectivas guas de uso del famoso BASIC,
pero esta vez en la versin actualizada de los creadores (las guas del lenguaje
las tengo autografiadas por Thomas E. Kurtz!), la versin conocida como True
BASIC (http://www.truebasic.com). Fruto de esta gua a distancia as como el
haber resuelto tantos y tantos ejercicios de programacin, empec a desarrollar
esta particular forma de pensar que tenemos los programadores, aparte de
haberme convertido prcticamente en un experto en el lenguaje de programacin
BASIC. (Y de algunas de sus versiones MSX BASIC, GW-BASIC, BASICA,
Turbo BASIC, Quick BASIC y True BASIC)

Ahora, justamente en este punto del relato de mi vida, voy a hacer una reflexin
sobre lo que significa el programar una computadora y la importancia de esta
labor:

Quiz la parte ms interesante, en cuanto a investigar y desarrollar


SOFTWARE (programas de computadora) sea la programacin, ya que
bajo este concepto se ha desenvuelto el desarrollo tecnolgico y cientfico
del hombre contemporneo. Analicemos a breves rasgos el mundo actual
que nos rodea; la llegada del hombre a la luna y los viajes espaciales no
hubieran sido posibles sin la ayuda de las computadoras, la construccin
de los grandes edificios, el control del trfico terrestre, martimo y areo
sera una labor infranqueable sin el auxilio de la gran capacidad de
clculo y almacenamiento que poseen las computadoras. As mismo,
existen hoy en da tantas labores productivas, mismas que son asistidas
por aplicativos especficos que hacen prcticamente una ms del personal
de apoyo productivo de las empresas a la computadora; as, con estos
pocos ejemplos podemos deducir que la computadora forma parte del

- 208 -
La historia... Introduccin (V).

ambiente en el cual desarrollamos nuestras actividades, pero qu hace


que sea tan necesaria esta mquina?

Aparte de su gran capacidad para almacenar informacin y rapidez para


localizarla, su elevada velocidad para realizar clculos o de su capacidad
para comunicarse con ciertos dispositivos, est una caracterstica que la
diferencia de las otras mquinas que ha creado el hombre, la de ser
programada, y es en este campo que el hombre toma un papel
protagnico, ya que es l, quien interviene en el proceso del desarrollo de
los programas que determinan las aplicaciones de la computadora.

Para este fin, en esta novel ciencia como es la computacin, algunos


cientficos informticos han creado tcnicas para ayudarnos a estructurar
un programa de computadora. Hasta fines de la dcada de los 60s
(1.960), se hablaba del Arte de Programar Computadoras hoy en da
se habla de Ingeniera de Software y de algunos aplicativos
denominados herramientas CASE (Computer Aided Software Engineering,
Ingeniera de Software asistida por computadora), pero todava no se ha
desarrollado un programa de computadora que haga pensar a una
mquina. Esta es la caracterstica que diferencia al hombre del resto de
animales o cosas que ha creado, es el programador quien piensa por la
mquina al desarrollar un programa especfico, en otras palabras,
determina la funcin de la computadora a cumplir. Hoy en da existen
computadoras que controlan el motor de un vehculo, computadoras que
controlan la lavadora de ropa, computadoras que nos ayudan a
comunicarnos (telfonos celulares), computadoras que supervisan los
signos vitales de un paciente en una sala de terapia intensiva, etc.

Acabada la reflexin y siguiendo con este texto, les invito a conocer algo de la
Arquitectura de una Computadora, con el exclusivo fin de familiarizarnos con la
forma en que est estructurada esta mquina, as como aprender el concepto de
los principales trminos tcnicos que se dan a cada parte de la misma y que en la
jerga informtica los damos por conocidos, en otras palabras, tener las bases
necesarias para empezar a desarrollar programas de computadora

- 209 -
Tras los pasos de un... Hacker

- 210 -
CAPTULO V. ARQUITECTURA DE UNA COMPUTADORA

Debemos a las ideas de John von Neumann, prcticamente que todas las
computadoras electrnicas estn diseadas y organizadas de la misma forma,
desde la ms bsica calculadora electrnica hasta las supercomputadoras, todas
estas mquinas responden a un diseo bsico.

Al diseo de una computadora y la forma de organizar sus dispositivos, los


ingenieros y cientficos que innovan da a da los mismos, la han bautizado como
la Arquitectura de una Computadora.

Podemos definir a una computadora como: La mquina electrnica creada por


el hombre, capaz de procesar informacin de una manera veloz, ordenada y
de forma automtica (no inteligente) segn lo indique un programa de
computadora.

As, podemos decir que esta mquina tiene dos componentes fundamentales:
a) Los programas que gobiernan la computadora; y,
b) Los dispositivos y elementos fsicos que la conforman.

Los informticos han bautizado a estos dos componentes con los nombres de
SOFTWARE y HARDWARE respectivamente.

A su vez, tanto el SOFTWARE como el HARDWARE, conforman segn su funcin,


algunos grupos.
El SOFTWARE segn su funcin y dentro de un modelo de abstraccin funcional,
lo podemos clasificar en tres grupos:

a) Programas de aplicacin,
b) Programas del sistema; y,
c) Programas de control de dispositivos.

Por su parte, los elementos funcionales del HARDWARE de todas las


computadoras los podemos clasificar en cinco grupos:
a) Dispositivos de memoria,

- 211 -
Tras los pasos de un... Hacker

b) El camino de datos (bus),


c) Dispositivo de control y proceso,
d) Dispositivos y unidades de entrada; y,
e) Dispositivos y unidades de salida.

Nota del autor:


Al respecto, muchos autores diferirn del criterio expuesto en este tratado, pero si investigamos
los variados esquemas que todos los diseadores de computadoras han publicado (en su mayora
son ingenieros electrnicos), nicamente esquematizan los bloques funcionales de la
computadora desde su punto de vista, es decir, de los dispositivos, circuitos y chips.
Cuando estos esquemas los observamos desde el punto de vista de los programadores, pensamos
que la programacin es un mundo aparte de la circuitera, cosa que, como vemos, no las
podemos separar. La computadora es un todo compuesto por el SOFTWARE y el
HARDWARE.

Este concepto lo podemos resumir en el siguiente diagrama:

ARQUITECTURA DE UNA COMPUTADORA

S
O Programas de aplicacin
F
T
W Programas del sistema
A
R
Programas de controlde dispositivos
E

Dispositivos de memoria
HARDWARE

Entrada Camino de datos Salida

Dispositivo de
control y proceso

- 212 -
Arquitectura de una computadora... Captulo V.

Muchos autores cuando se refieren al procesador o microprocesador se refieren


a lo que llamamos en nuestro esquema al dispositivo de control y proceso. Es
importante esta abstraccin en nuestro esquema porque actualmente los diseos
de algunas computadoras implican el multiprocesamiento o computadoras que
tienen procesadores paralelos, as, nuestro dispositivo de control y proceso en
vez de tener incorporado un solo microprocesador tendr los que el diseador de
la computadora haya incorporado.

A continuacin y sin entrar en mayores detalles vamos a estudiar cada una de


estas partes que conforman una computadora.

5.1 DISPOSITIVO DE CONTROL Y PROCESO


Como explicbamos en lneas anteriores, al referirnos a los dispositivos de
control y proceso, nos estamos refiriendo a lo que otros autores denominan la
Unidad Central de Proceso, Procesador o Microprocesador. A este dispositivo
se lo identifica con las siglas CPU (Central Processing Unit) y para nosotros, sin
discutir a profundidad ms detalles de diseo electrnico, constar de los
siguientes bloques funcionales:

a) Unidad de control o CU (Control Unit)


b) Unidad Aritmtico Lgica o ALU (Arithmetic Logic Unit).
c) Memoria para uso del dispositivo de control y proceso.
d) Interfaz de conexin con el camino de datos o bus.
e) Interfaz de conexin con los dispositivos de memoria.
f) Interfaz de conexin con los dispositivos de entrada y salida.
g) Reloj.

Esquema:

- 213 -
Tras los pasos de un... Hacker

Dispositivo de control y proceso

Interfaz con el
Interfaz con los Interfaz con los
Camino de datos
Dispositivos de Dispositivos de
o
Entrada y Salida Memoria
BUS

UNIDAD
CONTROL
UNIDAD DE ARITMTICO
Reloj
LGICA

Memoria del Dispositivo de Control y Proceso


Aloja el CONJUNTO DE INSTRUCCIONES, y
LOS REGISTROS PARA TRABAJO

Este esquema no profundiza en detalles tcnicos que las arquitecturas de los


procesadores CISC (Complex Instruction Set Computer, Computadora que
funciona con un Conjunto de Instrucciones Complejas) o RISC (Reduced
Instruction Set Computer, Computadora que funciona con un Conjunto de
Instrucciones Reducidas) tienen. Es ms general y solo detallamos los bloques
funcionales comunes de estas arquitecturas.

5.1.1 UNIDAD DE CONTROL


Es la parte del dispositivo de control y proceso (procesador o microprocesador),
que dirige todas las operaciones de la computadora en base a las instrucciones
del programa almacenado en el dispositivo de memoria conforme estn definidas
en su CONJUNTO DE INSTRUCCIONES. Sus funciones principales son:

a) Analizar e interpretar las instrucciones del programa.


b) Gobernar cada accin de la computadora por medio de rdenes.

- 214 -
Arquitectura de una computadora... Captulo V.

5.1.2 UNIDADARITMTICO LGICA


Es la parte del dispositivo de control y proceso (procesador o microprocesador),
que se encarga de realizar todas las operaciones aritmticas, lgicas y de
decisin.
Esta unidad se encarga de procesar los nmeros, sean estos definidos en punto
flotante o enteros y evaluar las expresiones lgicas (booleanas y de decisin).

Cuando se hacen clculos cuyos resultados no pueden ser almacenados en los


registros normalmente definidos para procesar los nmeros, esta unidad informa
a la unidad de control que se ha producido un error de desbordamiento o de
overflow.

5.1.3 MEMORIA PARA EL USO DEL DISPOSITIVO DE CONTROL Y


PROCESO
Es la parte del dispositivo de control y proceso (procesador o microprocesador),
donde estn definidas las rdenes a ejecutar (CONJUNTO DE INSTRUCCIONES)
por parte de la unidad de control conforme lo indique un programa almacenado
en el dispositivo de memoria.

Tambin tiene definidos algunos registros de memoria destinados al proceso de


los clculos hechos por la Unidad Aritmtico Lgica, conocidos como registros
del procesador o microprocesador.

5.1.4 INTERFAZ DE CONEXIN CON EL CAMINO DE DATOSOBUS


Es la parte del dispositivo de control y proceso (procesador o microprocesador),
que establece la comunicacin con los otros dispositivos que conforman la
computadora.
Su funcin es la de transportar los datos desde y hacia el dispositivo de control y
proceso a los dispositivos de memoria y dispositivos de entrada y salida.

- 215 -
Tras los pasos de un... Hacker

5.1.4.1 INTERFAZ DE CONEXIN CON LOS DISPOSITIVOS DE MEMORIA


Es el subsistema de la interfaz de conexin con el camino de datos que transporta
los datos desde y hacia el dispositivo de memoria de la computadora.

5.1.4.2 INTERFAZ DE CONEXIN CON LOS DISPOSITIVOS DE ENTRADA


YSALIDA
Es el subsistema de la interfaz de conexin con el camino de datos que transporta
los datos desde los dispositivos y unidades de entrada hasta el dispositivo de
control y proceso, as como una vez procesados los datos los distribuye hacia los
dispositivos y unidades de salida de la computadora.

5.1.5 RELOJ
Es el dispositivo que trabaja sincronizando las acciones del dispositivo de control
y proceso (procesador o microprocesador), determina la frecuencia con la que se
ejecutarn las instrucciones en el dispositivo de control y proceso, as como la
frecuencia con la que se transportarn los datos entre los diversos dispositivos.

La frecuencia de trabajo del reloj est medida en ciclos de reloj y a su vez


cuantificada en Hertzios.

Nota del autor:


Como habamos referido en las partes introductorias, las computadoras mencionadas por
ejemplo, deca que tenan una velocidad de 1,3 MHz, esto significa que el procesador poda
ejecutar 1300.000 instrucciones por segundo en el caso de la Tandy RadioShack TRS-80 Pocket
Computer II (Fig. 40), en el segundo caso la computadora SpectravideoSVI-738Xpress (Fig.
43) tena una velocidad de 3,6 MHz, es decir el Zilog Z80A poda ejecutar 3600.000
instrucciones por segundo, finalmente la Toshiba Satellite 2400 CDS, cuyo procesador Intel
Pentium IV que corre a 1,7 GHz; es decir, puede ejecutar 1.700000.000 instrucciones por
segundo.

La cantidad de instrucciones que un dispositivo de control y proceso puede ejecutar, depende de

- 216 -
Arquitectura de una computadora... Captulo V.

la cantidad de ncleos de procesamiento que se dispongan para este fin, as decamos que existe
el mltiple procesamiento o el procesamiento paralelo, con estos diseos, una computadora que
tenga una velocidad de 1,7GHz pero posea 4 ncleos de procesamiento, tendr una capacidad de
ejecutar 6.800000.000 de instrucciones por segundo, entonces no se hizo necesario tener un
reloj ms rpido para cuadruplicar el rendimiento.

5.2 EL CAMINO DE DATOS


Es la parte de la circuitera que conforme a su diseo, interconecta los diversos
dispositivos de entrada y salida con los dispositivos de memoria. Atravs de las
interfaces de conexin se comunica con el dispositivo de control y proceso.

Se lo identifica tambin como BUS DE DATOS, a travs de la historia de la


computacin los diseos han plasmado varios estndares como por ejemplo: el
BUS DE DATOS TIPO MICROCANAL, BUS DE DATOS TIPO PCI, BUS DE DATOS
TIPOUSB, etc.

La forma en que fluyen los datos, al igual como las instrucciones del dispositivo
de control y proceso, depende de los impulsos o ciclos que emite el reloj de la
computadora. No necesariamente esta velocidad es la misma a la que trabaja el
procesador.
Es comn que una computadora personal tenga varias velocidades de transporte
de datos a travs de los diferentes buses. Por ejemplo, el bus de datos de la
memoria puede trabajar a 400 MHz y el procesador a 1,6 GHz.

Nota del autor:


Dependiendo del diseo del dispositivo de control y proceso, as como su interfaz de conexin con
el camino de datos y este a su vez ya conectado al bus de datos (que puede ser de 1 bit, 2 bits, 4 bits,
8 bits, 16 bits, 20 bits, 32 bits, etc.), veremos en los circuitos impresos y algunos cables de conexin
las mltiples lneas paralelas que unen a los chips y dispositivos, esta circuitera de lneas
paralelas es el famoso bus de datos.

- 217 -
Tras los pasos de un... Hacker

5.3 DISPOSITIVOS DE MEMORIA


Son todos aquellos dispositivos que con variadas tecnologas de fabricacin,
sirven para almacenar informacin, la misma que puede ser almacenada de
manera permanente o temporal.

Por su uso se clasifican en:


a) Memorias ROM,

b) Memorias RAM; y,

c) Unidades de almacenamiento masivo.

Normalmente para el procesamiento y almacenamiento temporal de los datos a


travs de la interfaz de interconexin con los dispositivos de memoria, el
dispositivo de control y proceso, podr direccionar esta memoria de
almacenamiento temporal (RAM) conforme est estipulado en el diseo del bus
de datos para la memoria. Por ejemplo, si este bus es de 32 bits, podr
direccionar hasta un mximo de 4 GB.

5.3.1.MEMORIAS ROM
Son chips especiales donde se graba informacin que nunca puede ser borrada o
modificada por tanto nunca desaparece. Normalmente en este tipo de memorias
las computadoras tienen programadas las rutinas para proceso y control al ms
bajo nivel de todos los dispositivos.

Las siglas ROM (Read Only Memory) significan que la memoria es de solo lectura.
A esta familia de memorias las podemos clasificar en:
a) Memorias PROM. Son aquellas que pueden ser escritas una sola vez y a
partir de este momento el contenido de esta memoria no desaparecer. A
diferencia de las memorias ROM, estos chips inicialmente han sido
fabricados sin informacin y pueden ser escritos una sola vez. Las
memorias ROM son grabadas en el mismo proceso de fabricacin.

- 218 -
Arquitectura de una computadora... Captulo V.

Las siglas PROM (Programmable Read Only Memory) significan memoria


programable de solo lectura.
b) Memorias EPROM. Son aquellas que pueden ser escritas una sola vez y a
partir de este momento el contenido de esta memoria no desaparecer. A
diferencia de las memorias PROM, estos chips inicialmente mediante una
luz ultravioleta pueden ser vueltos a poner en cero todas su celdas con
opcin a ser reprogramados.

Las siglas EPROM (Erasable Programmable Read Only Memory) significan


memoria de solo lectura programable mediante impulsos elctricos.
c) Memorias EEPROM. Son aquellas que pueden ser sobrescritas ms de
una vez y su fin est orientado a guardar programas y rutinas
importantes de una computadora como por ejemplo las rutinas conocidas
como BIOS (Basic Input/Output System, sistema bsico de
entrada/salida).

Las siglas EEPROM (Electrically Erasable Programmable Read Only


Memory) significan memoria de solo lectura que se puede borrar
elctricamente.

5.3.2.MEMORIAS RAM
Son chips especiales donde, mientras est funcionando la computadora, se
almacena informacin, se procesa y se puede borrar en cualquier momento. Al
contrario de lo que sucede con las memorias ROM, cuando deja de funcionar la
computadora el contenido de la misma se pierde.

Las siglas RAM (Random Access Memory) significan memoria de acceso aleatorio.

Dependiendo del diseo del bus de datos de la memoria y del diseo del
dispositivo de control y proceso, la RAM es el espacio donde realmente los
programas se almacenan para su ejecucin, se almacenan los datos para su
proceso; y principalmente, se cargan los sistemas operativos y aplicativos.

- 219 -
Tras los pasos de un... Hacker

5.3.3.UNIDADES DE ALMACENAMIENTO MASIVO


Son dispositivos fabricados en chips o discos especiales, donde podemos grabar
informacin con fines de conservar su contenido y poder, dependiendo del
dispositivo intercambiar varios medios.
En la mayora de unidades de almacenamiento masivo se puede leer su contenido
de forma aleatoria, cambiar o eliminar la informacin contenida. Por esta
utilidad normalmente interactan con la memoria RAM para el procesamiento de
la informacin con el mtodo de virtualizacin de memoria y as de alguna
manera tener ms memoria para procesar informacin.

Las unidades de almacenamiento masivo pueden ser:


a) Unidades de disco. Estas unidades almacenan informacin en discos de
diversos materiales. En funcin del material pueden ser:

Unidades de disquete. Almacenan la informacin en disquetes


que vienen en varios formatos de capacidad. Los disquetes son
discos de plstico (flexible) recubiertos de un material
electromagntico que puede conservar y reproducir la
informacin grabada.

Unidades de disco duro. Almacenan la informacin en discos


que de igual manera que los disquetes estn recubiertos de un
material electromagntico, pero a diferencia de stos, son discos
de metal (rgidos o duros), por tal motivo pueden girar a mayor
velocidad y por tanto el acceso a sus datos es ms rpido que en
los disquetes. Tambin la capacidad de almacenamiento es
mucho mayor. Vienen fabricados en un arreglo de varios discos,
con sus respectivos dispositivos de lectura y escritura, lo que
determina su capacidad.

Unidades de discos compactos. Almacenan la informacin en


discos de un material acrlico recubierto por un espejo de metal,
el mismo que permite que un rayo lser pueda hacer el proceso de
lectura / escritura de la informacin. Su capacidad depende del
formato del disco a usar y de forma similar a las memorias,
existen los discos compactos de solo lectura (CD-ROM), los discos

- 220 -
Arquitectura de una computadora... Captulo V.

compactos de lectura / escritura (CD-RW). Por su tecnologa


pueden ser formato CD, DVD o discos pticos.

Unidades de memoria. Almacenan la informacin en chips


especiales que de manera similar a los disquetes, discos duros o
unidades de discos compactos pueden conservar la informacin
grabada. Su principal uso es el de compartir la informacin
grabada en diferentes mquinas, as por ejemplo, existen las
tarjetas SD, que graban las fotografas tomadas con una cmara
fotogrfica digital y simplemente extrayendo este medio se lo
puede ingresar a una computadora para poder reproducir las
fotografas tomadas.

b) Unidades de cinta. Almacenan la informacin en cintas


electromagnticas, su uso est encaminado al archivo y conservacin de
la misma con fines de respaldo. La escritura y lectura de la informacin
en este tipo de dispositivos es de manera secuencial.

5.4 DISPOSITIVOS Y UNIDADES DE ENTRADA


Son todos aquellos dispositivos que con variadas tecnologas de fabricacin,
sirven para ingresar informacin a una computadora.

Dependiendo del uso al que est destinada la computadora, los dispositivos y


unidades de entrada pueden ser de lo ms variados, por ejemplo:

Una computadora que est encaminada al uso de un periodista, tendr como


principales unidades de entrada al teclado, al escner, a la tarjeta
digitalizadora de sonido y al ratn.
En un automvil la computadora que monitorea y controla el
funcionamiento del motor, tendr como dispositivos de entrada
principalmente a sensores especiales que ingresarn informacin relativa a
la presin del aceite, la cantidad de combustible, la temperatura, la cantidad
de revoluciones por minuto a la que gira el cigeal del motor, la cantidad de
gases producidos de la combustin y la distancia recorrida.

- 221 -
Tras los pasos de un... Hacker

Una computadora para control de calidad en una empacadora, tendr una


unidad de entrada especial que se conectar a las balanzas electrnicas que
le enviarn la informacin del peso de cada paquete, as como sensores
especiales que le enviarn las dimensiones de los mismos, con estos datos
puede eliminar los productos que no cumplen con el peso y volumen
especificado.

5.5 DISPOSITIVOS Y UNIDADES DE SALIDA


Son todos aquellos dispositivos que con variadas tecnologas de fabricacin,
sirven para la visualizacin, publicacin y distribucin de los datos procesados.

Dependiendo de la funcin a la que est orientada la computadora, los


dispositivos y unidades de salida pueden ser, de igual forma que las unidades de
entrada, de lo ms variadas. Ejemplos:

Una computadora que est encaminada al uso de un periodista. Las


principales unidades de salida sern: un monitor a color de 20 de alta
resolucin y una impresora a color de inyeccin a tinta o lser.

En un automvil, la computadora que monitorea y controla el


funcionamiento del motor, tendr como dispositivos de salida
principalmente una pantalla monocromtica donde nos informar del estado
del motor, as como dispositivos especiales que impedirn el encendido del
motor si determina que algo est fallando.

Una computadora para control de calidad en una empacadora, tendr una


unidad de salida especial que desviar el paquete que no cumpla con las
especificaciones de peso y volumen requeridas a la zona de reciclaje.

5.6 PROGRAMAS DE CONTROL DE DISPOSITIVOS

A este tipo de SOFTWARE, pertenecen todas las implementaciones que al ms


bajo nivel permiten la operacin de los distintos dispositivos de una

- 222 -
Arquitectura de una computadora... Captulo V.

computadora, aqu est la programacin del CONJUNTO DE INSTRUCCIONES del


microprocesador, las rutinas de control de los discos duros, las rutinas que
controlan el funcionamiento de una impresora, etc.
Todas estas implementaciones vendrn grabadas en chips tipo ROM, los mismos
que con las interfaces apropiadas se interconectan con el dispositivo de control y
proceso de la computadora, estableciendo as el primer nivel de instrucciones
que un programador puede invocar para programar una computadora.

5.7 PROGRAMAS DEL SISTEMA

A este tipo de SOFTWARE, pertenecen los lenguajes ensambladores, los


compiladores, las rutinas de manejo bsico de los dispositivos de entrada y salida
(conocidas como rutinas de la ROMBIOS), las implementaciones de los Sistemas
Operativos y algunos programas especiales que vienen grabados en chips tipo
EPROM que son parte de algunas tarjetas especiales a los que la industria ha
puesto el nombre de FIRMWARE (Ejemplo: GPS que puede instalarse en una
computadora, un vdeo juego al que se le puede conectar toda una serie de
dispositivos que hacen la simulacin de un polgono de tiro, etc.).

5.8 PROGRAMAS DE APLICACIN


En este tipo de SOFTWARE encontraremos las implementaciones de las ms
variadas aplicaciones que podemos dar a la computadora. Este es el software que
comnmente utilizan los usuarios finales de los sistemas, en este grupo tenemos
por ejemplo: los procesadores de palabras, las hojas de clculo, los gestores
documentales, los motores de bases de datos, los juegos de computadora, etc.

Nota del autor:


Estos aplicativos, necesariamente funcionan bajo un sistema operativo especfico, teniendo por
tanto, versiones del mismo producto para uno u otro.

Los sistemas operativos en cambio dependen de la forma de trabajar de las computadoras y de la


arquitectura que tenga su procesador o su dispositivo de control y proceso (responde a una

- 223 -
Tras los pasos de un... Hacker

arquitectura CISC o RISC) y de las interfaces programadas para el control del resto de
dispositivos.

Las rutinas bsicas de control dependen exclusivamente del diseo del fabricante, dependiendo
de los protocolos y estndares de la industria, estas se podrn integrar a la capa bsica de
instrucciones y funciones de la computadora.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Arquitectura de una computadora, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las


Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- INTEGRATED ELECTRONICS: Analog and Digital Circuits and Systems,
Jacob Millman Chirstos Halkias, McGraw Hill and Electronic
Engineering Series / Kogakusha Ltd., Publicado en los Estados Unidos de
Norte Amrica, 1.972.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Manual del Microprocesador 80386, Chris H. PappasWilliam H. Murray,
III, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
1.983.
- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot
Colombia, 1.984.
- CONEXIONES EN EL IBM PC/XT/AT, Teora y prctica de perifricos,
comunicaciones y configuraciones, M. D. Seyer, Red Editorial
Iberoamericana REI Andes Ltda., Prentice Hall Inc., 1.985.
- CP/M Users Guide, Digital Research 1.982, SPECTRAVIDEO
INTERNATIONAL LTD., Hong Kong, 1.985.
- MSX BASIC Reference Manual, SPECTRAVIDEO INTERNATIONAL LTD.,
Hong Kong, 1.985.
- MSX DISK BASIC Reference Manual, SPECTRAVIDEO INTERNATIONAL
LTD., Hong Kong, 1.985.
- MSX DOS Disk Operating System, SPECTRAVIDEO INTERNATIONAL
LTD., Hong Kong, 1.985.

- 224 -
Arquitectura de una computadora... Captulo V.

- Xpress SVI738 Home Computer Users Manual, SPECTRAVIDEO


INTERNATIONAL LTD., Hong Kong, 1.985.
- 80386 Gua del programador y Manual de referencia, Intel Corporation
1.986, Ediciones Anaya Multimedia S.A., Septiembre de 1.989.
- ABIOS for IBM PS/2 Computers and Compatibles, Phoenix Technologies
Ltd., AddisonWesley Publishing Company Inc., Junio de 1.989.
- Introduccin al 80386, Intel Corporation 1.985, Ediciones Anaya
Multimedia S.A., 1.989.
- Microsoft MASM, Assembly Language Development System Version 6.1.,
Microsoft Corporation 1.987, 1.991, 1.992 U.S. Patent No. 004955066,
Estados Unidos de Norte Amrica, 1.992.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.
- Inside Windows NT, Helen Custer, Microsoft Press 1.993, Publicado en
los Estados Unidos de Norte Amrica, 1.993.
- Microsoft Windows 3.1 Users Guide, Microsoft Corporation 1.985 -
1.993, U.S. Patent No. 004974159, Estados Unidos de Norte Amrica,
1.993.
- Advanced Windows NT, The Developers Guide to the Win32 Application
Programming Interface, Jeffrey Richter, Microsoft Press 1.994,
Publicado en los Estados Unidos de Norte Amrica, 1.994.
- Microsoft MS-DOS 6.21 Users Guide, Microsoft Corporation 1.981 -
1.994, U.S. Patent No. 004955066 y U.S. Patent No. 005109433, Estados
Unidos de Norte Amrica, 1.994.
- Organizacin y diseo de computadores La interfaz hardware /
software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- System BIOS for IBM PCs, Compatibles, and EISA Computers, Phoenix
Technologies Ltd., AddisonWesley Publishing Company Inc., Noviembre
de 1.995.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Polymorphous Encryption System, Nstor Marroqun Carrera, U.S. Patent
Application No. 20020191786 A1, Diciembre de 2.002.

- 225 -
Tras los pasos de un... Hacker

- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,


Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 226 -
INTRODUCCIN (VI)

Formado de manera autodidacta y empricamente desarrollando programas,


me planteaba problemas cada vez ms complicados a resolver, por tanto, los
programas resultantes de mis ideas eran ms sofisticados. Pero a medida que
aumentaba la cantidad de informacin a procesar o la complejidad de los
procesos implementados, tambin aumentaba el tiempo de trabajo de mi
computadora y muchas veces me encontraba limitado por la memoria que
dispona para procesar esta informacin. Planteado el problema, de alguna
manera haba que optimizar los programas que ya funcionaban. Tena que
reprogramar las aplicaciones para que hagan la tarea de una forma ms rpida o
para procesar ms informacin de la que se puede manejar en la memoria RAM.

A mi alcance tuve la gua de grandes personajes de la informtica mundial como


fueron y son los profesores John G. Kemeny y Thomas E. Kurtz, quienes con su
trabajo didctico, como insignes educadores que han formado a miles de
programadores desde el ao de 1.964 cuando inventaron el BASIC, lograron que
mis conocimientos sobre programacin crecieran con la lectura y estudio de sus
libros y manuales tcnicos. Conceptos y procedimientos que fueran reforzados
por cuenta propia con el anlisis y estudio que me llevara varios aos de la obra
titulada The Art of Computer Programming del profesor Donald E. Knuth
(1.938-), que a los programadores dota de conocimientos tericos, justamente
sobre la Teora de Algoritmos. Con la explicacin y anlisis de los mtodos y
procedimientos conocidos hasta ese entonces, mi reto personal fue desarrollarlos
e implementarlos en BASIC (ya que Knuth los explica en un lenguaje de
programacin terico al que lo llama MIX) para comprobar que funcionaban
conforme a la explicacin.
Con esta enciclopedia en el arte de programar computadoras (obra publicada
en Estados Unidos de Norte Amrica en el ao de 1.967 por la editora
Addison-Wesley, original del profesor Donald E. Knuth catedrtico de la
Universidad de Stanford. Adquir en 1.987, los tomos 1 y 3 traducidos al espaol
e impresos por la editorial Revert de Espaa en 1.985, la serie completa la
consegu en ingls varios aos despus) al revisar con ms profundidad estos
conceptos y procedimientos (que ya los conoca o por lo menos los intua) pude
entender plenamente el por qu? y el cmo funcionan estos algoritmos?

- 227 -
Tras los pasos de un... Hacker

Entend conceptos importantes como: Algoritmos, estructuras de programacin,


rutinas (corutinas), subrutinas, funciones, etc. Algunos procedimientos
matemticos como: el clculo del MCD (Mximo Comn Divisor), el mcm (mnimo
comn mltiplo), el mtodo para obtener la raz cuadrada, el clculo del valor
del nmero pi, las funciones trigonomtricas, etc.
Con ms elementos de juicio y conocimiento, pude analizar cmo se fueron
mejorando los algoritmos? para que de una forma eficiente se pueda llevar a cabo
alguna tarea especfica, por ejemplo: la evolucin de los mtodos de clasificacin
y bsqueda, mtodos de bsqueda combinatoria, mtodos iterativos y recursivos,
etc. (De mi experiencia, les puedo sugerir que consulten esta serie de libros como
una buena fuente de conocimientos tericos de lo que constituye la Teora de
Algoritmos o simplemente para mejorar sus capacidades como programadores.)
Estas obras marcaron el inicio de mi carrera como programador y por sobre todo
con la maestra que tienen los grandes, pudieron hacer que aprenda de forma
eficiente todo ese conocimiento y lo ponga en prctica.

Algunos de mis compaeros de aula del colegio y muchos jvenes de otros cursos,
al ver que poda programar mi computadora, me pidieron que les explique algo
de este conocimiento que ya lo dominaba. Por vez primera, entenda el reto que
tiene un profesor, cuando trata de hacer que alguien que no sabe, aprenda algo;
as que, para satisfacer este requerimiento de mis amigos, realic una primera
gua de programacin BASIC, que la repart en fotocopias para que se enteren de
la computacin e intenten aprender a programar (inicios del ao de 1.989).

La tarea no era nada fcil, ya que mis compaeros no tenan computadora, as


que no servira de mucho que en papel desarrollen los algoritmos propuestos.

Los lectores que quieran aprender a programar, tendrn que tener una
computadora e instalada la copia del True BASIC que les haba mencionado
adquieran (puede servir tambin cualquier lenguaje de programacin con su
respectiva gua de uso).

Precisamente traigo a colacin un viejo proverbio chino que dice:


Oigo y olvido,
veo y recuerdo,
hago y entiendo

- 228 -
La historia... Introduccin (VI).

Y es precisamente, la ltima proposicin la que normalmente no efectuamos, la


que, por el objetivo que perseguimos es la ms importante.

Incluyo otro parntesis en el relato de mi vida que me parece importante, desde


el lado constructivo de la sana crtica, voy a reflexionar sobre la calidad del
conocimiento que se imparte en los centros destinados precisamente a formar
programadores. Esta realidad de mi pas, la he visto lamentablemente repetida
en los aproximadamente 25 aos que llevo investigando y desarrollando
programas de computadora en nuestros pases (Latinoamrica):
En las naciones que tradicionalmente estn a la vanguardia tecnolgica,
las empresas que desarrollan o mantienen software, cotizan mejor a los
programadores que tienen fundamentos tericos para la instrumentacin
de programas, porque parece ser que el conocimiento que tenan los
pioneros de la computacin, por el facilismo que nos presta la misma
computadora poco a poco se est perdiendo (Teora de Algoritmos).

Esta situacin se ve empeorada porque desde el punto de vista de


nuestros dirigentes, ya que supongo, hacen el siguiente razonamiento:
Como nuestros pases no producen tecnologa informtica, entonces
para qu ensear a pensar a nuestros programadores? y seguramente
se contestan: Solo deben ser usuarios de los productos que nos vienen de
los pases del primer mundo, de todos modos, si ya estn hechos para
qu volver a hacerlos?. Este perverso pensamiento limita y en mucho las
ganas que tienen muchos jvenes de aprender, con el transcurrir del
tiempo, esta poltica educativa hace que se conformen con lo que el status
quo manda y requiere.

Esta realidad la fundamento, palabras ms, palabras menos, de una


conversacin que dej marcada en mi vida una entrevista, de las varias
que realic a potenciales programadores para un proyecto que estaba
desarrollando en una de las empresas que form. As recuerdo, que como
muestra para que el aspirante pueda optar por el puesto ofrecido, le peda
que en alguno de los lenguajes de programacin que en su hoja de vida
deca dominaba, implementara un sumador (pero sin usar ninguno de los
operadores aritmticos tradicionales, es decir, cree su propia funcin
para sumar), el mismo que tendra que sumar dos nmeros enteros;

- 229 -
Tras los pasos de un... Hacker

pareca algo trivial, pero a pesar que el postulante ya era un profesional


graduado de una prestigiosa universidad del pas y tena una maestra en
ciencias de la computacin y otra en administracin de negocios.
Simplemente se mof de mi requerimiento y me dijo que pensaba que en
la empresa se iba a topar con profesionales como l y que volvera en dos
o tres das con el programa que peda, hasta la fecha de publicacin de
este libro, estoy esperando que el aspirante regrese.

Entrevist a muchos programadores y de igual forma, algunos


sinceramente me decan que no podan, otros que ya regresaban. Pasaron
como seis meses hasta que desistimos de contratar profesionales
graduados y empezamos a dar la oportunidad a aficionados a la
programacin, con sorpresa encontr que esta mano de obra estaba
mejor calificada (muchos de ellos son verdaderos Hackers) y con ellos
pude lanzar algunos productos que tuvieron xito en el mercado.

De estas entrevistas me surgieron las siguientes interrogantes: Es acaso


la calidad de los instructores en esta materia la que se ve reflejada en los
que fueron sus alumnos? o simplemente el nivel tecnolgico en el que
nos vemos envueltos es el de simples consumidores, que nos
conformamos con lo que nos dicen que hagamos, sin reflexionar y tratar
de verificar si lo que nos dicen es correcto o es errado?

Bueno, dejo al lector el responder estas preguntas y se forme su propio criterio al


respecto. Ahora para retomar el relato de mi vida y poder ensearles algunos de
los fundamentos de la programacin, revisemos algunos conceptos bsicos

- 230 -
CAPTULO VI. FUNDAMENTOS DE LA PROGRAMACIN

Para entender completamente todos y cada uno de los algoritmos que vamos a
estudiar y desarrollar, as como los que pedimos resolver como ejercicios
propuestos es necesario tener claros los conceptos que ya los discutimos y
tratamos en captulos anteriores.
Para realizar este estudio de manera formal empecemos definiendo el concepto
de algoritmo.

6.1 ALGORITMO

La palabra ALGORITMO, se deriva de ALGORISMO que significa originalmente:


Proceso de hacer aritmtica usando guarismos arbigos, cuyo nombre hace
relacin al de un famoso matemtico persa llamado Abu Jafar ibn Ms
al-Khowrizm (vivi aproximadamente por el ao 825) que quiere decir
traducido literalmente Padre de Jafar, Mohammed, hijo de Moiss, natural de
Khowrizm quien escribi algunas obras de carcter matemtico, entre ellas el
libro Kitab al jabrwal-muqabala (Reglas de restauracin y reduccin).

Al transcurrir el tiempo el significado original fue corrompindose y a veces se


confunda con el concepto de aritmtica, es Gottfried Wilhelm Leibnitz (1.646
1.716) quien utiliza la frase latina ALGORITHMUS INFINITESIMALIS, que
significa maneras de calcular con cantidades infinitamente pequeas, de la cual
podemos desprender la palabra algoritmo, en esa poca se la relacionaba
comnmente con el ALGORITMO DE EUCLIDES (proceso para hallar el mximo
comn divisor de dos nmeros que aparece en los Elementos de Euclides).

El significado moderno de algoritmo es similar al de receta, proceso, mtodo,


tcnica, procedimiento, etc., pero para los informticos es: Procedimiento, que
mediante la utilizacin de un conjunto finito de reglas dadas a una secuencia
de operaciones, permiten la solucin de un problema, cuya definicin es

- 231 -
Tras los pasos de un... Hacker

codificable en cualquier lenguaje de programacin, dando como resultado un


programa.

6.2CARACTERSTICAS

Los algoritmos tienen las siguientes caractersticas:

1. Finitud.
2. Definibilidad.
3. Entrada.
4. Salida.
5. Efectividad.

6.2.1 FINITUD
Un algoritmo tiene un nmero finito de pasos. Un procedimiento que tiene todas
las caractersticas de un algoritmo salvo que posiblemente falle en la finitud
puede ser llamado MTODO DE CLCULO, por ejemplo: El mtodo para obtener
la raz cuadrada de un nmero, el mtodo para calcular el nmero PI, entre otros.

6.2.2 DEFINIBILIDAD
Todo paso que se sigue en un algoritmo debe ser definido de modo preciso, no
debe darse posibilidad a la ambigedad. Por esta caracterstica los lenguajes de
programacin son definidos de manera formal para la codificacin de algoritmos
(programas).

6.2.3 ENTRADA
Un algoritmo debe tener cero o ms entradas. La entrada son los datos con los
que se inicia un algoritmo para que se procesen conforme est definido en el
algoritmo.
Estas entradas deben de estar perfectamente identificadas y definidas.

- 232 -
Fundamentos de la programacin... Captulo VI.

6.2.4 SALIDA
Un algoritmo tendr una o ms salidas. La salida son los resultados del proceso
de la informacin en la ejecucin del algoritmo.

Las salidas tienen una relacin muy estrecha con las entradas, casi siempre son
de la misma especie o tipo de datos.
Por ejemplo: Para obtener la raz cuadrada, se tiene una entrada numrica real
positiva y las salidas son dos nmeros reales, uno positivo y otro negativo.

6.2.5 EFECTIVIDAD
Todo algoritmo tiene que ser efectivo, que llegue al objetivo deseado, esto quiere
decir que los algoritmos tienen que estar compuestos de rdenes simples capaces
de ser ejecutadas con facilidad y tratar de controlar en los procedimientos que las
operaciones que pueden acarrear error, este no se produzca.
Por ejemplo: Evitar que se intente calcular una divisin para cero.

6.3 TEOREMA DEL PROGRAMA ESTRUCTURADO


Con las ideas publicadas en 1.946 por John von Neumann y del denominado
Teorema de la forma normal de Kleene, dos cientficos informticos llamados
Corrado Bhm (1.923-) y Giuseppe Jacopini quienes en 1.966 publicaron su
trabajo conocido como Teorema del programa estructurado, el mismo que
manifiesta: Todo procedimiento computable (algoritmo) puede ser
implementado en un lenguaje de programacin que combine el uso de tres
estructuras bsicas de control.

Las estructuras a las que se refiere el conocido Teorema de Bhm Jacopini son:
1) Estructuras secuenciales. (Ejecutar primero una instruccin y luego
otra).

- 233 -
Tras los pasos de un... Hacker

2) Estructuras de decisin. (Ejecutar una instruccin, funcin o subrutina


dependiente de una condicin).
3) Estructuras iterativas. (Ejecutar una instruccin, funcin o subrutina de
forma repetitiva hasta que se satisfaga una condicin determinada).

Haciendo un poco de historia, recordemos que en 1.964 se inventa el BASIC, este


a su vez basado en el ALGOL y el FORTRAN. El estilo de programacin hasta ese
entonces conocido era un montn de instrucciones organizadas para
efectivamente solucionar un problema especfico, pero nicamente el
programador que concibi el algoritmo poda entender lo que estaba haciendo
(muy parecido a lo que sucede cuando analizamos la implementacin de alguna
funcin, subrutina o programa en lenguaje mquina); ya que, con el uso de una
instruccin particular llamada GOTO, se poda en cualquier momento de la
ejecucin del algoritmo romper la lgica del programa con la consiguiente
dificultad de entender el por qu y para qu? de esta ruptura abrupta de la
secuencia de instrucciones definidas (haciendo muy difcil mantener el cdigo
fuente de estas implementaciones, si se haba tomado la precaucin de
documentar cada paso lgico del programa este problema se minimizaba).

Niklaus Wirth al presentar en 1.970 su propuesta de lenguaje de programacin,


al que lo denomin PASCAL, confirma que es posible implementar cualquier
programa en la forma como lo haban demostrado Bhm y Jacopini en 1.966. A
partir de este trabajo se crea el estilo de programacin que lo conocemos como
PROGRAMACIN ESTRUCTURADA, que entre otras ventajas podemos resaltar
las siguientes:

1) Los programas son ms fciles de entender, ya que pueden ser ledos de


forma secuencial, sin necesidad de hacer el seguimiento a los saltos de
lnea (GOTO) dentro de los bloques de cdigo para entender la lgica.
2) La estructura del programa es clara, puesto que las instrucciones estn
ms ligadas o relacionadas entre s.

3) Reduccin del esfuerzo en las pruebas. El seguimiento de los fallos o


errores del programa (trace and debugging) se facilita debido a la
estructura ms visible, por lo que los errores se pueden detectar y
corregir ms fcilmente.

- 234 -
Fundamentos de la programacin... Captulo VI.

4) Reduccin de los costos de mantenimiento de los programas.

5) Programas ms sencillos y ms rpidos (ya que es ms fcil su


optimizacin).
6) Los bloques de cdigo son auto explicativos, lo que facilita la
documentacin.
7) Un programa escrito de acuerdo a estos principios no solamente tendr
una mejor estructura sino tambin una excelente presentacin.

Por el contrario podemos decir que el estilo de programacin estructurada


tiene la siguiente desventaja:
El programa resultante, dependiendo del problema que intentamos
resolver, puede hacerse demasiado grande y de esta forma resultar
problemtico su manejo (desde el punto de vista humano, para su
mantenimiento). Este ligero inconveniente lo resolvemos, dividiendo al
programa en mdulos funcionales (a esta divisin se la conoce como
programacin modular), interdependientes entre si y compilados por
separado. (Cuando realizamos el mantenimiento o actualizacin de
alguna versin del programa en diferentes plataformas o sistemas
operativos, es recomendable para su correcto funcionamiento que cada
vez se recompilen los mdulos por separado).

El uso cotidiano de estas tcnicas de programacin, hacen que utilicemos tanto


las tcnicas de programacin estructurada como las de programacin modular de
forma conjunta; por lo tanto, cuando hablemos de la programacin
estructurada, implcitamente se est considerando tambin las tcnicas de
modularizacin de un programa.
Existen otros estilos de programacin derivados de la programacin
estructurada y son conocidos como programacin por capas y la
programacin orientada a objetos.
El objetivo de este texto es el de ensear a programar (pensar como
programador) e implementaremos nuestros programas haciendo uso de las
tcnicas de la programacin estructurada. Estas implementaciones las haremos
utilizando el BASIC estructurado, usaremos algunas de las instrucciones que

- 235 -
Tras los pasos de un... Hacker

estn definidas en los estndares ANSI para el BASIC, para esto elegimos la
versin Bronze del Lenguaje de Programacin True BASIC.
(www.truebasic.com)

Muchos se harn la pregunta: Por qu no PASCAL o C?

Bueno, tengo dos principales razones para decirles que es mejor empezar con el
True BASICel hermoso arte de programar computadoras, a saber:
1) Una computadora puede trabajar con varios tipos de datos, tanto PASCAL
como C, para que las rutinas implementadas funcionen correctamente,
llevan implcito que el programador sabe el correcto uso y definicin del
tipo de datos, por el contrario con True BASIC, solamente estn
definidos dos tipos de datos para el uso de las variables, los numricos y
los de cadena o strings, facilitando que el alumno compruebe que la
lgica usada en la implementacin de la rutina, funcin o programa,
trabaja correctamente y no dedicar mucho esfuerzo a preocuparse en las
definiciones del tipo de variable. Muchas veces esta preocupacin de los
tipos de variable, hacen que los alumnos repudien la programacin,
porque, cuando han querido hacer que se ejecute correctamente un
programa, el compilador se convierte en un tirano del alumno, al verificar
que est bien la sintaxis y la coherencia de las definiciones de las
variables (este control es vlido cuando queremos optimizar velocidad o
uso eficiente de memoria) pero en la etapa de aprendizaje, lo que nos
interesa es que la lgica funcione y eso es lo que conseguimos con el
BASIC para que el alumno verifique que el programa funciona por la
lgica implementada.

2) El cdigo desarrollado y los ejemplos implementados corrern sin


problemas en diferentes sistemas operativos (el mundo Mac, Windows y
Linux), ya que actualmente existen versiones del lenguaje True BASIC
para estas plataformas, lo cual permite que sin cambios en los cdigos
fuente presentados en este libro, se puedan verificar que los programas
funcionan (claro est, que para esto cada lector, debe conocer el manejo
bsico del sistema operativo que usa cotidianamente, as como cierta
destreza en el manejo de la computadora).

Posteriormente, el lector cuando ya tenga pensamiento de programador, podr


desarrollar sus programas en C si quiere. Existe una versin de BASIC llamada

- 236 -
Fundamentos de la programacin... Captulo VI.

POWER BASIC, que prcticamente est a la par de la eficiencia de C pero con las
ventajas de la facilidad de la sintaxis del BASIC.
Para las primeras implementaciones de los algoritmos, nos ayudaremos con la
definicin grfica de los mismos, usando los conocidos diagramas de flujo, esto
har que alguien que no desee implementar estos ejemplos en BASIC, lo haga en
PASCAL o C.

6.4 INSTRUCCIONES QUE DEFINEN LAS ESTRUCTURAS DE CONTROL EN


BASIC

Las primeras instrucciones del BASIC que aprenderemos, son las que definen los
tres grupos de estructuras de control ms simples. A estas sentencias o
instrucciones (tambin se las conoce como palabras reservadas), asociaremos el
correspondiente smbolo grfico para poder esquematizar el algoritmo.

Asignaremos una traduccin al espaol de estas instrucciones. Muchos autores a


esta traduccin no oficial de las sentencias o instrucciones de los lenguajes de
programacin las denominan pseudocdigos, los mismos que son palabras
arbitrarias que cada programador puede hacer para esbozar un procedimiento
especfico e identificar las constantes y variables que usar en el mismo.
Nosotros referiremos estas traducciones con el nico fin de que el lector pueda
entender en su idioma natal lo que est haciendo el programa, elaboraremos
directamente con las instrucciones del BASIC los algoritmos. De esta forma,
desde el primer algoritmo que implementemos podremos ver lo que sucede al
ejecutar estos programas. (Nada mejor que hacer para entender!)

Para la definicin de los pasos lgicos en nuestros algoritmos, seguiremos la


siguiente convencin:
1) Utilizaremos letras en mayscula y en negrita para diferenciar a las
instrucciones de las otras palabras o comentarios que podemos incluir en
un programa.

2) Cada paso de un algoritmo comenzar con una instruccin.

- 237 -
Tras los pasos de un... Hacker

3) Los nombres de variables y constantes, comenzarn con una letra y


podrn tener cualquier otra letra o nmero, as como el carcter de raya
baja (espacio subrayado).

4) Para diferenciar las variables alfanumricas (strings, hilera o cadena)


de las numricas, utilizaremos despus del nombre de la variable el
smbolo $ o tambin conocido en programacin BASIC como string;
as, la variable A nos dir que es numrica, A$(Astring) nos dir que es
alfanumrica.
Con estas premisas, se han definido las siguientes instrucciones en BASIC para las
estructuras bsicas de control:

6.4.1 ESTRUCTURAS DE CONTROL SECUENCIAL

REM (COMENTAR) <Mensaje explicativo>

Nos permite especificar un comentario aclaratorio del paso o proceso


inmediatamente siguiente que queremos instrumentar. El uso de comentarios
(documentacin del cdigo fuente), hacen entendible al cdigo y de fcil
mantenimiento.
En True BASIC, por facilidad podemos reemplazar la instruccin REM por un
smbolo de admiracin !, otras versiones de BASIC la sustituyen por un
apstrofe .
Ejemplo: REM En este programa vamos a realizar el clculo del nmero PI.
! En este programa vamos a realizar el clculo del nmero PI.

Su representacin en los diagramas de flujo est definida por el siguiente


smbolo:
Aqu escribiremos el
comentario.

Podemos especificar alguna


frmula o ayuda para
entender lo que se quiere
hacer.

- 238 -
Fundamentos de la programacin... Captulo VI.

LET (ASIGNAR) <Variable = Expresin informtica>

Nos permite reservar un espacio de memoria RAM de la computadora para


guardar algn valor y poder identificarlo con algn nombre de variable. A la vez
que nos permite hacer una operacin de asignacin del resultado de evaluar la
expresin informtica definida (frmula o clculo a realizar).

Ejemplo: LET Numero_PI = 3.141592654


LET X1 = (-B+SQR(B^2 - 4*A*C)) / (2*A)
LET I = I +1

Como podemos observar en la primera instruccin de asignacin estamos


definiendo a la variable Numero_PI el valor de 3,141592654; en el segundo
caso, asignamos a la variable X1 la evaluacin de la frmula de la solucin
de una ecuacin de segundo grado con una incgnita (en este caso
estamos hablando de la primera solucin). Para el tercer ejemplo, cuando
realizamos una operacin de asignacin, le estamos diciendo a la
computadora que el valor resultante de la evaluacin de una expresin
informtica sea transferido a la variable. Para nada estamos diciendo que
se trata de una igualdad conforme estamos acostumbrados a ver en el
lgebra cuando resolvemos ecuaciones. As que es comn usar los
llamados contadores cuando realizamos operaciones repetitivas
(iteraciones) que justamente tienen la forma i i+1, en BASIC y en casi
todos los lenguajes de programacin se codifican de la forma i = i + 1.

Su representacin en los diagramas de flujo est definida por el siguiente


smbolo:

Aqu escribiremos
la asignacin.

INPUT (INGRESAR) <Lista de variables separadas por comas>

Con esta instruccin le decimos a la computadora, que si todava no ha reservado


memoria para una variable, la reserve y asigne el valor que el usuario ingresar a
travs del teclado.
Ejemplo: INPUT X

- 239 -
Tras los pasos de un... Hacker

INPUT X, Y

En el primer caso, esta instruccin har que aparezca en la


pantalla un smbolo de interrogacin y la computadora estar
esperando a que el usuario ingrese un valor.

Digitado el valor, lo asignar a la variable.


En el segundo ejemplo, obligar a que el usuario separando por
comas ingrese los valores a las variables definidas.

Su representacin en los diagramas de flujo est definida por el siguiente


smbolo:

Lista de variables
a ingresar.

PRINT (PRESENTAR) <Mensaje, variables o expresiones>

Nos permite visualizar el valor de una variable, constante o mensaje que


deseemos ver en pantalla.
Ejemplo: PRINT Numero_PI, X1

Con esta instruccin se visualizar el valor de las variables


Numero_PI y de X1.

PRINT HOLA

Este ejemplo mostrar en la pantalla la palabra HOLA. Hay que


tener en cuenta que los mensajes irn entre comillas.

PRINT El valor de pi es: ;PI

Con este ejemplo, ilustramos la combinacin de presentar un


mensaje con el valor de una funcin (True BASIC tiene muchas
funciones predefinidas, sera conveniente que revisemos la Gua
de Uso de la Versin Bronce).

- 240 -
Fundamentos de la programacin... Captulo VI.

En la pantalla veremos lo siguiente: El valor de pies:3.1415927.

Existe una convencin para el uso de los separadores de resultado usados por
BASIC, estos son el punto y coma ; y la coma ,.

La diferencia radica en que cuando usamos el punto y coma, le decimos a BASIC


que presente el contenido de las variables o mensajes a continuacin del ltimo
presentado.

Cuando usamos la coma, introducir un espacio de varios caracteres entre


mensaje o resultado.
Su representacin en los diagramas de flujo est definida por el siguiente
smbolo:

Mensaje o
expresin a
presentar.

DATA (DATO) <Valores a leer>

Con esta instruccin podemos almacenarinternamente en el programa valores


que servirn para hacer ciertos clculos. Tambin nos puede servir para tener
una serie de valores de prueba y ver si nuestro algoritmo est obteniendo los
resultados deseados.

Los valores a leer, pueden ser desde uno hasta los que necesitemos, recordemos
que los mismos deben estar separados por comas. Los valores numricos se
digitan como tales y los alfanumricos entre comillas.
Esta instruccin es complementaria de la instruccin READ (LEER), conforme
conste en esta las variables a leer. Esta lectura y asignacin de valores se las hace
de forma secuencial.
Ejemplo: DATA 1, 2, 3, 4

En este ejemplo, se irn asignando de forma secuencial los valores


a una o varias variables, empezando por el primero.

- 241 -
Tras los pasos de un... Hacker

Su representacin en los diagramas de flujo est definida por el siguiente


smbolo:

Lista
de
datos

READ (LEER) <Variables a leer>

Sirve para hacer una asignacin de valores que ya estn definidos en una
instruccin DATA en el mismo algoritmo. Por ejemplo: Los valores de prueba que
pueden estar en una tabla, estos valores son fijos, pero siempre tienen que estar
asignados a una variable.
Ejemplo: READ A

Se va a asignar a la variable A, los valores que estn definidos en


DATA de forma secuencial. Cada vez que se lee esta variable,
tomar el siguiente valor de la lista definida en DATA.
READ A, B, C, D

Esta definicin har que se lean cuatro valores que deben estar
definidos en DATA, los asignar correspondientemente a las
variables A, B, C y D.

Su representacin en los diagramas de flujo est definida por el siguiente


smbolo:
Lista
de
varia-
bles.

RESTORE (RESTAURAR)

Sirve para decirle al algoritmo que empiece a leer otra vez los datos desde el
primer valor asignado en DATA.
Ejemplo: RESTORE

- 242 -
Fundamentos de la programacin... Captulo VI.

As se dice al programa que empiece en la siguiente instruccin


READ a asignar los valores desde el primero que est definido en

DATA.

Su representacin en los diagramas de flujo no est definida exclusivamente,


pero podemos representarla por el siguiente smbolo:

RESTORE

END (FIN)

Sirve para finalizar la ejecucin del algoritmo.

Ejemplo: END

Su representacin en los diagramas de flujo est dada por el siguiente smbolo:

FIN

Tambin y por convencin para la elaboracin de los diagramas de flujo, al inicio


de cualquier algoritmo utilizaremos el siguiente smbolo:

INICIO

6.4.2 ESTRUCTURAS DE CONTROL CONDICIONAL

IF <EXPRESION CONDICIONAL> THEN <INSTRUCCIN>


SI <EXPRESIN CONDICIONAL> ENTONCES <INSTRUCCIN>

Esta estructura de control condicional es la ms simple de las que disponemos


para evaluar una condicin.
Con esta estructura de control, se condiciona a que se ejecute una instruccin,
solamente cuando el resultado de la evaluacin de la expresin condicional sea
verdadero.

- 243 -
Tras los pasos de un... Hacker

Ejemplo: IF X1 = 3 THEN PRINT La solucin es 3.

Veremos cuando ejecutemos esta expresin en un programa, que


en este caso se ver en pantalla el mensaje (La solucin es 3.)
solamente cuando X1 sea 3.
Esta estructura de control condicional se representa en los diagramas de flujo
por el siguiente smbolo:

Expresin
Si
Condicional

No

IF <EXPRESION CONDICIONAL> THEN


<PROCEDIMIENTO>
END IF
SI <EXPRESIN CONDICIONAL> ENTONCES
<PROCEDIMIENTO>
FIN SI

Definida de esta forma esta estructura de control condicional, se prepara nuestro


algoritmo a ejecutar un procedimiento (o algoritmo auxiliar) solamente cuando
sea verdadero el resultado de evaluar la expresin condicional.

Ejemplo: IF A<>0 THEN

LET X1 = (-B + SQR(B^2 - 4*A*C)) / (2*A)

END IF

Con esta condicin se asegura que el valor de la divisin sea


posible.

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente smbolo:

- 244 -
Fundamentos de la programacin... Captulo VI.

Expresin
Si PROCESO
Condicional

No

IF <EXPRESION CONDICIONAL> THEN


<PROCEDIMIENTO 1>
ELSE
<PROCEDIMIENTO 2>
END IF
SI <EXPRESIN CONDICIONAL> ENTONCES
<PROCEDIMIENTO 1>
CASO CONTRARIO
<PROCEDIMIENTO 2>
FIN SI

Esta estructura de control condicional har que nuestro algoritmo, dependiendo


de la respuesta de evaluar la expresin condicional, ejecute uno de dos
procedimientos posibles.
Ejemplo: IF A<>0 THEN
LET X1 = (-B + SQR(B^2 - 4*A*C)) / (2*A)
ELSE
PRINT La ecuacin no es de segundo grado
END IF

Dependiendo del valor de la variable A, se calcular X1 si A es


diferente de cero, de otra forma se presentar el mensaje. (La
ecuacin no es de segundo grado)

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente smbolo:

Expresin
Si PROCESO 1
Condicional

No

PROCESO 2

- 245 -
Tras los pasos de un... Hacker

IF <EXPRESION CONDICIONAL 1> THEN


<PROCEDIMIENTO 1>
ELSE IF <EXPRESION CONDICIONAL 2> THEN
<PROCEDIMIENTO 2>
ELSE<PROCEDIMIENTO
END IF 3>

SI <EXPRESIN CONDICIONAL 1> ENTONCES


<PROCEDIMIENTO 1>
CASO CONTRARIO SI <EXPRESIN CONDICIONAL 2> ENTONCES
<PROCEDIMIENTO 2>
CASO CONTRARIO
FIN SI
<PROCEDIMIENTO 3>

Esta estructura de control condicional, permite que en nuestro algoritmo


podamos escoger un procedimiento de acuerdo a varias condiciones.
Ejemplo: IF (B^2 - 4*A*C)>=0 AND A<>0 THEN
LET X1 = (-B + SQR(B^2 - 4*A*C)) / (2*A)
LET X2 = (-B - SQR(B^2 - 4*A*C)) / (2*A)
ELSE IF A<>0 THEN
PRINT La ecuacin no es de segundo grado
ELSE PRINT La ecuacin no tiene soluciones reales

END IF

Con esta forma se asegura que en nuestro algoritmo se calcule de


mejor manera las soluciones de una ecuacin de segundo grado
con una sola incgnita.

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente smbolo:

Expresin Si
No PROCESO 1
Condicional 1

Expresin
Si PROCESO 2
Condicional 2

No

PROCESO 3

- 246 -
Fundamentos de la programacin... Captulo VI.

6.4.3 ESTRUCTURAS DE CONTROL ITERATIVO


Una de las caractersticas importantes que tiene la computadora es su capacidad
para realizar clculos y muchas veces estos clculos hay que repetirlos n veces
hasta obtener el resultado deseado.

A esta repeticin condicionada de un procedimiento, los programadores la


conocemos con los nombres de iteracin, lazo o bucle.
Se han definido dos estructuras de control iterativo y responden al condicionante
que el programador conozca de antemano las veces a repetir el procedimiento o
si estas iteraciones dependen de alguna condicin.

En BASIC se ha definido la siguiente estructura de control cuando conocemos a


ciencia cierta las veces que se tiene que repetir un procedimiento:

FOR <CONTADOR = VALOR INICIAL> TO <VALOR FINAL> STEP <INCREMENTO>


<PROCEDIMIENTO>
NEXT <CONTADOR>
HACER PARA <CONTADOR = INICIO> A <FIN> INTERVALO <INCREMENTO>
<PROCEDIMIENTO>
FIN HACER

En esta estructura, implcitamente se incorpora una condicin, la variable que


controla la estructura (que en programacin se la conoce como contador del
procedimiento) ser incrementada en el valor definido por el programador cada
vez que llega al fin del bucle y si este valor es mayor que el lmite deseado sale del
bucle.
Se tiene que definir el valor de inicio de esta variable (<VALOR INICIAL>), el valor
que har que termite el bucle (<VALOR FINAL>) y opcionalmente un valor de
incremento del contador (<INCREMENTO>). Cuando no se estipula este incremento
BASIC por defecto incrementar el valor del contador en 1.
Ejemplo: FOR I = 1 TO 10 STEP 2
PRINT I
NEXT I
END

Al ejecutar esta estructura de control iterativo, tendremos que en


la pantalla se presentarn los siguientes valores:

- 247 -
Tras los pasos de un... Hacker

1
3
5
7
9

Esta estructura de control iterativo se representa en los diagramas de flujo por


los siguientes smbolos:

<CONTADOR> =
<VALOR INICIAL>
A <VALOR FINAL>

PROCESO

<CONTADOR>
+
<INCREMENTO>

Cuando no conocemos a ciencia cierta las veces que se tiene que repetir un
procedimiento, en BASIC se ha definido la siguiente estructura de control
iterativa:

DO WHILE <EXPRESIN CONDICIONAL>


<PROCEDIMIENTO>
LOOP
HACER MIENTRAS <EXPRESIN CONDICIONAL>
<PROCEDIMIENTO>
FIN HACER

Esta estructura evaluar la condicin antes de realizar el procedimiento


contenido. Ese procedimiento se repetir mientras la evaluacin de la expresin
condicional sea verdadera. En otras palabras, repetir el procedimiento mientras
la relacin condicional sea verdadera, si esto no se produce no se ejecutar ni una
vez el procedimiento.

Debemos tener en cuenta este detalle cuando utilicemos este tipo de estructura.

- 248 -
Fundamentos de la programacin... Captulo VI.

Ejemplo: LET I = 10
DO WHILE I>=0
PRINT Valor de I: ; I
LET I = I - 1
LOOP

Al ejecutar este algoritmo, tendremos en pantalla los siguientes


resultados:

10
9
8
7
6
5
4
3
2
1
0

Esta estructura de control iterativo se representa en los diagramas de flujo por


los siguientes smbolos:

CONDICION SI PROCESO

NO

DO UNTIL <EXPRESIN CONDICIONAL>


<PROCEDIMIENTO>
LOOP
HACER HASTA QUE <CONDICIN>
<PROCEDIMIENTO>
FIN HACER

Esta estructura evaluar la condicin antes de realizar el procedimiento


contenido. Ese procedimiento se repetir hasta que la evaluacin de la expresin

- 249 -
Tras los pasos de un... Hacker

condicional sea verdadera. En otras palabras, repetir el procedimiento mientras


la relacin condicional es falsa, si esta condicin es verdadera al ingresar a esta
estructura, de igual forma que en caso anterior, no se ejecutar ni una vez el
procedimiento contenido.
Ejemplo: LET I = 1
DO UNTIL I > 10
LET I = I + 2
PRINT I
LOOP

Como vemos se presentarn en pantalla los siguientes valores:

1
3
5
7
9

Esta estructura de control iterativo se representa en los diagramas de flujo por


los siguientes smbolos:

PROCESO NO CONDICION
SI

DO
<PROCEDIMIENTO>
LOOP WHILE <EXPRESIN CONDICIONAL>
HACER
<PROCEDIMIENTO>
FIN HACER MIENTRAS <CONDICIN>

Esta estructura a diferencia de las anteriores, ejecutar al menos una vez el


proceso y se seguir ejecutando mientras la evaluacin de la expresin
condicional sea verdadera.
Ejemplo: LET I = 1

- 250 -
Fundamentos de la programacin... Captulo VI.

DO
PRINT I
LET I = I + 2
LOOP WHILE I < = 10

Como vemos se presentarn en pantalla los siguientes valores:

1
3
5
7
9

Esta estructura de control iterativo se representa en los diagramas de flujo por


los siguientes smbolos:

PROCESO

SI

CONDICION

NO

DO
<PROCEDIMIENTO>
LOOP UNTIL <EXPRESIN CONDICIONAL>
HACER
<PROCEDIMIENTO>
FIN HACER HASTA QUE <EXPRESIN CONDICIONAL>

Esta estructura ejecutar al menos una vez el procedimiento y lo repetir hasta


que la condicin sea verdadera.

Ejemplo: LET I = 1
DO
PRINT I
LET I = I + 2
LOOP UNTIL I > 10

Como vemos se presentarn en pantalla los siguientes valores:

- 251 -
Tras los pasos de un... Hacker

1
3
5
7
9

Esta estructura de control iterativo se representa en los diagramas de flujo por


los siguientes smbolos:

PROCESO

NO

CONDICION

SI

Si nosotros observamos detenidamente las estructuras de este tipo, deducimos


que dependiendo de la forma de expresar la condicin de salida del bucle se
obtienen los mismos resultados.

Definidas as las instrucciones que nos permitirn elaborar nuestros algoritmos y


a la vez representarlos de manera grfica, podemos empezar a desarrollar
nuestros primeros programas.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Fundamentos de la Programacin, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las


Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.

- 252
Fundamentos de la programacin... Captulo VI.

- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot


Colombia, 1.984.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- QL PROGAMACIN EN SUPERBASIC, Roy Atherton, MicroTextos S.A. de
ediciones, Madrid Espaa, 1.985.
- Programacin Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRCTICA DE LA INFORMTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid Espaa, Octubre de 1.986.
- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y
BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte Amrica, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim Repblica Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,
Publicado en los Estados Unidos de Norte Amrica, 1.990.
- Programacin en C, Byron S. Gottfried, McGraw Hill / Interamericana de
Espaa S.A., Madrid Espaa, 1.991.
- Microsoft MASM, Assembly Language Development System Version 6.1.,
Microsoft Corporation 1.987, 1.991, 1.992 U.S. Patent No. 004955066,
Estados Unidos de Norte Amrica, 1.992.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte Amrica, 1.993.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.
- The YOU Based LABORATORY, TI-CBL EXPLORATIONS in Science and
Mathematics, Margo L. Mankus Frank Wattenberg, Weber State
University 1.996, Publicado por True BASIC Inc., 1.996.
- Lets Program It in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte Amrica, 1.996.
- Programming for ENGINEERS in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte Amrica, 1.996.

- 253 -
Tras los pasos de un... Hacker

- True BASIC Bronze Edition, Users Guide, John G. Kemeny Thomas E.


Kurtz, True BASIC Inc. 2.001, Publicado en los Estados Unidos de Norte
Amrica, 2.001.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- Criptografa y Seguridad en Computadores Cuarta Edicin Versin
4-0.8.1, Manuel Jos Lucena Lpez, Universidad de Jan, Publicacin
Electrnica, Marzo de 2.010.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 254 -
INTRODUCCIN (VII)

Con todos los conocimientos adquiridos y puestos en prctica, haba


desarrollado un programa publicitario para la empresa que distribua las
computadoras Spectravideo, se me ocurri presentarlo al vendedor que
gentilmente nos haba atendido aos atrs (realmente haba sido uno de los
dueos de la empresa), quien al ver la calidad del programa que haca publicidad
a su negocio, de forma similar al programa del astronauta que publicitaba a la
fbrica de la computadora, me propone hacer un trueque, que consista en
entregarle el programa publicitario a cambio de todos los juegos que tena
disponibles (menos los que ya tena) para mi computadora (realmente
programas para el MSX BASIC), adems de un cartucho para la extensin de la
memoria RAM que permitira a mi computadora llegar a los 144 KB de RAM,
escuchada la oferta, sin pensarlo dos veces acept el trato.

Realmente no saba si el valor del cartucho de extensin y los juegos, compensaba


todo el sacrificio y tiempo invertido en hacer el programa o estaba sobrevalorado
mitrabajo, pero en fin, fue el primer negocio que hice al producir un programa y
con una ventaja adicional, que al tener a la mano el cdigo fuente de los juegos
comerciales disponibles, aprend algunas tcnicas para la animacin que
aprovechaban ciertas caractersticas propias del chip de vdeo de la
computadora, adems que aprend el uso de unas rutinas que estaban escritas en
algn lenguaje de programacin de la mquina (luego descubrira que se trataba
de la codificacin de algunas funciones en lenguaje ensamblador para el
microprocesador Zilog Z80) que trabajaban como una extensin del MSX
BASIC.

Motivado por este negocio y viendo que este arte de la programacin (realmente
se haba convertido en un hobby para m) renda sus primeros frutos, pensaba
Si alguien puede pagarme por divertirme, para qu estudiar una profesin
diferente de alguna que tenga que ver con computadoras?
Prximo a terminar y terminada mi etapa colegial (como les comentaba tena ese
espritu innato de investigador, lo que conllevaba a que sea el mejor estudiante
de mi clase), fui graduado con honores (como el mejor estudiante de curso fui
designado el mejor egresado de ese ao acadmico); as, empec a buscar alguna

- 255 -
Tras los pasos de un... Hacker

universidad para seguir una carrera relacionada con computadoras. De esta


bsqueda, decido ingresar a la Escuela Superior Politcnica del Ejrcito (ESPE)
para estudiar Ingeniera Electrnica, mas al rendir los exmenes de ingreso, no
alcanc el puntaje requerido para ser aceptado como alumno, en esta situacin,
mi matrcula qued condicionada para que fuera aceptado en calidad de oyente a
las clases del prepolitcnico.

Tuve en este caso la primera derrota en mis aspiraciones (el nivel de


conocimientos requeridos para el ingreso a la universidad era superior a los que
se impartan en el colegio, as que el haber fallado en los exmenes de ingreso, no
se deba a que yo era incompetente, sino a que no saba el tema evaluado), pero
de ninguna manera me iba a dejar doblegar por esta adversidad o por esta
aparente desventaja que tena frente a mis compaeros del prepolitcnico, que s
haban sido aceptados como alumnos o que este hecho hiciera que me sienta
inferior. Rpidamente, al asimilar los conocimientos impartidos por mis
profesores, llenaron en m el vaco que tena y a la vez, solidificaron algunos
conceptos matemticos que no poda entender en varios algoritmos detallados en
la obra de Knuth. Pas esta etapa del prepolitcnico y por rendir otra vez los
exmenes de ingreso, mi sorpresa fue que habra sido exonerado en 5 materias
de las 6 que eran parte de los exmenes y que la nota que haba sacado en la
materia faltante, era suficiente para ingresar directamente al primer nivel del
Instituto de Ciencias Bsicas de la Escuela Superior Politcnica del Ejrcito sin
pasar por el prepolitcnico.

Durante este primer nivel, sumado al tiempo que ya haba cursado en calidad de
oyente, pude hacer amistad con varios oficiales de las Fuerzas Armadas del
Ecuador que eran tambin alumnos de la ESPE y compaeros mos. De esta
relacin, as como de la motivacin que tuve de parte de este grupo de
compaeros y principalmente, de una conferencia de nuestro profesor de Clculo,
que en una de sus ltimas clases nos hablaba sobre nuestra opcin de cursar
cualquier ingeniera que ofertaba en esa poca la ESPE. Nuestra decisin (nos
deca) marcara para toda nuestra vida la labor que desempearamos en bien de
la sociedad y del profundo arrepentimiento, que por influencias o por prejuicios,
sentiramos al equivocarnos en nuestra profesin. En otras palabras, deberamos
disfrutar de lo que hacemos y no hacerlo por obligacin o porque no hay otro
remedio ms que hacerlo. De mis compaeros oficiales, haba escuchado que
gracias a las Fuerzas Armadas, algunos de ellos haban podido hacer cursos de
especializacin en el exterior. Tenan acceso a lo que en el mundo de los civiles

- 256 -
La historia... Introduccin (VII).

costara bastante, ir becados a especializarse en algn tema de inters para las


Fuerzas Armadas y como valor agregado el conocimiento que adquiriran. El
ejemplo ms cercano lo tena reflejado en la carrera militar de mi to Tarquino.
Decid entonces, una vez terminado el primer nivel de la Escuela de Ciencias
Bsicas, postular como aspirante a oficial del Ejrcito Ecuatoriano; as, con
algunos compaeros decidimos ingresar a la Escuela Superior Militar Eloy
Alfaro, regida tambin por la ESPE. Rendidos los exmenes de ingreso, la
mayora fuimos aceptados con el grado de cadetes (promocin correspondiente
al ao de 1.990 o tambin conocidos como los nueve cero). Transcurri el
tiempo, pas la etapa formativa militar del primer ao y dispuesto a ser el mejor
oficial que el pas habra tenido, no pas mucho tiempo para que abruptamente
mis deseos fueran truncados.

Lamentablemente, las cosas no son como las pintan hasta que uno est
inmiscuido en los intereses de varios grupos, ya sean estos: sociales, econmicos
o simplemente familiares. La vida militar no est libre de esta realidad y hoy s,
que para ascender al grado de general por ejemplo, aparte de calificar con todos
los mritos militares y de tener una hoja de vida ejemplar, uno debe tambin ser
afn al grupo dominante de la sociedad o que est en el poder; caso contrario, el
Consejo de Generales que califican la hoja de vida de cada aspirante, simplemente
dictaminan que uno no ha cumplido con los requisitos subjetivos de la
calificacin, sin dar ms explicaciones.

Tena compaeros, hijos de altos oficiales del Ejrcito, por esta relacin familiar
eran tratados de manera diferente o por lo menos para ellos haba alguna
deferencia en el trato. Era de verse por ejemplo, toda la escuela militar renda
saludos y respetos a estos distinguidos oficiales (y con derecho, eran coroneles o
generales) cuando iban a visitar a sus hijos y sin quererlo o no, esta relacin haca
que los instructores no exijan de la misma forma a todos sus alumnos (yo creo
que esta situacin es propia de la naturaleza humana o de la naturaleza de la
vida, aunque digamos que todos somos iguales!). No pas mucho tiempo para
que los deseos de algn alto oficial (todos los padres quisieran que sus hijos
fueran los mejores alumnos de su clase, legtimo inters si no se influenciara para
conseguirlo), hicieran que por alguna orden no escrita, se allane el camino para
que estos deseos sean cumplidos; tramado el plan de forma muy sutil, algunos
instructores se encargan de obstaculizar el paso a los que por mritos propios
ocuparan estos primeros lugares. As fue que no resist el desgaste fsico al que
ramos sometidos y tuve que pedir mi baja de la Fuerza por razones mdicas. El

- 257 -
Tras los pasos de un... Hacker

exceso de ejercicio fsico me haba provocado una osteocondrosis (desgaste del


cartlago protector de mis articulaciones de las rodillas) la misma que me
postrara por largo tiempo mientras dur el tratamiento de recuperacin.

Llegado a la casa y recibido por mi familia, el primer objetivo que tenan en


mente mis padres era el que recuperara lo ms pronto posible la movilidad.
Empezaron a buscar tratamientos, unos nos decan en el mismo Hospital Militar
que la nica solucin era intervenirme quirrgicamente, remover el cartlago y
dejar que este se regenere, advertan eso s, que nunca iba a tener la misma
movilidad pero que podra caminar sin excederme en las distancias.

Mito poltico Galo, que era un afamado mdico traumatlogo, le dijo a mi madre
que exista otro tratamiento, pero que era largo y paciencioso (adems de costoso
por los medicamentos que se necesitaba), pero que a la final tendra mejores
resultados que con la intervencin quirrgica que recomendaban los mdicos
militares, y fue as que a los ocho meses de haber salido de la Escuela Militar
poda ya desplazarme a voluntad, pero conservando ciertas precauciones hasta
terminar el tratamiento.
En mi convalecencia, volv a desempolvar mis libros y notas que tena. Hoy me
suena gracioso, pero el tiempo que pas obedeciendo rdenes y corriendo de un
lado para otro, pareca haba afectado mi capacidad de razonamiento ycranme!
me costaba bastante trabajo entender mis propias notas o volver a programar
como lo haca. Por el contrario, a la formacin militar le agradezco la
puntualidad, ese espritu de no dejarse vencer hasta conseguir el objetivo, la
lealtad que va ms all de la amistad entre otros valores positivos que tiene la
vida militar.

Finalizaba el ao de 1.991, mi padre con el afn de que retome mi vida


universitaria, decide como regalo de navidad comprarme otra computadora
(compra realizada a un importador local de electrodomsticos llamado Guillermo
Paz), ms moderna que mi antigua Spectravideo y con los ltimos adelantos en
tecnologa informtica que llegaba al pas.
Se trataba de una computadora AT compatible sin marca (conocida en nuestro
medio como clon) que tena las siguientes caractersticas:

- 258 -
La historia... Introduccin (VII).

Computadora Clon AT compatible. (1.991)


Computadora: Sin marca.
Fabricante: Alguna fbrica de China o Singapur.
Tipo: Computadora AT.
Origen: Decan las partes hecho en Taiwn.
Ao: 1.991.
Microprocesador: Intel 80286.
Coprocesador: Intel 80287 operando a 8 MHz
Velocidad: 6 MHz, con turbo operaba a 12 MHz
RAM: 1 MB. Expandible hasta 4 MB DRAM 80 ns. (Realmente el procesador
poda direccionar hasta 16 MB, pero la tarjeta madre solo soportaba
memoria de hasta 1 MB por slot, tena 4)
ROM: 64 KB.
VRAM: 16 KB.
Tarjeta Grfica: Monocromtica tipo Hrcules, con emulacin para grficos CGA.
Modo Texto: Por defecto 80 caracteres x25 lneas.
Bajo sistema operativo,40,80 x 25 lneas. (DOS4.0)
Modo Grfico: 720 x 348 pixeles.
Colores: 16 escalas de gris (mbar, verde o blanco si el monitor
monocromtico tena un CRT mbar, verde o blanco).
Chip de Sonido: Propio de la tarjeta madre.
Sonido: 1 Canal, 8 octavas.
Almacenamiento: Unidad de disquete de 3, Doble lado, Alta Densidad, 1.44 MB.
Unidad de disquete de 5, Doble lado, Alta Densidad, 1.2 MB.
Unidad de disco duro de 3, tipo Winchester, marca Seagate de 80
MB.
Puertos E/S: 5 ranuras para extensin de tarjetas AT compatibles y 2 para
extensin de tarjetas XT compatibles, 2 RS-232C de 9 y 25 pines, 1
puerto paralelo tipo Centronics.
Modem: QUICKTEL 9600 Send/Receive Fax/Modem. (Tarjeta interna).
Teclado: Espaol de 101 teclas tipo QWERTY.
Sistema Operativo: DOSVer 3.2, o superior.
Firmware: AMI BIOS.

Con esta computadora y teniendo los disquetes que me haban enviado desde la
empresa True BASIC Inc., pude por fin poner en prctica todas las tcnicas que
haba aprendido y por sobre todo practicar la famosa programacin
estructurada...

Les invito a probar todos y cada uno de los programas que a manera de ejercicios
resueltos (ejemplos de programacin) en clase los haremos.

Hay que poner en prctica los conceptos del teorema del programa
estructurado y comprobar por nosotros mismos, si es verdad que con las tres
estructuras bsicas de programacin, se puede desarrollar la implementacin de
cualquier algoritmo (programa)

- 259 -
Tras los pasos de un... Hacker

- 260 -
CAPTULO VII. ELABORACIN DE ALGORITMOS CON
BASIC

Ahora que por fin tenemos las bases necesarias para elaborar nuestros
algoritmos, podramos, fruto de la experiencia, tomar en cuenta los siguientes
consejos:
a) Tener siempre a mano un cuaderno, lpiz y borrador.

b) Tomar nota del problema a solucionar con detalle de los pormenores.

c) Si existe alguna frmula a aplicar. Detallar las constantes y variables que


intervienen.

d) Desarrollar un mtodo de solucin a mano, tal y como nos han enseado


o indicado es la solucin.
e) Ahora el procedimiento a mano, dividirlo en subprocesos ms simples,
hasta que podamos instrumentar estos subprocesos con las estructuras
bsicas de la programacin, si esto no es posible, recurriremos a nuestra
imaginacin para poder dar solucin al problema propuesto. (Por esto
digo que programar es un arte, los programas son una creacin de la
mente humana).

f) Realizar un esquema general de la solucin utilizando diagramas de flujo.

g) Instrumentar el cdigo del algoritmo, comentando lo que se va haciendo o


calculando.
h) Una vez que hayamos probado que la instrumentacin funciona,
procedemos, conjuntamente con nuestras notas a mano, a incluir en este
paquete un impreso del cdigo fuente del programa, subrutina o funcin
desarrollada.
i) Este paquete lo archivaremos en algn lugar seguro, para en lo posterior
si tenemos algn inconveniente, podamos fcilmente recuperar nuestro
trabajo.

- 261 -
Tras los pasos de un... Hacker

En el peor de los casos nos tocara volver a desarrollar los programas,


subrutinas o funciones (si nos piden que los instrumentemos en otro
lenguaje de programacin) o simplemente para que otro programador
pueda dar mantenimiento o mejorar el cdigo desarrollado.

Como podrn ver, sutilmente he definido un algoritmo para desarrollar


algoritmos y que en su momento cuando sigan leyendo el relato de mi vida (parte
introductoria de cada captulo) deducirn el por qu? les sugiero que hagan esto.
Si ponemos en prctica estos consejos desde que empezamos a desarrollar
nuestros primeros algoritmos, crearn en nosotros buenos hbitos en el arte de
programar computadoras.
Estos detalles harn que cuando presentemos nuestros trabajos, ya sea al
profesor de la materia o ms importante, cuando trabajemos desarrollando
sistemas para alguna empresa, nos distinguirn de los dems programadores por
tener siempre a mano:
1) El anlisis y solucin del problema,

2) La documentacin del programa; y,

3) El cdigo fuente visualmente organizado y estructurado.

Entonces, ahora que estamos listos, podremos empezar a resolver problemas y


estas soluciones las instrumentaremos en algoritmos que los probaremos en
nuestra computadora a medida que los desarrollamos.

- 262 -
Elaboracin de algoritmos con BASIC... Captulo VII.

EJERCICIOS RESUELTOS:

Algoritmo para presentar un mensaje. Implementar un algoritmo


Ejemplo 61.
que presente por pantalla el siguiente mensaje: Hola mundo, aqu estoy
listo para programar.

Como vemos, aunque parezca trivial, procederemos a tomar nota del ms simple
de los detalles que tenemos que implementar en nuestros programas o
algoritmos y en este caso vemos que:
a) En el problema a resolver no existe ninguna frmula a aplicar.
b) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o
mdulo).
c) Se nos pide simplemente mostrar un mensaje en la pantalla que diga:
Hola mundo, aqu estoy listo para programar

As que, elaboremos el diagrama de flujo para este algoritmo. Para dibujarlo


seguiremos las siguientes convenciones:

1) Si se trata de un proceso principal, el diagrama de flujo tendr un inicio y


un fin.
2) Un diagrama de flujo, debe esquematizar de forma ordenada y lgica la
secuencia de operaciones a efectuarse.
3) Su organizacin debe seguir un orden descendente.
4) Subprocesos y bifurcaciones (estructuras de control condicional) que
genere una comparacin deben ser esquematizados a la derecha del
diagrama principal.
5) Cierres de bucles, irn a la izquierda del diagrama principal.
6) Las flechas que reflejan el flujo del algoritmo, deben indicar la direccin
que los datos tomarn de proceso en proceso, adems que no se pueden
cruzar entre s.
7) Cada smbolo del diagrama de flujo tendr una flecha de llegada y una
flecha de salida. (Excepto cuando se trate del inicio y fin del algoritmo).

Entonces, nuestro primer algoritmo esquematizado en un diagrama de flujo ser


algo parecido a este:

- 263 -
Tras los pasos de un... Hacker

Algoritmo para
presentar un mensaje.
Como vemos, el mensaje no
Inicio cabe totalmente en el
smbolo, as que, dejamos
comentado que en esta
parte del programa,
desplegaremos la frase:
Hola mundo, aqu estoy listo
para programar
MENSAJE

Fin

Una vez que verifiquemos la lgica del algoritmo y que realiza correctamente lo
que deseamos que haga, como paso final procedemos a codificar este algoritmo
en BASIC (o cualquier otro lenguaje de programacin). El resultado ser la
siguiente definicin algortmica implementada en un lenguaje de programacin:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 1. Ejemplo No. 61 del texto.
! Algoritmo que presenta un mensaje en la pantalla.
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.

! Variables:
! Ninguna.

! Funciones:
! Ninguna.

! Libreras:
! Ninguna.

! Mdulos:
! Ninguno.
!

- 264
Elaboracin de algoritmos con BASIC... Captulo VII.

! Aqu empieza el proceso principal.

PRINT "Hola mundo, aqu estoy listo para programar..." ! Presentamos el mensaje.

END ! Fin del algoritmo.

Ahora, podemos digitar este cdigo en nuestra versin BRONZE del True
BASIC para ver lo que sucede.

Tendremos la siguiente pantalla, una vez digitado el programa:

O con las opciones del men <File>, procederemos a leer (Open) el archivo
llamado EJERCICIO 61.TRU (que viene copiado en la carpeta Libro Hacker del CD
adjunto).

Luego escogeremos la opcin para ejecutar el programa (Run) del men <Run>,
veremos que aparece la siguiente pantalla:

- 265 -
Tras los pasos de un... Hacker

Al dar un clic sobre esta pantalla, veremos que nuestro True BASIC nos informa
que el programa se ha ejecutado con xito (Run successfully).

En estos primeros ejercicios trataremos de ser ms didcticos, para que puedan


entender el desarrollo de estos algoritmos, implementarlos y ejecutarlos.

Posteriormente, solamente mostraremos el cdigo fuente desarrollado con la


explicacin de los procesos implementados.

Les sugiero que se familiaricen con las opciones del entorno del lenguaje, para
esto pueden recurrir a la gua de uso que viene acompaada de su CD de la
Versin Bronze de True BASIC.

Ejemplo 62. Algoritmo para sumar dos nmeros. Ingresados por teclado los
nmeros a y b, implementar un algoritmo que obtenga la suma de estos dos
nmeros y almacene esta respuesta en la variable c. Desplegar su
resultado.
En este ejemplo, ya tenemos que utilizar una frmula de clculo, tenemos adems
que almacenar el valor de la sumatoria en una variable y como es obvio,
desplegaremos el resultado. Para esto, tomamos nota del problema:
a) En esta tarea a resolver existe la siguiente frmula a aplicar:

C = A+ B

Siendo las variables A, B y C de tipo numrico.

- 266 -
Elaboracin de algoritmos con BASIC... Captulo VII.

b) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o


mdulo).
c) Se nos pide finalmente mostrar un mensaje en la pantalla con los
resultados, bien podra ser uno que diga: La suma de A y B es: C

Definido el problema y esbozada la estrategia de solucin, elaboremos el


diagrama de flujo para este algoritmo, el mismo que puede ser:

Algoritmo que
suma dos nmeros.
Inicio
Presentaremos un mensaje
para que el usuario sepa que
tiene que ingresar los
valores de A y B.
Ingrese los
valores de Ay
B
Ingresaremos por teclado el
valor para las variables A, B.

Ingrese A, B

Calculamos la suma de A y
B y la asignamos a la
variable C.

CA+B

Presentamos los resultados,


de forma que informemos
que: La sumatoria de;A; y
;B; es: ;C.

La suma de A
y B es C

Fin

- 267 -
Tras los pasos de un... Hacker

Una vez que verificamos la lgica del algoritmo, adems que realice
correctamente lo que nos han pedido que haga, procedemos a codificar este
algoritmo en BASIC.
El resultado ser la siguiente definicin algortmica implementada en un lenguaje
de programacin:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 2. Ejemplo No. 62 del texto.
! Algoritmo que suma dos nmeros y presenta los resultados
! en la pantalla.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! C = A + B
!
! Variables: A numrica, a ser ingresada por el usuario.

! B numrica, a ser ingresada por el usuario.


! C numrica, almacena el clculo de A + B.
!
! Funciones: Ninguna.

!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

!
! Aqu empieza el proceso principal.

PRINT "Ingrese por favor los valores de A,B:"; ! Presentamos un mensaje pidiendo
al usuario que ingrese los datos.
INPUT A,B ! Ingresa por teclado los valores de A y B.
PRINT
LET C "La sumatoria de";A;"y";B;"es:";C
= A+B ! Se presentan
! Se calcula los resultados.
la sumatoria.

END ! Fin del algoritmo.

Digitaremos este cdigo en nuestra versin BRONZE del True BASIC para ver
lo que sucede.

Tendremos la siguiente pantalla, una vez digitado el programa:

- 268 -
Elaboracin de algoritmos con BASIC... Captulo VII.

De igual forma que en el ejercicio anterior, procedemos a ejecutar nuestro


programa.
Veremos que aparece la siguiente pantalla:

Nuestro programa ahora, est esperando a que ingresemos los valores para las

- 269 -
Tras los pasos de un... Hacker

variables A y B. Si digitamos un solo valor; nos dir que se han ingresado muy
pocos datos, volver a pedirnos que ingresemos los valores; por el contrario, si
digitamos demasiados valores, nos informar que son demasiados y otra vez
volver a pedirnos que ingresemos los valores. As las cosas, esta vez tendremos
que digitarlos como nos pide el programa. (Lo definimos en la instruccin
INPUT, si desebamos ingresar uno a uno los valores, deberamos haber
codificado una instruccin INPUT para cada variable).

Luego de ingresar estos valores (por ejemplo 3 y 2), veremos la siguiente


pantalla:

Finalmente si damos un clic a esta pantalla, como en el caso anterior nuestro


entorno de desarrollo nos informar que el programa se ha ejecutado con xito.

Algoritmo para calcular la superficie y el volumen de una esfera.


Ejemplo 63.

Ingresado por teclado el valor del radio de una esfera, se pide realizar un
algoritmo que obtenga la superficie y el volumen de la misma. Mostrar los
resultados.
En este ejemplo, tenemos que utilizar dos frmulas de clculo, adems debemos
almacenar los valores resultantes y como se pide desplegaremos los resultados.

Ahora, tomamos nota del problema:


a) En este ejercicio, tendremos que usar las frmulas definidas para el
clculo de la superficie y el volumen de una esfera, teniendo como dato
variable el valor del radio de la misma, las frmulas a aplicar son:

- 270 -
Elaboracin de algoritmos con BASIC... Captulo VII.

S = 4 x x r2

V=4/3 xxr3

Siendo las variables r, SyV de tipo numrico.


b) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o
mdulo).
c) Se nos pide finalmente mostrar un mensaje en la pantalla con los
resultados, bien podra ser uno que diga: La esfera de radio ;R, tiene
por superficie;S;y por volumen ;V

Definido el problema y esbozada la estrategia de solucin, elaboremos el


diagrama de flujo para este algoritmo, el mismo que puede ser:

Algoritmo para calcular la superficie y


el volumen de una esfera.
Inicio
Presentaremos un mensaje
para que el usuario sepa que
tiene que ingresar el valor
del radio (R).

Ingrese por
favor el valor
del radio (R)
Ingresaremos por teclado el
valor para el radio de la
esfera (R).

R Calculamos los valores de la


superficie (S) definida por la
S 4*PI*R^2 frmula S=4*PI*R^2
As como para el volumen
(V), que est calculado como
V= 4/3*PI*R^3
a suma de A y B y la
asignamos a la variable C.
V 4/3*pi*R^3
Presentamos los resultados,
con los mensajes
informativos que pueden ser:
La esfera de radio R
Tiene por superficie S
Tiene por volumen V

MENSAJES

Fin

- 271 -
Tras los pasos de un... Hacker

Observando que nuestro algoritmo est correctamente definido y esquematizado,


procederemos a codificarlo en BASIC.

Tendremos un programa parecido al siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 3. Ejemplo No. 63 del texto.
! Algoritmo que calcula la superficie y el volumen de una
! esfera, ingresando como dato el valor del radio de la
! misma. Presenta los resultados en la pantalla.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! S = 4*PI*R^2
! V = 4/3*PI*R^3
!
! Variables:
! R numrica, a ser ingresada por el usuario.
! S numrica, almacena el clculo de 4*PI*R^2.
! V numrica, almacena el clculo de 4/3*PI*R^3.
!
! Funciones: Utilizamos la funcin interna de True BASIC

! que devuelve el valor del nmero pi.


!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

!
! Aqu empieza el proceso principal.

PRINT "Ingrese por favor el valor del radio (R):"; ! Presentamos un mensaje pidiendo
al usuario que ingrese el dato.
INPUT R ! Ingresa por teclado el valor de R.
LET S = 4*PI*R^2 ! Se calcula el valor de la superficie de una esfera.
PRINT "La
LET V = esfera de radio";R;"u" ! !SeSecalcula
4/3*PI*R^3 presentan los resultados.
el valor del volumen de una esfera.

PRINT
END "Tiene por volumen";V;"u^3"
superficie";S;"u^2"
! Fin del algoritmo.

Como vemos en la definicin de este algoritmo, el valor del nmero pi no lo


ingresamos, ni tampoco lo expresamos como una variable, en este caso estamos
utilizando una de las funciones que vienen ya programadas en nuestro True

- 272 -
Elaboracin de algoritmos con BASIC... Captulo VII.

BASIC. Para conocer ms de las funciones que tiene predefinido el lenguaje,


sera conveniente que revisen su gua de uso en el captulo de funciones internas.

Como ayuda adicional, para que nuestro programa exprese de manera correcta
los resultados y tenga coherencia con las dimensiones que se usan en la
geometra, observamos que a ms de calcular los valores para la superficie y el
volumen de una esfera, dado el valor de su radio. Inventamos la expresin u^2
que significa unidades cuadradas y u^3 que significa unidades cbicas, con esto
decimos al usuario que si ingres la dimensin del radio en centmetros por
ejemplo, entonces los resultados sern expresados tambin en centmetros.

Ahora, digitaremos este cdigo en nuestro entorno de programacin True BASIC


Bronze Edition.

A continuacin veremos la siguiente pantalla:

Procedamos a ejecutar este algoritmo y observemos lo que pasa. Tendremos que

- 273 -
Tras los pasos de un... Hacker

ver algo as:

Ahora ingresemos el valor solicitado para el radio de nuestra esfera, en este caso
digitemos el valor de 3<Enter>.

Al ejecutar el algoritmo, nuestro programa calcular y mostrar los valores


correspondientes a la superficie y el volumen de la esfera.

Obtendremos as la siguiente pantalla:

Finalmente daremos un clic a esta pantalla, como en el caso anterior nuestro


entorno de desarrollo nos informar que el programa se ha ejecutado con xito.

- 274 -
Elaboracin de algoritmos con BASIC... Captulo VII.

Algoritmo para determinar el nmero mayor de tres ingresados.


Ejemplo 64.

Ingresados por teclado tres valores, se pide realizar un algoritmo que


determine cul de los tres ingresados es el mayor? Mostrar el resultado.
En este ejemplo, ya no nos piden realizar ningn clculo, ahora debemos hacer
que nuestra computadora determine mediante algn mtodo de discriminacin
racional, el mayor valor ingresado de los tres nmeros, que previamente han sido
ingresados por parte del usuario.
Para esto desarrollemos una estrategia:

a) Como vemos, necesitaremos 3 variables numricas para el ingreso de los


datos. Las definimos como A, B y C. Para guardar el valor del mayor de
los valores ingresados, definiremos otra variable numrica a la que
denominaremos TMP (temporal).
b) Debemos determinar una forma racional de discriminacin (proceso que
permita escoger el mayor valor de los tres ingresados). Para esto,
utilizaremos las estructuras de control condicional que nos permitirn
implementar las condiciones que determinarn al mayor valor, las
preguntas que haremos son:
1. Es A<B? si la respuesta es verdadera, entonces el mayor valor de los
dos es B, si es falsa, entonces el valor de A es el mayor. Procederemos
a asignar en la variable TMP el valor que corresponda.
2. Ahora, ya tenemos el valor mayor entre A y B, asignado a la variable
TMP. Como pregunta final haremos la siguiente: Es TMP<C?, si es
verdadera la respuesta entonces asignaremos el valor de C a la
variable TMP.
3. Presentamos el mensaje que nos informar: El mayor valor que
usted ha ingresado es: y desplegaremos el valor de TMP.

4. Terminamos el proceso.

Observemos que haremos las operaciones de asignacin dependiendo de


la respuesta de la condicin que son:

TMP A

- 275 -
Tras los pasos de un... Hacker

TMP B

TMP C
De esta forma aseguramos que uno de los tres valores ingresados sern
asignados a la variable TMP, con la estructura de control condicional IF
THEN ELSE , implementamos las preguntas para hacer el proceso de
discriminacin racional de los datos, as tendremos la primera pregunta
como:
IF A<B THEN LET TMP=B ELSE LET TMP=A

La segunda pregunta quedar como:


IF TMP<C THEN LET TMP=C

Planteadas de esta forma las preguntas, no nos interesa el orden en que


sean ingresados los valores, siempre obtendremos el mayor asignado a la
variable TMP.

c) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o


mdulo).

d) Se nos pide finalmente mostrar un mensaje en la pantalla con el


resultado, utilizaremos el que ya definimos anteriormente: El mayor
valor que usted ha ingresado es: ;TMP

Definido el problema y esbozada la estrategia de solucin, elaboremos el


diagrama de flujo para este algoritmo, el mismo que puede ser:

- 276 -
Elaboracin de algoritmos con BASIC... Captulo VII.

Algoritmo para determinar el nmero mayor


de tres ingresados.

Inicio A
Presentaremos un mensaje
favor el primer
Ingrese por para que el usuario sepa que
tiene que ingresar el valor
del primer nmero (A).
nmero: A<B SI TMP B

Ingresaremos por teclado el


valor para el(A).
primer nmero TMP
NO A

Ingrese por Presentaremos un mensaje


para que el usuario sepa que
segundo tiene que ingresar
del segundo nmeroel valor
(B).
favor el

nmero:
Ingresaremos por teclado el TMP < C SI TMP C
valor para el segundo
nmero (B).
B NO

favor el tercer
por paradel tercer
que el ingresar
nmero
usuario (C).que
sepa Presentamos el resultado de
nmero:
Ingrese tiene que
Presentaremos un mensaje
el valor
MENSAJES la discriminacin racional de
los tres nmeros para
determinar el mayor, y los
presentaremos con el
mensaje El mayor valor que
Ingresaremos por teclado el usted ha ingresado es:;TMP
valor para el segundo Fin
nmero (C).
C

Observando que nuestro algoritmo est correctamente definido y esquematizado,


procederemos a codificarlo en BASIC.

Tendremos un programa parecido al siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 4. Ejemplo No. 64 del texto.
! Algoritmo para determinar el nmero mayor de tres ingresados.
! y desplegarlo en la pantalla.
!
! Autor: Nstor Marroqun.
!
! Frmulas:

- 277 -
Tras los pasos de un... Hacker

! Ninguna.
!
! Variables:
! A numrica, primer nmero a ser ingresado por el usuario.
! B numrica, segundo nmero a ser ingresado por el usuario.
! C numrica, tercer nmero a ser ingresado por el usuario.
! TMP numrica, variable temporal que almacenar el valor mayor.
!
! Funciones:
! Ninguna.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!
! Aqu empieza el proceso principal.

PRINT "Ingrese por favor el primer nmero:"; ! Presentamos un mensaje pidiendo


al usuario que ingrese los datos.
INPUT A ! Ingresa por teclado el valor de A.
PRINT "Ingrese por favor el segundo nmero:"; ! Presentamos un mensaje pidiendo
al usuario que ingrese los datos.
INPUT B ! Ingresa por teclado el valor de B.
PRINT "Ingrese por favor el tercer nmero:"; ! Presentamos un mensaje pidiendo
al usuario que ingrese los datos.
INPUT C ! Ingresa por teclado el valor de C.
IF A<B THEN LET TMP=B ELSE LET TMP=A
IF TMP<C THEN LET TMP=C
PRINT "El mayor valor que usted ha ingresado es:";TMP ! Presenta el valor mayor.
END ! Fin del algoritmo.

La lnea IF A<B THEN LET TMP=B ELSE LET TMP=A, tambin la podramos haber
codificado con las siguientes, el resultado es exactamente el mismo:

IF A<B THEN
LET TMP=B
ELSE
LET TMP=A

END IF

Les invito a que modifiquen el cdigo de este algoritmo y comprueben por si


mismos que la estructura:
IF A<B THEN LET TMP=B ELSE LET TMP=A

Es equivalente a:

- 278 -
Elaboracin de algoritmos con BASIC... Captulo VII.

IF A<B THEN
LET TMP=B
ELSE
LET TMP=A

END IF

Ahora, digitaremos este cdigo en nuestro entorno de programacin True BASIC


Bronze Edition.

A continuacin veremos la siguiente pantalla:

Ahora ejecutemos este algoritmo (programa) y veamos qu sucede?

Empezaremos ingresando el valor de A, luego el de B y finalmente el de C.

- 279 -
Tras los pasos de un... Hacker

Veremos la siguiente pantalla:

Al hacer un clic a esta pantalla, como en el caso anterior nuestro entorno de


desarrollo nos informar que el programa se ha ejecutado con xito.

Ejemplo 65. Algoritmo para resolver una ecuacin de hasta segundo grado con
una incgnita.

Ingresados por teclado los valores de los coeficientes (a, b y c) de una


ecuacin de la forma:

ax2+bx+c= 0
(Debemos tener en cuenta que una ecuacin de primer grado con una
incgnita, es un caso particular de esta forma de expresin, es decir cuando
el coeficiente a vale cero tendremos una ecuacin de la forma bx+c= 0).

Se pide realizar el algoritmo codificado en BASIC para que la computadora


calcule las soluciones de estas ecuaciones. Mostrar la ecuacin ingresada y
los resultados de las races, tambin si estas son imaginarias.

Para dar solucin a este problema, recordemos los mtodos de solucin que nos
han enseado (si el coeficiente a es cero), para el caso que la ecuacin tenga la
forma:

- 280 -
Elaboracin de algoritmos con BASIC... Captulo VII.

bx + c = 0

La incgnita (en este casox), ser despejada con la siguiente frmula:


x= -c/b

Para el caso en que el coeficiente a no es cero, la ecuacin toma la forma general


de una ecuacin de segundo grado con una incgnita:

ax2+bx+c=0

Entonces la incgnita (x), ser despejada con la siguiente frmula:


x= [(-b (b2-4ac))/a ]

Al valor (b2-4ac) se lo conoce como el discriminante de la ecuacin cuadrtica,


para efectos de saber si la ecuacin tiene soluciones reales o imaginarias
asignaremos este valor a una variable que la denominaremos d, entonces la
frmula quedar:

Primero calcularemos d=(b2-4ac), entonces las soluciones sern:

x1= [(-b + d )/ a ]

x2 = [(-b - d)/ a ]

Sid = 0 entonces la solucin es:


x=- (b / a)

Sid < 0 entonces las soluciones son dos nmeros imaginarios:

x1 = - b/a + (-d) / ai

x2= - b/a- (-d) / a i

Si d>0 entonces las soluciones son dos nmeros reales:


x1= - b/a + d / a

x2= - b/a - d / a

- 281 -
Tras los pasos de un... Hacker

Terminado nuestro anlisis del problema y tener esbozada la solucin,


identificamos que necesitaremos las siguientes variables de tipo numrico:

A, B y C para los coeficientes de la ecuacin.

D para calcular el discriminante.

X para almacenar la solucin de la ecuacin de primer grado, o cuando la


ecuacin de segundo grado tiene una sola solucin.

X1 para almacenar la primera solucin real.

X2 para almacenar la segunda solucin real.

Adems utilizaremos una funcin interna del BASIC que la identificamos como
SQR(X), raz cuadrada, que equivale a la expresin X ^ 0,5.

Nota del autor:


Revisando la gua de usuario de nuestro lenguaje de programacin (True BASIC), nos daremos
cuenta que existen algunas opciones que podemos utilizar con la instruccin PRINT para dar
formato a nuestra respuesta en cuanto tiene que ver a nmeros, valores monetarios y algunos
formatos para mensajes de texto, la forma de usar estas opciones viene dada por:

PRINT USING <FORMATO>: <LISTA DE VARIABLES>

Donde el valor de <FORMATO> puede ser una variable alfanumrica que contenga el formato a
presentar; o, directamente digitamos el formato entre comillas.

Las opciones para el formato son:

Para expresiones numricas:

# Cualquier dgito, completar al formato los ceros con espacios en blanco.

% Cualquier dgito, completar al formato los ceros con ceros.

* Cualquier dgito, completar los ceros con asteriscos.

$ Cualquier dgito, presentar al nmero como valor monetario.

+ Cualquier dgito, presentar el signo + si el nmero es positivo.

- 282 -
Elaboracin de algoritmos con BASIC... Captulo VII.

- Cualquier dgito, presentar el signo si el nmero es negativo.

^ Cualquier dgito, presentar el smbolo ^ a continuacin el nmero.

Para expresiones de texto o alfanumricas:

# Cualquier texto, centrar el mensaje en los caracteres especificados con #.

< Cualquier texto, justificar a la izquierda el texto entre los caracteres especificados con #.

> Cualquier texto, justificar a la derecha el texto entre los caracteres especificados con #.

Digiten el siguiente ejemplo de uso de estas expresiones de formato y veremos lo hace nuestro True
BASIC con la forma de presentar los datos:

LET X=023.507
LET Y=-005.001
PRINT USING "###.## ":X,Y
PRINT USING "%%%.%% ":X,Y
PRINT USING "***.** ":X,Y
PRINT USING "$###.## ":X,Y
PRINT USING "+###.## ":X,Y
PRINT USING "-###.## ":X,Y
PRINT USING "^###.## ":X,Y

LET A$="ESTA ES UNA PRUEBA DE FORMATO"


PRINT USING ">########################################":A$
"########################################":A$
"<########################################":A$

END

Procedemos ahora a realizar el diagrama de flujo para nuestra solucin del


problema planteado. La solucin propuesta quedara as:

- 283 -
Tras los pasos de un.. Hacker

Algoritmo para resolver una ecuacin


de hasta segundo grado de la forma
ax + bX + c = 0

"Programa que calcula la


solucin de una ecuacin de
hasta segundo grado."
"De la forma general
ax^2+bx+c=0, para ingresar
una de primergrado a=0."
"Ingresepor favor el primer
coeficiente (a)"

Ingresamos porteclado el
valor de A

"Ingrese por favor el


segundo coeficiente (b)"

Ingresamos porteclado el
valor de B

"Ingrese por favor el


segundo coeficiente (b)"
MENSAJE

Ingresamos porteclado el
valor de B
C -

Calculamos el valor del


| discriminante de la ecuacin
D BA2-4*A*C cuadrtica. (D)

A= 0 S| | X-C/B

NO
"La solucin de la ecuacin:
("b")x"" + ("c") - 0 6.S X

S| X-(112)(BIA) MENSAJE ="X

-------

NO
"La solucin de la ecuacin:
("a")x2""+("b")+("c")
= 0 esx="X
s. MENSAJE
NO

X1 -(B+SQR(D)/(2"A)
X2-(B-SQR(D)/(2"A)

"La ecuacin: ("a")xA2""+


/ MENSAJE ("b")X + ("c") 0"
-

"Tiene estas soluciones


y
imaginarias."

"La ecuacin: ("a")x^2""+ x1=-(112) (BA)+(11


("b")X + ("c") 0" -
2) sor-D)/AT
Tiene estassoluciones x2="-(112)(BIA)"-"(11
2) soR(-D)/A"i"
reales."
x1= x
"x2="X2

- 284 -
Elaboracin de algoritmos con BASIC... Captulo VII.

Observando que nuestro algoritmo est correctamente definido y esquematizado,


procederemos a codificarlo en BASIC.

Tendremos un programa parecido al siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 5. Ejemplo No. 65 del texto.
!
! Algoritmo para resolver una ecuacin de hasta segundo
! grado de la forma ax^2+bx+c=0.
!
! Presenta los resultados reales e imaginarios.
!
! Autor: Nstor Marroqun.
!
! Si a=0 es de primer grado:
Frmulas: x = -c/b

!
! Si b^2-4*a*c = 0 la ecuacin solo tiene una solucin.
!
! Si b^2-4*a*c < 0 entonces la ecuacin tiene soluciones
! imaginarias.
!
! Si b^2-4*a*c >0 entonces la ecuacin tiene soluciones reales.
! x1 = (-b+sqr(b^2-4*a*c))/(2*a)
! x2 = (-b-sqr(b^2-4*a*c))/(2*a)
!
! Variables: Ingresadas por el usuario:

! A numrica, primer coeficiente de la ecuacin.


! B numrica, segundo coeficiente de la ecuacin.
! C numrica, elemento independiente de la ecuacin.
!
! Calculadas en el proceso:
! D numrica, discriminante de la solucin.
! X numrica, resultado si la ecuacin tiene una
! solucin o es de primer grado.
! X1 numrica, primera solucin de la ecuacin.
! X2 numrica, segunda solucin de la ecuacin.
!
! Funciones: Ninguna.

! Usaremos la funcin interna SQR() raz cuadrada.


!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

- 285 -
Tras los pasos de un... Hacker

!
! Aqu empieza el proceso principal.

! Presentamos un mensaje informando al usuario lo que hace el programa.


PRINT "Programa que calcula la solucin de una ecuacin de hasta segundo grado."

PRINT "De la forma general ax^2+bx+c=0, para ingresar una de primer grado a=0."

PRINT
! el
Presentamos
primer
"Ingrese
coeficiente
un
por
mensaje
favorde
pidiendo
ella
primer
ecuacin
al
coeficiente
usuario
(a). que ingrese
(a):";

INPUT A

PRINT
! el
Presentamos
segundo
"Ingrese
coeficiente
un
por
mensaje
favor el
pidiendo
de la ecuacin
segundo
alcoeficiente
usuario
(b). que(b):";
ingrese

INPUT B

PRINT
! Presentamos
el trmino
"Ingreseindependiente
un
por
mensaje
favor pidiendo
elde
trmino
la ecuacin
alindependiente
usuario
(c).
que ingrese
(c):";

INPUT C

! Calculamos el discriminante de la solucin.


LET D = B^2-4*A*C
PRINT

! Empezamos el proceso de validacin de la ecuacin para ver


! si es de primer o segundo grado.
IF A=0 THEN
! La ecuacin es de primer grado.
LET X = -C/B
PRINT
ELSE "LaTHEN
IF D=0 solucin de la ecuacin: (";b;")x";" + (";c;") = 0 es x =";X

! La ecuacin de segundo grado tiene una solucin.


LET X=-(1/2)*(B/A)
PRINT "La solucin de la ecuacin: (";a;")x^2";" + (";b;")x + (";c;") = 0 es x
=";X
ELSE IF D<0 THEN

! La ecuacin tiene soluciones imaginarias.


PRINT "La ecuacin: (";a;")x^2";" + (";b;")x + (";c;") = 0"
PRINT
PRINT "Tiene estas soluciones imaginarias..."

PRINT "x1 =";-(1/2)*(B/A);" +";(1/2)*SQR(-D)/A;"i"


PRINT "x2 =";-(1/2)*(B/A);" -";(1/2)*SQR(-D)/A;"i"
ELSE
! La ecuacin tiene soluciones reales.
PRINT "La ecuacin: (";a;")x^2";" + (";b;")x + (";c;") = 0"
PRINT
PRINT "Tiene estas soluciones reales..."

PRINT "x1 = ";-(B+SQR(D))/(2*A)


PRINT "x2 = ";-(B-SQR(D))/(2*A)
END IF

- 286 -
Elaboracin de algoritmos con BASIC... Captulo VII.

END ! Fin del proceso.

Ahora procedamos a ejecutar el programa digitado.

Los valores de prueba sern los coeficientes (a, b y c) para encontrar las
soluciones para las siguientes ecuaciones:

1. x 3 = 0 (a = 0, b = 1 y c=-3)

2. x2 - 9 = 0 (a = 1, b = 0 y c=-9)

3. x2 + 4 = 0 (a = 1, b = 0 y c=4)

4. x2 + 3x + 1 = 0 (a = 1, b =3 y c= 1)

5. x2 + 18x +81 = 0 (a = 1, b = 18 y c=81)

6. x2 + x +1 = 0 (a = 1, b = 1 y c= 1)

7. 7x2 + 23x + 6 = 0 (a =7, b = 23 y c= 6)

Les invito a encontrar la solucin de estas ecuaciones a mano, para


posteriormente verificar los resultados que obtiene nuestro programa.

Tambin si ustedes quieren experimentar con las opciones de la instruccin PRINT


USING que les he comentado su uso; les propongo, cambien el cdigo para que
nuestras respuestas estn expresadas con 2 decimales. Tambin hagan que la
expresin de la ecuacin no tenga los parntesis que he puesto para los
coeficientes, es decir, que exprese el signo + o el signo segn corresponda en la
ecuacin original.

Muy bien, ahora verifiquemos el programa, al correrlo (ejecutarlo), tendremos la


siguiente pantalla:

- 287 -
Tras los pasos de un... Hacker

Ingresemos los datos de prueba para la primera ecuacin:


(a = 0, b = 1 y c=-3)

Como podemos observar, la respuesta para la incgnita x, es correcta.

Vamos con los siguientes datos y a medida que obtengamos los resultados, los
compararemos con los que hemos obtenido a mano. Tendremos las siguientes
pantallas para todas las soluciones:
(a = 1, b = 0 y c=-9)

- 288 -
Elaboracin de algoritmos con BASIC... Captulo VII.

(a = 1, b = 0 y c=4)

(a = 1, b =3 y c= 1)

(a = 1, b = 18 y c=81)

- 289 -
Tras los pasos de un... Hacker

(a = 1, b = 1 y c= 1)

(a =7, b = 23 y c= 6)

Con estos ejemplos y lo que hemos aprendido hasta ahora, podemos ya realizar
sencillos programas que nos ayudarn en ciertos clculos simples como los
expuestos.

- 290 -
Elaboracin de algoritmos con BASIC... Captulo VII.

EJERCICIOS PROPUESTOS:

Elaborar los algoritmos solicitados para resolver cada uno de los siguientes
problemas:
Se quiere utilizar la computadora para transformar medidas de
Ejercicio 241.
capacidad de litros a galones. Se ingresar por teclado el valor de los litros a
transformar. Presentar en pantalla los resultados.
Se quiere utilizar la computadora para calcular el permetro y el rea
Ejercicio 242.
de una circunferencia. Se ingresar por teclado el valor del radio. Presentar en
pantalla los resultados.
Se quiere utilizar la computadora para obtener la equivalencia en
Ejercicio 243.
mltiplos y submltiplos de una cantidad en metros que se ingresar por teclado.
Presentar en pantalla los resultados. (Consultar el Sistema Internacional de
Unidades para obtener las frmulas a convertir).
Se quiere utilizar la computadora para calcular el permetro y la
Ejercicio 244.
hipotenusa de un tringulo rectngulo. Se ingresar por teclado el valor de los
catetos. Presentar en pantalla los resultados. (Revisar el teorema de Pitgoras).
Se quiere utilizar la computadora para calcular el rea de un tringulo.
Ejercicio 245.
Se ingresar por teclado el valor de los lados del tringulo. Presentar en pantalla
los resultados. El programa debe determinar si el tringulo existe.

Utilizar las frmulas:


Area = (SPerimetro*(SPerimetro-Lado1)*(SPerimetro-Lado2)*(SPerimetro-Lado3))^0.5
SPerimetro = (Lado1 + Lado2+ Lado3)/2

Donde:
Area representar al rea del tringulo.
SPerimetro ser el semipermetro del tringulo.
Lado1 ser el primer lado del tringulo.
Lado2 ser el segundo lado del tringulo.
Lado3 ser el tercer lado del tringulo.

Ejercicio 246. Se quiere utilizar la computadora para calcular el inters simple o

- 291 -
Tras los pasos de un... Hacker

compuesto que genera un capital. Se ingresarn por teclado el valor del capital,
el inters anual y el periodo de tiempo. Presentar en pantalla los resultados.

Utilizar la computadora para resolver un sistema de 2 ecuaciones de


Ejercicio 247.
primer grado con dos incgnitas, los coeficientes se ingresarn de la forma
expresada en el sistema general:

a1x + b1y + c1 = 0

a2x + b2y + c2 = 0

Obtener una frmula general para calcular los valores de x e y que resuelven el
sistema. (Mtodo de sustitucin de incgnitas).

Utilizar la computadora para que de 4 nmeros ingresados, la misma


Ejercicio 248.
determine el mayor, el menor y calcule su sumatoria. Presentar en pantalla los
resultados.

Utilizar la computadora para calcular el rea y el permetro de un


Ejercicio 249.
rectngulo pero sus dimensiones son restringidas. La base oscilar entre 0 y
1.248, la altura de 0 a 1.000. El algoritmo debe validar el ingreso de los datos,
calcular si los datos cumplen los requisitos, caso contrario nos informar que los
datos estn fuera del rango permitido.

Utilizar la computadora para calcular la depreciacin de un bien, si


Ejercicio 250.
sabemos que el ndice de depreciacin es de 0,01% por mes. Qu cantidad se
recibe en la venta del mismo transcurrido un tiempo x?

- 292 -
Elaboracin de algoritmos con BASIC... Captulo VII.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Elaboracin de Algoritmos con BASIC, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- LGEBRAELEMENTAL MODERNA, M. O. Gonzlez J. D. Mancill, Editorial


KAPELUSZ, Publicado en Buenos Aires Argentina, 1.962.
- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las
Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- Fsica General, Francis W. Sears Mark W. Zemansky, Aguilar S.A. de
ediciones 1.9571.974, Publicado en MadridEspaa, 1.974.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot
Colombia, 1.984.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- MSX DISK BASIC Reference Manual, SPECTRAVIDEO INTERNATIONAL
LTD., Hong Kong, 1.985.
- QL PROGAMACIN EN SUPERBASIC, Roy Atherton, MicroTextos S.A. de
ediciones, Madrid Espaa, 1.985.
- Programacin Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRCTICA DE LA INFORMTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid Espaa, Octubre de 1.986.
- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y
BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte Amrica, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim Repblica Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,
Publicado en los Estados Unidos de Norte Amrica, 1.990.

- 293 -
Tras los pasos de un... Hacker

- Programacin en C, Byron S. Gottfried, McGraw Hill / Interamericana de


Espaa S.A., Madrid Espaa, 1.991.
- Microsoft MASM, Assembly Language Development System Version 6.1.,
Microsoft Corporation 1.987, 1.991, 1.992 U.S. Patent No. 004955066,
Estados Unidos de Norte Amrica, 1.992.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte Amrica, 1.993.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.
- Organizacin y diseo de computadores La interfaz hardware /
software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- The YOU Based LABORATORY, TI-CBL EXPLORATIONS in Science and
Mathematics, Margo L. Mankus Frank Wattenberg, Weber State
University 1.996, Publicado por True BASIC Inc., 1.996.
- Lets Program It in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte Amrica, 1.996.
- Programming for ENGINEERS in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte Amrica, 1.996.
- True BASIC Bronze Edition, Users Guide, John G. Kemeny Thomas E.
Kurtz, True BASIC Inc. 2.001, Publicado en los Estados Unidos de Norte
Amrica, 2.001.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 294 -
INTRODUCCIN (VIII)

Pasada esta etapa de crisis, tanto fsica como emocional, empiezo a trabajar
ayudando al importador que nos haba vendido la computadora; entonces tuve a
mi alcance el material (HARDWARE) para conocer un poco ms del
funcionamiento de las computadoras, las armaba, las configuraba y las probaba
para que sean vendidas sin problemas; es as, que la fama de buenos
computadores que venda el jefe creci y el negocio tambin creci, este periodo
de tiempo lo aprovechaba para seguir a distancia mis estudios de programacin
(que los segua con el material que me fuera enviado desde True BASIC Inc., a
travs de mis amigos en Nueva York). Dominadas las tcnicas de programacin,
as como haber desarrollado un sistema para el control de inventarios de un
almacn de repuestos automotrices, decido que el trabajo de armar y desarmar
computadoras haba cumplido su objetivo formativo en mi carrera, agradeciendo
al Sr. Paz por la oportunidad, le menciono que debo seguir mis estudios en la
universidad para terminar mi carrera como Ingeniero en Sistemas.
En ese tiempo, la ESPE no ofertaba la carrera de Ingeniera en Sistemas (adems
que no quera saber nada de militares, pero tena la facilidad de ingresar al
siguiente nivel donde haba dejado mis estudios dos aos atrs). La Pontificia
Universidad Catlica del Ecuador (PUCE), haba creado justamente para el ao de
1.992 la carrera de Ingeniera en Sistemas, entonces decido someterme a los
exmenes de ingreso y como no era de otra manera mi nombre constaba como
alumno admitido al preuniversitario. No tocaba de otra, ya que no exista el
primer nivel como para pedir convalidacin de estudios.

Aprobamos este nivel sin contratiempos. Para el primer nivel de la carrera,


coincidencialmente el Lcdo. Ricardo Ortega Ortega, fuera designado profesor
para mi curso en una de las materias que contemplaba la carrera de ingeniera,
apenas supe de esta noticia, vino a mi mente la gua de programacin BASIC que
mito la estudiara haca aproximadamente 10 aos, por fin lo tena frente a m, al
hombre que lo admiraba por su talento y fama como programador (para m, era
el gur de la computacin de aquel tiempo en Ecuador) y trataba de emular los
programas que gratuitamente los distribua, pero sus tcnicas de programacin
eran mucho ms avanzadas que las mas.

- 295 -
Tras los pasos de un... Hacker

Recuerdo una reunin acadmica suscitada en la oficina particular que tena el


profesor Ortega, al solicitarle que comedidamente me explicara cmo se haca
para presentar los famosos pop up? (mensajes de texto desplegados en un solo
cuerpo a manera de aviso, de uso para el despliegue de mens y mensajes de
alerta al usuario en los programas de aquel entonces, ambiente DOS), solo
recuerdo que busc algn documento en su escritorio, me lo entreg y me dijo
framente investiga!
No me explic absolutamente nada de lo que quera aprender, no tena ni idea de
lo que trataba el texto que me haba entregado en la hoja; as que, decepcionado
por el trato (posteriormente entendera que para emular a un buen Hacker, no
existen guas, no existen tutores, uno mismo investiga y es el tutor de s mismo),
nunca ms insist para que me explicara algo que estaba por fuera del pensum
acadmico de la carrera. En este nivel estudiaramos para variar programacin
BASIC, tambin habra aprendido LOGO, posteriormente PASCAL. El nivel
acadmico programado para la carrera me pareca bajo. Me pasaba horas y horas
de clase corrigiendo a algunos de mis profesores la materia que estaban
impartiendo, lo que motiv que me promovieran de nivel, pero para que ya no
asista ms a sus clases. Me di cuenta que estaba perdiendo el tiempo y con la
supuesta cercana de terminar mis estudios a distancia de programacin por
parte de un instituto en los Estados Unidos de Norte Amrica, decido dejar la
universidad y seguir el consejo de mi profesor, investigar por mi mismo todos los
temas relacionados a la programacin de computadoras y diseo de sistemas.

Transcurra la segunda mitad del ao de 1.992 e investigando algo de


programacin en lenguaje ensamblador (habra adquirido una copia no
autorizada de un producto de la firma Microsoft Corp., denominado MASM,
Microsoft Assembly Language, donde de los manuales tcnicos del producto,
como de los de mi True BASIC, podra implementar rutinas que invoquen los
servicios del mismo Sistema Operativo (DOS) como de la ROMBIOS, con este
material al fin entend las rutinas programadas en lenguaje ensamblador para mi
antigua Spectravideo, posteriormente con los recursos suficientes en 1.993
comprara el paquete original del MASM), por fin haba implementado una
funcin que me permitira presentar los pop up de una forma profesional al
incorporar la funcin que me la sugiriera el profesor Ortega a mi True BASIC que
hara el llamado a una interrupcin de la ROMBIOS, la conocida como INT 10h
(servicios de video) e invocando correctamente a las subrutinas de este servicio,
consegua que mi programa de inventarios tenga por fin un aspecto profesional,

- 296 -
La historia... Introduccin (VIII).

lo bautic con el nombre de SARC (Sistema Administrador de Recursos


Comerciales), con el cual conseguira fundar mi empresa personal a la que la
denomin NMC Research y bajo este nombre comercial, mis programas
empezaron a venderse

Ahora aprendamos un poco ms de las tcnicas de programacin, para continuar


contndoles en la prxima seccin cmo? y cundo? conoca un Hacker

- 297 -
Tras los pasos de un... Hacker

- 298 -
CAPTULO VIII. BUCLES, FUNCIONES Y SUBRUTINAS
CON BASIC

8.1. ITERACIONES Y BUCLES

8.1.1 BUCLES DETERMINADOS E INDETERMINADOS

Definidas anteriormente las estructuras de control iterativo, vamos a explicar con


ms profundidad este tema de los lazos o bucles.

Dependiendo de conocer de antemano cuntas veces vamos a repetir el


proceso? tendremos como explicamos anteriormente, en primer lugar los bucles
determinados, es decir aquellos que repetirn un proceso "n veces" y el valor de n
es conocido; por el contrario, cuando no conocemos a ciencia cierta el valor de n,
entonces nuestro bucle ser indeterminado y el fin del proceso iterativo estar
condicionado a un evento especfico dentro de la estructura de control iterativa.

Los usos ms comunes para los bucles determinados son: cuando tenemos que
realizar el ingreso de datos de una matriz de orden n x m, cuando tenemos que
evaluar una serie numrica, una progresin sea esta aritmtica o geomtrica,
cuando tenemos que realizar algn proceso de simulacin y el valor de una
funcin depende de iterar los valores de una variable, etc.

Las variables ms comunes para usarlas como contadores de control de los


bucles son i,j, k..., estos valores han sido tomados de la matemtica ya que los
subndices de las matrices precisamente son i y j.

Los bucles indeterminados los usaremos cuando tengamos que repetir un


proceso y este depender de la respuesta que d el usuario o de una condicin
que puede darse dentro del bucle, por ejemplo: una divisin para cero y no
desearamos que este error detenga la ejecucin de nuestro programa.

- 299 -
Tras los pasos de un... Hacker

8.1.2 BUCLES ANIDADOS


En programacin podemos tener bucles que repitan bucles, a este uso especial de
esta estructura de control se la conoce como anidar bucles o bucles anidados, su
uso ms frecuente es al ingresar valores en una matriz, realizar clculos
matriciales y presentar los valores de la misma.
En el estilo de programacin estructurada, encontraremos por lo general a los
bucles anidados (bucles determinados) codificados en BASIC como:

FOR I=1 TO N
FOR J=1 TO M
PROCEDIMIENTO
NEXT J
NEXT I

Debemos tener en cuenta que el fin de un bucle anidado debe preceder al cierre
del bucle principal.
El mismo concepto se lo puede tener con bucles indeterminados, es decir, los
procesos que se repetirn hasta que se produzca alguna condicin para que
terminen, de la misma forma los veremos codificados en BASIC con cualquiera de
las estructuras de control iterativo definidas para este propsito, por ejemplo:

DO
DO
PROCEDIMIENTO
LOOP UNTIL <CONDICIN 1>
LOOP UNTIL <CONDICIN 2>

Tambin,
DO
DO
PROCEDIMIENTO
LOOP WHILE <CONDICIN 1>
LOOP WHILE <CONDICIN 2>

En la prctica se pueden anidar bucles determinados dentro de bucles


indeterminados y viceversa.

- 300 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

EJERCICIOS RESUELTOS:

Algoritmo para presentar los 10 primeros nmeros. Implementar


Ejemplo 66.
un algoritmo que use una estructura de control iterativa y presente por
pantalla lo siguiente:

Nmeros del 1 al 10"

"Nmero 1"

"Nmero 2"

...

"Nmero 10"

En este caso; y, como condicin del problema es usar una estructura de control
iterativa, aunque parezca trivial, es decir, presentar 10 veces un mensaje, lo que
perseguimos con este ejercicio es mostrar el uso de esta estructura de control.
Posteriormente veremos que podemos tener dentro del bucle un proceso ms
complicado; entonces, como sabemos, procederemos a tomar nota del ms
simple de los detalles que tenemos que implementar en nuestros programas o
algoritmos, en este caso vemos que:
a) En el problema a resolver no existe ninguna frmula a aplicar.

b) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o


mdulo).

c) Se nos pide simplemente mostrar diez veces un mensaje en la pantalla


que diga: Nmero"; x

As que, elaboremos el diagrama de flujo para este algoritmo.

- 301 -
Tras los pasos de un... Hacker

Algoritmo para
presentar los 10
primeros nmeros.
Inicio

Desplegaremos la frase:
Nmeros del 1 al 10

MENSAJE

Repetir
I=1
a
10
Desplegaremos el mensaje:
Nmero;I

MENSAJE

I = I +1

Fin

Ahora que sabemos que funciona la lgica del algoritmo y que realiza
correctamente lo que deseamos, codifiquemos este algoritmo en BASIC.
El resultado ser la siguiente definicin algortmica implementada en un lenguaje

- 302 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

de programacin:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 6. Ejemplo No. 66 del texto.
! Algoritmo que presenta los 10 primeros nmeros.
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.
!
! Variables:
! I, Contador numrico entero.
!
! Funciones: Ninguna.

!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

!
! Aqu empieza el proceso principal.

! Presentamos un mensaje informativo.


PRINT "Nmeros del 1 al 10"

FOR I=1 TO 10
! Presentamos los nmeros uno a uno.
PRINT "Nmero";I
NEXT I

! Fin del algoritmo.


END

Ahora, podemos digitar este cdigo en nuestra versin BRONZE del True
BASIC para ver lo que sucede.

Tendremos la siguiente pantalla, una vez digitado el programa:

- 303 -
Tras los pasos de un... Hacker

Como vemos el procedimiento que contiene el bucle, al dar formato al programa,


usando la opcin DO FORMAT de nuestro True BASIC, observamos que las lneas
que corresponden al proceso anidado tendrn una sangra, esto es lo que se
conoce como dar estilo al programa. Esta prctica es importante porque
visualmente se pueden identificar las diferentes estructuras de control.

Ahora ejecutemos el programa y veamos lo que hace, observaremos una pantalla


parecida a esta:

- 304 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Al dar un clic sobre esta pantalla, veremos que nuestro True BASIC nos informa
que el programa se ha ejecutado con xito (Run successfully).

Algoritmo para hallar el mayor de n nmeros ingresados.


Ejemplo 67.

Implementar un algoritmo que use una estructura de control iterativa y


determine el mayor valor de n nmeros ingresados.
En este caso y como condicin del problema es usar una estructura de control
iterativa, como veremos en este caso el problema se puede resolver utilizando
tanto estructuras de control iterativas determinadas como estructuras de control
iterativas indeterminadas. Como sabemos, observamos que:
a) En el problema a resolver no existe ninguna frmula a aplicar.

b) No existe ningn proceso especial que desarrollar. (Funcin, subrutina o


mdulo).

c) Se nos pide ingresar n nmeros y determinar el mayor, podra ser


presentando el siguiente mensaje: Nmero mayor ingresado de"; n;
nmeros es:;mayor.

Definamos un procedimiento para resolver este problema.

- 305 -
Tras los pasos de un... Hacker

a) Inicio.
b) Inicialicemos las variables a usar, en este caso necesitaremos un contador
numrico (I), una variable para que el usuario ingrese los nmeros
(NUMERO), variable para contener el nmero mayor ingresado (MAYOR),
esta variable MAYOR ser inicializada con el valor numrico ms pequeo
que en este caso manejar nuestro True BASIC (utilizaremos la funcin
interna del True BASIC: MAXNUM para obtener este valor).

c) Pedimos al usuario que nos diga cuntos nmeros se van a evaluar.

d) Validaremos que este valor sea mayor que cero.

e) Se ingresarn uno a uno los nmeros y cada vez se almacenar este valor
ingresado en la variable NUMERO.

f) Compararemos el valor de NUMERO con el valor de MAYOR, si NUMERO


es mayor o igual que MAYOR, entonces MAYOR ser asignado con el valor
de NUMERO.

g) Terminado el ingreso de datos, presentaremos el mayor valor ingresado.


h) Fin.

Comprobado que nuestro procedimiento funciona, elaboremos el diagrama de


flujo para este algoritmo.

- 306 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Algoritmo para hallar


el mayor de n
nmeros ingresados.
Inicio

Inicializamos variables.
N
I00

NUMERO 0
MAYOR -MAXNUM Presentamos un mensaje
que diga: Programa que
determina el mayor de n
nmeros ingresados.
MENSAJE

"Cuntos nmeros vamos a


evaluar:"

MENSAJE

NO
N

N>0

SI

Repetir
I=1
a
N "Favor ingrese el";I; "valor:"

MENSAJE

NUMERO

NUMERO>=MAYOR SI MAYOR NUMERO

NO

I = I +1
"El nmero mayor que ha
ingresado es:";MAYOR

MENSAJE

Fin

- 307 -
Tras los pasos de un... Hacker

Ahora codifiquemos nuestro algoritmo en BASIC, obtendremos un programa


parecido al siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 7. Ejemplo No. 67 del texto.
! Algoritmo para hallar el mayor de n nmeros ingresados.
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables:
! N, Cantidad de nmeros a ingresar.
! I, Contador numrico entero.
! NUMERO, Variable numrica para el ingreso de datos.
! MAYOR, Variable numrica para determinar el mayor.
!
! Funciones: MAXNUM, Funcin interna del True BASIC.

! Que retorna el valor del nmero mximo que maneja el lenguaje.


! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

!
! Aqu empieza el proceso principal.

! Inicializamos variables.
LET I,N,NUMERO=0
LET MAYOR=-MAXNUM
! Presentamos un mensaje informativo.
PRINT "Programa que determina el mayor de n nmeros ingresados."

! Validamos que se ingrese un valor mayor que 0.


! Para esto utilizamos un bucle indeterminado DO ... LOOP.
DO
PRINT N
INPUT "Cuntos nmeros vamos a evaluar:";

Utilizamos
LOOP
! un bucle determinado para el ingreso de n nmeros.
until N>0

FOR I=1 TO N
! Ingresamos el nmero n.
PRINT "Favor ingrese el ";I; "valor :";
INPUT NUMERO
! Siempre obtendremos en MAYOR el valor mayor ingresado.
IF NUMERO >= MAYOR THEN
LET MAYOR = NUMERO
END IF
NEXT I
PRINT

- 308 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

! Presentamos el mayor valor obtenido.


PRINT "El nmero mayor que ha ingresado es:";MAYOR
! Fin del algoritmo.
END

Para conservar el formato estructurado, procedamos a ejecutar un DO FORMAT


con esto visualmente observaremos que tenemos correctamente definidas las
estructuras de control.

Miremos si las sangras ingresadas, cierran correctamente en cada estructura de


control, los bucles DO deben cerrar con su respectivo LOOP, este cierre debe
estar a la misma altura del inicio del bucle, los FOR... NEXT, los IF THEN
ELSE ENDIF. Verificado, entonces tendremos la siguiente pantalla:

- 309 -
Tras los pasos de un... Hacker

Ejecutemos nuestro programa para ver lo que hace, obtendremos algo as:

Como vemos, el uso de un bucle indeterminado al validar el ingreso de la variable


N, produce que el algoritmo avance si se ingresa un valor mayor a cero, mientras
no se satisfaga esta condicin, el programa no avanza y permanecer pidiendo el
correcto ingreso de datos.

Ahora, definimos con un bucle determinado que repita el ingreso de datos y el


proceso de comparacin para determinar si el valor ingresado es mayor que el
almacenado en la variable MAYOR, recordemos que cuando inicializamos a esta
variable, asignamos el valor ms pequeo que puede procesar nuestro True
BASIC, usando la funcin MAXNUM pero hacindolo negativo, es decir, MAXNUM
retorna el valor 1,7976931e+308, al hacerlo negativo, almacenar el valor
-1,7976931e+308 que precisamente es el menor valor que puede ser almacenado
en una variable numrica en True BASIC. Si el valor de NUMERO es mayor o
igual al de MAYOR, asignaremos el valor de NUMERO a la variable MAYOR, de
esta forma, no importa cuntos nmeros ingresemos, siempre obtendremos en
MAYOR el valor mayor ingresado.

Finalmente terminada la iteracin, presentamos el mayor valor ingresado


(contenido en la variable MAYOR).

Ejemplo 67A. Otra solucin un poco ms complicada.

- 310 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Ahora, variemos un poco el algoritmo y cdigo digitado para no usar el bucle


determinado (FOR NEXT). Instrumentemos el mismo programa pero solo
usando bucles indeterminados. Para esto, usaremos una variable especial que en
programacin se la conoce como variable bandera, la misma que nos sirve para
decirle al bucle indeterminado que termine.

Otro detalle que para hacerlo y conseguir el mismo objetivo, usaremos variables
tipo string para el ingreso de los datos, las mismas que sern convertidas en
numricas para determinar el mayor valor ingresado.

Nuestro proceso terminar cuando sea ingresada la palabra FIN, para lograr
esto utilizaremos algunas de las funciones internas que ya conocemos y estn
definidas en True BASIC. (Revisar su libro de gua del lenguaje.)

Tambin a partir de este instante y no porque no sepamos, queda como tarea de


cada clase, que ustedes esquematicen los diagramas de flujo de los algoritmos
que seguiremos explicando.

Asvariaremos el algoritmo por el siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 7 - A. Segunda codificacin.
! Ejemplo No. 67 del texto.
!
! Algoritmo para hallar el mayor de n nmeros ingresados.
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.

! Variables:
! NUMERO$,
FLAG,
I, Variable
Contador
Variable string
numrico
bandera. para el ingreso de datos.
entero.

! NUMERO, Variable numrica para comparar datos.


! MAYOR, Variable numrica para determinar el mayor.
!
! Funciones: MAXNUM, Funcin interna del True BASIC.

! Que retorna el valor del nmero mximo que maneja el lenguaje.


! UCASE$, Funcin interna del True BASIC.
! Que retorna transformada en maysculas el valor
! de la variable string ingresada.
! VAL, Funcin interna del True BASIC.

- 311 -
Tras los pasos de un... Hacker

! Que transforma en nmeros el valor


! de la variable string ingresada, si estos son nmeros.
!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

!
! Aqu empieza el proceso principal.

! Inicializamos
LET I=1 variables.

LET FLAG,NUMERO=0
LET MAYOR=-MAXNUM
! Presentamos un mensaje informativo.
PRINT "Programa que determina el mayor de n nmeros ingresados."

! Ingresamos los valores a procesar.


! Para esto utilizamos un bucle indeterminado DO ... LOOP.
DO
! Ingresamos el nmero n.
PRINT "Favor ingrese el ";I; "valor :";
INPUT NUMERO$
WHEN ERROR IN
NUMERO=VAL(NUMERO$)
LET I=I+1

! Siempre obtendremos en MAYOR el valor mayor ingresado.


IF NUMERO >= MAYOR THEN
LET MAYOR = NUMERO
END IF
USE
IF UCASE$(NUMERO$)="FIN" THEN
LET FLAG=1
LET I=I-1
END IF
END WHEN
LOOP UNTIL FLAG=1
PRINT
! Presentamos el mayor valor obtenido.
PRINT
! Fin del
"El algoritmo.
nmero mayor que ha ingresado es:";MAYOR;" de";I;" ingresados..."

END

Digitado este cdigo en nuestro True BASIC, obtendremos la siguiente pantalla:

- 312
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Ejecutemos el programa y verifiquemos lo que hace:

- 313 -
Tras los pasos de un... Hacker

Al hacer clic en esta pantalla, otra vez True BASIC nos informar que el programa
se ha ejecutado correctamente (Run successfully)

Nota del autor:


En esta codificacin, por la complejidad de manejar nmeros expresados en variables string,
True BASIC, para el control de posibles errores (y nosotros al usar strings como nmeros),
incorpora una estructura de control para el manejo de errores que est definida como:

WHEN ERROR IN
< PROCEDIMIENTO A CONTROLAR EL ERROR >
USE
< PROCEDIMEINTO QUE SOLVENTA EL ERROR >
END WHEN

Para ms detalles revisen la gua de uso del lenguaje sobre esta estructura de control propia de
True BASIC. En otros lenguajes de programacin tambin existe su equivalente, tienen que
revisar los captulos relacionados a control y manejo de errores.

En los diagramas de flujo, podremos definir a esta estructura con un solo proceso que puede
llamarse control de errores y dentro de este proceso diagramar los pasos a tomar.

8.2 FUNCIONES

Una funcin es un procedimiento especial que nos ayudar a realizar clculos de


una manera abreviada al invocarse la funcin desde un programa, o al evaluarse
una expresin que use la funcin definida.

En todos los lenguajes de programacin se pueden definir funciones.

Una caracterstica de las funciones, es que no cambian el valor de los argumentos


ingresados (parmetros). Trabaja con los valores de los argumentos, los procesa
y devuelve el valor del proceso definido con el nombre de la funcin.

Normalmente, las funciones devuelven los mismos tipos de datos que tienen los
argumentos, es decir, si los argumentos son numricos, la funcin devolver un
valor numrico, si los parmetros son de tipo string la funcin debera devolver
igualmente datos de tipo string; con todo, esto depende del nombre y tipo de
dato que bauticemos a nuestra funcin y de los parmetros que ingresarn a la
misma.

- 314 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Otro detalle importante y que no debemos olvidar es que las funciones tambin
son algoritmos, pero definidos para trabajar cuando sean invocados para la
evaluacin de una expresin informtica o desde un programa.

En True BASIC, las funciones se definen de la siguiente manera:

FUNCTION <NOMBRE DE FUNCIN


< PROCEDIMIENTO > (PARMETROS)>

END FUNCTION

Ahora para la invocacin de la funcin desde el programa, en la seccin de


inicializacin de variables y procedimientos, generalmente al principio de cada
programa, funcin o subrutina, debemos declarar este procedimiento como:

DECLARE FUNCTION <NOMBRE DE FUNCIN>

Para ilustrar el uso de una funcin en True BASIC, hagamos por ejemplo,
funciones a los procedimientos de nuestro programa del ejemplo 63 y definamos
de esta forma los clculos de la superficie y volumen de una esfera.

EJERCICIOS RESUELTOS:

Algoritmo para calcular la superficie y volumen de una esfera


Ejemplo 68.
usando funciones. Implementar las funciones para el clculo de la
superficie y volumen de una esfera.
En este ejemplo, tenemos que utilizar dos frmulas de clculo, adems debemos
instrumentar las funciones y los valores resultantes como se pide.
Desplegaremos los resultados.

Ahora, tomamos nota del problema:


a) En este ejercicio, tendremos que usar las frmulas definidas para el
clculo de la superficie y el volumen de una esfera, estas frmulas las
implementaremos como funciones independientes del programa

- 315 -
Tras los pasos de un... Hacker

teniendo como parmetro o argumento de la funcin el valor del radio de


la misma, las frmulas a aplicar son:
S = 4 x x r2
V=4/3 xxr3
Siendo las variables r, SyV de tipo numrico.
b) Ahora tenemos que implementar las funciones ESF_SUPERFICIE y
ESF_VOLUMEN. Estas sern de tipo numrico.
c) Se nos pide finalmente mostrar un mensaje en la pantalla con los
resultados.

Definido el problema y esbozada la estrategia de solucin, definamos las


funciones como:
FUNCTION ESF_SUPERFICIE(R)
! Se calcula el valor de la superficie de una esfera.

LET ESF_SUPERFICIE = 4*PI*R^2


END FUNCTION
FUNCTION ESF_VOLUMEN(R)
! Se calcula el valor del volumen de una esfera.
LET ESF_VOLUMEN = 4/3*PI*R^3
END FUNCTION

Debemos recordar que para devolver el valor calculado, debemos asignar a la


funcin el valor obtenido antes de terminar el proceso, caso contrario la funcin
nos devolver cero como resultado.

Ahora codifiquemos el programa principal como:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 8. Ejemplo No. 68 del texto.
! Algoritmo que calcula la superficie y el volumen de una
! esfera, ingresando como dato el valor del radio de la
! misma. Presenta los resultados en la pantalla.
! Usa funciones para el clculo de la superficie y volumen.
!
! Autor: Nstor Marroqun.
!
! Frmulas: S = 4*PI*R^2

! V = 4/3*PI*R^3
!
! Variables:
! R numrica, a ser ingresada por el usuario.
! S numrica, almacena el clculo de 4*PI*R^2.

- 316 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

! V numrica, almacena el clculo de 4/3*PI*R^3.


!
! Funciones:
! Definiremos la funcin ESF_SUPERFICIE como numrica.
! Definiremos la funcin ESF_VOLUMEN como numrica.
! Utilizamos la funcin interna de True BASIC.
! que devuelve el valor del nmero pi.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

! ESF_SUPERFICIE
Declaramos el uso de dos funciones, denominadas como:

! ESF_VOLUMEN
DECLARE FUNCTION ESF_SUPERFICIE
DECLARE FUNCTION ESF_VOLUMEN

! Aqu empieza el proceso principal.

PRINT
! Presentamos
"Ingreseun
por
mensaje
favor el
pidiendo
valor del
al usuario
radio (R):";
que ingrese el dato.

! Ingresa por teclado el valor de R.


INPUT R
! Se calcula el valor de la superficie de una esfera.
LET
! = ESF_SUPERFICIE(R)
SeScalcula el valor del volumen de una esfera.

LET V = ESF_VOLUMEN(R)
! Se presentan los resultados.
PRINT
! Fin "Tiene
del esfera
"La algoritmo.
por de
superficie";S;"u^2"
volumen";V;"u^3"
radio";R;"u"

END

FUNCTION ESF_SUPERFICIE(R)
! Se calcula el valor de la superficie de una esfera.

LET ESF_SUPERFICIE = 4*PI*R^2


END FUNCTION
FUNCTION ESF_VOLUMEN(R)
! Se calcula el valor del volumen de una esfera.
LET ESF_VOLUMEN = 4/3*PI*R^3
END FUNCTION

Entonces tendremos una pantalla parecida a la siguiente:

- 317 -
Tras los pasos de un... Hacker

Ejecutemos este programa y veamos si esta nueva codificacin del mismo, arroja
los resultados que obtuvimos con el programa del ejemplo 63.

Como comprobamos, el programa hace exactamente los mismos clculos que el


programa del ejemplo 63, pero con la diferencia que hemos definido las

- 318 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

funciones para el clculo de la superficie y volumen de una esfera. Estas


definiciones las podremos luego incorporar en una biblioteca o librera de
funciones para ser usadas desde cualquier programa que necesite calcular la
superficie y volumen de una esfera.

Algoritmo para calcular la raz cuadrada de un nmero.


Ejemplo 69.

Implementar una funcin para el clculo de la raz cuadrada dado un


nmero cualquiera.

Nos piden ahora calcular la raz cuadrada de un nmero, ingresando como


parmetro de la funcin que la calcula el nmero dado.

Este mtodo numrico conocido como clculo de la raz cuadrada de un nmero,


para obtenerlo es necesario iterar el valor de la variable resultado hasta que se
cumpla la condicin que deseamos; es decir, que el nmero dado dividido para el
calculado sea igual al nmero calculado.

Para esto se ha definido el resultado a obtener como sigue:

B = (X/B+B)/2

Donde:

X parmetro de la funcin y valor inicial de clculo.


Bvariable numrica auxiliar para el proceso de iteracin de clculo.

Inicializamos la variable B del proceso con el valor inicial de X.

Condiciones:
Solo existen races cuadradas de nmeros positivos, es decir que el
parmetro de la funcin debe ser mayor que cero.

Repetiremos el clculo hasta que obtengamos que B sea igual a X/B.

- 319 -
Tras los pasos de un... Hacker

Desplegaremos los resultados.


Esbozada la estrategia y definido el clculo a realizar en la funcin, la codificamos
en BASIC y obtendremos algo as:

! Condicin
FUNCTION que el parmetro ingresado sea positivo.
RCUAD(X)

IF X>0 THEN
LET B=X
! Iteracin indeterminada para el clculo de la raz.
DO WHILE ROUND(B,10)<>ROUND(X/B,10)
LET B=(X/B+B)/2
LOOP
ELSE
LET
IFRCUAD=B
X=0 THEN

LET RCUAD=0
ELSE
CAUSE ERROR 12313

END IF
END FUNCTION

Ahora codifiquemos el algoritmo usando la funcin definida, podremos obtener


el siguiente cdigo fuente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 9. Ejemplo No. 69 del texto.
! Algoritmo que
Se definir lacalcula
funcinla raz cuadrada de un nmero.
RCUAD(x)

!
! Autor: Nstor Marroqun.
!
! Frmulas: Iteraremos el valor de B mediante el clculo en la frmula:

! B = (N/B+B)/2
! hasta que se cumpla la condicin que B sea igual a N/B
!
! Variables: N numrica, a ser ingresada por el usuario.

! B numrica, almacena el clculo de (N/B+B)/2.


! X numrica, variable auxiliar para el clculo de la funcin.
! R numrica, variable que contendr el valor de la funcin RCUAD.
!
! Funciones:
! Definiremos la funcin RCUAD como numrica.
! Utilizamos la funcin interna de True BASIC

- 320 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

! que devuelve el valor de un nmero truncado a n


! decimales llamada funcin ROUND.
!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

! Declaramos el uso de la funcin como RCUAD:

DECLARE FUNCTION RCUAD

! Inicia el programa pidiendo el ingreso del dato.


PRINT "Deme un nmero para calcular su raz cuadrada: ";
INPUT N
LET R=RCUAD(N)
PRINT "La raz cuadrada de ";N;" es ";R
END

! Condicin
FUNCTION que el parmetro ingresado sea positivo.
RCUAD(X)

IF X>0 THEN
LET B=X
! Iteracin indeterminada para el clculo de la raz.
DO WHILE ROUND(B,10)<>ROUND(X/B,10)
LET B=(X/B+B)/2
LOOP
ELSE
LET
IFRCUAD=B
X=0 THEN

LET RCUAD=0
ELSE
CAUSE ERROR 12313

END IF
END FUNCTION

Digitado el programa obtendremos una pantalla parecida a la siguiente:

- 321 -
Tras los pasos de un... Hacker

Ahora ejecutemos el programa y observemos si obtiene los resultados que


deseamos, primero ingresando datos que sabemos debera calcular; por ejemplo,
la raz cuadrada de 1 es 1, la de 4 es 2, la de 9 es 3, si estos resultados los
obtenemos probemos con la raz cuadrada de 2 que es 1,4142

Veremos en accin nuestro programa con una pantalla parecida a las siguientes
para cada clculo del valor ingresado:

- 322 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Raz de 1:

Raz de 4:

Raz de 9:

Raz de 2:

- 323 -
Tras los pasos de un... Hacker

Comprobamos que nuestro algoritmo y nuestra funcin obtienen correctamente


los resultados deseados.

Nota del autor:


Ahora aprendemos el uso de otra sentencia especial de nuestro True BASIC, la que invocamos
cada vez que deseamos informar al programa o usuario que se ha producido un error, la definida
con las palabras reservadas CAUSE ERROR xxx.

Esta sentencia especial la usamos para decirle a nuestro programa o usuario que no existen
races de nmeros negativos y que dada esta circunstancia se ha producido un error para el
clculo.

Algoritmo para calcular la funcin factorial. Implementar una


Ejemplo 70.
funcin que devuelva la factorial de un nmero dado.

Ahora calculemos la funcin factorial de un nmero, ingresando como parmetro


de la funcin el nmero dado.

Este mtodo numrico conocido como factorial de un nmero, se obtiene de


multiplicar el nmero dado por su inmediato inferior sucesivamente hasta llegar
a 1.
Para esto se ha definido el resultado a obtener como sigue:

F(n) = n*F(n-1)

Donde:

n parmetro de la funcin.

Condiciones:
Solo existe funcin factorial de un nmero entero positivo o cero, es decir
que el parmetro de la funcin debe ser entero y mayor o igual que cero.

Repetiremos el clculo hasta que obtengamos que n sea igual a 0.

Desplegaremos los resultados.

- 324 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Esbozada la estrategia y definido el clculo a realizar en la funcin, la codificamos


en BASIC y obtendremos algo as:

! Funcin factorial o n!
FUNCTION FACT(N)
IF N = 0 THEN

LET FACT = 1
ELSE IF N>0 AND N=INT(N) THEN
! Recursin
LET FACT = N*FACT(N-1)
ELSE
CAUSE ERROR 123321

END IF
END FUNCTION

Nota del autor:


En este ejemplo, usamos una tcnica que en programacin se la conoce como procedimiento
recursivo, que consiste en auto invocar el mismo procedimiento hasta que una condicin sea
satisfecha. En este caso la condicin es que N sea 0.

Cuando implementemos procedimientos recursivos debemos tener muy en cuenta la cantidad de


memoria que disponemos en nuestro sistema.

Codificado el programa, obtendremos un cdigo parecido al siguiente:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 10. Ejemplo No. 70 del texto.
! Algoritmo
Se que
definir lacalcula
funcinla funcin
FACT(N) defactorial de un nmero.
manera recursiva.

!
! Autor: Nstor Marroqun.
!
! Frmulas: FACT = N * FACT(N-1)

!
! Variables:
! N numrica, a ser ingresada por el usuario.
!
! Funciones:
! Definiremos la funcin FACT como numrica.
! INT(x), devuelve la parte entera de un nmero.
!
! Libreras:
! Ninguna.
!

- 325 -
Tras los pasos de un... Hacker

! Mdulos:
! Ninguno.
!

! Declaramos el uso de la funcin como FACT

DECLARE FUNCTION FACT

! Inicia el proceso, pidiendo al usuario ingrese un valor.


PRINT
INPUT "De
N qu numero calcularemos su factorial:";

PRINT "El factorial de ";N;" es";FACT(N)


END

! Funcin factorial o n!
FUNCTION FACT(N)
IF N = 0 THEN

LET FACT = 1
ELSE IF N>0 AND N=INT(N) THEN
! Recursin
LET FACT = N*FACT(N-1)
ELSE
CAUSE ERROR 123321

END IF
END FUNCTION

Digitado en nuestro True BASIC, obtendremos una pantalla parecida a la


siguiente:

- 326 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Ahora ejecutemos y probemos a ver qu hace? nuestro programa, tendremos


una pantalla como esta:

Como podemos comprobar, efectivamente 5!, es igual a 5*4*3*2*1, es decir 120.

8.3 SUBRUTINAS

Una subrutina es un procedimiento especial que nos ayudar a realizar una tarea
especfica de una manera abreviada al invocarse la misma desde un programa.
En todos los lenguajes de programacin se pueden usar subrutinas.

Las subrutinas a diferencia de las funciones pueden cambiar el valor de los


argumentos ingresados (parmetros). Trabaja con los valores iniciales de los
argumentos, los procesa y devuelve si es del caso el valor actual de los
parmetros.
Esta caracterstica que poseen las subrutinas, hacen que tomemos muy en cuenta
dnde las codificamos?, entonces, si las subrutinas son parte del programa
principal, las variables que usa sern de uso compartido con las variables del
programa principal, si la subrutina es externa al programa principal, todas las
variables que use, que no sean las que ingresan como parmetros sern de uso
local o exclusivo de la subrutina.

Normalmente, las subrutinas se usan para ahorrar la codificacin repetitiva de un


procedimiento en varios sitios de un programa, por esta utilidad al igual que las
funciones se las puede coleccionar en las denominadas libreras o bibliotecas de
procedimientos los mismos que pueden ser invocados desde cualquier programa.
Las subrutinas tambin son algoritmos, pero diseadas para trabajar

- 327
Tras los pasos de un... Hacker

independientemente de un programa especfico y ms bien sus procesos son de


carcter general, por ejemplo, es clsico el uso de subrutinas para presentar
mensajes en las denominadas cajas de dilogo, para dibujar alguna funcin, etc.
En True BASIC, las subrutinas se identifican de la siguiente manera:
SUB <NOMBRE DE SUBRUTINA >
< PROCEDIMIENTO (PARMETROS)>

END SUB

Ahora para la invocacin de la subrutina desde el programa, debemos observar


que correspondan los tipos de datos y parmetros necesarios para evitar un
error de tipo de datos o de argumentos. Se la invoca con la instruccin:
CALL <NOMBRE DE SUBRUTINA (PARMETROS)>

Ahora resolvamos algunos ejemplos de programas en los que usemos subrutinas.

EJERCICIOS RESUELTOS:

Ejemplo 71. Algoritmo que presenta la hora por 10 segundos. Implementar un


programa que presente la hora en una posicin fija de la pantalla usando
una subrutina para el efecto. Termine despus de haber transcurrido 10
segundos.

En este ejemplo, nos piden que elaboremos un programa que muestre la hora por
diez segundos. La condicin es que usemos una subrutina para hacerlo.

Empecemos, definiendo las variables que necesitaremos de forma general para


resolver el problema y esbocemos una estrategia.

Variables:
a) Necesitamos un contador de tiempo al que lo denominaremos TI y ser
de tipo numrico.
b) Necesitamos una variable para el despliegue de la hora, como se trata de
texto a presentar ser de tipo string y la denominaremos TI$.

- 328 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

c) Necesitamos posicionar el mensaje en una coordenada (modo texto) de la


pantalla, para esto debemos tener en cuenta que la pantalla en modo de
texto en True BASIC se posiciona de la siguiente manera: La esquina
superior izquierda ser el origen de las coordenadas, es decir ser la
posicin (1,1) fila 1, columna 1. Dependiendo de la resolucin de nuestro
monitor, la cantidad de filas y columnas pueden variar, pero por lo
general la coordenada mxima ser la posicin (24,80) fila 24, columna
80, esquina inferior derecha.

d) Para posicionar la coordenada usaremos las variables X e Y que sern de


tipo numrico.

Estrategia:
a) Obtenemos la hora del sistema. Usaremos las funciones internas del True
BASIC conocidas como TIME y TIME$.
b) Posicionaremos la hora (mensaje guardado en nuestra variable TI$) y
para esto utilizaremos una subrutina.

As que definamos la subrutina de la siguiente manera:

! Subrutina que presenta la hora.


SUB HORA(X,Y,TI$)
SET CURSOR Y,X
PRINT TI$
END SUB

Nota del autor:


En True BASIC para posicionar el cursor en una coordenada, se utiliza la instruccin SET
CURSORfila, columna.

Ahora codifiquemos nuestro programa que ilustra el uso de una subrutina


externa.

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.

- 329 -
Tras los pasos de un... Hacker

!
! Programa No. 11. Ejemplo No. 71 del texto.
! Algoritmo que presenta la hora por 10 segundos.
! Se usar una subrutina para el despliegue.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.
!
! Variables:
! X numrica, indica la columna a posicionar el mensaje.
! Y numrica, indica la fila a posicionar el mensaje.
! TI numrica, auxiliar para el clculo del tiempo.
! TI$ string, almacenar la hora actual.
!
! Funciones:
! TIME$, devuelve la hora actual del sistema.
! TIME, devuelve el nmero de segundos
! transcurridos desde la media noche.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

! Inicializa el contador de tiempo.


LET TI=TIME

DO WHILE TI+10>=TIME
LET TI$=TIME$
CALL HORA(40,13,TI$)
LOOP
CLEAR
END

! Subrutina que presenta la hora.


SUB HORA(X,Y,TI$)
SET CURSOR Y,X
PRINT TI$
END SUB

Digitaremos nuestro programa y tendremos algo parecido a esta pantalla:

- 330 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Cuando ejecutemos el programa observaremos que efectivamente presenta la


hora en la columna 40 y la fila 13, tambin que la ejecucin del programa dura 10
segundos exactamente.

Algoritmo que calcula la posicin de un proyectil en un plano x, y


Ejemplo 72.

ingresado el ngulo de disparo, la velocidad de impulso y el tiempo de


vuelo. Implementar un programa que presente la posicin X e Y del
proyectil. Implementar una subrutina que calcule la posicin en el plano.
En este ejemplo, tenemos que ingresar 3 datos, un ngulo de disparo que por
facilidad lo definimos en grados sexagesimales y lo transformaremos en radianes,
la velocidad de impulso del proyectil y el tiempo de vuelo.

Nos piden que elaboremos un programa que muestre la posicin en un plano X


Y del proyectil en ese instante.

Las ecuaciones para el clculo solicitado vienen dadas por las siguientes
frmulas:

x = Vx.t

- 331 -
Tras los pasos de un... Hacker

y= Vy.t g.t2

Donde:

Vx = V0*Cos()

Vy = V0*Sen()

= A* /180
t, tiempo transcurrido desde el disparo.

A, ngulo del disparo.

g, constante de la gravedad que en este caso ser definida por 9,8 m/s2

V0, velocidad de impulso.


Con las frmulas dadas, ahora definamos las variables que necesitaremos de
forma general para resolver el problema y esbocemos una estrategia.

Variables:
a) Necesitamos ingresar tres datos variables para la velocidad de impulso, el
ngulo de disparo y el tiempo de vuelo transcurrido, definimos las
variables V0, A y trespectivamente.

b) Para transformar el ngulo de disparo dado de grados a radianes,


definimos la variable Alfa para este clculo.
c) Vx para el clculo de la velocidad inicial en el eje X.

d) Vy para el clculo de la velocidad inicial en el eje Y.


e) Gpara el valor de la gravedad.

Estrategia:
a) Definamos una subrutina que calcule la posicin X e Y del trayectoria del
disparo.
b) Elaboremos el programa para realizar el clculo solicitado.

- 332 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

As que definamos la subrutina de la siguiente manera:


! Subrutina que calcula la trayectoria.
SUB TRAYECTORIA(X, Y, Vo, A, T)
LET G = 9.8
LET Alfa = A*PI/180
LET Vx = Vo*COS(Alfa)
LET Y
Vy==Vy*T
X Vo*SIN(Alfa)
Vx*T - 0.5*G*T^2

END SUB

Ahora codifiquemos el programa, obtendremos algo as:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 12. Ejemplo No. 72 del texto.
! Algoritmo que calcula la posicin X e Y de la trayectoria
! de un proyectil dados la velocidad de impulso,
! su ngulo de disparo y el tiempo de vuelo.
!
! Se usar una subrutina para el clculo de la posicin.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Alfa = A*PI/180

! Vx = Vo*COS(Alfa)
! Vy = Vo*SIN(Alfa)
! x = Vx*t
! y = Vy*t-0.5*g*t^2
!
! Variables: X numrica, indica la posicin del proyectil.

! en el eje X del plano.


! Y numrica, indica la posicin del proyectil.
! en el eje Y del plano.
! T numrica, almacena el valor del tiempo de vuelo.
! G numrica, almacena el valor de la aceleracin de la gravedad.
! Vo
A numrica,
numrica,almacena
almacenael
elngulo
valor de
della
disparo.
velocidad de impulso.

! Vx numrica, almacena el clculo de la velocidad en el eje de las X.


! Vy numrica, almacena el clculo de la velocidad en el eje de las Y.
!
! Funciones: SIN(x), devuelve el valor de la funcin seno de x.

! COS(x), devuelve el valor de la funcin coseno de x.


! PI, devuelve el valor del nmero PI.
!
! Libreras:
! Ninguna.
!
! Mdulos:

- 333 -
Tras los pasos de un... Hacker

! Ninguno.
!

! Inicializa el proceso ingresando los datos solicitados.


PRINT "Programa que calcula la posicin X e Y de un proyectil."
PRINT
PRINT "Ingrese la velocidad de impulso (en m/s): ";
INPUT Vo
PRINT "Ingrese el ngulo de disparo (en grados): ";
INPUT A
PRINT "Ingrese el tiempo de vuelo (en segundos): ";
INPUT T
CALL TRAYECTORIA(X, Y, Vo, A, T)
PRINT
PRINT "Posicin en X del proyectil, transcurridos ";t;" segundos es ";X;"m"
PRINT "Posicin en Y del proyectil, transcurridos ";t;" segundos es ";Y;"m"
END

! Subrutina que calcula la trayectoria.


SUB TRAYECTORIA(X, Y, Vo, A, T)
LET Alfa = A*PI/180
G = 9.8
LET
LET Vx = Vo*COS(Alfa)
LET Vy Vo*SIN(Alfa)
X ==Vx*T
LET
LET Y = Vy*T - 0.5*G*T^2
END SUB

Nota del autor:


La subrutina definida (TRAYECTORIA), la podemos reutilizar en el trazo mismo de la
trayectoria del proyectil. Modifiquemos un poco este programa, al iterar el valor del tiempo de
vuelo (variable t), podremos calcular la posicin del proyectil desde que sale hasta que llega al
suelo, este ejercicio les propongo resuelvan en clase con el profesor gua.

Digitado el programa en nuestro True BASIC, obtendremos una pantalla parecida


a la siguiente:

- 334
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Ejecutemos el programa para ver qu sucede? Tendremos una pantalla parecida


a la siguiente:

Como les propuse, el cambio podra quedar as:

- 335 -
Tras los pasos de un... Hacker

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 12 - A. Ejemplo No. 72 - A del texto.
! Algoritmo que calcula la posicin X e Y de la trayectoria
! de un proyectil dados la velocidad de impulso,
! su ngulo de disparo, se calcularn la coordenadas en funcin del tiempo.
!
! Se usar una subrutina para el clculo de la posicin.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Alfa = A*PI/180

! Vx = Vo*COS(Alfa)
! Vy = Vo*SIN(Alfa)
! x = Vx*t
! y = Vy*t-0.5*g*t^2
!
! Variables:
! X numrica, indica la posicin del proyectil.
! en el eje X del plano.
! Y numrica, indica la posicin del proyectil.
! en el eje Y del plano.
! T numrica, almacena el valor del tiempo de vuelo.
! G numrica, almacena el valor de la aceleracin de la gravedad.
! Vo
A numrica,
numrica,almacena
almacenael
elngulo
valor de
della
disparo.
velocidad de impulso.

! Vx numrica, almacena el clculo de la velocidad en el eje de las X.


! Vy numrica, almacena el clculo de la velocidad en el eje de las Y.
!
! Funciones: SIN(x), devuelve el valor de la funcin seno de x.

! COS(x), devuelve el valor de la funcin coseno de x.


! PI, devuelve el valor del nmero PI.
!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

! Inicializa el proceso ingresando los datos solicitados.


PRINT "Programa que calcula la posicin X e Y de un proyectil."

PRINT "Ingrese la velocidad de impulso (en m/s): ";


INPUT Vo
PRINT "Ingrese el ngulo de disparo (en grados): ";
INPUT A
LET T=0
PRINT
DO
CALL TRAYECTORIA(X, Y, Vo, A, T)
PRINT "Posicin en X del proyectil, transcurridos ";t;" segundos es ";X;"m"

- 336 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

PRINT "Posicin en Y del proyectil, transcurridos ";t;" segundos es ";Y;"m"


LET KEY
GET T=T+.01
S

LOOP UNTIL Y<=0 AND X<>0


END

! Subrutina que calcula la trayectoria.


SUB TRAYECTORIA(X, Y, Vo, A, T)
LET G = 9.8
LET Alfa = A*PI/180
LET Vx = Vo*COS(Alfa)
LET Vy = Vo*SIN(Alfa)
LET X = Vx*T
LET Y = Vy*T - 0.5*G*T^2
END SUB

Nota del autor:


En esta variacin del programa, utilizamos una funcin especial de nuestro True BASIC que
suspende temporalmente la ejecucin del programa hasta que se pulse una tecla; es la funcin
GETKEYy el valor de la tecla pulsada se almacena en la variable S. Revisen la Gua de Uso del
True BASIC para que aprendan algo ms de las instrucciones y funciones internas que posee
esta poderosa herramienta de programacin.

Algoritmo que intercambia el valor de dos variables. Implementar


Ejemplo 73.
un programa donde ingresados dos valores y asignados a dos variables,
haga que las mismas intercambien su valor. Implementar una subrutina
que realice el intercambio.

Con este ejercicio vamos a ensear una de las tcnicas ms usadas en los
procesos de clasificacin y bsqueda que en el captulo siguiente revisaremos, el
mismo que plantea lo siguiente:
a) Ingresar dos nmeros y asignarlos a dos variables A y B.

b) Presentar los valores originales de A y B.

c) Implementar una subrutina que realice el intercambio de valores.

d) Presentar los valores despus del intercambio.

Ahora, el problema real es la implementacin de la subrutina que haga el

- 337 -
Tras los pasos de un... Hacker

intercambio de los valores y para esto esbocemos una estrategia de solucin:


a) Ingresarn como parmetros a la subrutina las variables a intercambiar.

b) Necesitaremos usar una variable temporal (TEMP) para que no se pierda


uno de los valores, la lgica a seguir es la siguiente:

1. Asignamos el valor de la variable A a TEMP.

2. Asignamos el valor de la variable B a A.

3. Asignamos el valor de la variable TEMP a B.

c) Terminamos la subrutina devolviendo los valores intercambiados.

Nota del autor:


Como podemos observar se ha producido el intercambio de valor y a la variable TEMP, se la
conoce como variable de uso local de la subrutina, cuando ya dominen el uso de las tcnicas de
programacin les sugiero revisar el tema de variables locales (privadas) y globales (pblicas).

Ahora como sabemos definamos las variables a utilizar para resolver este
ejercicio de programacin:

a) Variable A, de tipo numrico.

b) Variable B, de tipo numrico.

c) Variable TEMP, de tipo numrico.

La subrutina implementada quedara as:

SUB SWAP(A,B)
LET A=B
TEMP=A

LET B=TEMP
END SUB

El programa que resuelve el problema planteado quedara as:

- 338 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.

! Programa No. 13. Ejemplo No. 73 del texto.


!
! Algoritmo que intercambia el valor de dos variables.
!
! Se usar una subrutina para realizar el intercambio.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A numrica, ingresada por el usuario.

! B numrica, ingresada por el usuario.


! TEMP numrica, variable temporal usada por la subrutina.
!
! Funciones:
! Ninguna.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

! Inicializa el proceso ingresando los datos solicitados.

PRINT "Programa que intercambia el valor de dos variables."


PRINT
PRINT "Ingrese el primer valor (A): ";
INPUT A
PRINT "Ingrese el segundo valor (B): ";
INPUT B
PRINT "Usted ha ingresado para A=";A;" y para B=";B;"..."
PRINT
PRINT "Realiza el intercambio..."
PRINT
CALL SWAP(A,B) ! Invoca a la subrutina de intercambio.

PRINT "Usted ahora tiene en A=";A;" y en B=";B;"..."


END

SUB SWAP(A,B)
LET B=TEMP
TEMP=A
A=B

END SUB

El cdigo digitado se vera as:

- 339 -
Tras los pasos de un... Hacker

Ejecutemos el programa y veamos qu hace nuestra subrutina?:

Obtendremos una pantalla parecida a la siguiente:

- 340 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

Luego de hacer clic, nuestro True BASIC nos informar que el programa se ha
ejecutado satisfactoriamente (Run successfully).

- 341 -
Tras los pasos de un... Hacker

- 342 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

EJERCICIOS PROPUESTOS:

Elaborar los algoritmos solicitados para resolver cada uno de los siguientes
problemas:

Ejercicio 251. Se quiere utilizar la computadora para transformar medidas de


capacidad de litros a galones. Se ingresar por teclado el valor de los litros a
transformar. Implementar una funcin para realizar el clculo. Presentar en
pantalla los resultados.
Se quiere utilizar la computadora para presentar los n trminos de una
Ejercicio 252.
razn geomtrica, se ingresarn nicamente n y la razn geomtrica.
Implementar una funcin que realice el clculo solicitado. Presentar en pantalla
los resultados, el algoritmo debe validar la informacin ingresada.

Se quiere utilizar la computadora para transformar las medidas de los


Ejercicio 253.
ngulos. Se ingresar por teclado el valor de un ngulo expresado en radianes.
Implementar una funcin para convertir de radianes a grados sexagesimales.
Presentar en pantalla los resultados.

Ejercicio 254. Se quiere utilizar la computadora para calcular la altura mxima a la


que llega un proyectil luego de ser disparado. Se ingresar por teclado el valor
del ngulo de disparo expresado en grados y la velocidad de impulso.
Implementar una funcin llamada HMAX(Vo, ALFA) la misma que realizar el
clculo y devolver el valor de la altura mxima alcanzada por el proyectil.
Presentar en pantalla los resultados.
Se quiere utilizar la computadora para calcular la distancia que alcanza
Ejercicio 255.
un mvil a velocidad constante transcurrido un tiempo dado. Se ingresar por
teclado el valor la velocidad de impulso y el tiempo transcurrido de trayectoria
(lineal). Implementar una funcin llamada Dist_Rec(Vo, T) la misma que
realizar el clculo y devolver el valor de la distancia recorrida por el mvil.
Presentar en pantalla los resultados.
Se quiere utilizar la computadora para que ingresadas tres notas de un
Ejercicio 256.
estudiante, se calcule el promedio alcanzado. Se ingresar por teclado el valor las
notas. Implementar una funcin la misma que realizar el clculo y devolver el
valor del promedio alcanzado. Presentar en pantalla los resultados.

- 343 -
Tras los pasos de un... Hacker

Se quiere utilizar la computadora para que ingresados por teclado el


Ejercicio 257.
radio inscrito de un polgono regular y el nmero de sus lados, dos funciones
calculen su rea y permetro. Presentar en pantalla los resultados.

Se quiere utilizar la computadora para que iterando (en ms,


Ejercicio 258.
milisegundos) el tiempo transcurrido en un experimento de laboratorio, se pueda
determinar las coordenadas de impacto de dos partculas que estn dotadas de
movimiento circular uniforme, por teclado se ingresarn el radio y las
coordenadas de los centros de las trayectorias, las velocidades de impulso de las
partculas. Se pide implementar las funciones y subrutinas necesarias para
resolver el problema, se deber determinar si el impacto es posible. Presentar en
pantalla los resultados.
Se quiere utilizar la computadora para que dado el radio circunscrito
Ejercicio 259.
de un polgono regular y el nmero de lados, se pueda determinar las
coordenadas donde se ubicaran sus vrtices, as como su permetro y su rea.
Implementar las funciones y las subrutinas para realizar el clculo. Los datos de
ingreso estn condicionados a que no puede ingresar un polgono con menos de 3
lados o mayor a 360 lados. El radio estar en el rango mayor que 0 a 1.000
unidades lineales de medida. Presentar en pantalla los resultados, el algoritmo
debe validar la informacin ingresada.
Se quiere utilizar la computadora para que ingresado por teclado un
Ejercicio 260.
nmero decimal, se calcule su correspondiente en una base numrica que estar
en el rango de 2 a 36. Implementar las funciones y subrutinas para realizar el
clculo. Presentar en pantalla los resultados, el algoritmo debe validar la
informacin ingresada.

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Bucles, Funciones y Subrutinas, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- 344 -
Bucles, funciones y subrutinas con BASIC... Captulo VIII.

- LGEBRAELEMENTAL MODERNA, M. O. Gonzlez J. D. Mancill, Editorial


KAPELUSZ, Publicado en Buenos Aires Argentina, 1.962.
- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las
Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- Fsica General, Francis W. Sears Mark W. Zemansky, Aguilar S.A. de
ediciones 1.9571.974, Publicado en MadridEspaa, 1.974.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot
Colombia, 1.984.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- QL PROGAMACIN EN SUPERBASIC, Roy Atherton, MicroTextos S.A. de
ediciones, Madrid Espaa, 1.985.
- Programacin Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRCTICA DE LA INFORMTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid Espaa, Octubre de 1.986.
- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y
BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte Amrica, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim Repblica Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,
Publicado en los Estados Unidos de Norte Amrica, 1.990.
- Programacin en C, Byron S. Gottfried, McGraw Hill / Interamericana de
Espaa S.A., Madrid Espaa, 1.991.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte Amrica, 1.993.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.

- 345 -
Tras los pasos de un... Hacker

- Organizacin y diseo de computadores La interfaz hardware /


software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- The YOU Based LABORATORY, TI-CBL EXPLORATIONS in Science and
Mathematics, Margo L. Mankus Frank Wattenberg, Weber State
University 1.996, Publicado por True BASIC Inc., 1.996.
- Lets Program It in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte Amrica, 1.996.
- Programming for ENGINEERS in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte Amrica, 1.996.
- LGEBRA LINEAL CON APLICACIONES, George Nakos David Joyner,
International Thompson Editores, Publicado por International Thompson
Editores S.A., 1.999.
- True BASIC Bronze Edition, Users Guide, John G. Kemeny Thomas E.
Kurtz, True BASIC Inc. 2.001, Publicado en los Estados Unidos de Norte
Amrica, 2.001.
- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- CLCULOAPLICADO, Laurence D. Hoffman, Gerald L. Bradley, Kenneth H.
Rosen, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
2.004.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 346 -
INTRODUCCIN (IX)

Vendiendo algunas copias del programa de inventarios que haba desarrollado


y fruto de las recomendaciones que mis clientes hacan, empieza a crecer la
recin fundada empresa NMC Research. Hago varios contactos importantes con
algunas empresas nacionales de tecnologa en pos de redistribuir mi software de
inventarios.

Transcurra el mes de agosto de 1.992, cuando recibo inesperadamente la visita


de un muchacho de aproximadamente mi edad (22 aos) de tez triguea, delgado
y denotaba que no pona inters en su aspecto personal. Me dijo que tena algo
muy importante que comunicarme, solo se identific como Csar y segn l,
habra fundado el nuevo imperio latino de conocimiento informtico en el
ciberespacio, que sus dominios estaran en los pases latinos (toda Latino
Amrica, Espaa, Francia, Portugal, Italia, etc., en otras palabras Latino Amrica y
en Europa los dominios del antiguo imperio romano), me cont, que el medio de
comunicacin a la gran red lo tena por un acceso no autorizado (realmente
usaba el username y la password de algunos tcnicos despistados de un ISP
(Internet Service Provider) que por entonces empezaba a funcionar en Ecuador,
efectivamente era un acceso no autorizado). Por su forma de hablar y del
nerviosismo que denotaba, pens en primera instancia que tena algn problema
mental, entonces decid escucharlo pacienciosamente; me hablaba de ataques a
los servidores de correo electrnico que se estaban probando en los Estados
Unidos de Norte Amrica a travs de un nuevo servicio denominado Internet (la
red de redes), que el protocolo que lo estaban tratando de popularizar para esta
red era el TCP/IP (protocolo de comunicaciones muy usado actualmente en la
Internet, significa Transfer Control Protocol/Internet Protocol), de los conocidos
servicios de SMTP (Simple Mail Transfer Protocol) y POP (Post Office Protocol)
con los que funcionaran los famosos servidores de correo electrnico, hasta ese
entonces solamente haba tenido conocimiento de los BBS (Bulletin Board
Systems). Yo no tena ni idea de la Internet o peor an haber usado un cliente de
correo electrnico. Me comentaba que era lo que se impondra en los prximos
aos y quienes tendran acceso a publicitar sus empresas y productos a travs de
la Internet estaran a un paso de ser los pioneros del comercio electrnico
global (y por lo visto, no se equivoc en sus predicciones).

- 347 -
Tras los pasos de un... Hacker

Bueno, ese da solo le segu la corriente a tan singular personaje y me limit a


ofrecerle algo de comer y beber. Ante mi hospitalidad, notaba que tena un poco
ms de confianza y su tono de voz ya no sonaba nervioso, su actitud de timidez e
inseguridad de lo que me deca cambi radicalmente. Me propuso una apuesta,
para demostrarme que era un buen tcnico y que conoca algo ms que los
usuarios comunes y silvestres conocemos, me invit a formatear (inicializar)
el disco duro de mi computadora o que pagara lo que cueste volver a instalar el
sistema operativo y aplicativos que los tena funcionando en mi mquina, si su
procedimiento de recuperacin de informacin borrada fallaba. Acced sin
pensarlo mucho, ya que como tcnico saba que no correra ningn peligro de
daar mi computadora a lo mucho perdera mi informacin, pero como el pasado
fin de semana haba sacado el ltimo Back-Up del sistema en aproximadamente
40 disquetes de 3 de 1.44 MB de capacidad, le permit formatear mi
computadora. Ingresado el comando apropiado para el efecto en el popular
MS-DOS (FORMATC:, si no estn seguros de lo que van a hacer, por favor no lo
digiten), transcurri un breve tiempo y ya no tena informacin en mi disco. Para
cualquier usuario la computadora est inservible y sin informacin. Luego,
arranc el sistema desde unos disquetes de inicio (boot disks) que tena, ejecut
algunos programas que l mismo haba desarrollado, luego de fisgonear en los
sectores reservados de mi disco duro, mand a sobrescribir la segunda copia de
la FAT en la primera, realiz una verificacin de superficie y en mi disco
aparecieron unos directorios (hoy conocidos como carpetas de Windows para
los que usen MS-Windows), con varios nombres empezando en el DIR00001,
avanzando secuencialmente hasta tener prcticamente mi directorio raz
recuperado, luego procedi a localizar el directorio que tena el DOS, lo renombr
como DOS, a continuacin transfiri el sistema de arranque de los disquetes al
disco duro, apag la computadora y la volvi a encender. Ahora, con un utilitario
que en ese entonces era muy popular, denominado NORTON COMMANDER, me
pregunt viendo los archivos contenidos en cada directorio recuperado el
nombre original del mismo, mgicamente en pocos minutos haba recuperado mi
disco y tal cual estaba antes de haberlo formateado. Con esta demostracin, me
dijo que perteneca a un grupo de Hackers de Latino Amrica y que en su
comunidad estaban muchos tcnicos desde la Argentina hasta Mxico y que se
habra permitido visitarme para informarme que existen y que si en algn
momento necesito de su ayuda estn para servirme, sin ms detalles termin su
bebida y sali, hasta el da de hoy me explico el por qu? de esta singular visita.

- 348 -
La historia... Introduccin (IX).

A partir de ese da, viendo en persona lo que haba hecho (reconozco que tena un
conocimiento mucho ms avanzado que el mo y que solamente cierta lite de
tcnicos lo poseen), escuchado por vez primera de la existencia de la red de
redes, la famosa Internet, del correo electrnico, de protocolos de
comunicacin, de redes de computadoras, as como de ser testigo presencial de
la recuperacin casi mgica de mi informacin, decid entonces investigar un
poco ms sobre el mundo de los Hackers, su forma de trabajar y precisamente
tratar de seguir los pasos de este joven. Con el nico afn de demostrarme hasta
dnde podra llegar? al investigar estos temas y segn yo, superar sus
conocimientos.

Recuerdo como ancdota, que me toc realizar la recuperacin de la informacin


de un disco duro de una computadora personal y que por un formateo
accidental, un prestigioso abogado de la capital y que a la vez era hijo del
Registrador de la Propiedad de Quito, habra perdido. Se trataba de las minutas
de cientos de escrituras, las mismas que debera entregar a una notara para que
se celebren los respectivos contratos de compra venta de unas lotizaciones de
terrenos.
Es as que, recomendado por Ivn Franco (1.961 1.992), conoc al hijo del
Registrador de la Propiedad de Quito, hombre pacfico y afable con quien hara
una buena amistad. Emulando el procedimiento del Hacker que me haba
visitado das antes, comprobaba por mis propios medios que no era un sueo mo
la recuperacin casi mgica de la informacin borrada al formatear por
accidente un disco duro. Al poco tiempo entregu el disco recuperado y con la
satisfaccin del trabajo cumplido, el abogado gentilmente me cancel el valor
acordado por el trabajo. De estos trabajos me toc realizar varios, haciendo que
me convierta en un experto en el arte de recuperar informacin borrada.

Al ao siguiente, con los recursos econmicos que ya dispona en 1.993, pude


comprar algunos paquetes originales de la firma Microsoft, como hasta ese
entonces solo haba utilizado copias no autorizadas del sistema operativo y
algunos aplicativos, decid legalizar todo mi software e invert mucho dinero en
este proceso. Compr varios textos sobre los Hackers, los virus de
computadora, criptografa y otros temas esotricos de la computacin.

Fascinado con el relato hecho en el obra de Bruce Sterling, autor de la novela


The Hackers Crackdown: Law And Disorder On The Electronic Frontier, obra

- 349 -
Tras los pasos de un... Hacker

publicada en 1.993, donde describe algunas aventuras de jvenes prodigio,


agentes y abogados en una maraa detectivesca y judicial. Adems la prensa
local se haca eco de la vida y obra (se haba publicado algo) de un famoso
Hacker norteamericano llamado Kevin Mitnick alias CNDOR. En la televisin
pude ver la pelcula War Game (Juegos de Guerra, que se basa en las aventuras
de los Hackers). Mitnick que para el ao de 1.992 ya contaba con varias
detenciones y condenas por haberse infiltrado a cuanto servidor exista en ese
entonces y haberse apropiado de informacin valiosa. Su historial mostraba que
tena antecedentes delictivos en 1.981, 1.983, 1.987, 1.988 y el ltimo el de 1.991.
Para 1.992 ya era un hroe en el underground y a la fecha un Hacker prfugo
(hice el seguimiento de sus andanzas y de la batalla que librara contra otro
Hacker llamado Tsutomu Shimomura; quien, colaborando con el FBI, despus
de varios aos de persecucin lograron la captura de tan escurridizo delincuente
el 15 de febrero de 1.995). Cuenta la leyenda urbana tejida sobre su vida, que la
condena impuesta a Mitnick en 1.988 fue cambiada a una libertad condicional
que la mantiene hasta la fecha. Segn dicen, la sentencia consta de la prohibicin
de acercarse a una computadora a menos de 20 metros. Esta permuta judicial
supuestamente fue producto de la amenaza que la comunidad Hacker mundial
habra lanzado apenas se enter que su hroe haba sido apresado y condenado.
Retaron al poder del imperio Norte Americano con invadir prcticamente todos
los sistemas del Gobierno en Washington y sus alrededores, si no soltaban a
Mitnick al trmino de 72 horas de plasmado su reto. Nadie sabe a ciencia cierta si
esto efectivamente sucedi, pero lo real es que Mitnick vive libre bajo esta
singular condicin hasta nuestros das.

Ms adelante les seguir contando sobre la investigacin que hice acerca de los
famosos virus informticos y la criptografa, hasta tanto sigan aprendiendo un
poco ms de algunas tcnicas de programacin

- 350 -
CAPTULO IX. ARREGLOS, MTODOS DE
CLASIFICACIN Y BSQUEDA

9.1 ARREGLOS
En programacin, para algunos procedimientos necesitamos un tipo de variable
especial, la misma que puede contener varios valores y ser identificada por un
nombre.

A esta variable especial se la conoce como arreglo de datos, los mismos que
pueden ser tanto numricos, strings o booleanos.

A cada conjunto de datos que sern organizados bajo el mismo subndice de


ubicacin en este tipo de variable, se los conoce como dimensin del arreglo. El
nmero de dimensiones y de elementos por dimensin con las actuales
capacidades de memoria de las computadoras domsticas, estara limitado a la
cantidad de memoria RAM disponible de las mismas.
Un arreglo tiene dos elementos bsicos, una dimensin y un nmero de
elementos por dimensin; as, el arreglo ms elemental sera el que tiene una
dimensin y un elemento, equivaldra a una variable.
Grafiquemos un arreglo para entender este importante concepto, por ejemplo,
vamos a visualizar un arreglo de 4 dimensiones y 4 elementos por dimensin, el
arreglo ser numrico y lo vamos a denominar A.

Entonces el arreglo ser dimensionado como A(4,4,4,4), tendr un total de 256


elementos, direccionados desde el elemento A(1,1,1,1) hasta el elemento
A(4,4,4,4).

La primera dimensin tendr una estructura lineal de ubicacin de datos:

- 351 -
Tras los pasos de un... Hacker

Arreglo A
Primera Dimensin

Primer elemento del arreglo


A(1)
A(1)

A(2) Segundo elemento del arreglo


A(2)

A(3) Tercer elemento del arreglo


A(3)

Cuarto elemento del arreglo


A(4)
A(4)

La segunda dimensin tendr una estructura similar a un plano de datos:

Arreglo A
Segunda Dimensin

A(1,1) A(1,2) A(1,3) A(1,4) Segunda Dimensin A(1,j)

A(2,1) A(2,2) A(2,3) A(2,4)

A(3,1) A(3,2) A(3,3) A(3,4)

A(4,1) A(4,2) A(4,3) A(4,4)

Primera Dimensin A(i, 1)

- 352 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

La tercera dimensin tendr una estructura similar a un cubo de datos:

Arreglo A
Tercera Dimensin

Tercera Dimensin A(i,j, 1)

Segunda Dimensin A(1,j, k)


A(1,1,1) A(1,2,1) A(1,3,1) A(1,4,1)

A(2,1,1) A(2,2,1) A(2,3,1) A(2,4,1)

A(3,1,1) A(3,2,1) A(3,3,1) A(3,4,1)

A(4,1,1) A(4,2,1) A(4,3,1) A(4,4,1)

Primera Dimensin(i, 1, k)

La cuarta dimensin tendr una estructura similar a un apilamiento de cubos de


datos:

- 353 -
Tras los pasos de un... Hacker

Arreglo A
Cuarta dimensin
A(1,1,4,1) A(1,4,4,1)

A(1,1,1,1) A(1,2,1,1) A(1,3,1,1) A(1,4,1,1)

A(2,1,1,1) A(2,2,1,1) A(2,3,1,1) A(2,4,1,1)

A(3,1,1,1) A(3,2,1,1) A(3,3,1,1) A(3,4,1,1)

A(4,1,1,1) A(4,2,1,1) A(4,3,1,1) A(4,4,1,1)

A(1,1,1,2) A(1,2,1,2) A(1,3,1,2) A(1,4,1,2)

A(2,1,1,2) A(2,2,1,2) A(2,3,1,2) A(2,4,1,2)

A(3,1,1,2) A(3,2,1,2) A(3,3,1,2) A(3,4,1,2)

A(4,1,1,2) A(4,2,1,2) A(4,3,1,2) A(4,4,1,2)

A(1,1,1,3) A(1,2,1,3) A(1,3,1,3) A(1,4,1,3)

A(2,1,1,3) A(2,2,1,3) A(2,3,1,3) A(2,4,1,3)

A(3,1,1,3) A(3,2,1,3) A(3,3,1,3) A(3,4,1,3)

A(4,1,1,3) A(4,2,1,3) A(4,3,1,3) A(4,4,1,3)

A(1,1,1,4) A(1,2,1,4) A(1,3,1,4) A(1,4,1,4)

A(2,1,1,4) A(2,2,1,4) A(2,3,1,4) A(2,4,1,4)

A(3,1,1,4) A(3,2,1,4) A(3,3,1,4) A(3,4,1,4)

A(4,1,1,4) A(4,2,1,4) A(4,3,1,4) A(4,4,1,4)

- 354 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Cada elemento del arreglo as definido A(i,j, k, l) podr contener un valor que el
usuario asigne para realizar cualquier proceso, a estas variables que ubican los
elementos de un arreglo se las conoce como subndices del arreglo. Se lee, por
ejemplo, para un arreglo de una dimensin A(i), como A de i. Para uno de dos
dimensiones A(i,j), ser A de i coma j.

En BASIC se los crea usando la instruccin:

DIM <ARREGLO(DIMENSIONES)>.

Ejemplo:
DIM A(4,4,4,4)

Para ingresar los datos a un arreglo es comn usar bucles determinados


anidados, para el ejemplo citado anteriormente, el ingreso de datos quedara de
la siguiente forma:

FOR I=1 TO 4
FOR J=1 TO 4
FOR K=1 TO 4
FOR L=1 TO 4
PRINT Ingrese el elemento ;I;,;J;,;K;,;L;:;
INPUT A(I,J,K,L)
NEXT L
NEXT K
NEXT J
NEXT I

VECTORES Y MATRICES

Los arreglos ms usados son los de una dimensin as como los de dos
dimensiones. En informtica, se denominan vectores y matrices respectivamente
(conceptos heredados de la matemtica). Sutilmente existe una diferencia
declarativa entre las dos estructuras, mientras a los vectores se los dimensiona
definiendo el nmero de elementos que contendr su nica dimensin, todas las
matrices tienen que tener dos dimensiones (nmero de filas y nmero de
columnas). As por ejemplo, el vector A(i), tiene exactamente la misma cantidad
de elementos que la matriz A(i,1) pero no son lo mismo.

Definidos de esta manera, vamos a realizar algunos ejercicios con vectores y

- 355 -
Tras los pasos de un... Hacker

matrices.

Nota del autor:


No es nuestro inters profundizar en el tema de clculos matriciales, pero debemos mencionar
que nuestro True BASIC tiene incorporadas potentes funciones para el clculo matricial, por lo
que les sugiero a quienes estn interesados en este tema especfico, revisen el conjunto de
instrucciones MAT que tiene incorporadas nuestro lenguaje de programacin.

EJERCICIOS RESUELTOS:

Algoritmo que promedia las 3 notas de 10 alumnos. Implementar


Ejemplo 74.
un programa donde ingresados los nombres de los alumnos y sus
respectivas 3 notas, nuestro programa luego de ingresados los datos,
presente el nombre del alumno, seguido de las notas y el promedio
obtenido. Usar vectores y matrices para resolver este problema.

Para resolver este problema, en primer lugar, tomemos nota de los detalles
planteados y propongamos una estrategia de solucin:
a) Tendremos que dimensionar un vector de 10 elementos N$(10), para
almacenar el listado de los alumnos, este vector ser de tipo string.

b) Hay que dimensionar una matriz de 10 filas por 4 columnas M(10,4), de


tipo numrico, aqu almacenaremos las 3 notas y en la cuarta columna
calcularemos el promedio de las tres notas.

c) Se usar la frmula:

Pi = (N(i,1) + N(i,2) + N(i,3)) / 3

Donde: Piindica el promedio del alumno i.

N(i,1), indica la primera nota del alumno i.

- 356 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

N(i,2), indica la segunda nota del alumno i.

N(i,3), indica la tercera nota del alumno i.

d) Ingresaremos los nombres de los alumnos.


e) Ingresaremos las tres notas de cada alumno.

f) Calcularemos el promedio y lo guardaremos en la cuarta columna de la


matriz definida.

g) Ahora presentaremos el listado de alumnos, notas y promedio respectivo,


con un mensaje identificativo. Por ejemplo:

Listado de promedios del curso de informtica:

Nombre: N1: N2: N3: Final:

Definamos una subrutina para cada proceso citado en los pasos d), e), f) y g).

Las subrutinas desarrolladas, podran ser como las siguientes:

SUB
! Subrutina que ingresa la lista de nombres...
INGRESO_NOMBRES(N$())

FOR I = 1 TO 10
PRINT "Ingrese el nombre del alumno: ";i
PRINT "Nombre";
INPUT N$(I)
NEXT I
END SUB

SUB
! Subrutina que ingresa las notas de cada alumno...
INGRESO_NOTAS(N$(),M(,))

FOR I = 1 TO 10
CLEAR
PRINT "Para el alumno: ";I

PRINT N$(I)
PRINT
PRINT "Ingrese las notas ..."
FOR J=1 TO 3
! Valida que la nota ingresada est en el rango de 0 a 20.
DO
PRINT "Nota";J;":";
LOOP
INPUT
UNTIL
M(I,J)
M(I,J)>=0 AND M(I,J)<=20

NEXT J
NEXT I

- 357 -
Tras los pasos de un... Hacker

END SUB

! Subrutina
SUB que
TOcalcula
PROMEDIOS(M(,))
FOR I = 1 10 los promedios de cada alumno...

FOR J = 1 TO 3
LET M(I,4) = M(I,4) + M(I,J)
NEXT J
LET M(I,4) = M(I,4)/3
NEXT I
END SUB
SUB
! Subrutina que presenta por pantalla los resultados...
PRESENTAR_DATOS(N$(),M(,))

CLEAR
PRINT "Listado de promedios del curso de informtica:"

PRINT "NOMBRE:";TAB(60);"N1:";TAB(70);"N2:";TAB(80);"N3:";TAB(90);"FINAL:"
FOR I=1 TO 10
PRINT N$(I);
FOR J=1 TO 3

PRINT TAB(50+J*10);
PRINT USING "##.##":M(I,J);
NEXT J
PRINT TAB(90);
PRINT USING "##.##":M(I,J)
NEXT I
PRINT
END SUB

La implementacin final quedara de la siguiente forma:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 14. Ejemplo No. 74 del texto.
!
! Algoritmo que calcula el promedio de 3 notas de 10 alumnos.
!
! Se usarn vectores y matrices para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: M(4) = (M(1) + M(2) + M(3)) / 3

!
! Variables: I,J numricas, contadores de alumnos y notas.

! N$(10), vector string donde se almacenarn los


! las notas
M(10,4),
nombres de el promedio.
matriz
ylos numrica donde almacenaremos
alumnos.

- 358 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

!
! Funciones:
! Ninguna.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

! Inicia el proceso.

! Dimensiona los vectores y matrices.


DIM N$(10), M(10,4)

PRINT "Programa que calcula el promedio de notas de 10 alumnos..."

CALL
! Ingresa la lista de nombres...
INGRESO_NOMBRES(N$)

CALL
! Ingresa las notas de cada alumno...
INGRESO_NOTAS(N$,M)

Calcula
CALL
! los promedios de cada alumno...
PROMEDIOS(M)

CALL PRESENTAR_DATOS(N$,M)
! Presenta por pantalla los resultados...

! Fin
END

SUB
! Subrutina que ingresa la lista de nombres...
INGRESO_NOMBRES(N$())

FOR I = 1 TO 10
PRINT "Nombre";
"Ingrese el nombre del alumno: ";i

INPUT N$(I)
NEXT I
END SUB

SUB
! Subrutina que ingresa las notas de cada alumno...
INGRESO_NOTAS(N$(),M(,))

FOR I = 1 TO 10
CLEAR
PRINT "Para el alumno: ";I

PRINT N$(I)
PRINT
PRINT "Ingrese las notas ..."
FOR J=1 TO 3
! Valida que la nota ingresada est en el rango de 0 a 20.
DO
PRINT "Nota";J;":";

- 359 -
Tras los pasos de un.. Hacker

INPUT M(I, J)
LOOP UNTIL M (I, J) >=0 AND M (I, J) <=20
NEXT J
NEXT T
END SUE

! Sub rutina que calcula los promedios de cada alumno. . .


SUB PROMEDIOS (M (, ) )
EOR. T = 1. TO 1 (O
EOR J = 1. TO 3
LET M (I, 4 ) = M (I, 4 ) + M (I, J)
NEXT J

LET M (I, 4 ) = M (I, 4 )/3


NEXT T
END SUE

! Subrutina que presenta por pantalla los resultados . . .


suB PRESENTAR DATOS (NS (), M (, ) )
CILEAR

PRINT "Listado de promedios del curso de informtica:"


PRINT

PRINT "NOMBRE: "; TAB (6O) ; "N1: "; TAB (7O) ; "N2: "; TAB (8O) ; "N3: "; TAB (9O) ; "FINAL: "
EOR. T=1 TO 1 (O
PRINT NS (I) ;
EOR J=1. TO A
PRINT TAB (5 O+U* 1O) ;
PRINT USING "##. ## ": M(I, J) ;
NEXT J
PRINT TAB (90) ;
PRINT USING "##. ## ": M(I, J)
NEXT T
PRINT
END SUE

Corramos nuestro programa para ver lo que hace:

,,...,...,
IEEEEEEEiliII
File
Prgrama que calcula el promedio de notas de 10 alumnis . . .

Ingres= El nombre del alumn: 1


Ibr=8

Ingresemos los nombres de nuestros 10 alumnos.

- 360 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Ahora ingresemos las 3 notas de cada alumno

Terminado el ingreso de datos, el programa nos presentar el resultado de la


siguiente forma:

- 361 -
Tras los pasos de un... Hacker

Nota del autor:


En este ejercicio utilizamos una instruccin que nos permite limpiar la pantalla para presentar
un mensaje, hablamos de la instruccin CLEAR. Tambin para posicionar los resultados
correctamente usamos la funcin TAB(X) que le dice a nuestro True BASIC que ubique el
cursor en la columna X de la fila que actualmente est en uso. Como dije, siempre tengan a mano
la Gua de Uso del True BASIC.

Algoritmo que resuelve el problema de los cuadrados mgicos de


Ejemplo 75.
orden n. Implementar un programa usando una matriz para almacenar los
datos, procesarlos y presentarlos. Verificar que el resultado est correcto.

Para resolver este problema, en primer lugar, investiguemos un poco qu es un


cuadrado mgico?
Un cuadrado mgico es una matriz cuadrada numrica (excepto la de orden 2),
cuyos elementos sern los nmeros del 1 hasta el cuadrado del orden de la
matriz, ingresados de forma secuencial. As el cuadrado mgico de orden 3
tendr elementos que van del 1 al 9, el de orden 4 del 1 al 16 y as sucesivamente.
La particularidad de esta matriz cuadrada de orden n, es que ubicados de una
forma especial estos nmeros; tanto los contenidos en las filas como las columnas
y las diagonales principales de la matriz sumarn la misma cantidad.

Ejemplo:

- 362 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Cuadrado Mgico
4+5+6= 15
2 De Orden
7
3 6

2 + 7 + 6 = 15

9 5 1 9 + 5 + 1 = 15

4 3 8 4 + 3 + 8 = 15

2+5+8 = 15

6 + 1 + 8 = 15

7+5+3= 15

2+9+4= 15

- 363 -
Tras los pasos de un... Hacker

Ahora veamos el de orden 4:

Cuadrado Mgico
12
8
1 10
15
6 Orden
De 11
14
7 13 + 10 + 7 + 4 = 34

15 14 +4=34
4 1+ +

12+6+7 9=34
9 +

+10+ 11 +5=34
5 8

13 +3 +2+16=34
13 3 2 16

1 + 6 + 11 + 16 = 34

4 + 9 + 5 + 16 = 34

14 + 7 + 11 + 2 = 34

15+6+10+3=34

1+12+8+13=34

- 364 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Si nos ponemos a resolver algunos de estos cuadrados a mano, es decir creando


las matrices cuadradas respectivas y llenndolos, observaremos que:

1. Los cuadrados de orden impar siempre se llenan de la misma forma,


empezando con el elemento que est en la ltima columna y en la fila del
centro; avanzando en forma diagonal derecha superior. Si esta supera el
lmite de la matriz, se sigue con el elemento complementario, si la
diagonal ya est ocupada se mueve una posicin a la izquierda y
continuamos con la diagonal derecha superior, hasta llegar al ltimo
elemento de la matriz.
2. Para llenar correctamente los cuadrados mgicos de orden par mltiplos
de 4, se sigue el siguiente procedimiento: Dividiremos alternativamente a
nuestra matriz en dos e intercambiaremos los valores de los elementos
correspondientes inversos, igualmente lo haremos con las filas de la
matriz hasta completar las mitades matriciales sin llegar a intercambiar
ni la fila o columna inicial con la final. Es decir, por ejemplo para el
cuadrado de orden 4, intercambiaremos en orden inverso los elementos
de la columna 2 con los de la columna 3, los de la fila 2 con los de la fila 3,
por la condicin terminar nuestro proceso ya que no podemos
intercambiar los de la columna 4 con los de la columna 1 y los de la fila 4
con los de la fila 1. As terminamos el proceso.

3. Queda como tarea de clase determinar el mtodo para resolver los


cuadrados mgicos pares no mltiplos de 4. Pero de igual forma les
presento la solucin para que la discutan con el profesor gua.

Nota del autor:


Como veremos, reutilizaremos el cdigo de la subrutina para el intercambio de los valores que
ya lo hemos visto. Justamente, esta caracterstica de las subrutinas y funciones, la de reutilizar
el cdigo sin volver a codificar, simplifica la creacin de nuevos algoritmos. Consiste en incluir
estos procedimientos generales en una librera de funciones y subrutinas o mdulo, luego
invocando a la librera podremos usar estos procedimientos en un nuevo programa.

La implementacin del programa quedara como sigue:

- 365 -
Tras los pasos de un... Hacker

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 15. Ejemplo No. 75 del texto.
!
! Algoritmo que resuelve el problema de los cuadrados mgicos.
!
! Se usar una matriz para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! SUM1 = M(1,J) + M(2,J) + M(3,J) ... + M(I,J)
! SUM2 = M(I,1) + M(I,2) + M(I,3) ... + M(I,J)
! SUM3 = M(1,1) + M(2,2) + M(3,3) ... + M(I,J)
! SUM4 = M(1,J) + M(2,J-1) + M(3,J-2) ... + M(I,1)
!
! Variables:
! ORDEN numrica, ingresada por el usuario.
! I, J numricas, subndices de la matriz.
! BIEN numrica, bandera para verificar sumatoria.
! A, B, TEMP numricas, temporales para procedimiento
! de intercambio de valor.
! POX, POY, K numricas, temporales para procedimiento
! MEDIO, VECES numricas, temporales para procedimiento
! MEDIOX, MEDIOY numricas, temporales para procedimiento
!
! Funciones:
! Internas de True BASIC.
! ZER(), inicializa con ceros y redimensiona una
! matriz numrica a n x m elementos.
! INT(), retorna la parte entera de un nmero.
! SIZE(), retorna el valor de la dimensin elegida
! de un arreglo.
! MOD(), retorna el valor del mdulo solicitado.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

! Inicia el proceso.

! Dimensiona la matriz...

DIM N(0,0)
CLEAR
! Ingresa orden de la matriz cuadrada...
PRINT "Deme el orden del cuadrado mgico a resolver: ";
INPUT ORDEN

! Inicializa la matriz con ceros y redimensiona la matriz...

- 366 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

MAT N=ZER(ORDEN,ORDEN)

! Escoge un mtodo de llenado.


IF NOT(ORDEN/2=INT(ORDEN/2)) THEN
ELSE IF MOD(ORDEN,4)=0
CALL IMPARES(N) THEN

CALL
ELSE LLENAR(N)THEN
PARES4(N)
IF ORDEN<>2

CALL ACOMODOPAR(N)
ELSE LLENAR(N)
PARES4(N)

PRINT No existe solucin para este cuadrado


STOP
END IF

IF
! Presenta
CALL datos
ORDEN<=16 THENen
COMPROBAR(N) pantalla,
CALL si no solo comprueba datos...
PRESENTAR(N)

! Espera
GET KEY Sa que el usuario pulse una tecla para terminar...

! Limpia la pantalla.
CLEAR

! Fin
END

! Este
SUB FORproceso
LLENAR(N(,))
I=1 J=1
FOR
Inicializa TO solo para
laSIZE(N,1)
TO los
SIZE(N,2)
matriz con cuadrados
los valores de orden par...
necesarios...

LET K=K+1
LET N(I,J)=K
NEXT J
NEXT I
END SUB

! Llena el cuadrado con los nmeros en la posicin apropiada


! cuando
SUB el cuadrado es de orden impar...
LET POY=INT(SIZE(N,1)/2+1)
IMPARES(N(,))

LET FOR
FOR POX=SIZE(N,1)
I=1 TO SIZE(N,1)
J=1 TO SIZE(N,2)

LET K=K+1
IF N(POY,POX)=0 THEN
ELSE
LET POY=POY+1
LET POX=POX-2
IF POY>SIZE(N,1) THEN
LET POY=1
END IF

- 367 -
Tras los pasos de un.. Hacker

IE" POX1 THEN


LET POX=SIZE (N, 2) 1
END IE"
END IE"

LET N(POY, POX) =K


LET POX=POX+1
LET POY=POY1
IF POX>SIZE (N, 1) THEN
LET POX=1
END IE"
IE" POY1, THEN
LET POY=SIZE (N, 2)
END IE"
NEXT J
NEXT T
END SUE

! Intercambia filas complementarias y columnas complementarias


! comenzando en la mitad de la matriz . . .
SUB PARES4 (N (, ) )
LET MEDIO=SIZE (N, 1)/2
FOR VECES=1. TO MEDIO1
EOR. K=O) TO VECES1
EOR. T=1 TO 2 MEDIO
CALL SWAP (N(I, MEDIOK) , N (2* MEDIO+1I, MEDIO+1+K) )
NEXT T
EOR. T=1 TO 2 MEDIO
CALL SWAP (N (MEDIOK, I) , N(MEDIO+1+K, 2* MEDIO+1I) )
NEXT T
NEXT K
NEXT VECES
END SUE

! Procedimiento especial para cuadrados mgicos de orden par


! no mltiplo de 4 . . .
SUB ACOMODOPAR (N (, ) )
LET MEDIOY=SIZE (N, 1)/2
LET MEDIOX=SIZE (N, 1)/2+1
CALL SWAP (N(1, MEDIOX) , N(SIZE (N, 1) , MEDIOX) )
CALL SWAP (N (MEDIOY, 1) , N(MEDIOY, SIZE(N, 1 ) ) )
FOR J=2 TO SIZE (N, 1)/2
CALL SWAP (N ( 1, J.) , N ( 1, SIZE (N, 1 ) J+1 ) )
CALL SWAP (N ( U, 1 ) , N (SIZE (N, 1 ) J+1, 1 ) )
NEXT J

FOR J=SIZE (N, 2) 1. TO SIZE(N, 2)


CALL SWAP (N (SIZE(N, 2)/2, J) , N (SIZE (N, 2) /2+1, J) )
CALL SWAP (N (J, SIZE (N, 2)/2) , N(J, SIZE(N,2)/2+1) )
NEXT J
END SUE

! Procedimiento de comprobacin de valores segn condicin de


! un cuadrado mgico . . .
SUB COMPROBAR (N (, ) )
FOR I=1. TO SIZE (N, 1)
LET SUM1, SUM2, SUM3, SUM4=O
FOR J=1. TO SIZE (N, 2)

- 368 -
Arreglos, mtodos de clasificacin y bsqueda. Captulo IX.

LET SUM1=SUM1+N (I, J)


NEXT J

FOR J=1. TO SIZE (N, 2)


LET SUM2=SUM2+N (J, I)
NEXT J
IE" SUM1=SUM2 AND BIEN=0 THEN LET ETEN=0 ELSE LET. BIEN=1
NEXT T

FOR J=1. TO SIZE (N, 2)


LET SUM3=SUM3+N (J, J)
NEXT J

FOR J=1. TO SIZE (N, 2)


LET SUM4=SUM4+N (SIZE (N, 2) J+1, J.)
NEXT J
IE" SUM3=SUMA AND BIEN=0 THEN LET. BIEN=0. EL SE LET ETEN=1
IF BIEN=O THEN PRINT TAB (1, 60); "La suma es "; SUM3;" COMPROBADOl"
END SUE

! Presenta los datos conforme lo solicitado . . .


! Muestra en pantalla el cuadrado mgico resuelto . . .
SUB PRESENTAR (N (, ) )
FOR I=O TO SIZE (N, 1) 1
FOR J=O TO SIZE (N, 2) 1
SET CURSOR I 2+2, J.5+1
PRINT " ";
SET CURSOR I2+3, J5+1
PRINT " | ";
SET CURSOR I2+4, J5+1
PRINT " ";
SET CURSOR I2+3, J5+2
PRINT N(I+1, J+1)
SET CURSOR I2+3, U 5+6
PRINT " | ";
NEXT J
NEXT T
PRINT
END SUE

! Sub rutina de intercambio de datos . . .


SUB SWAP (A, B)
ILET" TEME=A
ILET A=E
ILET. E=TEME
END SUE

Ahora corramos nuestro programa y veamos lo que hace, veremos una pantalla
parecida a la siguiente:

- 369 -
Tras los pasos de un... Hacker

Para un cuadrado de orden 3:

Para un cuadrado de orden 4:

Para un cuadrado de orden 5:

- 370 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Para un cuadrado de orden 6:

Para un cuadrado de orden 7:

Para un cuadrado de orden 8:

- 371 -
Tras los pasos de un... Hacker

Para un cuadrado de orden 9:

Para un cuadrado de orden 10:

- 372 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

9.2 MTODOS DE CLASIFICACIN

Dominados los conceptos bsicos de la programacin, ahora estudiemos algunos


mtodos que nos permiten realizar el ordenamiento de una lista de n nmeros o
n palabras, estos procedimientos se los conoce como mtodos de clasificacin.

Los algoritmos que resuelven este problema especfico, han ido evolucionando
con el tiempo; es interesante analizar las implementaciones que algunos famosos
programadores han hecho. Este anlisis nos permite ver la optimizacin del
mtodo.

Aqu podremos entender el concepto de eficiencia algortmica, ya que sin cambiar


el HARDWARE de nuestra computadora, realizaremos la misma tarea ms rpido,
es decir, los programas son ms eficientes.

En este apartado, debemos tener claro que todos los mtodos de clasificacin
hacen intercambio de valores dentro del vector definido, lo nico que cambia es
la lgica de cmo hacerlo? y cundo hacerlo?

Explicaremos algunos de los mtodos para que se entienda la mecnica de


trabajo de los algoritmos de ordenamiento. Otros, nicamente mostraremos el
cdigo fuente del mtodo y en lo posible haremos un poco de historia.

Nota del autor:


Les invito a que discutan cada una de las implementaciones de los mtodos de clasificacin
presentados con el profesor gua; y, en un pequeo laboratorio de informtica comparen la
eficiencia de cada implementacin. Pueden elaborar un informe del tiempo que se demora cada
mtodo versus el nmero de elementos, hay que tener en cuenta para que la comparacin sea
justa, se debe utilizar el mismo vector generado como entrada a las diferentes subrutinas de
ordenamiento y la misma configuracin de la computadora.

Antes que prosigan, sera bueno que intenten resolver el siguiente problema:
Dado el vector numrico A, dimensionado con 5 elementos, escriban un
programa que los ordene en forma ascendente. Los datos son:

- 373 -
Tras los pasos de un... Hacker

A(1)=3
A(2) = 1
A(3)=5
A(4) = 4
A(5)=2

Luego nuestro programa ordenar este vector como sigue:

A(1)=1
A(2)=2
A(3)=3
A(4) = 4
A(5)=5

Es necesario que traten de realizar el ejercicio propuesto, si ya estn


familiarizados con algn mtodo de ordenamiento por favor hagan cuenta que
esta es la primera vez que estn intentando abordar este problema.

Si ustedes pudieron implementar algn algoritmo que ordene el vector,


necesariamente debe encasillarse en alguno de estos mtodos generales:

1. Clasificacin por insercin. Se considera un elemento a la vez y cada


nuevo elemento se ubica en la posicin correcta en funcin de los
elementos previamente clasificados.

2. Clasificacin por intercambio. Utilizamos un mtodo de intercambio


cuando dos elementos que no estn en orden los intercambiamos para
ubicarlos correctamente, terminar el procedimiento cuando ya no sea
necesario hacer ms intercambios.

3. Clasificacin por seleccin. Con estos procedimientos se ubican los


elementos menores o mayores segn el caso y se los va ubicando en la
posicin que corresponde.

4. Mtodo propio de clasificacin. Quiz este procedimiento solo


funciona para los 5 elementos propuestos y deje de funcionar para ms
elementos.

- 374 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

En todo caso es posible que se haya inventado un nuevo mtodo de


ordenamiento.
El criterio de clasificacin para este tipo de algoritmos no es oficial, ya que
muchas implementaciones pueden combinar varias clases de ordenamiento en el
mismo algoritmo. Tambin hay que recordar que existe multitud de mtodos de
ordenamiento y solo mostraremos 9 de los ms populares.

Ahora regresando a nuestra solucin, la misma debe ser general y no tan solo
funcionar para los 5 elementos propuestos como ejercicio.

Para el laboratorio que realizaremos al final de este apartado, probaremos la


eficiencia de nuestros algoritmos con vectores que contengan 20.000, 15.000,
10.000, 5.000 y 2.500 elementos.

LA IMPLEMENTACIN
Para todos los programas ejemplo de los mtodos de ordenamiento, tendremos
que definir algunas subrutinas que nos ayudarn a mostrar un mensaje de
presentacin del programa, carga de valores iniciales aleatorios, el contenido del
vector, una funcin que nos ayude a controlar el tiempo de ejecucin de nuestro
algoritmo, una subrutina que nos ayude a realizar el intercambio de valores entre
dos variables; y, en s la subrutina de ordenamiento con el mtodo seleccionado.

As definidas estas necesidades, implementaremos dos libreras de


procedimientos y los guardaremos en los archivos MENSORT.TRU y
S_LABLIB.TRU. En la primera guardaremos las funciones y procedimientos para
mostrar los mensajes necesarios, en la otra, iremos guardando los mtodos de
ordenamiento y la subrutina de intercambio de valores entre dos variables.

Empecemos definiendo la funcin de conversin del tiempo de ejecucin, esta


funcin nos arrojar el tiempo utilizado en un formato de HH:MM:SS.SSS, es decir
horas, minutos y segundos (con una precisin en milisegundos), luego las
subrutinas auxiliares. La librera MENSORT.TRU, queda definida as:

- 375 -
Tras los pasos de un... Hacker

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Librera de procedimientos y subrutinas auxiliares para ilustrar los
! Mtodos de ordenamiento.
!
! Autor: Nstor Marroqun.

! Variables:
! A, vector numrico, contendr los datos.
! I, numrica, contador de los procesos.
! T numrica, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! HORAS$, MIN$, SEGI$, SEGF$ strings, temporales para conversin de
! tiempo de ejecucin.
! HORAS, MIN, SEG numricas, temporales para conversin de tiempo de
! ejecucin.
! V1, V2, TEMP numricas, temporales para intercambio de valores.
!
! Funciones:
! Definida por el usuario.
! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo
! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! SIZE(A), devuelve el nmero de elementos de un arreglo A.
! ZER(X), inicializa con ceros un arreglo numrico y lo redimensiona
! RND, funcin que calcula un nmero pseudoaleatorio.
a X elementos.

! INT(N), funcin que devuelve el valor entero de un nmero N.


! RANDOMIZE, funcin que inicializa la semilla de generacin de los
! nmeros pseudoaleatorios.
! IP(N), devuelve la parte entera del nmero N.
! FP(N), devuelve la parte fraccionaria del nmero N.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
! ROUND(N,m), devuelve el nmero con m decimales aproximando el ltimo
! valor.
! TRIM$(A$), elimina los espacios exteriores de un string.
! LEN(A$), devuelve el nmero de caracteres que contiene la variable
! string.
! STR$(N), convierte un nmero a string.
! POS(X$,Y$,m), devuelve la posicin de coincidencia de la cadena Y$ en
! X$ a partir del byte m.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

EXTERNAL

- 376 -
Arreglos, mtodos de clasificacin y bsqueda. Captulo IX.

! Euncin que transforma los segundos transcurridos a un formato de:


! HH: MM:SS. SSS, los segundos se expresan en milisegundos.
EUNCTION Tiempo. Transcurrido 3 (T)
! Convierte el tiempo a horas.
LET HORAS=INT (T/36OO)
LET HORASS=TRIMS (STRS (HORAS) )
LET HORASS="OO" | O:2LEN (HORASS) | HORASS
! Convierte la fraccin de hora a minutos .
LET MIN=INT ( (THORAS 3600) /60)
LET MINS=TRIMS (STRS (MIN) )
LET MINS="OO" | O:2LEN (MINS) | MINS
! Convierte la fraccin de minuto a milisegundos.
LET SEG=ROUND ( (THORAS 36OOMIN 6O) , 3.)
! Toma la parte entera de los segundos.
LET SEGIS=TRIMS (STRS (IP (SEG) ) )
LET SEGIS="OO" [O: 2LEN (SEGIS) | SEGIS
! Toma la parte fraccionaria de los segundos.
LET SEGFS=TRIMS (STRS (FP (SEG) ) )
LET SEGFS=SEGFS "OOO"
! Verifica que existan milisegundos.
IF. Pos (SEGFS, ".")=O THEN LET SEGFS=". "SEGES
! Eorma el string para expresar los segundos con milisegundos.
LET SEGS=SEGIS, SEGFS [1:4 ]
LET. Tiempo Transcurridos=HORASS ": "MINS ": "SEGs
END FUNCTION

! Sub rutina que carga el vector con datos aleatorios . . .


suB LLENAR DATOS (A() )
! Inicializa la semilla pseudoaleatoria del generador RND.
RANDOMIZE
! Obtiene el nmero de elementos del vector A. . .
LET N=SIZE (A)
EOR. T=1 TO N

! Calcula un nmero pseudoaleatorio comprendido ente 0 y N.


LET A (I)=INT (RND (N+1) )
NEXT T
END SUE

! Sub rutina que muestra los datos del vector en pantalla . . .


suB PRESENTA VECTOR (A() )
LET N=SIZE (A)
PRINT
PRINT "Actualmente en el vector estn" ; N; "elementos : "
PRINT
! Muestra los elementos del vector . . .
EOR. T=1 TO N
PRINT A (I) ;
NEXT T
PRINT
PRINT

PRINT "Pulse una tecla para continuar. . .


PRINT
END SUE

! Subrutina que muestra un mensaje de saludo y carga por vez primera el vector. . .
SUB PRESENTAR (a ( ) )

- 377 -
Tras los pasos de un... Hacker

Inicializa
SET
! BACK 0 el color de fondo y caracteres de la pantalla...

SET COLOR 15
! Limpia la pantalla...
CLEAR
Presenta el mensaje de saludo...
PRINT "PROGRAMA SORT Ver 1.0, LABORATORIO DE INFORMATICA."
!
PRINT
PRINT "Diseo:"
PRINT Nstor Marroqun."
PRINT " 1.992 - 2.010 (c) NMC Research Ca. Ltda."
PRINT " Quito - Ecuador."
SET COLOR 7
PRINT
PRINT "Vector antes de ser ordenado:"
PRINT
! Verifica que el vector tenga datos...
IF SIZE(A)=0 THEN
! Ingresa y valida que el vector no tenga menos de 1 elemento o ms de
! 20000 elementos...
DO
PRINT "Cuntos elementos van a ser ordenados:";
INPUT N
LOOP WHILE N<1 OR N>20000
! Inicializa el vector con N datos...
MAT A=ZER(N)
CALL LLENAR_DATOS(A)
END IF
CALL
GET PRESENTA_VECTOR(A)
! Presenta
KEY S en pantalla el contenido del vector...

END SUB

! Subrutina que presenta estadstica de evaluacin...


SUB PRESENTAR_EST(A(),NMET$(),R(,))
DECLARE FUNCTION Tiempo_Transcurrido$
! Inicializa
SET BACK 0 el color de fondo y caracteres de la pantalla...

SET COLOR 15
! Limpia la pantalla...
CLEAR
! Presenta el mensaje
"PROGRAMA de saludo...
SORT Ver 1.0, LABORATORIO DE INFORMATICA."
PRINT
PRINT
PRINT "Diseo:"
PRINT Nstor Marroqun."
PRINT " 1.992 - 2.010 (c) NMC Research Ca. Ltda."
PRINT " Quito - Ecuador."
PRINT "
! Clasifica los mtodos de ordenamiento desde el ms lento al ms rpido...
CALL MAT_SHELL_SORT(R,2)
SET COLOR 7
PRINT
PRINT "Clasificacin de los mtodos evaluados por su rendimiento."
PRINT
PRINT "Criterio: Del ms rpido al ms lento."

- 378 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

PRINT
SET COLOR 15
PRINT "Mtodo:";TAB(30);"Tiempo ocupado:";TAB(50);"Elementos ordenados:"
SET COLOR 7
FOR I=1 TO 9
PRINT NMET$(R(I,1));TAB(30);Tiempo_Transcurrido$(R(I,2));TAB(50);SIZE(A)
NEXT I
PRINT
PRINT
GET KEY"Pulse
S una tecla para finalizar..."

END SUB

La librera S_LABLIB.TRU, empieza a definirse con la subrutina que intercambia


los valores de dos variables:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Librera de mtodos de ordenamiento.
!
! Autor: Nstor Marroqun.

! Variables:
! TMP vector numrico, contendr los datos.
! I, J, K, numricas, contadores de los procesos.
! N numrica, cantidad de elementos en el vector.
! V1, V2, TEMP numricas, variables temporales.
! LI, LS, R, X numricas, punteros para intercambio de valores.
!
! Funciones:
! Internas de True BASIC.
! SIZE(A), devuelve el nmero de elementos de un arreglo A.
! INT(N), funcin que devuelve el valor entero de un nmero N.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

EXTERNAL

! Subrutina que intercambia los valores entre dos variables...


SUB SWAP(V1,V2)
LET TEMP=V1
LET V1=V2
LET V2=TEMP
END SUB

- 379 -
Tras los pasos de un... Hacker

9.2.1 MTODOS POR INSERCIN

INSERCIN DIRECTA
El mtodo de insercin directa es el ms obvio y fcil de implementar, consiste
en:
a) Escoger un elemento, empezando desde el segundo del vector ingresado.

b) Compararlo con los inmediatos anteriores (estos ya estn en orden).

c) Movemos los elementos mayores.

d) Ubicamos la posicin para realizar la insercin.


e) Realizamos la insercin.

f) Repetiremos este procedimiento hasta no tener ms elementos que


insertar. Es decir haremos un bucle desde 2 hasta N elementos del
vector.
El algoritmo funciona as:

Mtodo de Insercin Directa


A(1) A(2) A(3) A(4) A(5)

3 1 5 4 2 Vector A al inicio del proceso

J=1

I=2, J=1, TEMP


I=2 1 3 5 4 2 =1

J=3

I=3 J=3, TEMP


I=3 1 3 5 4 2 , =5

J=3

I=4 J=3, TEMP


I=4 1 3 4 5 2 , =4

J=2

I=5 1 2 3 4 5 I=5 , J=2, TEMP = 2

- 380 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Tendremos que definir los subndices I, J, que en nuestro algoritmo nos ayudarn
a ubicar los elementos a mover; y, el elemento a insertar dentro del vector A
definido.

Necesariamente para no perder el valor del elemento a insertar definiremos una


variable temporal (TEMP) para todos los procesos que analicemos en la
subrutina de ordenamiento, trabajaremos con el vector temporal TMP que ser
una copia del vector A.

La subrutina de ordenamiento quedara implementada as:

! Subrutina que ordena el vector con el mtodo de insercin.


SUB INSERCION(TMP())
LET
! N = SIZE(TMP)
Obtiene la cantidad de nmero de elementos del vector a ordenar...

! Empieza
FOR I = 2 el
TO proceso
N de ordenamiento...

LET J
FOR TEMP TMP(I)
= I=TO 2 STEP -1

IF TMP(J-1) > TEMP THEN


! Mueve una posicin si el valor es mayor.
LET TMP(J) = TMP(J-1)
ELSE
EXIT FOR
END IF
NEXT J
LET TMP(J) = TEMP
NEXT I
END SUB

Algoritmo que implementa un mtodo de clasificacin para


Ejemplo 76.

ordenar un vector de n elementos en forma ascendente. Usar el mtodo de


insercin directa. El programa tiene que verificar que la cantidad de
elementos sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 16. Ejemplo No. 76 del texto.
!
! Algoritmo que ilustra el mtodo de clasificacin llamado:
! Mtodo de insercin. (Insercin directa)
!

- 381 -
Tras los pasos de un... Hacker

! Se usar un vector numrico para almacenar los datos y


! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! TEMP numrica, temporal para procedimiento.
!
! Funciones:
! Definida por el usuario.
! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo
! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!
LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE FUNCTION Tiempo_Transcurrido$
! y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Insercin."
SET COLOR 7

- 382 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de insercin.


CALL INSERCION(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
CALL
PRINT
! PRESENTA_VECTOR(A)
Presenta
"Termina
el vector
ordenamiento..."
ordenado.

PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido: ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de insercin.


SUB INSERCION(TMP())
LET
! N = SIZE(TMP)
Obtiene la cantidad de nmero de elementos del vector a ordenar...

! Empieza
FOR el proceso
I = 2 TO N de ordenamiento...

LET J
FOR TEMP TMP(I)
= I=TO 2 STEP -1

IF TMP(J-1) > TEMP THEN


LET TMP(J) = TMP(J-1)
ELSE
EXIT FOR

END IF
NEXT J
LET TMP(J) = TEMP
NEXT I
END SUB

- 383 -
Tras los pasos de un... Hacker

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Insercin.

Elementos:
0 Tiempo (ms):
0,000
164.807,000
92.803,000
41.530,000 200.000,000
150.000,000
100.000,000
50.000,000
0,000 Insercin.
2500 2.524,000

5000 10.235,000

10000
Insercin.
15000

20000

0 10.000 20.000 30.000

MTODO DE SHELL
Donald L. Shell (1.924-), basado en el mtodo de insercin directa, presenta una
variacin a este algoritmo, la misma que la podramos llamar como Mtodo de
Clasificacin por Disminucin de Incrementos. Propuesta hecha en julio de
1.959, desde ah se lo conoce como mtodo de Shell.

La subrutina de ordenamiento quedara implementada as:

! Subrutina que ordena el vector con el mtodo de Shell.


SUB SHELL_SORT(TMP())
LET
! N=SIZE(TMP)
Obtiene
Calcula la
lmite
cantidad
inferior.
de nmero de elementos del vector a ordenar...

DOEmpieza
LET
! el proceso de ordenamiento...
LI=INT(N/2)
WHILE LI>0

! Calcula lmite superior.


DO LS=N-LI
LET

LET J=0
FOR I=1 TO LS
IF TMP(I)>TMP(I+LI) THEN
CALL
! Realiza
SWAP(TMP(I),TMP(I+LI))
intercambio de valores.

LET J=I

- 384
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

END IF
NEXT I
! Calcula nuevo lmite superior.
LET LS=J-LI
LOOP
! Calcula
WHILEnuevo
J<>0 lmite inferior.

LET LI=INT(LI/2)
LOOP

END SUB

Ejemplo 77.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo de
Shell. El programa tiene que verificar que la cantidad de elementos sea
entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 17. Ejemplo No. 77 del texto.
!
! Algoritmo
Mtodo que ilustra
de Shell. el mtodo de clasificacin llamado:
(Insercin)

!
! Implementacin original de:
! Donald L. Shell. Julio de 1959.
!
! Clasificacin por disminucin de incrementos.
!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! LS, LI, TEMP numricas, temporal para procedimiento.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.

- 385 -
Tras los pasos de un... Hacker

!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!
LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Shell Sort."
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de insercin.


CALL SHELL_SORT(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
PRINT "Termina ordenamiento..."
CALL
!
PRINT PRESENTA_VECTOR(A)
Presenta el vector ordenado.

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

- 386 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de Shell.


SUB SHELL_SORT(TMP())
LET
! N=SIZE(TMP)
Obtiene
Calcula la
lmite
cantidad
inferior.
de nmero de elementos del vector a ordenar...

DOEmpieza
LET
! Calcula
el proceso
lmite superior.
!LI=INT(N/2)
WHILE LI>0 de ordenamiento...

LET LS=N-LI
DO

LET J=0
FOR I=1 TO LS
IF TMP(I)>TMP(I+LI) THEN
CALL
! Realiza
SWAP(TMP(I),TMP(I+LI))
intercambio de valores.

ENDLET
IF J=I

NEXT I
! Calcula nuevo lmite superior.
LET LS=J-LI
LOOP
! Calcula
WHILEnuevo
J<>0 lmite inferior.

LET LI=INT(LI/2)
LOOP

END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Shell Sort.

Elementos:
0 Tiempo
0,000 (ms):
Shell Sort. Shell Sort.
4.000,000
2500 190,000
3.000,000
5000 480,000
2.000,000
10000
15000
20000 1.192,000
1.912,000
3.115,000 0,000
1.000,000

0 10.000 20.000 30.000

- 387 -
Tras los pasos de un... Hacker

9.2.2 MTODOS PORINTERCAMBIO

Ahora estudiaremos una gran familia de mtodos de ordenamiento donde el


proceso de intercambio es la caracterstica dominante, a estos mtodos tambin
se los conoce como mtodos de transposicin, que intercambian
sistemticamente pares de elementos que no estn ordenados hasta que
consiguen ubicarlos en el orden correcto y as terminar el proceso.

Revisaremos los mtodos ms populares de esta familia de algoritmos, a saber


tenemos:
MTODO DE LA BURBUJA
El mtodo de la burbuja consiste en:

a) Escoger un elemento, empezando desde el segundo del vector ingresado.

b) Compararlo con el inmediato anterior, si es mayor intercambiar sus


valores.
c) Repetiremos este procedimiento hasta no tener ms elementos que
intercambiar.

d) Repetimos todo el proceso hasta N-1 veces.


El algoritmo funciona as:

Mtodo de Intercambio
Bubble Sort

A(1)
A(2)
A(5)
A(3)
A(4) 2
4
5
1
3 I =5
21
4
1
3 I =5
22
1
3
4 I =5
13
2
3
4 I =5 4

A(J)

- 388 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Tendremos que definir los subndices I, J, que en nuestro algoritmo nos ayudarn
a ubicar los elementos a intercambiar y las veces que haremos el procedimiento
dentro del vector A definido.

La subrutina de ordenamiento quedara implementada as:

! Subrutina que ordena el vector con el mtodo de la burbuja.


SUB FOR
LET I=1
BURBUJA(TMP())
N=SIZE(TMP)
TO N-1

FOR J=2 TO N
IF TMP(J-1)>TMP(J) THEN CALL SWAP(TMP(J-1),TMP(J))
NEXT J
NEXT I
END SUB

Ejemplo 78.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo de
la burbuja. El programa tiene que verificar que la cantidad de elementos
sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 18. Ejemplo No. 78 del texto.
!
! Algoritmo
Mtodo de la
queBurbuja.
ilustra (Intercambio)
el mtodo de clasificacin llamado:

!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! LS, LI, TEMP numricas, temporal para procedimiento.

- 389 -
Tras los pasos de un... Hacker

!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!

LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE FUNCTION Tiempo_Transcurrido$
! y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Bubble Sort."
SET COLOR 7
PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de intercambio.


CALL BURBUJA(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
PRINT "Termina ordenamiento..."

! Presenta el vector ordenado.

- 390 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

CALL PRESENTA_VECTOR(A)
PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de la burbuja.


SUB BURBUJA(TMP())
LET
FOR N=SIZE(TMP)
I=1 TO N-1

FOR J=2 TO N
IF TMP(J-1)>TMP(J) THEN CALL SWAP(TMP(J-1),TMP(J))
NEXT J
NEXT I
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:

Mtodo: Bubble Sort.

Elementos: Tiempo (ms): Bubble Sort.


0 0,000
500.000,000
2500 6.960,000
400.000,000
5000
10000
15000
20000 27.880,000
113.293,000
253.455,000
450.829,000 0,000
300.000,000
200.000,000 Bubble Sort.
100.000,000

0 10.00020.00030.000

MTODO PARALELO DE BATCHER


Un refinamiento al mtodo de la burbuja fue hecho por K. E. Batcher en 1.964, su

- 391 -
Tras los pasos de un... Hacker

propuesta en BASIC podra ser esta:


! Subrutina que ordena el vector con el mtodo paralelo de Batcher.
SUB INTERCAMBIO_BATCHER(TMP())
LET I=1
FOR N=SIZE(TMP)
TO N-1

FOR J=I+1 TO N
IF TMP(J)<TMP(I) THEN CALL SWAP(TMP(J),TMP(I))
NEXT J
NEXT I
END SUB

Algoritmo que implementa un mtodo de clasificacin para


Ejemplo 79.

ordenar un vector de n elementos en forma ascendente. Usar el mtodo


paralelo de Batcher. El programa tiene que verificar que la cantidad de
elementos sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 19. Ejemplo No. 79 del texto.
!
! Algoritmo
Mtodo paralelo
que ilustra
de Batcher.
el mtodo
(Intercambio)
de clasificacin llamado:

!
! Implementacin original de:
! K. E. Batcher. 1964.
!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se

- 392 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!
LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE FUNCTION Tiempo_Transcurrido$
! y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Intercambio de Batcher."
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de intercambio.


CALL INTERCAMBIO_BATCHER(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
PRINT "Termina ordenamiento..."
CALL
!
PRINT PRESENTA_VECTOR(A)
Presenta el vector ordenado.

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"

- 393 -
Tras los pasos de un... Hacker

SET COLOR 15
! Muestra el tiempo utilizado.
PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo paralelo de Batcher.


SUB INTERCAMBIO_BATCHER(TMP())
LET I=1
FOR N=SIZE(TMP)
TO N-1

FOR J=I+1 TO N
IF TMP(J)<TMP(I) THEN CALL SWAP(TMP(J),TMP(I))
NEXT J
NEXT I
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Batcher.

Elementos:
0 Tiempo (ms):
0,000
Batcher.
250.000,000
2500 3.295,000
200.000,000
5000
10000
15000
20000 13.330,000
53.827,000
120.984,000
215.520,000 0,000
150.000,000
100.000,000
Batcher.
50.000,000

0 10.000 20.000 30.000

MTODO QUICKSORT

Otra mejora sustancial al mtodo de la burbuja fue hecha por C. A. R. Hoare


(1.934-) en 1.962, a la que le denomin Quick Sort, su propuesta en BASIC
(utilizando recursin) podra ser esta:

! Subrutina que ordena el vector con el mtodo Quick Sort.


SUB QUICKSORT(TMP())

- 394 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

LET N=SIZE(TMP)
IF N=0 THEN EXIT SUB
CALL SORT(TMP,1,N)
END SUB

SUB SORT(TMP(),L,R)
LET I=L
LET J=R
LET X=TMP(INT((L+R)/2))
DO
DO WHILE TMP(I)<X
LET I=I+1
LOOP
DO LET
WHILE X<TMP(J)
J=J-1

LOOP
IF I<=J THEN
CALL SWAP(TMP(I),TMP(J))
LET I=I+1
LET J=J-1
END IF
! Inicia
LOOP elI>J
UNTIL proceso recursivo.

IF L<J THEN CALL SORT(TMP,L,J)


IF I<R THEN CALL SORT(TMP,I,R)
END SUB

Ejemplo 80.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo
Quick Sort. El programa tiene que verificar que la cantidad de elementos
sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 20. Ejemplo No. 80 del texto.
!
! Algoritmo
Mtodo queSort.
Quick ilustra el mtodo de clasificacin llamado:
(Intercambio)

!
! Implementacin
C. A. R. Hoare.original
1962. de:

!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas:

- 395 -
Tras los pasos de un... Hacker

! Ninguna.
!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! L, R, X numricas, punteros para proceso.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!

LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Quick Sort."
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

- 396 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! Inicia el proceso de ordenamiento usando el mtodo de intercambio.


CALL QUICKSORT(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
CALL
PRINT
! PRESENTA_VECTOR(A)
Presenta
"Termina
el vector
ordenamiento..."
ordenado.

PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo Quick Sort.


SUB QUICKSORT(TMP())
LET N=SIZE(TMP)
IF N=0 THEN EXIT SUB
CALL SORT(TMP,1,N)
END SUB

SUB SORT(TMP(),L,R)
LET I=L
LET J=R
LET X=TMP(INT((L+R)/2))
DO
DO WHILE TMP(I)<X
LET I=I+1
LOOP
DO LET
WHILE X<TMP(J)
J=J-1

LOOP
IF I<=J THEN
CALL SWAP(TMP(I),TMP(J))
LET I=I+1
LET J=J-1
END IF
! Inicia
LOOP elI>J
UNTIL proceso recursivo.

IF L<J THEN CALL SORT(TMP,L,J)


IF I<R THEN CALL SORT(TMP,I,R)
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su

- 397 -
Tras los pasos de un... Hacker

comportamiento, en un grfico estadstico como el siguiente:


Mtodo: Quick Sort.

Elementos: Tiempo (ms): Quick Sort.


0
2500
5000 0,000
40,000
90,000 500,000
400,000

300,000
10000 191,000
200,000 Quick Sort.
15000 321,000
100,000
20000 390,000

0,000
0 10.000 20.000 30.000

MTODO DE LA SACUDIDA (CCTEL)

Otro mtodo de intercambio propuesto es una variacin al mtodo de la burbuja,


que se lo conoce como mtodo de la sacudida o mtodo de cctel, su propuesta
en BASIC podra ser esta:

! Subrutina que ordena el vector con el mtodo de la sacudida.


SUB LET
SACUDIDA(TMP())
N=SIZE(TMP)
LI=2

LET LS=N
LET I=LS
DO
FOR J=LS TO LI STEP -1
IF TMP(J)<TMP(J-1) THEN
CALL SWAP(TMP(J),TMP(J-1))
LET I=J
END IF
NEXT J
LET J=LI
FOR LI=I+1
TO LS

IF TMP(J)<TMP(J-1) THEN
CALL SWAP(TMP(J),TMP(J-1))
LET I=J
END IF
NEXT J
LOOP
LET
UNTIL
LS=I-1
LI>LS

END SUB

- 398 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Ejemplo 81.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo de
la sacudida. El programa tiene que verificar que la cantidad de elementos
sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 21. Ejemplo No. 81 del texto.
!
! Algoritmo
Mtodo quesacudida.
de la ilustra el mtodo de clasificacin llamado:
(Intercambio)

!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables:
! A, TMP, vectores numricos, contendrn los datos.
! I, J numricas, contadores de los procesos.
! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! LI, LS numricas, punteros para proceso.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!

- 399 -
Tras los pasos de un... Hacker

LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Sacudida."
SET COLOR 7
PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de intercambio.


CALL SACUDIDA(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
CALL
PRINT
! Presenta
PRESENTA_VECTOR(A)
"Termina
el vector
ordenamiento..."
ordenado.

PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de la sacudida.


SUB SACUDIDA(TMP())
LET N=SIZE(TMP)
LET LI=2
LET LS=N
LET I=LS
DO

- 400 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

FOR J=LS TO LI STEP -1


IF TMP(J)<TMP(J-1) THEN
CALL SWAP(TMP(J),TMP(J-1))
LET I=J
END IF
NEXT J
LET J=LI
FOR LI=I+1
TO LS

IF TMP(J)<TMP(J-1) THEN
CALL SWAP(TMP(J),TMP(J-1))
LET I=J
END IF
NEXT J
LOOP
LET
UNTIL
LS=I-1
LI>LS

END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Sacudida.

Elementos:
0 Tiempo
0,000 (ms):
Sacudida. Sacudida.
300.000,000
200.000,000
100.000,000
0,000 0 10.000 20.000 30.000
2500 4.046,000

5000
10000
15000 16.494,000
66.836,000
150.016,000

20000 265.392,000

9.2.3 MTODOS PORSELECCIN

Otra gran familia de mtodos de clasificacin donde el proceso de ordenamiento


se produce por una seleccin repetida.

Revisaremos los mtodos ms populares de esta familia de algoritmos, a saber


tenemos:

- 401 -
Tras los pasos de un... Hacker

SELECCIN DIRECTA
El mtodo de seleccin directa consiste en:
a) Escoger un elemento, empezando desde el primero del vector ingresado.

b) Ubicar la posicin del elemento actual.

c) Compararlo el resto de elementos, si es mayor intercambiar sus valores.

d) Repetimos todo el proceso hasta N-1 veces.

El algoritmo funciona as:

Mtodo de Seleccin
Directa

A(1)
A(2)
A(3)
A(4)
A(5) 2
4
5
1
3 I =3
11
4
5
2 I =3
12
2
5
4 I =5
13
2
3
4 I =5 4

R=4 R=4 R=5 R=4

A(J)

Tendremos que definir los subndices I, J, que en nuestro algoritmo nos ayudarn
a ubicar los elementos a intercambiar y las veces que haremos el procedimiento
dentro del vector A definido, el puntero R mantendr el valor del elemento
seleccionado.

La subrutina de ordenamiento quedara implementada as:

- 402 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! Subrutina que ordena el vector con el mtodo de seleccin.


SUB FOR
LET I=1
SELECCION(TMP())
N=SIZE(TMP)
TO N-1

FOR
LET J=I+1
R=I TO N

IF TMP(R)>TMP(J) THEN LET R=J


NEXT J
IF R<>I THEN CALL SWAP(TMP(I),TMP(R))
NEXT I
END SUB

Algoritmo que implementa un mtodo de clasificacin para


Ejemplo 82.

ordenar un vector de n elementos en forma ascendente. Usar el mtodo de


seleccin directa. El programa tiene que verificar que la cantidad de
elementos sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:


! Tras los pasos de un Hacker.
! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 22. Ejemplo No. 82 del texto.
!
! Algoritmo
Mtodo que ilustra
de seleccin el mtodo
directa. de clasificacin llamado:
(Seleccin)

!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! R numrica, puntero para proceso.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.

- 403 -
Tras los pasos de un... Hacker

!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!
LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Seleccin."
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL SELECCION(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
PRINT "Termina ordenamiento..."
CALL
!
PRINT PRESENTA_VECTOR(A)
Presenta el vector ordenado.

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT Tiempo_Transcurrido$(TF)

- 404 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

SET COLOR 7
GET KEY S
END

! Subrutina que ordena el vector con el mtodo de seleccin.


SUB FOR
LET I=1
SELECCION(TMP())
N=SIZE(TMP)
TO N-1

LET R=I
FOR J=I+1 TO N
IF TMP(R)>TMP(J) THEN LET R=J
NEXT J
IF R<>I THEN CALL SWAP(TMP(I),TMP(R))
NEXT I
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Seleccin.

Elementos:
0 Tiempo (ms):
0,000
Seleccin.
5000
10000 7.961,000
32.657,000 150.000,000
100.000,000
2500 1.993,000

50.000,000
0,000 0 10.000 20.000 30.000
Seleccin.
15000 73.436,000

HEAP
20000 SORT
130.468,000

Un refinamiento interesante en los algoritmos de seleccin, es la propuesta hecha


por Robert W. Floyd (1.936-2.001) en 1.964, mtodo que lo denomin Heap Sort.

La subrutina de ordenamiento quedara implementada as:


! Subrutina que ordena el vector con el mtodo de seleccin.
SUB FOR
LET I
HEAPSORT(TMP())
N=SIZE(TMP)
= 2 TO N

CALL PERCOLATEUP(I,TMP)

- 405 -
Tras los pasos de un... Hacker

NEXT I
FOR CALL
I = NSWAP(TMP(1),TMP(I))
TO 2 STEP -1

NEXTCALL
I PERCOLATEDOWN(I-1,TMP)

END SUB

SUB PERCOLATEDOWN(N,TMP())
LET I=1

DO
LET J=2*I
IF J>N THEN EXIT DO
IF J+1<=N THEN
IF TMP(J+1) > TMP(J) THEN
LET J=J+1
END IF
END IF
IF TMP(I) < TMP(J) THEN
CALL SWAP(TMP(I),TMP(J))
ELSE
LET
E XITI=J
DO

END IF
LOOP
END SUB

SUB PERCOLATEUP(N,TMP())
LET I=N

DO UNTIL I=1
LETTMP(I)
IF J=INT(I/2)
> TMP(J) THEN

CALL SWAP(TMP(J),TMP(I))
ELSE
LET
E XITI=J
DO

END IF
LOOP
END SUB

Ejemplo 83.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo de
Heap Sort. El programa tiene que verificar que la cantidad de elementos
sea entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 23. Ejemplo No. 83 del texto.

-406
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

!
! Mtodo
Algoritmo
HeapSort.
que ilustra
(Seleccin)
el mtodo de clasificacin llamado:

!
! Implementacin original de:
! R. W. Floyd. 1964.
!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables:
! A, TMP, vectores numricos, contendrn los datos.
! I, J numricas, contadores de los procesos.
! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!

LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

- 407 -
Tras los pasos de un... Hacker

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: HeapSort."
SET COLOR 7
PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL HEAPSORT(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
CALL
PRINT
! PRESENTA_VECTOR(A)
Presenta
"Termina
el vector
ordenamiento..."
ordenado.

PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de seleccin.


SUB FOR
LET I
HEAPSORT(TMP())
N=SIZE(TMP)
= 2 TO N

NEXTCALL
I PERCOLATEUP(I,TMP)

FOR CALL
I = NSWAP(TMP(1),TMP(I))
TO 2 STEP -1

NEXTCALL
I PERCOLATEDOWN(I-1,TMP)

END SUB

SUB PERCOLATEDOWN(N,TMP())
LET I=1

DO
LET J=2*I
IF J>N THEN EXIT DO
IF J+1<=N THEN
IF TMP(J+1) > TMP(J) THEN
LET J=J+1
END IF

- 408 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

END IF
IF TMP(I) < TMP(J) THEN
CALL SWAP(TMP(I),TMP(J))
LET I=J
ELSE
EXIT DO
END IF
LOOP
END SUB

SUB PERCOLATEUP(N,TMP())
LET I=N

DO UNTIL I=1
LETTMP(I)
IF J=INT(I/2)
> TMP(J) THEN

CALL SWAP(TMP(J),TMP(I))
LET I=J
ELSE
EXIT DO
END IF
LOOP
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Heap Sort.

Elementos: Tiempo (ms): Heap Sort.


0 0,000
20000 991,000 1.500,000
1.000,000
500,000
0,000 0 10.000 20.000 30.000
2500 90,000

5000 210,000

10000
15000 451,000
711,000 Heap Sort.

MTODO DE CAMBIO
Otro mtodo de seleccin es la implementacin llamada como mtodo de cambio,
su propuesta en BASIC podra ser esta:

- 409 -
Tras los pasos de un... Hacker

! Subrutina que ordena el vector con el mtodo de seleccin.


SUB CAMBIO(TMP())
LET I=1
FOR N=SIZE(TMP)
TO N

FOR
LET J=I+1
R=I TO N

IF TMP(J)<TMP(R) THEN
ENDLET
IF X=J

NEXT J
IF R>I THEN
CALL SWAP(TMP(I),TMP(R))
END IF
NEXT I
END SUB

Ejemplo 84.Algoritmo que implementa un mtodo de clasificacin para


ordenar un vector de n elementos en forma ascendente. Usar el mtodo de
cambio. El programa tiene que verificar que la cantidad de elementos sea
entre 1 y 20.000.

Definido el problema, propongamos el cdigo solucin, quedar algo as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 24. Ejemplo No. 84 del texto.
!
! Algoritmo
Mtodo que ilustra
de cambio. el mtodo de clasificacin llamado:
(Seleccin)

!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! R numrica, puntero para proceso.
!
! Funciones:
! Definida por el usuario.
! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo

- 410
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se


! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene los mtodos de ordenamiento.
!
! Mdulos:
! Ninguno.
!

LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE FUNCTION Tiempo_Transcurrido$
! y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0)
CLEAR

! Inicializar el vector si no tiene elementos y presentar un mensaje de saludo


! y objetivo del programa.
CALL PRESENTAR(A)
SET COLOR 15
PRINT "Mtodo utilizado: Cambio."
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL CAMBIO(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

PRINT
PRINT "Termina ordenamiento..."

CALL
!
PRINT PRESENTA_VECTOR(A)
Presenta el vector ordenado.

! Alerta al usuario con un sonido que el proceso termin.

- 411 -
Tras los pasos de un... Hacker

PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido : ";
PRINT
SET Tiempo_Transcurrido$(TF)
COLOR 7

GET KEY S
END

! Subrutina que ordena el vector con el mtodo de seleccin.


SUB CAMBIO(TMP())
LET
FOR N=SIZE(TMP)
I=1 TO N

FOR
LET J=I+1
R=I TO N

IF TMP(J)<TMP(R) THEN
ENDLET
IF R=J

NEXT J
IF R>I THEN
CALL SWAP(TMP(I),TMP(R))
END IF
NEXT I
END SUB

Ahora con varios valores de elementos del vector de prueba, podremos ver su
comportamiento, en un grfico estadstico como el siguiente:
Mtodo: Cambio.

Elementos:
0 Tiempo
0,000 (ms):
Cambio.
150.000,000
2500 1.973,000

100.000,000
50.000,000
5000
10000
15000 8.141,000
32.086,000
73.045,000

Cambio.

0,000
20000 129.256,000
0 10.000 20.000 30.000

- 412
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

LABORATORIO DE INFORMTICA

Ahora, con todos estos mtodos de clasificacin aprendidos, construyamos una


librera que contenga todos los mtodos. Elaboremos un programa para probarlo
en un laboratorio y podamos apreciar la eficiencia de cada mtodo.

La librera de mtodos de ordenamiento que la guardamos en el archivo


S_LABLIB.TRU, queda finalmente definida as:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Librera de mtodos de ordenamiento.
!
! Autor: Nstor Marroqun.

! Variables:
! TMP vector numrico, contendr los datos.
! I, J, K, numricas, contadores de los procesos.
! N numrica, cantidad de elementos en el vector.
! V1, V2, TEMP numricas, variables temporales.
! LI, LS, R, X numricas, punteros para intercambio de valores.
!
! Funciones:
! Internas de True BASIC.
! SIZE(A), devuelve el nmero de elementos de un arreglo A.
! INT(N), funcin que devuelve el valor entero de un nmero N.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!

EXTERNAL

! Subrutina que ordena el vector con el mtodo de insercin.


SUB INSERCION(TMP())
LET
! N = SIZE(TMP)
Obtiene la cantidad de nmero de elementos del vector a ordenar...

! Empieza
FOR I = 2 el
TO proceso
N de ordenamiento...

LET J
FOR TEMP TMP(I)
= I=TO 2 STEP -1

IF TMP(J-1) > TEMP THEN


! Mueve una posicin si el valor es mayor.
LET TMP(J) = TMP(J-1)
ELSE
EXIT FOR

- 413 -
Tras los pasos de un.. Hacker

END IE"
NEXT J

LET TMP (U) = TEMP


NEXT T
END SUE

! Sub rutina que ordena el vector con el mtodo de Shell.


suB SHELL SORT (TMB () )
! Obtiene la cantidad de nmero de elementos del vector a ordenar. . .
LET N=SIZE (TMP)
! Calcula lmite inferior.
LET LI=INT (N/2)
! Empieza el proceso de ordenamiento . . .
DO WHILE LI> (O
! Calcula lmite superior.
ILET IS=N II
DO
ILET' J=()
EOR. T=1 TO LS
IF TME (I) >TME (I+LI) THEN
! Realiza intercambio de valores .
CALL SWAP (TMP (I) ,TMP (I+LI) )
ILET' J= I
END IE"
NEXT T

! Calcula nuevo lmite superior.


ILET IS= J II
LOOP WHILE JC (O
! Calcula nuevo lmite inferior.
LET LI=INT (LI/2)
LOOP
END SUE

! Sub rutina que ordena el vector con el mtodo de la burbuja.


SUB BURBUUA (TMP ( ) )
LET N=SIZE (TMP)
EOR. T=1 TO N1
EOR J= 2 TO N

IF TMP (J1) >TMP (J) THEN CALL SWAP (TMP (J1) , TMP (U) )
NEXT J
NEXT T
END SUE

! Sub rutina que ordena el vector con el mtodo paralelo de Batcher.


suB INTERCAMBIO EATCHER (TMB () )
LET N=SIZE (TMP)
EOR. T=1 TO N1
EOR J=T+1. TO N

IF TMP (U) <TMP (I) THEN CALL SWAP (TMB (U) , TMP (I) )
NEXT J
NEXT T
END SUE

! Sub rutina que ordena el vector con el mtodo Quick Sort.


SUB QUICKSORT (TMP ( ) )
LET N=SIZE (TMP)

- 414 -
Arreglos, mtodos de clasificacin y bsqueda. Captulo IX.

IE" N=O) THEN EXIT SUE


CALL SORT (TMP, 1, N)
END SUE

SUB SORT (TMP ( ) , L, R)


ILET I=I,
ILET' J=R
LET X=TMP (INT ( (L+R)/2) )
DO

DO WHILE TMP (I) <X


LET T=I+1
LOOP

DO WHILE XTMP (U)


ILET' J= J1
LOOP
IE" T =J THEN

CALL SWAP (TMP (I) ,TMP (U) )


LET T=I+1
ILET' J= J1
END IE"
ILOOP UNTIL I> J

! Inicia el proceso recursivo.


IF LU THEN CALL SORT (TMP, L, J)
IF I<R. THEN CALL SORT (TMP, I, R)
END SUE

! Sub rutina que ordena el vector con el mtodo de la sacudida.


SUB. SACUDIDA (TMP ( ) )
LET N=SIZE (TMP)
LET LI=2
ILET IS=N
ILET I=IS
DO
FOR J=LS TO LI STEP 1
IF TMP (U) <TMP (J1) THEN
CALL SWAP (TMP (J) ,TMP (J1) )
ILET I= J
END IE"
NEXT J
ILET II= I+1
EOR J=IT TO LS

IF TMP (U) <TMP (J1) THEN


CALL SWAP (TMP (J) ,TMP (J1) )
ILET I= J
END IE"
NEXT J
LET. LS=T1
ILOOP UNTIL II > IS
END SUE

! Sub rutina que ordena el vector con el mtodo de seleccin.


SUB SELECCION (TMP ( ) )
LET N=SIZE (TMP)
EOR. T=1 TO N1
ILET' R= I
EOR J=T+1. TO N

- 415 -
Tras los pasos de un.. Hacker

IF TMP (R) >TMP (U) THEN LET R=U


NEXT J

IF R.<> I THEN CALL SWAP (TMP (I) , TMP (R) )


NEXT T
END SUE

! Sub rutina que ordena el vector con el mtodo de seleccin.


SUB HEAPSORT (TMP ( ) )
LET N=SIZE (TMP)
EOR. T = 2 TO N
CALL PERCOLATEUP (I, TMP)
NEXT T
EOR. T = N TO 2 STEP 1
CALL SWAP (TMP (1) ,TMP (I) )
CALL PERCOLATEDOWN (I1, TMP)
NEXT T
END SUE

SUB PERCOLATEDOWN (N,TMP ( ) )


ILET I =1
DO
LET. J= 2 T
IE" J>N THEN EXIT DO
IE" J+1 =N THEN
IF TMP (J+1) > TMP (U) THEN
LET. J=J+1
END IE"
END IE"
IF TME (I) < TMP (U) THEN
CALL SWAP (TMP (I) ,TMP (U) )
ILET I= J
EL SE
EXIT DO
END IE"
LOOP
END SUE

SUB PERCOLATEUP (N, TMP ( ) )


ILET I=N
DO UNTIL T=1
LET J=INT (I/2)
IF TME (I) > TMP (J) THEN
CALL SWAP (TMP (J) ,TMP (I) )
ILET I= J
EL SE
EXIT DO
END IE"
LOOP
END SUE

! Sub rutina que ordena el vector con el mtodo de seleccin.


SUB CAMBIO (TMP ( ) )
LET N=SIZE (TMP)
EOR. T=1 TO N
ILET' R= I
EOR J=T+1. TO N

-416 -
Arreglos, mtodos de clasificacin y bsqueda. Captulo IX.

IF TMP (U) <TMP (R) THEN


ILET' R= J
END IE"
NEXT J
IE" R> T THEN

CALL SWAP (TMP (I) ,TMP (R) )


END IE"
NEXT T
END SUE

! Sub rutina que intercambia los valores entre dos variables . . .


SUB SWAP (V1, V2)
LET TEME=V1.
LET. V1 =V2
LET. V.2=TEMP
END SUE

! Ordenamiento de matrices en base a una clave K.


! Sub rutina que ordena una matriz, comparando una clave K (columna)
! de una matriz con el mtodo de Shell.
suB MAT SHELL SORT (TMB (, ) , K)
! Obtiene la cantidad de nmero de elementos de la dimensin de la matriz. . .
LET N=SIZE (TMP, 1)
! Calcula lmite inferior.
LET LI=INT (N/2)
! Empieza el proceso de ordenamiento . . .
DO WHILE LI> (O
! Calcula lmite superior.
ILET IS=N II
DO
ILET' J=()
EOR. T=1 TO LS

IF TMP (I, K) >TMP (I+LI, K) THEN


! Realiza intercambio de valores .
CALL SWAP COL (TMP, I, I+LI)
ILET' J= I
END IE"
NEXT T

! Calcula nuevo lmite superior.


ILET IS= J II
LOOP WHILE JC (O
! Calcula nuevo lmite inferior.
LET LI=INT (LI/2)
LOOP
END SUE

! Sub rutina que intercambia los valores entre filas de una matriz. . .
sUB SWAE COL (TMB (, ) , I, J)
LET X=SIZE (TMP, 2)
EOR. K=1. TO X

LET TEMP=TMP (I, K)


LET TMP (I, K)=TMP (J, K)
LET TMP (J, K)=TEMP
NEXT K
END SUE

- 417 -
Tras los pasos de un... Hacker

Algoritmo que permite realizar una comparacin de los diferentes


Ejemplo 85.

mtodos de ordenamiento en forma ascendente. Usar todos los mtodos de


ordenamiento aprendidos. El programa tiene que verificar que la cantidad
de elementos sea entre 1 y 20.000.

Ahora implementemos el programa para nuestro laboratorio, puede ser la


siguiente propuesta:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 25. Ejemplo No. 85 del texto.
!
! Laboratorio de informtica.

! Programa que ilustra el uso de los mtodos de ordenamiento.


!
! Compara los diversos mtodos.
!
! Se usar un vector numrico para almacenar los datos y
! presentar los resultados.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A, TMP, vectores numricos, contendrn los datos.

! I, J numricas, contadores de los procesos.


! TI, TF, T numricas, tiempo de ejecucin.
! S numrica, temporal captura cdigo de tecla pulsada.
! N numrica, cantidad de elementos en el vector.
! R numrica, puntero para proceso.
!
! Funciones: Definida por el usuario.

! Tiempo_Transcurrido$, funcin string que devuelve el valor del tiempo


! transcurrido en un formato HH:MM:SS.SSS el tiempo en segundos se
! expresar en milisegundos.
!
! Internas de True BASIC.
! TIME, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! MENSORT.TRU, contiene funciones y subrutinas comunes a todos los
! procedimientos de ordenamiento.
!
! S_LABLIB.TRU, contiene subrutinas con los mtodos de ordenamiento.
!

- 418 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! Mdulos:
! Ninguno.
!
LIBRARY "MENSORT.TRU",
! Incluye "S_LABLIB.TRU"
los procedimientos guardados en la librera...

! Inicia el proceso.

! Definimos una funcin que transformar la cantidad de segundos a horas, minutos


DECLARE
! FUNCTION Tiempo_Transcurrido$
y segundos...

! Vector A que contendr


Dimensionamos el vectorlos elementos
a ser a ordenarse.
utilizado.

DIM A(0), TMP(0), R(9,2), NMET$(9)


CLEAR

FOR I=1 TO 9
! Inicializar el vector si no tiene elementos y presentar un mensaje de
! saludo y objetivo del programa.
LET
CALLR(I,1)=I
MAT PRESENTAR(A)
TMP=A

SELECT CASE I
CASE 1
LET NMET$(I)=Insercin.
SET COLOR 15
PRINT
SET COLOR
"Mtodo
7 utilizado: ;NMET$(I)

PRINT
Inicializa
LET
PRINT
! "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL INSERCION(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 2
LET NMET$(I)=Shell
SET COLOR 15 Sort.

SET
PRINT
COLOR
"Mtodo
7 utilizado: ;NMET$(I)

PRINT
Inicializa
LET
PRINT
! "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL SHELL_SORT(A)

! Captura el tiempo final de ejecucin como TF (tiempo final).

- 419 -
Tras los pasos de un... Hacker

LET TF=TIME-TI
LET R(I,2)=TF
CASE 3
LET NMET$(I)=Bubble
SET COLOR 15 Sort.

PRINT
SET COLOR
"Mtodo
7 utilizado: ;NMET$(I)

PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL BURBUJA(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 4
LET NMET$(I)=Intercambio de Batcher.
SET COLOR 15
PRINT "Mtodo utilizado: ;NMET$(I)
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL INTERCAMBIO_BATCHER(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 5
LET NMET$(I)=QuickSort.
SET COLOR 15
PRINT "Mtodo utilizado: ;NMET$(I)
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL QuickSort(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 6
LET NMET$(I)=Sacudida.
SET COLOR 15

- 420
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

PRINT "Mtodo
SET COLOR 7 utilizado: ;NMET$(I)

PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL SACUDIDA(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 7
LET NMET$(I)=Seleccin.
SET COLOR 15
PRINT "Mtodo utilizado: ;NMET$(I)
SET COLOR 7
PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL SELECCION(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 8
LET NMET$(I)=HeapSort.
SET COLOR 15
PRINT "Mtodo utilizado: ;NMET$(I)
SET COLOR 7
PRINT
! Inicializa
PRINT
LET "Iniciael
TI=TIME tiempo de ejecucin como TI (tiempo inicial).
ordenamiento..."

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL HEAPSORT(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE 9
LET NMET$(I)=Cambio.
SET COLOR 15
PRINT "Mtodo utilizado: ;NMET$(I)
SET COLOR 7
PRINT
PRINT "Inicia ordenamiento..."

- 421 -
Tras los pasos de un... Hacker

! Inicializa
LET TI=TIME el tiempo de ejecucin como TI (tiempo inicial).

! Inicia el proceso de ordenamiento usando el mtodo de seleccin.


CALL CAMBIO(A)

Captura
LET
! el tiempo final de ejecucin como TF (tiempo final).
TF=TIME-TI

LET R(I,2)=TF
CASE ELSE
END SELECT

PRINT
CALL
PRINT
! PRESENTA_VECTOR(A)
Presenta
"Termina
el vector
ordenamiento..."
ordenado.

PRINT

! Alerta al usuario con un sonido que el proceso termin.


PLAY "o4l32dcga"
SET COLOR 15

! Muestra el tiempo utilizado.


PRINT "Tiempo requerido: ";
PRINT Tiempo_Transcurrido$(TF)
SET COLOR 7
GET KEY S
MAT A=TMP
NEXT I
! Clasifica los mtodos de ordenamiento desde el peor hasta el mejor
CALL PRESENTAR_EST(A,NMET$,R)
END

RESULTADOS DEL LABORATORIO


Ejecutemos nuestro laboratorio y analicemos algunos resultados, generemos
vectores de 20.000, 15.000, 10.000, 5.000, 2.500 elementos y veamos cmo se
comportan nuestros algoritmos?

- 422
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

1. Resultados para ordenar un vector de 20.000 elementos con varios


mtodos de clasificacin:

2. Resultados para ordenar un vector de 15.000 elementos con varios


mtodos de clasificacin:

- 423 -
Tras los pasos de un... Hacker

3. Resultados para ordenar un vector de 10.000 elementos con varios


mtodos de clasificacin:

4. Resultados para ordenar un vector de 5.000 elementos con varios


mtodos de clasificacin:

- 424
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

5. Resultados para ordenar un vector de 2.500 elementos con varios


mtodos de clasificacin:

En clase con el profesor gua pueden realizar ms estudios sobre el


comportamiento de estos algoritmos, en todo caso lo importante del laboratorio
es comprobar por nosotros mismos que un problema tiene varias soluciones; y,
que conforme se va mejorando el algoritmo su eficiencia tambin mejora.

- 425 -
Tras los pasos de un... Hacker

- 426 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

EJERCICIOS PROPUESTOS:

Elaborar los algoritmos solicitados para resolver cada uno de los siguientes
problemas:

Modificar todos los algoritmos de clasificacin para que ordene


Ejercicio 261.
vectores de tipo string. Presentar en pantalla los resultados.

Modificando el programa del ejemplo 74. Hacer que el programa


Ejercicio 262.
presente el listado de alumnos ordenado alfabticamente. Presente la
clasificacin desde el mejor promedio hasta el peor. Presentar en pantalla los
resultados.
Se pide realizar un programa para calcular la suma de dos matrices A y
Ejercicio 263.
B de m x n. Implementar los algoritmos para ingreso de datos, proceso de datos y
presentacin de los resultados.
Se pide realizar un programa para que multiplique dos matrices A y B.
Ejercicio 264.
Implementar los algoritmos para ingreso de datos, proceso de datos y
presentacin de los resultados. El algoritmo debe validar las dimensiones de las
matrices para que pueda producirse la multiplicacin matricial.
Se pide realizar un programa para simular en un tablero de ajedrez el
Ejercicio 265.
paso del caballo. Implementar los algoritmos para que una matriz simule un
tablero de ajedrez, simule el movimiento de un caballo; y, finalmente calcule los
movimientos que se debe realizar para que, empezando en cualquier posicin del
tablero, el caballo pueda moverse por todos los casilleros sin pasar dos veces por
la misma posicin. Presentar el listado de los movimientos en orden de
ejecucin.

- 427 -
Tras los pasos de un... Hacker

- 428 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

9.3 MTODOS DE BSQUEDA

Otro de los problemas a los que frecuentemente nos vemos enfrentados es el de


la recuperacin de datos cuando estos estn almacenados de alguna manera.

Estos problemas tienen solucin dependiendo de cmo est almacenada la


informacin? Normalmente a esta informacin la organizamos usando arreglos y
dependiendo del objetivo que perseguimos, estos arreglos sern vectores o
matrices generalmente. Los mtodos que nos permiten la recuperacin de la
informacin, dependern de la forma en que esta es almacenada y estructurada
en una base de datos o con cierta estructura o si definitivamente est almacenada
en un caos organizacional.

As tendremos dos grandes familias de mtodos de bsqueda:


1. Mtodos de bsqueda secuencial. Cuando la informacin est
desorganizada.
2. Mtodos de bsqueda en arreglos ordenados. Cuando la informacin
est organizada.

Explicaremos los casos generales de estos mtodos, al alumno le queda la tarea


de investigar a profundidad algunas implementaciones importantes.

9.3.1 BSQUEDASECUENCIAL
Estos mtodos, cuando la informacin no est organizada de ninguna manera,
consisten en empezar a leer la informacin desde el primer byte e ir preguntando
si la porcin recuperada corresponde al dato que buscamos y as hasta terminar
de leer el medio que posiblemente contiene la informacin.
En otras palabras y aunque suene redundante la computadora empezar su
bsqueda por el principio y continuar hasta encontrar la informacin o hasta
que se termine de leer el medio correspondiente.

A manera de ejemplo y con fines didcticos exclusivamente, implementaremos


un programa que ilustra esta familia de mtodos.

- 429 -
Tras los pasos de un... Hacker

EJERCICIOS RESUELTOS:

Algoritmo que busca una palabra contenida en una variable string.


Ejemplo 86.

Implementar una funcin donde ingresada una variable string que contiene
una frase compuesta de varias palabras, nos mencione si ingresada otra se
encuentra o no en la frase.
Para resolver este problema, en primer lugar, tomemos nota de los detalles
planteados y propongamos una estrategia de solucin:

Detalles:

Necesitamos ingresar a la funcin (F_PAL, 0 falso, 1 verdadero) dos


variables string, una para que contenga la frase y la otra para realizar la
bsqueda. Definiremos las variables A$y B$.

Necesitamos algn contador para que nos indique desde dnde? y hasta
dnde? realizar el proceso, para esto definiremos la variable tpica I, una
que contenga el lmite de la bsqueda N, finalmente una variable
temporal para el clculo auxiliar respectivo, la denominaremos TEMP.

Usaremos la funcin interna del True BASIC, LEN(A$), la misma que nos
devuelve la cantidad de caracteres que contiene la variable A$, as como
la forma de localizar substrings que est definida con la siguiente
expresin A$[X:Y], indicar que se tomar desde el carcter ubicado en la
posicin X hasta el carcter ubicado en la posicin Y de la variable A$.

Ahora planteemos una estrategia de solucin, para la cual realizaremos las


siguientes acciones:

1. Ingresaremos la frase y la almacenaremos en la variable A$.

2. Pediremos que el usuario ingrese una palabra a buscar en la frase. La


almacenaremos en la variable B$.

3. Invocaremos a la funcin F_PAL(A$,B$)

4. Si F_PAL=1 presentaremos el mensaje que diga Las letras ;B$; si est


contenida, caso contrario presentar uno que diga Las letras ;B$; no
est contenida.

- 430 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

5. Fin del proceso.

Para la funcin F_PAL(A$,B$):

1. Calcularemos la cantidad de caracteres de A$, la almacenaremos en N.

2. Calculamos la cantidad de caracteres de B$, la almacenaremos en TEMP,


ya podemos saber hasta dnde movernos dentro de la frase. (N-TEMP+1)

3. Validaremos si N<TEMP, si es verdadero terminamos el proceso y


devolvemos un valor 0 (falso).

4. Inicializamos nuestro contador I=0


5. Iniciaremos nuestra bsqueda secuencial, para esto inicializamos nuestro
bucle indeterminado (I= I+1).

6. Validaremos si el substring A$[I:I+TEMP-1]=B$, si es verdadero


retornamos un valor 1 (verdadero) y terminamos el proceso.

7. Repetimos desde el paso 5 hasta que I=N-TEMP+1

8. Fin de la funcin.

La codificacin de la funcin y el programa ejemplo puede quedar as:

! Funcin que determina si B$, est contenido en A$.


FUNCTION F_PAL(A$,B$)
LET TEMP=LEN(B$)
N=LEN(A$)

IF N<TEMP THEN
LET F_PAL=0
EXIT FUNCTION
END IF
LET I=0
! Empieza el proceso de bsqueda secuencial en la variable...
DO

LET I=I+1
IF A$[I:I+TEMP-1]=B$ THEN
LET F_PAL=1
EXIT FUNCTION
END IF
LOOP UNTIL I=N-TEMP+1
END FUNCTION

Programa ejemplo:

- 431 -
Tras los pasos de un... Hacker

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.

! Programa No. 26. Ejemplo No. 86 del texto.


!
! Programa que ilustra el uso de los mtodos de bsqueda.
!
! Bsqueda secuencial.
!
! Se implementar un funcin F_PAL(A$,B$), que retornar
! 0 si no se encuentra B$ en A$, o 1 si es verdadero.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.
!
! Variables: I numrica, contador del proceso.
A$, B$ strings, variables que contendrn los datos.

! N, TEMP numricas, temporales de uso en la funcin.


!
! Funciones: Definida por el usuario.

! F_PAL(A$,B$), funcin numrica que devuelve:


! 0 (falso) si B$ no est contenida en A$.
! 1 (verdadero) si B$ est contenida en A$.
!
! Internas de True BASIC.
! LEN, devuelve la cantidad de segundos transcurridos desde la media
! noche del da en milisegundos.
!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

! Inicia el proceso.

! Definimos la funcin.

DECLARE FUNCTION F_PAL

CLEAR
PRINT "Programa que muestra el uso de un mtodo de bsqueda secuencial."

PRINT "Ingrese frase: ";


LINE INPUT A$
PRINT
PRINT "Ingrese palabra a buscar: ";
INPUT B$
IF F_PAL(A$,B$)=1 THEN

- 432
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

PRINT "Las letras ";B$;" si estn contenidas en la frase..."


ELSE

ENDPRINT
IF "Las letras ";B$;" no estn contenidas en la frase..."

END

! Funcin que determina si B$, est contenido en A$.


FUNCTION F_PAL(A$,B$)
LET N=LEN(A$)
LET TEMP=LEN(B$)
IF N<TEMP THEN
LET F_PAL=0
EXIT FUNCTION
END IF
LET I=0
! Empieza el proceso de bsqueda secuencial en la variable...
DO

LET I=I+1
IF A$[I:I+TEMP-1]=B$ THEN
LET F_PAL=1
EXIT FUNCTION
END IF
LOOP UNTIL I=N-TEMP+1
END FUNCTION

El programa al ejecutarlo, nos mostrar por ejemplo:

Cuando encuentra

Cuando no encuentra

- 433 -
Tras los pasos de un... Hacker

9.3.2 BSQUEDA ENARREGLOS ORDENADOS

Uno de los mtodos eficientes para realizar una bsqueda en un arreglo


ordenado es el que se conoce como bsqueda binaria, se estructurar una
subrutina la misma que trabaja de la siguiente manera:
1. Se recibe un dato a buscar en un vector (A(N)) ordenado, el dato puede
ser almacenado en la variable X.
2. Se inicializa una bandera de estado (FLAG = 0, falso)
3. Se calculan: Un lmite inferior (LI = 1) y un lmite superior (LS= N).
4. Se calcula un puntero denominado MEDIO como MEDIO = INT((LI+
LS)/2)
5. Se pregunta: Si A(MEDIO)<X entonces calcular LI= MEDIO+ 1.
6. Caso contrario: Si A(MEDIO)>X entonces calcular LS= MEDIO-1.
7. Caso contrario: Se encontr el dato. Retornar nuestra bandera como
verdadera (FLAG=1, verdadero). Salir del bucle.
8. Repetir desde el paso 3 mientras LI<=LS
9. Se pregunta: Si FLAG=0 entonces asignar MEDIO=LI
10. Fin de la subrutina.

Grafiquemos el funcionamiento de este mtodo de bsqueda, por ejemplo, con un


vector A con 11 elementos ordenados del 1 al 11, pidamos que nos devuelva la
posicin (puntero) que ocupa el valor 10 (dato a buscar).
Si nosotros hubiramos elegido un mtodo de bsqueda secuencial, para llegar a
la posicin donde est contenido el dato a buscar, implementaramos una
subrutina que recorra todo el vector, si en alguna posicin el dato est,
devolveramos su posicin y terminaramos el proceso. En el peor de los casos,
supongamos que el dato est en la ltima posicin, quiere decir que nuestra
subrutina debera recorrer los N elementos que tiene el vector, si nuestro vector
tiene por decir algo un milln de datos, esperaramos algn tiempo hasta que
nuestra subrutina encuentre el dato. (En el ejemplo sugerido, la funcin
secuencial debera hacer 10 pasos)
Con el mtodo de la bsqueda binaria como podremos ver, la subrutina
encuentra el dato en tan solo 3 pasos (este mtodo localiza el dato en un vector
ordenado con N elementos en un mximo de log2N comparaciones, realmente
hay que tomar la parte entera de este clculo, en un vector con 1000.000 de

- 434
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

datos tendramos que hacer un mximo de 19 comparaciones y no 1000.000),


observemos:

Bsqueda Binaria
En A(11) buscar X = 10

1 FLAG = 0 X = 10
A(N)

A(4)
A(3)
A(5)
A(2)
A(1) 2
1 LI = 1

A(6) 6 MEDIO = 6

2 A(7)
A(9)
A(8) 9
8
7 LI = 7

MEDIO = 9

3 A(11)
A(10) 11
10 LS = 11 LI = 10 MEDIO = 10 FLAG = 1

El cdigo de esta implementacin sera parecido a este:


! Bsqueda binaria en un arreglo ordenado.
SUB BIN_SEARCH(A(),X,MEDIO,FLAG)
LET FLAG=0
LET LI=LBOUND(A)
LS=UBOUND(A)
DO WHILE LI<=LS

LET MEDIO=INT((LI+LS)/2)
IF A(MEDIO)<X THEN
LET LI=MEDIO+1
ELSE IF A(MEDIO)>X THEN
LET LS=MEDIO-1
ELSE
LET FLAG=1

- 435
Tras los pasos de un... Hacker

EXIT DO
END IF
LOOP
IF
! Para
FLAG=0
usoTHEN
si deseamos
LET MEDIO=LI
insertar un dato en el vector ordenado.

END SUB

Ahora ilustremos este procedimiento con un programa ejemplo.

EJERCICIOS RESUELTOS:

Algoritmo que busca un nmero contenido en un vector ordenado.


Ejemplo 87.

Implementar una subrutina donde ingresado el vector ordenado y el dato a


buscar, nos retorne la posicin del dato solicitado o nos informe que no
existe. Desarrollar un programa que ilustre el uso de la subrutina.

Como ya est definida la estrategia de solucin, el cdigo del programa ejemplo


puede ser el siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 27. Ejemplo No. 87 del texto.
!
! Programa que ilustra el uso de los mtodos de bsqueda.
!
! Bsqueda Binaria.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A(N) numrico, vector que contiene N datos.

! LI, LS, MEDIO numricas, punteros del proceso.


! TEMP numrica, dato temporal.
! X numrica, dato a buscar.
! FLAG numrica, bandera de estado del proceso.
! 0 verdadero.
1 falso.

!
! Funciones: Internas de True BASIC.

! LBOUND(VECTOR), devuelve el valor del subndice menor del vector.


! UBOUND(VECTOR), devuelve el valor del subndice mayor del vector.

-436 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! INT(X), retorna el valor entero de X.


!
! Libreras:
! Ninguna.
!
! Mdulos: Ninguno.

! Definimos el vector.
DIM A(11)

! Cargamos los datos iniciales del vector.


FOR I=1 TO SIZE(A)
READ TEMP
LET A(I)=TEMP
NEXT I

! Inicia el proceso.
CLEAR
PRINT "Programa que muestra el uso de la bsqueda binaria."
PRINT

! Ingresamos el dato a buscar en el vector.


PRINT "Dato a buscar (X): ";
INPUT X
PRINT

! Invocamos a la subrutina que hace el procedimiento.


CALL BIN_SEARCH(A,X,MEDIO,FLAG)

! Desplegamos un mensaje dependiendo del resultado de la bsqueda.


IF FLAG=1 THEN
PRINT "El dato";X;"se encuentra en la posicin";MEDIO
ENDPRINT
ELSE IF "El dato";X;"no se encuentra en el vector."

! Presentamos el contenido del vector.


PRINT
PRINT "El vector contiene: "
PRINT
FOR PRINT
I=1 TO"A(";I;")
SIZE(A) =";A(I)

NEXT I

! Datos iniciales de carga del vector ejemplo.


DATA 1,2,3,4,5,6,7,8,9,10,11

END

! Bsqueda binaria en un arreglo ordenado.


SUB BIN_SEARCH(A(),X,MEDIO,FLAG)
LET FLAG=0
LETWHILE
DO LI=LBOUND(A)
LS=UBOUND(A)
LI<=LS

- 437 -
Tras los pasos de un... Hacker

LET MEDIO=INT((LI+LS)/2)
IF A(MEDIO)<X THEN
LET LI=MEDIO+1
ELSE IF A(MEDIO)>X THEN
LET LS=MEDIO-1
ELSE
LET FLAG=1
EXIT DO

END IF
LOOP
IF
! Para
FLAG=0
usoTHEN
si deseamos
LET MEDIO=LI
insertar un dato en el vector ordenado.

END SUB

Algoritmo que ordena un vector cada vez que se ingresa un dato


Ejemplo 88.
nuevo. Implementar una subrutina donde ingresado el vector ordenado y
el dato a insertar, la misma nos retorne el vector ordenado con el dato
nuevo. Desarrollar un programa que ilustre el uso de la subrutina.

Ahora con todos estos conocimientos, refinemos un poco el mtodo de


ordenamiento de insercin, para esto utilicemos la bsqueda binaria. Se han
definido algunas estructuras de datos que trabajan con arreglos que si bien no se
han explicado en este texto, sera bueno que ustedes investiguen sobre estos
temas. Qu es una pila de datos? Qu es una cola de datos? Insercin de datos
en arreglos. He creado una pequea librera con estos procedimientos y que los
muestro para los fines didcticos pertinentes.
El cdigo de la librera ARRAYLIB.TRU es el siguiente:

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Librera que contiene algunas subrutinas para usar Pilas y Colas.
!
! Bsqueda Binaria y un mtodo de ordenamiento por insercin.
!
! Autor: Nstor Marroqun.
!
! Frmulas:
! Ninguna.

! Variables:
! A(N) numrico, vector que contiene N datos.
! LI, LS, MEDIO numricas, punteros del proceso.
! TEMP numrica, dato temporal.
! X numrica, dato a buscar.
! FLAG numrica, bandera de estado del proceso.

- 438 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! 0 verdadero.
1 falso.

!
! Funciones:
! Internas de True BASIC.
! LBOUND(VECTOR), devuelve el valor del subndice menor del vector.
! UBOUND(VECTOR), devuelve el valor del subndice mayor del vector.
! INT(X), retorna el valor entero de X.
!
! Subrutinas:
!
! Push(A,X) adiciona al arreglo numrico A el elemento X.
!
! Para pilas de datos procedimiento LIFO.
! Pop(A,X) devuelve en X el valor del ltimo elemento
! adicionado al arreglo numrico A y lo retira de A.
!
! Para colas de datos procedimiento FIFO.
! Batch(A,X) devuelve en X el valor del primer elemento
! del arreglo A y lo retira de A.
!
! Insercin de datos en un vector ordenado.
! Insert_sort(A,X) inserta el elemento X en el vector A y lo
! devuelve ordenado, A debe estar ordenado para esta operacin.
!
! Libreras:
! Ninguna.
!
! Mdulos:
! Ninguno.
!
! Librera de procedimientos con arreglos.

EXTERNAL

! Inserta datos a una pila.


SUB PUSH(A(),X)
LET REDIM
MAT N=SIZE(A)+1
A(N)

LET A(N)=X
END SUB

! Proceso LIFO en una pila.


SUB POP(A(),X)
LETN>0
IF N=SIZE(A)
THEN

LET REDIM
MAT X=A(N)A(N-1)

END IF
END SUB

! Proceso FIFO en una pila.


SUB BATCH(A(),X)
LETN>0
IF N=SIZE(A)
THEN

LET X=A(1)

- 439 -
Tras los pasos de un.. Hacker

EOR. T= 2 TO N
LET A ( I1)=A (I)
NEXT T
MAT REDIM A (N1)
END IE"
END SUE

! Bsqueda binaria en un arreglo ordenado.


sUB BIN SEARCH (A() , X, MEDIO, FLAG)
LET. FLAG=0
LET LI=LBOUND (A)
LET. LS=UBOUND (A)
DO WHILE II (=IS

LET MEDIO=INT ( (LI+LS)/2)


IF A (MEDIO) <X THEN
LET LI=MEDIO+1
EL SE IF A (MEDIO) >X THEN
LET. LS=MEDIO1
ELSE
LET. FLAG=1
EXIT DO
END IE"
LOOP
! Para uso si deseamos insertar un dato en el vector ordenado .
IE" FLAG=0 THEN LET MEDIO=LI
END SUE

! Mtodo de ordenamiento refinando el de insercin directa.


suB INSERT SORT (A(), X)
LET N=SIZE (A)
LET MEDIO=0
LET. FLAG=0
CALL BIN SEARCH (A, X, MEDIO, FLAG)
CALL INSERT DAT (A, X, MEDIO)
END SUE
! Inserta datos en un vector.
sUB INSERT DAT (A() , X, IN)
LET N=SIZE (A)
IE" IN =N AND NO (O) THEN
LET N=N+1
MAT REDIM A (N)
FOR T=N1. TO IN STEP 1
LET A (I+1)=A (I)
NEXT T
LET A (IN)=X
ELSE

CALL PUSH (A, X)


END IE"
END SUE

Sabemos como trabaja el mtodo de insercin directa, ahora planteamos la


siguiente solucin con este pequeo programa ejemplo:

- 440
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

! Tras los pasos de un Hacker.


! Copyright (c) 1.992 - 2.010, NMC Research Ca. Ltda.
! Todos los derechos reservados.
!
! Programa No. 28. Ejemplo No. 88 del texto.
!
! Programa que mejora el mtodo de ordenamiento de insercin directa.
!
! Usando el mtodo de la Bsqueda Binaria.
!
! Autor: Nstor Marroqun.
!
! Frmulas: Ninguna.

!
! Variables: A(N) numrico, vector que contiene N datos.

! LI, LS, MEDIO numricas, punteros del proceso.


! TEMP numrica, dato temporal.
! X numrica, dato a buscar.
! FLAG numrica, bandera de estado del proceso.
! 0 verdadero.
1 falso.

!
! Funciones: Internas de True BASIC.

! SIZE(VECTOR), devuelve la cantidad de elementos del vector.


!
! Libreras:
! ARRAYLIB.TRU.
!
! Mdulos: Ninguno.

! Incluyamos los procedimientos de la librera ARRAYLIB.TRU.


LIBRARY "ARRAYLIB.TRU"

! Definimos el vector.
DIM A(0)

! Inicia el proceso.
CLEAR
PRINT "Programa que muestra una aplicacin de la bsqueda binaria."
PRINT

LET N=11
FOR I=1 TO N
PRINT "Ingrese dato a insertar en el vector: ";
INPUT X
CALL INSERT_SORT(A,X)
NEXT I

! Presentamos el contenido del vector.


PRINT
PRINT "El vector contiene: "

- 441 -
Tras los pasos de un... Hacker

PRINT
FOR PRINT
I=1 TO"A(";I;")
SIZE(A) =";A(I)

NEXT I

END

Probemos nuestro programa, primero ingresando los datos ordenados del 1 al


11, luego en orden inverso, luego con datos aleatorios.

Datos ordenados del 1 al 11:

Datos en orden inverso:

- 442 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

Datos aleatorios:

- 443 -
Tras los pasos de un... Hacker

La parte acadmica de este texto termina aqu, les invito a que por cuenta propia
investiguen los temas relacionados a manejo de archivos, grficos y sonidos en
True BASIC.

Cuando ya dominen estos tpicos, les ser fcil entender e implementar mdulos
como estructuras de un programa en True BASIC.

Hasta una prxima oportunidad en que pueda ensearles algo de manera


formal!

NOTAS Y BIBLIOGRAFA
Sobre este tratado de Arreglos, Mtodos de Clasificacin y Bsqueda, las notas
han sido elaboradas en base a publicaciones de revistas especializadas y la
consulta de los siguientes textos:

- LGEBRAELEMENTAL MODERNA, M. O. Gonzlez J. D. Mancill, Editorial


KAPELUSZ, Publicado en Buenos Aires Argentina, 1.962.
- Matemticas y Astronoma, Tomo No. 11, Enciclopedia Salvat de las
Ciencias, Salvat S.A. de Ediciones, Pamplona, Espaa, 1.968.
- CMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
Espaa, 1.977.
- Curso Prctico de Programacin, Intermedio Editores S.A., Bogot
Colombia, 1.984.
- EL ARTE DE PROGRAMAR ORDENADORES ALGORITMOS
FUNDAMENTALES - Volumen I, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.985.
- QL PROGAMACIN EN SUPERBASIC, Roy Atherton, MicroTextos S.A. de
ediciones, Madrid Espaa, 1.985.
- Programacin Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRCTICA DE LA INFORMTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid Espaa, Octubre de 1.986.

- 444 -
Arreglos, mtodos de clasificacin y bsqueda... Captulo IX.

- EL ARTE DE PROGRAMAR ORDENADORES CLASIFICACIN Y


BSQUEDA - Volumen III, Donald E. Knuth, Editorial Revert S.A.,
Barcelona Espaa, 1.987.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte Amrica, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim Repblica Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte Amrica, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. 1.990,
Publicado en los Estados Unidos de Norte Amrica, 1.990.
- Programacin en C, Byron S. Gottfried, McGraw Hill / Interamericana de
Espaa S.A., Madrid Espaa, 1.991.
- Microsoft MASM, Assembly Language Development System Version 6.1.,
Microsoft Corporation 1.987, 1.991, 1.992 U.S. Patent No. 004955066,
Estados Unidos de Norte Amrica, 1.992.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte Amrica, 1.993.
- Ingeniera del Software Un enfoque prctico, Roger S. Pressman,
McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa, 1.993.
- Organizacin y diseo de computadores La interfaz hardware /
software, David A. Patterson John L. Hennessy, McGraw Hill /
Interamericana de Espaa S.A., Madrid Espaa, 1.995.
- The YOU Based LABORATORY, TI-CBL EXPLORATIONS in Science and
Mathematics, Margo L. Mankus Frank Wattenberg, Weber State
University 1.996, Publicado por True BASIC Inc., 1.996.
- Lets Program It in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte Amrica, 1.996.
- Programming for ENGINEERS in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte Amrica, 1.996.
- LGEBRA LINEAL CON APLICACIONES, George Nakos David Joyner,
International Thompson Editores, Publicado por International Thompson
Editores S.A., 1.999.
- True BASIC Bronze Edition, Users Guide, John G. Kemeny Thomas E.
Kurtz, True BASIC Inc. 2.001, Publicado en los Estados Unidos de Norte
Amrica, 2.001.

- 445 -
Tras los pasos de un... Hacker

- Matemtica e Informtica, Tomo No. 11, Enciclopedia Larousse del


Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 2.002.
- Polymorphous Encryption System, Nstor Marroqun Carrera, U.S. Patent
Application No. 20020191786 A1, Diciembre de 2.002.
- Manual Moderno de Informtica, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogot S.A., Impreso en Bogot
Colombia, 2.004.
- CLCULOAPLICADO, Laurence D. Hoffman, Gerald L. Bradley, Kenneth H.
Rosen, McGraw Hill / Interamericana de Espaa S.A., Madrid Espaa,
2.004.
- La wikipedia, http://www.wikipedia.org. La enciclopedia libre de la
Internet.
- PC World Ecuador,
Magazine, http://www.pcmag.com
http://www.pcworld.com.ec/pcw_catt/index.php

- Notas de clase, Nstor Marroqun, 1.9891.994.


- Trabajos de varios autores publicados en la worldwide web.

- 446 -
INTRODUCCIN (X)

Motivado por las cosas que decan hacen los Hackers en la novela de Sterling,
as como de la forma de trabajar de un programa antivirus que en ese entonces
era famoso (que lo llegu a conocer como Turbo Antivirus de una casa Israelita
llamada CARMEL Software Engineering Ltd.), naci en m la curiosidad de
investigar sobre los ya famosos virus de computadoras que a los Hackers se les
atribua precisamente, el aparecimiento de este tipo de programas de
computadora y en definitiva quera saber: qu eran?, cmo funcionaban?,
cmo se programaban? y por sobre todo cmo se los poda eliminar?

Con la curiosidad motivada, empiezo a investigar a profundidad esta clase de


programas; pude con mis conocimientos adquiridos de programacin en
lenguaje ensamblador para la familia de microprocesadores Intel x86,
entender algunos cdigos fuente de ciertos virus informticos que a travs del
underground de aquel entonces pude tener acceso. Jugaba un poco con estos
cdigos, modificndolos y probando para ver qu hacen estas modificaciones?
en el comportamiento del programa anfitrin, en fin, aprendiendo a programar
virus de computadoras.
Este hobby, obviamente no me traera ingresos, por el contrario, posiblemente
me traera algunos problemas con la justicia; as que, dominadas estas tcnicas,
este conocimiento solamente quedara en el plano acadmico propio. Lo digno
de resaltar de este periodo de investigacin es que me dara la luz para
programar un sistema que podra hacer frente a los virus informticos en un
futuro prximo, revolucionando la forma de atacar este problema. Es as que
empiezo a programar (en True BASIC) un prototipo de esta solucin.
Desarrollado el mismo, comienzo la fase de prueba; y, con los pocos virus reales
que haba podido coleccionar, podra ver si el prototipo funcionaba
correctamente.

Incontables das y noches las pasaba probando y probando algunas


implementaciones de mi prototipo, desarrollaba nuevas tcnicas que segn yo
iban a funcionar, pero estos engendros informticos siempre acababan
infectando mi sistema y los esfuerzos por hacerles frente pareca eran
infructuosos.

- 447 -
Tras los pasos de un... Hacker

Por aquel entonces, un amigo mo, Edgar Lazcano, me invita a colaborar en su


empresa, la misma que se dedicaba a la capacitacin informtica en algunos
colegios de la ciudad. Empezaba ya el boom de la informtica personal en
Ecuador, as como la necesidad que los estudiantes de los diferentes colegios
tengan algunas bases de esta novel ciencia. Sin pensarlo dos veces, para dar un
respiro a mi cansado cerebro, acepto ser instructor de esta materia en el Colegio
Tcnico Nacional Gran Colombia de la Ciudad de Quito; tuve el placer de
capacitar a mis inolvidables alumnas del 4to,5to y 6to curso de las especialidades
de Secretariado y Contabilidad.

Me gustaba ser profesor, a mis 23 aos (y sin compromisos mayores), tena todo
el tiempo del mundo para ensear. Siempre me gust el reto del maestro, mi
pasin era poder transmitir algo de mis conocimientos para que los mismos no
mueran, a la vez para que otra persona pueda sacar provecho de los mismos en
pos de generar una cultura informtica superior en el pas de entonces.

Termina el ao acadmico en julio de 1.993, retomo las pruebas de mi prototipo;


y, Eureka!, funcionaba y a partir de all cambiara la historia de este desconocido
programador y admirador del espritu de un Hacker. A mi programa lo
denomin Check Program (programa de chequeo), que bsicamente era un
controlador de checksums que identificaba si se ha producido algn cambio en
un programa ejecutable. Hasta aqu nada que los programas comerciales de
aquel entonces no hagan as como los que distribua gratuitamente el profesor
Ricardo Ortega.

Una familia especial de virus informticos, burlaban a mi rutina de deteccin por


nombre de virus conocido que la haba implementado en el Check Program.
Estos virus que se los conoce como virus polimorfos o polimrficos me
incitaran a profundizar, investigar y aprender en serio una fascinante
especialidad de la matemtica e informtica que se conoce como Criptologa
(ciencia que estudia los mtodos para esconder informacin as como los
mtodos para recuperarla). Precisamente estos virus, cifraban su propio cdigo
de mltiples formas haciendo que siempre aparezcan codificados de manera
diferente en cada programa infectado (polimorfismo) y que los antivirus
muchas veces no reconocan su firma caracterstica burlando as su proteccin.

Bueno, realizado el criptoanlisis de estas rutinas, pude romper esta


codificacin y hacer que no burlen ms a mi rutina de deteccin. Por esos das,

- 448 -
La historia... Introduccin (X).

un estudiante de la Escuela Politcnica Nacional del Ecuador (EPN), Guillermo


Garca me pedira que recupere de una agenda electrnica muy popular en aquel
tiempo todos los contactos, direcciones y nmeros telefnicos que un amigo suyo
tena y que habra olvidado la password de acceso. Acept el reto de
recuperarlos. Me di cuenta que esta informacin estaba cifrada, entonces decid
romper la codificacin de las secuencias que generaba, haciendo un estudio
comparativo de la informacin, que al guardar con diferentes passwords esta
agenda la procesaba. Ventajosamente el algoritmo de cifrado que estaba
implementado en la agenda no era seguro y pude con relativa facilidad reversar
el proceso y recuperar la password olvidada. A la semana entregu a mi amigo
los resultados, el nico pago que recib de este trabajo era la satisfaccin de
haber superado el reto y a la vez haber ayudado a salir de un problema a mi
amigo.

A fines de 1.993 en el Ecuador empieza a circular un virus polimorfo, que muy


probablemente era una creacin local, al que los antivirus en esa poca no lo
podan identificar, tiempo despus lo bautizaran como Three Tunes o
Pichincha, por mi parte lo habra bautizado como Jaime y para mi Check
Program era el 1784.
De su descubrimiento la prensa local haba reseado algunos artculos, as el 18
de enero de 1.994, el peridico local El Comercio recogera mi artculo en una
primera plana en la seccin Siglo 21.
Para marzo de 1.994, el hijo del Registrador me haba estado buscando para que
ayude a su padre, el REGISTRADOR DE LA PROPIEDAD DEL CANTNQUITO, en
la modernizacin institucional del Registro de la Propiedad, que ya tendra algn
tiempo intentndola y que la empresa que estaba a cargo del contrato no
satisfaca las expectativas del proyecto. Despus de la entrevista de rigor, el
Registrador de la Propiedad me nombr Jefe de Sistemas (ejerc esta funcin
hasta que firmamos un contrato de servicios entre NMC Research Ca. Ltda., y el
Registro de la Propiedad), sin perder tiempo emprendo la labor de modernizar a
la institucin. Este reto lo tomo para una vez ms, demostrarme y demostrar que
se poda automatizar un proceso legal y que se poda organizar en un archivo
digital toda la informacin sobre la historia de la transferencia de dominio,
hipotecas y gravmenes de todas las propiedades del Cantn Quito. En primer
lugar tuve que empaparme de la problemtica legal de los trmites que eran
necesarios para que un contrato de compra venta llegue a legalizarse en el

- 449 -
Tras los pasos de un... Hacker

Registro de la Propiedad, as como de todos los trmites que a partir de all se


pueden realizar (hipotecas, gravmenes, sucesiones, testamentos, etc.), eso hizo
que prcticamente viva en la institucin por casi dos meses instruyndome de
los detalles y llevndolos a un proceso automtico.

Para junio de 1.994, el Registrador de la Propiedad inauguraba los nuevos


servicios computarizados y la ciudadana quitea empez a comprobar que en
realidad con la computacin se poda bajar el tiempo de atencin al usuario, por
ejemplo: de 45 das que duraba la legalizacin de una compraventa se llegara a
entregar estos trmites en tan solo 5 o que una certificacin de gravmenes que
normalmente se atenda en 15 das se los llegara a entregar en 3.

Mientras yo seguira perfeccionando mi Check Program

Ahora sera bueno que aprendan un poco sobre los virus informticos

- 450 -
CAPTULO X. VIRUS Y ANTIVIRUS

10.1 PRELIMINARES
Virus (virus-i, veneno, jugo nocivo). Germen infeccioso de varias enfermedades
singularmente contagiosas.

La palabra virus, etimolgicamente hablando, se deriva de la expresin latina


virusi que significa veneno o jugo nocivo. Esta definicin fue utilizada y
generalizada a los factores que causan ciertas enfermedades en organismos
sanos en la dcada de los 50s gracias al explosivo conocimiento sobre los
diversos aspectos de la vida, principalmente desde que se reconoci la molcula
del ADN (cido Desoxirribonucleico) en 1.953. El crecimiento de la biotecnologa
durante toda la Guerra Fra, motiv a que ciertos monopolios fomenten la
fabricacin de las primitivas armas biolgicas que arrasaban con creces los
lmites de las sociedades pequeas, las armas de la biotecnologa se convirtieron
en verdaderas armas de destruccin mundial y precisamente los virus eran los
factores desencadenantes de estas matanzas.

Sucede adems que, los ttulos o las formas para referirnos a aspectos
tecnolgicos tienen un aire publicitario, por ejemplo, si hablramos de
"programas informticos que tienen la capacidad de auto replicarse en otros
programas, con el objeto de interferir con el normal funcionamiento de una
computadora o red, que actan sin interaccin con el usuario", solo despertara
bostezos, pero como realmente los llamamos virus informticos, entonces capta
(y de qu manera!) la atencin del pblico en general.

La palabra virus es particularmente inquietante para las personas porque


siempre es relacionada con enfermedad y muerte a gran escala, las pestes han
diezmado a la humanidad en la historia y actualmente el mortal virus del VIH
(que causa el SIDA) es muy preocupante. Con la expresin virus informtico les
damos a las mquinas un carcter de ser vivo porque pueden enfermarse.
Todo el mundo ha odo hablar de ellos y muchos los han sufrido, pero su forma de
infectar, reproducirse o atacar sigue siendo un gran misterio para la mayora.

- 451 -
Tras los pasos de un... Hacker

Una antigua mxima reza: "Si quieres vencer a tu enemigo, concelo primero"
(El arte de la guerra de Sun Tzu). Eso es lo que se intentar en este captulo: si
se ejecutan en una computadora, es que son programas, y si son programas, se
pueden comprender. Es cierto que no contamos con el cdigo fuente, pero acaso
es imprescindible? Es que no tenemos el cdigo objeto...?

Desde que en 1.987 se diera el primer caso documentado de un ataque de virus


informtico en la Universidad de Delaware, mucho se ha dicho y escrito sobre el
tema dentro de los foros ms insospechados. A pesar de ello, los virus siguen
siendo grandes desconocidos para la gran mayora, razn que sin duda
contribuye no poco a que cada vez sea mayor el nmero de ellos en expansin.
Conocer y entender la forma en que actan, se reproducen y se comportan es la
mejor forma de estar prevenido y saber cmo reaccionar?; la solucin de dar
formato al disco duro nada ms enterarse de que dentro hay un virus es bastante
extrema; y, por lo general, suele eliminar toda la informacin del disco duro... a
excepcin del propio virus.

Por otra parte, ya no en el caso de un particular, sino en el de las empresas, es


muy posible que no puedan permitirse esperar a que se saque la siguiente
versin de un antivirus que elimine el que les afecta y necesiten que alguien
realice un estudio inmediato del virus que los ataca, identifique su forma de
actuar, sus efectos y se puedan dedicar a corregirlos cuanto antes.
Este breve tratado sobre virus informticos orientar de una mejor manera y
dotar de una visin del funcionamiento y tcnicas de estos programas, pensando
que el conocimiento y el entendimiento son dos armas bsicas en la lucha contra
cualquier amenaza.

Hay quien opina que este tipo de informacin no debe hacerse pblica,
especialmente aqu en el Ecuador que incluso se considera infraccin
informtica, tipificada como delito por el Cdigo Penal Ecuatoriano en los Art.
202.1 y Art. 202.2 (artculos que se adicionaron cuando el Congreso Nacional del
Ecuador aprob la Ley de Comercio Electrnico, Firmas Electrnicas y Mensajes
de Datos, el 10 de abril de 2.002, claramente para sancionar a las actividades de
los Hackers), donde se sanciona a quienes divulguen informacin que puede ser
utilizada para fines ilegales, en especial para evitar que ms gente se dedique a
investigar temas relacionados a la seguridad informtica o fabricar virus. Pero,
ya que segn los estudiosos, la media de aparicin de virus nuevos viene a ser de

- 452 -
Virus y antivirus... Captulo X.

unos 5 o 6 cada da -por no contar las modificaciones y mutaciones sobre otros ya


existentes- es fcil llegar a la conclusin de que los sirvientes del lado oscuro o
delincuentes informticos como se los llama en Ecuador y en otras partes del
mundo, tienen ya toda la informacin que necesitan.

Normalmente las polticas de ocultacin de informacin de este tipo, con nimo


de evitar que se utilice con malos fines fracasan estrepitosamente al acabar
siempre desinformados los que sufren los ataques y nunca quienes los perpetran
cosa que ayuda a que los ataques sean mucho ms efectivos.

Nota del autor:


El autor y su grupo de colaboradores no sern responsables, ni penal, ni civilmente por el mal
uso que a esta informacin pueda darse por parte de terceros, cabe recalcar que esta obra y
toda la investigacin que conllev, se la ha realizado con fines exclusivamente didcticos. Los
hechos relatados, basados en los que sucedieron en la vida real, que por motivos de seguridad
han sido cambiados, as como algunos nombres y fechas de los acontecimientos.

La labor de investigar y aprender de forma autodidacta que ese espritu de una verdadera
actitud Hacker impone es lo que se trata de mostrar con estos relatos.

Otro detalle importante, si por alguna omisin involuntaria en la seccin de bibliografa y


fuentes de consulta, est faltando alguna fuente exacta o el derecho de autor no se ha
nombrado en alguna parte de este texto, por favor l o los autores de los artculos que fueran
consultados libremente en la Internet, nos hagan llegar las notas respectivas para los
reconocimientos que la Ley de Propiedad Intelectual en el Ecuador y los convenios
internacionales en la materia exigen (citar la fuente o reconocer el crdito debido de los
autores).

- 453 -
Tras los pasos de un... Hacker

10.2 ALGO DE HISTORIA

LOS COMIENZOS

La paternidad de la idea de un programa capaz de reproducirse se le atribuye a


John von Neumann por su artculo Theory and organization of complicated
automata del ao 1.949. Von Neumann estaba interesado en la creacin de
vidas artificiales electrnicamente, a las que daba el nombre de autmatas que,
segn l, podan reproducirse sin excesiva dificultad.

Tambin por aquel entonces, cuando empezaban a desarrollarse las primeras


computadoras, se vio la necesidad de llevar a una computadora a un estado
inicial conocido, eliminando rastros de otros programas previamente cargados.
Una solucin muy ingeniosa consista en implementar una instruccin que
simplemente se copiaba a la siguiente posicin de memoria y saltaba a ella para
seguir ejecutndose. De esta forma todo el mapa de memoria se llenaba con un
nico valor conocido: el cdigo correspondiente a la instruccin. Este fue otro
ejemplo claro de cdigo capaz de reproducirse. Seguramente basado en l, ms
adelante, en los aos 60, cobr gran popularidad el juego Core War, diseado
en los laboratorios Bell de AT&T, el que consista en que dos jugadores lanzaban
simultneamente sus programas que se reproducan en memoria hasta que sta
se agotaba. Ganaba aquel que fuera capaz de conquistar ms memoria, para lo
cual era perfectamente legal matar a las copias del adversario y robarle esa
memoria.

Aparte del mero juego, tambin se trat de darle un uso algo ms prctico a este
tipo de programas y as a finales de los aos 70, dos investigadores del Centro de
Investigacin Xerox de Palo Alto, California, idearon un programa que deba
encargarse de las labores de mantenimiento y administracin del complejo, al
que dieron el nombre de gusano. El programa dorma por el da y por la
noche se propagaba por todas las computadoras del centro de cmputo
haciendo copias de seguridad y otras tareas de gestin. Todo esto en la teora,
porque en la prctica el gusano escap de las computadoras de prueba del
laboratorio, se extendi por toda la red y paraliz todas las mquinas. Al intentar
eliminarlo, segua reapareciendo, as que no hubo ms remedio que crear otro
programa vermicida que fuera por todas las mquinas matando copias del
gusano.

- 454 -
Virus y antivirus... Captulo X.

LOS AOS 80

La palabra virus no se empez a usar hasta que Frederick B. Cohen, un


estudiante graduado de la Universidad del Sur de California, lo utiliz en 1.984
para su tesis sobre programas autoduplicadores. En ella daba la primera
definicin formal del trmino y haca un estudio matemtico de la expansin de
este tipo de engendros, mediante el cual demostr que crear un programa
detector de virus perfecto era lgicamente imposible.

Ningn detector de virus puede ser perfecto, ni es perfecto. En su tesis doctoral


para la Universidad del Sur de California, en Los ngeles, Fred Cohen (Fig. 45)
demostraba, en 1.983, que no hay ningn algoritmo general que pueda concluir
con total fiabilidad -100%- si un programa es o no un virus.

Para ello se vala de la siguiente demostracin por reduccin al absurdo, (ver


recuadro):

Supngase que existe un algoritmo general A


que, analizando cualquier programa P, devuelve
"verdadero" si y slo si P es un virus. Entonces
sera posible crear un programa P, que hiciera
lo siguiente: Si (A(P) =falso) entonces infecta el
sistema. Si (A(P) = verdadero) entonces no
infectes nada. Es decir: P es un virus si A dice
que no lo es, y no lo es si A dice que lo es. Por
contradiccin, ese algoritmo general A no
existe.
FIG. 45. FRED COHEN.

Como se dijo antes, en 1.987, el 22 de octubre, se da el primer ataque de virus del


que se tiene noticia. En realidad este virus era inofensivo (en teora, ya que
ningn virus es inofensivo) y contena la direccin y telfono de los autores: dos
hermanos en Pakistn, estudiantes de la Universidad de Lahore, aunque, al
parecer, hubo un estudiante que perdi su tesis debido a efectos secundarios del
virus; este virus, luego cuando se crearon los programas antivirus se lo denomin
Pakistani Brain.

- 455 -
Tras los pasos de un... Hacker

Tambin en ese ao se produce la primera infeccin masiva sobre computadoras


Macintosh: un consultor de Aldus Corporation se infect con un disco de juegos
y al realizar luego pruebas al programa Aldus Freehand contamin el disco
que luego distribuy su empresa. El virus se limitaba a presentar en pantalla un
mensaje universal de paz a todos los usuarios del Mac, firmado por Richard
Brandow, editor de la revista MacMag, al llegar al 2 de marzo de 1.988 (fecha del
aniversario de la aparicin del Macintosh II) y se autodestrua inmediatamente.
Pero los buenos deseos de paz pronto se transformaron en sentimientos menos
nobles.

As, tiempo despus, un banco de la isla de Malta se vio afectado por un virus que
presentaba el siguiente mensaje en la pantalla:

DISKDESTROYER - A SOUVENIR OFMALTA

I have just DESTROYED the FAT on your


Disk!!
However, I have kepta copy in RAM,

and I'm giving you

a last chance to restore your precious data.

El virus borraba la FAT (File Allocation Table) una estructura bsica de cualquier
disco/disquete que opere bajo el sistema operativo DOS o compatible, que
permite encontrar los datos, pero guardaba una copia en memoria, despus
invitaba a jugar el conocido juego del tragamonedas.
Si salan tres "L", restauraba la FAT y no se perda informacin, pero si salan tres
"?" o tres "C", destrua tambin la copia de la FAT de la RAM y se perdan todos
los datos.
Como era de esperar, el banco perdi la informacin en dos terceras partes de
sus mquinas.

- 456 -
Virus y antivirus... Captulo X.

EL COMIENZO DE LOS VIRUS


En este ao, 1.986, Basit y Amjad se percataron de que el sector de arranque
(conocido tambin como bootsector) de un disquete contena cdigo ejecutable
y que este cdigo corra siempre que se reiniciaba la PC con un disquete en la
unidad A. Tambin se dieron cuenta de que poda reemplazar este cdigo con su
propio programa, pudiendo instalarse este programa en la memoria de forma
residente (tcnica conocida en programacin como TSR, Terminate and Stay
Resident) e instalar una copia de s mismo en cada disquete para estar accesible
desde cualquier dispositivo. Como el programa se copiaba a s mismo, le dieron
el nombre de virus, por su semejanza con los virus biolgicos.

Este proyecto de virus solamente infectaba a disquetes de 360 KB, tambin en


1.986, un programador llamado Ralf Burger observ que un archivo poda hacer
una copia de s mismo por el mtodo simple de adicionarse al final de otros
archivos (tambin se conoce como append file), entonces desarroll una
demostracin de este efecto, que llam Virdem. Lo distribuy en la Chaos
Computer Conference de diciembre de ese ao, en la cual el tema principal eran
precisamente los virus, la demostracin tuvo tanto xito que Burger escribi un
libro sobre el tema, en el que no se mencionaba an a los virus del sector de
arranque.

Al siguiente ao, en 1.987, personal la Universidad de Delaware se dio cuenta de


que tenan sus computadoras un virus cuando empezaron a ver una extraa y
sospechosa etiqueta que apareca en los disquetes, eso es todo lo que este
pequeo virus haca (auto reproducirse y colocar una etiqueta). La alerta la dio
una empleada de soporte tcnico de la misma Universidad, que advirti de que
estaba encontrando la etiqueta en muchos de los disquetes.

Este mismo ao, Franz Swoboda tuvo noticias de un virus incluido en un


programa llamado Charlie, por este detalle lo llam el Virus Charlie, hubo
mucho revuelo en la opinin pblica acerca de este virus, al difundirse las dos
versiones de una misma historia: Burger afirm que haba obtenido una copia
del virus de manos de Swoboda, pero Swoboda lo neg siempre.
En cualquier caso, Burger se hizo con esa copia que envi a Bernt Fix, el cual
desarm el virus y Burger incluy en su libro la demostracin del anlisis,
despus de aadirle varios parches para variar su comportamiento. El

- 457 -
Tras los pasos de un... Hacker

comportamiento normal de Viena (o Charlie, como lo llamaba Swoboda) era


colocar un archivo entre otros ocho para reiniciar la PC (el virus parcha los
primeros cinco bytes del cdigo); Burger (o quiz Fix) reemplazaron este cdigo
con cinco espacios. El efecto fue que los archivos parchados colgaban la PC, en
vez de reiniciarlo. No fue en absoluto una gran mejora.

Mientras tanto, en los Estados Unidos de Norte Amrica; Fred Cohen acababa de
completar su tesis doctoral, que versaba precisamente sobre los virus
informticos. El doctor Cohen demostr que uno no puede escribir un programa
que sea capaz de, con un ciento por ciento de aciertos, visualizar un archivo y
decidir si es o no un virus.

Desde luego, nadie pens jams en esa posibilidad, pero Cohen hizo buen uso de
un teorema matemtico y as fue como se gan el doctorado. Sus experimentos
sobre la difusin de virus en los sistemas informticos demostraron que la
expansin de las infecciones resultaban ser mucho ms rpidas de lo que nadie
hubiera esperado.

En 1.987, Cohen visit la Universidad Lehigh, all se encontr con Ken van Wyk,
de este encuentro surgi el virus Lehigh, que nunca abandon el laboratorio,
porque slo poda infectar el archivo COMMAND.COM y daar increblemente a
su husped o host despus de tan slo cuatro replicaciones. Una de las reglas
bsicas sobre los virus dice que, aquel que dae de forma muy rpida a su
husped, no sobrevive durante mucho tiempo. De todas formas, el virus Lehigh
se hizo muy popular y foment la aparicin del grupo de noticias sobre virus de
Ken van Wyk en Usenet.

EMPIEZAN LOS PROGRAMAS ANTIVIRUS


1.988 ser recordado siempre entre los expertos en seguridad informtica como
el ao en el que empez el baile. De hecho, fue el ao en el que comenzaron a
aparecer los fabricantes de antivirus, creando una moda de lo que en principio
slo era un problema potencial. Los vendedores de software antivirus eran
pequeas compaas, que ofrecan sus productos a muy bajo precio, en algunos
casos gratuitamente. Fue en este ao cuando la compaa IBM se dio cuenta de
que tena que tomarse el asunto de los virus completamente en serio. A esta

- 458 -
Virus y antivirus... Captulo X.

conclusin no llegaron debido a la incidencia del popular gusano del rbol de


Navidad, de amplia difusin, sino porque IBM sufri un brote del virus
Cascade y se encontr en la embarazosa necesidad de tener que comunicar a
sus clientes que ellos tambin haban sido infectados. Desde este momento, el
High Integrity Laboratory de IBM fue el encargado del rea de los virus.

En ese ao aparecieron, desde luego, mltiples rebrotes de Brain, Italian,


Stoned, Cascade y Jerusalem. Esto represent la prueba definitiva de la
existencia real de los virus informticos. Peter Norton (1.943-), en una
entrevista, haba comentado que eran una leyenda urbana, como los cocodrilos
de las alcantarillas de Nueva York y un experto informtico del Reino Unido lleg
a proclamar que tena la prueba de que los virus eran un producto de la
imaginacin de mentes calenturientas...
En aquel momento, cada nueva aparicin de virus provocaba la aplicacin de un
anlisis paso a paso, el software existente era utilizado para detectar virus de
sector de arranque y solamente fuera escrito un programa antivirus de manera
excepcional para afrontar los rebrotes de Cascade y Jerusalem. Entonces
apareci el Virus B", el cual no se alojaba de manera residente en memoria,
result ser una modificacin de aquel que borraba los archivos todos los viernes
y con fecha 13. Cuando el Virus-B funcionaba, desplegaba el siguiente mensaje:
Warning! This programis infected with Virus-B! It will infectevery.COM file
in the currentsub directory!.

Un virus que se manifiesta de una manera tan evidente, obviamente no puede ser
tan pernicioso; nicamente, se trata de la demostracin de la forma de actuacin
de un virus, de ah el mensaje.

A finales de 1.988 se dieron varios sucesos importantes, en primer lugar, se


produjo la aparatosa intrusin del virus Jerusalem en una importante
institucin financiera, que durante varios das se vio en la necesidad de limpiar a
conciencia sus bases de datos.
Por otro lado, la compaa S&S imparti el primer Seminario sobre Virus, en el
cual se explic pormenorizadamente lo qu era un virus? y de qu forma
actuaba?, por ltimo, en enero del ao siguiente rebrot otra vez Jerusalem,
que se difundi ampliamente en diversas empresas e instituciones. Estaba clara
la necesidad de una herramienta que permitiera limpiar masivamente los
sistemas de cualquier virus activo.

- 459 -
Tras los pasos de un... Hacker

El doctor Alan Solomon, consciente de esta necesidad, desarroll un antivirus, le


aadi algunas herramientas que, segn su experiencia, podan ser tiles y cre
de esta forma la primera herramienta antivirus, Dr. Solomon's Antivirus
Toolkit.

A finales de 1.988, Jerusalem se haba difundido de forma espectacular por


Espaa y el Reino Unido. Debido al comportamiento destructivo de este virus, los
expertos llegaron a la conclusin de que era necesario habilitar algn tipo de
aviso para alertar a los usuarios, pero los medios de comunicacin tambin
entraron en el juego: la posibilidad de predecir la aparicin de un virus cautiv su
imaginacin y de esta forma la actividad de los virus informticos traspas las
fronteras de las universidades y empresas de informtica y lleg al usuario
normal de las PCs.
El ao de 1.989 ser siempre recordado como el ao en el que las cosas se
pusieron difciles; el virus Fu Manch (una modificacin del Jerusalem) fue
difundido por alguien annimo en el Reino Unido, junto con el 405. Por otra
parte, los blgaros y los rusos empezaron a interesarse por el tema; en marzo de
este ao, un pequeo incidente fue el aviso de la gran avalancha que se avecinaba
en Holanda, un tal Fred Vogel quien contact con Alan Solomon, para contarle
que haba encontrado un virus nuevo en su disco duro llamado Datacrime y
que estaba preocupado porque al parecer, su fecha de activacin estaba prevista
para el da 13 del mes siguiente.

Cuando el virus fue analizado, sin embargo, se lleg a la conclusin de que,


cualquier da despus del 12 de octubre de 1.989, podra dar formato a bajo nivel
el cilindro cero del disco duro (idea que la recoge y ampla un moderno virus
conocido como CIH), lo cual en la mayora de los discos, borrara la FAT, dejando
al usuario sin su informacin, tambin se desplegaba un mensaje con el nombre
del virus,Datacrime.
Se redact un informe sobre los efectos de este virus que se public en una
revista y otros medios de comunicacin se hicieron eco del caso, llegando en
junio de ese ao, a la errnea conclusin de que este virus se activara cada 12 de
octubre, cuando en realidad podra activarse cualquier da entre el 12 de octubre
y el 31 de diciembre y era capaz de borrar toda la informacin contenida en el
disco duro.

- 460 -
Virus y antivirus... Captulo X.

En Norteamrica, la prensa empez a llamarle El virus del descubrimiento y se


corri el rumor de que haba sido escrito por terroristas noruegos, hartos de que
se otorgara la autora del descubrimiento de Amrica a Coln, en vez de a Eric el
Rojo; mientras tanto, en Holanda la polica empez a distribuir un detector del
virus Datacrime, vendindolo a un dlar en todas las comisaras de polica, se
vendi muy bien; pero daba una serie de falsas alarmas, por lo que enseguida fue
sustituido por una segunda versin. Esto provoc mucha confusin en la opinin
pblica, porque realmente nadie era capaz de saber si tena o no el virus, en el
mes de julio, debido al mayor ndice de concienciacin ciudadana, un gran
nmero de compaas holandesas solicitaron informacin a IBM sobre si los
virus eran realmente un problema serio.

Existan muchas posibilidades de que una empresa pudiera infectarse de


Datacrime,Jerusalem, Cascade o Stoned. IBM contaba con un programa
de deteccin y eliminacin de virus para su uso interno, que si no ofrecan
inmediatamente a sus clientes, poda representar un menoscabo en su
reputacin. Los tcnicos saban que en cualquier momento podra producirse
una infeccin masiva de cualquiera de estos virus, en especial de Datacrime.
En septiembre de 1.989, IBM lanz su versin 1.0 de este escner, junto con una
carta en la que explicaba a sus clientes lo que era y para qu serva? Las
empresas usaron el software y se encontraron con que no estaban infectados por
Datacrime pero s por multitud de versiones de los virus vigentes en aquella
poca.

El 13 de octubre de ese ao fue viernes y por tanto, fecha posible de activacin de


dos de los virus ms conocidos en aquel momento: Jerusalem y Datacrime.
En los Estados Unidos de Norte Amrica, los avisos de alerta sobre la actividad
del Datacrime haban sido excesivos, dado el carcter prcticamente inocuo del
citado cdigo, pero no se registr ninguna infeccin. En Europa, slo afect a
unos pocos usuarios. El Instituto Nacional de Ciegos (RNIB por sus siglas en
ingls) anunci que haba sido infectado y que haba perdido gran cantidad de
datos de sus cuentas y muchos meses de trabajo, se trataba de una infeccin de
baja intensidad del Jerusalem, que haba borrado unos cuantos archivos
fcilmente reemplazables, cuatro PCs fueron infectados, pero este hecho pas a la
historia de los virus como el Gran Desastre del RNIB.
Este ao tan agitado termin con la distribucin de 20.000 copias de un famoso
cdigo malicioso, el Aids Information Disquette, que fueron enviadas por

- 461 -
Tras los pasos de un... Hacker

correo a usuarios que figuraban en bases de datos de diversos organismos, por


ejemplo la PC Business World. Este documento contena instrucciones de
instalacin detalladas que originaban la creacin de archivos y directorios
ocultos, editando el contenido de un archivo conocido como AUTOEXEC.BAT, de
modo que uno de estos archivos estaba presente en cada secuencia de arranque.
El troyano que contena, cifraba todos los archivos del disco duro, otorgndoles
los atributos alojados en l.

La consecuencia ms destacada de este incidente, es que consigui otorgar mayor


popularidad a los virus, aunque el cdigo malicioso protagonista del hecho en
realidad era un troyano. Adems, un sorprendente nmero de personas
instalaron el software, de tal manera que PC Business World tuvo que
desarrollar un programa para solucionar los daos que provoc la distribucin
de este troyano.
En el ao 1.990, surgieron algunas novedades en el panorama de los virus, Mark
Washburn haba creado el primer virus polimrfico a partir del Viena. Los
virus polimrficos representaron un paso adelante en la evolucin de los
cdigos malignos, al ser capaces de cifrar de forma diferente su cdigo cada vez
que producan una nueva infeccin; por ello, era necesario desarrollar un
algoritmo que pudiera aplicar pruebas lgicas al archivo, decidiendo de esta
manera si el cdigo era maligno o no, para crear la herramienta antivirus que
bloqueara dichos cdigos.

Aunque Washburn public el cdigo de su virus, se temi que muchos creadores


de virus decidieran crear nuevos cdigos a partir de aquel, la invasin de virus
polimrficos no tuvo mucho xito en el mercado. Adems, la mayora de las
empresas del sector (excepto Virus Bulletin, IBM y pocas ms) tampoco fueron
capaces de desarrollar herramientas antivirus apropiadas, ya que no es tan fcil
crear un algoritmo de descifrado. No obstante, la idea del polimorfismo se ha
utilizado profusamente despus en la creacin de virus ms modernos.

Otra de las consecuencias de los virus polimrficos es el incremento de las falsas


alarmas. Si un vendedor de software antivirus consigue escribir el software
apropiado para detectar algo con tantas posibilidades de mutacin como el
Viena, existen muchas posibilidades de que en realidad lo que el escner
detecte sea una lnea de cdigo inofensivo; y, una falsa alarma puede ser ms

- 462 -
Virus y antivirus... Captulo X.

engorrosa para el usuario que un autntico virus, ya que obliga a poner en


funcionamiento absolutamente todos los mecanismos antivirus de defensa.

Tambin en 1.990 asistimos a una oleada de virus procedentes de Bulgaria,


especialmente de aquellos cuyo autor se identificaba con el alias Dark Avenger.
Los virus de Dark Avenger introdujeron dos conceptos nuevos: la infeccin
rpida (el virus se instalaba en la memoria y con la simple apertura de un archivo
provocaba una infeccin vertiginosa del disco duro) y el ataque remoto (algunos
de estos virus producan una sobrescritura de cdigo cada cierto tiempo; por lo
que, si el usuario no se daba cuenta y haca un respaldo o back-up de los datos
peridicamente, auto replicaba sin querer todas las lneas de cdigo maligno).
Otros virus clsicos de parecida actuacin durante este periodo fueron Number
of the Beast y Nomenklatura.

Sin embargo, Dark Avenger era el ms creativo en el proceso de distribucin de


sus virus. Cargaba sus cdigos malignos en los BBS, infectando los programas
antivirus shareware, en sus ataques vricos inclua un archivo que cumpla la
funcin de tranquilizar a todo aquel que comprobara el tamao del archivo o
realizara un checksum, incluso se permita el lujo de incluir su cdigo fuente para
que los nefitos pudieran aprender cmo se creaban los virus?

En este mismo ao tuvo lugar otro evento en Bulgaria: la aparicin de la primera


BBS de intercambio de virus. En ella la gente poda descargarse cualquier virus
en el que estuviera interesado, si previamente haba dejado algn cdigo maligno
propio para los usuarios de este sistema; esto claro est, favoreci tanto la
creacin de nuevos virus como la difusin masiva de muchos de ellos.
En el ao 1.991, el problema de los virus ya era lo suficientemente preocupante
como para atraer a las grandes compaas productoras de software. Symantec
lanz a principios de este ao el producto Norton Antivirus y Central Pointsu
CPAV en abril. Pronto los siguieron XTree, Fifth Generation y unas cuantas
ms. Muchas de estas compaas reutilizaron los programas de otras empresas
(casi todas fueron las israeles, por ejemplo, CPAV era una versin actualizada de
un programa antivirus llamado Turbo Antivirus de la firma israel CARMEL
Software Engineering Ltd.). Pero el gran problema de este ao fue el llamado
glut. En diciembre de 1.990, haba alrededor de 100 300 virus. En diciembre
del siguiente ao, 1.000 (ya que en este ao se escribieron gran cantidad de
virus).

- 463 -
Tras los pasos de un... Hacker

Glut quiere decir algo as como superabundancia, lo cual, referido al tema de


la proliferacin de virus, caus la aparicin de mltiples y desagradables nuevos
problemas. Los programas tenan muchas limitaciones, en particular, era
necesario el almacenamiento de gran cantidad de datos en memoria para
proceder a un rastreo o scan en busca de virus que bajo la arquitectura del DOS
slo existen disponibles 640 KB de memoria RAM. Otro problema fue que
algunos escneres eran demasiado lentos, en proporcin al gran nmero de virus
que deban detectar; adems, el anlisis del virus requiere no slo su deteccin
real, sino su desinfeccin efectiva. Si cada da hubiera que proceder al anlisis de
un nuevo virus, solamente se podran detectar, analizar y desinfectar unos 250
por ao. Eso quiere decir que ms virus significa tambin ms trabajo para los
desarrolladores, adems, todos estos nuevos virus eran similares unos a otros,
provocando errores de identificacin, por lo tanto realizaban una desinfeccin
ineficaz, muchos escneres fallaban en la clasificacin del virus en cuestin. La
mayora de los virus procedan de Europa del Este y Rusia, pero en Bulgaria se
localiz otro importante foco de produccin de cdigos malignos. Enseguida
muchos pases se unieron a la nefasta carrera de produccin de virus: Alemania
con Gonorrea, Suecia con Demoralized Youth, Estados Unidos con Hellpit,
Reino Unido con Dead on Arrival y Semaj. Algunos de estos virus jams
salieron del laboratorio, pero contribuyeron a extender la fama de estos cdigos
por todo el mundo, animando a los creadores de virus a ser cada vez ms
creativos. La rapidez de creacin produjo el efecto de contribuir la copia de
cdigo: cualquier creador de virus no tena ms que descargar el cdigo fuente y
efectuar en l unos cuantos cambios.
1.991 fue tambin el ao de los virus polimrficos que tuvieron un gran impacto
sobre los usuarios. En abril de 1.991, Tequila recorri el mundo de polo a polo.
Fue escrito en Suiza y fue robado al autor por un amigo que lo introdujo en los
equipos informticos de su padre. El padre era un vendedor de software y as fue
como Tequila se difundi ampliamente.

Se trat del primer virus polimrfico difundido a escala mundial. En mayo, los
nuevos motores de bsqueda lo detectaban, pero no fue hasta septiembre que se
empez a reducir su expansin. Si no se desinfectaba totalmente exista un
riesgo de prdida de un uno por ciento de los archivos, este porcentaje se
incrementaba cada vez que se detectaba el virus pero no se desinfectaba de
forma efectiva.

- 464
Virus y antivirus... Captulo X.

En septiembre de 1.991 el virus Maltese Amoeba hizo de las suyas por toda
Europa, se trataba de otro virus polimrfico que provoc la aparicin de una
docena de variantes antes de fin de ao, todas clasificadas como de difcil
erradicacin. En este ao se anunci la inmediata aparicin de un virus que
poda tomar nada ms y nada menos que 4 billones de formas diferentes, pero
esto sucedera para 1.992 y no se trataba de un virus.

FIG. 46. EFECTOS DEL VIRUS GREEN CATERPILLAR.

En enero de 1.992 fue la fecha de aparicin de la Self Mutating Engine (MtE)


del ya mencionado Dark Avenger, en principio, la comunidad mundial pens
que se trataba de un nuevo virus, de nombre Dedicated, pero despus hizo
aparicin la MtE.

Apareci como un archivo .OBJ; con el cdigo fuente de un simple virus e


instrucciones para enlazar el archivo .OBJ a un virus, de tal manera que, al final se
poda obtener un virus polimrfico. Inmediatamente, los cazadores de virus se
pusieron a la tarea de desarrollar detectores para la MtE. Cada compaa
estableci, para hacer frente a la amenaza, diferentes tipos de estrategia; unas se
preocuparon por desarrollar soluciones para detener el cdigo maligno, mientras
que otras decidieron ignorarlo con la secreta esperanza de que no fueran
afectadas. En un principio, se crey que habra cientos y cientos de virus
haciendo uso de MtE, ya que era muy fcil de usar y permita a dichos virus

- 465 -
Tras los pasos de un... Hacker

ocultarse de forma extraordinaria. Pero los creadores de virus se dieron cuenta


rpidamente de que un escner que fuera capaz de detectar la MtE podra
detectar todos los virus que usen esta librera.

A la MtEle sigui Commander Bomber, tambin de Dark Avenger; antes de


Commander, uno poda prever fcilmente en qu archivo estaba oculto un
virus? muchos desarrolladores de productos aprovechaban esta facilidad para
crear rpidamente herramientas antivirus. Pero Commander Bomber
cambi esto, de tal manera que los escneres se vean obligados a chequear todos
los archivos o bien, localizar el virus mediante un seguimiento completo del
cdigo.

Otro virus importante que surgi durante este periodo fue Starship, se trata de
un virus completamente polimrfico, que constaba de una serie de trucos anti
debug y anti checksum, Starship solamente infectaba los archivos cuando
stos eran copiados desde el disco duro a un disquete. Por lo tanto, los archivos
residentes en el disco duro no cambiaban nunca. Pero la copia del disquete
estaba infectada, por lo que si este disquete se introduca en otro equipo y se
chequeaba el sistema por medio del checksum, ste lo aceptaba sin problemas.
El virus Starship se instalaba a s mismo en el disco duro, pero sin hacer ningn
cambio en el cdigo ejecutable, cambiaba los datos, eso s de particin,
efectuando una nueva particin en el MBR, esta nueva particin contena el
cdigo del virus, que se ejecutaba antes de pasar el control a la copia del MBR
original.

Probablemente, el virus ms importante durante 1.992 fue el conocido


Michelangelo, uno de los ms conocidos vendedores de productos antivirus
norteamericano dio la alerta: cerca de cinco millones de PCs podan venirse abajo
el 6 de marzo de ese ao, en muchas empresas cundi el pnico, cuando los
medios de comunicacin se hicieron eco de este asunto. Sin embargo, el 6 de
marzo slo tuvieron problemas entre 5.000 y 10.000 equipos informticos,
naturalmente los vendedores de software tuvieron que moderar el mpetu de sus
avisos de alarma. Quiz nunca llegaremos a saber cunta gente?, en realidad, se
vio afectada por Michelangelo, pero lo cierto es que en los das previos al 6 de
marzo la mayora de los usuarios llevaron a cabo exhaustivos exmenes de sus
equipos en pos del virus. Despus de esta fecha, muchos expertos en virus de
todo el mundo vieron como sus opiniones, siempre tenidas en cuenta, eran objeto
del ms absoluto desprecio.

- 466 -
Virus y antivirus... Captulo X.

En agosto de ese ao asistimos a la aparicin de los primeros paquetes de


creadores de virus, primero apareci el VCL (Virus Creation Laboratory), de
Nowhere Man, a continuacin Dark Angel gener el Phalcon/Skism Mass
Producer Code Generator. Estos paquetes hicieron posible que cualquier
persona pudiera hacer uso de una PC para escribir su virus personal. En el
transcurso de un ao, aparecieron, en consecuencia, docenas de nuevos virus en
el mercado, todos ellos creados mediante el uso de estas herramientas.

Hacia fines de 1.992 un nuevo grupo de creadores de virus, ARCV (Association of


Real Cruel Virus) apareci en el Reino Unido, al cabo de un par de meses, la
Unidad de Crimen Informtico de Scotland Yard los localiz y arrest, gracias a la
inestimable ayuda de la comunidad de expertos en soluciones antivirus. El
efmero florecimiento de la ARCV dur slo tres meses, durante los cuales
crearon unas cuantas docenas de nuevos virus y reclutaron a algunos miembros
para su causa particular.

Otro de los hechos destacables en este ao tan movido fue la aparicin de


personas que se dedicaban a la venta de colecciones de virus; para ser ms
precisos, se trataba realmente de colecciones de archivos, algunos de los cuales
eran virus (en la actualidad se mantiene este tipo de negocios). En los Estados
Unidos, John Buchanan ofreci su coleccin de unos cuantos miles de cdigos al
precio de 100 dlares por copia. En Europa, la Unidad Clnica de Virus sac a la
venta varias colecciones por 25 dlares la copia.

A principios de 1.993, XTREE anunci que iban a abandonar el negocio del


software antivirus. Era la primera gran compaa que renunciaba a la lucha.
Casi al mismo tiempo, un nuevo grupo de creadores de virus hizo su aparicin en
Holanda: su nombre Trident. El principal creador de virus de este grupo,
Masouf Khafir, elabor un motor polimrfico denominado, precisamente,
Trident Polymorfic Engine y lanz un virus que la utilizaba llamado GIRAFE.
A esto, le siguieron varias nuevas versiones de la TPE. Esta familia de virus es
mucho ms difcil de detectar que los de la MtE y mucho ms complejo evitar sus
falsas alarmas.

Khafir tambin lanz el primer virus que trabajaba de acuerdo con un principio
que ya fuera enunciado por Fred Cohen. El virus Cruncher era un cdigo
maligno de compresin que automticamente se inclua en archivos para
autoinstalarse en tantos equipos como fuera posible; mientras tanto, Nowhere

- 467 -
Tras los pasos de un... Hacker

Man y el grupo Nuke haban estado, tambin bastante ocupados. A principios


de este mismo ao, fue lanzado el Nuke Encryption Device (NED). Se trataba
de otro motor mutante mucho ms difcil de neutralizar que MtE. El virus
consiguiente, Itshard, pronto sigui a la aparicin de esta nueva mquina
polimrfica.

Tambin Dark Angel quiso apuntarse a la moda del polimorfismo. Este


creador de virus lanz DAME (Dark Angel's Multiple Encryptor device), se
trataba de otro motor de mutacin cuyo virus fue Trigger. Este cdigo relanz
la versin 1.4 de la TPE (de nuevo, era mucho ms complejo y difcil de erradicar
que en las versiones previas) y apareci un virus llamado Bosnia que lo
utilizaba.
Un poco despus de esta oleada de cdigos polimrficos, Lucifer Messiah, de
Anarkick Systems, haba tomado la versin 1.4 de TPE y escrito un virus
llamado POETCODE, utilizando una versin modificada de esta mquina (la
1.4b).

Pero el ms famoso de los virus polimrficos que aparecieron a principios de


1.993 fue Tremor, el cual ascendi rpidamente a las alturas de la fama cuando
fue difundido a travs de un show de la televisin alemana dedicado
precisamente a las novedades del software. El archivo infectado fue el popular
PKUNZIP.EXE, que la mayora de los receptores usaban para descomprimir
archivos adjuntos en un correo electrnico.

A mediados de ao, Trident aument su liderazgo con la inclusin de Dark


Ray y John Tardy en el grupo. Tardy haba lanzado un virus completamente
polimrfico de 444 bytes y todos los expertos estaban pendientes del grupo, en
espera de nuevas y malignas creaciones, posiblemente de rango superior. Lo
peor que tuvo lugar en este fatdico ao fue la emergencia de un creciente
nmero de paquetes de virus producidos por los kits de creacin de virus y
mquinas polimrficas, que hacan ms fcil escribir virus que los escneres
encontraban difciles de detectar.

Tambin en 1.993 desaparecieron muchas importantes empresas


desarrolladoras de software antivirus como Certus (uno de cuyos productos
ms representativos era Novi) Fifth Generation (creadores del producto
Untouchable). No obstante, tambin hubo algunas buenas noticias: la empresa
S&S International recibi el galardn Queen's Award for Technological

- 468 -
Virus y antivirus... Captulo X.

Achievement. Este premio se otorg por el lenguaje de descripcin de virus


VIRTRAN que es la base fundamental de FindVirus y VirusGuard.

Los siguientes aos conocieron una superabundancia de virus escritos por medio
de paquetes, lo cual caus enormes dificultades a los desarrolladores de software
antivirus, de repente, se hizo necesario mecanizar los procesos de anlisis de
cdigos malignos, la solucin fue la GDE (General Decrypt Engine o Mquina de
Desciframiento General), que descifraba el cdigo de un archivo sospechoso,
permitiendo as llegar a la conclusin de si se trataba o no de un virus. Esto
eliminaba el peligro de las falsas alarmas, ya que una vez que un virus es
descifrado, se facilita muchsimo el proceso de una identificacin positiva del
citado virus.
En abril del ao 1.994, la firma Central Point Software dej de existir. Central
Point lleg a ser una de las principales empresas del mercado de los
desarrolladores de soluciones antivirus, con su producto CPAV. En este mismo
ao tambin aparecieron muchas mquinas polimrficas y nuevos virus, como
SMEG, que fue lanzado por su autor como Smeg.Pathogen y Smeg.Queeg.
Debido a que estos virus se difundieron inmediatamente despus de su creacin,
supusieron una especie de curiosa prueba que denotaba la capacidad de reaccin
de las empresas desarrolladoras de antivirus.
El 26 de marzo de 1.996, Christopher Pile, de 26 aos, oriundo de Plymouth (en
Inglaterra), fue condenado de acuerdo con la Ley de Utilizacin Fraudulenta de
Equipos Informticos en conexin con la aparicin y posterior difusin de los
virus Smeg.

La aparicin de nuevos tipos de virus; as como, por desgracia, su amplia difusin


hace imposible la inclusin en este apartado de todos ellos, es por esto por lo que
a continuacin haremos una breve referencia a aquellos virus y mtodos de
propagacin ms destacados hasta la fecha que hice la investigacin de este
captulo (12 de junio de 2.002):

1.996 - Boza, Concept, Laroux, & Staog: Boza es el primer virus diseado
especficamente para archivos de Windows 95. Concept es el primer virus de
macro para Word. Laroux es el primer virus de macro para Excel. Staog es el
primer virus para Linux (realizado por los autores del Boza).

- 469 -
Tras los pasos de un... Hacker

1.998 - Strange Brew & Back Orifice: Strange Brew es el primer virus para
Java. Back Orifice es el primer virus troyano diseado para la administracin
remota de equipos, es decir, permite tomar el control de una maquina remota por
otro usuario va Internet.

FIG. 47. EFECTOS DEL VIRUS HPS

1.999 - Melissa, Corner, Tristate, & Bubbleboy: Melissa es la primera


combinacin entre un virus de macro de Word y un gusano que usa la libreta de
direcciones del Outlook y del Outlook Express para enviarse a otros va correo
electrnico. Corner es el primer virus que infecta archivos MS Project. Tristate
es el primer virus de macro multiprograma; infecta archivos de Word, Excel y de
Power Point. Bubbleboy es el primer gusano que puede activarse cuando un
usuario abre un mensaje en Microsoft Outlook. No necesita un archivo adjunto.
Bubbleboy era la prueba del concepto que luego utilizo el virus Kakampliamente
difundido gracias a esta tcnica.

2.000 - DDoS, Love Letter, Liberty (Palm), Streams, & Pirus: DDoS fue el
mayor denegador de servicios que atac cerrando importantes sitios web, tales
como Yahoo!, Amazon.com y otros. El virus Love Letter, se convirti en el gusano
que ms rpido infect a los usuarios; saturando la capacidad de los servidores

- 470 -
Virus y antivirus... Captulo X.

de correo alrededor del mundo. En agosto de 2.000 apareci el primer troyano


desarrollado para la Palm PDA, llamado Liberty y desarrollado por Aaron
Ardiri, uno de los desarrolladores del emulador de la consola Game Boy para la
Palm. Liberty, fue desarrollado como un programa de desinstalacin y fue
distribuido a unas pocas personas para ayudarles a controlar a aquellas personas
que intentasen robarles su software. Cuando fue accidentalmente puesto en
circulacin, Ardiri ayud a contener esta infeccin. Streams comenz siendo la
prueba de concepto de virus para el subsistema de archivos de la definicin NTFS
(New Technology File System) llamado Alternate Data Stream (ADS) que permite
incluir datos adicionales unidos al archivo de origen. Como prueba de concepto,
Streams no debera propagarse. Pirus es otra prueba de concepto, es un script
escrito en PHP. Intenta aadirse a archivos tipo HTML o PHP. Pirus fue
descubierto el 9 de noviembre de 2.000.

FIG. 48. EFECTOS DEL VIRUS MARLBURG.

2.001- Aparece el primer virus para servidores web Linux: El gusano Ramen
comienza a atacar sistemas Linux en enero de 2.001. Debido a la amplia
implantacin de este sistema operativo en el mundo de la Internet, este virus se
propag rpidamente, pero sin causar grandes destrozos.

- 471 -
Tras los pasos de un... Hacker

10.3 QU ESUNVIRUS INFORMTICO?

Un virus informtico, como vimos en la resea histrica de este fenmeno, es un


programa informtico (sea en cdigo ejecutable, objeto o fuente) que es capaz
de autoproducir su cdigo en otros programas informticos o computadoras, de
manera transparente al usuario, capaz de transcurrido el tiempo de
incubacin/propagacin, interferir con el normal funcionamiento de una
computadora o red de computadoras.

10.4 CMO FUNCIONAUNVIRUS INFORMTICO?

Un virus informtico en trminos generales, funciona de la siguiente manera:

1. Fase de creacin. Un programador de computadoras crea el cdigo del


virus.
2. Fase de incubacin/propagacin. Sea el mismo programador o el virus
en funcionamiento, verifica que el husped es susceptible de ser portador
del virus y permanece en estado de latencia hasta poder propagar su
cdigo hacia otro programa u otra computadora, una vez conseguido esto
procede a infectar a su vctima.
3. Fase de destruccin. Conforme est programado, una vez que se han
completado las fases anteriores procede a daar informacin o interferir
con el normal funcionamiento de una computadora hasta llegar a la
destruccin de la informacin o el grave deterioro del rendimiento de una
computadora o red de computadoras.
Ntese que hasta esta fase, la definicin de virus informtico cumple con la
definicin de Cohen.

Creacin del antivirus. El autor o alguna empresa que hacen software antivirus
presentan el antivirus.
Esta fase es opcional.

- 472 -
Virus y antivirus... Captulo X.

10.5 CLASIFICACIN DE LOS VIRUS INFORMTICOS

La clasificacin de los virus informticos es la siguiente:

Virus Per s.
Bomba Lgica.
Gusano o Worm.
Virus de Macro.
Caballo de Troya o troyano.
Fallos de seguridad en el diseo de algunos sistemas.

Todos estos programas tienen en comn la creacin de efectos perniciosos; sin


embargo, no todos pueden ser considerados como virus propiamente dichos.

VIRUSPERS
Un verdadero virus o virus per s, cumple con todas y cada una de las tres
primeras fases del funcionamiento de un virus.
Un virus per s tambin debe modificar el cdigo original del programa
husped o soporte objeto de la infeccin, para poder activarse durante la
ejecucin de dicho programa; al mismo tiempo, una vez activado, el virus suele
quedar residente en memoria para poder infectar otros programas o medios de
forma automtica y sin la intervencin del usuario.

Ejemplo: Three Tunes, Natas, etc.

BOMBA LGICA
Se trata simplemente de un virus informtico que permanece residente en su
husped y contaminando a otros programas o computadoras sanos y que solo
se activa cuando se produce una accin concreta, predeterminada por su creador,
por ejemplo: cuando se llega a una fecha especfica, cuando se ejecuta cierto

- 473 -
Tras los pasos de un... Hacker

programa, se produce determinado suceso o evento en la computadora


husped, etc.
Ejemplo: Jerusalem, Michelangelo, etc.

GUSANO O WORM
Un gusano o Worm en un programa cuya nica finalidad es la de ir consumiendo
la memoria del sistema, mediante la realizacin de copias sucesivas de s mismo,
hasta desbordar la RAM, siendo sta su nica accin maligna, dentro de este
grupo de virus, podemos tambin considerar a los VBScripts.
Ejemplo: Arj.Worm, Bloodhound.IRC.Worm, etc.

VIRUS DE MACRO
Un virus de macro es un programa pernicioso escrito en un lenguaje de alto nivel
que funciona en entornos muy especficos, por ejemplo, las aplicaciones de
Microsoft Office, su caracterstica principal es que funcionan directamente en
cdigo fuente y este fuente puede fcilmente transportase en medios de alta
difusin como son los documentos que pueden crearse con estos programas,
cuando son ledos en una computadora sana, se produce la infeccin de este
sistema, de ah en adelante todos los documentos que se creen sern portadores
de este virus.
Ejemplo: Npad, Laroux, etc.

CABALLO DE TROYA
Caballo de Troya es un programa maligno que se oculta en otro programa que es
una aplicacin vlida y de inters para el usuario. Producir sus efectos
perniciosos al ejecutarse este ltimo. En este caso, no es capaz de infectar otros

- 474 -
Virus y antivirus... Captulo X.

archivos o soportes, pero s es capaz de autoproducir su cdigo en otras


computadoras (obviamente si est programado para realizar esta labor), slo se
ejecuta una vez, aunque es suficiente, en la mayora de las ocasiones, para causar
su efecto destructivo.
Ejemplo: Parrot, SirCam, etc.

FALLOS DE SEGURIDAD EN EL DISEO DEALGUNOSSISTEMAS


Un fallo de seguridad o bug de diseo, es una condicin o serie de condiciones
que permiten a un atacante ejecutar, leer o escribir informacin en una
computadora de manera remota, la cual tenga instalado un programa en
particular. Debido a este tipo de fallos, constantemente los fabricantes de estos
programas estn publicando correcciones de estos programas, a estas
correcciones se las conoce como parches de seguridad. El usuario de estos
sistemas debe estar consciente que mientras existan estos fallos, constantemente
ver comprometida su informacin al usar estos programas.

Ejemplo: Correccin de seguridad en el Outlook Express de Microsoft.

El lmite entre virus per s y el resto de programas malignos es muy difuso,


prcticamente invisible, puesto que ya casi todos los virus existentes incorporan
caractersticas propias de uno o de varios de estos tipos de virus, as por ejemplo:
el virus Viernes 13 tambin conocido como Jerusalem es capaz de infectar otros
archivos, siendo as virus per s, pero tambin realiza su efecto destructivo
cuando se da una condicin concreta, que el da del calendario sea viernes y que
dicha fecha sea 13 de cualquier mes y ao, caracterstica propia de una bomba
lgica; por ltimo, se oculta en programas ejecutables teniendo as una cualidad
de Caballo de Troya, en este punto radica la gran confusin existente a este
aspecto.

- 475 -
Tras los pasos de un... Hacker

10.6 FORMAS DE INFECCIN

Antes de nada, hay que recordar que un virus no puede ejecutarse por si solo,
necesita un programa portador o una computadora husped, para poder
cargarse en memoria e infectar; asimismo, para poder unirse a un programa
portador necesita modificar la estructura de este, para que durante su ejecucin
pueda realizar una llamada al cdigo del virus.

Las partes del sistema ms susceptibles de ser infectadas son: El sector de


arranque de los disquetes, el sector de la tabla de particin (tambin conocido
como MBR, Master Boot Record), el sector de arranque del disco duro y los
archivos ejecutables (*.EXEy *.COM, *.Dll, *.VxD, *.WDM, etc.). Para cada una de
estas zonas tenemos un tipo de virus, aunque muchos son capaces de infectar por
s solos estos tres componentes del sistema.

En los disquetes, el sector de arranque es una zona situada al principio del disco,
que contiene datos relativos a la estructura del mismo y un pequeo programa,
que se ejecuta cada vez que arrancamos desde disquete (tambin se encuentra en
los discos duros, una parte en el MBR y otra en el Boot Sector), que se conoce
como IPL (Initial Program Loader).

En este caso, al arrancar con un disco contaminado el virus se queda residente en


memoria RAM, a partir de este momento, infectar el sector de arranque de
todos los disquetes a los que se tenga acceso, ya sea al dar formato o al hacer un
DIR en el disco (dependiendo de cmo est programado el virus).
El proceso de infeccin consiste en sustituir el cdigo de arranque original del
disco por una versin propia del virus, guardando el original en otra parte del
disco; a menudo el virus marca los sectores donde guarda el boot original como
daado, protegindolos as de posibles accesos, esto suele hacerse por dos
motivos: Primero, muchos virus no crean una rutina propia de arranque, por lo
que una vez residentes en memoria, efectan una llamada al IPL original, para
iniciar el sistema y as aparentar que se ha iniciado el sistema como siempre, con
normalidad. Segundo, este procedimiento puede ser usado como tcnica de
ocultamiento.

Normalmente un virus completo necesita ms espacio que los 512 bytes que
ocupa el sector de arranque, por lo que en ste suele copiar una pequea parte de
si mismo y el resto lo guarda en otros sectores del disco, normalmente los

- 476 -
Virus y antivirus... Captulo X.

ltimos, marcndolos como defectuosos. Sin embargo, puede ocurrir que alguno
de los virus no marquen estas zonas, por lo que al llenar el disco estos sectores
pueden ser sobrescritos y as dejar de funcionar el virus.
El sector de la tabla de particin esta situada en el primer sector del disco duro,
contiene informacin de cmo se divide el disco? y un pequeo programa de
arranque del sistema (IPL). Al igual que ocurre con el boot de los disquetes, un
virus de particin suplanta el cdigo de arranque original por el suyo propio; as,
al arrancar desde el disco duro, el virus se instala en memoria para efectuar sus
acciones. Tambin en este caso el virus guarda la tabla de particin original en
otra parte del disco, aunque algunos la marcan como defectuosa y otros no.
Muchos virus guardan la tabla de particin y a ellos mismos en los ltimos
sectores de disco, para proteger esta zona, modifican el contenido de la tabla para
reducir el tamao lgico del disco. De esta forma el DOS no tiene acceso a estos
datos, puesto que ni siquiera sabe que esta zona existe.
Con todo, el tipo de virus que ms abunda es el de archivo; en este caso usan
como vehculo de expansin los archivos de programa o ejecutables, sobre todo
los *.EXE y *.COM, aunque tambin suelen infectar a archivos de tipo *.DLL, *.VxD,
*.OVL, *.BIN, *.WDM y *.OVR. Al ejecutarse un programa infectado, el virus se
instala residente en memoria, a partir de este momento permanece al acecho; al
ejecutar otros programas, comprueba si ya se encuentran infectados. Si no es as,
se adhiere al archivo ejecutable, aadiendo su cdigo al principio o al final de ste
modificando su estructura, de forma que al ejecutarse dicho programa, primero
llame al cdigo del virus devolviendo despus el control al programa portador, de
esta manera permitiendo su ejecucin normal. (Definicin formal de un virus
hecha por Fred Cohen)

Este efecto de adherirse al archivo original se conoce tambin como hacer un


append file, este proceso aumenta de tamao del archivo al tener que albergar
en su interior al virus, siendo esta circunstancia muy til para su deteccin. De
ah que la inmensa mayora de los virus sean programados en lenguaje
ensamblador, por ser el que genera el cdigo ms compacto, veloz y de menor
consumo de memoria; un virus no seria efectivo si fuera fcilmente detectable
por su excesivo tamao o requerir demasiada memoria (en la actualidad esta
circunstancia no es muy importante). No todos los virus de archivo quedan