Aprendiendo a Programar a Partir de Cero - Parte 1%2c 1-40

40
Antes de empezar a programar computadores es necesario adquirir algunos conceptos fundamentales para dicha tarea. Con el fin de no enfrentar al tiempo el aprendizaje de tantos temas nuevos, primero se hace el trabajo en un lenguaje algorítmico que se va definiendo poco a poco, de tal forma que el conocimiento se adquiera de forma gradual y firme. En este libro sólo se trabaja con lenguaje algorítmico, es decir, sólo se hace uso de papel y lápiz; el aprendiz está concentrado en un solo asunto. Sin embargo, continuamente se hace referencia al computador (o máquina) porque el fin es prepararse para programarlo. El lenguaje algorítmico no dependerá de ninguna máquina en especial. Un algoritmo es una secuencia de pasos o instrucciones cuya realización tiene un fin determinado. Ejemplo: Retirar dinero de un cajero automático Retirar dinero de un cajero automático es una tarea que los seres humanos realizan cada vez con más frecuencia. Para llevarla a cabo, grosso modo se realizan las siguientes acciones: Insertar la tarjeta Seleccionar el idioma Ingresar la clave Seleccionar la operación por realizar Ingresar los datos de acuerdo con la operación seleccionada Obtener el resultado de la operación Este conjunto de acciones realizadas con un fin determinado, en dicho orden, es lo que se llama algoritmo.

Transcript of Aprendiendo a Programar a Partir de Cero - Parte 1%2c 1-40

����������������������������� ��������� �����������������

��������� ������������ ������������ ������������ ���

Antes de empezar a programar computadores es necesario adquirir algunos conceptos fundamentales para dicha tarea. Con el fin de no enfrentar al tiempo el aprendizaje de tantos temas nuevos, primero se hace el trabajo en un lenguaje algorítmico que se va definiendo poco a poco, de tal forma que el conocimiento se adquiera de forma gradual y firme. En este libro sólo se trabaja con lenguaje algorítmico, es decir, sólo se hace uso de papel y lápiz; el aprendiz está concentrado en un solo asunto. Sin embargo, continuamente se hace referencia al computador (o máquina) porque el fin es prepararse para programarlo. El lenguaje algorítmico no dependerá de ninguna máquina en especial. Un algoritmo es una secuencia de pasos o instrucciones cuya realización tiene un fin determinado. Ejemplo: Retirar dinero de un cajero automático Retirar dinero de un cajero automático es una tarea que los seres humanos realizan cada vez con más frecuencia. Para llevarla a cabo, grosso modo se realizan las siguientes acciones: � Insertar la tarjeta � Seleccionar el idioma � Ingresar la clave � Seleccionar la operación por realizar � Ingresar los datos de acuerdo con la operación seleccionada � Obtener el resultado de la operación Este conjunto de acciones realizadas con un fin determinado, en dicho orden, es lo que se llama algoritmo.

��� ��������������� ���� ��������������������

Un algoritmo es una secuencia de pasos o instrucciones, realizados en un orden determinado, con un fin claramente definido. Un lenguaje algorítmico permite plasmar de manera clara, a través de sus herramientas, los pasos o instrucciones contemplados en un algoritmo. En general, un lenguaje algorítmico es bastante laxo con respecto a un lenguaje de computador porque lo que se quiere con él es expresar las ideas de una forma parecida pero no tan formal a como lo hace un lenguaje que entiende el computador. Sin embargo, en este libro el lenguaje algorítmico que se utiliza es sencillo pero bastante formal con el fin de que constituya una verdadera preparación para iniciar el aprendizaje de un lenguaje de computador. Las personas con algún grado de ilustración en programación de computadores encontrarán que el lenguaje algorítmico utilizado en este libro contempla muchos temas que en general se cubren sólo cuando se está trabajando con un lenguaje de computador. No existe un solo lenguaje algorítmico, sería como pensar que todos los seres humanos se expresan igual. Lo que sí es importante en este primer curso de Programación de Computadores es que el estudiante sea disciplinado en el uso del lenguaje que está trabajando en su clase. Los frutos de esa disciplina se verán cuando haga sus prácticas con un lenguaje de computador. La utilización del lenguaje algorítmico será un paso intermedio en la verdadera comunicación del estudiante con el computador. Si esta parte se cubre satisfactoriamente, el trabajo de programar un computador se va a facilitar bastante. Los seres humanos ejecutan algoritmos permanentemente. Lo que pasa es que no son conscientes de ello. Por ejemplo, hacer una carrera profesional es un algoritmo, ¿verdad? Cada acción que se ejecuta para lograr la meta de obtener un título profesional se llamará instrucción en el lenguaje algorítmico y tendrá una sintaxis determinada, esto es, habrá que expresarla de una forma no ambigua, que el lenguaje algorítmico entienda.

�������� ���������������� ���������������� ���������������� ��������� ��� ��� ��� ��

Para empezar, todo algoritmo tendrá la siguiente estructura:

�������������� �������� ����

���� ���

������

������

���� ���

donde ��� ��� y ���� �� son delimitadores del cuerpo del algoritmo. Ellos indican en dónde empieza y en dónde termina pero no implican la ejecución de acción alguna. Sin embargo su uso es obligatorio.

����������������������������� ��������� �����������������

Los delimitadores ��� ��� y ���� �� son las dos primeras palabras reservadas de este lenguaje. Una palabra reservada es aquella que tiene un significado especial dentro del lenguaje y por lo tanto tiene un uso restringido. El cuerpo del algoritmo, como se verá más adelante, está conformado por instrucciones ejecutables y no ejecutables, encargadas en general de la reserva de memoria, obtención o entrada de los datos, procesamiento de esos datos y emisión o presentación de resultados.

CUERPO DE UN ALGORITMO Entrada Salida Como se verá a lo largo de este libro, la entrada, el procesamiento y la presentación de resultados no se lleva a cabo en ese orden necesariamente. Puede darse, por ejemplo, entrada, procesamiento, entrada, procesamiento y luego sí la presentación de resultados. Es recomendable que los algoritmos se escriban totalmente en minúscula o en mayúscula, no sólo por presentación sino porque algunos lenguajes de computador así lo exigen. El nombre del algoritmo puede estar compuesto por caracteres alfanuméricos y por el caracter de subrayado ( _ ) y debe empezar con una letra. Los caracteres alfabéticos con tilde no son válidos. ���������� !"����������� !"����������� !"����������� !"�����

Indica la terminación normal de un algoritmo y libera a la máquina de la tarea que está ejecutando. Todo algoritmo debe tener por lo menos una instrucción ����. La palabra ���� es reservada.

Palabras reservadas ��� �������� ��������

La tabla de palabras reservadas se irá llenando a medida que éstas vayan apareciendo en el lenguaje algorítmico.

Procesamiento

��� ��������������� ���� ��������������������

#

����$%�!%&'(�����$%�!%&'(�����$%�!%&'(�����$%�!%&'(�

Son lugares de memoria donde se pueden almacenar datos. Se llaman así precisamente porque su contenido puede variar. Toda variable tiene tipo, nombre y contenido. El tipo puede ser entero, real, caracter o cadena de caracteres. Su nombre debe contener sólo caracteres alfanuméricos y el caracter de subrayado ( _ ) y tiene que empezar con caracter alfabético; los caracteres alfabéticos con tilde no son válidos. Su contenido está estrecha-mente ligado al tipo. Tipo: De qué naturaleza es el dato que se puede almacenar. Nombre: Cómo hacer referencia a un espacio de memoria específico. Contenido: Qué dato hay almacenado. Los nombres de las variables deben ser significativos de tal forma que den una idea de su contenido. Por ejemplo, si se quiere guardar un promedio, la variable debería llamarse ����� � o ���� en lugar de �. Esto como una ayuda para quien construye o modifica el algoritmo (un ser humano), no porque a la máquina le afecte. ��������������( '%�% !"�)(*%�!%&'(���( '%�% !"�)(*%�!%&'(���( '%�% !"�)(*%�!%&'(���( '%�% !"�)(*%�!%&'(�

Para poder utilizar una variable, ésta debe existir, es decir, debe haber un espacio en la memoria asignado a ella. Esto se logra en la declaración de la variable la cual debe ir al principio del algoritmo, antes de cualquier instrucción ejecutable. Su sintaxis es:

� ��� ��������� ����� donde el tipo de variable puede ser: entero, real, caracter o cadena_de. Las variables de la lista se separan con el caracter coma ( , ). Estas instrucciones son llamadas declarativas y son no ejecutables porque no afectan el contenido de las variables ni implican la realización de otra acción diferente a la de reserva de memoria. Además, sólo tienen efecto una vez, cuando se inicia la ejecución del algoritmo. Esto significa que no puede haber instrucciones declarativas en otro punto que no sea exactamente el principio del algoritmo. El efecto de una instrucción ejecutable se refleja en el contenido de las variables o en la pantalla. Una palabra reservada no puede ser usada como nombre de variable. Ejemplo:

������� �������� ��������� ��������������������������������������������������������������������������� ���

����������������������������� ��������� �����������������

+

Este algoritmo “no hace nada”, nada visible por lo menos. La siguiente tabla contiene el significado de cada una de esas instrucciones declarativas.

Declaración Significado ��������������

Se solicita espacio en memoria para guardar tres números enteros en las variables llamadas �,���y��, respectivamente.

�������

Se solicita espacio en memoria para guardar un número real en la variable llamada �.

��������������

Se solicita espacio en memoria para guardar dos caracteres en las variables llamadas � y �, respectivamente. Un caracter puede ser numérico, alfabético, gráfico, de puntuación, etc.

������������ Se solicita espacio en memoria para guardar una cadena de caracteres, esto es, una palabra o una frase. El valor constante 8 determina el número máximo de caracteres que puede almacenarse en esa variable. Así que la variable podría contener la palabra servir pero no la palabra justiciero.

Al ejecutar este algoritmo, se genera lo que desde ahora se llamará el entorno de memoria. El entorno de memoria puede visualizarse como una tabla que contiene toda la información de las variables que se declaran en un algoritmo. Esa información consiste en el nombre de la variable, el tipo y el contenido. El entorno existe mientras el algoritmo se esté ejecutando. Una vez termina, la memoria reservada es liberada. Para el algoritmo llamado ������ �������� ���� se generaría el siguiente entorno de memoria:

Variable Tipo Contenido �� ������� ��

�� ������� ��

�� ������� ��

�� ���� ��

�� ��������� ��

�� ��������� ��

�� ���������� ��

�� ���������� ��

�� ���������� �� El caracter ? indica que a la variable no se le ha definido valor. De aquí en adelante, se dirá también que la variable contiene basura, es decir, que su contenido es desconocido.

��� ��������������� ���� ��������������������

,

En un mismo algoritmo, una variable no puede ser de más de un tipo. Sería como pretender que hubiera más de un norte.

Palabras reservadas ��� ���� ����������� ��� ��������� ����������������� �

��#������� !"�)(%�!-�% !"���#������� !"�)(%�!-�% !"���#������� !"�)(%�!-�% !"���#������� !"�)(%�!-�% !"�

La instrucción de asignación permite cambiar el contenido de una variable y se hace a través del operador de asignación �.

Variables de tipo caracter o cadena de caracteres: si la variable es de tipo caracter, su contenido es un caracter; y si es de tipo cadena de caracteres, su contenido es uno o más caracteres.

Variables numéricas: son de tipo entero o real y pueden ser operandos en expresiones aritméticas o matemáticas.

Ejemplo: Variables caracter o cadena de caracteres

Supóngase ahora que el tipo de la variable no es numérico. Esto es, la variable es de tipo caracter o de tipo cadena de caracteres. En estos casos hay que tener en cuenta lo siguiente:

Instrucción de asignación

Tipo de la variable

Observaciones sobre la instrucción

���������� caracter Es válida e implica el cambio del contenido de la variable ��� por el caracter � ��

��������� caracter Es válida e implica el cambio del contenido de la variable ��� por el caracter �

������� caracter Es válida siempre y cuando la variable � exista y sea de tipo caracter. Implica el cambio del contenido de la variable ��� por el contenido de la variable �

������������ �����������

cadena_de 20 Es válida e implica el cambio del contenido de la variable ��� por la cadena de caracteres ����� ���������

�������!�� cadena_de 10 Es válida e implica el cambio del contenido de la variable ��� por la cadena de caracteres !

�������� cadena_de 12 Es válida siempre y cuando la variable � exista y sea de tipo cadena de caracteres con longitud ≤ 12. Implica el cambio del contenido de la variable ��� por el contenido de la variable �

����������������������������� ��������� �����������������

.

Aunque la variable de tipo caracter o cadena de caracteres contenga un caracter numérico, sólo con las variables numéricas (enteras o reales) se pueden realizar operaciones aritméticas o matemáticas. Ejemplo: Variables numéricas

Supóngase que se tiene una variable llamada � y se quiere que su contenido sea �. Para hacerlo, se daría la instrucción de asignación

������

El contenido anterior de la variable � (definido o no) es cambiado por el valor �. Obsérvese que la dirección de la flecha que representa el operador de asignación indica el sentido en el

que se hace la asignación. ¿Tendría sentido la operación �����? ¿Por qué?

Instrucciones como ������������

no son válidas porque el operador � no existe. La segunda instrucción, además, carece de sentido.

En la parte izquierda debe aparecer siempre la variable cuyo contenido se desea modificar y en la parte derecha el nuevo valor.

Ejemplo: Si se desea que el contenido de la variable numérica � sea el mismo de la variable numérica , se daría la instrucción de asignación

�����

que significa hacer una copia de la variable en la variable �. El contenido de la variable � (definido o no) es cambiado por el contenido de la variable �(definido o no). Supóngase que se tiene el siguiente entorno de memoria en la ejecución de cierto algoritmo:

Variable Tipo Contenido �� ������� ��� ������� ��

"������������"�

��� ��������������� ���� ��������������������

/

Los puntos suspensivos (…) indican que hay otras instrucciones. La ejecución de las instrucciones tendría el siguiente efecto en el entorno de memoria:

Variable Tipo Contenido �� ������� ��� ������� ��

Obsérvese que la instrucción de copia (����) no tiene ningún efecto sobre la variable �. Si se tuviera este otro entorno

Variable Tipo Contenido �� ������� ��� ������� ��

�El efecto de la ejecución de las instrucciones

"�����������#���"�

sería el cambio del contenido de la variable � (basura) por �. Tomar una copia del contenido de las variables (basura) y � (�), sumarlas y asignar el resultado a la variable . El entorno quedaría así:

Variable Tipo Contenido �� ������� ��� ������� ��

Porque un contenido “basura” operado con cualquier otra cosa, da basura. Cuando se tienen instrucciones como

����#���

se debe verificar que la variable �haya sido inicializada. Inicializar una variable significa definir su contenido, lo cual hasta este momento sólo se puede hacer con una instrucción de asignación. También es posible que el valor que se quiera asignar a una variable sea el resultado de evaluar una expresión aritmética o matemática. Por ejemplo, se quiere que el nuevo valor de la variable � sea el resultado de sumar los números 7 y 20. La suma de 7 y 20 se expresa como 7+20. En este caso, se requiere poder hacer uso del operador de suma.

����������������������������� ��������� �����������������

0

��+��1(�%)2�(�%�!�34�! 2���+��1(�%)2�(�%�!�34�! 2���+��1(�%)2�(�%�!�34�! 2���+��1(�%)2�(�%�!�34�! 2�

El conjunto de operadores disponible en el lenguaje algorítmico que se está definiendo es el siguiente:

Suma + Resta – Multiplicación * División /

La parte izquierda de una instrucción de asignación siempre es una variable y la parte derecha puede ser una constante, una variable o una expresión, donde las dos primeras son las expresiones más simples que existen. Ejemplo: Sumar los números 7 y 20 Por el enunciado del problema, el resultado se debería guardar en una variable de tipo entero

porque la suma de dos enteros da un entero, pero también se podría declarar real (¿por

qué?).

��������$�%�&'����� ������������������������$#&'���������� ���

Al ejecutar este algoritmo, se genera el siguiente entorno de memoria:

Variable Tipo Contenido ����� ������� ��

Luego, al ejecutar la instrucción de asignación, ocurre lo siguiente: Los valores 7 y 20 son sumados. Luego se busca en el entorno de memoria una variable llamada ����, si existe, se modifica su contenido con el valor 27 y el entorno quedaría así:

Variable Tipo Contenido ����� ������� ���

Luego se ejecuta la instrucción ���� que indica la terminación normal del algoritmo y que conlleva la liberación de la memoria reservada a través de la declaración de variables. Que la memoria reservada se libere significa que ya no se tendrá acceso a esa área de memoria a pesar de que los datos pueden continuar existiendo ahí porque a otro algoritmo no se le ha asignado ese mismo espacio.

��� ��������������� ���� ��������������������

�5

Si la variable ���� no existe, se hace imposible continuar con la ejecución del algoritmo y ésta se termina anormalmente. A la terminación anormal de la ejecución de un algoritmo se le llama comúnmente “aborto”. Algoritmo que se respete no debe abortar. Aunque la expresión 20+7 es válida, no tiene sentido poner a la máquina a computar algo que ya uno sabe cuanto da. Es decir, ¿cuál es la razón para no asignar de una vez el valor 27? Obsérvese que el algoritmo �������$�%�&' sólo sirve para sumar los números 7 y 20.

¿Cuántos algoritmos parecidos pero diferentes habría que hacer para disponer siempre de

uno que sume dos números enteros cualesquiera? ¿Sería posible? ¿Tendría sentido? Otra versión del algoritmo anterior sería la siguiente:

��������$�%�&'����� ��������������������(�����&�����(���$����&���&'�����������(#���&���������� ���

En ���( y ���& se almacenan los sumandos $ y &', respectivamente, y luego se almacena el resultado en la variable ����.

El efecto es el mismo. Al ejecutarlo, se genera el siguiente entorno de memoria:

Variable Tipo Contenido ����� ������� �����(� ������� �����&� ������� ��

Al ejecutar la primera instrucción de asignación, ���(��� $�� se busca en el entorno una variable llamada ���( y, si existe, su contenido se modifica con el valor constante $.

Variable Tipo Contenido ����� ������� �����(� ������� $����&� ������� ��

Luego, al ejecutar la segunda instrucción de asignación, ���&��� &'�� se busca en el entorno una variable llamada ���& y, si existe, su contenido se modifica con el valor constante &'.

����������������������������� ��������� �����������������

��

Variable Tipo Contenido ����� ������� �����(� ������� $����&� ������� &'�

Luego se ejecuta la tercera instrucción de asignación, ����������(#���&, que consiste en buscar las variables ���( y ���& en el entorno de memoria, si existen se toma una copia de su contenido y se suman y luego, se busca en el entorno de memoria una variable llamada ���� y, si existe, se modifica su valor con el valor &$ y el entorno quedaría finalmente así:

Variable Tipo Contenido ����� ������� &$����(� ������� $����&� ������� &'�

Luego se ejecuta la instrucción ���� que indica la terminación normal del algoritmo y que conlleva la liberación de la memoria reservada a través de la declaración de variables. Cualquier búsqueda de una variable en el entorno de memoria que resulte infructuosa provocará la terminación anormal de la ejecución del algoritmo. Lo mismo ocurre cuando se hace referencia a una instrucción o a un operador que no existe en el lenguaje.

��,��1(�% !2�(�(���((��(�2�6�(%'(���,��1(�% !2�(�(���((��(�2�6�(%'(���,��1(�% !2�(�(���((��(�2�6�(%'(���,��1(�% !2�(�(���((��(�2�6�(%'(�

Cuando se realizan operaciones numéricas hay que tener en cuenta la operación así como el tipo de los operandos (entero o real). Por ejemplo, cualquier persona que sepa dividir diría que ½ es igual a 0.5 lo cual puede no ser cierto en la máquina. Resulta que cuando esta operación se hace en la máquina, el resultado depende del tipo de los operandos. Cuando se hace una operación básica en la máquina y por lo menos uno de los operandos es de tipo real, el resultado es de tipo real. Esto es, si los operandos involucrados en una operación son todos enteros, el resultado será un entero. El operando no necesariamente es una variable, podría ser una constante. En este último caso, la regla se aplica de la misma forma. Supóngase que se tienen las siguientes instrucciones de asignación: Operandos Resultado Instrucción ��� ��� ���� Observaciones �������(�#��&� entero entero entero En el caso de la división, cuando los dos

�������(�)��&� entero real real operandos son enteros, lo que ocurre

�������(�*��&� real entero real es que se trunca la parte decimal del

�������(�+��&� real real real resultado. Así, ½ es igual a 0 y no a 0.5.

��� ��������������� ���� ��������������������

��

Una constante numérica es entera (no tiene parte decimal) si pertenece al conjunto de los números enteros. En caso contrario es real así su parte decimal sea cero. En la máquina, la parte decimal se indica con punto (.) y no con coma (,). Supóngase que las variables ��( y ��& son enteras y que ��! es real. Operandos Resultado

Operación �� �� �� ���� Observaciones ���������(�#���&�)���!�

4

7

13.8

-2.8

Por lo menos uno de los operandos es real, por lo tanto el resultado es un real.

��������(+���&�#�('(� 6 4 102 Como ��( y ��& son enteras, ��(+��& da (�y no 1.5.

���������!�*�&�)���(+& '�

5

5

2

1.5

Aunque ��( es entero ��(+& ' da & � porque & ' es una constante real.

���������(�#���&+!�

17

14

21

Como ��&�es una variable entera y ! es una constante entera, ��&+! da un entero.

�� �� � �� �� � ��

��� � ����� ��� �� ���� � � �� �� � ������ �� � � �� � �� ����� �� � ��������� � �� � �� � ��� � ��� � � �� �� � �� ����� �� ������� ������� ���������� ����� ���������� ���� �� ����� ������� �������� ����

�� � �� � �� � �� � �� � �� � �� � ��

��� � ��� � �� � �� � �� � �� � �� � ��

� � � � � � � � � � � � � � � �

� � � � � � � � � � � � � � ��

�� �� �� �� � � � �� � ���� � ��� ← ��! �"� � ��� ← ��#�! $ � ��� ← ��! �! �� ��� ← �%&�'�(� ��� ← �! �#�� ��� ← &�! �(#�� ��� ← �! ���$ �� ��� ← �! �! �'�� �

�����

����������������������������� ��������� �����������������

��

�����) �������� �� �����������*�

� � �� � � � � �� �� ������ � � � �� �� � � �

�� ������ � � � �� �� � � �

�+ ��� ���� ≠ ��� ���, �- � ��� ≠ �- �

���≥ ��! ��� ���. �- ! �� ����≤ �/ � �

���$ ��0 ��� ��� �� ���1�� �� 2��� �� ��� ������� �� �� ��� 3 ��� *��

� 4 �������� � 4 ��������

1� 5 ���� � / 6 �"��

� ����� � � �/ �

� ! �� � / - ! ��

� �� � � 2���

� ���� � �����

� $ � � � 6 2����

���� 7 ������ ����� ���2 �� ������ ������3 ����� ��"�������� ������3 ������ 2�� � ��7 8�� ��������� ���2 ����� �������

����� ���������� �� �� ��2�2 ������

��"� 7 8�� ���� � �� ����� ���� ���2 ���� �� ��� 9 �/ ������� �� � ��: ����� ��������� ; ����� ��������� �������2��������� 9 �� � � ������� 2 �� � �<�� � �� ��� ���: �������� ���2 �� �3 �� ����� ��� ������������ ���������� �� �� ��2�2 �����

=�8�2���� �>�

����� ������������������"������! ����������2����

=�8�2���� �>��2����������� �2�������2! �����������2�����=�8�2���� $ >��2��������������������$ ��� ��������$ �"��������"� � � � % % �? �� �� �������� �*��� ���� ����������� �� ��$ ������� � � � % % �? �� �� �� ���� �*��������������� ��� �������� ��� �������! ��! �$ #$ ���������2����

��� ��������������� ���� ��������������������

�#

�=�8�2���� �>��2��������������������$ ��� ��������$ �"��������"� � � � % % �? �� �� �������� �*��� ���� ����������� �� ��$ ������� � � � % % �? �� �� �� ���� �*��������������� ��� �������� ��� �����&��! ��! �$ (#$ ���������2�����@: ���� ��� �� ��� ���� �� ��� ���� ���2 ��8�2���� $ ����8�2���� ���@A ��� 9 ���

��

��B ���? �������� �� � � �� � ���� ������ �� ���

• 5 �� ���2 �• A ��������� ��� �� ��• 4 ��������

��C ��: � �� ��� ���������� ���� ���2 � ����������� �� ������� ��������� ��� ��� ������� ����� � �� ����� �� �� ���� �� *��

����� �� 2���� 2���� 2$ �� ������ �� ����� �� ����� �� �$ �� � 2�������� � 2������� � 2$ ������� � �� ������C ���� � �� ����� �B �� � �� �$ ����B ����

7 �� � �2�� �� � ���� � ��� ��� ��� ���� ����� ��� ��� �2���� �������� �2����� � �� ����� ��; ����� �� ��� � �� �� � ������ �� �� ��������� � ���������������� ��� ��� � �� ��� � ��� ��� �� � �� ����� �� � ��� ��� ��� � � �� � �� �� ��� ����� �� �� �� � ����

��� ��� ��

A ������� ������� ���� � � � 2$ ���� 2�! � 2���

� ���� ������� � � � ���� � � ��� � �� ����� � �� �� � � ������� � � 2$ �� � 2�� �� � 2�� � �� � � � �� �� � �� ������ ��� �� �� ! � �� ���8�� ��� ������ �� ����� ���7 ���� � �� ����� �� �� ���� �� �� � ��� ��������������� ������ ���2�� � � ���� ������ �� ������� �� ��� ���������8���� ��� �� �� �� �� ������ ������������ ���������

7 ���� ��� ��� ���� ������ �

� �� ��� ���������� ���2��

����������������������������� ��������� �����������������

�+

� " � ��� ��� ��� �� �� � " � ��� ��� � ����� �

� �� �� �� � � � 2�� � 2�� � 2$ � � �� ��� � �� ��� � �� �$ �

� 2$ ���� 2�! � 2�� #$ � �����%� ����#%� � � �

� 2$ ���� �� ��! � �� ��� � � � � � �

� 2$ ���� 2�#� 2�� � � � � � �

� 2$ ���� 2$ ! �C � � � � � � �

� 2$ ���� 2$ ! � �� ��� � � � � � �

� 2$ ���� 2�%� �� ��� � � � � � �

� 2$ ���� �� ��� � � � � � �

� �� �$ ���� �� ��'� �� ��� � � � � � �

� �� �$ ���� �� ��%� 2�� � � � � � �

� �� �$ ���� 2$ #� 2�� � � � � � �

� �� �$ ���� �� �$ #� 2�� � � � � � �

� 2$ ���� �� �$ � � � � � � �

� �� �$ ���� 2�! � �� ��� � � � � � �

��

��.������� !2�(�)((���%)%2�%'!)%��.������� !2�(�)((���%)%2�%'!)%��.������� !2�(�)((���%)%2�%'!)%��.������� !2�(�)((���%)%2�%'!)%

Volviendo al algoritmo que suma dos números determinados, lo ideal sería contar con uno que permitiera sumar dos números enteros cualesquiera, de lo contrario, programar computadores no pasaría de ser una tarea interesante.

Para poder hacer esto, tiene que haber interacción entre el usuario y el computador para que sea posible especificar los números por sumar. Obsérvese que hasta este momento esa interacción no existe, ni siquiera había sido mencionada.

El usuario es quien hace los requerimientos y se beneficia del algoritmo.

��� ��������������� ���� ��������������������

�,

Para que exista interacción entre el usuario y el computador es necesario que haya instrucciones que permitan que éste “hable” con la máquina y que ella le “responda” y viceversa. Las instrucciones que permiten la interacción entre el usuario y la máquina son las llamadas instrucciones de entrada o salida.

Las instrucciones de entrada o salida son las de lectura o escritura y están estrechamente relacionadas con los dispositivos de entrada o salida. En este libro se trabajará con el teclado como dispositivo de entrada y con la pantalla como dispositivo de salida, por ser éstos los más utilizados y conocidos. Cuando se necesita que haya comunicación entre el usuario y la máquina, a través del usuario, se ejecuta una instrucción de lectura, el usuario tiene la palabra (teclado). Si la comunicación se hace a través de la máquina, se ejecuta una instrucción de salida, la máquina “tiene la palabra” (pantalla).

��.��������� !"�)((���%)%��

Permite la comunicación del usuario con la máquina. Consiste en almacenar en una variable el valor suministrado por el usuario. Su sintaxis es:

������ ����

����������������������������� ��������� �����������������

�.

Ejemplo:

�����

El efecto de esta instrucción es el cambio del contenido de la variable � por el valor especificado por el usuario. En otras palabras, una lectura implica una asignación. Así que aparte de la asignación, la instrucción de lectura es la otra posibilidad que existe para cambiar el contenido de una variable. Con frecuencia se oye decir “se lee la variable” cuando lo que realmente pasa es que se lee en la variable.

¿Por qué no es válida ni tiene sentido la instrucción ���&'?� ��.��������� !"�)(�%'!)%������ �

Permite la comunicación de la máquina con el usuario. Su sintaxis puede ser una de las tres siguientes:

• escriba� ��������� ������

Las variables de la lista deben separarse con el caracter coma ( , ).

Ejemplo:

���� ����������� �����

El efecto de estas instrucciones es escribir en la pantalla el contenido de las variables que aparecen en la lista (� y �, en el primer caso, o � en el segundo). Si no existen, la ejecución del algoritmo se terminará anormalmente y si existen pero no han sido inicializadas, se mostrará el valor “basura” que contengan el cual puede ser cero o espacio en el mejor de los casos.

• escriba “mensaje”

Ejemplo:

���� ��������� ����������,��������� ��El efecto de esta instrucción es escribir en la pantalla el texto que aparece entre comillas, tal como está. El mensaje tiene que estar entre comillas, de lo contrario, se terminará anormalmente la ejecución del algoritmo.

����� ����������,��������� �

��� ��������������� ���� ��������������������

�/

• ���� ������ ���(�������-�(������ ���&�������-�&��"�

El efecto de esta instrucción es escribir en la pantalla el contenido de la variable llamada ��� ���(, el texto que aparece entre comillas, tal como está, el contenido de la variable llamada ��� ���&��el texto que aparece entre comillas, tal como está,…

Ejemplo:

���� �������#�������.�����

El efecto de esta instrucción es escribir en la pantalla el contenido de la variable llamada �, el texto que aparece entre comillas, tal como está ( + ), el contenido de la variable llamada ���el texto que aparece entre comillas, tal como está, ( = ) y el contenido de la variable llamada � � Así, si las variables �, � y � contienen los valores &, ! y �, respectivamente, en la pantalla aparecería lo siguiente:

&�#�!�.��

Ejemplo: ���� ����/���������������� ����������0��������������������������� ��

Si, por ejemplo, �� vale 4500 y ��� vale 2700, en la pantalla aparecería lo siguiente:

� � � /�����1�''����� �������

����� � ����0������&$''����������� � ���������

¿Son diferentes las instrucciones ���� ���� y ���� ������?

Son totalmente diferentes. La instrucción ���� ��� �� escribe en el dispositivo de salida (la pantalla en este libro) el contenido de la variable �, mientras que la instrucción����� �������escribe la letra a porque ésta aparece entre comillas. Ahora que ya hay interacción entre el usuario y la máquina, se puede volver al problema de sumar dos números cualesquiera.

����������������������������� ��������� �����������������

�0

Ejemplo: Sumar dos números. Como no se especifica qué clase de números se sumarán, se puede suponer que son enteros o

que son reales. En el segundo caso, se tendría un mayor alcance (¿por qué?). ¿Qué variables se necesitan? Se necesitan dos variables para guardar los sumandos y una para guardar el resultado. En el algoritmo solución se supondrá que los números son enteros.

����������������������������� ��������������(�����&����������� ����2�� �3�����������4�������������������5� ��� ������ ����6���7������������� �����4���� ��������(����� ����6���7�������������������4���� ��������&�����������(#���&����� ������(���#������&���.������������� ����8�����7 �� 9�� ����������� ���

�Al diseñar los mensajes para la instrucción escriba, no se debe olvidar que la comunicación se está haciendo con un ser humano y que por lo tanto deben ser escritos en el lenguaje natural de la persona. Suele pasar que los mensajes carecen de calidez porque se está pensando en la máquina. Tampoco es conveniente incluir términos propios del lenguaje que son innecesarios y pueden confundir al usuario. Por ejemplo:

En lugar de la siguiente instrucción: escriba “Este algoritmo suma dos números.” sería mejor algo como escriba “Suma de dos números.” Obsérvese que en este algoritmo no se puede decir que el contenido final de la variable ���� sea basura por ser desconocido porque, aunque no se sabe qué valores ingresará el usuario en el momento de la ejecución, a la variable ���� sí se le está definiendo un valor: el de la suma de las variables ���( y ���&, cuyos contenidos son definidos previamente por el usuario. ��/����(&%)((� �!�2�!2��/����(&%)((� �!�2�!2��/����(&%)((� �!�2�!2��/����(&%)((� �!�2�!2

En este libro, la ejecución de un algoritmo consistirá en hacer las veces de máquina. Esto es, llevar a cabo todas las tareas que después tendrá que hacer el computador. A este trabajo se le llamará prueba de escritorio, la cual se hace con papel y lápiz y en una forma similar a la que se muestra a continuación. Esas pruebas se hacen con valores cualesquiera, de acuerdo con el tipo de las variables, y su efecto se refleja en la pantalla y en el entorno de memoria.

��� ��������������� ���� ��������������������

�5

Ejemplo: Prueba de escritorio La prueba de escritorio para el algoritmo ����������������������� se reflejaría en el entorno de memoria y en la pantalla como se muestra a continuación:

Instrucción Efecto ����������(�����&�������

Se reserva espacio para tres variables enteras llamadas ���(, ���& y ����, respectivamente.

Variable Tipo Contenido ���(� ������� �� ���&� ������� �� ����� ������� �� ���� ����2�� �3�����������4�������������������5� ��� ��

Aparece el mensaje en la pantalla. �������2�� �3�����������4���������������������������5� ���

0��� ����6���7������������� �����4������

6���7������������� �����4�����

������( Variable Tipo Contenido

���(� ������� (!� ���&� ������� �� ����� ������� �� ���� ����6���7�������������������4������

6���7�������������������4�����

������& Variable Tipo Contenido

���(� ������� (!� ���&� ������� :1� ����� ������� ��

����������������������������� ��������� �����������������

��

Instrucción Efecto ����������(#���&�

Variable Tipo Contenido

���(� ������� (!� ���&� ������� :1� ����� ������� ;� ���� ������(���#������&���.���������

13 + -4 = 9

���� ����8�����7 �� 9�� ��

������8�����7 �� 9�� �

���� El espacio de memoria reservado para las variables ���(, ���& y �����queda libre.

¿Qué pasa si el usuario ingresa un valor real en lugar de uno entero? Simplemente se toma la parte entera. Por ejemplo, si el usuario ingresa 13.57, el valor que se almacena es 13.

¿Cómo sería la versión de esta solución para números reales? ¿Qué pasaría en este caso si

el usuario ingresa un número entero?

Si ahora se quisiera restringir el algoritmo de suma de dos enteros a enteros positivos, ¿cómo

se haría? �Con las herramientas que se tienen hasta ahora en el lenguaje algorítmico no es posible hacer tal restricción. Es necesario tener la forma de condicionar la realización de la suma. Si los números son positivos… Primero, para establecer relación entre los operandos se necesita de los operadores relacionales y para exigir que la condición “ser positivo” sea satisfecha por ambos operandos se requiere de los conectores lógicos.

Palabras reservadas ��� ���� ����������� ��� ��������� ����������������� ������� ��� �

��� ��������������� ���� ��������������������

��

�� �� � �� �� � �#�������D ������� ����� ����� ��� ���� �� ������ �� � �� ��� � �� ����� ���� ���2 ��& � ��� � � � � �'�( � ���: ����� ������

��� ; ����� ��������� �������2��������� 9 �� � � �����E� ������������ ���������� �� �� ��2�2 ���������������������� ��� � �� ����� ��

�% % ���������) � � �* ��2����������� ����� 2��� ������=: 2��� ��� ��; 2�� ������ �� ��� � �����>� 2�����! ��� ��������>�! �=���>�, �=� 2��� ������=: 2���������� ��>���������2����

�% % �������) � ��+ �� ��� * ��2������� ������=� ��������� ��� ��� ������� >�������� ����� ���������� ������=F3 �� � �� ���3 ����� �� ������3 �� � �� ��� �����>�� ������=G 5 : 7 �, �=������� ��� ������=5 ) H I D 5 �, �=�������� ������������� �%��� ���� ������=7 ��3 ����� �������3 �� � �� ����� ��� �=��� ��>���� ������ ���� �=���� ���>�� �=������� ������=J ���3 ��������3 �� � �>���������2����

����F � �� ��� ��� ���� ���2 ������ � �� ����� � �� ����� ��� ���2� *��

������ E������2�������� ����������� ������ � � �� � � � ������� � � �� ��� ������ � ����������� � ����� ��2������ ����� ��� ��H ��� ������ ������ ��� � ��������� ��� ������������� 9 �� �� �� �� ���� �� �� �� ����� ��� � �� �� �����2�2 ����� �� ������ �� ���� �� �� ������� �� ������ �� ������� ������ ��

7 8�2�� *�� � 4 ���������*�C �� � 4 ���������*�'���

D � ���� *�� � 4 ���������*�'���� � 4 ���������*�C �

����� F��� ������� �������������<2��� �� �� ��� �� ���3 ��� �� � ���� �2�� ����������� ����C ��? �8��� � �� �� �� �������� ���� ����2�2 ������ 3 � ���� ����� ����� ��� ���� �� ����� ������������ ���������� �� �� ��2�2 ����� ��� � �� �������

����������������������������� ��������� �����������������

��

�����$ F��� ������� ���������� 3 ��������� � � 2��� � �� ����� 2��������� ���� � �� �� ����� ��� �� K � �� �� ��

� �������2�� �8� ����� ���� ��� �� � �� ����2������� �� ����� 9 � � �� � � ���� ��� �� ������ ��� 9 ��? �8��� � �� �� �� �������� ���� ����2�2 �����

������ F��� ������� ��������� �� �� ���� � �� ��� �� �� �� ���������������� ������������ �� �� ��� �����

��� ���� ��� � �2�� �2�� += ��@F 3 �� � �� � � � �� � � �������� ��� �� ������ ������ 7 ������

��2��9 ������������ ��� ������ ���� ��� ��K � �� �� ��� �������2�� �8� ����� ���� ��� ��� ������2������� �� ����� 9 �� �� �� ������� �� ��� ���� 9 � ����������� �� ��� �3 �� ���� �������� � � ���� �� �� ���� ��&����������������� ����� (��? �8��� � �� �� �� �������� ���� ����2�2 �����

�����" F��� ������� �������������� ������� �� ����������� �� �� �� �� �� ���������������������K � �� �� ��

� �������2�� �8� ����� ���� ��� �� � �� ����2������� �� ����� 9 � � �� � � ���� ��� �� ������ ��� 9 ��? �8��� � �� �� �� �������� ���� ����2�2 ������ 3 � ���� ����� ����� ��� ���� �� ����� ������������ ���������� �� �� ��2�2 ����� ��� � �� �������

�,� ����� � � *�: ��� � ������ ��/ ����� ����� ���2 �������� ���� ��� �� ��� �� ������������� ����������@� 9 �� �� �� �������� ������ ����<���@A ��� 9 ��@F� 2 � � �� ���<������� ���2���@F 3 �� � ��<���� �� ���� ��� ���� �� �� ���� ���2 ��

�����B F��� ������� ����������3 ������ 2�� � �� ����� �������� �� ��� � ������) �� �� �� ��� �������� � ��

�������3 ����� ��� �������C F��� ������� ����������� � 2���� ����� ������� � �� ��� � ������F��� ������� ���������2��9 ������ � 2���

�� 2�� � ���

���� F��� ������� ������������ �� ��� 2�� � �� �� �� ���� �� ��7 ������� ���� �/ ���� ��� ��������� ��� �� � ����

����L F��� ���� �� � ������� ��� �� �� � �� 2�� � � � �� �� � ��� �� �� 7 �� ��� �� ���� � � � / ��� � �� � ������� �� ��� �� � ��@F 3 ��� ����� ����������� �������� ���2 ������� ���@M 9 �� � �<����� � ��/ �����

������� F��� ������� ������� �������������� �� ������ ��������� �� ��� ���� ����� ��� �� ������� ��� 7 �� ��� �

��2��9 �� 2��� ����3 ��� ����������� �� N��� �� ����2��� �� ��������B �O �&$ ����$ �(�������������������O ���

��0��1(�%)2�(��('% !2�%'(���0��1(�%)2�(��('% !2�%'(���0��1(�%)2�(��('% !2�%'(���0��1(�%)2�(��('% !2�%'(�

Permiten establecer relaciones entre dos operandos. Esas relaciones que se establecen se llamarán condiciones de aquí en adelante. En este lenguaje se dispondrá de los siguientes operadores relacionales: Igual que = Mayor que > Menor que < Diferente de ≠ Mayor o igual que ≥ Menor o igual que ≤

��� ��������������� ���� ��������������������

�#

���5� 2�( �2�(�'"-! 2����5� 2�( �2�(�'"-! 2����5� 2�( �2�(�'"-! 2����5� 2�( �2�(�'"-! 2�

Permiten la creación de condiciones compuestas.

6�"

La condición simple de que ���( sea mayor que cero se expresa como

���(�<�'� La condición simple de que ���& sea mayor que cero se expresa como

���&�<�'� Si la suma se quiere restringir a operandos positivos, se hace necesario que las dos condiciones se satisfagan. Esto es, el primer operando debe ser positivo y el segundo también. En lenguaje algorítmico esta condición se expresa así:

���(�<�'��%�����&�<�'� y por implicar el cumplimiento de más de una condición podría llamarse condición compuesta. Sin embargo, simplemente se hablará de condición, sea ésta compuesta o no. Ya se tiene entonces la condición que se debe satisfacer. Ahora, es necesario disponer en el lenguaje algorítmico de una herramienta que permita preguntar si la condición se satisface. ������� ������� �������� ������� �������� ������� �������� ������� ������ ���� ������������ ���� ������������ ���� ������������ ���� �������

En la vida cotidiana, con frecuencia los seres humanos condicionan muchos de sus actos. Por ejemplo, “Si me pagan la bonificación, me iré de viaje”. Algo tan natural también está contemplado en el lenguaje algorítmico y se hace a través de condiciones y estructuras de control condicionales. Las estructuras de control condicionales permiten que la realización de una o más acciones esté sujeta a la satisfacción o cumpli-miento de una o más condiciones. En este lenguaje se dispone de estructuras de control condicionales repetitivas y no repetitivas. ��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'�2�(1(��2�(1(��2�(1(��2�(1(�!�!*%!�!*%!�!*%!�!*%��������7777

Se utiliza cuando el cumplimiento de la condición o de las condiciones implica la ejecución de una sola instrucción. La sintaxis es:

� (condición o condiciones) ������� =�

La condición (o condiciones) debe ir entre paréntesis. Si la condición o condiciones se cumplen, se ejecuta la instrucción. De lo contrario se continúa con lo que haya después de la estructura de control condicional. Se dice que es no repetitiva porque al cumplirse la condición la instrucción se ejecuta una y sólo una vez.

����������������������������� ��������� �����������������

�+

Ejemplo:

"�

� �>�<'?����� �������������4�������� � �� ��

"� En este momento ya se puede construir un algoritmo general para solucionar el problema de sumar dos números enteros positivos cualesquiera.

���������������������������� � �������� ��������������(�����&����������� ����2�� �3�����������4����������������� � ���������5� ��� ������ ����6���7������������� �����4������������(����� ����6���7�������������������4������������&�� �>���(�<�'�%����&�<�'?�����������(#���&�� �>���(�<�'�%����&�<�'?����� ������(���#������&���.������������� ����8�����7 �� 9�� ����������� ���

¿Qué pasa si uno de los números es negativo o cero? El usuario se quedará sin saber qué ocu-rrió. Aunque ingresó dos números, el único resultado que obtuvo fue el mensaje 8�����7 �� 9���así no se haya hecho. Es importante acostumbrarse a escribir los mensajes de error o aclaratorios que sean pertinentes a la solución de un problema. Para hacerlo en el algoritmo anterior, habría que tener en cuenta la posibilidad de que una o todas las condiciones no se cumplan. En general, es importante conocer y entender las tablas de verdad porque de acuerdo con ellas se obtiene el resultado de evaluar dos o más condiciones conectadas con % o con =. Sean c1 y c2 dos condiciones. El resultado de evaluar el cumplimiento de las condiciones conectadas con % o con = se muestra en las siguientes tablas de verdad.

���� ��� �������� ��������@� @� @� @�@� A� @� A�A� @� @� A�A� A� A� A�

Para que la condición ���(�<�'�%����&�<�'�no se cumpla, basta con que cualquiera de los operandos sea menor o igual a cero. La condición para verificarlo sería:

����(�≤ �'��=�����&�≤ �'�

��� ��������������� ���� ��������������������

�,

Si los dos operandos son menores o iguales a cero, también se satisfará la condición. �

Obsérvese que con el conector % la única posibilidad de que el resultado de evaluación sea verdadero (satisfactorio) es que tanto la evaluación de c1 como la de c2 sean verdaderas. Y la única posibilidad de que el resultado de evaluación sea falso (no satisfactorio) con el conector = es que tanto c1 como c2 sean falsas. Si la evaluación tiene lugar con más de dos condiciones, el análisis es el mismo, una vez agrupadas las condiciones, para lo cual se utilizan los paréntesis ( ) que son el símbolo de agrupamiento. Ejemplo. � � � � � � - ������ � � � �� �� � �� ���� �� � � � �� �� � �� �( � ���� ���� ��� ��� � �� ����

�� 7 ��� �� ��� ������ ����������� �3 �������'����������

����� ? 9 � ���8�2�� �� �� ��� �� ��� ����� ��� 2���*�.��

� � ( )('��%�&� ≤−≥ ���

�� 7 ��� �� ��� ������ ����������� � ���; 2�� ������ ��������������������� �� � ( ]�� ���

� � ( ) ( )( )�%�����%���&*&� ≤>= ��

Los paréntesis de adentro se pueden omitir porque el único conector es %, lo cual exige que todas se cumplan para que el resultado de la evaluación sea verdadero. En este caso, los paréntesis están sobrando, no hacen daño. Hay ocasiones en que, aunque sobren, vale la pena dejarlos por claridad con respecto al enunciado. El resultado de la evaluación de la condición ( )( )�&*

&� = permite saber si un número

entero es par porque al hacer la división de los enteros m y 2 se obtiene un número entero (la parte decimal se trunca) haciendo que el resultado multiplicado por 2 no sea necesariamente igual al número original, si éste no era par. Por ejemplo, si el contenido de la variable � es 7, el resultado de la división $+& es ! y ! multiplicado por dos es diferente de $. Así que, basados en esto se puede afirmar que $ no es par.

¿Qué pasa si en lugar de ( ) &*&� � ��� ������ ( )( )

&&*� ?

c. El valor de la variable ��debe ser 2 veces el valor de la variable � si el valor de � es negativo. Si � es positivo, � debe ser 10 veces el valor de �.

Dé un ejemplo de valores para � y � que cumplan: )('�%�)���respectivamente.

� � ( ) ( )( )0*100*2 >=<= nnmnnm %�=%� �

En este caso, los paréntesis internos son necesarios para forzar el orden de evaluación. �

����������������������������� ��������� �����������������

�.

Obsérvese el papel fundamental que juegan los conectores lógicos y los operadores relacionales en la construcción de las condiciones.

��

�� �� � �� �� � �/��

$ �� F � �� ������� �� ���� �� �� �� ��� �� �� �����2������� �� ��� �*�

�$ ������7 ��3 ����� ���� �� ��� �� �2�� ��� �����3 ����� ������3 �� � ��: ��� � ���������� �� ���� �� ��� �&��� (�������� �������

��� ���� ������3 �� � �&����/ (���0� � � � � � � � � � 1��

$ ���� �7 ��� �� ��� ������<2��� ���� � � �� ��� � �� ����� *��� ������ �- ��0� � � � � � � � � � 1��

$ ���$ ) ���� �� �� ���� � � ������������� ��� �� ������ � �� � � � �� ����� ������� �� *�&���� (���&"B ��C �(��? 9 � ���8�2�� �� �� ��� �� ��� ����� ��� 2�����6 6 6 6 �0� � � � � � � � � � 1��

$ ���� ) ���� �� �� ���� � � ������������� ��� �� ������ � �� � � � �� ����� ������� �� *�P����B �Q���P"��� �Q��? 9 � ���8�2�� �� �� ������ �� ��� ����� ��� 2�����6 6 6 6 �0� � � � � � � � � � 1��

$ ���" ��) ���� �� �� ���� � � ������������� ��� �� ������ � �� � � �� �� ����� ������� �� *�P���2Q���PR ���Q��0� � � � � � � � � � 1��

$ ���B ��7 ��� �� ��� ����������������� � � �� ��� � �� ����� ������� �� *�&'$ �'��(��&���"(��&$ ��B �(��0� � � � � � � � � � 1��

$ ���C 7 ��� �� ��� �� �� � ���; 2�� ���� ���� �� ��������������������� �� �&��C ����(��? 9 � ���8�2�� �� �� ��� �� ��� �� �� ��� 2�����6 6 6 6 �0� � � � � � � � � � 1��

$ ��� 7 �� � �� �� � �� � � �2� � ��� � ��� � ��3� � �� ��3� � ���� ��� � ���� �� ? 9 � ���8�2�� � � �� � �� �� � � �� �� 2���3� � � ����� 2������6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 �0� � � � � � � � � � 1��

$ ���L ��7 ��� �� ��� ��4�� ����� � ���� ��� ����� �� ��� ����� ����� ���� ���� ��: ����� �� ���� ��4�� ���� ���C �� ��� ����� �� ��� ������

? 9 � ���8�2�� �� ��� �� �� �� ��4������ ��� 2������6 6 6 6 ��0� � � � � � � � � � 1�

�$ �� F � �� ��� ��� ���� ���2 ������ � �� ����� � �� ����� ��� ���2� *��

$ ���� A �� ������ ��� �$ ��; 2�� ��� � ����� �� � �� ����� �� ���� ���� �� �� �� �� ���� ��� �� �� ���� ��7 ���������2�� ������� ���� ��� �� ������� ���� ��; ���2 ����� ���� ��H ��� ������ ������ ��� ��; 2�� �� �� ��� ������ �� �� ����� ��� ���� �� ����

�7 8�2�� ��K ; 2�� �� �� �� ����� ��� *�������'$ �C ����D � ���� *�) ��; 2�� � �*�'$ �C �����������

�$ ���� 7 ������� ��� �� ���� ���� ����� $ � �; 2�� � � ��� � ����� � �� � � �� ��� ��� �� : � �� ��� �� � � ��� �

�; 2�� � ��� �������� ������� <��

��� ��������������� ���� ��������������������

�/

�7 8�2�� ��K ; 2�� �� �� �� ����� ��� *��"��'$ �C ���$ � �D � ���� *�) ��; 2�� � �� ���� � �*�'$ �C ���$ � ���"��

�$ ���$ ? �� �� ������������ ��� ������� ����� ��� ��� �����F � 2������$ ���� ? �� � ������������ ��� ������� ����� ��� ��� �����S ���

$ ���" 5 � ���� ��� �� ���; 2�� ������ ������������������� � �� � �� ��� ������� �� � ( ]BA, ��� [ ).,5 C ��

$ ���B 5 � ���� ��� �� ���; 2�� ������ ������������������ �� � �� � �� � �� ��� ��������� �� � ( ]BA, ��� [ ).,5 C ��

�$ ���C F��� ������� ����������3 ����� �� ������3 �� � �� ��� ������4 ��������� ��� �� �� �� �������� �� ��� ����� �

&2�� �� �� ����� (��: ��� �� � ���� ����������2�� �8��� ����� ���� �� �� ���� �����������8�� ��� ��� ������ ���2 ���

�$ �$ � �� �� ��� � ��� ��� �� ��� ���� �� ���� �� ��������� ���2 ������� �� �� �� �� ��������� ��K �� �2 � ���� ���

F 2��������������*�

T� ��6 � ��T��2������������ ���� ������T? 9 � ������������ ��� �������� ��� ��A � � ��2���� ��� ��F 2� ��� �� �T������ ���

�&� ��� ≥ ���"�(�� ������� ���T�� �� ����������������T� �&� ��� ≥ �����(�� ������� ���T�� �� ������� �� �T� �&� ��� ≥ �$ �"�(�� ������� ���T�� �� ����������������T� �&� ��� ≥ �$ ���(�� ������� ���T�� �� ��������� ����T� �&� ���. �$ ���(�� ������� ���T�� �� ������� ����������T�� ������TJ ���� ���T���������2����

���� � � �� � �������& � �

" � ��� ������ � ���

5 �� � ���� ��� ������� ������

���������� �����"� �

���������� ������� �

� @M 9 � ������ ��� ������ ���2 ���La siguiente es una versión mejorada del algoritmo que suma dos enteros positivos cualesquiera. �

���������������������������� � �������� ��������������(�����&����������� ����2�� �3�����������4����������������� � ���������5� ��� ������ ����6���7������������� �����4�������������(����� ����6���7�������������������4�������������&�

����������������������������� ��������� �����������������

�0

� �>���(�<�'�%����&�<�'?�����������(#���&�� �>���(�<�'�%����&�<�'?����� ������(���#������&���.������������������≤ ������������≤ ���������� ������������������������������������������ ����8�����7 �� 9�� ����������� ���

Palabras reservadas ��� ���� ����������� ��� ����6���� ����������������� ������� ��� � �

Obsérvese que en el algoritmo presentado hubo necesidad de evaluar dos veces la misma condición. Esto porque había dos acciones dependientes del cumplimiento de una misma condición. Cuando esto ocurre, se hace uso de la estructura de control condicional � � ����5��. ��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'��������� ���%)( 2���2' 2�)! !2�%'�2�(1(�!�!*%�2�(1(�!�!*%�2�(1(�!�!*%�2�(1(�!�!*%�������� ��7777

Se utiliza cuando el cumplimiento de la condición o de las condiciones implica la ejecución de una o más instrucciones. Se dice que es no repetitiva porque al cumplirse la condición, el cuerpo del � es ejecutado una y sólo una vez. La sintaxis es: � �>��� � =������� � ����?����������

� ������

������

������

7 ��� �La palabra reservada �������� indica que se trata de una estructura de control condicional � de bloque en lugar de una � simple.�La palabra reservada 7 ��� es un delimitador del cuerpo de la estructura condicional. Si la condición o condiciones se cumplen, se ejecuta la instrucción o las instrucciones que conforman el cuerpo de la estructura de control condicional. Si no se cumplen, se continuará con lo que haya después del delimitador 7 ��� . Otra versión del algoritmo que suma dos números enteros positivos cualesquiera, utilizando la estructura de control condicional � ����5�� es:

����������������������������� � �������� ��������������(�����&�����������������������������(&��������

��� ��������������� ���� ��������������������

�5

���� ����2�� �3�����������4����������������� � ���������5� ����B/������ ���������>�C��,���������5� ����������������C���?������������ �� �>�����.�����=������.��D�?������������ ���� ����B��E������������������� ����������

���� ������������������7������������� �����4�������������(����� ����F��������������������4�������������&�� �>���(�<�'�%����&�<�'?�������������������������(#���&��������� ������(���#������&���.���������7 ��� �� �>���(�≤ �'��=�����&�≤ �'?����� ����G��� ��������������� �G�������4���������������� � ��� �6����������������������������� ��������� ������ ������������������������������ ��4� ������ ����8�����7 �� 9�� ���

� � 7 ��� �� �>�����≠����%������≠ ��D�?����� ����H����"����E������������� =� ����������� ���

Si al ejecutar el algoritmo tanto ���( como ���& son positivos, no sólo se calcula la suma sino que se escribe el resultado. Obsérvese que las instrucciones

���� ������������������������������ ��4� ������ ����8�����7 �� 9�� ���

son ejecutadas sin importar las características de los números. Obsérvese también que lo que hay a continuación de la estructura de control condicional es la evaluación de la condición contraria. Dicha evaluación se hace sin importar lo que haya pasado en la anterior, lo cual no debería suceder. A pesar de que el algoritmo funciona, así como está, con más herramientas se podría lograr una mejor codificación. El término codificación se refiere a la escritura en determinado lenguaje de una serie de instrucciones. La línea de código

� �>�����.�����=������.��D�?���������� realiza lo que de aquí en adelante se llamará una validación. Una validación es la verificación de la ocurrencia de una situación acompañada de la toma de decisiones correspondiente. La apariencia del algoritmo, esto es, la forma como están escritas las instrucciones, no afecta la ejecución pero sí es importante que sea clara para el ser humano que es quien escribe el algoritmo y quien lo modifica. Por esta razón es importante acostumbrarse a dejar líneas en blanco, espacios o también sangría en el cuerpo de las estructuras de control. El código de los algoritmos debe ser claro y agradable a la vista.

����������������������������� ��������� �����������������

��

��������� ���%)( 2���2' 2�)! !2�%'�2�(1(�!�!*%��������� ���%)( 2���2' 2�)! !2�%'�2�(1(�!�!*%��������� ���%)( 2���2' 2�)! !2�%'�2�(1(�!�!*%��������� ���%)( 2���2' 2�)! !2�%'�2�(1(�!�!*%�������� �� 2�21 !"� 2�21 !"� 2�21 !"� 2�21 !"���!�7777

La estructura de control condicional � ����5�� tiene la opción � ��� que permite ordenar la ejecución de una o más instrucciones en caso de que la condición o condiciones no se cumplan. La sintaxis es: � �>��� � =������� � ����?����������

� ������

������

������

� ����

� ������

������

������ �

7 ��� ��

Al entrar a esta estructura de control condicional, sólo se ejecuta uno de los dos conjuntos de instrucciones. Si la condición o condiciones se cumplen se ejecuta el conjunto de instrucciones correspondiente al � , de lo contrario, se ejecuta el conjunto de instrucciones correspondiente al � ���. Utilizando esta opción se puede pulir el código del algoritmo antes presentado.

���������������������������� � �������� ��������������(�����&�����������������������������(&������������ ����2�� �3�����������4����������������� � ���������5� ����B/������ ���������>�C��,���������5� ����������������C���?����������� � �� �>�����.�����=������.��D�?������������ ���� ����B��E������������������� ����������

���� ������������������7������������� �����4�������������(����� ����F��������������������4�������������&�� �>���(�<�'�%����&�<�'?�������������������������(#���&��������� ������(���#������&���.���������� ����

���� ����G��� ��������������� �G�������4���������������� � ��� ��� � � 7 ��� �

���� ������������������������������ ��4� ������ ����8�����7 �� 9�� ���

� � � ������ ���� ����H����"����E������������� =� ��7 ��� ���������� ���

��

��� ��������������� ���� ��������������������

��

El cuerpo de una estructura condicional � �����5�� puede contener a su vez otra estructura de control condicional � , simple o de bloque. Cuando esto ocurre se dice que las estructuras de control están anidadas.

Ejemplos de formas de codificación con estructuras condicionales anidadas "�� �>�"�?��������������"������ �>�"�?�������������������"����������� �>�"�?����������� ��"�� ��� �>�"�?� ������� =���������������"����������� ����� �������"����������7 ��� ����������"������� ������������������"������7 ��� ������"�7 ��� �

���"�� �>�"�?��������������"������ �>�"�?�������������������"������ �����������������"�����7 ��� �����"������ �>�"�?� ������� =������� �>�"�?�������������������"�����7 ��� �7 ��� �"

Obsérvese la forma de escribir el código (con sangría) y que una opción � ��� está asociada al � de bloque activo (que no se ha cerrado) más cercano a ella.

Ejemplo 1. Intervalos bien conformados ? �� �� ������� �� �E����E����� ���� ��� ��� �3 �������� �� �2�� ��: ��� �� �� <��� ����������2�� �8�� �� �2�� �8� �� ����� ��� ��� � �� ����� ��I �������� �� � ��� � �� ���������� �� �2�� � ������<2���������� ��� �2�� ��� ������<2���� ���� ���H ��� ������ ������ � � ��� �� ������ �� � ���

6& 7 �,� � �8 � ��� � � 6� �9 & ��

=� �� �26 ������ >��2����������� ���2��������2 ������2��������2 ����� ������=U� ��V�? �2��� ������� �� �� ���; 2�� ������ ���� ����� �� � ��� �3 �������� �� �2�� � ����� 3 ��� �3 ������� ��>��% % �7 ����� ��� ��� �� �� ������=E����� �� ��*>�� ������=@) <2���������� ���>�������2������ ������=@) <2���� ���� ���>�������2 ���� ������=E����� �� ��*>�� ������=@) <2���������� ���>�������2�����

����������������������������� ��������� �����������������

��

� ������=@) <2���� ���� ���>�������2 ����% % �A � �� �2���� ����2� �� ��� ���� ���� ��� �����=? �� �� ������� �� �E�*�P>���2������=�>���2 ����=Q���E��P>����2������=�>���2 ����=Q*>�� ��&��2����. ��2 �������2����. ��2 ��(���� ��� �

� ������=E����E��� �3 �������� �� �2�� �>� �6 � �

��&��2����. ��2 ��(���� ��� ���� � � ������=E��� �3 ������� �� �2�� ���� �E��� �>�

�6 � �� � ��&��2����. ��2 ��(���� ��� ������ � � � ������=E��� �3 ������� �� �2�� ���� �E��� �>����������������� �6 � �� � � � ������=E����E��� �3 ����� ������2������ �� �2�� �>����������������� ���6 ������������ ���6 �����6 ��� ������=� � ���� �� ��J �� ����������� � �����>���������2����

,� 6�8 7 � �: ���� � � �; � � �� ��

��� ��� �*� � � � � ��� ��� �#*�E�*�P����C Q��E�*�P���'��Q� � � � E�*�PC ����Q��E�*�P'�����Q�D � ���� *�) �� ������� �� �P����C Q���� � D � ���� *�) �� ������� �� �PC ����Q����P���'��Q�� �3 ��2���� �� �2�� �� � � P'�����Q�� �3 �������� �� �2�� ���

7 �� �� �� ��2�2 ����

" � ��� ��� ; ��� � � � � ��� �� � � � " � ��� ��� ; ��� � � � � ��� �� � ���2����� ����� � ����� � ��2����� ����� � ��C �

��2 ��� ����� � ��C � � ��2 ��� ����� � �����

��2����� ����� � ���� � ��2����� ����� � ��'���

��2 ��� ����� � ��'��� � ��2 ��� ����� � ����

���� ��� �/*� � � � � � ��� ��� �%*�E�*�PC ����Q��E�*�P����'��Q� � � � � E�*�PC ��'��Q��E�*�P������Q�D � ���� *�7 �������� �� �PC ����Q�� �3 ������ � � D � ���� *�7 �������� �� �PC ��'��Q�� �� �3 ��� �� �2�� ���� �P����'��Q�� �� � � � ������ �� �2�� ���� �P������Q� <���

� �

" � ��� ��� ; ��� � � � � ��� �� � � � " � ��� ��� ; ��� � � � � ��� �� � ���2����� ����� � ��C � � ��2����� ����� � ��C �

��2 ��� ����� � ����� � ��2 ��� ����� � ��'���

��2����� ����� � ����� � ��2����� ����� � �����

��2 ��� ����� � ��'��� � ��2 ��� ����� � �����

��� ��������������� ���� ��������������������

�#

Ejemplo 2. Diferencia de intervalos.

Dados los intervalos I1 e I2, averiguar si un número real r pertenece a la diferencia de los intervalos cerrados I1 e I2 (I1-I2). Para que el número pertenezca, debe estar contenido en el primer intervalo pero no en el segundo. �6& 7 �,� � �8 � ��� � � 6� �9 & ��

=� ���������6 ������ >��2�������������2��������2 ������2��������2 �������� ������ =U� ��V� ? �2�� � � ������ �� � � �� �; 2�� � ����� � �� �� �; 2�� � ����� �� � � ��� � �� � �� ����; 2�� ����������������� ����������� ��� ������� �� ��U: � �� �9 �� ��� ������� �� �� ��� � �� �3 �������� �� �2�� V>��% % �7 ����� ��� ��� �� �� ������=E����� �� ��*>�� ������=@) <2���������� ���>�������2������ ������=@) <2���� ���� ���>�������2 ����� ������=E����� �� ��*>�� ������=@) <2���������� ���>�������2������ ������=@) <2���� ���� ���>�������2 ����� ������=@M 9 �� �� �������� ���� ��� ���� ��� ������������������ ����������� ��� ������� �� ��>��������% % �A � �� �2���� ����2� �� ��� ���� ���� ��� ������=? �� �� ������� �� �E�*�P>���2������=�>���2 ����=Q���E��P>����2������=�>���2 ����=Q*>�� ��&&�� ≥ ���2��������� ≤ ���2 ��(���&��. ���2������ ���+ ���2 ��((���� ��� ����� ������=7 ���; 2�� �=����= <����������������� ����������� ��� ������� �� �� �� ���������������������������������2�� ���� �� ���� �� �� �>� �6 � ���������� ������=7 ���; 2�� �=����=� ����������������� ����������� ��� ������� �� ��=����6 ���� ������=� � ���� �� ��J �� ����������� � �����>���������2����

����������������������������� ��������� �����������������

�+

Palabras reservadas ��� ���� �������

���� ��� ����

6���� ���������

�������� ���

���� ��� � �

��������� � ����

7 ��� � � �� �� � �� �� � �%���

��� 7 ����� ���� �� � � ��� ��� ������ �� ������� 9 � ��� ������ �� �� ���� �� ��� ����: E�� ���� � ���F 2�3 ������ �����: E� �2������2���� ��� ���� ����8���� ���� � � ����8��� ����� �� ����

���� � �� �� ����� ����� ��� ���� �� �����8�2�� �� ��; ���2 �� ��� ��� ����� ��&� ����������� �������� �� (����� �� �������

��� ���8�2�� � �������������� �� ������� ����������� ��� ������� �� �� �� ���� ��� ��� �*� � � � � ��� ��� �#*��

E�*�PC ����Q��E�*�P'�����Q���*����� � E�*�P'C ����Q��E�*�P'�����Q���*�L �D � ���� *�: <�6 6 6 �K �6 6 6 � � � D � ���� *�: <�6 6 6 �K �6 6 6 �

� �7 �� �� �� ��2�2 ����

" � ��� ��� ; ��� � � � � ��� �� � � � " � ��� ��� ; ��� � � � � ��� �� � ���2����� ����� ��� � ��2����� ����� ���

��2 ��� ����� ��� � ��2 ��� ����� ���

��2����� ����� ��� � ��2����� ����� ���

��2 ��� ����� ��� � ��2 ��� ����� ���

�� ����� ��� � �� ����� ��

���$ � F � �� ��� ��� ���� ���2 ������ � �� ����� � �� ����� ��� ���2� ��D ������� ����� ����� ��� ���� �� ���

��� �� � �� ��� ���� ���2 ����� ���� ������ ���������� �� �� ��2�2 ������������������������

��$ ��� ? �� �� ��� �������� � ��� ������ � ����� �� � � � � � �� ��� �� F � 2����� @F 3 �� � � ��� � ���������� � �� � ��� � ��� ��� ������ ��� � ���$ ���$ ��

����$ ���? �� � ������������ ��� ������� ����� ��� � �� ��� �����S ������$ �$ �? �� � ���; 2�� ������ �� ��� ������� ����� ��� ����� ��2��������$ ��� � ������ ��� ������� ��� ���<2��� � ����� 3 ���� � �� �� ������� � ��� ���� � ��� ������ 4 ������ �� �� � � � �� � � ��

������ ����� ��2�� ����� ��2�� ������� ���� ��� ����� �&2�� �� �� ����� (��: ��� �� � ���� ���������2�� �8��� ����� ���� �� �� ���� ����� ������8�� ��� ��� ������ ���2 ��

���$ �"�F��� ������� ������������ �� ��� 2�� � �� ��� ��� ��� �� � �� ��� � ������ � �� �� ����� 2��� ��9 �� �� ������ ���� ��

� �� ������ ��2������ ������ �� ����� ��� ��7 ���� �� ������ ��� ������� ��2�� �8���� �� �� ����� ��� ���

��� ��������������� ���� ��������������������

�,

��$ �B � A �� ����� �� ��� � �� � � �� �� � � � � ��� � ��� � � �� �����3 �� � ��� / ������ � �� ������� � ����� ���� � � ������3 �� � ��

��� �( � ��< �� � ������ ���� ����<2��� ���� �� � � � ���� ������ �������� ��������������������� � �� �� ��� �� ���� ��� ��� ������ �� ���� ����� �� � ���� � ��� ����������2�� �� ��� ������ �23 ����� ��

�: ����� � �� ��� �� �� �� �2�� �� ��� ���� ����� �� ��� �����2����� ��2�� �8��� ����� ����� �����������8�� ��� ��� ������ ���2 ��

�7 8�2�� ��*�� � ) �� ����� �����$ ����� ����� �����$ ����� $ ��� �����$ �

� � D � ���� ��7 �����3 �� � �� ����� �/��/���/�� ��( � ��< �� � ��� ����<2��� �� ��� �����=���

7 8�2�� ��*�� � ) �� ����� �����"����� ����� �����"����� �$ ��� �������� D � ���� *�7 �����3 �� � �� ����� �.��.���#�� ��� � � � ���� ������� ��������������������� � �� �

� ��� �� ���� ��� ��� ������ �� ���� �� �#/���

7 8�2�� �$ *�� � ) �� ����� ����� ����� ����� �����$ ����� �$ ��� ��������� D � ���� *�7 �����3 �� � �� ����� � ��$ ������� �� ����� ��������� �23 ����� �2�� ������

�7 8�2�� ��*�� � ) �� ����� ������������ ����� �����'������ �$ ��� �����B �

� D � ���� *�) � ���� ��7 �����3 �� � �� ����� �$ ��>%���?�� ���� �������$ �C �A �� ���� ������ ��� �� ��� ����� ���� ��*���

o @: ��������� �� ���� ��7 ���<� ���������2�������� ��� ����� �� 9 ��o @: ���������� ��7 ���<� ���������2�������� ��� ����� �� 9 ��o @7 �� ���� �� �� ������� ����� ���@A ��� 9 ��: ����� ����@� 3 �� � ���� �� �� ���� � �� ��� ��

� �� �� ������� ����� ����

��$ � �A �� ��� ����������� �� ��� ��� ��� �� �� ��������4 ���������� ������ �� � <����������������������� ��� �3 �� ��� ���� ��� �� : �� � � ����������� � ������ �� 2�� �8�� � �� ��� �� �� � ����� �� ��� �8�� ��� �� � ��� ��� ���2 �� : �� ��� � �� ��������������� ��� �/ �������� �� �� ���� � �� �� � �� ��� �9 ��������� ���� ���� �� ������� ����/ ��� ��9 ���

��$ �L �A �� ����� �� ��� ������ ���� ��� �� ���������& bmxy += (��*�

o F��� ���� �� � ������� �� � � �� ���� � � � �� � � � �� � � �� � ���� � �� � � �8� � &�� �� � � '� x ��

�� ���� � �'� y (���

o F��� ������� ���������� 3 ���� � ��� ���3 �� � �� �� �� � �2�������� ��� �������� � ��8� �� �� ���� ��H ��� ������ ������ ������������ �� ��� � �<�� ���/ ��� ����� �� ���������

��$ ���� I ��� �� ���� �� � �� �3 ����� � � � �� ��� � �2�� ;02 =++ cbxax � .0,,, ≠∈ aRcba � ) �� � ��� �� � �� ���

�� ���� ��� ���9 �� ��� �� ������� �� �� �� �� ����� ��� ������� ��� �� �� ������� �������� ������ ���� ��

aacbb

x2

42 −±−= �

����������������������������� ��������� �����������������

�.

� �� �� acb 42 − �� ����2�� ����� � ���2��������7 ��� �� ��� ���� � ���2�������� ������������ �� ��

� �� �� �� ������������� ���� �*��

" ��� �� ���� �� � � �� �� ���

acb 42 − �

� �� ��� �� �- ����� �� ��� � �� � �� � �� �� ������� � �� �� � �

;02 =++ cbxax �

A ���� � ? �&�(� � �� �� ������ ���� �������� ��

K �� ���� � ? �&�(� � �� �� �� 2���8� �&� ������ �2�� .,; Rnmnim ∈± (�

�� ? �&�(� � �� �� ������ ����� ��� ��

�7 8�2�� *�

�� � �� �� � ��� @ �� �� �� � �� ��� �� �- ����� �� ����� �� � �� � �� � �� �

" ��� �� ����� ��� � �� � �� � �� �

;05.232 =+− xx � ��� 2���8� ��&� � ���2���������� ���� (�

ix 5.05.11 += �� ix 5.05.12 −= �

;022 =−− xx � ������� ���� �������� ��&� � ���2�������� ���� (�

21 =x �� 12 −=x �

;0442 =+− xx � ������� ����� ��� ��&� � ���2���������� (�

21 =x �� 22 =x �

�: � �� ���� ����� ���� ��� �� �3 ������ �� ��� �� �� ��� ��7 ������� ���� �� ����� ��������� �������2����������� �� ����� ���� �� ��� ���� � � �� �� �� ������������� ���� ���: � �� ��� ��

� � � ���� ��� ����� ��� ��� �������W ������� �� u �� 2 � .5.0^u ���

��$ ����� 5 � ���� ��� �� ���; 2�� ������ ��������������������� ����� �� ������ ��� ��� ��� � ������ �� � ( ]ba, ��� [ )c,5 ���

���� �� ��� � ����� � �� � � � ����� � �� ��� �; 2�� � ����������� ���� � �� ��� ��� �� � 2 � �� ��� ����� ����� ��� ) �� �� �� �� ����������� ��� �� �� ����� ��� ��� ��� ����� ���������� ��� ������� �� �� �9 �������� �� �2�� ��� �� ������� ������<2���������� �� ���2�� �� ��� ���� ������<2���� ���� ���7 ���� �� ��� ����� � �� ��� ������� �� � ������ ����� � ��� ����� ������� ��2�� �8��� ����� ����� �����������8�� ��� ��� ������ ���2 ��

�� �� �� ����� ����� ��� ���� �� ��� � � ��� ��������� �8����� �<�2�� �� � ����� �� �� �� ���� ���� ��

� ������� �� � ��� ( ]10 ,4− ��� [ )13 ,5 ��E� ���� ������ ��������������������������� �� �� ��2�2 ����

� ��� � �� ����������$ ����? �� �� �����; 2�� ������ ������������� �� �� ���; 2�� ����� ������ 2��� ��� ��2���� ������$ ��$ �? ������ ��; 2�� �� �� ��� �������� �� �� ����2�� �� �� ��"������$ ���� ? �� ������; 2�� �� 2��� � � � �� ����2�� �� � � �� �� � �� �� � �� � ��2 ���������� � � � �� ����2�� �� � �

�� ��� ���� ��� �� ��� �� �����$ ��"�? �� ����; 2�� *�

�� � X� ���� ������� ������������ 2�� � � ��� � �� ��; 2�� � ��� ���� ���� X� ���� ������� ������������ � �� � ��� �� ����2�� ��; 2�� � ��2�� �� �� ��� �� �; ���2 ��� ��

� � �� ��; 2�� �� � ��� ���� ����

��� ��������������� ���� ��������������������

�/

��$ ��B �D ������� ����� ����� ��� ���� �� ������ �� � �� ��� � �� ����� ���� ���2 ��& � ��� � � � � �'�( � ����

���: � �� ��� ���� � �� ��� � �� ���� � �� ��� � � �.A�#A�#�- �#%�&� 2��5 ��G ��F(���� ������ �2������� � � � �

=� 26 ������ �� >��2������������ 2��5 ��G ��F�% % �7 ������ ���2 ����2������ ���� ��� �� ���; 2�� �������������� �� ��% % ������� �� �&5 �G Q��P"�F(��: �� � ���� ����������� ��� �� ��������� ������=� ����Y ��� ���� � �� ���; 2�� �������������� �� ������� �� �&5 �G Q��P"�F(��� ������ �� �� ��� ��? 9 ��; 2�� �>������ 2�� ������=? �������� ��� ��������� �� �&5 �G Q��? 9 ����� �� ��� ��5 �>� � � �����5 �� ������=? 9 ����� �� ��� ��G �>�����G �� ������=? �������� ��� ��������� �� �P"�FQ��? 9 ����� �� ��� ��F>�����F�% % �: ��� ������������������������ ����; 2�� ����� �� ������� �� ���� ������� 2� ��&� 2+ 5 ���� 2 ≤ G ���� 2� ≥ "���� 2�. F(���� ��� ��� �������=� <�>� �6 � ��� ������=�� >����6 ��� ������=�������������� �� ������� �� �&�>�5 ��=�>�G ��=Q�P"�>�F��=(�>�� ������=5 � �� �>���������2����

�����) ��������������� ��������������������

�= 2�6 $ 6 � 2>��2����������� �� 2���� 2���� 2$ ���� 2 ����� 2 �������% % �A � ���� ������=: 2��� ����� ��; 2�� ������ �� ��� � �����>�� ������=K ; 2�� ���, �=������ 2���� 2 �������� 2 ��! � 2��%% �J ���� ����� ����% % �A � ���� ������=K ; 2�� ���, �=������ 2���� 2 ������� 2 ��! � 2��%% �J ���� ����� ������

����������������������������� ��������� �����������������

�0

% % �A � �$ �� ������=K ; 2�� �$ �, ������� 2$ ��� 2 �������� 2 ��! � 2$ �% % �J ���� ����� �$ ��% % �A � ���� ������� 2��>�! �=�� 2��>�! �=�� 2$ �>�, �=��� 2 ���� ������=J ��� 2�>��% % �J ���� ����� �����������2����

� ��������������������������������" 7 � �7 8 � �� �,�� � � � � � � � #� � � /� �� � � ���� ������ �� �� ��������

#� ��� � � �

/� � � � �

%� � � � �

�����) ��������������� ��������������������

�B � � ��� B ��2����������� �� ���� ������=? 9 �� ���&��Z����(�>������ ����

� ������=���� �2���� �>�

��&� ���≥�L ����� ���≤����(���� ��� �� ������= ��� �������>�

�6 � �

� ��&� ���≥� ����� ���. L �(���� ��� �� � � ������=2 ��� �� >�

� � ��&� ���≥�C ����� ���. �(���� ��� �� � � � ������=� �� >�

� � � ��&� ���≥�B ���� ���. C �(���� ��� �� � � � � ������=���������>�� � � � ��&� ���. �B �(����� ��� �� � � � � � ������=��� ���>�� � � � ���6 ��� � � ���6 ��

���6 �����6 ��

���6 ��� ������TJ ���T���������2����

���

��� ��������������� ���� ��������������������

#5

���� � � �� � �& � �

" � ��� ���� � ���

5 �� � ���� ��� ������� ������

����� ������ �

����� ���L �� �

���$ � ����"� �

����� ���C $ � �

�� ���) ��������������� ��������������������

�T��� �� 6 �� �6 �� �� T��2����������� ��� �� ���� �� ����� �� ���������� ������T: ��� �� �� �T������� �� �� ��&�� �� �. "�(���� ��� ������ ������TA � �������� ����������$ ��������2��� �T���� �� �T��� �T������ ������T������� �� T�������������6 �� ��&�� �� �+ �L �� ��� �� �. B �(���� ��� �������� �� ������ �� %������6 �� ��&�� �� �+ "L �� ��� �� �. C �(���� ��� ��������� �� ������ �� %�������6 �� ��&�� �� �+ B L �� ��� �� �. ���(���� ��� ��������� �� ������ �� %��������6 ��� ������TA � �������� ����������$ ��������2��� �T���� �� �T��� �T�� ������TJ ���� ����� �� �T���������2����

������� � � �� � �& � � ����" � ��� ����� �� � �C � �� �� �� �@ ��� D ���������0� E�� �� � 1�

�" ��� �� ��� �@ ��� �������� ���� � � �

��������������� ��������������"�� � �

��������������� ��������������$ $ � � �

�������������$ � ��������������L �� � �

��������������� ���������������� � ��