Вы находитесь на странице: 1из 28

INTRODUCCIÓN (VI)

… Formado de manera autodidacta y empíricamente desarrollando programas,


me planteaba problemas cada vez más complicados a resolver, por tanto, los
programas resultantes de mis ideas eran más sofisticados. Pero a medida que
aumentaba la cantidad de información a procesar o la complejidad de los
procesos implementados, también aumentaba el tiempo de trabajo de mi
computadora y muchas veces me encontraba limitado por la memoria que
disponía para procesar esta información. Planteado el problema, de alguna
manera había que optimizar los programas que ya funcionaban. Tenía que
reprogramar las aplicaciones para que hagan la tarea de una forma más rápida o
para procesar más información de la que se puede manejar en la memoria RAM.

A mi alcance tuve la guía de grandes personajes de la informática mundial como


fueron y son los profesores John G. Kemeny y Thomas E. Kurtz, quienes con su
trabajo didáctico, como insignes educadores que han formado a miles de
programadores desde el año de 1.964 cuando inventaron el BASIC, lograron que
mis conocimientos sobre programación crecieran con la lectura y estudio de sus
libros y manuales técnicos. Conceptos y procedimientos que fueran reforzados
por cuenta propia con el análisis y estudio que me llevara varios años de la obra
titulada “The Art of Computer Programming” del profesor Donald E. Knuth
(1.938-), que a los programadores dota de conocimientos teóricos, justamente
sobre la Teoría de Algoritmos. Con la explicación y análisis de los métodos y
procedimientos conocidos hasta ese entonces, mi reto personal fue desarrollarlos
e implementarlos en BASIC (ya que Knuth los explica en un lenguaje de
programación teórico al que lo llama MIX) para comprobar que funcionaban
conforme a la explicación.
Con esta enciclopedia en el arte de programar computadoras (obra publicada
en Estados Unidos de Norte América en el año de 1.967 por la editora
Addison-Wesley, original del profesor Donald E. Knuth catedrático de la
Universidad de Stanford. Adquirí en 1.987, los tomos 1 y 3 traducidos al español
e impresos por la editorial Reverté de España en 1.985, la serie completa la
conseguí en inglés varios años después…) al revisar con más profundidad estos
conceptos y procedimientos (que ya los conocía o por lo menos los intuía) pude
entender plenamente el ¿por qué? y el ¿cómo funcionan estos algoritmos?

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

Entendí conceptos importantes como: Algoritmos, estructuras de programación,


rutinas (corutinas), subrutinas, funciones, etc. Algunos procedimientos
matemáticos como: el cálculo del MCD (Máximo Común Divisor), el mcm (mínimo
común múltiplo), el método para obtener la raíz cuadrada, el cálculo del valor
del número pi, las funciones trigonométricas, etc.
Con más elementos de juicio y conocimiento, pude analizar ¿cómo se fueron
mejorando los algoritmos? para que de una forma eficiente se pueda llevar a cabo
alguna tarea específica, por ejemplo: la evolución de los métodos de clasificación
y búsqueda, métodos de búsqueda combinatoria, métodos iterativos y recursivos,
etc. (De mi experiencia, les puedo sugerir que consulten esta serie de libros como
una buena fuente de conocimientos teóricos de lo que constituye la Teoría 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 maestría que tienen los grandes, pudieron hacer que aprenda de forma
eficiente todo ese conocimiento y lo ponga en práctica.

Algunos de mis compañeros de aula del colegio y muchos jóvenes de otros cursos,
al ver que podía programar mi computadora, me pidieron que les explique algo
de este conocimiento que ya lo dominaba. Por vez primera, entendía 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
guía de programación BASIC, que la repartí en fotocopias para que se enteren de
la computación e intenten aprender a programar (inicios del año de 1.989).

La tarea no era nada fácil, ya que mis compañeros no tenían computadora, así
que no serviría de mucho que en papel desarrollen los algoritmos propuestos.

Los lectores que quieran aprender a programar, tendrán que tener una
computadora e instalada la copia del True BASIC™ que les había mencionado
adquieran (puede servir también cualquier lenguaje de programación con su
respectiva guía de uso).

Precisamente traigo a colación un viejo proverbio chino que dice:


Oigo y olvido,
veo y recuerdo,
hago y entiendo…

- 228 -
La historia... Introducción (VI).

Y es precisamente, la última proposición la que normalmente no efectuamos, la


que, por el objetivo que perseguimos es la más importante.

Incluyo otro paréntesis en el relato de mi vida que me parece importante, desde


el lado constructivo de la sana crítica, voy a reflexionar sobre la calidad del
conocimiento que se imparte en los centros destinados precisamente a formar
programadores. Esta realidad de mi país, la he visto lamentablemente repetida
en los aproximadamente 25 años que llevo investigando y desarrollando
programas de computadora en nuestros países (Latinoamérica):
En las naciones que tradicionalmente están a la vanguardia tecnológica,
las empresas que desarrollan o mantienen software, cotizan mejor a los
programadores que tienen fundamentos teóricos para la instrumentación
de programas, porque parece ser que el conocimiento que tenían los
pioneros de la computación, por el facilismo que nos presta la misma
computadora poco a poco se está perdiendo (Teoría de Algoritmos).

Esta situación se ve empeorada porque desde el punto de vista de


nuestros dirigentes, ya que supongo, hacen el siguiente razonamiento:
“Como nuestros países no producen tecnología informática, entonces
¿para qué enseñar a pensar a nuestros programadores?” y seguramente
se contestan: “Solo deben ser usuarios de los productos que nos vienen de
los países del primer mundo, de todos modos, si ya están hechos ¿para
qué volver a hacerlos?”. Este perverso pensamiento limita y en mucho las
ganas que tienen muchos jóvenes de aprender, con el transcurrir del
tiempo, esta política educativa hace que se conformen con lo que el status
quo manda y requiere.

Esta realidad la fundamento, palabras más, palabras menos, de una


conversación 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 pedía
que en alguno de los lenguajes de programación que en su hoja de vida
decía dominaba, implementara un sumador (pero sin usar ninguno de los
operadores aritméticos tradicionales, es decir, cree su propia función
para sumar), el mismo que tendría que sumar dos números enteros;

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

parecía algo trivial, pero a pesar que el postulante ya era un profesional


graduado de una prestigiosa universidad del país y tenía una maestría en
ciencias de la computación y otra en administración 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 volvería en dos
o tres días con el programa que pedía, hasta la fecha de publicación de
este libro, estoy esperando que el aspirante regrese.

Entrevisté a muchos programadores y de igual forma, algunos


sinceramente me decían que no podían, 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
programación, 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 tecnológico 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 enseñarles algunos de
los fundamentos de la programación, revisemos algunos conceptos básicos…

- 230 -
CAPÍTULO VI. FUNDAMENTOS DE LA PROGRAMACIÓN

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 capítulos 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 aritmética usando guarismos arábigos”, cuyo nombre hace
relación al de un famoso matemático persa llamado Abu Ja’far ibn Mûsâ
al-Khowârizmî (vivió aproximadamente por el año 825) que quiere decir
traducido literalmente “Padre de Ja’far, Mohammed, hijo de Moisés, natural de
Khowârizmî” quien escribió algunas obras de carácter matemático, entre ellas el
libro “Kitab al jabrw’al-muqabala” (Reglas de restauración y reducción).

Al transcurrir el tiempo el significado original fue corrompiéndose y a veces se


confundía con el concepto de aritmética, es Gottfried Wilhelm Leibnitz (1.646 –
1.716) quien utiliza la frase latina ALGORITHMUS INFINITESIMALIS, que
significa “maneras de calcular con cantidades infinitamente pequeñas”, de la cual
podemos desprender la palabra algoritmo, en esa época se la relacionaba
comúnmente con el ALGORITMO DE EUCLIDES (proceso para hallar el máximo
común divisor de dos números que aparece en los Elementos de Euclides).

El significado moderno de algoritmo es similar al de receta, proceso, método,


técnica, procedimiento, etc., pero para los informáticos es: “Procedimiento, que
mediante la utilización de un conjunto finito de reglas dadas a una secuencia
de operaciones, permiten la solución de un problema, cuya definición es

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

codificable en cualquier lenguaje de programación, dando como resultado un


programa”.

6.2CARACTERÍSTICAS

Los algoritmos tienen las siguientes características:

1. Finitud.
2. Definibilidad.
3. Entrada.
4. Salida.
5. Efectividad.

6.2.1 FINITUD
Un algoritmo tiene un número finito de pasos. Un procedimiento que tiene todas
las características de un algoritmo salvo que posiblemente falle en la finitud
puede ser llamado MÉTODO DE CÁLCULO, por ejemplo: El método para obtener
la raíz cuadrada de un número, el método para calcular el número 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 ambigüedad. Por esta característica los lenguajes de
programación son definidos de manera formal para la codificación de algoritmos
(programas).

6.2.3 ENTRADA
Un algoritmo debe tener cero o más 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 programación... Capítulo VI.

6.2.4 SALIDA
Un algoritmo tendrá una o más salidas. La salida son los resultados del proceso
de la información en la ejecución del algoritmo.

Las salidas tienen una relación muy estrecha con las entradas, casi siempre son
de la misma especie o tipo de datos.
Por ejemplo: Para obtener la raíz cuadrada, se tiene una entrada numérica real
positiva y las salidas son dos números 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 división 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 científicos informáticos llamados
Corrado Böhm (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 programación que combine el uso de tres
estructuras básicas de control”.

Las estructuras a las que se refiere el conocido Teorema de Böhm –Jacopini son:
1) Estructuras secuenciales. (Ejecutar primero una instrucción y luego
otra).

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

2) Estructuras de decisión. (Ejecutar una instrucción, función o subrutina


dependiente de una condición).
3) Estructuras iterativas. (Ejecutar una instrucción, función o subrutina de
forma repetitiva hasta que se satisfaga una condición 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 programación hasta ese
entonces conocido era un montón de instrucciones organizadas para
efectivamente solucionar un problema específico, pero únicamente el
programador que concibió el algoritmo podía entender lo que estaba haciendo
(muy parecido a lo que sucede cuando analizamos la implementación de alguna
función, subrutina o programa en lenguaje máquina); ya que, con el uso de una
instrucción particular llamada GOTO, se podía en cualquier momento de la
ejecución del algoritmo “romper” la lógica 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 difícil mantener el código
fuente de estas implementaciones, si se había tomado la precaución de
documentar cada paso lógico del programa este problema se minimizaba).

Niklaus Wirth al presentar en 1.970 su propuesta de lenguaje de programación,


al que lo denominó PASCAL, confirma que es posible implementar cualquier
programa en la forma como lo habían demostrado Böhm y Jacopini en 1.966. A
partir de este trabajo se crea el estilo de programación que lo conocemos como
PROGRAMACIÓN ESTRUCTURADA, que entre otras ventajas podemos resaltar
las siguientes:

1) Los programas son más fáciles de entender, ya que pueden ser leídos de
forma secuencial, sin necesidad de hacer el seguimiento a los saltos de
línea (GOTO) dentro de los bloques de código para entender la lógica.
2) La estructura del programa es clara, puesto que las instrucciones están
más ligadas o relacionadas entre sí.

3) Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o


errores del programa (trace and debugging) se facilita debido a la
estructura más visible, por lo que los errores se pueden detectar y
corregir más fácilmente.

- 234 -
Fundamentos de la programación... Capítulo VI.

4) Reducción de los costos de mantenimiento de los programas.

5) Programas más sencillos y más rápidos (ya que es más fácil su


optimización).
6) Los bloques de código son auto explicativos, lo que facilita la
documentación.
7) Un programa escrito de acuerdo a estos principios no solamente tendrá
una mejor estructura sino también una excelente presentación.

Por el contrario podemos decir que el estilo de programación estructurada


tiene la siguiente desventaja:
El programa resultante, dependiendo del problema que intentamos
resolver, puede hacerse demasiado grande y de esta forma resultar
problemático su manejo (desde el punto de vista humano, para su
mantenimiento). Este ligero inconveniente lo resolvemos, dividiendo al
programa en módulos funcionales (a esta división se la conoce como
programación modular), interdependientes entre si y compilados por
separado. (Cuando realizamos el mantenimiento o actualización de
alguna versión del programa en diferentes plataformas o sistemas
operativos, es recomendable para su correcto funcionamiento que cada
vez se recompilen los módulos por separado).

El uso cotidiano de estas técnicas de programación, hacen que utilicemos tanto


las técnicas de programación estructurada como las de programación modular de
forma conjunta; por lo tanto, cuando hablemos de la programación
estructurada, implícitamente se está considerando también las técnicas de
modularización de un programa.
Existen otros estilos de programación derivados de la programación
estructurada y son conocidos como programación por capas y la
programación orientada a objetos.
El objetivo de este texto es el de enseñar a programar (pensar como
programador) e implementaremos nuestros programas haciendo uso de las
técnicas de la programación estructurada. Estas implementaciones las haremos
utilizando el BASIC estructurado, usaremos algunas de las instrucciones que

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

están definidas en los estándares ANSI para el BASIC, para esto elegimos la
versión Bronze™ del Lenguaje de Programación True BASIC™.
(www.truebasic.com)

Muchos se harán la pregunta: ¿Por qué no PASCAL o C?

Bueno, tengo dos principales razones para decirles que es mejor empezar con el
True BASIC™el 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 implícito que el programador sabe el correcto uso y definición del
tipo de datos, por el contrario con True BASIC™, solamente están
definidos dos tipos de datos para el uso de las variables, los numéricos y
los de cadena o “strings”, facilitando que el alumno compruebe que la
lógica usada en la implementación de la rutina, función o programa,
trabaja correctamente y no dedicar mucho esfuerzo a preocuparse en las
definiciones del tipo de variable. Muchas veces esta preocupación de los
tipos de variable, hacen que los alumnos repudien la programación,
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 válido cuando queremos optimizar velocidad o
uso eficiente de memoria) pero en la etapa de aprendizaje, lo que nos
interesa es que la lógica funcione y eso es lo que conseguimos con el
BASIC para que el alumno verifique que el programa funciona por la
lógica implementada.

2) El código desarrollado y los ejemplos implementados correrán 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 códigos
fuente presentados en este libro, se puedan verificar que los programas
funcionan (claro está, que para esto cada lector, debe conocer el manejo
básico 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 versión de BASIC llamada

- 236 -
Fundamentos de la programación... Capítulo VI.

POWER BASIC©, que prácticamente 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
definición gráfica 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 más simples. A estas sentencias o
instrucciones (también se las conoce como palabras reservadas), asociaremos el
correspondiente símbolo gráfico para poder esquematizar el algoritmo.

Asignaremos una traducción al español de estas instrucciones. Muchos autores a


esta traducción no oficial de las sentencias o instrucciones de los lenguajes de
programación las denominan pseudocódigos, los mismos que son palabras
arbitrarias que cada programador puede hacer para esbozar un procedimiento
específico 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 definición de los pasos lógicos en nuestros algoritmos, seguiremos la


siguiente convención:
1) Utilizaremos letras en mayúscula 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 instrucción.

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

3) Los nombres de variables y constantes, comenzarán con una letra y


podrán tener cualquier otra letra o número, así como el carácter de raya
baja (espacio subrayado).

4) Para diferenciar las variables alfanuméricas (“strings”, hilera o cadena)


de las numéricas, utilizaremos después del nombre de la variable el
símbolo “$” o también conocido en programación BASIC como “string”;
así, la variable A nos dirá que es numérica, A$(“Astring”) nos dirá que es
alfanumérica.
Con estas premisas, se han definido las siguientes instrucciones en BASIC para las
estructuras básicas 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
(documentación del código fuente), hacen entendible al código y de fácil
mantenimiento.
En True BASIC™, por facilidad podemos reemplazar la instrucción REM por un
símbolo de admiración “!”, otras versiones de BASIC la sustituyen por un
apóstrofe “’”.
Ejemplo: REM En este programa vamos a realizar el cálculo del número PI.
! En este programa vamos a realizar el cálculo del número PI.

Su representación en los diagramas de flujo está definida por el siguiente


símbolo:
Aquí escribiremos el
comentario.

Podemos especificar alguna


fórmula o ayuda para
entender lo que se quiere
hacer.

- 238 -
Fundamentos de la programación... Capítulo VI.

LET (ASIGNAR) <Variable = Expresión informática>

Nos permite reservar un espacio de memoria RAM de la computadora para


guardar algún valor y poder identificarlo con algún nombre de variable. A la vez
que nos permite hacer una operación de asignación del resultado de evaluar la
expresión informática definida (fórmula o cálculo 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 instrucción de asignación estamos


definiendo a la variable Numero_PI el valor de 3,141592654; en el segundo
caso, asignamos a la variable X1 la evaluación de la fórmula de la solución
de una ecuación de segundo grado con una incógnita (en este caso
estamos hablando de la primera solución). Para el tercer ejemplo, cuando
realizamos una operación de asignación, le estamos diciendo a la
computadora que el valor resultante de la evaluación de una expresión
informática 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 común 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 programación se codifican de la forma i = i + 1.

Su representación en los diagramas de flujo está definida por el siguiente


símbolo:

Aquí escribiremos
la asignación.

INPUT (INGRESAR) <Lista de variables separadas por comas>

Con esta instrucción le decimos a la computadora, que si todavía no ha reservado


memoria para una variable, la reserve y asigne el valor que el usuario ingresará a
través del teclado.
Ejemplo: INPUT X

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

INPUT X, Y

En el primer caso, esta instrucción hará que aparezca en la


pantalla un símbolo de interrogación 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 representación en los diagramas de flujo está definida por el siguiente


símbolo:

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 instrucción 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 irán entre comillas.

PRINT “El valor de pi es: “;PI

Con este ejemplo, ilustramos la combinación de presentar un


mensaje con el valor de una función (True BASIC™ tiene muchas
funciones predefinidas, sería conveniente que revisemos la Guía
de Uso de la Versión Bronce).

- 240 -
Fundamentos de la programación... Capítulo VI.

En la pantalla veremos lo siguiente: El valor de pies:3.1415927.

Existe una convención 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 continuación del último
presentado.

Cuando usamos la coma, introducirá un espacio de varios caracteres entre


mensaje o resultado.
Su representación en los diagramas de flujo está definida por el siguiente
símbolo:

Mensaje o
expresión a
presentar.

DATA (DATO) <Valores a leer>

Con esta instrucción podemos almacenar“internamente” en el programa valores


que servirán para hacer ciertos cálculos. También 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 numéricos se
digitan como tales y los alfanuméricos entre comillas.
Esta instrucción es complementaria de la instrucción READ (LEER), conforme
conste en esta las variables a leer. Esta lectura y asignación de valores se las hace
de forma secuencial.
Ejemplo: DATA 1, 2, 3, 4

En este ejemplo, se irán asignando de forma secuencial los valores


a una o varias variables, empezando por el primero.

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

Su representación en los diagramas de flujo está definida por el siguiente


símbolo:

Lista
de
datos

READ (LEER) <Variables a leer>

Sirve para hacer una asignación de valores que ya están definidos en una
instrucción 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 están 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 definición hará que se lean cuatro valores que deben estar
definidos en DATA, los asignará correspondientemente a las
variables A, B, C y D.

Su representación en los diagramas de flujo está definida por el siguiente


símbolo:
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 programación... Capítulo VI.

Así se dice al programa que empiece en la siguiente instrucción


READ a asignar los valores desde el primero que está definido en

DATA.

Su representación en los diagramas de flujo no está definida exclusivamente,


pero podemos representarla por el siguiente símbolo:

RESTORE

END (FIN)

Sirve para finalizar la ejecución del algoritmo.

Ejemplo: END

Su representación en los diagramas de flujo está dada por el siguiente símbolo:

FIN

También y por convención para la elaboración de los diagramas de flujo, al inicio


de cualquier algoritmo utilizaremos el siguiente símbolo:

INICIO

6.4.2 ESTRUCTURAS DE CONTROL CONDICIONAL

IF <EXPRESION CONDICIONAL> THEN <INSTRUCCIÓN>


SI <EXPRESIÓN CONDICIONAL> ENTONCES <INSTRUCCIÓN>

Esta estructura de control condicional es la más simple de las que disponemos


para evaluar una condición.
Con esta estructura de control, se condiciona a que se ejecute una instrucción,
solamente cuando el resultado de la evaluación de la expresión condicional sea
verdadero.

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

Ejemplo: IF X1 = 3 THEN PRINT “La solución es 3.”

Veremos cuando ejecutemos esta expresión en un programa, que


en este caso se verá en pantalla el mensaje (La solución es 3.)
solamente cuando X1 sea 3.
Esta estructura de control condicional se representa en los diagramas de flujo
por el siguiente símbolo:

Expresión
Si
Condicional

No

IF <EXPRESION CONDICIONAL> THEN


<PROCEDIMIENTO>
END IF
SI <EXPRESIÓN 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 expresión condicional.

Ejemplo: IF A<>0 THEN

LET X1 = (-B + SQR(B^2 - 4*A*C)) / (2*A)

END IF

Con esta condición se asegura que el valor de la división sea


posible.

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente símbolo:

- 244 -
Fundamentos de la programación... Capítulo VI.

Expresión
Si PROCESO
Condicional

No

IF <EXPRESION CONDICIONAL> THEN


<PROCEDIMIENTO 1>
ELSE
<PROCEDIMIENTO 2>
END IF
SI <EXPRESIÓN 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 expresión 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 ecuación 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
ecuación no es de segundo grado…)

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente símbolo:

Expresión
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 <EXPRESIÓN CONDICIONAL 1> ENTONCES


<PROCEDIMIENTO 1>
CASO CONTRARIO SI <EXPRESIÓN 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 ecuación no es de segundo grado”
ELSE PRINT “La ecuación no tiene soluciones reales”

END IF

Con esta forma se asegura que en nuestro algoritmo se calcule de


mejor manera las soluciones de una ecuación de segundo grado
con una sola incógnita.

Esta estructura de control condicional se representa en los diagramas de flujo


por el siguiente símbolo:

Expresión Si
No PROCESO 1
Condicional 1

Expresión
Si PROCESO 2
Condicional 2

No

PROCESO 3

- 246 -
Fundamentos de la programación... Capítulo VI.

6.4.3 ESTRUCTURAS DE CONTROL ITERATIVO


Una de las características importantes que tiene la computadora es su capacidad
para realizar cálculos y muchas veces estos cálculos hay que repetirlos “n veces”
hasta obtener el resultado deseado.

A esta repetición condicionada de un procedimiento, los programadores la


conocemos con los nombres de iteración, 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 condición.

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, implícitamente se incorpora una condición, la variable que


controla la estructura (que en programación 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 límite 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 presentarán 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 símbolos:

<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 <EXPRESIÓN CONDICIONAL>


<PROCEDIMIENTO>
LOOP
HACER MIENTRAS <EXPRESIÓN CONDICIONAL>
<PROCEDIMIENTO>
FIN HACER

Esta estructura evaluará la condición antes de realizar el procedimiento


contenido. Ese procedimiento se repetirá mientras la evaluación de la expresión
condicional sea verdadera. En otras palabras, repetirá el procedimiento mientras
la relación 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 programación... Capítulo 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 símbolos:

CONDICION SI PROCESO

NO

DO UNTIL <EXPRESIÓN CONDICIONAL>


<PROCEDIMIENTO>
LOOP
HACER HASTA QUE <CONDICIÓN>
<PROCEDIMIENTO>
FIN HACER

Esta estructura evaluará la condición antes de realizar el procedimiento


contenido. Ese procedimiento se repetirá hasta que la evaluación de la expresión

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

condicional sea verdadera. En otras palabras, repetirá el procedimiento mientras


la relación condicional es falsa, si esta condición 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 presentarán 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 símbolos:

PROCESO NO CONDICION
SI

DO
<PROCEDIMIENTO>
LOOP WHILE <EXPRESIÓN CONDICIONAL>
HACER
<PROCEDIMIENTO>
FIN HACER MIENTRAS <CONDICIÓN>

Esta estructura a diferencia de las anteriores, ejecutará al menos una vez el


proceso y se seguirá ejecutando mientras la evaluación de la expresión
condicional sea verdadera.
Ejemplo: LET I = 1

- 250 -
Fundamentos de la programación... Capítulo VI.

DO
PRINT I
LET I = I + 2
LOOP WHILE I < = 10

Como vemos se presentarán 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 símbolos:

PROCESO

SI

CONDICION

NO

DO
<PROCEDIMIENTO>
LOOP UNTIL <EXPRESIÓN CONDICIONAL>
HACER
<PROCEDIMIENTO>
FIN HACER HASTA QUE <EXPRESIÓN CONDICIONAL>

Esta estructura ejecutará al menos una vez el procedimiento y lo repetirá hasta


que la condición sea verdadera.

Ejemplo: LET I = 1
DO
PRINT I
LET I = I + 2
LOOP UNTIL I > 10

Como vemos se presentarán 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 símbolos:

PROCESO

NO

CONDICION

SI

Si nosotros observamos detenidamente las estructuras de este tipo, deducimos


que dependiendo de la forma de expresar la condición de salida del bucle se
obtienen los mismos resultados.

Definidas así las instrucciones que nos permitirán elaborar nuestros algoritmos y
a la vez representarlos de manera gráfica, podemos empezar a desarrollar
nuestros primeros programas.

NOTAS Y BIBLIOGRAFÍA
Sobre este tratado de Fundamentos de la Programación, las notas han sido
elaboradas en base a publicaciones de revistas especializadas y la consulta de los
siguientes textos:

- Matemáticas y Astronomía, Tomo No. 11, Enciclopedia Salvat de las


Ciencias, Salvat S.A. de Ediciones, Pamplona, España, 1.968.
- CÓMO PROGRAMAR COMPUTADORAS, URMOS.A, DE EDICIONES, Bilbao
–España, 1.977.

- 252
Fundamentos de la programación... Capítulo VI.

- Curso Práctico de Programación, 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 – España, 1.985.
- QL PROGAMACIÓN EN SUPERBASIC, Roy Atherton, MicroTextos S.A. de
ediciones, Madrid – España, 1.985.
- Programación Estructurada en Lenguaje Pascal, ENCICLOPEDIA
PRÁCTICA DE LA INFORMÁTICAAPLICADA, TOMO 3, Juan Ignacio Puyol,
EDICIONESSIGLOCULTURALS.A., Madrid – España, Octubre de 1.986.
- EL ARTE DE PROGRAMAR ORDENADORES – CLASIFICACIÓN Y
BÚSQUEDA - Volumen III, Donald E. Knuth, Editorial Reverté S.A.,
Barcelona – España, 1.987.
- Structured BASIC Programming, John G. Kemeny & Thomas E. Kurtz, John
Wiley & Sons, Publicado en Estados Unidos de Norte América, 1.987.
- True BASIC by Problem Solving, Brian D. Hahn, VCH Verlagsgesellschaft
mbH, Weinheim – República Federal de Alemania, 1.988.
- Personal Mathematics and Computing, Frank Wattenberg, MIT Press,
Publicado en Estados Unidos de Norte América, 1.990.
- The Fun of Computing, John G. Kemeny, True BASIC Inc. © 1.990,
Publicado en los Estados Unidos de Norte América, 1.990.
- Programación en C, Byron S. Gottfried, McGraw – Hill / Interamericana de
España S.A., Madrid – España, 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 América, 1.992.
- DiscoveryPak, True BASIC Inc., True BASIC Press, Publicado en Estados
Unidos de Norte América, 1.993.
- Ingeniería del Software – Un enfoque práctico, Roger S. Pressman,
McGraw – Hill / Interamericana de España S.A., Madrid – España, 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.
- Let´s Program It… in True BASIC, Avery Catlin, True BASIC Press,
Publicado en Estados Unidos de Norte América, 1.996.
- Programming for ENGINEERS… in True BASIC, Avery Catlin, True BASIC
Press, Publicado en Estados Unidos de Norte América, 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
América, 2.001.
- Matemática e Informática, Tomo No. 11, Enciclopedia Larousse del
Estudiante, Sociedad Comercial y Editorial Santiago Ltda., Santiago de
Chile, Chile, 2.000 – 2.002.
- Manual Moderno de Informática, Labor Loerincs, Zamora Editores Ltda.,
Publicado por Quebecor World Bogotá S.A., Impreso en Bogotá –
Colombia, 2.004.
- Criptografía y Seguridad en Computadores Cuarta Edición Versión
4-0.8.1, Manuel José Lucena López, Universidad de Jaén, Publicación
Electrónica, 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, Néstor Marroquín, 1.989–1.994.


- Trabajos de varios autores publicados en la worldwide web.

- 254 -

Вам также может понравиться