Introduccion Programacion de Computadores

Introducción a la Programación de Computadores INICIO a, b c=a+b c FIN INICIO LEER a LEER b c=a+b MOSTRAR c FIN S

Views 193 Downloads 165 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción a la

Programación de Computadores INICIO

a, b

c=a+b

c

FIN

INICIO LEER a LEER b c=a+b MOSTRAR c FIN

Sub Sumar Input Input c = a Print End Sub

a b + b c

Pedro Vicente Rosero Montaño

Introducción a la Programación de Computadores Pedro Vicente Rosero Montaño Tangua, 2006

Este documento se distribuye únicamente en formato digital y queda expresamente prohibida su comercialización. Puede reproducirse mediante fotocopiado, siempre y cuando al destinatario de cada copia no le implique ningún costo económico y se mantenga la identidad de la autoría expresada en esta página y la carátula del documento. Queda expresamente prohibida la publicación en un sitio diferente al autorizado por su autor. Los nombres de productos o compañías que puedan ser mencionados aquí son marcas comerciales de sus respectivos dueños y se han tomado únicamente como referentes teóricos para sustentar los contenidos.

Contenido

PRESENTACION 1. GENERALIDADES 1.1 Que es la Informática 1.2 Que es la electricidad 1.3 Que es un computador 1.4 Historia del computador 1.5 Partes del computador 1.6 Procesamiento de datos 1.7 Sistemas numéricos 1.8 Conversión entre sistemas numéricos 1.9 Código de caracteres ASCII 1.10 Ejercicios

1

2. PROGRAMACIÓN DE COMPUTADORES 2.1 Que es programar 2.2 Problemas, algoritmos y programas 2.3 Lenguajes de programación 2.4 Compiladores e interpretes 2.5 Herramientas de programación 2.6 LENGUAJE BASIC Instrucción Print Instrucción Input

21

3. ELEMENTOS DE PROGRAMACION 3.1 Algoritmos 3.2 Identificadores de memoria 3.3 Constantes 3.4 Variables 3.5 Asignación de datos a la memoria 3.6 Tipos de datos 3.7 Operadores 3.8 Representación de algoritmos 3.9 Verificación de algoritmos 3.10 Codificación 3.11 Uso de comentarios en un algoritmo

33

3.12

Diseño de programas de computador

4. FLUJO DE CONTROL I. ESTRUCTURAS SECUENCIALES 4.1 Concepto de flujo de control 4.2 Estructuras secuenciales 4.3 Ejemplos 4.4 Ejercicios 4.5 Problemas avanzados

63

5. ESTRUCTURAS DE CONTROL II: ESTRUCTURAS SELECTIVAS 5.1 Estructura selectiva 5.2 Alternativa simple 5.3 Alternativa doble 5.4 Alternativa múltiple 5.5 Ejercicios

79

6. ESTRUCTURAS DE CONTROL III: ESTRUCTURAS REPETITIVAS 6.1 Estructuras repetitivas 6.2 Estructura MIENTRAS 6.3 Estructura REPETIR-HASTA_QUE 6.4 Estructura PARA

109

Presentación

La Informática es una ciencia relativamente joven, pero a pesar de su corta vida ya se ha constituido en el pilar fundamental, no solo de la moderna tecnología, sino del desarrollo de la civilización misma, siendo su elemento central el computador. Sin lugar a dudas, esta máquina es una de las más impresionantes que hasta el momento ha logrado construir el ser humano. Es la única máquina que funciona recibiendo ordenes en forma escrita. Aprender a programar un computador, es aprender a sacar el máximo provecho de las capacidades que este aparato posee. Si es verdad que hoy en día existen programas de computador especializados en cualquier actividad que deseemos realizar, también lo es que muchos de esos programas en situaciones muy particulares no son capaces de hacer una tarea especifica. Además, son tan diversas las tareas que se pueden hacer con un computador que es prácticamente imposible contar con un programa para cada cosa que necesitemos realizar. La programación de computadores es un área de la informática que centra todo su trabajo en el manejo de conjuntos de instrucciones estructuradas en forma lógica, que a su vez traen como consecuencia una lógica de funcionamiento que no es más que un reflejo de la primera. Es por esto que una de las mejores formas de conocer a fondo como funciona esta máquina, es conocer como se la programa para que haga todas las tareas que puede realizar. Las personas que aprenden a programar un computador, al mismo tiempo están sumergiéndose en toda la estructura lógica que rige su funcionamiento, y esto les facilita lograr una mejor comprensión del mismo. Hoy en día con el avance tan vertiginoso que ha tenido la electrónica digital, la habilidad de programar no solo tiene campo de aplicación en el mundo de los computadores, también existen infinidad de dispositivos electrónicos, con igual diversidad de usos, que basan su funcionamiento en un programa insertado en un circuito integrado. El control remoto de nuestro televisor es un buen ejemplo de esta situación. En su interior posee un sistema electrónico que es manejado por al menos un microcontrolador que se encarga de realizar la tarea seleccionada de acuerdo a un programa que ha sido insertado en su memoria. Esto le ha permitido a la electrónica dominar un amplio rango de aplicaciones, sobretodo de gran complejidad, ya que todo depende de la habilidad para programación y al mismo tiempo de la creatividad que tenga quién va ha desarrollar una determinada solución. El objetivo primordial de este escrito es introducir al lector en el manejo de los elementos básicos que fundamentan la programación de computadores, y desarrollar en él la estructura mental lógica que le permita asumir el manejo de los elementos más avanzados de programación. Aunque hoy en día existen muchos paradigmas de programación, resulta difícil pensar que alguien pueda asumir uno u otro sin que antes no haya conocido los elementos básicos del paradigma de programación estructurada que se describe aquí, ya sea por que los otros paradigmas los utilizan o por que su lógica es similar a este. Comenzamos por una breve descripción de la estructura lógica que ha permitido el desarrollo de complejos sistemas que utilizan los computadores, partiendo de los electrones y los bits hasta llegar

a los programas de computador. En esta parte, es muy importante familiarizarse con algunos términos técnicos para facilitar la comprensión de temas relacionados que se manejan en la literatura informática. A partir de la segunda parte se describen las estructuras básicas que se utilizan en la programación de computadores, comenzando en los algoritmos y la forma como estos se pueden construir para lograr estructurar órdenes computacionales que generen un efecto deseado. En el desarrollo de las diferentes descripciones se han construido ejemplos prácticos que se sugiere sean realizados por el lector para de esta afianzar su comprensión. A pesar de que hoy en día se impone el paradigma de programación orientada a objetos, en este documento nos centraremos únicamente en el manejo de pequeños programas netamente estructurados. Es prácticamente imposible asumir el manejo de este moderno paradigma sin conocer los elementos básicos de la programación estructurada. Aunque los teóricos del paradigma orientado a objetos no lo aceptan como tal, en la práctica este no es más que la evolución del paradigma de programación estructurada, y de hecho sus elementos fundamentales, que son las clases, están constituidos por trozos de programación estructurada. Como autor, estoy seguro que este material contiene una infinidad de errores y deficiencias, tanto conceptuales como didácticas, por lo cual espero que los lectores me las hagan conocer. Con la ayuda de todos podremos construir un material mucho más consistente y sobre todo útil a quienes deseen introducirse en el fascinante mundo de la programación de computadores.

Pedro Vicente Rosero Montaño http://www.pedrov.phpnet.us Tangua, 2006

1 GENERALIDADES

Contenido 1.1 Que es la Informática 1.2 Que es la electricidad 1.3 Que es un computador 1.4 Historia del computador 1.5 Partes del computador 1.6 Procesamiento de datos 1.7 Sistemas numéricos 1.8 Conversión entre sistemas numéricos 1.9 Código de caracteres ASCII 1.10 Ejercicios

QUE ES LA INFORMÁTICA Existen propuestas muchas definiciones para Informática, cada una dada desde una perspectiva diferente. Si tenemos en cuenta únicamente el aspecto computacional podemos decir que es la disciplina encargada de estudiar los procesos algorítmicos que describen y transforman información: su teoría, análisis, diseño, eficiencia, implementación y aplicación. Un proceso algorítmico es la realización de una tarea a través de una serie de acciones, las cuales se realizan una después de otra, en estricto orden. Desde esta perspectiva la Informática se encarga de crear métodos para solucionar diversos problemas con ayuda del computador. Todos alguna vez, nos hemos preguntado, por ejemplo, ¿cómo es posible que un computador pueda realizar operaciones matemáticas?, ¿cómo se generan imágenes tan realistas que pueden engañar al ojo humano? ¿Cómo puede una máquina tomar decisiones durante la realización de un proceso? La realización de estas y muchas otras tareas que hoy pueden realizar los computadores son el resultado de muchos años de investigación en los cuales han intervenido expertos en muchas áreas del conocimiento humano, quienes se han encargado de analizar y diseñar mecanismos para lograr que estas máquinas puedan ejecutar ciertas tareas de una forma semejante a como lo hace un ser humano, e incluso más rápido. La Informática se encarga de estudiar los problemas y analizar las diversas soluciones hasta encontrar la más óptima, para de esta forma, después de programarla en un computador, convertirlo en un ayudante eficaz que le permita al ser humano realizar sus tareas con mayor rapidez y precisión. En este trabajo, de encontrar las soluciones más óptimas, la Informática ha creado componentes de hardware y software que buscan convertir al computador en una máquina capaz de solucionar cualquier tipo de problemas a los que se pueda enfrentar el ser humano en su diario vivir.

Para comprender un poco como hace un computador todas las tareas para las cuales ha sido diseñado, antes vamos a examinar algunos conceptos que se encuentran íntimamente relacionados con su funcionamiento. Es importante identificar el significado de algunos términos técnicos que son muy utilizados en la literatura informática, para de esta manera tener mayor familiaridad con esta tecnología. QUE ES LA ELECTRICIDAD El componente vital de todos los aparatos electrónicos es la electricidad, sin este elemento tal vez no hubiera sido posible todo el avance tecnológico que conocemos hoy en día. Los computadores son máquinas constituidas por componentes electrónicos, y como tal su funcionamiento depende directamente de la electricidad. En esta sección se hará una breve descripción del fenómeno físico de la electricidad, para de esta manera comprender los conceptos de carga eléctrica y corriente eléctrica, tan utilizados en computación. Los primeros descubrimientos de los cuales se tiene noticia en relación con los fenómenos eléctricos, fueron realizados por los griegos en la Antigüedad. Ellos observaron que al frotar un trozo de ámbar (un mineral amarillento que se obtiene de la fosilización de las resinas producidas por árboles de madera blanda) con una piel de animal, el primero adquiría la propiedad de atraer cuerpos livianos, como pequeñas semillas o pedazos de paja. En el siglo XVI y después de realizar cuidadosas observaciones, los investigadores se dieron cuenta que existían otras sustancias con un comportamiento similar al ámbar cuando se frotaban con algún

Generalidades

3

otro material. Como la designación griega que corresponde al ámbar es elecktron, se empezó a utilizar el término eléctrico para referirse a todo objeto que se comportaba como el ámbar, con lo cual surgieron las expresiones electricidad, electrizar y electrización. En la actualidad sabemos que todas las sustancias presentan un comportamiento similar al del ámbar; es decir, pueden electrizarse cuando se frotan con otra sustancia. Por ejemplo, una regla plástica se electriza cuando la frotamos con seda, un peine se electriza cuando se lo frota contra nuestro cabello y luego puede atraer un pequeño trozo de papel. Además, al realizar experimentos con varios cuerpos electrizados, se ha encontrado que pueden separarse en dos grupos, de tal manera que entre aquellos del mismo grupo se rechazan, pero atraen a los del otro grupo. Para identificar los grupos se dice que el uno tiene carga eléctrica positiva y el otro carga eléctrica negativa, sin que los términos positiva y negativa tengan algún significado especial, como indicar mayor potencia en uno u otro, o representen alguna característica particular de los cuerpos electrizados.

Carga positiva y carga negativa Según la moderna teoría atómica, todo cuerpo esta constituido, básicamente, por las partículas llamadas protones, neutrones y electrones. Los protones poseen carga eléctrica positiva, los neutrones no tienen carga eléctrica, y los electrones poseen carga negativa.

En un cuerpo neutro (sin carga eléctrica) el número de protones es igual al número de electrones. Cuerpo neutro

+

-

+

-

+

-

+

-

+

-

Cuando un cuerpo neutro pierde electrones, como puede observarse en el siguiente gráfico, se presenta un exceso de protones y son estos quienes imponen su carga. Por lo tanto, en esta situación se tendrá un cuerpo cargado positivamente.

4

Introducción a la Programación de Computadores

+

Objeto con carga positiva

+

-

-

+

+

+

En cambio si a un cuerpo neutro se le agregan electrones, este quedará con un exceso de carga negativa. En este caso se dice que el cuerpo está cargado negativamente.

-

Objeto con carga negativa

-

-

-

+

-

+

-

-

+

- - +

+ -

-

Debe entenderse bien que, la estructura molecular de un cuerpo no admite que los protones ni los neutrones puedan moverse dentro del átomo en la forma que si lo pueden hacer los electrones. Por lo tanto, como puede verse, los únicos causantes de la carga eléctrica en un material son los electrones. En definitiva, una carga eléctrica es un estado de la materia, producido por la deficiencia (carga positiva) o el exceso de electrones (carga negativa). Cuando se frota un cuerpo con otro material, lo que se está haciendo en realidad es quitar o agregar electrones, dependiendo del tipo de materiales que se utilicen. Como principio fundamental de las cargas eléctricas se tiene: -

-

las cargas de igual signo se rechazan

las cargas de signo contrario se atraen

+

+

-

-

+

-

Generalidades

5

Conductores y dieléctricos Cuando varios átomos se reúnen para formar un sólido, los electrones de las órbitas más lejanas no permanecen unidos a sus respectivos átomos y adquieren libertad de movimiento en el interior del sólido. Estas partículas se llaman electrones libres. Un conductor eléctrico es un material que posee gran cantidad de electrones libres, y en consecuencia, al moverse estos dentro del material, son capaces de transportar cargas eléctricas de un sitio a otro. Los materiales con mayor cantidad de electrones libres son los metales y por esta razón se consideran buenos conductores eléctricos. En cambio los aislantes o dieléctricos son materiales que no poseen gran cantidad de electrones libres, incluso pueden no llegar a tenerlos en absoluto, y por lo tanto no pueden transportar cargas eléctricas. Los plásticos y la madera cumplen con esta característica y por eso se consideran buenos aislantes de la electricidad.

Semiconductores Los semiconductores son un grupo específico de materiales que se comportan a veces como conductores y otras como aislantes, dependiendo de ciertas condiciones eléctricas. Toda la industria electrónica depende de estos materiales ya que muchos componentes electrónicos, y en especial los llamados circuitos integrados, basan su funcionamiento en poder alternar entre un estado de conductividad o un estado de aislamiento, algo que solo pueden hacer los semiconductores. El mejor elemento semiconductor más utilizado es el silicio, dadas sus propiedades y al hecho que es uno de los materiales más baratos que existen en la Tierra. El silicio es el material más abundante que se encuentra en nuestro planeta.

La corriente eléctrica Electrones

Las fuentes eléctricas, como las pilas, las baterías de los autos y los generadores de electricidad, tienen la capacidad de producir un campo eléctrico, que no es más qué un conjunto de fuerzas eléctricas que se pueden ejercer sobre cargas eléctricas externas. Cuando se coloca un cable

6

Introducción a la Programación de Computadores

metálico, conectando los polos de una fuente eléctrica, se abre un camino a través del cual pueden moverse los electrones libres que quedan atrapados bajo el influjo del campo eléctrico. El movimiento de electrones dentro de un conductor eléctrico produce un desplazamiento de cargas eléctricas, positivas y negativas, que constituyen lo que se denomina una corriente eléctrica. En la realidad sabemos que los únicos que pueden moverse son los electrones, y estos tienen carga negativa; pero convencionalmente también podemos considerar un movimiento de cargas positivas en sentido contrario al de los electrones. En el siguiente esquema se explica como sucede este fenómeno. Supongamos que tenemos un conductor eléctrico en el cual, en un instante de tiempo, las cargas están dispuestas como lo muestra el siguiente gráfico:

+

+

+

+

-

-

-

-

+

Región con carga positiva

En la parte derecha del conductor, observamos que existe una región donde únicamente existe la carga positiva de los protones. Pero, en el momento que el electrón, qué se encuentra viajando hacia la derecha, ocupa esa región se obtiene una situación como la siguiente:

+

+

+

-

-

-

+

+ -

Región con carga positiva

La región con carga positiva se ha desplazado hacia la izquierda a causa del movimiento del electrón. Si se continúa analizando el movimiento de los electrones, llegará un momento en que encontremos la carga eléctrica positiva ubicada en el lado opuesto al que se encontraba cuando inició este proceso.

Generalidades

+

+

+

+

+

-

-

-

-

7

Región con carga positiva

En consecuencia el movimiento de los electrones dentro de un conductor eléctrico, al mismo tiempo que provoca un movimiento de cargas negativas, también ocasiona un desplazamiento de cargas positivas, pero en sentido opuesto. Esta corriente de cargas positivas, dado que no es una corriente real, se denomina corriente convencional. En general, cuando se habla de corriente eléctrica se sobreentiende que se hace referencia a la corriente convencional, a no ser que se especifique lo contrario.

Corriente continúa (C.C.) y corriente alterna (C.A.) Una corriente eléctrica es continúa cuando dentro del conductor eléctrico los electrones (y por ende las cargas positivas) siempre se mueven en un único sentido. Un ejemplo de corriente continúa es la producida por una pila o también por una batería de auto.

Corriente continúa o directa

Una corriente es alterna cuando los electrones unas veces se desplazan en un sentido y otras veces en sentido contrario. También se dice que los electrones realizan un movimiento oscilatorio o vibratorio. El servicio eléctrico que suministran las empresas de distribución en ciudades y pueblos es de corriente alterna.

Corriente alterna o discontinua

Los computadores, al igual que la gran mayoría de aparatos electrónicos, para su funcionamiento requieren de corriente continúa, pero cuando estos se conectan a cualquier toma o contacto quedan alimentados por corriente alterna, por lo cual es necesario convertirla a continua para que sea útil. Esta tarea es realizada por una dispositivo electrónico denominado rectificador, el cual, para el caso de los computadores, se incluye en la fuente de poder.

8

Introducción a la Programación de Computadores

QUE ES UN COMPUTADOR Un computador es una máquina que procesa información, es decir, recibe información, la transforma y la presenta de nuevo en forma distinta. Pero, a diferencia de los seres humanos, no es capaz de suponer nada, ni resolver por si mismo cualquier dificultad que se le presente. Es una máquina que puede realizar una gran diversidad de tareas, pero con la condición de que antes debe ser programada por un ser humano, hasta en las cosas más elementales. El computador es capaz de almacenar y procesar con gran rapidez una gran cantidad de datos. Además, un computador tiene la capacidad de comunicarse con el exterior, recibiendo datos, ordenes y programas como entrada (por medio del teclado, del ratón, de un disquete, un disco óptico, etc.) y proporcionando resultados de distinto tipo como salida en el monitor, por la impresora, etc. Los computadores tienen la característica común de ser sistemas digitales. Quiere esto decir que lo que hacen básicamente es trabajar a gran velocidad con los datos traducidos a secuencias de unos y ceros, contando para ello con un elemento básico denominado transistor. Un transistor es una especie de interruptor que puede estar en posición encendido o apagado y es capaz de cambiar de estado muchos millones de veces por segundo. La tecnología moderna ha permitido miniaturizarlos hasta niveles microscópicos para, mediante su interconexión, formar complejos circuitos electrónicos llamados circuitos integrados. Internamente todo el trabajo que realiza un computador lo hace basándose en principios matemáticos y electrónicos, pero se puede programar para que realice cualquier tipo de tarea, inclusive aquellas que no tienen nada que ver con las matemáticas.

HISTORIA DEL COMPUTADOR Uno de los factores decisivos que permitieron la evolución del ser humano, separándolo de las bestias que le rodeaban, fue el uso e invención de herramientas. Primero debió utilizar objetos que encontraba en la naturaleza, como un pedazo de palo para cazar o una roca para romper un objeto duro, luego se dio cuenta que podía perfeccionar esos objetos para sacar el mayor provecho de ellos, y fue entonces cuando empezó a transformar los objetos para construir lanzas, hachas, ruedas, etc. Y todo esto con un sólo objetivo: ampliar las capacidades de sus órganos y hacer más fácil el desarrollo de algunas tareas. Cuando el ser humano desarrolla la noción matemática de contar, ocasionada tal vez por la necesidad de llevar un registro de sus pertenencias o información relacionada con las cosechas, de

Generalidades

9

igual manera se crea la necesidad de utilizar herramientas y métodos que le ayuden a su cerebro en la realización de esta actividad. El primer instrumento auxiliar fue la mano, luego se ingeniaron métodos que utilizaban objetos de la naturaleza para realizar algunas operaciones matemáticas sencillas como sumar y restar. Por ejemplo, los antiguos griegos para realizar operaciones matemáticas utilizaban piedrecillas, que en griego se llaman cálculos. De esta manera, la historia de la humanidad, y con ella la del computador, esta llena de situaciones que, unas veces por necesidad, otras por curiosidad, han obligado al ser humano a crear herramientas que tienen la finalidad de ser extensiones (o ayudantes) del cerebro para realizar, ante todo, cálculos matemáticos. A continuación se hace una descripción breve de los aspectos históricos que hoy se pueden considerar como antecesores de la máquina llamada computador. 4000-3000 a.C.

Invención del Abaco. Instrumento formado por un conjunto de cuerdas paralelas, cada una de las cuales sostiene varias esferas móviles, usadas para contar.

1617 D.C.

Jhon Napier (inventor de los logaritmos) desarrolla los Vástagos de Napier formados por un conjunto de piezas con números grabados en ellas, que podían ser usados para multiplicar, dividir y extraer raíces.

1642

Blaise Pascal, matemático francés, construye el primer calculador mecánico que consistía en un conjunto de ruedas, cada una de las cuales registraba un dígito decimal y al rotarse en diez pasos producía un paso de rotación en la siguiente rueda.

1662

William Oughtred inventa la regla de cálculo.

1671

Gotfried Wilheim Von Leibniz, matemático alemán mejora el diseño de Pascal.

1801

Joseph Marie Jackard, perfecciona la primera máquina que utiliza tarjetas perforadas; esta era un telar, que podía tejer automáticamente diseños complejos, de acuerdo con un conjunto de instrucciones codificadas en las tarjetas perforadas.

1822

Charles Babbage, (Padre de la Computación) considerado el más destacado precursor, construye un pequeño modelo operativo de un calculador llamado: “máquina de diferencias”, y se propone crear una máquina que poseería muchas de las características de los computadores modernos, pero por las limitaciones técnicas de la época no lo pudo realizar.

1829

Charles Xavier Thomas construye el primer calculador que ejecuta las cuatro operaciones aritméticas en forma exacta.

1872

Franck Stephen Baldwin inventa una calculadora con teclas basada en los principios de la máquina de Thomas.

1887

Herman Hollerith desarrolla un dispositivo para tabular datos codificados en tarjetas perforadas.

1925

Aparece el primer computador. El norteamericano Vannevar Bush y sus colaboradores construyen el primer computador analógico de gran escala.

1938

Jhon Atanasoft inventa el primer computador: el ABC. Fue el primero que utilizó el sistema binario. Su batería de lámparas electrónicas permitía resolver ecuaciones de 29 variables.

1938

Howard Aiken propone la construcción de un computador electromecánico, El Mark I, que fue terminado en 1944 y sirvió para crear tablas matemáticas mediante la ejecución de operaciones aritméticas.

1943-1946

Jhon Presper Ecker y Jhon Mauchly construyeron el primer computador completamente electrónico, ENIAC (Electronic Numerical Integrator And Calculator). La programación de

10 Introducción a la Programación de Computadores

sus acciones consistía en colocar interruptores en posición y realizar ciertas conexiones. 1944

Jhon Von Neumann desarrolla el concepto de los programas almacenados, es decir, un conjunto de instrucciones guardadas en una unidad de almacenamiento que luego son ejecutadas en forma secuencial.

1947

En este año hay otro significativo avance con el EDVAC (Electronic Discrete Variable Computer) desarrollado con la idea de programa almacenado, pero sólo en teoría.

1949

Maurice Wilkes, en la Universidad de Cambridge Inglaterra construye el EDSAC (Electronic Delay Estorage Automatic Calculator) que es el primer computador que se construye con la idea de programa almacenado.

1950

Aparece el SEAC (Standar Eastern Automatic Computer) primer computador con la idea de programa almacenado construido en Estados Unidos.

1951

PRIMERA GENERACION DE LOS COMPUTADORES. La Compañía Sperry Rand Corporation que construye el UNIVAC I, primer computador comercialmente disponible; los componentes electrónicos utilizados fueron los denominados tubos al vacío. Su velocidad era de 1000 operaciones por segundo. Entre 1951 y 1958 aparecen en el mercado diversos computadores, construidos con tubos al vació.

1960

SEGUNDA GENERACION DE COMPUTADORES. Las Compañías NCR y RCA introducen los primeros computadores construidos completamente a base de componentes denominados TRANSITORES en sustitución de los Tubos al Vacío que consumían mas potencia, eran de mayor tamaño y más lentos en su operación. Estos computadores resultan diez veces más rápidos que los predecesores. Como elementos de soporte de las memorias además de las cintas perforadas, se introdujeron los discos y las cintas magnéticas. Como lenguaje de programación, se comenzó a emplear un Fortran de tipo elemental.

1965

TERCERA GENERACION DE LOS COMPUTADORES. La Compañía IBM produce la serie 360, construida con los llamados CIRCUITOS INTEGRADOS DE PEQUEÑA ESCALA, que sustituyen cada uno de ellos a varios transistores, ocupando menos espacio, reduciendo el costo y trabajando a mucha más velocidad. (Realizan un millón de operaciones por segundo). En esta generación se tienen capacidades de memoria superiores a los 0.5 Mb, la velocidad de lectura/escritura de datos aumenta mucho. El tiempo que dura un ciclo de una instrucción se mide en nanosegundos (0,000000001 segundos). Dada la potencia y la velocidad de los computadores de esta generación, se procesan varios programas simultáneamente, dando lugar a la multitarea. Así mismo, el trabajo del computador es en tiempo real, que consiste en procesar la información y obtener los resultados en el mismo instante en que se van produciendo los primeros. Se utilizan también lenguajes de programación como el Fortran, el Cobol, y los sistemas operativos.

1970

LA CUARTA GENERACION DE LOS COMPUTADORES. La Compañía INTEL introduce los primeros microprocesadores, que son circuitos integrados en una sola pastilla de silicio, que contienen los componentes que realizan buena parte de las funciones de un computador sencillo. En esta generación se emplea con profusión las memorias integradas de semiconductores, de capacidades de almacenamiento cada vez mayores, al mismo tiempo que aparecen nuevos lenguajes conversacionales, como Basic, Algol, P1/1, Pascal, etc.

PARTES DEL COMPUTADOR El computador esta formado por dos componentes básicos: hardware y software. El hardware es la máquina, formada por todos los componentes sólidos, especialmente de características electrónicas. En cambio el software es el conjunto de programas o instrucciones que hacen que la máquina funcione, o mejor, que pueda cumplir con lo que los seres humanos desean que haga.

Generalidades

11

HARDWARE Partes físicas

Entrada

Salida

DATOS

INFORMACION

SOFTWARE Ordenes

El hardware de un computador en general, o un PC en particular, constan de distintas partes que trabajan conjunta y coordinadamente. A continuación se hace una breve descripción de las partes fundamentales que conforman un computador. Procesador o CPU (Central Processing Unit, unidad central de proceso). Es el corazón del computador, que se encarga de realizar las operaciones aritméticas y lógicas, así como de coordinar el funcionamiento de todos los demás componentes. Memoria permanente o memoria ROM (Read Only Memory, memoria de sólo lectura). Esta constituida por chips que permiten almacenar programas en los cuales se encuentran las instrucciones necesarias para que el computador pueda funcionar. Los datos almacenados en estos chips son grabados en el momento de su construcción o ensamblaje del computador y no pueden ser cambiados. Un ejemplo de memoria ROM son las instrucciones que se ejecutan cuando el computador arranca. Memoria principal o memoria RAM (Random Acces Memory, memoria de acceso aleatorio). Es el componente del computador donde se almacenan los datos y los programas que el procesador está utilizando. Se llama también memoria volátil, por que su contenido se borra cuando se apaga el computador. Disco duro. Es uno de los elementos esenciales del computador. El disco duro es capaz de mantener la información de modo permanente, aunque se apague el computador. El computador no trabaja directamente con los datos del disco duro, sino que antes tiene que transferirlo a la memoria principal. Pantalla o monitor. Es el elemento visual del sistema. A través de él el computador establece una comunicación con el usuario, pidiendo datos y mostrando sus resultados. Teclado. Es el elemento más utilizado para introducir información alfanumérica en el computador. Ratón. Es el dispositivo más utilizado para introducir información no alfanumérica, como por ejemplo, seleccionar una de entre varias opciones en un menú o caja de dialogo. Su principal utilidad consiste en mover con facilidad el cursor por la pantalla.

12 Introducción a la Programación de Computadores

PROCESAMIENTO DE DATOS Datos e información Para comenzar, es importante distinguir entre los conceptos de dato e información, desde la perspectiva de la informática. Un dato es un simple valor (palabra, número, símbolo, etc.) cuyo significado no esta bien definido, y que por lo general es ingresado al computador para ser procesado. En cambio la información es un conjunto de datos relacionados que al ser procesados por el computador tienen un significado, de acuerdo al interés o necesidad de la persona que los requiera. Por ejemplo, podemos tener los datos: María, Juan, 20, 16, $200.000, los cuales no suministran un significado por que son simples valores sin sentido aparente. Pero, al decir que son los nombres de dos trabajadores de una empresa, con sus respectivos días laborados en un mes y el salario básico, se establece una relación entre ellos. Si además, después de ser procesados por el computador, podemos conocer el salario devengado por cada uno de los trabajadores, así como el total que se debe cancelar, ya tenemos una información. NOMINA Maria, Juan, 20, 16,

PROCESAMIENTO

$200000

EMPLEADO

# DIAS

DEVENGADO

María Juan

20 16

200.000 160.000

TOTAL

DATOS

360.000

INFORMACION

Como procesa el computador los datos Una de las características que más impresionan a la mayoría de personas, y que hacen que el computador sea diferente al resto de máquinas inventadas, se encuentra en el hecho de que puede establecer una comunicación entre él y el ser humano a través de instrucciones escritas, e incluso por medio de la voz humana. Mientras la mayoría de máquinas sólo ejecutan un número limitado de órdenes, el computador puede ser programado para realizar una cantidad de funciones que tal vez ni siquiera sus creadores se imaginaron. Pero, aunque a veces parece que el computador nos entendiera, en realidad no puede entender nada, pues todo lo que puede hacer es reconocer dos estados físicos bien determinados producidos por el efecto de corrientes eléctricas. Esencialmente, para un computador todo se representa en los circuitos que lo componen mediante los estados de encendido y apagado. Para un computador, todo es un número. Números son los números, las letras, los signos de puntuación, los símbolos e incluso los gráficos. También, las instrucciones que recibe el computador son números. Cuando vemos en pantalla una palabra o frase, lo que en realidad se está desplegando es una forma de representar números. Así por ejemplo, la oración, Los gatos son carnívoros

para el computador no es más que una secuencia de números como la siguiente: 76 111 115 32 103 97 116 111 115 32 115 111 110 32 99 97 114 110 237 118 111 114 111 115

Generalidades

13

Pero, esto sólo es una forma de hacer que el lector comprenda como funciona el computador por dentro, ya que la representación real se hace mediante la combinación de dos señales eléctricas: encendido (1) y apagado (0). Esto significa que todos los datos dentro de un computador se representan mediante señales eléctricas, las cuales a su vez pueden interpretarse como ceros y unos. Matemáticamente, a la representación de números utilizando los símbolos 1 y 0 se le denomina sistema binario. En consecuencia, si se convierten los anteriores números a este sistema, para el computador la frase, Los gatos son carnívoros, es una secuencia similar a la siguiente: 01001100 01110100 01101110 11101101

01101111 01101111 00100000 01110110

01110011 01110011 01100011 01101111

00100000 00100000 01100001 01110010

01100111 01110011 01110010 01101111

01100001 01101111 01101110 01110011

Donde cada grupo de ocho dígitos representa el código numérico de un carácter.

Bits El elemento básico de los componentes electrónicos que se encargan de procesar los datos en un computador es un dispositivo llamado transistor. El transistor es un elemento electrónico construido básicamente de materiales semiconductores y se comporta como una especie de interruptor que se encarga de permitir o impedir el paso de una corriente eléctrica.

Cuando el transistor deja pasar una corriente eléctrica se dice que existe un estado encendido y cuando impide el paso de la corriente se dice que existe un estado apagado. A su vez, el estado encendido se simboliza con el dígito 1 y el estado apagado con el dígito 0. Se llama bit, una abreviatura de binary digit (dígito binario), a los estados, 1 y 0, que puede tener un transistor en un momento dado. Estado

Bit

Encendido

1

Apagado

0

14 Introducción a la Programación de Computadores

Bytes Un byte (octeto) es un grupo conformado por ocho bits. Es decir que, un byte es una combinación de ocho señales eléctricas equivalentes a los estados encendido y apagado. En general, todos los datos que procesa el computador se representan mediante el uso de uno o más bytes. Las letras del alfabeto se representan mediante un byte (8 bits), esto significa que cualquier letra se puede representar con una combinación de ocho señales eléctricas de encendido o apagado. Por ejemplo, la letra R se representa mediante el byte 01010010, por lo tanto si en una celda de memoria el computador almacena este dato, los bits deben verse como en el siguiente esquema:

0

1

0

1

0

0

1

0

Muchos datos, especialmente los valores numéricos, se representan con más de un byte. Por ejemplo, algunos números enteros se representan usando 16 bits (2 bytes), mientras que los reales de alta precisión usan 64 bits (4 bytes).

SISTEMAS NUMERICOS Como se dijo anteriormente, para un computador todo es un número. Con la diferencia que los seres humanos representamos los números de una forma y los computadores lo hacen de otra. Enseguida se describirán tres sistemas numéricos básicos, que por su uso entre los seres humanos y los computadores cobran especial interés.

Sistema decimal La mayoría de culturas humanas usamos el sistema decimal o base 10 para representar cualquier valor numérico. En este sistema para representar cualquier valor numérico se dispone de un total de diez símbolos,

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 los cuales reciben el nombre de dígitos decimales. En el sistema decimal, los valores del cero al nueve, se representan utilizando directamente los símbolos establecidos. Luego, y dado que para el valor numérico diez, y todos los que le siguen, ya no existe un símbolo definido, se inicia una combinación del símbolo 1 con la misma secuencia utilizada anteriormente. Así: Cero

Uno

0 Diez

Dos

1 Once

10

Tres

2 Doce

11

12

Cuatro

3 Trece

13

4 Catorce

14

Cinco

Seis

5 Quince

15

Siete

6 Dieciséis

16

Ocho

7 Diecisiete

17

8 Dieciocho

18

Nueve

9 Diecinueve

19

Una vez terminada la combinación de dos dígitos con el símbolo 1, se inicia una combinación con el símbolo 2, para representar los números que siguen a diecinueve. Cero

Uno

0

Dos

1

Tres

2

Cuatro

3

4

Cinco

5

Seis

Siete

6

Ocho

7

8

Nueve

9

Generalidades

Diez

Once

10 Veinte

11 Veintiuno

20

21

Doce

12 Veintidós

22

Trece

13 Veintitrés

23

Catorce

Quince

Dieciséis

14

15

16

Veinticuatro

Veinticinco

24

25

Veintiséis

26

Diecisiete

17 Veintisiete

27

Dieciocho

18 Veintiocho

28

15

Diecinueve

19 Veintinueve

29

La representación de cualquier número en el sistema decimal se realiza aplicando esta lógica, aunque en la mayoría de los casos, y debido a que estamos muy habituados a manejar este sistema, ni siquiera nos percatamos de ello. Este concepto de usar los símbolos disponibles, en orden, hasta que se hayan usado todos y luego agregar otro dígito, es la base de todos los sistemas de numeración. La única diferencia es la cantidad de símbolos disponibles.

Sistema binario El sistema binario, también llamado base 2, representa cualquier valor numérico mediante la combinación de tan sólo dos símbolos.

0, 1 Siguiendo el mismo concepto utilizado en el sistema decimal, observamos que los números cero y uno se pueden representar con los símbolos ya establecidos. De ahí en adelante es necesario realizar combinaciones de símbolos para representar cualquier número. En la siguiente tabla se muestra la representación de los valores del cero al nueve. Cero

Uno

0

1

Dos

Tres

10

11

Cuatro

Cinco

100

101

Seis

Siete

110

111

Ocho

Nueve

1000

1001

Este sistema utiliza muchas cifras para escribir un número, por lo cual es demasiado pesado para el ser humano pero ideal para un computador con su cerebro electrónico hecho de transistores (interruptores) que sólo pueden representar dos estados, encendido o apagado.

Sistema hexadecimal El sistema hexadecimal, también llamado base 16 o hex, utiliza 16 símbolos para representar cualquier número. Como sólo existen diez símbolos numéricos, este sistema utiliza letras en lugar de números para representar valores mayores que nueve.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F La siguiente tabla muestra la equivalencia entre los dígitos hexadecimales, los números decimales y los binarios.

16 Introducción a la Programación de Computadores

Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

El sistema hexadecimal se creó para facilitar la representación de valores en el computador, ya que el sistema binario utiliza demasiados símbolos. En el sistema binario un byte se representa mediante 8 dígitos (bits), mientras que en este sistema sólo se utilizan 2 dígitos hexadecimales. Por ejemplo, el byte 10011011 se puede considerar formado por dos grupos de cuatros bits, 1001 1011 Ahora, viendo la anterior tabla tenemos lo siguiente: 1001 = 9 (en hexadecimal) 1011 = B (en hexadecimal) Por lo tanto el byte 10011011 en hexadecimal se puede representar como 9B. En Matemáticas para indicar que un número está escrito en una base diferente a 10, se utiliza un subíndice después del número, indicando la base. Por ejemplo para indicar que 10011011 es un valor representado en binario o base 2 se escribe 100110112 Para indicar que 75 (siete cinco) es un número en hexadecimal se escribe 7516 Otro método, utilizado ante todo en Informática, para indicar que un número esta representado con dígitos hexadecimales es poner una “H” o “h” después del último dígito. La “H” no es parte del número (los dígitos hexadecimales llegan hasta la F); sólo muestra que el número esta representado por dígitos hexadecimales. Por ejemplo, 7516 se puede escribir como, 75H

Generalidades

17

CONVERSION ENTRE SISTEMAS NUMERICOS En muchas situaciones, para comprender bien el valor que representa una combinación de símbolos, puede ser importante transformarlo a otro sistema numérico. Para la mayoría de las personas la comprensión total de un valor numérico se facilita cuando este se encuentra representado en el sistema decimal, pero desde el punto de vista del computador su manejo y correcta interpretación se obtiene cuando el valor está representado en el sistema binario.

Transformación de decimal a binario Para convertir un valor numérico, representado en decimal, a binario (base 2) se aplican divisiones enteras sucesivas por 2, hasta que el cociente sea igual a cero. El binario se forma con los residuos, tomados del último al primero. Por ejemplo, vamos a transformar el decimal 18 a binario. 18 0

2 9 1

2 4 0

2 2 0

2 1 1

2 0

En consecuencia, se tiene que 18 = 100102.

Transformación de binario a decimal Matemáticamente, en el sistema decimal, cada cifra que conforma un número, dependiendo del lugar que ocupe en él, equivale a una potencia del sistema en el cual se a hecho la representación numérica. Siguiendo la anterior propiedad, a cada bit que conforma un binario se le puede hacer coincidir una potencia de 2 cuyo exponente depende del lugar que ocupa el bit dentro del número, empezando en la cifra ubicada más hacia la izquierda. Por ejemplo, dado el binario, 1101001 las potencias que le corresponden a cada cifra son: 1

1

0

1

0

0

1

6

5

4

3

2

1

2

2

2

2

2

2

2

0

El número decimal equivalente al binario, se obtiene multiplicando cada potencia por la cifra a la cual representa, y sumando los productos obtenidos. Así: x

= =

1

1

0

1

0

0

1

18 Introducción a la Programación de Computadores

2 64

6

2 32

5

2 16

4

2 8

3

2 4

2

2 2

1

2 1

0

64

32

0

8

0

0

1

105

Por lo tanto, 11010012 = 105

Transformación de decimal a hexadecimal Para transformar un valor decimal a hexadecimal (base 16) se aplica el mismo método que se aplico para convertir a binario, con la diferencia que aquí se aplican divisiones enteras sucesivas por 16. La representación hexadecimal se forma con los residuos, tomados del último al primero. Adicionalmente, y si es necesario, se convierten, aquellos residuos mayores que 10, a dígitos hexadecimales. Por ejemplo, para transformar el decimal 108 a hexadecimal se procede de la siguiente manera: 108 12

16 6 6

16 0

El número hexadecimal se compone de los residuos 6 y 12, pero este último debe escribirse como dígito hexadecimal, en este caso C. Por lo tanto se tiene que, 108 = 6Ch

Transformación de hexadecimal a decimal La transformación de hexadecimal a decimal se realiza asignando a cada cifra una potencia de 16 y aplicando la multiplicación entre ellas. Para obtener la representación en decimal se suman los productos obtenidos. En el caso de los dígitos hexadecimales representados por letras se trabaja con su equivalente en decimal. Por ejemplo, para transformar a decimal el número 31B5h, primero se asignan a sus cifras su correspondiente potencia de 16, empezando por la última cifra de la derecha. 3 3 16

1 2 16

B 1 16

5 0 16

Ahora, se expresa las letras con sus equivalentes decimales y se multiplica por las potencias de 16. Así: x

= =

3 3 16 4096

1 2 16 256

11 1 16 16

5 0 16 1

Generalidades

12288

256

176

19

5

12725

En consecuencia, 31B5h = 12725

Transformación de binario a hexadecimal Para transformar un valor representado en binario al sistema hexadecimal, de ser necesario, se completa con ceros la cantidad de bits de tal manera que esta sea igual a un múltiplo de 4. Luego se forman grupos de cuatro bits y a cada grupo se le asigna su equivalente dígito hexadecimal. Así, por ejemplo, para transformar el binario 1011102, dado que este tiene seis bits, se agregan dos bits a la izquierda, para obtener un binario de ocho bits. 0010 1110 Ahora, a cada grupo de cuatro bits se le asigna su correspondiente cifra hexadecimal. 0010

1110

2

E

Por lo tanto, 001011102 = 2Eh Para realizar la transformación de hexadecimal a binario se aplica el proceso contrario. Cada cifra hexadecimal se reemplaza con su equivalente en binario.

CODIGO DE CARACTERES ASCII El código ASCII es una solución dada por el American National Standards Institute (ANSI) para representar símbolos (letras, números, signos de puntuación, etc) en el computador mediante la utilización de bits. Inicialmente el código ASCII (Amercian Standard Code for Information Interchange, código americano estándar para intercambio de información), era un código de ocho bits, pero el octavo tenía un propósito especial y se llamaba bit de paridad.

0 Bit de paridad

1

0

1

0

0

1

0

Código del símbolo

De tal manea que, en realidad, el ASCII original era un código de siete bits que definían 128 (resultado de la potencia 27) símbolos.

20 Introducción a la Programación de Computadores

Más tarde, los bits de paridad dejaron de tener importancia y se desarrolló una versión mejorada de ASCII que hacía uso del octavo bit, permitiendo que ASCII describiera 256 (28) símbolos. Cuando se hizo esto, no se cambió ninguno de los códigos de los 128 símbolos originales, lo que permitió que los programas ya existentes siguieran funcionando sin ninguna dificultad en el nuevo sistema de códigos. En la siguiente tabla se muestran algunos símbolos definidos en el código ASCII, con sus correspondientes bits y su equivalente en decimal y hexadecimal. Símbolo ½ ¼ @ < = A B C D a b c d ü â

Binario 10101011 10101100 01000000 00111100 00111101 01000001 01000010 01000011 01000100 01100001 01100010 01100011 01100100 10000001 10000011

Decimal 171 172 064 060 061 065 066 067 068 097 098 099 100 129 131

Hexadecimal AB AC 40 3C 3D 41 42 43 44 61 62 63 64 81 83

Actualmente, se ha desarrollado un nuevo estándar para la representación de datos, llamado UNICODE, el cual proporciona 16 bits para representar símbolos. Con este sistema se pueden representar 65536 (216) símbolos diferentes, suficientes para incluir cualquier carácter y símbolo de los diferentes lenguajes y culturas del mundo.

2 PROGRAMACION DE COMPUTADORES

Contenido 2.1 Que es programar 2.2 Problemas, algoritmos y programas 2.3 Lenguajes de programación 2.4 Compiladores e interpretes 2.5 Herramientas de programación 2.6 LENGUAJE BASIC Instrucción Print Instrucción Input

22 Introducción a la Programación de Computadores

QUE ES PROGRAMAR Programar un computador es un proceso que consiste en indicarle a la máquina lo que queremos que haga. Pero, para cumplir con este objetivo, es necesario establecer un medio de comunicación entre el hombre y la máquina, para de esta forma poder darle, a esta última, las instrucciones necesarias que le permitan hacer bien su trabajo. Aunque en la actualidad se han desarrollado medios para instruir al computador por medio de la voz, el medio de comunicación más efectivo se establece a través de instrucciones escritas. Como resultado de programar un computador, por lo general se obtiene un programa que puede realizar infinidad de veces la tarea programada. Pero, la necesidad de pedirle al computador que nos ayude a realizar una determinada tarea esta dada por que existen uno o varios problemas que deseamos que este nos ayude a resolver. No olvidemos que una de las características fundamentales del computador consiste en ser un ayudante del cerebro, capaz de realizar cálculos a gran velocidad.

PROBLEMAS, ALGORITMOS Y PROGRAMAS El primer paso para programar un computador consiste en determinar claramente el problema que se va a resolver. Un problema es un asunto o un conjunto de cuestiones que se plantean para ser resueltas y su naturaleza varía de acuerdo con el ámbito o con el contexto donde están planteados; así existen problemas matemáticos, químicos, filosóficos, físicos, etc. Aquí solo consideraremos aquellos problemas cuya solución se pueda calcular utilizando una serie de pasos introducidos en un computador. Una vez comprendido el problema, puede buscarse una solución en forma de algoritmo. Un algoritmo es un conjunto finito de pasos fijados en un cierto orden que, para unas condiciones iniciales, permiten resolver el problema en un tiempo corto. Dada la solución del problema, en forma de algoritmo, viene la etapa final, que consiste en generar un programa de computador. Un programa no es más que un conjunto de ordenes o comandos suministrados al computador para que este los ejecute y realice las tareas necesarias para resolver el problema en estudio. Esta etapa puede ser la más sencilla de todas, siempre y cuando se haya realizado un buen análisis del problema y se haya construido una solución apropiada y confiable.

Ejemplo: Problema: Sumar dos números cualesquiera Antes de proponer una solución es importante tener en cuenta los siguientes aspectos: -

-

Aunque este resulta ser un problema demasiado elemental para nuestro cerebro, no olvidemos que nuestro trabajo consiste en enseñarle a una máquina a solucionar este tipo de problemas. No se trata de sumar dos números en particular, como por ejemplo 2 y 7, sino más bien de establecer un método que nos permita sumar cualquier pareja de números, además de los anteriores. En últimas lo que se quiere es un programa de computador que nos pida dos números e inmediatamente nos muestre las suma de ellos. La importancia de los computadores radica en que podemos establecer un método para resolver todos aquellos problemas que cumplan unas ciertas condiciones.

Programación de computadores 23

Solución algorítmica: Dado que se trata de decirle a nuestro computador lo que debe hacer para sumar dos números, es importante detenernos a reflexionar un poco sobre los pasos que seguiría nuestro cerebro para resolver este problema en particular. Después de todo no olvidemos que el computador, como herramienta de trabajo, no es más que una extensión de nuestro cerebro. Imaginemos que le pedimos a una persona que sume dos números. Como es apenas obvio lo primero que esa persona nos va a pedir es el valor de los números; luego recordará y aplicará algún método o fórmula matemática para realizar la operación solicitada, y al final nos informará el resultado obtenido. Con base en lo anterior podemos concluir que los pasos necesarios para realizar la suma de dos números son los siguientes: -

Conocer los números que se van a sumar Aplicar un método o fórmula matemática Mostrar el resultado obtenido

A este conjunto de pasos que permiten resolver el problema, es a lo que se le llama un algoritmo. Más, sin embargo, no es la única solución que se puede establecer ya que esto depende de la creatividad del programador y en gran medida de los medios informáticos que se vayan a utilizar en la programación. Programación: La programación (también llamada codificación) de la solución consiste en expresar los pasos del anterior algoritmo en ordenes que el computador pueda entender, y para ello es necesario hablarle en su propio idioma. En vista que el computador solo entiende ordenes expresadas en ceros y unos (bits), deberíamos expresar nuestro algoritmo de esta forma para que el computador nos entendiera, sin embargo esto resulta demasiado complejo y difícil de realizar. Para resolver esta dificultad se han creado medios que nos permiten expresar las ordenes utilizando términos o palabras sencillas que posteriormente son traducidos a los conjuntos de bits que entiende el computador.

LENGUAJES DE PROGRAMACIÓN El computador solo entiende códigos binarios, es decir, sucesiones de unos y ceros del tipo 11101010 00101001, llamado lenguaje máquina. Por esto podemos decir que este es el único y verdadero lenguaje de computador, pero, para la mayoría de gente el lenguaje de máquina es incomprensible por completo. Incluso procedimientos muy cortos y simples se pueden transformar en cientos de páginas de números que representan los comandos y datos con que trabaja directamente la CPU. Los programadores necesitan un intermediario entre ellos mismos y la máquina, el cual se encargue de traducir las instrucciones que ellos pueden leer, escribir y entender más fácilmente, utilizando palabras conocidas por los seres humanos. En definitiva un lenguaje de programación no es más que un conjunto de palabras, llamadas técnicamente comandos, que permiten establecer una comunicación entre el ser humano y el computador. Aunque existen muchos lenguajes de programación, en realidad todos dicen lo mismo, pero de modo diferente. Así, por ejemplo, para pedir al usuario la entrada de un número entero para asignarlo a la variable A, se realiza de la siguiente forma en los diferentes lenguajes de programación:

24 Introducción a la Programación de Computadores

Lenguaje

Sentencia de captura

FORTRAN PASCAL C C++ BASIC

READ(*, 200) A READ(A) scanf(“%d”, &A) cin >> A Input A

Algunos lenguajes le permiten al programador acercarse más a los detalles del lenguaje máquina, haciendo que éste pueda manipular directamente la mayoría de funciones del hardware; pero, otros lenguajes, lo alejan, haciéndole más fácil la tarea de programación y evitando que el programador tenga que preocuparse por detalles inherentes a la máquina.

LENGUAJE ENSAMBLADOR Para facilitar la tarea de programación, en principio, se tuvo que escribir en lenguaje máquina un programa traductor que permitiera escribir instrucciones, utilizando palabras entendibles por los seres humanos. El programa que presentaron los científicos en su momento se llamó ensamblador, ya que toma instrucciones, fáciles de entender por los programadores, y las ensambla en lenguaje máquina. Para que el programa ensamblador pueda cumplir con su tarea de traducir las instrucciones a código binario, para se leído por el computador, y además serle útil a cualquier programador, es necesario que las instrucciones que lo componen se ajusten a reglas estrictas de gramática. Al conjunto de esas instrucciones y reglas, es a lo que se le llama Lenguaje Ensamblador. En comparación con los lenguajes actuales, el lenguaje ensamblador es considerado un lenguaje de bajo nivel, ya que sus comandos corresponden directamente uno a uno con el conjunto de instrucciones de una CPU. De hecho, no existe un único lenguaje ensamblador. Cada tipo de CPU posee su propio lenguaje ensamblador.

LENGUAJES DE ALTO NIVEL Los lenguajes de alto nivel se apartan aún más de lo que el lenguaje ensamblador se aparta del código de máquina. Estos lenguajes usan palabras y frases más fáciles de entender por el ser humano. Entre los lenguajes de alto nivel más utilizados en la actualidad están los siguientes:

FORTRAN Desarrollado por John Backus y un equipo de programadores en IBM, hacia el año 1957. FORTRAN quiere decir FORmula TRANslator (traductor de fórmulas), fue uno de los primeros lenguajes de alto nivel y se diseño específicamente para programas matemáticos y de ingeniería. A la versión actual, que ha sufrido muchas mejoras con respecto a la primera, se le suele denominar FORTRAN-90.

BASIC

Programación de computadores 25

El lenguaje BASIC comenzó siendo casi por completo una herramienta para enseñar programación a los estudiantes. BASIC, que significa Beginners All-Purpose Symbolic Instruction Code (código de instrucción simbólica para todo propósito, dirigido a principiantes), fue desarrollado por John Kemeny y Thomas Kurtz en 1964. BASIC es un lenguaje sencillo para que los principiantes aprendan. Dada la simplicidad de BASIC, se hizo muy popular, y por esta razón se incluyó en la mayoría de computadores personales compatibles con IBM. Este aspecto hizo que se convirtiera en uno de los lenguajes más ampliamente usados entre los programadores aficionados de todo el mundo. La versión más moderna de BASIC, es la desarrollada por la empresa norteamericana de software Microsoft, denominada Visual Basic. Pero esta versión, aunque se originó a partir de BASIC, ha introducido elementos que la hacen radicalmente diferente, por lo cual muchos programadores consideran que no corresponde a un BASIC moderno.

PASCAL En 1971, un científico suizo de computación llamado Niklaus Wirth introdujo PASCAL. Nombrado así en honor al inventor francés del siglo XVII Blaise Pascal, quien inventó la primera máquina que se puede considerar como la precursora del computador, la pascalina. La característica principal de PASCAL, es que permite que la programación se haga en bloques o procedimientos con los cuales se va construyendo el programa total. Esto hace que para el programador sea fácil de revisar y localizar errores, ya que no es necesario revisar todo el texto programado. Aunque, últimamente, PASCAL ha sido dotado de las más modernas tecnologías sobre programación, como es la programación orientada a objetos, no goza de gran aceptación entre los programadores ya que su filosofía como lenguaje de programación educativo lo hace demasiado tedioso para manejar.

C C fue desarrollado a principios de la década de los 70 en los laboratorios Bell por Brian Kernighan y Dennis Ritchie para ser utilizado en el desarrollo del sistema operativo UNIX. Los programas escritos en C se caracterizan por ejecutarse más rápido que los desarrollados en otros lenguajes. C es además un leguaje muy poderoso, pues con él el computador puede hacer casi todo lo que le es permitido realizar. Debido a esta libertad de programación, C se a vuelto en el lenguaje más ampliamente utilizado entre los desarrolladores profesionales de software comercial. Pero todo esto tiene un precio muy alto, C es difícil de aprender.

C++ C++ (que se pronuncia ce-plus-plus) es una versión mejorada de C y fue desarrollado por Bjarne Stroustrup de los laboratorio Bell a principios de la década de los 80. C++ introduce al lenguaje C el concepto de programación orientada a objetos, lo cual obliga a los programadores a plantear las soluciones de una forma diferente a como lo hacen otros lenguajes, haciendo que la tarea de programar se vuelva en cierto modo más fácil. Pero, de todas maneras C++ es aun más difícil de aprender, ya que primero se debe aprender C y luego los conceptos de programación orientada a objetos.

26 Introducción a la Programación de Computadores

JAVA Mucha gente cree que el próximo campo importante en el que los microprocesadores tendrán un impacto profundo es en los dispositivos electrónicos inteligentes para uso domestico. Al reconocer esto la empresa norteamericana Sun Microsystems patrocinó, en 1991, un proyecto de investigación para desarrollar un lenguaje basado en C y C++ al que lo llamaron Java (una variedad de café). Su creador es James Gosling. En la actualidad Java se utiliza para desarrollar paginas Web con contenido dinámico e interactivo, pero además se utiliza para implementar software para dispositivos que se comunican a través de una red, como teléfonos celulares, localizadores y otros más. Ya en la actualidad muchos dispositivos como televisores, videograbadoras y equipos de sonido han sido dotados de tecnología Java para permitirles conectarse entre sí.

COMPILADORES E INTERPRETES Un compilador es un programa de computador que se encarga de traducir las instrucciones escritas por el programador a instrucciones en código binario, para ser leídas por la CPU del computador. '------------------'SUMA DE DOS NUMEROS '------------------Input "N1 = ", N1 Input "N2 = ", N2 S = N1 + N2 Print "Suma = " + S

ARCHIVO FUENTE Instrucciones escritas en un lenguaje de programación

COMPILADOR

1000 1001 1111 1000 1000 1001 1111 1111 0111 1010 0111

1010 0101 0101 1010 1010 0101 1010 1111 1000 1111 1000

1010 0100 0100 1010 1010 0100 1010 0101 1010 0101 1010

0001 0011 0011 0001 0001 0011 0001 0100 1010 0100 1010

1010 0101 0111 1010 1010 0101 1010 0011 0001 0011 0001

EJECUTABLE Archivo con las instrucciones traducidas a lenguaje máquina

Los compiladores se encargan de traducir todas las instrucciones a lenguaje máquina y almacenar su resultado en un archivo. Este archivo, que se denomina ejecutable, si posteriormente se carga al procesador pone en funcionamiento el programa creado. Los interpretes, aunque realizan un trabajo similar a los compiladores, se diferencian de los anteriores en que estos son programas que van traduciendo las instrucciones y al mismo tiempo las van ejecutando, sin necesidad de almacenar la traducción en un archivo. Esto le permite a los programadores detectar más fácilmente los errores que se puedan producir durante la programación, pero los programas generados de esta forma son más lentos que los compilados.

Programación de computadores 27

‘--------------‘SUMA DE NUMEROS ‘--------------Input “N1 = ”, N1 Input “N2 = ”, N2 S = N1 + N2 Print “Suma = ” + S

ARCHIVO FUENTE Instrucciones escritas en un lenguaje de programación

INTERPRETE

PROCESADOR Ejecuta las instrucciones traducidas que vienen del interprete

HERRAMIENTAS DE PROGRAMACIÓN En el mercado existe diversidad de herramientas para programar en cualquiera de los lenguajes antes descritos, y otros más. De igual manera en Internet podemos encontrar compiladores e interpretes de distribución libre, cuya calidad no tiene en nada que envidiar a los primeros. Para el desarrollo de las prácticas contenidas en esta obra vamos a utilizar el lenguaje BASIC, por tratarse de un lenguaje sencillo y apropiado para el aprendizaje. En las primeras prácticas, únicamente se pondrá a prueba los algoritmos que se vayan elaborando para resolver los diferentes problemas planteados, determinando su comportamiento y la forma como procesan los datos, sin necesidad de tener que desarrollar aplicaciones de software completas. Para ello se utilizará un interprete de BASIC, denominado SmallBASIC. Una vez se hayan estudiado los principales elementos de programación, y se conozca plenamente su funcionamiento, se pasará a diseñar y programar aplicaciones más completas y estructuradas, utilizando para ello un compilador BASIC de uso profesional.

SmallBasic SmallBasic es un interprete del lenguaje BASIC, el cual permite utilizar toda la estructura de este lenguaje y poner a prueba los algoritmos que solucionan un determinado problema. Este interprete fue desarrollado por Nicholas Christopoulos a mediados del año 2000 y existen versiones para los sistemas operativos DOS, Windows, Unix, Linux y PalmOS. Un aspecto importante de este interprete es que no es un software comercial, ya que se entrega con una licencia GPL, la cual autoriza su uso en forma libre y prohibe su comercialización. Puede

28 Introducción a la Programación de Computadores

descargar una versión actualizada http://smallbasic.sourceforge.net.

de

SmallBASIC

desde

el

sitio

de

Internet

Pantalla principal de SmallBASIC

Elementos de SmallBASIC: Editor

Es un editor de texto en el cual se programa el algoritmo que se desea probar.

Help

Activa una ventana en la cual se muestra información de ayuda relacionada con SmallBASIC y el lenguaje de programación BASIC.

Output

Permite ver la ejecución del algoritmo programado en Editor. En esta ventana se realizan las entradas de datos y se imprimen los resultados obtenidos en la ejecución del algoritmo.

Text Output

Es una ventana en la cual se pueden almacenar en forma de texto las entradas y salidas de las ejecuciones del algoritmo.

LENGUAJE BASIC En las secciones de LENGUAJE BASIC, como esta, se describirá los principales elementos utilizados por este lenguaje, los cuales se requieren para desarrollar los ejemplos y ejercicios propuestos a lo largo de este documento. El lector debe tener claro que este módulo no es un tratado sobre el lenguaje BASIC, únicamente se lo utiliza como herramienta de laboratorio, por lo cual se irán describiendo sus elementos conforme se los necesite en la prácticas de programación.

Programación de computadores 29

Instrucción PRINT Imprime en pantalla un mensaje de texto o un valor numérico. Para aplicar la instrucción Print, en una sentencia de programación, se debe seguir la siguiente sintaxis: PRINT [salida]

Los paréntesis cuadrados, o corchetes, que se han colocado después de la instrucción, dan a entender al lector que esa parte es opcional. Esto significa que, el programador puede utilizar la instrucción sin utilizar la parte que se encuentra entre paréntesis. La salida puede ser: -

Una cadena de caracteres escrita entre comillas. Por ejemplo “Hola mundo”. Un valor numérico. Por ejemplo 102. Una variable o constante de memoria que contiene un valor numérico o de cadena. Una combinación de los anteriores

Si la instrucción Print se escribe sin una salida, PRINT

al momento de la ejecución se imprimirá en pantalla una línea vacía.

Práctica -

Inicie SmallBASIC Active el editor de programación haciendo clic sobre la pestaña Editor Digite el siguiente algoritmo: PRINT "¡Hola mundo...!" PRINT "Mi primer programa BASIC"

-

Para poner en ejecución el anterior algoritmo elija el menú Program y haga clic sobre el comando Run

Cuando se pone en ejecución el programa, el computador lee las líneas del algoritmo en forma secuencial, una tras otra, de arriba hacia abajo y de izquierda a derecha. Observe que al ejecutar el programa se activa la ventana Output y se muestra en pantalla lo siguiente: ¡Hola mundo...! Mi primer programa BASIC * DONE *

El resultado o salida producida por el algoritmo únicamente corresponde a las dos primeras líneas, la tercera (* DONE *) indica que el programa ha finalizado correctamente su ejecución. En caso de no aparecer esta última línea, se entiende que el programa sigue en ejecución, y para terminarlo se debe hacer mediante el comando Break del menú Program.

30 Introducción a la Programación de Computadores

Instrucción INPUT Solicita al usuario un valor, que puede ser numérico o de texto, y lo almacena en una celda de memoria, llamada variable. Su sintaxis es la siguiente: INPUT [mensaje,] variable

El mensaje, es opcional y corresponde a una cadena de texto escrita entre comillas dobles. En la mayoría de los casos sirve para mejorar la presentación de la entrada de datos. Después del mensaje se debe escribir una coma (,) y a continuación el nombre de la variable. La variable es un identificador de memoria que permite determinar el lugar donde se almacenará el dato que se ingrese. Este elemento es obligatorio. Cuando el programa se está ejecutando la instrucción Input muestra un indicador de entrada de datos, mediante un signo de interrogación, como el siguiente: ?

Cuando, después de la instrucción INPUT, se incluye un mensaje, el signo de interrogación se sustituye por dicho mensaje. A continuación del indicador se encuentra la entrada de datos, que es donde el usuario del programa puede escribir los datos que este le pide. A esta entrada de datos se le suele llamar terminal. Cuando el usuario presiona la tecla ENTER, la instrucción INPUT lee el valor digitado en la terminal y lo coloca en la variable.

Práctica -

Elija el comando New del menú File, para iniciar un nuevo archivo fuente. En el editor de programación digite el siguiente algoritmo: PRINT "Escriba su nombre:" INPUT n PRINT PRINT "Bienvenido " + n

-

Presione la tecla F9 para ejecutar el algoritmo.

Observe que en la pantalla Output aparece lo siguiente: Escriba su nombre: ? ’

El signo de interrogación, ?, llamado en este caso terminal de entrada, indica que en este lugar se debe ingresar el valor que solicita el algoritmo, en este caso su nombre. Después de esto presione la tecla ENTER. Cuando el usuario presiona la tecla ENTER la instrucción INPUT almacena el nombre en una sección de memoria identificada por la variable n.

Programación de computadores 31

A su vez la línea, PRINT

imprime en pantalla una línea vacía, ya que no se ha especificado ningún mensaje para el comando PRINT. Al final, la línea, PRINT "Bienvenido " + n

junta la palabra Bienvenidos con el texto contenido en la variable n.

Práctica -

Inicie un nuevo archivo fuente en SmallBASIC. En el editor de código digite las siguientes sentencias: Input "Nombres: ", a Input "Apellidos: ", b Print a + " " + b

-

Presione la tecla F9 para ejecutar el programa.

En la pantalla de ejecución, Output, se muestra lo siguiente, Nombres: '

Lo cual reemplaza al indicador por defecto de la instrucción Input. Teclee su nombre y presione la tecla ENTER. Observe que ahora aparece la entrada de datos, Apellidos:

Después de presionar la tecla ENTER se observa en la salida de datos una cadena de texto formada por sus nombres y apellidos. Esto lo hace la instrucción Print y el operador + (concatenación).

Guardar el programa Para guardar el archivo fuente, elija el comando Save del menú File.

32 Introducción a la Programación de Computadores

Observe, los archivos fuente de SmallBASIC pueden tener dos tipos de extensiones diferentes: *.bas y *.sb. Se sugiere utilizar la extensión sb, ya que la primera es utilizada por la mayoría de aplicaciones que utilizan el lenguaje BASIC.

3 ELEMENTOS DE PROGRAMACION

Contenido 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12

Algoritmos Identificadores de memoria Constantes Variables Asignación de datos a la memoria Tipos de datos Operadores Representación de algoritmos Verificación de algoritmos Codificación Uso de comentarios en un algoritmo Diseño de programas de computador

34 Introducción a la Programación de Computadores

ALGORITMOS El término algoritmo proviene del matemático persa del siglo IX al-Khwârizmî, quien se dedicó al desarrollo de métodos que permitieran la solución de problemas matemáticos en forma automática. La característica de esos métodos radica en que cada uno de ellos puede permitir la solución automática de varios problemas que se asemejan entre sí. Así, por ejemplo, el método utilizado para dividir un número entre otro, es un método que puede aplicarse para la división de cualquier pareja de números, y cuando se trabaja con él no tenemos la necesidad de preocuparnos por la razón que nos lleva a ejecutar un determinado paso o regla.

Ejemplo: Realizar la división 432 ÷ 3 El método a aplicar consiste en separar del dividendo, comenzando por la izquierda, la misma cantidad de cifras que las existentes en el divisor y hacer la división. Luego se multiplica el cociente obtenido por el divisor, y se resta al dividendo, para obtener un residuo, y enseguida se baja la siguiente cifra. De esta manera se prosigue hasta utilizar todas las cifras del dividendo. 4’3’2 13 12 0

3 144

Este método se puede aplicar a cualquier división de dos números, y se garantiza la obtención del resultado, siempre y cuando los pasos del mismo se apliquen correctamente. El conjunto de pasos seguidos en la aplicación del método es a lo que se le llama algoritmo. Básicamente, un algoritmo es una colección de pasos que en conjunto permiten resolver un problema o realizar una tarea específica. En pocas palabras se puede decir que un algoritmo es una receta para realizar una determinada tarea.

Ejemplos: 1. El ejemplo más sencillo de algoritmo es una receta de cocina. En ella se incluyen todos los elementos y pasos necesarios, en estricto orden, para preparar un delicioso almuerzo (o puede ser uno no tan delicioso). 2. El algoritmo básico que sigue un carpintero para construir una mesa es el siguiente: - Preparar las herramientas de trabajo - Adquirir los materiales básicos: madera, clavos, pintura, etc. - Recortar la madera de acuerdo a las especificaciones de la mesa - Pegar y clavar las diferentes piezas de madera hasta formar la mesa - Por último, pintar la mesa

3. El algoritmo para calcular el área de un triángulo, conocidas su base y su altura, se puede expresar como sigue: - Determinar el valor de la base - Determinar el valor de la altura

Elementos de programación

35

- Aplicar la fórmula,

A=

base × altura 2

- Dar a conocer el valor obtenido para A (el área del triángulo)

altura

base

El ejemplo 3, a diferencia de 1 y 2, corresponde a un algoritmo que procesa unos datos (base y altura) y suministra un tercer dato, correspondiente al valor del área del triángulo. Este tipo de algoritmos se encuentran dentro del campo de la Informática, ya que su función principal es procesar datos y, por ahora, son los que se pueden ejecutar en un computador.

IDENTIFICADORES DE MEMORIA Los identificadores son secuencias o cadenas de caracteres que sirven para nombrar constantes, variables o funciones, dentro de un algoritmo. La secuencia únicamente puede estar formada por letras, números o algunos caracteres del teclado como subrayado ( _ ) o el signo de pesos ($), pero siempre debe iniciar con una letra o el signo subrayado. Por ejemplo, los siguientes identificadores si son válidos: A, n1, VALOR_SUELDO, _nombre, texto$

En cambio los siguientes identificadores no son permitidos: 5m, num-entero, *c, #x

En lenguaje BASIC no se diferencia, en los identificadores, las mayúsculas de las minúsculas. Por lo tanto, los identificadores num, NUM y Num son exactamente la misma cosa. Pero en algunos lenguajes diferentes a BASIC, como C y C++, esta diferencia si se debe tener en cuenta. Los identificadores permiten asignar nombres (mediante constantes y variables) a las secciones de memoria del computador, para de esta manera poder almacenar datos en ella. La memoria del computador se puede considerar como un conjunto de celdas (o cajas) formando un panel, en las cuales se pueden almacenar los datos que necesita un programa para funcionar o cumplir con su tarea. A cada celda se le puede asignar un identificador, de tal manera que cuando se desee colocar o leer un dato, de esa sección de memoria, bastará con referirse al nombre asignado.

36 Introducción a la Programación de Computadores

X

0.5 num

12

Memoria del computador

En el esquema anterior se muestra que existe una sección de memoria llamada num, en la cual se ha guardado el número 12, mientras que en la celda identificada con X se tiene el valor 0.5.

CONSTANTES Una constante es un espacio de memoria en el cual se almacena un dato que no puede ser modificado, y se mantiene durante la ejecución del algoritmo que la creó. Si en alguna parte del algoritmo se define o establece una constante llamada PI, el sistema toma una de las celdas de memoria disponibles y la marca con el identificador PI, de tal manera que en ella se puede almacenar un valor solo en el momento de crearla. Después de esto no se podrá cambiar ese valor y se mantendrá durante toda la ejecución del algoritmo. En BASIC una constante se crea utilizando la instrucción Const, seguida del nombre de la constante y el valor asignado. Por ejemplo para definir la constante PI, y almacenar en ella el valor 3.1415, se debe hacer mediante la siguiente sentencia: Const PI = 3.1415

A partir de aquí en la memoria del computador existirá una sección llamada PI que no podrá ser modificada por ninguna sentencia del algoritmo que la creó. X

PI

0.5

3.1415 num

12

Si en alguna parte del algoritmo se intenta modificar el valor de la constante PI, se generará un error, que puede, incluso, impedir la ejecución de todo el programa.

Práctica:

Elementos de programación

37

En el siguiente ejercicio se van a definir algunas constantes y se intentará cambiar su valor en tiempo de ejecución. -

Si aún no lo a hecho, inicie SmallBASIC En el editor de programación, codifique las siguientes sentencias: Const Const Print Print

-

PI = 3.1415 PAIS = “Colombia” PI PAIS

Ejecute el programa, tecleando F9, o mediante el comando Run del menú Program, y observe la salida en la pantalla Output.

En Output se imprimen los valores 3.1415 y Colombia, correspondientes a las constantes PI y PAIS, respectivamente -

Ahora modifique la codificación, para intentar cambiar, en tiempo de ejecución, el valor de la constante PI. El código debe quedar de la siguiente manera: Const PI = 3.1415 Const PAIS = "Colombia" PI = 3.1416 Print PI Print PAIS

-

Presione F9 para ejecutar el programa.

Observe que, el programa no puede ejecutarse y en cambio se genera un mensaje de error similar al siguiente: * RTE-ERROR AT ... Description: LET: Cannot change a constant

En este mensaje el compilador nos informa que, no se pude cambiar el valor de una constante. Pruebe a cambiar el valor de la constante PAIS y observe la ejecución del programa.

VARIABLES Una variable es una sección de memoria cuyo contenido se puede modificar en cualquier momento. En BASIC las variables se crean simplemente asignando un valor a un identificador. Por ejemplo la siguiente sentencia crea la variable numero, y le asigna el valor 5. numero = 5

En este punto, el sistema asigna el nombre numero a una sección de memoria que se encuentre libre y coloca en ella el valor 5. El esquema de memoria se vería así:

38 Introducción a la Programación de Computadores

X

PI

numero

0.5

3.1415

5

num

12

Si en otro punto del algoritmo aparece la sentencia, numero = 17

inmediatamente se elimina el valor 5 y se coloca el valor 17. El resultado sería el siguiente: X

PI

numero

0.5

3.1415

17

num

12

Práctica: En esta práctica se crean algunas variables y se imprimen sus valores para analizar su comportamiento. -

Inicie un nuevo archivo fuente Digite en el editor de código las siguientes sentencias: a = 12 b = 4 a = 7 Print a Print b

-

Ejecute el programa presionando la tecla F9 y observe las salidas que se obtienen.

Observe, inicialmente se coloca el valor 12 en la variable a, pero en la tercera línea se coloca el valor 7, lo cual elimina el valor 12. En la ejecución el programa imprime el último valor asignado a la variable a, por que el primero ya no existe. En cambio, el valor de b se mantiene hasta el final.

ASIGNACIÓN DE DATOS A LA MEMORIA

Elementos de programación

39

La asignación o almacenamiento de datos en memoria se realiza utilizando las constantes o variables definidas en los algoritmos del programa. Como se vio anteriormente, a las constantes se les asigna un valor únicamente en el momento de su creación, utilizando para ello la instrucción Const, seguida del nombre de la constante, el signo igual (=) y el valor que se desea asignar. Const constante = valor

La asignación de un valor a una variable se hace colocando su identificador a la izquierda del signo “igual” y a la derecha de este se escribe el valor que se quiere almacenar en esa localidad de memoria. Así, por ejemplo, X1 = 13

significa que en la sección de memoria llamada X1 se coloca el valor 13, el cual se mantendrá ahí hasta que otra sentencia lo cambie, o termine la ejecución del programa. Pero, en forma general una variable puede recibir valores directamente o de otras variables o constantes definidas con anterioridad, en el algoritmo. Estas se colocan al lado derecho del signo “igual”. La siguiente sentencia es un ejemplo de este caso: W = Z

Aquí, la variable que se encuentra al lado izquierdo del signo “igual” (W), se toma como una celda de memoria en la cual se va a almacenar un valor. La variable que se encuentra al lado derecho del signo “igual”(en este caso Z), únicamente representa el valor contenido en esa celda de memoria. Como regla general, se establece lo siguiente: la variable escrita al lado izquierdo del signo de asignación (en esta caso el “igual”) representa una celda de memoria, la cual recibe un valor para almacenar, y todas las variables y/o constantes que aparecen al lado derecho son tomadas como los valores de las celdas de memoria a las cuales identifican. Por ejemplo, en la siguiente sentencia, N es la celda de memoria en la cual se va a almacenar un valor; X y Z son los valores contenidos en las celdas de memoria identificadas con X y Z, respectivamente. N = 3 * X + Z

Al final, en la variable N se almacena el resultado de realizar las operaciones indicadas a la derecha del signo igual.

Ejemplo: Analizar el esquema de memoria para determinar el valor de A y B después de ejecutar las siguientes sentencias: A B B A

= = = =

100 20 50 30

40 Introducción a la Programación de Computadores

Es importante tener en cuenta que el computador lee las instrucciones en estricto orden, de arriba hacia abajo y de izquierda hacia derecha. Por lo tanto el análisis se debe hacer siguiendo esta regla. SENTENCIA

DESCRIPCIÓN DE LA EJECUCIÓN

A = 100

Coloca en la sección de memoria A, el valor 100

A

Coloca el valor 20 en la sección de memoria llamada B

A

Coloca el valor 50 en la sección de memoria B

A

Coloca el valor 30 en A

A

B = 20

B = 50

A = 30

RESULTADO DE LA SENTENCIA B

100 B

20

100 B

50

100 B

30

50

Observe que, cuando una sentencia cambia el valor de una variable, esto no le afecta en nada a la otra variable, por que corresponden a dos secciones de memoria totalmente independientes una de otra. En conclusión la variable A queda con el valor 30 y la variable B con el valor 50.

Ejemplo: Analizar el esquema de memoria para las variables num1 y num2, y determinar su valor final, en la ejecución de las siguiente sentencias: num1 num2 num1 num2

= = = =

23 10 num2 num1

Solución: A primera vista, parece lógico, que la ejecución de las anteriores sentencias intercambia el valor de las variables, dejando a num1 con el valor 10 y a num2 con el valor 23. Pero esto no es cierto, ya que la misma lógica nos demuestra, en un análisis detallado, que el valor 23 de num1 se pierde cuando se ejecuta la asignación de la tercera línea, num1 = num2

donde num1 pierde el valor que traía y toma el valor de num2. Veamos el análisis de la memoria para comprender la situación. SENTENCIA

DESCRIPCIÓN DE LA EJECUCIÓN

num1 = 23

Coloca el valor 23 en la variable num1

RESULTADO DE LA SENTENCIA num1

23

num2

Elementos de programación

num2 = 10

num1 = num2

num2 = num1

Coloca el valor 10 en la variable num2

Coloca una copia del contenido actual de num2, el valor 10, en la variable num1(pero num2 no pierde su valor) Coloca una copia del contenido de num1, el valor 10, en num2

num1

num2

23

10

num1

num2

10

10

num1

num2

10

10

41

Observe que, el hecho de que en la línea 3 se asigne el contenido de num2 a num1, esto no significa que num2 vacíe su contenido, ya que este solo puede perderse cuando se sustituye por otro o se elimine mediante alguna sentencia de asignación del tipo num2 = valor. En conclusión, en num1 y en num2 queda almacenado el mismo valor, el número 10.

Práctica: Para comprobar con la ayuda del computador las anteriores asignaciones agrégueles algunas líneas de impresión para comprobar el contenido de las variables, y prográmelas en SmallBASIC. -

Inicie un nuevo archivo fuente. Digite las siguientes sentencias en el editor de código. num1 = 23 num2 = 10 num1 = num2 num2 = num1 Print num1 Print num2

-

Ejecute el programa presionando la tecla F9 y observe los datos impresos. Realice cambios en los valores iniciales de num1 y num2 y vuelva a ejecutar el programa, para comprobar la veracidad del algoritmo.

TIPOS DE DATOS Los tipos son características que determinan como se comportará una variable después de haber sido definida. Así, por ejemplo, si se establece que una variable va a ser utilizada para almacenar valores enteros, muy difícilmente se podrá guardar en ella el valor 1,4142. Por su parte, los algoritmos procesan datos, transformándolos unos en otros. Estos datos casi nunca vienen solos, sino como una conjunto de ellos que se relacionan entre sí; por ejemplo, normalmente se utilizan varios números, con los que se realizan operaciones. Por esta razón los datos se agrupan en conjuntos de datos llamados tipo de datos. En nuestro estudio vamos a hablar únicamente de cuatro tipos de datos, los cuales son manejados por la mayoría de lenguajes de programación: enteros, reales, cadenas de caracteres y booleanos. Pero, en esta parte del curso, solo se harán referencias informativas sobre los mismos, ya que nuestro lenguaje de especificación, SmallBASIC, no requiere la definición de tipos de datos en la

42 Introducción a la Programación de Computadores

construcción de algoritmos. En la parte dedicada a la programación de aplicaciones se realizará una descripción más detallada de los tipos utilizados por KBASIC.

Tipo entero (integer) El tipo entero comprende un pequeño subconjunto de los números enteros, definidos en matemáticas. Exactamente aquellos que se encuentran entre –32.768 y 32.767. Como es bien sabido, el conjunto de los números enteros, matemáticamente, es un conjunto infinito, pero los sistemas computacionales que existen en el momento, no puede disponer de dispositivos de almacenamiento y procesamiento que les permita trabajar con una cantidad infinita de valores, o al menos representar el valor infinito. Por esta razón solo se toma una cantidad limitada de ellos, comprendidos entre ciertos valores extremos. Para los datos tipo entero se ha establecido un ancho de memoria de 16 bits (2 bytes), de los cuales 15 bits se utilizan para representar el valor numérico, y el bit más significativo para el signo (0 positivo, 1 negativo). El siguiente esquema muestra el entero +1258 representado en binario, como lo procesa el computador.

+

0

1258

0

0

0

0

1

0

0

1

1

1

0

1

0

1

0

Observe que, al disponer tan solo de 15 bits, más un bit de signo, para representar un valor tipo entero, el máximo valor posible escrito en binario es 0111111111111111, equivalente a +32.767. A su vez, el mínimo valor que se puede representar es el número negativo 1000000000000000, el cual para convertirlo a decimal, primero se debe invertir todos sus bits y luego sumar 1 (en decimal) al resultado. 1 000000000000000 -> 1 111111111111111 + 1 -> - (32.767 + 1) = - 32.768

Tipo real Los datos tipo real permiten la representación de números que poseen una parte entera y una parte decimal o fraccionaria, como por ejemplo 3,141592. En la mayoría de lenguajes se establecen dos clases de tipos real: float (o single) y double. La diferencia entre uno y otro se encuentra en la cantidad de cifras decimales que se puede manejar con cada uno de ellos y el rango de valores que permiten. El tipo float se representa mediante el uso de celdas de memoria de 32 bits, lo cual permite un rango de valores establecidos de la siguiente forma: Para los números negativos: –3,4 x 1038 a –1.4 x 10-45 Para los números positivos: +1.4 x 10-45 a +3,4 x 1038

Elementos de programación

43

El tipo double se representa mediante 64 bits, lo cual permite un rango de valores mayor que el float y el manejo de una mayor cantidad de cifras decimales, suficientes para la mayoría de cálculos que se requieren en todos los campos de la ciencia y la tecnología. El rango de valores se establece de la siguiente forma: Para los números negativos: –1,797 x 10308 a –4.940 x 10-324 Para los números positivos: +4.940 x 10-324 a +1,797 x 10308

Tipos cadena de caracteres Una cadena es una secuencia de caracteres, en la cual se puede incluir cualquier símbolo que pueda ser impreso en pantalla. Para especificar un valor como una cadena de caracteres se debe escribir la secuencia entre comillas, como por ejemplo “Mi país se llama Colombia”. La operación mas usual, trabajando con cadenas, es la concatenación. Esta consiste en unir dos cadenas, una a continuación de otra, para formar una tercera. En BASIC para concatenar cadenas se utiliza el símbolo “mas” (+) colocado en medio de las cadenas que se desean concatenar. Así, por ejemplo, si se desea unir la frase “La capital de Colombia” con “es Santa Fe de Bogotá” se debe escribir de la siguiente forma: “La capital de Colombia” + “es Santa Fe de Bogotá” obteniéndose como resultado la cadena, “La capital de Colombiaes Santa Fe de Bogotá” y no piense que se ha cometido un error al escribir Colombiaes, lo que ocurre es que la concatenación tan solo une las frases, tal como están escritas originalmente. Si se desea separar las frases se debe incluir el carácter espacio en alguna de ellas.

Práctica: Unir dos frases incluidas en dos variables diferentes. -

Inicie SmallBASIC. Teclee las siguientes instrucciones en el editor de código. a = "La capital de Colombia" b = " es Santa Fe de Bogotá" c = a + b Print c

-

Ejecute el programa tecleando F9 y verifique la salida obtenida.

Observe que para separar las dos frases en la concatenación, se ha incluido un espacio antes de la segunda frase. La salida que se obtiene es la siguiente: La capital de Colombia es Santa Fe de Bogotá

44 Introducción a la Programación de Computadores

La concatenación es utilizada para mejorar la presentación de los programas, especialmente en las salidas, producidas por la instrucción Print.

Tipo boolean Los datos tipo boolean corresponden a los valores lógicos VERDADERO (TRUE) y FALSO (FALSE), los cuales, por lo general se representan mediante los enteros 1 y 0 respectivamente. Si Usted encuentra una sentencia como, n = TRUE

en la variable n, en realidad se almacena el entero 1. En la mayoría de lenguajes lo que se ha hecho es definir en alguna parte dos constantes, TRUE y FALSE, que almacenan, en las secciones de memoria a las que representan, los valores enteros 1 y 0, respectivamente.

OPERADORES Los operadores son caracteres especiales que le dicen al computador que se desea realizar una operación, sobre unos operandos. Los operandos pueden ser variables, expresiones o valores literales. Existen básicamente los siguientes operadores: aritméticos, relacionales y lógicos.

Operadores aritméticos Los operadores aritméticos se utilizan para realizar operaciones matemáticas, de la misma forma como lo hacen en el álgebra. Los operandos, necesariamente deben ser valores numéricos. Operador + * / Mod ++ --

Resultado Suma Resta Multiplicación División Módulo Incremento Decremento

Suma, resta, multiplicación y división La suma, resta, multiplicación y división se aplican exactamente como en el álgebra, conservando sus propiedades y su nivel de precedencia. La precedencia hace referencia a que operación se realiza primero, cuando se combinan varias de ellas. Así, por ejemplo, en 3 + 5 x 4, la multiplicación se realiza primero y al final la suma, de tal manera que se obtiene lo siguiente: 3 + 5 x 4 = 3 + 20 = 23 En general la multiplicación y la división tienen más alta precedencia que la suma y la resta, lo cual implica que estas operaciones se realizan primero en una combinación de operaciones. Pero, esto únicamente se aplica, así directamente, cuando no existan paréntesis de agrupación, ya que en estos

Elementos de programación

45

casos la operación u operaciones que se realizan primero son aquellas que se encuentren dentro del paréntesis. Por ejemplo, en (3 + 5) x 4, la operación que se debe realizar primero es la suma contenida entre los paréntesis, obteniéndose, (3 + 5) x 4 = 8 x 4 = 32

Práctica: Pruebe las cuatro operaciones básicas en SmallBASIC. -

Inicie SmallBASIC Teclee las siguientes sentencias en el editor de código: A = 5 B = 8 suma = A + B resta = A – B producto = A * B division = A / B Print Print Print Print

-

“Suma = ” + “Diferencia “Producto = “Cociente =

suma = ” + resta ” + producto ” + division

Ejecute el programa presionando la tecla F9 y observe las salidas obtenidas en pantalla.

Observe que, en las variables suma, resta, producto y division se almacenan los valores resultado de sumar, restar, multiplicar y dividir, respectivamente, los valores contenidos en las variables A y B. En las instrucciones Print, el texto colocado entre comillas tan solo es una cadena de caracteres que se utiliza para mejorar la presentación de nuestro programa. Aquí se concatenan las cadenas con los valores de cada una de las variables que contienen los resultados de las operaciones y se imprime en pantalla. La salida que se obtiene es similar a lo siguiente: Suma = 13 Diferencia = -3 Producto = 40 Cociente = 0.625

-

Modifique los valores iniciales de A y B y compruebe nuevamente las salidas.

Operador Módulo El operador módulo devuelve el residuo de dividir dos números enteros entre sí. En la mayoría de los lenguajes de programación, incluido BASIC, sus operandos deben ser números enteros, pero algunos lenguajes modernos también calculan el residuo de dividir dos números reales. Para aplicar el operador módulo se puede utilizar el comando Mod, o también el carácter %, colocado entre los números que se dividen. Así,

46 Introducción a la Programación de Computadores

5 Mod 3

calcula el residuo que se obtiene al dividir 5 entre 3. En este caso la operación devuelve el valor 2

Práctica: Calcular el residuo de dividir 5347 entre 89. -

Inicie un nuevo archivo en SmallBasic, mediante el comando New del menú File. Teclee las siguientes sentencias en el editor de código n = 5347 d = 89 r = n Mod d Print "Residuo = " + r

-

Ejecute el programa tecleando F9.

El programa calcula el residuo de dividir el valor de n entre el valor de d y lo coloca en la variable r. Al final imprime en pantalla el valor de la variable, r, concatenado a la cadena “Residuo = ”.

Operador incremento El incremento consiste en modificar el valor de una variable, sumándole un cierto valor al dato almacenado en la variable. Por ejemplo, si en la variable X está guardado el valor 100, se puede desear sumarle 1, a ese valor, para que en la variable X quede almacenado el valor 101. En este caso se dirá que la variable X fue incrementada en 1 Para visualizar con más detalle el incremento, analicemos el ejemplo propuesto. Supongamos que en la variable X se almacena, inicialmente, el valor 100, mediante la sentencia X = 100. Para sumarle, posteriormente, el valor 1 a ese dato, bastará con aplicar la sentencia, X = X + 1

El siguiente análisis de asignación muestra lo que ocurre. SENTENCIA

DESCRIPCIÓN DE LA EJECUCIÓN

X = 100

Coloca el valor 100 en la variable X

RESULTADO DE LA SENTENCIA X

100 X = X + 1

Coloca en X el resultado de sumar el valor contenido en la celda X más 1

X

101

Es importante tener bien claro el concepto de asignación. Al ejecutar la sentencia X = X + 1

Elementos de programación

47

primero se realiza la operación del lado derecho del signo “igual” (100 + 1) y al final se realiza la asignación del resultado, a la variable X. Y solo a partir de esta asignación, en la variable X existirá el valor 101. Para incrementar en 1 el valor contenido en una variable, se puede aplicar la sentencia analizada con anterioridad o el operador ++. Así, la sentencia X = X+1 es equivalente a la sentencia X++

En general, si se desea incrementar en un cierto valor una variable X, se puede aplicar la sentencia X += valor

donde valor es cualquier número entero o real. Por ejemplo, la sentencia X += 12

Incrementa en 12 el valor contenido en la variable X.

Operador Decremento El decremento se aplica en forma análoga a como se hace con el incremento, con la diferencia obvia de que aquí de lo que se trata es de disminuir el valor contenido en una variable. La sentencia X = X – 1

disminuye en 1 el valor contenido en la variable X y esta misma operación se puede realizar aplicando el operador --, de la siguiente forma X --

Para disminuir la variable X en un valor cualquiera, se puede aplicar la sentencia, X -= valor

Tenga en cuenta que no todos los compiladores de BASIC aceptan los operadores incremento y decremento, y en consecuencia este trabajo se debe hacer con sentencias del tipo X = X + 1 o X = X - 1.

Práctica: Compruebe las modificaciones que sufren las variables después de aplicar los operadores incremento y decremento.

48 Introducción a la Programación de Computadores

-

Inicie un nuevo archivo en SmallBASIC Teclee las siguientes sentencias: A = 20 B = 7 A++ B-Print "A = " + A Print "B = " + B

- Ejecute el programa con F9 y verifique las salidas obtenidas en pantalla. Inicialmente en A se coloca el valor 20, pero en la tercera sentencia se incrementa su valor en 1, y al momento de imprimir su valor comprobamos que se encuentra almacenado el valor 21, como se esperaba. Lo propio ocurre con el valor de B. Al final la salida que se obtiene es la siguiente: A = 21 B = 6

Operadores relacionales Los operadores relacionales permiten comparar dos valores, en la mayoría de los casos numéricos, para determinar si son iguales, diferentes, o entre ellos se cumplen alguna otra relación matemática. En la siguiente tabla se muestran los operadores relacionales más comunes en la mayoría de lenguajes de programación y son aquellos que describen igualdad y ordenamiento. Operador

Resultado

=

> < >= N R3 = M N R4 = (M = N Print "R1 = Print "R2 = Print "R3 = Print "R4 =

-

+ " " " "

1) + R1 + R2 + R3 + R4

Ejecute el programa y analice las salidas obtenidas.

En R1 se asigna el resultado de comparar si M es igual a N. Como esto es falso, en esta variable se almacena el valor boolean FALSO (0). Las demás comparaciones producen resultados verdaderos por lo cual en R2, R3 y R4 se almacenan valores booleanos igual a VERDADERO (1). La salida que se obtiene es como la siguiente: R1 R2 R3 R4

= = = =

0 1 1 1

Operadores booleanos Los operadores lógicos booleanos operan únicamente sobre valores booleanos (VERDADERO o FALSO). Estos operadores combinan dos valores booleanos para dar como resultado un valor boolean. La aplicación de los operadores booleanos se hace en aquellos algoritmos donde sea necesario tomar decisiones, con base en los datos que se están manejando, para continuar con la ejecución de una u otra sentencia. Después de todo no olvidemos que la tarea de programar un computador es una forma de transmitir acciones propias de nuestro cerebro a una máquina, por lo cual es fundamental el manejo de las estructuras lógicas, tan importantes en los procesos del pensamiento humano. La siguiente tabla muestra los operadores booleanos más utilizados en la programación de computadores.

50 Introducción a la Programación de Computadores

Operador

Resultado

NOT AND OR XOR

Negación de Conjunción (conector Y) Disyunción (conector O) Disyunción exclusiva

Dadas dos variables booleanas, P y Q, en cada una de ellas existe la posibilidad de almacenar dos posibles valores, VERDADERO o FALSO. Si consideramos todas las combinaciones que es posible formar con los valores de P y Q y los valores devueltos por cada operador, se puede establecer la siguiente tabla de valores: P VERDADERO VERDADERO FALSO FALSO

Q VERDADERO FALSO VERDADERO FALSO

P AND Q VERDAERO FALSO FALSO FALSO

P OR Q VERDADERO VERDADERO VERDADERO FALSO

P XOR Q FALSO VERDADERO VERDADERO FALSO

El operador negación se encarga de invertir el valor de verdad almacenado en la variable a la cual se le aplica. P VERDADERO FALSO

NOT P FALSO VERDADERO

Practica: Compruebe, en SmallBASIC, la aplicación del operador AND. -

Inicie un nuevo archivo SmallBASIC y digite las siguientes sentencias en el editor de código: A = 4 B = 5 P = (A = 4) Q = (B - 1 = A) R = P AND Q Print R

-

Teclee F9 para ejecutar el programa.

En P y en Q se almacenan los valores de verdad de comparar A y 4, y B – 1 con A, respectivamente. En R se asigna el resultado de aplicar la conjunción al valor de P y Q, que en este caso es VERDADERO Y VERDADERO. La salida es, -1

que en BASIC es equivalente a VERDADERO.

Elementos de programación

51

REPRESENTACION DE ALGORITMOS COMPUTACIONALES Cuando ya se tiene una idea clara sobre la solución algorítmica a un determinado problema es importante representarla de alguna manera para poder analizar su estructura, y, si es el caso, realizar correcciones y mejoras que la hagan más eficiente. Para comenzar podemos describir el algoritmo utilizando únicamente nuestro propio lenguaje. Pero, por lo general esta descripción resulta demasiado compleja para programarla con el lenguaje de programación que se haya elegido. Por lo tanto, es importante seguir algunos pasos que permitan simplificar la descripción del algoritmo hasta convertirla en una estructura fácil de programar. En la mayoría de los casos, la representación de un algoritmo se realiza en tres etapas, que empiezan en una descripción genérica, hasta llegar a una descripción cuyos detalles son similares a la estructura del lenguaje de programación. Hecho lo anterior, la programación o codificación del algoritmo es la tarea más sencilla de todo el proceso. Aunque para los programadores con cierta experiencia pueden ser necesario trabajar en tan solo de una de las etapas de representación algorítmica, para quienes comienzan con esta labor es importante invertir un poco de su tiempo y trabajar en todas ellas, para de esta forma afianzar la destreza de programar computadores. Las etapas más utilizadas son: descripción general del algoritmo, representación en diagramas de flujo y descripción del algoritmo en seudocódigo.

Descripción general del algoritmo Consiste en describir la solución algorítmica utilizando palabras y frases propias del lenguaje humano, pero sin olvidar que al final quien va a ejecutar esa solución es un computador. En esto, cuenta mucho la creatividad y destreza que tenga el programador en plantear soluciones y describirlas apropiadamente.

Ejemplo: Construir un programa que le permita al usuario sumar dos números cualesquiera. La idea es diseñar un programa que le pida al usuario dos números, los sume y le muestre el resultado en pantalla. Visto de esta manera y teniendo en cuenta que toda esta tarea será realizada por un computador, una posible solución es la siguiente: -

Pedir al usuario un número y almacenarlo en memoria Pedir el segundo número y almacenarlo un una celda de memoria diferente a la anterior Con los dos números en memoria, aplicar algún método que permita obtener la suma de ellos Mostrar el resultado en pantalla

Representación en diagramas de flujo Un diagrama de flujo es una representación que permite describir un algoritmo utilizando diversos símbolos gráficos que muestran en forma simplificada el orden en que se deben ejecutar los diferentes pasos, así como la función que cumple cada uno de ellos.

52 Introducción a la Programación de Computadores

Ante todo, un diagrama de flujo le permite al programador visualizar en forma clara la manera como el computador ejecutará los diferentes pasos que conforman el algoritmo. En la siguiente tabla se muestran los símbolos gráficos de mayor uso en la representación de algoritmos. Símbolo

Descripción Inicio o fin del algoritmo Entrada de datos

Proceso o fórmula

Si

Toma de decisiones

No

Decisión múltiple

Iteración

Impresora o salida de datos

Líneas de flujo

Conectores

Inicio o fin Establece el punto donde comienza o termina el algoritmo Entrada de datos En el diagrama de entrada de datos se establecen los datos que el usuario debe ingresar, por lo general, por medio del teclado. Dentro del paralelogramo se deben escribir los nombres de las variables que se encargan de recibir los datos ingresados. También se le llama lector de datos.

Elementos de programación

53

Proceso o fórmula Dentro del rectángulo de proceso se describen las operaciones que es necesario realizar con los datos. Por lo general aquí se escriben las sentencias que asignan valores a las diferentes variables manejadas por el algoritmo. Dado que, matemáticamente, una sentencia es una fórmula, se suele dar este nombre a este diagrama. Toma de decisiones La toma de decisiones permite establecer el camino que debe seguir la ejecución del algoritmo con base en una o varias condiciones que se establecen dentro de este diagrama. Por lo general, la condición se escribe en forma de una pregunta cuya respuesta es Si o No. Decisión múltiple La decisión múltiple hace una comparación de datos y con base en el resultado obtenido permite continuar por un camino determinado. Iteración La iteración indica la repetición de un conjunto de instrucciones. En el símbolo se indican los valores inicial, final e incremento de las repeticiones que se deben realizar. Impresora En la impresora se determinan los nombres de las variables cuyos datos se deben imprimir en pantalla. También se le llama salida. Líneas de flujo Las líneas de flujo unen un diagrama con otro y establecen la dirección en que debe continuar la ejecución de un algoritmo. Conectores Los conectores le permiten al programador cortar el diagrama de flujo de un algoritmo, para continuar en otro lugar. El círculo indica que la continuación se realiza en la misma página, mientras que el polígono establece la continuación en otra página.

Ejemplo:

Vamos a realizar el diagrama de flujo del programa para sumar dos números cualesquiera. Para ello vamos a retomar la descripción general ya realizada y establecer el diagrama más apropiado a cada uno de los pasos del algoritmo.

DESCRIPCIÓN GENERAL

ANÁLISIS DE LA DESCRIPCIÓN

-

Estas dos líneas hacen referencia a una entrada de datos por parte del usuario por lo tanto, podemos resumirlas dentro de un diagrama de entrada en la siguiente forma.

-

Pedir al usuario un número y almacenarlo en memoria Pedir el segundo número y almacenarlo un una celda de memoria diferente a la anterior

DIAGRAMA

Números que se van a sumar

54 Introducción a la Programación de Computadores

-

Con los dos números en memoria, aplicar algún método que permita obtener la suma de ellos

Para sumar los valores almacenados en memoria se debe aplicar el operador suma, +. Por lo tanto esta línea corresponde a una formula de asignación.

-

Mostrar el resultado en pantalla

El resultado de la suma se debe mostrar imprimiéndolo en la pantalla del computador

Sumar los dos números

Resultado de la suma

Una vez definidos los diagramas que simbolizan a cada uno de los pasos del algoritmo podemos establecer el camino que se sigue para ejecutar cada uno de ellos. Para ello, basta con determinar el orden en que se han establecido y unirlos mediante las líneas de flujo. Números que se van a sumar

Sumar los dos números

Resultado de la suma

Para dar mayor claridad al algoritmo, es importante determinar en el diagrama, un inicio y un final. Por lo tanto el diagrama de flujo queda como sigue: Inicio

Números que se van a sumar

Sumar los dos números

Resultado de la suma

Fin

De esta manera hemos construido el diagrama de flujo para nuestro pequeño programa. Pero, no podemos olvidar que el objetivo final es obtener una descripción algorítmica lo más aproximada posible a las estructuras sintácticas que puede interpretar un computador. Vamos a simplificar aún más la descripción de nuestro algoritmo utilizando las estructuras computacionales ya estudiados, tales como: constantes, variables, asignaciones de memoria, operadores, etc. Para ello tendremos en cuenta las siguientes consideraciones:

Elementos de programación

55

En la entrada de datos podemos escribir de una vez el nombre de las celdas de memoria en las que se van a almacenar los valores ingresados, utilizando para ello dos variables, que podemos llamar a y b. En el diagrama de procesos se realiza la suma de los números contenidos en a y b, es decir la operación a + b. Pero, el resultado de esta operación se debe almacenar en memoria para evitar perderlo. Utilizaremos la variable s para almacenar el resultado. Por lo tanto, aquí es necesario realizar la asignación s = a + b. Al final, se debe mostrar o imprimir en pantalla el valor contenido en la variable s.

Con base en estas consideraciones podemos representar el algoritmo para sumar dos números de la siguiente forma: Inicio

a, b

s = a+b

s

Fin

Este es un diagrama mucho más simbólico, ya que expresa los pasos del algoritmo mediante el uso de elementos computacionales, cuyo significado no difiere en nada con las anteriores descripciones, sino que más bien ayuda a acercarnos al objetivo final, cual es obtener una descripción entendible por un computador.

Descripción en seudocódigo El seudocódigo es una descripción del algoritmo mediante el uso de palabras clave del lenguaje humano y elementos computacionales que la acercan a las estructuras utilizadas por los lenguajes de programación. La descripción en seudocódigo, aunque busca acercarse a la sintaxis utilizada por un lenguaje de programación en particular, no debe perder la descripción general del algoritmo, para de esta forma permitir su traducción a cualquier lenguaje. Por lo general, el programador construye el seudocódigo basándose en las estructuras manejadas por el lenguaje en el que se vaya a programar, para facilitar de esta forma su codificación. En general una descripción en seudocódigo tiene el siguiente estilo: Algoritmo: Nombre del algoritmo

56 Introducción a la Programación de Computadores

Variables: Lista de variables Constantes: Lista de constantes Inicio

...

Fin

El seudocódigo se obtiene haciendo una interpretación directa de los símbolos que conforman el diagrama de flujo. Pero, aunque la descripción obtenida mediante este método debe asemejarse a la estructura utilizada por el lenguaje de programación, tiene la ventaja de que el programador puede utilizar, en la descripción de cada paso del algoritmo, los términos o palabras que mejor le parezcan, sin tener que preocuparse por notaciones especificas, como las manejadas en un lenguaje. Así, por ejemplo, para indicar en seudocódigo, que se debe imprimir el valor de la variable número en pantalla, podemos expresarlo mediante la sentencia, ESCRIBIR número

o también, MOSTRAR número

En cambio, en un lenguaje de programación, el programador debe preocuparse por conocer la sintaxis (o estructura) de la instrucción que sirve para escribir en pantalla, o cualquier otro dispositivo, el valor de una variable como número. En lenguaje C, por ejemplo, para mostrar en pantalla el valor de una variable se debe escribir una sentencia como, printf(“%d”, número);

la cual solo es válida para mostrar valores de variables definidas como tipo entero. Si se utiliza para otro tipo de variables, la sentencia fallará.

Ejemplo: Traducir a seudocódigo el algoritmo utilizado para sumar dos números. Para traducir a seudocódigo un diagrama de flujo, basta con utilizar palabras que especifiquen la acción o tarea que realiza cada uno de los símbolos que lo componen sobre los elementos incluidos en él. DIAGRAMA DE FLUJO

SEUDOCÓDIGO

Elementos de programación

Inicio

a, b

s = a+b

s

Fin

57

INICIO

LEER a LEER b

s=a+b

ESCRIBIR s

FIN

El Inicio y el Fin no requieren mayor especificación, por lo cual se interpretan con sus propios términos. Así, INICIO ... FIN

Las entradas de datos las podemos identificar con la palabra clave LEER, ya que en realidad el trabajo del algoritmo consiste en leer el dato ingresado por el usuario para almacenarlo en la variable respectiva. En nuestro caso es necesario leer los valores para las variables a y b. LEER a LEER b

Los procesos o fórmulas de asignación no requieren mayor explicación, por lo cual basta con escribirlas tal como están en el diagrama. Nuestro algoritmo necesita sumar los valores de a y b, y asignar su resultado a la variable s. s=a+b

El símbolo impresora, puede interpretarse directamente por la acción que realiza sobre los elementos incluidos en él. Su objetivo es escribir en pantalla el valor de la variable s, por lo cual podemos interpretarlo con la palabra clave ESCRIBIR. Así: ESCRIBIR s

Es importante dar una identidad al algoritmo, de tal manera que más tarde sea posible identificarlo fácilmente. Pues un algoritmo como éste, bien podría ser tan solo uno de los muchos que conforman un programa completo. Por lo general la identidad se establece en el encabezado con la palabra algoritmo, seguida del nombre que se le quiera dar. Además, se debe especificar el tipo de variables utilizadas por el algoritmo. En este ejemplo, las variables utilizadas son a, b y s, que sirven para almacenar valores numéricos. En particular, podemos establecer que almacenen números reales. Esto lo especificaremos de la siguiente manera:

58 Introducción a la Programación de Computadores

Variables REALES: a, b, s

En definitiva el seudocódigo del algoritmo para sumar dos números, queda como sigue: Algoritmo: Suma de dos números Variables REALES: a, b, s INICIO LEER a LEER b s=a+b IMPRIMIR s FIN

Llegado a este punto estamos listos para codificar nuestro algoritmo y convertirlo en instrucciones que el computador pueda entender.

VERIFICACION DE ALGORITMOS Una vez construido el algoritmo que resuelve el problema en estudio, es importante hacer algunas pruebas para comprobar su comportamiento y, si es el caso, realizar las respectivas correcciones antes de programarlo en el computador. Cada uno puede ingeniar su propio método de comprobación de acuerdo a sus necesidades y de los elementos que disponga para tal fin. Uno de los métodos más utilizados para verificar un algoritmo, son las pruebas de escritorio, que consisten en utilizar nuestro cerebro como si fuera el procesador que va a ejecutar el algoritmo. Se asignan diferentes valores a las variables de entrada y se realiza un recorrido por los diferentes pasos del algoritmo, ejecutando todos los procesos y tomando nota de los valores que van adquiriendo las variables, hasta llegar al final. Después del recorrido se verifica que las salidas sean correctas y de ser necesario se repite el proceso con otros datos. Para esto, por lo general, se utiliza una tabla en la cual se ubican las variables del algoritmo y los valores que toman en los diferentes procesos. Asignaciones Sentencia 1 Sentencia 2

Entrada 1

Entradas Entrada 2

Salidas ...

Salida 1

La verificación puede hacerse con el diagrama de flujo o con el seudocódigo del algoritmo. En la tabla, básicamente, se toma nota de las asignaciones que realice el algoritmo a las diferentes variables que lo conforman.

Ejemplo: Verificar el algoritmo Suma de dos números. Asignamos los valores 5 y 7 a las variables a y b, respectivamente. a 5

Entradas b 7

Salidas s -

Elementos de programación

59

Al ejecutar la sentencia s = a + b se obtiene que en s se almacena el valor 7. Por lo tanto la tabla queda como sigue Entradas a b 5 7 5 7

Salidas s 7

CODIFICACION La codificación es el proceso que consiste en escribir el algoritmo utilizando las instrucciones y sintaxis de un lenguaje de programación específico. Al resultado obtenido se le denomina código del programa. La codificación debiera ser la tarea más fácil de todo el proceso de programación de un computador, siempre y cuando el algoritmo se haya construido correctamente. La tarea consiste en traducir las sentencias, de la descripción en seudocódigo, a las instrucciones utilizadas por el lenguaje que se esté utilizando.

Ejemplo: Codificar el algoritmo para sumar números. En la mayoría de los casos la codificación del algoritmo debería limitarse a traducir línea a línea las sentencias del seudocódigo. Pero en algunos lenguajes, y dependiendo de la complejidad de la sentencia, algunas sentencias pueden generar más de una sentencia en el lenguaje de programación. En BASIC, por lo general, cada sentencia de seudocódigo genera una sentencia en el lenguaje de programación. El siguiente es el resultado de la traducción de nuestro algoritmo ejemplo: SEUDOCÓDIGO

CODIGO DEL PROGRAMA

Algoritmo: Sumar dos números REALES: a, b, s INICIO LEER a LEER b s=a+b IMPRIMIR s FIN

'Algoritmo: 'REALES: a, 'INICIO INPUT INPUT s = a PRINT 'FIN

Sumar dos números b, s a b + b s

El lenguaje BASIC, que estamos utilizando en nuestras practicas, no requiere la especificación de un inicio ni de un final en el algoritmo base de un programa, por lo cual no es necesario codificar estos puntos. Pero, existen lenguajes y estructuras del mismo BASIC, que se estudiaran más adelante, en las cuales si es necesario especificar el inicio y el final del algoritmo. Para conservar la generalidad de nuestros algoritmos, y mientras no sea necesario codificarlos, vamos a especificar el INICIO y el FIN a manera de comentarios. Así: 'INICIO '..... 'FIN

60 Introducción a la Programación de Computadores

De igual manera las variables simples a, b y s, utilizadas en nuestro algoritmo, en BASIC no requieren ser definidas, pero es importante que el programador tenga una idea clara del tipo de datos que pueden almacenar, por lo cual se incluirán en forma de comentarios. En este caso sabemos que a, b, y s son variables que permiten almacenar valores numéricos. En particular podemos decir que son números reales. 'REALES: a, b, s

En BASIC la entrada de datos por parte del usuario se puede hacer mediante la instrucción Input, acompañada de la variable que recibe el dato. Por lo tanto la entrada de los valores para a y b se pueden codificar como, INPUT a INPUT b

La traducción de las formulas o sentencias de asignación se realizan convirtiendo los operadores matemáticos a sus equivalentes computacionales. Como se temas anteriores la mayoría de operadores aritméticos son los mismos que se utilizan en las matemáticas. En este caso la sentencia de asignación de la suma se codifica tal como está en el seudocódigo. s = a + b

Por último las salidas por pantalla se realizan mediante la instrucción Print, seguida de la variable cuyo valor se desea imprimir. En este caso la variable s. PRINT s

Con lo anterior se obtiene un programa totalmente funcional para sumar dos números ingresados por el usuario en el momento de la ejecución. Sin embargo, para hacer más llamativo el programa, podemos agregar un adorno a la salida, concatenando la cadena "Suma = " con el valor de la variable s, de tal manera que nos permitan distinguir los sumandos del resultado. Así: 'Algoritmo: 'REALES: a, 'INICIO INPUT INPUT s = a PRINT 'FIN

Sumar dos números b, s a b + b "Suma = " + s

Práctica: Codifique en SmallBASIC el algoritmo para sumar dos números y verifique, con diferentes valores, su funcionamiento.

USO DE COMENTARIOS EN UN ALGORITMO Un comentario es una anotación que acompaña a los pasos del algoritmo para explicar o dar detalles sobre la función que cumplen las diferentes partes que lo conforman. Esto solo le sirve al

Elementos de programación

61

programador o a quien le interese estudiar el algoritmo, ya que no tiene ningún efecto sobre el funcionamiento del programa desarrollado. El compilador o interprete ignora los comentarios. En lenguaje BASIC, un comentario se coloca con la instrucción REM, o mediante el uso del carácter apóstrofo (’), al comienzo del texto. Todo lo que se escriba después de alguno de estos elementos será ignorado por el compilador. Así, por ejemplo, la siguientes línea se toma como comentario: REM Esto no se compila

la cual es equivalente a escribir, ‘Esto no se compila

Los comentarios se utilizan principalmente para explicar el significado y propósito de las diferentes partes del algoritmo, y de esta manera, posteriormente poder recordar con facilidad su utilidad.

DISEÑO DE PROGRAMAS DE COMPUTADOR En resumen, el proceso fundamental para el desarrollo de un programa de computador se centra en el diseño y construcción del algoritmo que lo conforma. Del acierto, o desacierto, en esta etapa dependerá que nuestro programa tenga éxito o sea un fracaso total. Por esto se debe poner especial cuidado a esta fase para evitar al máximo los errores que se puedan presentar en la tarea de programación.

Análisis del problema Como se dijo anteriormente, un problema no es más que una situación que requiere ser resulta. Antes de empezar a construir el algoritmo es importante tener bien claro que es lo que pide el problema y que se pretende con la solución que se le dé.

Construcción del algoritmo Una vez que se tenga bien claro el problema que se va a resolver y la forma como resolverlo se aplican las técnicas conocidas para la construcción del algoritmo que lo resuelve.

Verificación y análisis del algoritmo La verificación y análisis consisten en probar con diferentes entradas de datos la funcionalidad del algoritmo para comprobar que si cumple con su objetivo de solucionar el problema propuesto. Es importante tomar algunos datos de entrada y analizar como los procesa el algoritmo para determinar las salidas que se obtienen. Esto se puede hacer mediante el método conocido como pruebas de escritorio, que consiste en construir una tabla en papel en la cual se incluyen las variables que intervienen y determinar su comportamiento conforme se aplican las diferentes sentencias, utilizando para ello únicamente nuestro cerebro. Por lo general en estas pruebas se trabaja con datos sencillos cuyas salidas se pueden determinar, incluso sin utilizar el algoritmo diseñado.

62 Introducción a la Programación de Computadores

VARIABLES

INSTRUCCIÓN

a 10 10 10 10

Input a Input b s=a+b Print s

b 7 7 7

s 17 17

Codificación del algoritmo Considerando que el algoritmo ha sido bien construido, este proceso resulta el más sencillo de todo el proceso. La codificación consiste en escribir el algoritmo utilizando los elementos del lenguaje de programación que se haya elegido. Esta tarea se realiza sobre un editor de texto sin formato, es decir que únicamente se limite a recibir los caracteres que se tecleen sin incluir caracteres ocultos. Puede utilizar el bloc de notas de Windows, o el editor que pueda incluir el compilador que se esté utilizando.

Depuración La depuración es una de las etapas finales de la programación de computadores y consiste en verificar la existencia de errores en el código del programa, para realizar las respectivas correcciones. Sin embargo, aunque un número determinado de problemas puede mostrarnos la presencia de errores en un programa, nunca se podrá demostrar que estos no existan en su totalidad ya que para esto sería necesario hacer pruebas con todos los posibles datos que vaya a procesar el programa, algo que en la mayoría de los casos resulta imposible.

EJERCICIOS Determinar los valores finales almacenados en las variables M y N, después de ejecutar cada uno de los conjuntos de instrucciones en estricto orden, de arriba hacia abajo: 1.

M=1 N=M+5 M=N+3

5.

N=2 M=N^2+N–5 N = M – 10

2.

M = 10 N=5 M = N + 10 N = M – 10

6.

M=1 N=M^2 N=3 M=N

3.

M=2 N=3 AUX = M M=N N = AUX

7.

M=1 M=M+5 N=M N=N–M M=M–N

4.

M=1 M=M+5 M=M–3

8.

M = 10 N = M – 10 M=N+M

4 FLUJO DE CONTROL I: Estructuras secuenciales

Contenido 4.1 Concepto de flujo de control 4.2 Estructuras secuenciales 4.3 Ejemplos 4.4 Ejercicios 4.5 Problemas avanzados

64

Introducción a la Programación de Computadores

CONCEPTO DE FLUJO DE CONTROL El flujo de control se refiere al orden en que se ejecutan las sentencias que componen un algoritmo. Como se dijo en secciones anteriores, el flujo normal de un algoritmo es secuencial, es decir que las sentencias se ejecutan de arriba hacia abajo, una después de otra, en el orden en que se las haya escrito. Los algoritmos que se han trabajado como ejemplos, en las secciones anteriores, funcionan en forma secuencial. Sin embargo, la vida real no es tan simple. Normalmente, los algoritmos solucionan problemas que necesitan modificar el camino de ejecución cuando se cumplen (o incumplen) ciertas condiciones. Así, por ejemplo, en el siguiente algoritmo, que permite realizar la división entre dos números, Inicio

Entrar dos números: N, M

Dividir N entre M: D=N/M

Escribir el valor de D

Fin

si se ingresa el valor 0 para la variable M, el algoritmo no podría realizar la división, ya que la división por cero no esta definida (o no existe). En estas condiciones es necesario modificar el algoritmo para evitar que se realice la división cuando el valor de M sea igual a 0. Situaciones como esta exigen el uso de estructuras que modifiquen el camino de ejecución de un algoritmo cuando se cumplen ciertas condiciones. Cualquier algoritmo, no importa su complejidad, puede ser construido utilizando combinaciones de tres estructuras de control de flujo estandarizadas (secuencial, selección, repetitiva o iterativa) y una cuarta denominada, invocación o salto.

ESTRUCTURAS SECUENCIALES En una estructura secuencial una sentencia sigue a otra, en estricta secuencia, de tal modo que la salida de una es la entrada de la siguiente.

Flujo de Control I: Estructuras Secuenciales 65

Los algoritmos construidos solo con estructuras secuenciales obligan al usuario del programa generado a evitar el ingreso de aquellos valores que le pueden causar errores y además, no son capaces de tomar decisiones para procesar los datos. En general, un algoritmo construido sobre una estructura secuencial tiene la siguiente forma: Inicio

Fin

Ejemplo: Construir un programa para calcular el área de un triángulo, conocidas su base y su altura. Análisis del problema:

En la forma como está planteado el problema, exige que en el momento de ejecutar el algoritmo que lo solucione, este debe pedir al usuario los valores de la base y la altura del triángulo cuya área se desea conocer.

altura

base El área de un triángulo, cuando se conocen su base y su altura, se calcula mediante la ecuación matemática, base × altura A = 2 En consecuencia, la construcción del algoritmo se fundamenta en las siguientes entradas y salidas: Datos de entrada: base, altura Datos de salida: área

Solución algorítmica:

Descripción general El algoritmo que soluciona el problema se basa en los siguientes puntos:

-

Pedir al usuario el valor de la base y de la altura Aplicar la fórmula del área para realizar el cálculo Mostrar en pantalla el valor del área

Diagrama de flujo

66

Introducción a la Programación de Computadores

Inicio

base, altura

área = (base * altura) / 2

área

Fin Seudocódigo Algoritmo: AREA DEL TRIANGULO Reales: base, altura, área INICIO LEER base LEER altura área = (base * altura) / 2 ESCRIBIR área FIN

Verificación

La verificación del algoritmo se realizará con dos triángulos: el primero de base 11 y altura 7, y el segundo de base 3 y altura 4.2.

Sentencias LEER base LEER altura Área = (base * altura) / 2

base 11 11 11

Variables altura 7 7

Área 38.5

LEER base LEER altura Área = (base * altura) / 2

3 3 3

4.2 4.2

6.3

Los resultados obtenidos para estos dos triángulos son correctos, ya que coinciden con los valores de sus áreas.

Codificación

'Algoritmo: AREA DEL TRIANGULO 'Reales: base, altura, área 'INICIO Input base Input altura área = (base * altura) / 2 Print "Area = " + área 'FIN

Práctica -

Inicie SmallBASIC. En la ventana Editor digite la codificación del algoritmo AREA DEL TRIANGULO. Ejecute el programa presionando la tecla F9. Pruebe el programa entrando los valores utilizados en la verificación del algoritmo.

Flujo de Control I: Estructuras Secuenciales 67

-

Para mejorar la presentación del programa, realice cambios en la codificación, de tal manera que ésta quede como la siguiente: 'Algoritmo: AREA DEL TRIANGULO 'Reales: base, altura, área 'INICIO Input "Base = ", base Input "Altura = ", altura área = (base * altura) / 2 Print "Area = " + área 'FIN

-

Ejecute el programa presionando F9.

Los últimos cambios realizados al código del programa, no afectan en nada su funcionamiento, únicamente mejoran un poco su presentación. La sentencia Input "Base

= ", base

realiza igual trabajo que su original, Input base

pero en la pantalla de entrada reemplaza el indicador de entrada, ?, por la cadena de texto “Base =”, lo cual le permite al usuario saber para quién es el dato que esta ingresando. Igual ocurre con la sentencia que le sigue.

Ejemplo: Programar un algoritmo que solicite la entrada de dos números y realice las cuatro operaciones aritmética básicas. Análisis del problema

El problema plantea un programa que pida la entrada por parte del usuario de dos valores numéricos, para con ellos realizar las operaciones de suma, resta, multiplicación y división. En este caso las salidas deben ser cuatro, una por cada operación aplicada a los números. Entradas: n1, n2 Salidas: s (suma), r (resta), m (multiplicación), d (división)

Solución algorítmica

Descripción general:

-

Pedir al usuario del programa que digite dos números reales y almacenarlos en dos celdas de memoria diferentes Aplicar la suma a los dos números Aplicar la resta Aplicar la multiplicación Aplicar la división Escribir en pantalla los resultados de la suma, resta, multiplicación y división

Diagrama de flujo:

68

Introducción a la Programación de Computadores

Inicio

n1, n2

s = n1 + n2 r = n1 – n2 m = n1 * n2 d = n1 / n2

s, r, m, d

Fin Seudocódigo: Algoritmo: OPERACIONES ARITMETICAS Reales: n1, n2, s, r, m, d INICIO LEER n1 LEER n2 s = n1 + n2 r = n1 – n2 m = n1 * n2 d = n1 / n2 ESCRIBIR s ESCRIBIR r ESCRIBIR m ESCRIBIR d FIN

Codificación

'Algoritmo: OPERACIONES ARITMETICAS 'Reales: n1, n2, s, r, m, d 'INICIO Input n1 Input n2 s = n1 + n2 r = n1 - n2 m = n1 * n2 d = n1 / n2 Print s Print r Print m Print d 'FIN

Práctica -

-

Inicie SmallBASIC y en la sección Editor digite la codificación del algoritmo OPERACIONES ARITMETICAS. Ejecute el programa e ingrese dos números a través del indicador ?_. Vuelva a la sección Editor y modifique el código para mejorar la presentación del programa, de tal manera que se asemeje al siguiente:

Flujo de Control I: Estructuras Secuenciales 69

'Algoritmo: OPERACIONES ARITMETICAS 'Reales: n1, n2, s, r, m, d 'INICIO Print "DIGITE DOS NUMEROS REALES" Input "Primer número : ", n1 Input "Segundo número : ", n2 s = n1 + n2 r = n1 - n2 m = n1 * n2 d = n1 / n2 Print Print "RESULTADOS" Print "Suma = " + s Print "Diferencia = " + r Print "Producto = " + m Print "División = " + d 'FIN

-

Vuelva a ejecutar el programa y pruébelo ingresando algunos valores numéricos.

Observe que, aunque se han agregado algunas líneas de código esto solo afecta la presentación de la pantalla de ejecución, pero en nada al funcionamiento del algoritmo. Una ejecución de este programa se parece a la siguiente: DIGITE DOS NUMEROS REALES Primer número : 7 Segundo número : 15 RESULTADOS Suma Diferencia Producto División

= = = =

22 -8 105 0.466666667

* DONE *

Ejemplo: Desarrollar un programa que tome cualquier número y lo eleve al cuadrado. Análisis del problema

Se pide desarrollar un programa que solicite al usuario un numero real y lo eleve al cuadrado. El cuadrado, es una forma matemática utilizada para indicar que un numero debe elevarse a la potencia de exponente 2. Así, por ejemplo, al decir 5 elevado al cuadrado, se esta refiriendo a 52. En general un exponente indica el número de veces que se debe multiplicar, por si mismo, un número llamado base. Al resultado de esa multiplicación se le llama potencia.

Bn = P B: Base n: exponente P: Potencia Por lo tanto, si el exponente es 2, significa que el resultado de la potencia se obtiene multiplicando dos veces la base.

B2 = B × B En definitiva, la potencia B2 se obtiene multiplicando el número B dos veces por sí mismo. Lo cual lo podemos expresar con la siguiente fórmula:

70

Introducción a la Programación de Computadores

P = B× B Solución algorítmica

Descripción general del algoritmo:

-

Solicitar al usuario el ingreso de un número Aplicar la fórmula de la potencia para elevar al cuadrado Mostrar el resultado de la potencia

Diagrama de flujo:

Inicio

B

P = B *B

P

Fin Seudocódigo: Algoritmo: ELEVAR AL CUADRADO Reales: B, P INICIO LEER B P=B*B ESCRIBIR P FIN

Codificación

'Algoritmo: 'Reales: B, 'INICIO Input P = B Print 'FIN

ELEVAR AL CUADRADO P B * B P

Práctica -

Inicie SmallBASIC y codifique el algoritmo ELEVAR AL CUADRADO. Ejecute el programa y pruébelo con algunos valores numéricos para verificar su funcionamiento. Regrese al editor de código y modifique el algoritmo para agregar algunos adornos al programa. 'Algoritmo: 'Reales: B, 'INICIO Print Print Print

ELEVAR AL CUADRADO P "---------------------" "CUADRADO DE UN NUMERO" "---------------------"

Flujo de Control I: Estructuras Secuenciales 71

Input "Base = ", B P = B * B Print "Potencia = " + P 'FIN

-

Ejecute el programa con las nuevas modificaciones.

La pantalla de salida debe mostrarse similar a la siguiente: --------------------CUADRADO DE UN NUMERO --------------------Base = 15.7 Potencia = 246.49 * DONE *

Ejemplo: Calcular la longitud de una pista circular con base en su radio. Análisis del problema:

El problema pide desarrollar un programa que solicite al usuario el valor del radio de una pista circular y con él determinar la longitud de dicha pista. Desde el punto de vista de las matemáticas una pista circular es una circunferencia, la cual geométricamente se define como un conjunto de puntos que guardan una misma distancia con respecto a un punto exterior llamado centro. La distancia del centro a la circunferencia se denomina radio.

Radio O

Matemáticamente la longitud de la circunferencia se calcula mediante la ecuación:

L = 2πR donde π es un número real constante cuyo valor aproximado es igual a 3.141592653 y R es el valor del radio. En conclusión el programa debe tener únicamente la entrada del valor del radio y suministrar la salida correspondiente al valor de la longitud, calculada con la fórmula anterior.

Solución algorítmica:

Descripción general del algoritmo:

-

Pedir al usuario el valor del radio Aplicar la fórmula de la longitud de la circunferencia Mostrar el valor de la longitud

Diagrama de flujo: En la codificación del algoritmo no es posible usar el número π y, además, para el computador este es un valor desconocido. Por lo tanto para simbolizar este número utilizaremos la constante de memoria PI, cuyo valor será 3.141592653.

72

Introducción a la Programación de Computadores

Inicio

RADIO

L = 2 * PI * RADIO

L

Fin Seudocódigo: Algoritmo: LONGITUD DE LA PISTA CIRCULAR Reales: RADIO, L Constante: PI = 3.141592653 INICIO LEER RADIO L = 2 * PI * RADIO ESCRIBIR L FIN

Codificación:

'Algoritmo: LONGITUD DE LA PISTA CIRCULAR 'Reales: RADIO, L Const PI = 3.141592653 'INICIO Input RADIO L = 2 * PI * RADIO Print L 'FIN

Práctica -

Inicie un nuevo archivo fuente en SmallBASIC. Digite la codificación del algoritmo LONGITUD DE LA PISTA CIRCULAR. Ejecute el programa presionando la tecla F9 y pruebe algunos valores de entrada. Regrese al editor de código y modifique el código, para mejorar la presentación del programa, como lo muestra la siguiente codificación. 'Algoritmo: LONGITUD DE LA PISTA CIRCULAR 'Reales: RADIO, L Const PI = 3.141592653 'INICIO Input "Radio: ", RADIO L = 2 * PI * RADIO Print "Longitud de la pista: " + L 'FIN

-

Ejecute el programa con las modificaciones realizadas y observe los resultados.

Flujo de Control I: Estructuras Secuenciales 73

Ejemplo: Programar un algoritmo que intercambie los valores de dos variables. Análisis del problema

El problema plantea la tarea de tomar dos variables y colocar el valor de una ellas en la otra, y viceversa, de tal manera que al final cada una quede con el valor que tenia al principio la otra. ¿Más claro? Listo. Si se tiene dos variables A y B, se espera que, al final del proceso, en A quede almacenado el valor inicial de B y en B el valor inicial de A. Es importante que el lector ponga especial cuidado a la solución de este problema, ya que tiene aplicación en los algoritmos utilizados para ordenar datos, que se estudiaran en capítulos posteriores. Es evidente que en problemas de ordenación será necesario intercambiar los valores de las variables, cuando estos no cumplan con el criterio de orden establecido.

Solución algorítmica

Descripción general del algoritmo:

-

Recibir cada uno de los datos tecleados por el usuario y almacenarlos en las variables A y B Sacar una copia del valor de A y colocarlo en una variable auxiliar, que llamaremos AUX, para evitar que se pierda en el siguiente paso Colocar el valor de B en la variable A Colocar el valor de AUX en B (AUX tiene el valor original de A) Escribir los valore de A y B

Diagrama de flujo:

Inicio

A, B

AUX = A A=B B = AUX

A, B

Fin Seudocódigo:

Algoritmo: Intercambio de valores Reales: A, B, AUX INICIO LEER A LEER B AUX = A A=B B = AUX ESCRIBIR A ESCRIBIR B FIN Verificación:

Para comprobar el correcto funcionamiento del algoritmo vamos a suponer que en la ejecución se ingresan los valores 5 y 2, para ser almacenados en A y B, respectivamente.

Sentencias LEER A LEER B AUX = A A=B B = AUX

AUX 5 5 5

VARIABLES A 5 5 5 2 2

B 2 2 2 5

74

Introducción a la Programación de Computadores

Observe que, después de la última asignación, en A queda el valor 2 y en B el valor 5.

Codificación

'Algoritmo: Intercambio de valores 'Reales: A, B, AUX 'INICIO Input A Input B AUX = A A = B B = AUX Print A Print B 'FIN

Práctica -

Inicie SmallBASIC Digite la codificación del algoritmo INTERCAMBIO DE VALORES Ejecute el programa y pruebe con las entradas 5 y 2 para A y B, respectivamente. Observe las salidas obtenidas. Modifique el código del programa de tal manera que se parezca al siguiente: 'Algoritmo: Intercambio de valores 'Reales: A, B, AUX 'INICIO Input "A = ", A Input "B = ", B AUX = A A = B B = AUX Print "A = " + A Print "B = " + B 'FIN

-

Ejecute nuevamente el programa y pruebe con diversas entradas.

La importancia de este algoritmo está en que permite resolver el problema computacional de intercambiar los valores de dos variables, utilizando una tercera variable, a la cual llamamos auxiliar.

EJERCICIOS 1. Crear un programa que eleve un número a cualquier exponente que indique el usuario. Ayuda:

La potencia, p, de un número b elevado a un exponente n, matemáticamente se expresa de la siguiente manera:

p= b n Para expresar, en un algoritmo computacional, una expresión exponencial se puede utilizar el operador exponenciación, ^.

Flujo de Control I: Estructuras Secuenciales 75

2. Programar un algoritmo que calcule cualquier raíz de un número. El programa debe pedir el número y el índice, de la raíz que se desea calcular, y debe mostrar como salida el valor de la raíz. Ayuda:

Matemáticamente, toda raíz n es equivalente a una potenciación, donde el exponente es un fraccionario de numerador 1 y denominador n. Así:

n

b =b

1 n

b: Número base n: Indice de la raíz

3. Construir un programa que permita calcular el promedio de 5 números tecleados por el usuario. 4. Crear un programa para calcular el cociente y el residuo de la división entera de dos números. 5. Crear un programa para solucionar ecuaciones cuadráticas de la forma ax2 + bx + c = 0. Ayuda:

La solución de una ecuación cuadrática (de la forma ax2 + bx + c = 0) consiste en hallar los valores de la variable x para los cuales se cumple la igualdad a cero, expresada en ella. Toda ecuación cuadrática posee dos valores que la solucionan:

x1 =

− b + b 2 − 4ac 2a

x2 =

− b − b 2 − 4ac 2a

6. Busque en un libro de álgebra diez ecuaciones cuadráticas y soluciónelas utilizando el programa creado en el punto anterior. Con los datos obtenidos llene una tabla como la siguiente: Ecuación

x1

x2

7. Crear un programa que reciba una temperatura en grados centígrados y devuelva su equivalente en grados Fahrenheit y grados Kelvin. Ayuda:

Grados centígrados se relaciona con grados Fahrenheit y grados Kelvin, mediante las siguientes ecuaciones:

9 F = C + 32 5 K = C + 273 C: Centígrados

76

Introducción a la Programación de Computadores

8. Programar un algoritmo que solicite al usuario dos frases y con ellas forme un mensaje, al juntarlas. 9. Crear un programa que solicite al usuario el valor del radio de un círculo y muestre en pantalla el diámetro y el valor de su área. Ayuda:

El área de un circulo se calcula mediante la ecuación:

A = πR 2 El diámetro es el doble del radio.

10. Crear un programa que pida un número y devuelva su inverso aditivo. Ayuda:

El inverso aditivo de un número, es otro número de igual valor pero con signo contrario.

11. Crear un programa que calcule el área de un triángulo con base en los valores de sus tres lados. Ayuda:

Dado un triángulo de lados a, b, c,

a c b su área se puede calcular mediante la ecuación:

A=

p ( p − a )( p − b)( p − c)

donde p es el semiperímetro del triángulo:

p=

a+b+c 2

12. Programar un algoritmo que permita calcular el 20% de un valor tecleado por el usuario.

PROBLEMAS AVANZADOS 1. Crear un programa para calcular el interés que se debe cobrar por un monto determinado de dinero. El programa debe solicitar el monto de dinero y el porcentaje que se cobra por interés, y con base en estos datos debe mostrar el valor del interés a cobrar. 2. Se cuenta que el hombre sabio que inventó el juego de ajedrez, cuando le preguntó el rey como deseaba que le pagará por haber creado tan magnifico juego, respondió: “Colocando un grano de trigo en el primer cuadro del tablero, 2 granos en segundo, 4 en el tercero, 8 en el cuarto y así sucesivamente”. En ese momento al rey le pareció un precio demasiado bajo, que incluso le preguntó si no deseaba algo más, a lo cual el sabio respondió que no. Pero el rey estaba muy equivocado, por que ni con todo el trigo del mundo iba a poder cumplir con la solicitud del sabio.

Flujo de Control I: Estructuras Secuenciales 77

Escriba un programa que solicite el número de un cuadro del tablero de ajedrez y nos informe cuantos granos de trigo se deben depositar en él. 3. En una universidad, donde se califica con notas que están comprendidas entre 0 y 5, se aplica a los estudiantes, en cada semestre, tres evaluaciones denominadas parciales, y un examen final. En todas las evaluaciones se aplican notas que están comprendidas en el rango de Para calcular la nota definitiva del estudiante, al término del semestre, se saca un porcentaje de cada evaluación y se suman los resultados. Los porcentajes asignados a cada evaluación se describen en la siguiente tabla: Evaluación Parcial 1 Parcial 2 Parcial 3 Examen final

Porcentaje 20% 20% 20% 40%

Crear un programa que permita ingresar el valor de las cuatro notas y calcule la nota definitiva de un estudiante. 4. Si cerca de la superficie de un planeta, se deja caer un objeto, este se demora un cierto tiempo en llegar al piso. Este tiempo se puede calcular por medio de la ecuación,

t=

2⋅h g

donde, t es el tiempo, h es el valor de la altura (en metros) y g es el valor de la gravedad (en m/seg2) del planeta. Construya un programa que calcule el tiempo empleado por un objeto en caer desde cualquier altura y en cualquier planeta. 5. Averigüe los valores de la gravedad para cada uno de los planetas del sistema solar y con ayuda del programa creado en el ejercicio anterior, llene la siguiente tabla para un objeto que se deja caer desde una altura de 10 metros. PLANETA Mercurio Venus Tierra Marte Júpiter Saturno Urano Neptuno Plutón

GRAVEDAD (m/seg2)

TIEMPO (seg)

78

Introducción a la Programación de Computadores

6. Un trabajador ha acordado trabajar por $10 el primer día del mes, $20 el segundo día, $40 el tercer día, $80 el cuarto día, y así sucesivamente hasta el último día del mes. Crear un programa que permita calcular el dinero que se le debe pagar al trabajador en cualquier día del mes. 7. Un banco presta dinero a sus clientes con un interés anual del 38%. El tiempo del préstamo es acordado entre los clientes y la entidad bancaria, de tal manera que al término del plazo acordado, el cliente debe pagar el total del préstamo incluido los intereses. Crear un programa que pida el número de meses de duración del crédito, y devuelva el interés acumulado y el total a pagar por parte del cliente. 8. El siguiente algoritmo busca intercambiar los valores numéricos de las variables X e Y, sin necesidad de utilizar una variable auxiliar: Reales: X, Y INICIO LEER X LEER Y X = ______ Y = ______ X = ______ ESCRIBIR X ESCRIBIR Y FIN

Determine las sentencias que hacen falta para lograr el objetivo del algoritmo, realice las pruebas de verificación y prográmelo.

5 FLUJO DE CONTROL II Estructuras selectivas

Contenido 5.1 Estructura selectiva 5.2 Alternativa simple 5.3 Alternativa doble 5.4 Alternativa múltiple 5.5 Ejercicios

ESTRUCTURAS SELECTIVAS Los algoritmos estudiados hasta ahora, han sido diseñados para que ejecuten todas las sentencias que los conforman en estricto orden, de arriba hacia abajo. Pero la mayoría de problemas prácticos requieren que las soluciones tomen en consideración algunas condiciones de tipo lógico para decidir si es necesario, o no, la ejecución de algunas sentencias del algoritmo, y de esta manera producir los resultados deseados. Después de todo el computador centra su importancia en el hecho de ser una máquina lógica, y es en este punto donde se hacen necesarias las estructuras selectivas. Una estructura selectiva se encarga de decidir bajo que condiciones se permite, o no se permite, la ejecución de una o varias sentencias de un algoritmo. De ahí que suele llamarse estructura de decisión o alternativa. Por ejemplo, si en un algoritmo se necesita realizar la división de dos números mediante la sentencia, d = a / b

todos sabemos que esta sentencia funcionará correctamente siempre y cuando el valor de la variable b no sea igual a cero. Si se deja que esta sentencia se ejecute sin ninguna condición previa se corre el riesgo que en algún momento el valor de b sea igual a cero, d = 2 / 0

en cuyo caso el computador generará un error, puesto que esta división, matemáticamente, no esta definida. Por lo tanto es necesario establecer la condición de que se ejecute esta sentencia únicamente cuando el valor de b sea diferente de cero. En las estructuras selectivas se evalúa una condición y con base en el resultado se decide si se realiza, o no, una determinada acción. Las condiciones se establecen usando expresiones lógicas que utilizan operadores relacionales como mayor que (>), menor que ( 25º ENTONCES

No

84 Introducción a la Programación de Computadores

Encender el ventilador FIN SI

Ejemplo: Representar en seudocódigo la siguiente estructura selectiva:

¿a = 100?

No

Si

c=b*a

b, c

Solución: Observe que, se han cambiado las ubicaciones de los caminos del Si y del No. Pero esto no implica que las consideraciones hechas anteriormente tengan que sufrir cambio alguno, solo es una cuestión de dibujo. Aquí se ha hecho de esta manera para que el lector sepa que cada camino lo puede colocar donde desee. La condición planteada en la estructura establece que el valor de la variable a debe ser igual a 100. SI a = 100 ENTONCES

En este caso, cuando se cumpla la condición, se debe realizar una acción compuesta por varias sentencias: c=b*a ESCRIBIR b ESCRIBIR c

Después de esta acción las líneas de flujo van hacia el punto de encuentro de los caminos del Si y del No. Por lo tanto ahí se establece la instrucción, FIN SI

En definitiva la representación en seudocódigo queda de la siguiente forma: SI a = 100 ENTONCES c=b*a ESCRIBIR b ESCRIBIR c FIN SI

Flujo de Control II: Estructuras Selectivas

85

Como se dijo anteriormente, la sangría aplicada a las sentencias de la acción objetivo significa que estas se ejecutan bajo la condición antes establecida, ayudando de esta manera a mejorar el diseño del algoritmo. Pero, para la ejecución por parte del computador no tiene ninguna función.

Ejemplo: Escribir el seudocódigo de la siguiente parte de diagrama de flujo:

¿sueldo > 1.000.000?

Si

i = sueldo * 5%

I

No

d = sueldo - i

d

Solución: El diagrama de flujo nos muestra que cuando el sueldo sea mayor a $1.000.000, se debe calcular un impuesto del 5% y mostrarlo en pantalla. Después de esto las líneas de flujo se interceptan, estableciendo el final de la condición (FIN SI). Pero las sentencias D = SUELDO – I ESCRIBIR D

se encuentran después del punto FIN SI, esto significa que estas se deben ejecutar por fuera de la condición establecida en la estructura. Por lo tanto la representación en seudocódigo queda de la siguiente manera: SI sueldo > 1.000.000 ENTONCES i = sueldo * 5% ESCRIBIR i FIN SI d = sueldo – i ESCRIBIR d

Ejemplo Dado el siguiente algoritmo, representarlo en seudocódigo y determinar las salidas para las entradas 3, 5 y 7.

86 Introducción a la Programación de Computadores

Inicio

N

¿N > 5?

Si

P=N*2

No

P = P + 10

P

Fin

Seudocódigo: El algoritmo pide la entrada de un valor numérico, para ser almacenado en la variable N, LEER N

Si se cumple la condición, que el número guardado en N sea mayor que 5, SI N > 5 ENTONCES

se debe aplicar la asignación P=N*2

En seguida las líneas de flujo del Si y el No se vuelven a encontrar, FIN SI

con lo cual las sentencias que le siguen no dependen de la condición y se ejecutaran sin importar su valor. P = P + 10 ESCRIBIR P

En definitiva, el seudocódigo del algoritmo queda como sigue: REAL: N INICIO LEER N SI N> 5 ENTONCES

Flujo de Control II: Estructuras Selectivas

87

P=P*2 FIN SI P = P + 10 ESCRIBIR P FIN

Prueba de escritorio: Condición Sentencias LEER N ¿N > 5? P = P + 10 LEER N ¿N > 5? P = P + 10 LEER N ¿N > 5? P=N*2 P = P + 10

No

No

Si

Variables N 3 3 3 5 5 5 7 7 7 7

P 0 0 10 0 0 10 0 0 14 24

En resumen, con base en la prueba de escritorio anterior las salidas son: Entrada 3 5 7

Salida 10 10 24

Ejemplo: Desarrollar un programa que permita dividir dos números, siempre y cuando el divisor sea diferente de cero. Análisis del problema

El programa debe pedir al usuario dos valores numéricos, y aplicar la fórmula D = dividendo / divisor Pero, se sabe que, matemáticamente solo se han definido aquellas divisiones donde el divisor no sea igual a cero, por que esta carece de lógica. Por lo tanto, antes de aplicar la formula se debe establecer la condición de que el divisor sea diferente de cero, divisor 0.

Solución algorítmica

Descripción algorítmica -

Leer los valores ingresados por el usuario y asignarlos a las variables dividendo y divisor Si el divisor es diferente de 0, entonces realizar la división mediante la aplicación de la formula, D = dividendo / divisor

-

Mostrar el resultado en pantalla

Diagrama de flujo En este algoritmo, el uso de la estructura de alternativa simple sirve para validar la entrada de datos, específicamente del divisor, y evitar que el computador genere un error debido a un mal dato ingresado por el usuario.

88 Introducción a la Programación de Computadores

Inicio

dividendo, divisor

¿divisor < > 0?

No

Si

D = dividendo / divisor

D

Fin Seudocódigo ALGORITMO: División de números reales VARIBLES REALES: dividendo, divisor, D INICIO LEER dividendo LEER divisor SI divisor 0 ENTONCES D = dividendo / divisor ESCRIBIR D FIN SI FIN

Codificación

'ALGORITMO: División de números reales 'VARIBLES REALES: dividendo, divisor, D 'INICIO Input dividendo Input divisor If divisor 0 Then D = dividendo / divisor Print D End If 'FIN

Práctica Programe el algoritmo División de números reales. -

Inicie SmallBasic y codifique el algoritmo División de números reales. Modifique el código del algoritmo como se muestra enseguida. 'ALGORITMO: División de números reales 'VARIBLES REALES: dividendo, divisor, D 'INICIO

Flujo de Control II: Estructuras Selectivas

89

Print "DIVISION DE REALES" Print Input "Dividendo: ", dividendo Input "Divisor : ", divisor If divisor 0 Then D = dividendo / divisor Print "Resultado: " + D End If 'FIN

-

Pruebe el programa ingresando divisores igual a cero, para observar su comportamiento.

Ejemplo: Desarrollar un programa que pida un número y nos informe si es mayor que 10. Análisis del problema:

El algoritmo deberá leer un número y mostrar un mensaje de texto informando si es mayor que 10. Para este caso cuando no se cumpla la condición, simplemente no debe pasar nada. Si al número ingresado por el usuario lo identificamos con la variable N, la condición que debe cumplir es que N sea mayor que 10, lo cual se expresa como, N > 10

Algoritmo:

Descripción general

-

Solicitar al usuario un número Si el número ingresado es mayor que 10 entonces escribir un mensaje indicando que cumple la condición

Diagrama de flujo Inicio

N

¿N > 10?

Si

N es mayor que 10

Fin Seudocódigo ALGORITMO: “Números mayores que 10” VARIABLES REALES: N INICIO LEER N SI N > 10 ENTONCES ESCRIBIR “Es mayor que 10” FIN SI FIN

No

90 Introducción a la Programación de Computadores

Codificación:

'ALGORITMO: "Números mayores que 10" 'VARIABLES REALES: N 'INICIO Input N If N > 10 Then Print "Es mayor que 10" End If 'FIN

Práctica: -

Inicie SmallBASIC y codifique el algoritmo Números mayores que 10. Ejecute el programa tecleando F9. Pruebe el funcionamiento del algoritmo ingresando diversos valores numéricos, incluidos negativos. Para mejorar el programa modifique su algoritmo como el siguiente: 'ALGORITMO: "Números mayores que 10" 'VARIABLES REALES: N 'INICIO Input "Número = ", N If N > 10 Then Print N + " es mayor que 10" End If 'FIN

Observe que, el signo + en N + " es mayor que 10"

se encarga de concatenar (unir) la cadena de texto formada por el valor contenido en la variable N y la cadena " es mayor que 10", para formar el mensaje que se escribirá en pantalla.

Ejemplo: Desarrollar un programa para solucionar ecuaciones algebraicas de primer grado con una sola incógnita. Análisis del problema:

Una ecuación de primer grado esta formada por expresiones algebraicas en las cuales el máximo exponente de la incógnita es igual a 1. En general estas ecuaciones son similares a la siguiente:

ax + b = 0 Donde x es la incógnita cuyo valor se debe encontrar y a y b son números reales conocidos, llamados coeficientes. Si se despeja la variable x, aplicando los métodos algebraicos conocidos, se establece que, el valor de la variable se puede encontrar mediante la fórmula,

x=

−b a

En consecuencia para resolver la ecuación, mediante la formula anterior, el computador necesita

Flujo de Control II: Estructuras Selectivas

91

conocer los valores de los coeficientes a y b. Pero, como puede observar en esta fórmula, el coeficiente a pasa a realizar el papel de divisor, por lo cual, para poder realizar la operación, nunca podrá ser igual a cero. Es decir, que el valor de x solo se puede calcular siempre y cuando el coeficiente a sea diferente de cero.

Solución algorítmica:

Descripción general

-

Leer los valores de los coeficientes a y b Si el coeficiente a es diferente de cero, aplicar la fórmula x = - b / a Mostrar el valor de la incógnita x

Diagrama de flujo Inicio

a, b

¿a 0?

No

Si

x=-b/a

x

Fin Si

Fin Observe que, el punto de encuentro de los caminos Si y No se ha demarcado con la etiqueta Fin Si. Esto facilita la traducción a seudocódigo, que viene a continuación. Seudocódigo ALGORITMO: Solución de ecuaciones lineales VARIABLES REALES: a, b INICIO LEER a LEER b SI a 0 ENTONCES x=-b/a ESCRIBIR x FIN SI FIN

Codificación:

'ALGORITMO: Solución de ecuaciones lineales 'VARIABLES REALES: a, b 'INICIO Input a Input b If a 0 Then x = - b / a Print x End If 'FIN

92 Introducción a la Programación de Computadores

Práctica -

Inicie SmallBASIC. Codifique el algoritmo Solución de ecuaciones lineales y pruebe la solución de algunas ecuaciones. Modifique el código del algoritmo de la siguiente forma: 'ALGORITMO: Solución de ecuaciones lineales 'VARIABLES REALES: a, b 'INICIO Print "Ecuación de la forma: ax + b = 0" Input "a = ", a Input "b = ", b If a 0 Then x = - b / a Print "x = ", x End If 'FIN

-

Proponga algunas ecuaciones y llene la siguiente tabla con sus soluciones: Ecuación

Solución x=?

5x + 1 = 0 -4x + 10 = 0 5x – 5 = 0 -0.5x – 12 = 0 0x + 4 = 0

Observe que, cuando se ingresa 0 para el coeficiente a, no ocurre absolutamente nada, y el programa termina su ejecución. Si este algoritmo no se hubiera programada teniendo en cuenta la condición establecida, se generaría un error.

ALTERNATIVA DOBLE (SI-ENTONCES-SINO) En la alternativa simple, como pudo observarse en los diagramas de flujo, únicamente se ejecutan acciones por el camino del Si, mientras que por el camino del No nunca ocurre nada. La alternativa doble permite ejecutar acciones también en este último camino, lo cual permite al algoritmo realizar acciones en el caso de que se cumpla la condición y también en el caso de que no se cumpla. Diagrama de flujo

Flujo de Control II: Estructuras Selectivas

¿Condición?

93

No

Acción 2 Si

Acción 1

Como puede observarse, cuando se cumple la condición se ejecuta la Acción 1 y cuando no se cumple, se ejecuta la Acción 2. Teniendo en cuenta que tanto Acción 1 como Acción 2, cada una de ellas esta formada por un conjunto de sentencias que puede ejecutar el computador. Al igual que la alternativa simple, la condición se tiene en cuenta hasta el punto donde se encuentran los caminos Si y No; a partir de este punto la ejecución del algoritmo continúa independientemente de la existencia de la condición.

Seudocódigo La acción que se ejecuta cuando se cumple la condición dada, Acción 1, se escribe a continuación de la palabra ENTONCES, y la acción contenida en el camino del No, Acción 2, se escribe después de la palabra SINO. La estructura general de la alternativa doble es la siguiente: SI ENTONCES

SINO

FIN SI

Codificación Para codificar en lenguaje BASIC las palabras clave SI, ENTONCES, SINO y FIN SI, basta con remplazarlas con sus equivalentes BASIC, según la siguiente tabla: SEUDOCODIGO

SI ENTONCES SINO FIN SI

CODIGO BASIC

If Then Else End if

Por lo tanto, la alternativa doble expresada en seudocódigo tiene la siguiente forma:

94 Introducción a la Programación de Computadores

If Then

Else

End if

Ejemplo Desarrollar un programa que solicite dos números al usuario e informe si son diferentes o iguales. Análisis del problema:

Si se tienen dos valores numéricos, puede suceder que sean iguales o que sean diferentes, pero nunca las dos cosas al mismo tiempo. La posibilidad de ser diferentes se presenta únicamente cuando al analizar si son iguales se comprueba que esto es falso. Por lo tanto, basta con analizar únicamente si los dos números son iguales y responder adecuadamente al resultado de dicho análisis. Para la solución de este problema a los números en estudio los identificaremos como a y b, respectivamente.

Solución algorítmica:

Descripción general:

-

Solicitar al usuario el ingreso de los valores numéricos y almacenarlos en las variables a y b. Si a es igual a b, mostrar el mensaje "Los números son iguales", de lo contrario mostrar el mensaje "Los números son diferentes".

Diagrama de flujo Inicio

a, b

¿a = b?

No

Si

“Los números son diferentes” “Los números son iguales”

Fin Si

Fin Seudocódigo ALGORITMO: Igualdad y diferencia VARIABLES REALES: a, b INICIO LEER a LEER b SI a = b ENTONCES ESCRIBIR “Los números son iguales” SINO ESCRIBIR “Los números son diferentes” FIN SI

Flujo de Control II: Estructuras Selectivas

95

FIN Codificación:

'Algoritmo: "Igualdad y diferencia" 'Variables reales: a, b 'INICIO Input a Input b If a = b Then Print "Los números son iguales" Else Print "Los números son diferentes" End If 'FIN

Práctica Programe el anterior algoritmo en SmallBASIC y compruebe su funcionamiento ingresando diferentes números. Además, haga los cambios necesarios para que su programa tenga una mejor presentación.

Ejemplo: En un supermercado a los clientes que han comprado un valor superior a $50.000, se les hace un descuento del 20% y a los demás tan solo el 5%. Desarrollar un programa que permita saber el descuento que se debe aplicarse a cada cliente y el total a pagar. Análisis del problema:

El ejercicio plantado establece que a aquellos clientes cuya compra sume más de $50.000 se les aplique un descuento del 20%, el cual, matemáticamente, se calcula mediante la siguiente ecuación:

D=

20 C 100

D: Descuento C: Compra Según el problema, a los demás clientes, es decir a aquellos que han realizado compras cuyo valor suma $50.000 o menos, se les debe aplicar un 5% de descuento. Este descuento se calcula de la siguiente forma:

D=

5 C 100

Al final, para calcular el valor total que debe pagar el cliente, se debe restar al valor de la compra el descuento aplicado.

T =C−D T: Total a pagar

Solución algorítmica:

Descripción general

-

Leer el valor de la compra realizada por el cliente y almacenarlo en la variable C. Si el valor de C es mayor a 50.000, aplicar un descuento del 20%, de lo contrario aplicar un descuento del 5%. Calcular el valor total que debe cancelar el cliente. Escribir en pantalla el descuento aplicado y el total a pagar.

Diagrama de flujo

96 Introducción a la Programación de Computadores

Inicio

C

¿C > 50.000?

No

Si

D = (20 / 100) * C

D = (5 / 100) * C

Fin Si

T= C-D

D, T

Fin Seudocódigo ALGORITMO: Descuentos en el supermercado VARIABLES REALES: C, D, T INICIO LEER C SI C > 50000 ENTONCES D = (20 / 100) * C SINO D = (5 / 100) * C FIN SI T=C–D ESCRIBIR D ESCRIBIR T FIN

Codificación:

'ALGORITMO: Descuentos en el supermercado 'VARIABLES REALES: C, D, T 'INICIO Input C If C > 50000 Then D = (20 / 100) * C Else D = (5 / 100) * C End If T = C - D Print D Print T 'FIN

Flujo de Control II: Estructuras Selectivas

97

Práctica -

Programe el algoritmo anterior en SmallBASIC. Modifique el algoritmo como se muestra a continuación: 'Algoritmo: DESCUENTOS DEL SUPERMERCADO 'Variables reales: C, D, T 'INICIO Input "Compra: ", C If C > 50000 Then D = (20 / 100) * C Else D = (5 / 100) * C End If T = C - D Print "Descuento: ", D Print "A pagar: ", T 'FIN

-

Pruebe el programa ingresando diversos valores de compras.

ALTERNATIVA MULTIPLE La estructura de decisión múltiple evalúa una expresión, que puede tomar uno de entre varios valores distintos, y de acuerdo al valor tomado, el flujo del algoritmo sigue un camino determinado, para ejecutar la acción que corresponda al caso. En las estructuras de selección estudiandas hasta el momento, el algoritmo solo tiene la posibilidad de continuar por uno de dos caminos: el camino del Si o el camino del No. La alternativa múltiple permite el diseño de algoritmos que presentan la posibilidad de escoger el camino a seguir de entre más de dos caminos posibles.

Diagrama de flujo Para representar en diagrama de flujo una estructura con alternativa múltiple se utiliza el símbolo de decisión múltiple, el cual contiene la expresión que se desea evaluar y los posibles valores que puede tomar establecen los caminos a seguir. En cada camino se encuentran las acciones (o conjuntos de sentencias) que se desean realizar.

Expresión

Valor 1

Acción 1

Valor 2

Acción 2

Valor 3

Acción 3

Valor N

Acción N

98 Introducción a la Programación de Computadores

La expresión puede estar formada por una variable o una serie de operaciones, ya sea matemáticas, de cadena o de algún otro tipo.

Seudocódigo La estructura alternativa múltiple posee deferentes formas de expresarse mediante seudocódigo, dependiendo del lenguaje de programación que se utilice. Algunos lenguajes, incluso algunas versiones de BASIC, poseen instrucciones que permiten expresar el algoritmo como si se tratara de seleccionar casos. Para acercarnos a las instrucciones manejadas por la versión BASIC utilizada en nuestras practicas, se utilizará la estructura SI-ENTONCES-SINO_SI. La estructura general de la alternativa múltiple en seudocódigo es la siguiente: SI ENTONCES

SINO_SI ENTONCES

SINO_SI ENTONCES

.... SINO_SI ENTONCES

FIN SI

El signo igual (=), utilizado en la estructura, cumple el papel de operador relacional o de comparación, “es igual a”. Como puede observarse, el algoritmo se encarga de comparar la expresión con cada uno de los posibles valores, estableciendo una condición. Cuando se cumple la condición de igualdad entre la expresión y uno de los valores, inmediatamente se realiza la acción que se encuentra a continuación de la palabra ENTONCES, y una vez echo esto la ejecución del algoritmo continua en la instrucción FIN SI, saliendo de la estructura alternativa. En muchas situaciones puede ser necesario realizar alguna acción cuando no se cumplen todas las condiciones formadas entre la expresión y los valores establecidos. Para esto se puede agregar una instrucción SINO y la correspondiente acción alternativa. Así: SI ENTONCES

SINO_SI ENTONCES

SINO_SI ENTONCES

.... SINO_SI ENTONCES

SINO

FIN SI

Flujo de Control II: Estructuras Selectivas

99

Codificación La codificación de la estructura alternativa múltiple se realiza reemplazando las palabras básicas por sus equivalentes BASIC. SEUDOCODIGO

SI ENTONCES SINO_SI SINO FIN SI

CODIGO BASIC

If Then ElseIf Else End if

Por lo tanto, la codificación de la estructura alternativa múltiple tiene la siguiente forma general: If Then

ElseIf Then

ElseIf Then

... ElseIf Then

Else

End If

Ejemplo: Determinar si un número tecleado por el usuario es positivo, igual a cero o negativo. Análisis del problema:

Si se tiene un valor numérico, al cual identificaremos como NUMERO, este es positivo cuando es mayor que cero y negativo cuando es menor que cero. Es importante tener en cuenta que, dado un valor numérico, tan solo una de las tres opciones puede ser verdadera: NUMERO es mayor que 0 NUMERO es igual a 0 NUMERO es menor que 0 Esta característica permite evaluar un numero mediante el uso de una estructura de alternativa múltiple ya que en esta estructura cuando se cumple una condición las demás no se tienen en cuenta, por que ya no es necesario.

Solución algorítmica:

Descripción general

-

Leer el número ingresado por el teclado y almacenarlo en la variables NUMERO. Si NUMERO es mayor que cero, escribir en pantalla el mensaje “Número positivo”, De lo contrario si NUMERO es igual que cero, escribir en pantalla el mensaje “Nulo”, De lo contrario si NUMERO es menor que cero, escribir el mensaje “Número negativo”.

Diagrama de flujo

100 Introducción a la Programación de Computadores

Inicio

NUMERO

NUMERO

>0

“Número positivo”

=0

0 ENTONCES ESCRIBIR “Número positivo” SINO_SI NUMERO = 0 ENTONCES ESCRIBIR “Número neutro” SINO_SI NUMERO < 0 ENTONCES ESCRIBIR “Número negativo” FIN SI FIN

Codificación:

'ALGORITMO: Tipos de números 'VARIABLES: NUMERO 'INICIO Input NUMERO If NUMERO > 0 Then Print "Número positivo" ElseIf NUMERO = 0 Then Print "Número neutro" ElseIf NUMERO < 0 Then Print "Número negativo" End if 'FIN

Ejemplo: Desarrollar un programa que solicite dos números y determine cual es el mayor. En caso de ser iguales indicarlo mostrando un mensaje apropiado. Análisis del problema:

Dados dos números, a los cuales llamaremos A y B, entre ellos se cumple una de las tres opciones siguientes: A es igual a B, A es mayor que B o A es menor que B.

Flujo de Control II: Estructuras Selectivas 101

Si se cumple la primera opción, las demás ya no se cumplirán. De igual manera cuando se cumplen la segunda o la tercera opción. En consecuencia la comparación entre los números se puede realizar por medio de una estructura de alternativa múltiple.

Solución algorítmica:

Descripción general

-

Leer los números ingresados por el teclado y almacenarlos en las variables A y B Si A es igual a B, escribir en pantalla el mensaje “Los números son iguales” De lo contrario, si A es mayor que B, escribir el mensaje “A es el número mayor” Si no se cumple ninguna de las anteriores, significará que “B es el número mayor”

Diagrama de flujo Inicio

A, B

A

=B

M = “Números iguales”

>B

M = A + “ es mayor”

M = B + “ es mayor”

Fin Si

M

Fin A diferencia del algoritmo anterior, que escribe el mensaje en cada uno de los caminos por los cuales se ejecuta, en este se guarda el mensaje en una variable de cadena y se escribe después de salir de la estructura de alternativa. Esta es tan solo otra forma de manejar la impresión de mensajes resultado de un análisis de condiciones. Seudocódigo ALGORITMO: Número mayor VARIABLES REALES: A, B VARIABLES DE CADENA: M INICIO LEER A LEER B SI A = B ENTONCES M = “Números iguales” SINO_SI A > B ENTONCES M = A + “ es mayor” SINO M = B + “ es mayor” FIN SI ESCRIBIR M FIN

102 Introducción a la Programación de Computadores

Codificación:

'ALGORITMO: Número mayor 'VARIABLES REALES: A, B 'VARIABLES DE CADENA: M 'INICIO Input A Input B If A = B Then M = "Números iguales" ElseIf A > B Then M = A + " es mayor" Else M = B + " es mayor" End If Print M 'FIN

Ejemplo: Desarrollar un algoritmo que escriba en pantalla los nombres de los días de la semana con base en el número del día introducido por el usuario desde el teclado. Análisis del problema:

El programa que se quiere desarrollar, debe solicitar un número comprendido entre 1 y 7. Dependiendo del valor ingresado debe mostrar en pantalla el nombre del día de la semana que se corresponde con ese numero, siguiendo la siguiente tabla: 1. 2. 3. 4. 5. 6. 7.

Lunes Martes Miércoles Jueves Viernes Sábado Domingo

Adicional a ello vamos a tener en cuenta el caso en que el usuario escriba cualquier otro número fuera del rango admitido. En este caso se debe mostrar un mensaje informando que ese valor no es válido.

Diseño del algoritmo:

Diagrama de flujo numDia : Almacena el numero de día ingresado desde el teclado D: Almacena el nombre del día de la semana

Flujo de Control II: Estructuras Selectivas 103

Inicio

numDia

numDia

1

D = “Lun”

2

3

D = “Mar”

D = “Mié”

4

5

D = “Jue”

D = “Vie”

Fin Si

D

Fin

Descripción en seudocódigo ALGORITMO: Días de la semana VARIABLES: numDia, d INICIO LEER numDia SI numDia = 1 ENTONCES D = “Lunes” SINO_SI numDia = 2 ENTONCES D = “Martes” SINO_SI numDia = 3 ENTONCES D = “Miércoles” SINO_SI numDia = 4 ENTONCES D = “Jueves” SINO_SI numDia = 5 ENTONCES D = “Viernes” SINO_SI numDia = 6 ENTONCES D = “Sábado” SINO_SI numDia = 7 ENTONCES D = “Domingo” SINO D = “(Número no válido)” FIN SI ESCRIBIR D FIN

Codificación:

'ALGORITMO: Días de la semana 'VARIABLES: numDia, D 'INICIO Input numDia If numDia = 1 Then D = "Lunes" ElseIf numDia = 2 Then D = "Martes" ElseIf numDia = 3 Then

6

D = “Sáb”

7

D = “Dom”

D = “(No vale)”

104 Introducción a la Programación de Computadores

D = "Miércoles" ElseIf numDia = 4 Then D = "Jueves" ElseIf numDia = 5 Then D = "Viernes" ElseIf numDia = 6 Then D = "Sábado" ElseIf numDia = 7 Then D = "Domingo" Else D = "(No válido)" End If Print D 'FIN

Práctica: -

Codifique el algoritmo Días de la semana en SmallBASIC y ejecútelo para probar su funcionamiento. Realice algunos cambios en el código para mejorar la presentación del programa y vuelva a correrlo. 'ALGORITMO: Días de la semana 'VARIABLES: numDia, D 'INICIO Print "DIAS DE LA SEMANA" Print Input "Día número: ", numDia If numDia = 1 Then D = "Lunes" ElseIf numDia = 2 Then D = "Martes" ElseIf numDia = 3 Then D = "Miércoles" ElseIf numDia = 4 Then D = "Jueves" ElseIf numDia = 5 Then D = "Viernes" ElseIf numDia = 6 Then D = "Sábado" ElseIf numDia = 7 Then D = "Domingo" Else D = "(No válido)" End If Print "Nombre del día: ", D 'FIN

Ejemplo: Un maestro, en cada periodo, aplica a sus estudiantes tres evaluaciones, las cuales las califica con notas numéricas comprendidas entre 1 y 5. Con las tres notas de cada estudiante calcula su promedio y de acuerdo a este asigna la evaluación conceptual, de acuerdo a la siguiente tabla:

Flujo de Control II: Estructuras Selectivas 105

Promedio Entre 1.0 y 2.0 Entre 2.0 y 3.0 Entre 3.0 y 4.0 Entre 4.0 y 5.0 5.0

Valoración DEFICIENTE INSUFICIENTE ACEPTABLE SOBRESALIENTE EXCELENTE

Desarrollar una programa que ayude al maestro a determinar la evaluación conceptual de cada estudiante, con base en sus tres calificaciones. Análisis del problema:

Lo primero que se debe conocer son las tres calificaciones asignadas al estudiante. Estas deben ser tecleadas por el usuario y leídas por el algoritmo de nuestro programa. Conocidas las tres notas se debe calcular su promedio. Matemáticamente, el promedio de tres números, se calcula sumándolos y dividiendo el resultado entre 3. Si a los números les llamamos n1, n2 y n3, el promedio, p, se calcula mediante la fórmula:

p=

n1 + n 2 + n3 3

Según la tabla de evaluación se debe determinar el rango numérico en el cual queda el valor de p, y de acuerdo a este, establecer la valoración del estudiante. Para determinar si p esta en el rango 1.0 y 2.0, se debe determinar el valor de verdad de la expresión, p es mayor o igual que 1.0 y p es menor que 2.0 Si esta condición es verdadera, el valor de p esta en este rango, de lo contrario no. Observe que, en la condición, p puede ser igual a 1.0, pero nunca puede ser igual a 2.0, ya que este valor se tomará como parte del siguiente rango. De la misma manera que el caso anterior se debe establecer las condiciones para los rangos siguientes. Así: Para el rango 2.0 y 3.0: p es mayor o igual que 2.0 y p es menor o igual que 3.0 Para el rango 3.0 y 4.0: p es mayor o igual que 3.0 y p es menor o igual que 4.0 Para el rango 4.0 y 5.0: p es mayor o igual que 4.0 y p es menor o igual que 5.0 Para el valor 5.0: p es igual a 5.0

Diseño del algoritmo:

Descripción general

-

Leer los valores de las calificaciones y almacenarlos en las variables n1, n2 y n3, respectivamente Calcular el promedio de las tres notas mediante la formula: p = (n1 + n2 + n3) / 3 Si p es mayor o igual que 1.0 y p es menor que 2.0, escribir en pantalla la palabra “DEFICIENTE”, De lo contrario, si p es mayor o igual que 2.0 y p es menor que 3.0, escribir en pantalla la palabra “INSUFICIENTE”, De lo contrario, si p es mayor o igual que 3.0 y p es menor que 4.0, escribir en pantalla la palabra “ACEPTABLE”, De lo contrario, si p es mayor o igual que 4.0 y p es menor que 5.0, escribir en pantalla la palabra “SOBRESALIENTE”, De lo contrario, si p es igual a 5.0, escribir en pantalla la palabra “EXCELENTE”. Si no se cumple ninguna de las condiciones anteriores escribir “Las notas no son válidas”

Diagrama de flujo

106 Introducción a la Programación de Computadores

Inicio

n1, n2, n3

p = (n1 + n2 + n3) / 3

p

>=1 y =2 y =3 y =4 y = 1.0 Y p < 2.0) ENTONCES EV = “DEFICIENTE” SINO_SI (p >= 2.0 Y p < 3.0) ENTONCES EV = “INSUFICIENTE” SINO_SI (p >= 3.0 Y p < 4.0) ENTONCES EV = “ACEPTABLE” SINO_SI (p >= 4.0 Y p < 5.0) ENTONCES EV = “SOBRESALIENTE” SINO_SI (p = 5.0) ENTONCES EV = “EXCELENTE” SINO EV = “Notas no validas” FIN SI ESCRIBIR p ESCRIBIR EV FIN

Codificación:

Para codificar el operador lógico Y se debe utilizar su equivalente BASIC AND.

Flujo de Control II: Estructuras Selectivas 107

'ALGORITMO: Evaluación valorativa 'VARIABLES REALES: n1, n2, n3, p 'VARIABLES DE CADENA: EV 'INICIO Input n1 Input n2 Input n3 p = (n1 + n2 + n3) / 3 If (p >= 1.0 And p < 2.0) Then EV = "DEFICIENTE" ElseIf (p >= 2.0 And p < 3.0) Then EV = "INSUFICIENTE" ElseIf (p >= 3.0 And p < 4.0) Then EV = "ACEPTABLE" ElseIf (p >= 4.0 And p < 5.0) Then EV = "SOBRESALIENTE" ElseIf (p = 5.0) Then EV = "EXCELENTE" Else EV = "Notas no válidas" End If Print p Print EV 'FIN

Práctica -

Codifique el algoritmo Evaluación valorativa en SmallBASIC. Pruebe el programa ingresando algunas notas y verificando su salida. Modifique el algoritmo, en la siguiente forma: 'ALGORITMO: Evaluación valorativa 'VARIABLES REALES: n1, n2, n3, p 'VARIABLES DE CADENA: EV 'INICIO Print "Digite las notas del estudiante" Print 'Deja un espacio en blanco Input "Nota 1: ", n1 Input "Nota 2: ", n2 Input "Nota 3: ", n3 p = (n1 + n2 + n3) / 3 If (p >= 1.0 And p < 2.0) Then EV = "DEFICIENTE" ElseIf (p >= 2.0 And p < 3.0) Then EV = "INSUFICIENTE" ElseIf (p >= 3.0 And p < 4.0) Then EV = "ACEPTABLE" ElseIf (p >= 4.0 And p < 5.0) Then EV = "SOBRESALIENTE" ElseIf (p = 5.0) Then EV = "EXCELENTE" Else EV = "Notas no válidas"

108 Introducción a la Programación de Computadores

End If Print 'Deja un espacio en blanco Print "Promedio: ", p Print "Valoración: ", EV 'FIN

6 FLUJO DE CONTROL III Estructuras repetitivas

Contenido 6.1 Estructuras repetitivas 6.2 Estructura MIENTRAS 6.3 Estructura REPETIR-HASTA_QUE 6.4 Estructura PARA

110 Introducción a la Programación de Computadores

ESTRUCTURAS REPETITIVAS Los computadores, básicamente han sido diseñados para realizar cálculos en los cuales se deben repetir una o varias operaciones. Un tipo muy importante de estructura en el campo de la programación, es el algoritmo que permite repetir una o varias instrucciones un número determinado de veces. Supongamos que se desea construir un algoritmo para escribir diez veces la palabra “Tangua” en la pantalla del computador. Con base en lo estudiado en las secciones anteriores, un algoritmo que nos puede ayudar a resolver este problema es el siguiente: INICIO ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” ESCRIBIR “Tangua” FIN

Como puede observarse para que se imprima diez veces en pantalla la palabra “Tangua”, el algoritmo debe incluir diez instrucciones ESCRIBIR “Tangua”. Pero, en la práctica muchos problemas requieren la repetición de una o más operaciones un número de veces que puede llegar a miles. En consecuencia este tipo de algoritmos resulta poco práctico para trabajar con operaciones repetitivas. Para ello se han diseñado estructuras algorítmicas que permiten repetir una o más instrucciones sin necesidad de tener que escribir demasiadas líneas de programación. Las estructuras que repiten una secuencia de instrucciones un número determinado de veces se llaman bucles y a cada ejecución de las instrucciones que se desea repetir se le denomina iteración. Por ejemplo, el anterior algoritmo, puede ser sustituido por el siguiente: INICIO REPETIR ESCRIBIR “Tangua” contador = contador + 1 HASTA_QUE contador = 10 FIN

Este último algoritmo utiliza el bucle REPETIR–HASTA_QUE, el cual repite diez veces la ejecución de las instrucciones, ESCRIBIR “Tangua” contador = contador + 1

Donde la variable contador se encarga de contar el número de veces que se lleva repitiendo la ejecución de las instrucciones. La iteración es la acción que realizan las dos instrucciones cada vez que se repiten. En este caso podemos decir que el algoritmo realiza diez iteraciones.

ESTRUCTURA MIENTRAS

Flujo de Control III: Estructuras repetitivas 111

La estructura repetitiva MIENTRAS permite repetir las instrucciones del cuerpo del bucle mientras se cumpla una determinada condición. En la estructura MIENTRAS la primera cosa que sucede es que se evalúa la condición (una expresión booleana). Si se evalúa falsa, no se toma ninguna acción y el programa continúa en la siguiente instrucción después del bucle. En cambio si se cumple la condición, es decir que la expresión es verdadera, entonces se ejecutan las instrucciones que conforman el cuerpo del bucle, después de lo cual se vuelve a evaluar la condición. Este proceso se repite una y otra vez, mientras la expresión booleana sea verdadera.

Diagrama de flujo El diagrama de flujo de la estructura MIENTRAS esta formado por un símbolo de condición, dentro del cual se incluye la expresión booleana. Al igual que se hizo en las estructuras selectivas simples, la condición puede expresarse mediante una pregunta, cuyas posibles respuestas solo pueden ser Si o No, lo cual tan solo es una forma de dar mayor compresión lógica a la representación del algoritmo.

No ¿Condición?

Si

Acción repetitiva

Se había dicho en las secciones anteriores que los algoritmos son leídos y ejecutados, por parte del computador, de arriba hacia abajo en estricto orden, pero en las estructuras repetitivas podrá comprobarse que la ejecución muchas veces no cumple con esta regla. Sin embargo, debe entenderse que la ejecución siempre busca hacerse de arriba hacia abajo, pero son las estructuras algorítmicas las que exigen el cambio de sentido.

Representación en seudocódigo Para traducir a seudocódigo el bucle MIENTRAS, se considera únicamente el caso en que la condición si se cumple. Las acciones contenidas por el camino del No, corresponden a la continuación del algoritmo después de salir del bucle. Su forma general es la siguiente: MIENTRAS

FIN MIENTRAS

112 Introducción a la Programación de Computadores

En la mayoría de los casos, dentro de las instrucciones que conforma la acción objetivo debe existir alguna instrucción que modifique un valor relacionado con la condición, para que en algún momento esta deje de cumplirse y poder salir del bucle. Si esto no ocurre, el bucle continuaría ejecutándose indefinidamente.

Codificación Para codificar el algoritmo en lenguaje BASIC, basta con remplazar las palabras MIENTRAS y FIN MIENTRAS, por sus equivalentes BASIC. SEUDOCODIGO

MIENTRAS FIN MIENTRAS

CODIGO BASIC

While Wend

En consecuencia, la codificación de la estructura MIENTRAS tiene la siguiente forma general: While

Wend

La palabra Wend, en realidad es una abreviación de las palabras inglesas While End.

Ejemplo: Desarrollar un algoritmo para escribir en pantalla los números del 1 al 20. Análisis del problema:

Para escribir en pantalla los números solicitados el algoritmo debe generar cada uno de los números y escribirlos uno a uno. La tarea consiste básicamente en generar un número y escribirlo en pantalla. Enseguida se debe repetir la acción hasta completar los veinte números. Para generar cada número se utilizará la variable num, la cual se incrementará una unidad en cada iteración, mediante la asignación num = num + 1 Inmediatamente se generé el numero se lo debe escribir en pantalla, mediante la instrucción ESCRIBIR num La repetición de estas instrucciones se debe realizar mientras num sea menor a 20. No se deja que num tome el valor 20 porque este valor se obtendrá cuando la variable tome el valor 19 y se incremente en 1.

Solución algorítmica:

Descripción general -

Inicializar la variable num a cero, para asegurarse que el incremento se inicia en el valor apropiado Generar un valor numérico incrementado la variable num en 1 y escribirlo inmediatamente Repetir el anterior paso mientras la variable num sea menor o igual a 20

Observación: Aunque algunos compiladores inicializan las variables con el valor cero, sin necesidad de especificarlo, existen otros que no lo hacen así, por lo cual el programador debe tomar sus propias precauciones. En este caso la inicialización se debe hacer antes de entrar en el bucle. Diagrama de flujo

Flujo de Control III: Estructuras repetitivas 113

Inicio

num = 0

¿num < = 20?

No

Si

num = num + 1

num

Fin

ALGORITMO: Números del 1 al 20 VARIABLES REALES: num INICIO num = 0 MIENTRAS (num