SlideShare una empresa de Scribd logo
1 de 148
Descargar para leer sin conexión
UNIVERSIDAD AUTÓNOMA DE OCCIDENTE
                       FACULTAD DE INGENIERÍAS
                DEPARTAMENTO DE OPERACIONES Y SISTEMAS
                  PROGRAMA DE INGENIERÍA INFORMÁTICA




                                            INFORMÁTICA 1
                                           (Algoritmos con Java)
                MATERIAL RECOPILADO POR LOS PROFESORES
                  J. ANTONIO LEMOS B. Y EDUARDO VICTORIA Z.

                             SANTIAGO DE CALI, FEBRERO DE 2007




Informática 1. Versión 1.3 Enero de 2010
                                                                   1
.
ASIGNATURA:                                               INFORMÀTICA 1
CODIGO:                                                   532219
CREDITOS:                                                 3
PRERREQUISITOS:                                           (Ninguno)
CARACTERÍSTICAS:                                          HOMOLOGABLE, VALIDABLE
FACULTAD:                                                 INGENIERÍA
PROGRAMA:                                                 INGENIERÎA INFORMÁTICA, ELECTRICA,
                                                          MECANICA, ELECTRÓNICA,
                                                          MECATRÓNICA, BIOMÉDICA, INDUSTRIAL,
                                                          AMBIENTAL, MULTIMEDIA
DEPARTAMENTO QUE OFRECE:                                  CIENCIAS DE LA INFORMACIÓN
AREA:                                                     INFORMÂTICA
PERIODO ACADÉMICO:                                        2007 – 1 ( Enero – Mayo )


I.          OBJETIVO GENERAL
           Capacitar al estudiante en el diseño e implementación de algoritmos computacionales,
           utilizando los conceptos básicos de la algoritmia, e introduciéndolo en el estudio de la
           programación orientada a objetos.

II.         OBJETIVOS ESPECÍFICOS
       •     Identificar los sistemas básicos de numeración y sus operaciones fundamentales.
       •     Comprender las operaciones básicas de la lógica booleana.
       •     Modelar procesos mediante técnicas algorítmicas.
       •     Reconocer y aplicar correctamente las diferentes estructuras de decisión y de repetición
               en programación de computadores.
       •     Conocer y apropiar el paradigma Orientado a Objetos y su aplicación en la programación.

III.        CONTENIDO PROGRAMÁTICO

           UNIDAD 1 – Algoritmos
           1.1 Procedimiento
           1.2 Ciclo de Diseño
           1.3 Definición
           1.4 Propiedades de los Algoritmos
           1.5 Representación de los datos
           1.6 Estructuras secuenciales
           1.7 Estructuras condicionales
           1.8 Estructuras de repetición
Informática 1. Versión 1.3 Enero de 2010
                                                                                                        2
.
1.9 Ejercicios resueltos
       1.10 Ejercicios propuestos

       UNIDAD 2 – Introducción a Java
       2.1 Historia de Java
       2.2 Características básicas de Java
       2.2.1 Orientado a objetos puro
       2.2.2 Simple
       2.2.3 Distribuido
       2.2.4 Robusto
       2.2.5 Seguro
       2.2.6 Arquitectura Neutral
       2.2.7 Portable
       2.2.8 Interpretado
       2.2.9 Alto desempeño
       2.2.10 Multihilos
       2.2.11 Dinámico
       2.3 La estructura de Java
       2.4 Instalación de Java
       2.5 Construcción básica de una aplicación
       2.5.1 Edición
       2.5.2 Compilación
       2.5.3 Carga
       2.5.4 Verificación
       2.5.5 Ejecución

       UNIDAD 3 - Tipos de datos, variables y Operadores (Java)
       3.1 Variables
       3.1.1 Nombres de Variables
       3.2 Palabras reservadas
       3.3 Tipos de datos
       3.3.1 Tipos Primitivos de Datos
       3.3.2 Tipos Referencia a Objeto
       3.4 Declaración e inicialización de las variables
       3.5 Promoción de datos (Casting)
       3.5.1 Conversión automática de Java
       3.5.2 Conversión de tipos incompatibles
       3.6 Visibilidad y vida de las variables
       3.7. Operadores de java
       3.7.1 Operadores aritméticos
       3.7.2 Operador módulo ( % )
       3.7.3 Operadores de asignación
       3.7.4 Operadores unarios
       3.7.5 Operador instanceof
Informática 1. Versión 1.3 Enero de 2010
                                                                  3
.
3.7.6 Operador condicional ?:
       3.7.8 Operadores de incremento y decremento
       3.7.9 Operadores relacionales
       3.7.10 Operadores lógicos boléanos
       3.7.11 Operador de concatenación de cadenas de caracteres (+)
       3.7.12 Operadores que actúan a nivel de bits
       3.8 Precedencia y asociatividad de los operadores

       UNIDAD 4 - Sentencias de control en Java
       4.1 Estructura Secuencial
       4.1.1 Salida de datos estándar
       4.1.2 Entrada de datos estándar
       4.2 Sentencias de decisión o selección
       4.2.1 Selección simple ( if )
       4.2.2 Selección doble ( if – else ; if – else - if )
       4.2.3 Selección múltiple ( switch )
       4.3 Sentencias de Repetición ( ciclos o bucles)
       4.3.1 Ciclo para ( for )
       4.3.2 Ciclo mientras ( while )
       4.3.3 Ciclo haga mientras ( do – while )

       UNIDAD 5 – Métodos
       5.1 Definición de métodos
       5.2 Paso de Parámetros
       5.3 Llamado a Métodos


       Apendice A – Algunos conceptos de la programación orientada a objetos (P.O.O)

IV. METODOLOGÍA
    Durante el curso se emplearán las siguientes Métodos Pedagógicos:
             • Clase: Mediante la cual el profesor da explicaciones sobre algunos temas, resuelve
                interrogantes y aclara dudas. Los estudiantes, por su parte, escuchan las
                exposiciones, toman notas, preguntan y participan opinando y aclarando dudas.
             • Estudio Independiente: El estudiante de manera independiente realiza lecturas,
                tareas, consulta libros, realiza composiciones escritas y ejercicios.
             • Taller: En el cual se realizan ejercicios de práctica de los conceptos revisados en el
                curso.
             • Tutoría: Donde profesor y estudiante trabajan sobre el proceso, las dificultades y los
                problemas que va teniendo el estudiante: le ayuda a interpretar lo que está
                ocurriendo.
     Trabajos de Consulta:
     1. Sistemas de Numeración. Sistema Binario, Octal, Hexadecimal. Conversión entre
        sistemas. Suma, Resta, Multiplicación y División en Sistema Binario.
Informática 1. Versión 1.3 Enero de 2010
                                                                                                    4
.
2. Sistemas lógicos. Tautología y contradicciones, equivalencia lógica, enunciados
            condicional y bicondicional, y argumentos
         3. Programación Orientada a Objetos. Historia, Características, Aspectos Básicos. Historia
            de JAVA.

V.     EVALUACIÓN

       La evaluación del curso considerará los siguientes momentos evaluativos:
        • Primer Examen Parcial
        • Segundo Examen Parcial
        • Examen Final (acumulativo)
        • Talleres
        • Prácticas
        • Quices
        • Trabajos de Consulta


VI.      REFERENCIAS

         BIBLIOGRÁFICAS
         1. Área de Informática UAO, Módulo de Informática 1, Publicaciones UAO.
         2. CEBALLOS, Francisco J., JAVA 2 Curso de Programación. Ed. Alfaomega. Ra–Ma.
            2000.
         3. Joyanes Aguilar Luis & Zahonero Martínez Ignacio, “Programación en Java 2 –
            Algoritmos, Estructuras de Datos y Programación orientada a Objetos”, Ed.
            McGrawHill, 2002.
         4. DEITEL, H.M., DEITEL, P. J. How to program Java. 3ª Edición. Ed. Prentice Hall. 2000.
         5. FROUFE, Augustín. JAVA2 Manual de Usuario y Tutorial. 2ª Edición Ed. Alfa Omega
            2000.
         6. WU, Thomas C. Introducción a la programación orientada a objetos con Java. Ed. Mc
            Graw Hill. España. 2000.
         7. ARNOW, David. WEISS, Gerald, Introducción a la programación con Java. Un enfoque
            orientado a objetos. Ed. Addison Wesley. España.2001


         ELECTRÓNICAS
         1. Descargar el software – J2SE, del sitio web: ) http://java.sun.com/javase/downloads/index.jsp
         2. Descargar el editor – NetBeans del sitio web:
         http://www.netbeans.org/downloads/start.html?platform=windows&lang=en&option=all&versi
         on=6.7.1
         3. Documentación de JAVA (JDK 1.6) http://java.sun.com/javase/downloads/index.jsp
         4. Tutorial de Java http://java.sun.com/docs/books/tutorial/
         5. Free Electronic Books in Java and C++: http://www.ibiblio.org/pub/docs/books/eckel/

Informática 1. Versión 1.3 Enero de 2010
                                                                                                        5
.
6. Aprenda Java como si estuviera en primero
         http://www.abcdatos.com/tutoriales/tutorial/l7041.html
         7. Tutorial de Java (Augustin Froufe) http://www.cica.es/formacion/JavaTut/
         8. Java en Castellano http://programacion.com/java/


FUENTES DE DONDE SE RECOPILÓ EL MATERIAL PARA LA ELABORACIÓN DE
ESTE MÓDULO DE INFORMÁTICA I.

- Universidad de Valencia, España, Depto. de Informática
           http://informatica.uv.es/docencia/fguia/TI/Libro/PDFs/CAPI4.pdf

- Universidad de Oviedo,España, Depto. de Informática
     Profesor Daniel Gayo.
       http://di002.edv.uniovi.es/~dani/asignaturas/

- Aprenda Java como si estuviera en primero, Escuela Superior de Ingenieros Industriales de San
  Sebastián.
     http://mat21.etsii.upm.es/ayudainf/aprendainf/Java/Java2.pdf

- Matemáticas para Computación, Seymour Lipschutz, McGraw – Hill, 1992




Informática 1. Versión 1.3 Enero de 2010
                                                                                                  6
.
UNIDAD 1. ALGORITMOS


1.1 Procedimiento de Datos




1.2 Ciclo de Diseño




     • Requerimiento - Características que se desea que posea un sistema o un software.

     • Diseño - proceso previo de configuración mental en la búsqueda de una solución en cualquier
         campo.

     • Especificación - documento técnico oficial que establece de forma clara todas las características,
         los materiales y los servicios necesarios para producir componentes destinados a la obtención
         de productos.

     • Implementación – Traducir a un lenguaje de programación concreto un algoritmo.

     • Formas y métodos para llevar a cabo algo.



Informática 1. Versión 1.3 Enero de 2010
                                                                                                       7
.
1.3 Concepto de Algoritmo

Definición de algoritmo. Etimología del término algoritmo
En general, un algoritmo es una secuencia de instrucciones o pasos que es llevada a cabo de forma
mecánica y sistemática por un actor que se desenvuelve en un ambiente o entorno dado, para resolver
un problema determinado en un tiempo finito.

Esa es una definición válida de algoritmo. Otras posibles definiciones son las siguientes:

Un algoritmo es un conjunto de instrucciones combinadas de forma adecuada para resolver un
determinado problema en una cantidad finita de tiempo. Cada instrucción es una indicación sencilla y
no ambigua.

Secuencia de instrucciones o pasos que es llevada a cabo de forma mecánica y sistemática por un
actor que se desenvuelve en un ambiente o entorno dado, para resolver un problema determinado en
un tiempo finito.

Despues de los siguientes ejemplos, el lector debería tener bastante claro qué es un algoritmo, en qué
consiste y dar ejemplos de algoritmos. Ahora, es probable que se esté preguntando de dónde procede
el mismo término, “ALGORITMO”, ¿por qué denominamos “algoritmos” a los algoritmos y no
“recetas” o “combinaciones de indicaciones sencillas y no ambiguas...”?

El término proviene de Mahommed ibn Musa al-Khowârizmî (Mahommed, hijo de Musa, natural de
Kharizm), matemático persa del siglo IX; las matemáticas le deben la introducción del sistema de
numeración actual y del álgebra.
En su libro De numero indiorum (Sobre los números hindúes) proporciona las reglas para realizar las
operaciones aritméticas (con los nuevos números, por supuesto), dichas reglas se denominaron “reglas
de al-Khowârizmî” y, por deformación “algoritmos”, haciéndose extensivo el término a cualquier
conjunto de reglas para resolver un problema determinado. Como nota curiosa, un esbozo del rostro
de al-Khowârizmî aparece en la portada del clásico libro de Álgebra del Profesor Cubano Aurelio
Baldor, muy conocido en la Literaura de las Matemáticas Hispanoparlantes.



Informática 1. Versión 1.3 Enero de 2010
                                                                                                    8
.
1.4 Propiedades de los Algoritmos

     • Su lógica de construcción debe ser
     • Independiente del lenguaje

     • Simplicidad

     • Definido: sin ambigüedades

     • Preciso: orden específico de sentencias

     • Finito: principio y fin

     • Efectivo: Funciona y funciona de acuerdo a los requerimientos



Ejemplos de Algoritmos :

Ejemplo 1:
Elaborar el análisis general que responda a la pregunta: ¿Qué debo hacer para ver la película Avatar?.

       1.    Ir al cine donde proyectan Avatar.
       2.    Comprar una entrada.
       3.    Ver la película.
       4.    Regresar a casa.

Ejemplo 2:
Elaborar el análisis para obtener el área de un círculo y la longitud de su circunferencia.

       1. Utilizar las fórmulas del área y la circunferencia en función del radio.
       2. Las entradas de datos se reducen al dato correspondiente al radio del círculo.
       3. Las salidas serán los datos solicitados: área y longitud de la circunferencia.

Ejemplo 3:
Instrucciones para subir una escalera

[...] Las escaleras se suben de frente, pues hacia atrás o de costado resultan particularmente
incómodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la
cabeza erguida aunque no tanto tal que los ojos puedan ver los peldaños inmediatamente superiores al
que se pisa, y respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa
parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo
excepciones cabe exactamente en el escalón. Puesta en el primer peldaño dicha parte, que para
abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (también llamada pie, pero que
no ha de confundirse con el pie antes citado), y llevándola a la altura del pie, se le hace seguir hasta
colocarla en el segundo peldaño, con lo cual en éste descansará el pie, y en el primero descansará el
pie. Los primeros peldaños son siempre los más difíciles, hasta adquirir la coordinación necesaria.
La coincidencia de nombre entre el pie y el pie hace difícil la explicación. Cuídese especialmente de
no levantar al mismo tiempo el pie y el pie.
Llegando en esta forma al segundo peldaño, basta repetir alternadamente los movimientos hasta
encontrarse con el final de la escalera. Se sale de ella fácilmente, con un ligero golpe de talón que la
fija en su sitio, del que no se moverá hasta el momento del descenso.
Informática 1. Versión 1.3 Enero de 2010
                                                                                                      9
.
Ejemplo 4:
Elaborar Tortilla de patatas a la española (6 personas)

Ingredientes:
- 2 vasos (de los de agua) de aceite (1/2 litro)
- Sal
- 8 huevos
- 1 kg de patatas

Se pelan las patatas, se lavan y se secan con un paño; se parten en dos a lo largo y después se cortan
en láminas finitas. Se pone el aceite a calentar en la sartén y se fríen las patatas, moviéndolas de vez
en cuando y echándoles un poco de sal.

Una vez fritas (más o menos doradas, según gusten), se separan y se ponen a escurrir en un colador
grande. Se quita el aceite sobrante de la sartén.

Aparte se baten los huevos con tenedor y muy fuerte; se pone un poco de sal; en el mismo plato de los
huevos se echan las patatas y se mueven con un tenedor.

En una sartén grande (o en dos pequeñas) se ponen 3 cucharadas soperas de aceite para que sólo cubra
el fondo. Cuando está caliente se vierte la mezcla de huevos y patatas. Se mueve la sartén por el
mango para que no se pegue la tortilla. Cuando se vea que está bien despegada y dorada (esto depende
del gusto de cada cual), se pone una tapadera encima, se vuelca la sartén y se escurre suavemente la
tortilla otra vez en la sartén. Se vuelve a mover por el mango y cuando esté cuajada (a gusto) se pasa a
una fuente redonda y se sirve.


Ejemplo 5:
Algoritmo “infantil”: Multiplicación de números enteros

Para obtener el producto de dos números enteros utilizando lápiz y papel se debe escribir el primer
factor (multiplicando) y, justo debajo y alineado a la derecha, el segundo factor (multiplicador).

Se recorren todas las cifras del multiplicador de derecha a izquierda y se operan con cada una de las
cifras el multiplicando, también de derecha a izquierda, escribiendo los resultados intermedios en
líneas separadas; cada línea estará desplazada una posición a la izquierda respecto a la línea
inmediatamente superior.

Una vez se han obtenido todos los resultados intermedios se suman columna a columna
obteniéndose el resultado final.

Numerando cada uno de los pasos a seguir en cada uno de los algoritmos, formalizamos un poco
nuestro lenguaje cotidiano para escribir algoritmos, veamos:




Informática 1. Versión 1.3 Enero de 2010
                                                                                                     10
.
Ejemplo 6:
Cambiar la rueda pinchada de un automóvil teniendo un gato mecánico en buen estado, una rueda de
reemplazo y una llave inglesa.

Los pasos del algoritmo son:

       1. Inicio.
       2. Aflojar los tornillos de la rueda pinchada con la llave inglesa.
       3. Ubicar el gato mecánico en su sitio.
       4. Levantar el gato hasta que la rueda pinchada pueda girar libremente.
       5. Quitar los tornillos y la rueda pinchada.
       6. Poner rueda de repuesto y los tornillos.
       7. Bajar el gato hasta que se pueda liberar.
       8. Sacar el gato de su sitio.
       9. Apretar los tornillos con la llave inglesa.
       10. Fin.

Podríamos modificar este algoritmo, bien sea escribiendo más líneas de detalle ó uniendo algunos
pasos, y aún así funcionaría para resolver nuestro problema. Esto quiere decir que podemos tener
algoritmos diferentes, con diferente diseño, que resuelven el mismo problema. ¿Cuál de ellos es más
eficiente, hablando desde el punto de vista computacional? Ese es tema de otro curso, por el
momento nos debemos concentrar en cuál algoritmo es más claro, cual es más fácil de entender.

Ejemplo 7:
Un cliente hace un pedido a una fábrica. La fábrica examina en su banco de datos la ficha del cliente,
si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario lo rechaza. Elabore el
algoritmo correspondiente.

Los pasos del algoritmo son:
    1. Inicio.
    2. Leer el pedido.
    3. Examinar la ficha del cliente.
    4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazarlo.
    5. Fin.

Ejemplo 8:
Averiguar si un número entero positivo es primo o no, dado que conocemos la definición de número
primo: un número entero positivo, N, es primo si sólo puede dividirse por si mismo y por la unidad.
Un método que nos puede dar la solución sería dividir sucesivamente el número por 2, 3, 4...N, y,
según el resultado, podríamos resolver el problema. Un diseño del mismo sería:

     1. Inicio.
     2. Solicitar el valor del número entero positivo y guardarlo en la variable N
     3. Poner X igual a 2 ( X = 2, donde X es una variable que representa a los posibles divisores
        de N ).
     4. Dividir N por X ( o sea, operar N / X )
     5. Si el resultado de N / X es entero, entonces N no es primo ( pues esto indicaría que N es
        divisible entre X ) y saltar al punto 10; en caso contrario continuar el proceso en el siguiente
        punto, 6.
     6. Incrementar el divisor X en una unidad ( X = X + 1 )
     7. Si X es menor que N saltar al punto 4, en caso contrario continuar el proceso en el siguiente
        punto, 8.
Informática 1. Versión 1.3 Enero de 2010
                                                                                                       11
.
8. Declarar que N es primo.
     9. Saltar al Fin (punto 11).
     10. Declarar que N no es primo.
     11. Fin.

Como parte del diseño de un algoritmo está la selección de aquél que sea razonablemente aceptable,
entre todos los muchos posibles que resuelven el mismo problema (el ejemplo que acabamos de dar
es claramente mejorable, pues si N no era divisible por 2 no tiene mucho sentido volverse a
preguntar si lo es por 4).

Durante el diseño es posible y aconsejable, realizar comparaciones entre algoritmos que resuelven el
mismo problema. La bondad de un algoritmo puede medirse por dos factores:

     •     El tiempo que se necesita para ejecutarlo. Para tener una idea aproximada de ello, basta con
           saber el número de instrucciones de cada tipo necesarias para resolver el problema.
     •     Los recursos que se necesitan para implementarlo.

Así, una vez diseñado un primer algoritmo, conviene realizar una evaluación del mismo, cuestión a
veces nada fácil. Si se decide que éste no es eficiente será necesario o bien diseñar uno nuevo o bien
optimizar el original. Optimizar un algoritmo consiste en introducir modificaciones en él, tendientes
a disminuir el tiempo que necesita para resolver el problema o a reducir los recursos que utiliza.


Por ejemplo, el algoritmo del número primo se optimiza si N se declara como primo cuando X
supera a N / 2 y no esperar hasta que X llegue a N.

Ejemplo 9:
Realizar la suma de todos los números pares entre 2 y 1000.

El problema consiste en sumar 2 + 4 + 6 + 8 + 10 + . . . + 998 + 1000.
Utilizaremos las palabras SUMA y NUMERO (que llamaremos más tarde variables) para
representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 + 4 + 6 + 8), etc.
La solución se puede escribir con el siguiente algoritmo:
     1. Inicio.
     2. Establecer SUMA a 0.
     3. Establecer NUMERO a 2.
     4. Sumar NUMERO a SUMA. El resultado será el nuevo valor de la suma (SUMA).
     5. Incrementar NUMERO en 2 unidades.
     6. Si NUMERO <= 1000 bifurcar (ó, ir) al paso 4; en caso contrario, escribir el último valor
         de SUMA y terminar el proceso.
     7. Fin.

Si se estudia con atención cada uno de los algoritmos anteriores, descubriremos una serie de
características interesantes que definen la naturaleza de lo que es un algoritmo:

     •     Un algoritmo resuelve un problema específico: subir una escalera, obtener una tortilla de
           patatas, hacer una multiplicación o determinar el máximo común divisor de dos números.
     •     Un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado: una
           persona cuyo universo inmediato se reduce a su propio cuerpo y una escalera; un cocinero con
           una sartén, huevos, patatas, aceite, sal y cebolla; o un estudiante con lápiz y papel.


Informática 1. Versión 1.3 Enero de 2010
                                                                                                    12
.
•     Un algoritmo consta de una serie de pasos que deben llevarse a cabo siguiendo una
           secuencia marcada: algunos de los pasos, en uno de los algoritmos anteriores, serían: dar la
           vuelta a la tortilla, batir los huevos, pelar las patatas o cascar los huevos; dichos pasos deben
           aplicarse en un orden prefijado y no de cualquier manera.
     •     Un algoritmo se aplica de forma mecánica: un algoritmo no precisa decisiones subjetivas ni
           creatividad en su ejecución, cualquiera con una receta adecuada para obtener tortilla de patatas
           logrará una tortilla de patatas. Sin embargo, sí es necesario un acto creativo para desarrollar un
           nuevo algoritmo.
     •     Un algoritmo termina en un tiempo finito: todos los algoritmos deben finalizar, pueden
           tardar más o menos tiempo en lograr un resultado pero dicho tiempo debe ser finito.

Diseño Descendente (Top Down), ó, Modular

       Los problemas complejos se pueden resolver más eficazmente cuando se descomponen en
subproblemas que sean más fáciles de resolver que el original. Este método se denomina divide y
vencerás (Divide and conquere) y consiste en convertir un problema complejo en otros más simples
que, una vez resueltos, en su conjunto nos solucionen el original. Al procedimiento de
descomposición de un problema en subproblemas más simples, llamados módulos, para, a
continuación, seguir dividiendo estos subproblemas en otros más simples (otros módulos), se le
denomina diseño descendente (top down, en inglés). Las ventajas más importantes de este tipo de
diseño son:


1. El problema se comprende más fácilmente al dividirse en módulos o partes más simples. Cuando
   se realice la programación, utilizaremos esta idea constantemente, de forma que hablaremos
   también de subprogramas ó métodos ( procedimientos y / o funciones ).
2. Las modificaciones en los módulos son más fáciles, pues estamos ante algoritmos más sencillos.
3. La comprobación del problema se puede realizar más fácilmente, al poder localizar los posibles
   fallos con mayor precisión.


Refinamiento por pasos

Durante el diseño, entenderemos por refinamiento por pasos, la metodología por la que en un primer
esbozo del algoritmo nos limitamos a señalar o describir un reducido numero de pasos, que deberán
ser expresados con mayor detalle posteriormente. Tras esta primera descripción, éstos se especifican
con mayor minuciosidad, de forma más extensa y con más pasos específicos. En cada nivel de
refinamiento hay que considerar dos fases: ¿Qué hace el módulo? para, a continuación, responder a
¿Cómo lo hace? Como es natural, dependiendo de la complejidad del problema se necesitarán
diferentes y sucesivos niveles de refinamiento antes de que pueda obtenerse un algoritmo con
suficiente nivel de detalle. Así, en el ejemplo del cálculo de la longitud de una circunferencia y la
superficie de su círculo, a pesar de presentar en su diseño un bajo nivel de complejidad, se puede
descomponer en subproblemas más simples:

1. leer datos de entrada,
2. calcular superficie y longitud,
3. escribir resultados.

El ejemplo siguiente, nos muestra el diseño de un algoritmo para un problema de carácter no
numérico


Informática 1. Versión 1.3 Enero de 2010
                                                                                                          13
.
Ejemplo:

Diseñar un algoritmo que responda a la pregunta: ¿Qué debo hacer para ver la película MatriX?.
Un primer análisis nos conduce a un esbozo de solución, descomponiéndolo en cuatro módulos
sucesivos:

1.   Ir al cine donde proyectan MatriX
2.   Comprar una entrada
3.   Ver la película
4.   Regresar a casa

Estos cuatro pasos se pueden refinar un poco más y así este problema lo podríamos descomponer de
la siguiente forma, usando el lenguaje natural:
        INICIO ALGORITMO para ver la película MatriX
             consultar la cartelera de cines
             SI proyectan XYZ ENTONCES
                ir al teatro correspondiente
             SINO proyectan XYZ
                declarar el fracaso del objetivo y terminar
             SI hay cola ENTONCES
                ponerse en ella
             MIENTRAS haya personas delante en la cola HACER
                      esperar el instante para avanzar en la cola

                  preguntar si quedan entradas
                  SI hay entradas ENTONCES
                    comprar una entrada
                  SINO quedan entradas
                    declarar el fracaso del objetivo, regresar a casa y terminar

               encontrar el asiento correspondiente
               MIENTRAS proyectan la película HACER
                  ver la película
             abandonar el cine
             regresar a casa
           FIN ALGORITMO para ver la película MatriX

Algunas de estas acciones son primitivas para nosotros; es decir, no es necesario descomponerlas
más, como el abandonar el cine. Sin embargo hay otras acciones que son susceptibles de mayor
descomposición. Este es el caso de la acción:
                                       “encontrar el asiento correspondiente”
si los números de los asientos están impresos en la entrada, esta acción compuesta se resuelve con el
siguiente algoritmo:

           INICIO ALGORITMO para encontrar el asiento del espectador
             caminar hasta llegar a la primera fila de asientos
             REPETIR
                 comparar número de fila con número impreso en la boleta
                 SI no son iguales, ENTONCES
                      pasar a la siguiente fila
             HASTA_QUE se localice la fila correcta

Informática 1. Versión 1.3 Enero de 2010
                                                                                                  14
.
MIENTRAS número de asiento no coincida con número impreso en la boleta
                  HACER avanzar a través de la fila a la siguiente butaca

             sentarse en la butaca
           FIN ALGORITMO para encontrar el asiento del espectador

De esta forma, podríamos seguir hasta la descomposición de las distintas acciones en instrucciones
susceptibles de ser interpretadas directamente por el computador.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo
computacional; en caso contrario, se dice que es un algoritmo no computacional.

Los que se trabajaran en el curso de informática 1, serán los algoritmos computacionales.

Programación del Algoritmo
Una vez que el algoritmo está diseñado y representado, se debe pasar a la fase de resolución práctica
del problema con el computador. Esta fase se descompone a su vez en las siguientes subfases: (Ver
Figura 1.3)

1. Codificación del algoritmo en un programa.
2. Ejecución del programa
3. Comprobación del programa.


                                                     Programación
                                                     del algoritmo
                Codificación en un                   Ejecución del           Comprobación
                    programa                           programa              del programa

                                           Fig. 1.3 Programación del algoritmo

La fase de conversión de un algoritmo en instrucciones de un lenguaje de programación se denomina
codificación. El código deberá estar escrito de acuerdo con la sintaxis del lenguaje de programación,
ya que solamente las instrucciones sintácticamente correctas pueden ser interpretadas por el
computador.

Nótese que durante el proceso de programación, se debe separar el diseño del algoritmo de su
posterior implementación en un lenguaje de programación específico. Por ello distinguimos entre el
concepto más general de programación y el más particular de codificación, que depende del lenguaje
de programación utilizado. Al llegar a este punto, es posible que el lector conozca al menos uno de
estos lenguajes y éste es el momento en el que podría mostrar sus habilidades para efectuar una
codificación lo más correcta y eficiente posible.

Tras la codificación del programa, éste deberá ejecutarse en un computador. El resultado de esta
primera ejecución es incierto, ya que existe una alta probabilidad de que aparezcan errores, bien en la
codificación, bien en el propio algoritmo. Por tanto, el paso siguiente consiste en comprobar el
correcto funcionamiento del programa y en asegurarse, en la medida de lo posible, de la validez de
los resultados proporcionados por la máquina.


Informática 1. Versión 1.3 Enero de 2010
                                                                                                    15
.
Formas de describir un algoritmo
Dado que los algoritmos permiten resolver problemas de forma mecánica, está claro que resulta muy
interesante compartir dicho algoritmo de tal manera que otras personas puedan conocerlo y aplicarlo;
así surge el problema de describir los algoritmos de forma tal que todas las características que los
definen se mantengan invariables.

Lenguaje natural. La primera y más sencilla forma de describir un algoritmo es empleando el lenguaje
natural; por ejemplo, el algoritmo para encontrar las raíces de una ecuación de segundo grado (ó,
ecuación cuadrática) del tipo aX 2 + bX + C = 0 ( a diferente de cero ), podría describirse así:

1. Definir (o, leer) los coeficientes de la ecuación de segundo grado: a, b y c , donde a no es cero.
2. Determinar el valor del discriminante: d = b 2 - 4ac.
3. Si el discriminante es cero, sólo hay una solución: -b / (2a).
4. Si el discriminante es positivo, hay dos soluciones: (-b ± d ) / (2a).
5. Si el discriminante es negativo, no hay soluciones reales.

La ventaja fundamental es la facilidad de comprensión, pues cualquier persona (hispanoparlante, por
supuesto) que lea dicho algoritmo podría entenderlo y aplicarlo; sin embargo, son varios los
problemas que plantea describir un algoritmo de esta forma:

     •     El lenguaje natural no es universal, este algoritmo sería completamente inútil para los no
              hispanoparlantes.
     •     El lenguaje natural es ambiguo y, por tanto, susceptible de errores.
     •     El lenguaje natural es demasiado amplio, lo que para una persona puede ser una instrucción
           sencilla, puede no serlo para otra y, desde luego, no lo será para un computador.

Por todo ello, se han buscado nuevas formas de describir los algoritmos que, cuando menos, sean más
universales, estén mejor delimitadas y no sean ambiguas; dos técnicas que logran esto son los
organigramas y las notaciones en pseudocódigo.

Diagramas de Flujo (Organigramas)

Los diagramas de flujo u organigramas permiten describir los algoritmos de forma gráfica; para ello
utilizan una serie de bloques que indican distintas circunstancias y flechas que muestran bajo qué
condiciones se pasa de un bloque a otro.

Algunos de los símbolos son los siguientes:




Informática 1. Versión 1.3 Enero de 2010
                                                                                                        16
.
A continuación, se muestra un organigrama que describe el algoritmo anterior.




Informática 1. Versión 1.3 Enero de 2010
                                                                                17
.
Los organigramas presentan varias ventajas frente al lenguaje natural:
   • Los símbolos son universales.
   • Son menos propensos a la ambigüedad.
   • Por estar basados en un número pequeño de bloques y reglas para su empleo permiten
       delimitar mejor los algoritmos.
   • Se aproximan más a la forma en que trabaja el computador.

Sin embargo:

     •     El hecho de emplear símbolos supone que una persona que desconozca los símbolos puede
           tener dificultades para comprender el algoritmo o no entenderlo en absoluto.
     •     Aunque los símbolos son universales, el texto que se coloca en su interior sigue siendo
           lenguaje natural.
     •     La representación gráfica puede resultar bastante tediosa y, en el caso de algoritmos
           complejos, extremadamente confusa.
     •     Un computador no es capaz de utilizar una representación visual como descripción de un
           algoritmo.

Actualmente, los organigramas no son muy utilizados, aunque para mostrar el funcionamiento de
algoritmos sencillos continúan resultando prácticos.


1.5 Pseudocódigo

El pseudocódigo pretende juntar en un solo tipo de representación las ventajas del lenguaje natural y
de los organigramas sin ninguno de sus problemas; por tanto, el pseudocódigo:
    • Es fácilmente comprensible para una persona que lo vea por vez primera.
    • Está bien delimitado.
    • Elimina las ambigüedades del lenguaje natural.
    • Se representa de una forma compacta.

De esta forma, el pseudocódigo se suele ver como un subconjunto de un lenguaje natural que
proporciona un número limitado de operaciones para la construcción de algoritmos; la única finalidad
del pseudocódigo (como de los organigramas) es la comunicación entre seres humanos.

La ventajas del uso del pseudocódigo residen en:

     •     Su uso en la planificación de un programa; permitiendo que el programador se pueda
           concentrar en la lógica y en las estructuras de control y no tenga que preocuparse, por
           ahora, de detalles acerca de las reglas sintácticas y semánticas de un lenguaje específico.

     •     Consecuentemente, es más fácil de modificar en el caso de que se descubran errores o
           anomalías en la lógica del algoritmo.

     •     Aunque el pseudocódigo es independiente del lenguaje de alto nivel que vaya a utilizarse, un
           algoritmo expresado en pseudocódigo puede ser traducido más fácilmente a muchos de dichos
           lenguajes.


Elementos de construcción de un algoritmo:
   • Inicio del algoritmo
Informática 1. Versión 1.3 Enero de 2010
                                                                                                    18
.
•       Finalización del algoritmo
     •       Comentarios
     •       Declaración de variables
     •       Expresiones
     •       Instrucciones de Salida
     •       Instrucciones de Entrada


             Inicio y finalización del algoritmo

- Inicio del algoritmo
algoritmo NombreAlgoritmo {
     principal ( ) {

         }
}
- Finalización del algoritmo

Ejemplos de iniciar y finalizar un algoritmo:
algoritmo Edad {
     principal ( ) {
          // Cuerpo del Algoritmo
          ……
     }
}

             Comentarios

Los comentarios son la documentación interna del algoritmo. Y se hacen de 2 formas, las cuales son:

              Párrafo o bloque (más de una línea):
              Inicia con /*
              Termina con */
              Una línea:
              Inicia con //

Ejemplos de comentarios:

// Este es comentario de una línea
/* Este es un comentario de un bloque
de líneas. Este es un comentario de un
bloque de líneas.*/
Nota: Los comentarios se insertan en el cuerpo del algoritmo.


Informática 1. Versión 1.3 Enero de 2010
                                                                                                 19
.
Variables

Una variable es una localización o casilla en la memoria principal que almacena un valor que puede
cambiar en el transcurso de la ejecución del programa. Cuando un programa necesita almacenar un
dato, necesita una variable. Toda variable tiene un nombre ó identificador, un tipo de dato, el valor
concreto que va a guardar y una dirección en la memoria del computador. Dicho de otra forma,
Son espacios de memoria reservados para guardar datos que pueden variar durante la aplicación de un
algoritmo. El tipo de la variable depende del tipo de dato que pueda guardar. Antes de poder utilizar
una variable es necesario declararla especificando su tipo de dato y su nombre. Para declarar variables
usaremos los siguientes formatos:

Declaración de una variable:
tipo_de_variable nombre_de_la_variable = valor_inicial;

Declaración de varias variables con el mismo tipo de dato:
tipo_de_variables nombre_de_la_variable1 = valor_inicial, nombre_de_la_variable2 = valor_inicial,
nombre_de_la_variable3 = valor_inicial, ... , nombre_de_la_variableN = valor_inicial ;

Donde:


          tipo_de_variable      Depende del tipo de dato que va a guardar la variable y se nombra
                                con dicho tipo. El tipo puede ser:
                                Primitivos:
                                 entero (si la variable almacenará un número entero) , real (si la
                                variable almacenará un número con parte decimal) , caracter (si la
                                variable almacenará un caracter), booleana (si la variable
                                almacenará el valor verdadero o el valor falso, también conocida
                                como de tipo logico).
                                Objetos:
                                cadena (si la variable almacenará un conjunto de caracteres).
          nombre_de_la_variable Nombres (ó identificadores) válidos de las variables. El nombre de
                                una variable debe comenzar con un carácter alfabetico o un símbolo
                                de subrayado ( _ ) . Los demás caracteres del nombre pueden ser
                                alfabéticos (a..z, A..Z), numéricos (0..9) y el carácter subrayado ( _).
                                Debe considerarse también que una letra mayúscula se considera
                                diferente de una letra minúscula. No tiene restricción en su longitud
                                No pueden contener ningún otro carácter (*, +, ?, =, (, ), /,
                                &, %, $, #, !, @, …). No se pueden utilizar las palabras clave
                                reservadas para el lenguaje, estas varían de acuerdo al lenguaje
                                utilizado. Deben ser auto-documentadas y Generalmente se
                                escribe en letras minúsculas




Nombres de variables no validas:
  • edad_#01
  • _coeficiente(4)
Informática 1. Versión 1.3 Enero de 2010
                                                                                                     20
.
• 4_nombre_del_Trabajador
     • v@lorTerminal
     • nombre de programa
     • número 1
     • SUELDO-45


Ejemplos de declaración de variables:

La siguiente instrucción declara la variable edad de tipo ENTERA y la variable descuento de tipo
Real.
entero edad=0;
real descuento=0.0;

Esto crea las casillas de memoria edad y descuento. Luego de la creación, las variables están
inicializadas en cero ( 0 ).

                                 edad              0
                                 descuento 0

La siguiente instrucción declara las variables nota1, nota2 y nota3, todas de tipo REAL.
real nota1=0.0, nota2=0.0, nota3=0.0;

Esto crea los casilleros de memoria nota1, nota2 y nota3. Luego de la creación, las variables están
inicializadas en cero ( 0 ).

                                           nota1 0
                                           nota2       0
                                           nota3       0

entero valor1= 0;
caracter respuesta = ‘s’;
real valor_2 = 3.14;
cadena nombre = “ ”;
booleano respuesta2 = verdadero;


           Constantes

Son variables que después de habérseles asignado una valor, éste no cambia durante el proceso de
aplicación del algoritmo. El nombre de las constantes, generalmente, se escribe en letras mayúsculas.




Informática 1. Versión 1.3 Enero de 2010
                                                                                                      21
.
Ejemplos de constantes:

real PI = 3.141592;
real porcentaje = 0.25;


           Expresiones

     Conjunto de valores, variables, constantes y operadores relacionados matemáticamente o
     lógicamente, asignados a una variable.
     Permite mover contenidos de memoria de una posición a otra
     Su resultado es representado por las variables.
     Asigna valores a una posición de memoria.

Ejemplos de Expresiones:

promedio = (n1 + n2 + n3)/3; // Donde n1=4, n2=3 y n3=1
suma = suma + numero;
num1 > num2
nombre_completo = nombre + apellido;
entero Resultado = numero_1 + numero_2;
cadena Nombre = “Jesús Antonio”;
real _Sueldo = 45.36 + 854687;
booleana Flag = true;
caracter Vocal = ‘X’;
booleana Opcion = 45 > 0 && true && (18+12)/2 > 0;
booleana Otra_Opcion = true && (false || true);


           Instrucciones de Salida

Consiste en entregar resultados al usuario mediante el dispositivo estándar de salida, la pantalla. Ya
sea, mostrar el valor de una variable o alguna información que desee desplegar al usuario. En general,
la forma para realizar esta acción, se expresa en el pseudocódigo mediante la palabra imprimir de la
siguiente forma:

     Sintaxis

     imprimir (“El Texto que se va a imprimir”);
     imprimir (nombre_de_variable);
     imprimir (“El texto ”+ nombre_de_variable);

Nota: En este caso, el simbolo + es llamado operador de concatenacion y es utilizado para encadenar
dos elementos y formar un dato tipo cadena.

Informática 1. Versión 1.3 Enero de 2010
                                                                                                  22
.
Ejemplos de Instrucciones de Salida:
      • Si se desea desplegar una cadena Hola Mundo:
   imprimir ( “Hola Mundo” ) ;

        • Si se desea desplegar el valor almacenado en la variable importeCompra:
     imprimir ( importeCompra ) ;

        • Si se desea desplegar la cadena El Valor Del Area Es: seguida del valor almacenado en la
           variable area:
     imprimir ( “El Valor Del Area Es: ” +area) ;

     Pero en el imprimir se puede tener muchas combinaciones entre variables y cadenas, como
     por ejemplo:

     Suponiendo que se han hecho las siguientes declaraciones:
     real area=70.4;
     entero valor = 21;
     cadena nombre = “Carlos”;

           • imprimir ( “El Valor Del Area Es: ” +area+“ Metros Cuadrados”) ;
              entonces el anterior ejemplo nos desplegaría en pantalla:
              El Valor Del Area Es: 70.4 Metros Cuadrados

           • imprimir ( “El Terreno De : ” +area+“ Tiene Un Costo De: ” +valor+“ Pesos Por Metro
              Cuadrado y vendido por”+nombre);
              entonces el anterior ejemplo nos desplegaría en pantalla:
              El Terreno De : 70.4 Tiene Un Costo De: 21 Pesos Por Metro Cuadrado

    NOTA: Observe que en las cadenas se dejaron espacios para que en al momento de desplegarse en
    pantalla, este espacio entre palabras sea conservado.



           Instrucciones de Entrada

Consiste en obtener y almacenar en una variable, datos de entrada entregados por el usuario desde un
dispositivo de entrada estándar (como el teclado). En general, la acción de ingresar un dato desde un
dispositivo de entrada a una variable, se expresa en el pseudocódigo de la siguiente forma:

     Sintaxis
     variable = leer (“mensaje de captura “);

Ejemplos de Instrucciones de Entrada:

     variable2 = leer (“Digite el segundo valor ”);
     Suponiendo que se han hecho las siguientes declaraciones:

     real area=0.0;
Informática 1. Versión 1.3 Enero de 2010
                                                                                                    23
.
entero valor=0;
     cadena nombre=“”;

           • nombre = leer ( “Ingrese su nombre ”) ;
           entonces la anterior instrucción nos almacenaría el nombre ingresado por el usuario en la
           variable nombre.

           • valor = leer( “Ingrese el valor de venta por metros cuadrados ”) ;
           entonces la anterior instrucción nos almacenaría el valor por metro cuadrado ingresado
           por el usuario en la variable valor.

           • area = leer ( “Ingrese el area del terreno ”) ;
           entonces la anterior instrucción nos almacenaría el area del terreno ingresado por el
           usuario en la variable area.

     Por ejemplo, la instrucción:
     real estatura=0.0;
     estatura = leer(“Digite la estatura: “ ) ;

     solicita el ingreso de un valor, desde algún dispositivo de entrada (como el teclado), para la
     variable estatura.



           Operadores

Son símbolos que establecen una relación aritmética, lógica o relacional entre datos.

                                           Tabla 1.1 Operadores aritméticos




Informática 1. Versión 1.3 Enero de 2010
                                                                                                      24
.
Tabla 1.2 Operadores relacionales




                                             Tabla 1.3 Operadores lógicos




Informática 1. Versión 1.3 Enero de 2010
                                                                               25
.
Reglas de jerarquía de los operadores aritméticos

Cuando una expresión aritmética tiene más de un operador aritmético, el orden de aplicación de los
operadores sigue un orden preciso determinado por las reglas de jerarquía de los operadores
aritméticos, que se muestran en la siguiente tabla:

            Tabla 1.4 Reglas de Jerarquía de los Operadores Aritméticos, Relacionales y Lógicos

                                      Operadores                        Precedencia
                               posfijo                  expr++ expr--
                               unario                   ++expr --expr +expr -expr ~ !
                               multiplicativo           */%
                               aditivo                  +-
                               cambio                   << >> >>>
                               relacionales             < > <= >= instanceof
                               equivalencia             == !=
                               AND bit a bit            &
                               OR bit a bit exclusivo ^
                               OR bit a bit inclusivo   |
                               AND logico               &&
                               OR logico                ||
                               ternario                 ?:
                               asignacion               = += -= *= /= %= &= ^= |= <<= >>= >>>=



Si existen paréntesis anidados, se evalúa primero la expresión en el paréntesis más interno. Si
varios operadores o paréntesis tienen la misma jerarquía, la evaluación será de izquierda a
derecha.

Suponga que tenemos estos dos valores:

valor1=1, valor2=5;


Ejemplo 1:

resultado = 10 * ++ valor1;
resultado = 10 * 2; //Aumento primero la variable valor1 en uno, es decir su nuevo valor es 2
resultado = 20;

resultado = 10 * valor1++;
resultado = 10 * 1; //Primero realizo el producto y luego aumento la variable valor1 en uno, es decir su valor final es 2
resultado = 10;




Informática 1. Versión 1.3 Enero de 2010
                                                                                                                            26
.
Ejemplo 2:
valor1>0 && valor2++ <=5
       V  && (5<=5)
       V &&        V
         V
El valor final de valor2 es de 6, por tener el acumulador (++) como posfijo


Ejemplo 3:
valor1>0 && ++valor2 <=5
       V&& (6<=5)
       V&&      F
        F
Por haber un acumulador (++) como prefijo, primero se incrementa valor2,
obteniendo como nuevo valor 6 y luego realiza la operación lógica.

Ejemplo 4:
true && valor2 – 4 < valor1 || valor1-- < valor2 – 4
           1                         1
                   F                     F
      F
                           F

Ejemplo: ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica?




Solución
                                            e = a/b/c;

Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha:
Primero, se dividirá a entre b. Segundo, el resultado ya obtenido de a / b se dividirá entre c.
Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere
ninguna pareja de paréntesis.

Ejemplo:- ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica?




Informática 1. Versión 1.3 Enero de 2010
                                                                                                    27
.
Solución
                                                       c = a*b*c/d/e;

Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha:

Primero, se multiplicará a por b.
Segundo, el resultado ya obtenido de a * b se multiplicará por c.
Tercero, el resultado ya obtenido de a * b * c se dividirá entre d.
Cuarto, el resultado ya obtenido de a * b * c / d se divivirá entre e.
Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere
ninguna pareja de paréntesis.

Ejercicio: ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica?




Solución
                                     e = 4 / ((a + b) / (c / d)) + v / (w / p) + 5 * m * n * q ;

Aplicando las reglas de jerarquía de los operadores aritméticos:
Primero, se sumará a más b.
Segundo, se dividirá c entre d.
Tercero, el resultado ya obtenido de a+b se dividirá entre el resultado ya obtenido de c/d.
Cuarto, se dividirá 4 entre el resultado ya obtenido de ( (a+b)/(c/d) )
Quinto, se dividirá w entre p.
Sexto, se dividirá v entre el resultado ya obtenido de (w/p).
Séptimo, se multiplicará 5 por m.
Octavo, se multiplicará el resultado ya obtenido de 5*m por n.
Noveno, se multiplicará el resultado ya obtenido de 5*m*n por q.
Décimo, se sumará el resultado ya obtenido de 4/( (a+b)/(c/d) ) más el resultado ya obtenido de
v/(w/p).
Undécimo, se sumará el resultado ya obtenido de 4/( (a+b)/(c/d) ) + v/(w/p) más el resultado ya
obtenido de 5*m*n*q.

Se ha utilizado la mínima cantidad posible de paréntesis. Pueden usarse paréntesis adicionales, lo que
no es un error. Por ejemplo, otra solución posible que arroja el mismo resultado final es:

                                           e = (4/((a+b)/(c/d))) + (v/(w/p)) + (5*m*n*q) ;

Note que usando correctamente las reglas de jerarquía, es posible usar menos parejas de paréntesis.




Informática 1. Versión 1.3 Enero de 2010
                                                                                                      28
.
FUNCIONES NATIVAS

       •     Existen cálculos que han sido, previamente organizados y definidos, mediante funciones, que
             son expresiones automáticas dirigidas a resolver cierto tipo de cómputo numérico o lógico.
       •     Las funciones “devuelven” un valor representado por cierto tipo de dato, dependiendo de su
             naturaleza de procesamiento.
       •     Por tanto es factible y significativo, asignar ese resultado a una variable que pueda
             “contenerlo”.
       •     equivalente en español - Minúscula

    Sintaxis
    función (argumento1, argumento2, …);
    Los argumentos, corresponden a los valores que evalúa la función.

    Ejemplos de Funciones:

    raiz (valor real) : calcula la raiz cuadrada de un número real o entero. Devuelve un valor real.
    absoluto (valor real) : calcula el valor absoluto de un número real o entero. Devuelve un valor
    real.
    potencia(valor real, valor entero) : calcula la potencia de un valor real o entero (base) elevado a
    una potencia entera. Devuelve un valor real.
    seno (valor real) : calcula el seno de un valor dado en radianes. Devuelve un valor real.


    ASIGNACIÓN A UNA VARIABLE
    variable = función (argumentos);



1.6 Estructuras Secuenciales

La estructura secuencial es la más sencilla de todas, simplemente indica al
procesador que debe ejecutar de forma consecutiva una lista de acciones (que
pueden ser, a su vez, otras estructuras de control); para construir una secuencia de
acciones basta con escribir cada acción en una linea diferente. A continuación se
muestra una composición secuencial de acciones en notación algorítmica.

           real a=0.0, b=0.0, c=0.0;
           a=leer(“Digite a ” ) ;
           b=leer( “Digite b ” ) ;
           c = a+b;
           imprimir ( “c tiene un valor de “ + c ) ;

Existe una forma alternativa de expresar una estructura secuencial escribiendo varias acciones en la
misma línea pero utilizando el punto y coma ( ; ) como separador. Sin embargo, esta última notación
es desaconsejable puesto que puede llegar a hacer el código bastante difícil de leer.

Informática 1. Versión 1.3 Enero de 2010
                                                                                                     29
.
real a=0.0, b=0.0, c=0.0; a=leer(“Digite a ” ) ; b=leer( “Digite b ” ) ;
       c = a + b ; imprimir ( “c tiene un valor de “ + c ) ;

Por último, es necesario señalar un aspecto importante de la composición secuencial y es que no
es conmutativa.



Para mostrar lo realizado hasta ahora tenemos este ejemplo:

Algoritmo para expresar en centímetros y en pulgadas una cantidad dada en metros. Esta es una
solución en pseudocódigo utilizando los conceptos computacionales descriptos en las paginas
anteriores. La solución considera que 1 metro = 100 centímetros y que 1 pulgada = 2.54 centímetros.

  Datos de Entrada                       Proceso                              Información
     (con tipos)                                                               (con tipos)
real               cantidad_metros = leer(“Digite la longitud en metros: real
  cantidad_metros ”)                                                     cantidad_centimetros
                                                                         cantidad_pulgadas
                   cantidad_centimetros = cantidad_metros * 100
                   cantidad_pulgadas = cantidad_centimetros / 2.54

                                 imprimir (cantidad_metros + “, en centímetros,
                                 equivale a: ” + cantidad_centimetros )

                                 imprimir     (cantidad_metros + c, en pulgadas,
                                 equivale a: ” + cantidad_pulgadas )


algoritmo Conversion{
     principal(){
         // Declara las variables m, c y p
         real cantidad_metros=0.0, cantidad_centimetros=0.0 , cantidad_pulgadas=0.0;

               // Lectura y asignación de las variables
               cantidad_metros = leer(“Digite la longitud en metros: ”);

               // Calcula la cantidad equivalente en centímetros y lo asigna a la variable c
               cantidad_centimetros = cantidad_metros * 100 ;

               // Calcula la cantidad equivalente en pulgadas y lo asigna a la variable p
               cantidad_pulgadas = cantidad_centimetros / 2.54 ;

               // Muestra los valores de las variables c y p:
               imprimir(cantidad_metros + “, en centímetros, equivale a: “ + cantidad_centimetros   );
               imprimir(cantidad_metros + c, en pulgadas, equivale a: “ + cantidad_pulgadas ) ;
       }
}



Informática 1. Versión 1.3 Enero de 2010
                                                                                                    30
.
Datos de Entrada                          Proceso                                     Información
     (con tipos)                                                                         (con tipos)
real               radio = leer(“Digite el valor del radio: ”)                      real
   radio           PI = 3.1415926535                                                  area
                   area = PI * potencia(radio,2)

                                 imprimir (“El área del cículo de radio “+radio+”
                                 es “+area)



algoritmo AreaCirculo {
     principal () {
         // Declaración de variables
         real radio = 0.0;
         real area = 0.0;
         real PI = 3.1415926535;
         // Captura de datos
         radio = leer (“Digite el valor del radio: ”);
         //Cálculos
         area = PI * potencia(radio,2);
         // Salida de datos
         imprimir (“El área del cículo de radio “+radio+”
         es “+area);
     }
}


1.7 Estructura Condicionales

La estructura alternativa permite bifurcar el “flujo” del programa en función de una expresión lógica.
Disponemos de tres estructuras alternativas diferentes: alternativa simple, alternativa doble y
alternativa múltiple.

1.7.1 Estructura Condicional Simple

Esta estructura permite evaluar una expresión
lógica y en función de dicha evaluación ejecutar
una acción (o composición de acciones) o no
ejecutarla; también se la suele denominar si-
entonces.
A continuación se muestra la notación algorítmica
para la estructura alternativa simple.

       si (<expresión lógica>) entonces
            acciones si la expresión lógica es
            verdadera
       fin_si


Informática 1. Versión 1.3 Enero de 2010
                                                                                                       31
.
En seudocódigo la instrucción si–simple se presenta así:

               si( <condición> ) {
                    // Bloque de instrucciones que se ejecuta si la condición es verdadera.
               }    // Fin del bloque del si


En el siguiente ejemplo, se calcula la longitud de una circunferencia si el radio es positivo:

               si ( radio > 0 ) {
                     longitud = 2 * 3.1416 * radio ;
               }

Ejemplo: Dada la edad de una persona, imprimir un mensaje solo si ella cumple con la mayoría de
edad
  Datos de Entrada                          Proceso                             Información
     (con tipos)                                                                 (con tipos)
entero                  edad=leer(“Digite la edad de la persona”)           cadena
       edad                                                                       cumple
                        si edad >=18
                           cumple=“Cumple con la mayoría de edad”

                                           imprimir (cumple)



                                                          Condiciones
Lenguaje natural:
La edad debe ser mayor o igual a 18 para poder votar

Expresion lógica:
edad >=18


algoritmo MayoriaDeEdad {
     principal () {
         entero edad=0;
         cadena cumple=“”;

               //Lectura de las variables
               edad=leer(“Digite la edad de la persona”);

               si (edad>=18){
                   cumple=“Cumple con la mayoría de edad”;
               }

               imprimir(cumple) ;
       }
}


Informática 1. Versión 1.3 Enero de 2010
                                                                                                 32
.
1.7.2 Estructura Condicional Doble

La estructura alternativa doble es similar a la anterior, con la salvedad de que en este tipo de estructura
se indican acciones no sólo para la rama “verdadera” sino también para la “falsa”; es decir, en caso de
que la expresión lógica evaluada sea cierta, se ejecuta una acción o grupo de acciones y, en el caso de
que sea falsa, se ejecuta un grupo diferente de acciones. La sintáxis en la notación algorítmica es la
que se muestra a continuación:


si (<expresión lógica>) entonces
      acciones si la expresión lógica es
      verdadera
si no
      acciones si la expresión lógica es
      falsa
fin_si




En seudocódigo la instrucción si–entonces simple se presenta así:

               si( <condición> ) {
                    // Bloque de instrucciones que se ejecuta si la condición es verdadera.
               }    // Fin del bloque del si
               sino {
                    // Bloque de instrucciones que se ejecuta si la condición es falsa.
               }    // Fin del bloque del sino



En el siguiente ejemplo se calcula la longitud de una circunferencia si el radio es positivo y, en
caso contrario, se proporciona un mensaje de error:

       si ( radio > 0 ) {
             longitud = 2 * 3.1416 * radio ;
       }
       sino {         //si radio <= 0
             imprimir ( “Radio incorrecto” ) ;
       }




Informática 1. Versión 1.3 Enero de 2010
                                                                                                        33
.
Ejemplo: Dada la edad de una persona, imprimir un mensaje indicando si es mayor de edad o no

 Datos de Entrada                          Proceso                               Información
     (con tipos)                                                                  (con tipos)
entero            edad = leer (“Digite la edad de la persona”)                cadena
       edad                                                                        cumple
                      si edad >=18
                           cumple=“Cumple con la mayoría de edad”
                      sino
                           cumple=“No Cumple con la mayoría de edad”

                                 imprimir (cumple)

                                                     Condiciones
Lenguaje natural:
La edad debe ser mayor o igual a 18 para poder votar

Expresion lógica:
edad >=18



algoritmo MayoriaDeEdad {
     principal () {

               //Declaración de las variables
               entero edad=0;
               cadena cumple=“”;

               //Lectura de las variables
               edad = leer (“Digite la edad de la persona”);

               si (edad>=18){
                   cumple=Cumple con la mayoría de edad”;
               }sino{
                   cumple=“No Cumple con la mayoría de edad” ;
               }

               imprimir(cumple) ;
       }
}




Informática 1. Versión 1.3 Enero de 2010
                                                                                                34
.
Ejemplo: Informar si un estudiante ha superado o no un determinado examen consistente en 20
preguntas de igual valor y calcular su nota en caso de aprobar.

 Datos de Entrada                        Proceso                          Información
     (con tipos)                                                            (con tipos)
entero            num_correctas = leer (“Digite el numero de preguntas real
    num_correctas contestadas correctamente”)                             nota
                                                                       cadena
                  si num_correctas < 12                                   pasaExamen
                       pasaExamen=“No ha superado Vd. el examen”
                  sino
                       nota = num_correctas * 0.25
                       pasaExamen= “aprobó Vd. con un ” + nota

                                 imprimir (pasaExamen);


                                                    Condiciones
Lenguaje natural:
El numero de preguntas correctas debe ser menor a 12 para perder examen

Expresion lógica:
num_correctas < 12


algoritmo AprobarExamen1{
     principal () {
         //Declaración de las variables
         entero num_correctas=0;
         real nota=0.0;
         cadena pasaExamen=“”;

               //Asignación y lectura de las variables
               num_correctas = leer (“Digite el numero de preguntas contestadas correctamente”);

               si (num_correctas<0 && num_correctas>20){
                   imprimir (“Error:el rango (posibles respuesta correctas)es de 0-20”); //valido la entrada
               de
                     }                                                                            //datos
               si (num_correctas < 12) {
                     pasaExamen=“No ha superado Vd. el examen”;
               }
               sino {                    //si num_correctas >12
                         nota = num_correctas * 0.25;
                    pasaExamen = “aprobó Vd. con un ” + nota;
               }
               imprimir (pasaExamen);
       }
}

Informática 1. Versión 1.3 Enero de 2010
                                                                                                           35
.
Ejemplo:

Supongamos que tenemos un algoritmo para averiguar si un número es impar o par, que puede ser
descrito narrativamente de la siguiente forma: “Si el residuo de la división entera del número entre
dos ( 2 ) es igual a cero, entonces el número es par. En caso contrario; es decir, si el residuo es uno (
1 ), entonces el número digitado es impar. Existe un operador que permite determinar de manera
directa el residuo ( o resto ) de la división de dos números.

Definición: El residuo ( ó resto ) de la división de dos números a y b se denota como “a % b”, se
lee “a módulo b” y nos arroja el residuo de la división de a y b. Ejemplo: 83 % 5 = 4, pues el
cociente es 20 y el residuo es 3, que es la respuesta. Este algoritmo escrito en pseudocódigo queda
así:

 Datos de Entrada                          Proceso                                    Información
     (con tipos)                                                                       (con tipos)
entero            n=leer(“Digite un número entero”)                                 CADENA
       n                                                                                tipo
                  si n % 2 == 0
                      tipo = n + “ es par”
                  sino
                      tipo = n + “es impar”

                                 imprimir (tipo);



                                                    Condiciones
Expresion lógica:
num_correctas < 12

algoritmo ImparPar1{
     principal () {
         //Declarcion de la variable
         entero n=0 ;
         cadena tipo=“”;

               //Lectura de la variable
               n=leer(“Digite un número entero”);

               //Procesos de Calculos
               si( n % 2 == 0 ) {
                    tipo= n + “ es par”;
               }
               sino{
                    tipo=n + “ es impar”;
               }
               imprimir (tipo);
       }
}


Informática 1. Versión 1.3 Enero de 2010
                                                                                                      36
.
1.7.3 Estructura Condicional Multiple

Esta estructura evalúa una expresión que
puede tomar n valores (enteros o
caracteres, pero nunca reales ni cadenas) y
ejecuta una acción o grupo de acciones
diferente en función del valor tomado por
la expresión selectora.
La sintáxis en la notación algorítmica es
la que se muestra a continuación:

       segun expresión
       caso valor1:
             acción 1
             break;
       caso valor2:
             acción 2
             break;
       ...
       caso valorN:
             acción n
             break;
       default:
             acción
       fin según

En seudocódigo orientado a Java, la instrucción según–casos se presenta así:

               segun( <expresión entera o caracter> ) {
                   caso valor1:
                        // Bloque de instrucciones que se ejecuta si la expresión
                        // toma el valor valor1
                        break ;
                   caso valor2:
                        // Bloque de instrucciones que se ejecuta si la expresión
                        // toma el valor valor2
                        break;
                      // . . . . . .
                      caso valorN:
                          // Bloque de instrucciones que se ejecuta si la expresión
                          // toma el valor valorN
                          break;
                      default :
                          // Bloque de instrucciones que se ejecuta si la expresión
                          // NO toma ninguno de los valores arriba indicados
                          break;         // Aquí está de sobra…

               }              // Llave de fin de la estructura de decisión múltiple



Informática 1. Versión 1.3 Enero de 2010
                                                                                      37
.
Notas:

       1.- El otro caso o caso por defecto es opcional. Si no se implementa, entonces la estructura
          no será ejecutada en aquel caso en el que la expresión nunca tome alguno de los valores
           especificados en los casos.

      2.- La instrucción break ; también es opcional. Si no se usa alguna de las instrucciones
      break;     entonces la ejecución continúa hasta encontrar la siguiente instrucción break ; o
      la llave        del fin de la estructura de decisión.

En el siguiente ejemplo se proporciona como salida el número de días de un mes dado:

               segun ( mes ) {                   // Abre según caso
                   caso 1: caso 3: caso 5: caso 7: caso 8: caso 10: caso 12:
                        imprimir ( “31” ) ;
                        break;
                   caso 4: caso 6: caso 9: caso 11:
                        imprimir ( “30” ) ;
                        break;
                   caso 2:
                        imprimir ( “28” ) ;
                        break;
                   default:
                        imprimir ( “Mes incorrecto” ) ;
                        break; // Aquí está de sobra…
               }        // Termina la ejecución de la estructura de selección múltiple

Nota: Observar que es posible agrupar varios casos que conduzcan a la ejecución de un bloque común
    a ellos.


1.5.4. Estructura condicional – SI anidados

si ( <condición 1> ) {
      // Bloque de instrucciones que se ejecuta si la condición 1 es verdadera.
}     // Fin del bloque del si para la condición 1
sino{
      si( <condición 2> ) {
      // Bloque de instrucciones que se ejecuta si la condición 2 es verdadera.
      }     // Fin del bloque del si para la condición 2
// . . .
       sino {
            si( <condición N> ) {
                  // Bloque de instrucciones que se ejecuta si la condición N es verdadera.
            }     // Fin del bloque del si para la condición N
            sino {
            // Bloque por defecto: instrucciones que se ejecutan si ninguna condición
            // anterior es verdadera
            }     // Fin del bloque por defecto
       }    // Fin del bloque del sino
}      // Llave de fin de la estructura si anidada

Informática 1. Versión 1.3 Enero de 2010
                                                                                                      38
.
Nota: El último sino ( Bloque por defecto ) es opcional. Si no se implementa, entonces la
estructura no será ejecutada en aquel caso en el que todas las condiciones sean falsas.


Ejemplo:

Algoritmo para la ecuación cuadrática del tipo aX 2 + bX + C = 0 ( a diferente de cero ).

  Datos de Entrada                          Proceso                                           Información
     (con tipos)                                                                                (con tipos)
real               solución=“”                                                             real
   a, b, c                                                                                    discr, s1, s2
                   a = leer (“¿Cuánto vale A?”)                                            cadena
                   b = leer (“¿Cuánto vale B?”)                                               solucion
                   c = leer (“¿Cuánto vale C?”)

                                 discr = ( b * b – 4 * a * c )

                                 si discr == 0
                                    s1 = -b / (2 * a)
                                    solucion = “Existen dos soluciones iguales, cuyo
                                    valor es: “ + s1
                                 sino
                                    si discr > 0
                                       s1 = ( -b + raiz(discr) ) / (2 * a)
                                       s2 = ( -b - raiz(discr) ) / ( 2 * a)
                                       solucion = “Las soluciones son: ”+ s1 + “ y “+ s2
                                   sino
                                       solucion = “No hay soluciones en el conjunto de
                                       los números reales.”

                                 imprimir (solucion)


                                                       Condiciones
Expresiones lógicas:
discr == 0
discr > 0

algoritmo EcuacionCuadrática{
     principal () {
         //Declarcion de las variables
         real a=0, b=0, c=0 ;// Declaración de tres variables del tipo número real ( los 3
         coeficientes ).
         real discr=0; // Declaración de la variable para el discriminante de la ecuación.
         real s1=0, s2=0; // Declaración de dos variables para las soluciones ( ó raíces ) de la
         ecuación.
         cadena solución=“”;

               imprimir(“Deme los coeficientes y resolveré una ecuación de 2º grado” );
Informática 1. Versión 1.3 Enero de 2010
                                                                                                              39
.
// Lectura y Asignación de las variables:
               a=leer(“¿Cuánto vale A?”);
               b=leer (“¿Cuánto vale B?”);
               c=leer (“¿Cuánto vale C?”);
               // Cálculo del discriminante de la ecuación cuadrática:
               discr = ( b * b – 4 * a * c ) ;       // en discr asigne el valor de la expresión entre
               paréntesis.
               si( discr == 0 ){         // ‘ == ‘ significa ‘ igual a ‘
                     s1 = -b / (2 * a) ; // En s1 asigne el valor de la expresión del segundo miembro
                     solución = “Existen dos soluciones iguales, cuyo valor es: “ + s1;
               }
               sino{
                     si( discr > 0 ) {
                           s1 = ( -b + raiz(discr) ) / (2 * a) ;// En s1 asigne el valor de la expresión del
                                                     segundo //miembro

                              s2 = ( -b - raiz(discr) ) / ( 2 * a) ;        // En s2 asigne el valor de la
                                                         expresión del segundo //miembro

                           solución = “Las soluciones son: ” + s1 + “ y “ + s2;
                      }sino {
                      solución = “No hay soluciones en el conjunto de los números reales.” ;
                      }
               }

               imprimir(solucion);
       }
}


1.8        Estructuras de Repetición

La estructura repetitiva o iterativa permite, como su propio nombre lo indica, repetir una acción (o
grupo de acciones); dicha repetición puede llevarse a cabo un número prefijado de veces o depender
de la evaluación de una expresión lógica. Existen tres tipos de estructuras repetitivas: para(ó desde-
hasta), mientras y haga-mientras.


1.8.1 Estructura de Repetición para (ó desde-hasta)

Esta estructura permite repetir
la ejecución de una acción o de
un grupo de acciones un
número determinado de veces;
la sintáxis es la siguiente:




Informática 1. Versión 1.3 Enero de 2010
                                                                                                         40
.
A continuación se muestran algunos ejemplos:

               para (entero n=1; n < =10; n++){
                          imprimir (“n = ”+n );
               } // Fin del para

El ciclo anterior imprime por pantalla los números del 1 al 10.

Ahora, preste atención al siguiente Pseudocódigo:

               para (entero n=10; n < =0; n++){
                     imprimir (“n =”+n);
               } //Fin del para

El bucle anterior no se ejecuta nunca puesto que, de entrada, la condición n <= 0 (con n inicializado
en 10) va a ser falsa, es decir arroja false. ¿Qué ocurriría si, en el ciclo anterior, se cambia de < por >
?

               para (entero n=10; n >=0; n++){
                     imprimir (“n =”+n);
               } //Fin del para

El bucle anterior es infinito puesto que la condición n >= 0 (con n inicializado en 10) siempre va a ser
verdadera, es decir me arroja true.

Si queremos hacer el ejemplo de n <= 0 (con n inicializado en 10), pero con paso – 2, el Pseudocódigo
se puede escribir así:

               para (n=10; n < =0 ; n = n - 2){
                     imprimir (“n =”+ n);
               } //Fin del para

Este bucle escribe los números pares de 10 a 0 en orden inverso.


Ejemplo:
Escriba un algoritmo que sume los “N” primeros números enteros.

 Datos de Entrada                                        Proceso                           Información
    (con tipos)                                                                             (con tipos)
REAL              suma=0                                                                  REAL
   n                                                                                         suma
                  n = leer(“Ingrese n”)

                                 para entero contador = 1; contador <= n;contador++
                                     suma += contador

                                 imprimir(“La suma es: ” + suma);



Informática 1. Versión 1.3 Enero de 2010
                                                                                                        41
.
Condiciones
Expresion lógica:
contador <= n


algoritmo Suma {
             principal () {

                              entero suma=0, n=0;

                              n = leer(“Ingrese n”);

                              para (entero contador = 1; contador <= n ; contador++){
                                   suma += contador;
                              }

                              imprimir(“La suma es: ” + suma);

                      }
               }

Ejemplo:
Escriba un algoritmo que calcule el promedio del curso de informática 1, sabiendo que se tienen “N”
estudiantes.

Datos de Entrada                                         Proceso                          Información
   (con tipos)                                                                             (con tipos)
REAL             acumula=0                                                              REAL
   N, nota                                                                                promedio,
                 n=leer(“Ingrese n”)                                                      acumula

                            para entero contador = 1; contador <= n ;contador++
                                 nota = leer(“Ingrese nota: “ + contador + “ : “)
                                 acumula += nota

                            promedio = acumula/n

                            imprimir (“Promedio es: ” + promedio)


                                                       Condiciones
Expresion lógica:
contador <= n

algoritmo Promedio {
         principal () {

                      entera n=0;
Informática 1. Versión 1.3 Enero de 2010
                                                                                                     42
.
real nota=0.0, promedio=0.0, acumula=0;

                      n=leer(“Ingrese n);

                      para (entero contador = 1; contador <= n ; contador++){
                           nota = leer(“Ingrese nota: “ + contador + “ : “);
                           acumula += nota;
                      }
                      promedio = acumula/n;
                     imprimir(“Promedio es: ” + promedio);
               }
       }

1.8.2 Estructura de Repetición mientras
Cuando usamos la estructura mientras:
    • Cuando sea necesario ejecutar los mismos pasos varias veces y se conoce el número de veces
       que desea repetirse.
    • Cuando sea necesario ejecutar los mismos pasos varias veces y NO se conoce el número de
       veces que desea
       repetirse.
    • Si la condición es
       cierta el cuerpo del
       ciclo se ejecuta, sino
       la ejecución del
       ciclo termina.
    • Si la condición es
       inicialmente falsa el
       ciclo no se ejecuta
       ni una sola vez.

               Sintaxis General:
               mientras ( <expresión lógica> )
                    acción
               FIN mientras




Informática 1. Versión 1.3 Enero de 2010
                                                                                               43
.
A continuación se muestra un ejemplo que solicita al usuario el radio de una circunferencia mientras
el radio introducido sea incorrecto:


         mientras (radio<=0) { //se ejecuta mientras el radio sea mayor que 0
               radio = leer(Ingrese el radio);
               imprimir (“Radio :” +radio);
         } //Fin del mientras
Notar que mientras radio < = 0 el ciclo se ejecuta.

Ejemplo:

Escriba un algoritmo que lea e imprima todos los nombre de un grupo de estudiantes:


Datos de Entrada                           Proceso                                  Información
    (con tipos)                                                                      (con tipos)
cadena           seguir = ‘S’                                                     cadena
    nombre       nombres=“”                                                           nombres
caracter
   seguir        mientras (seguir == ‘S’)
                     nombre=leer(“Ingrese Nombre”)
                     nombres+=nombre
                     seguir=leer(“Desea continuar”)

                                                   Condiciones
seguir == ‘S’

       algoritmo Nombres {
            principal () {

                              caracter seguir=‘S’;
                              cadena nombre=“”, nombres=“”;

                        mientras (seguir == ‘S’){
                          nombre = leer(“Ingrese Nombre”);
                          nombres+=nombre;
                          continuar = leer(“Desea continuar”);
                        }

                      imprimir(nombres);
               }
       }




Informática 1. Versión 1.3 Enero de 2010
                                                                                                 44
.
Ejemplo:

Escriba un algoritmo que calcule el promedio del curso de informática I.

Datos de Entrada                           Proceso                                       Información
    (con tipos)                                                                           (con tipos)
real             seguir = ‘S’                                                          ENTERA
  nota           cuenta=0                                                                  cuenta
caracter         acumlua=0                                                             REAL
   seguir                                                                               promedio,
                 mientras (seguir== “S)                                                 acumula
                     cuenta++
                     nota=leer(“Ingrese nota: “ + cuenta + “ : ”)
                     acumula += nota
                      nota=leer(“Desea Continuar”)

                             promedio = acumula/cuenta;

                            imprimir(“Promedio es: ” + promedio);

                                                      Condiciones
seguir == ‘S’

         algoritmo Promedio {
              principal () {

                              entero cuenta=0;
                              real nota, promedio, acumula;
                              caracter seguir = ‘S’;

                             seguir = leer(“Desea Continuar”);

                        mientras (seguir== ‘S’){
                          cuenta++;
                          nota=leer(“Ingrese nota: “ + cuenta + “ : “);
                          acumula += nota;
                          seguir=leer(“Desea Continuar”);
                        }

                        promedio = acumula/cuenta;
                        imprimir(“Promedio es: ” + promedio);
               }
         }


     1.8.3 Estructura de Repetición haga-mientras

     •       Cuando sea necesario ejecutar los mismos pasos varias veces y se conoce el número de veces
             que desea repetirse.

Informática 1. Versión 1.3 Enero de 2010
                                                                                                      45
.
•     Cuando sea necesario ejecutar los mismos pasos varias veces y NO se conoce el número de
           veces que desea repetirse.
     •     Si la condición es cierta el cuerpo del ciclo se ejecuta, sino la ejecución del ciclo termina.
     •     Si la condición es inicialmente falsa el ciclo no se ejecuta ni una sola vez.
     •     Primero ejecuta y luego evalúa la condición de finalización
     •     Usada para validaciones




Informática 1. Versión 1.3 Enero de 2010
                                                                                                            46
.
1.9 EJERCICIOS RESUELTOS

NOTA: se realizara la abstracción SIN APLICAR validaciones con el ciclo haga mientras a
todos los ejercicios resueltos, pero UNICAMENTE al primer ejercicio se realizara la
abstracción con dicha validacion. Ademas en la parte de pseudocogo si se incluye para
TODOS los ejercicios las validaciones con el ciclo haga mientras.

Ejercicio 1:- Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere
que: area = base x altura, y, perimetro = 2 x (base+altura).

Sin validación con el ciclo haga mientras:

  Datos de Entrada                          Proceso                               Información
      (con tipos)                                                                   (con tipos)
real               base=leer (“Digite la medida de la base del rectangulo”)    real
     base, altura                                                                area, perimetro
                   altura=leer(“Digite la medida de la altura del rectangulo”)

                                 area = base*altura
                                 perímetro = 2*(base+altura)

                                 imprimir (“Area :” +area)
                                 imprimir (“Perimetro:” +perimetro)




Con validación con el ciclo haga mientras:

  Datos de Entrada                        Proceso                                            Información
      (con tipos)                                                                              (con tipos)
real               haga                                                                   real
     base, altura   base=imprimir (“Digite la medida de la base del                         area, perimetro
                    rectangulo”)
                   mientras(base<0)

                                 haga
                                    altura=imprimir (“Digite la medida de la altura del
                                    rectangulo”)
                                 mientras(altura<0)

                                 area = base*altura
                                 perímetro = 2*(base+altura)

                                 imprimir (“Area :” +area)
                                 imprimir (“Perimetro:” +perimetro)



Informática 1. Versión 1.3 Enero de 2010
                                                                                                         47
.
Condiciones
altura<0
base<0


algoritmo Rectangulo {
     principal () {
          // Declaración de variables
         real base=0.0, altura=0.0, area=0.0perímetro=0.0;

                // Asignación o Lectura de Datos
               haga{
                    base=leer (“Digite la medida de la base del rectangulo”);
               } mientras(base<0); //Se valida el ingreso de datos para la base

               haga{
                   altura=leer(“Digite la medida de la altura del rectangulo”);
               } mientras(altura<0); //Se valida el ingreso de datos para la altura

                // Proceso de cálculo
               area = base*altura;
               perímetro = 2*(base+altura);

                // Salida de resultados
                imprimir (“Area :” +area);
                imprimir (“Perimetro:” +perimetro);

       }
}


Ejercicio 2:- Diseñe un pseudocódigo para convertir una longitud dada en metros a sus equivalentes
en centímetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centímetros, 1 pulgada = 2.54
centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.




Informática 1. Versión 1.3 Enero de 2010
                                                                                                48
.
Datos de Entrada                         Proceso                                            Información
      (con tipos)                                                                               (con tipos)
real               cmetr =leer(“Digite longitud en metros”)                                real
     cmetr                                                                                   ccent, cpulg,
                   ccent = cmetr * 100                                                       cpies, cyard
                   cpulg = ccent / 2.54
                   cpies = cpulg / 12
                   cyard = cpies / 3

                                 imprimir( "Cantidad equivalente en centimetros: " +
                                 ccent + " cm" )
                                 imprimir ( "Cantidad equivalente en pulgadas: " + cpulg
                                 + " pulgadas" )
                                 imprimir ( "Cantidad equivalente en pies: " + cpies
                                 + " pies" )
                                 imprimir ( "Cantidad equivalente en yardas: " + cyard
                                 + " yardas" )

                                                      Condiciones
cmetr<0
algoritmo Conversiones1{
     principal () {

                // Declaración de variables
                real cmetr=0.0,ccent=0.0, cpies=0.0, cpulg=0.0, cyard=0.0;

               // Asignación y lectura de variables
               haga{
                  cmetr =leer(“Digite longitud en metros”);
               } mientras(cmetr<0); //Se valida el ingreso de datos para la cmetr

               // Proceso de cálculo
               ccent = cmetr * 100;
               cpulg = ccent / 2.54;
               cpies = cpulg / 12;
               cyard = cpies / 3;

               // Salida de resultados
               imprimir ( "Cantidad equivalente en centimetros: " + ccent + " cm" ) ;
               imprimir ( "Cantidad equivalente en pulgadas: " + cpulg + " pulgadas" ) ;
               imprimir ( "Cantidad equivalente en pies: " + cpies + " pies" ) ;
               imprimir ( "Cantidad equivalente en yardas: " + cyard + " yardas" ) ;
       }
}



Informática 1. Versión 1.3 Enero de 2010
                                                                                                              49
.
Ejercicio 3:- Una institución benéfica europea ha recibido tres donaciones en soles, dolares y marcos.
La donación será repartida en tres rubros: 70% para la implementación de un centro de salud, 20%
para un comedor de niños y el resto para gastos administrativos. Diseñe un algoritmo que determine el
monto en euros que le corresponde a cada rubro. Considere que, en la fecha de redactar este ejercicio:
1 dólar = 3.52 soles, 1 dólar = 2.08 marcos, 1 dólar = 1.07 euros.

 Datos de Entrada                            Proceso                                             Información
     (con tipos)                                                                                   (con tipos)
real              csoles =leer(“Digite cantidad donada en soles”)                             real
     csoles,                                                                                    ceuros ,rubro1,
     cdolares,    cdolares =leer(“Digite cantidad donada en dolares”)                           rubro2, rubro3
     cmarcos
                  cmarcos =leer(“Digite cantidad donada en marcos”)

                               ceuros = (csoles / 3.52 + cdolares + cmarcos / 2.08 ) * 1.07
                               rubro1 = ceuros * 0.70
                               rubro2 = ceuros * 0.20
                               rubro3 = ceuros * 0.10

                               imprimir ("Rubro 1 para salud: $ " + rubro1
                               + " euros")

                               imprimir ("Rubro 2 para comedor: $ " + rubro2
                               + " euros")

                               imprimir ("Rubro 3 para gastos de admon: $ "
                                + rubro3 + " euros")

                                                      Condiciones
csoles<0
cdolares<0
cmarcos<0

algoritmo Euros1{
     principal () {

                // Declaración de variables
               real csoles=0.0, cdolares=0.0, cmarcos=0.0, ceuros=0.0, rubro1=0.0, rubro2=0.0;
               real rubro3=0.0;

               //Asignacion y lectura de las variables
               haga{
                 csoles =leer(“Digite cantidad donada en soles”);
               } mientras(csoles<0); //Se valida el ingreso de datos para la csoles

               haga{
                 cdolares =leer(“Digite cantidad donada en dolares”);
               } mientras(cdolares<0); //Se valida el ingreso de datos para la cdolares

               haga{
Informática 1. Versión 1.3 Enero de 2010
                                                                                                             50
.
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11
Modulo Grado11

Más contenido relacionado

Destacado (20)

Tema 3 algoritmos del análisis
Tema 3  algoritmos del análisisTema 3  algoritmos del análisis
Tema 3 algoritmos del análisis
 
Pruebas de escritorio
Pruebas de escritorioPruebas de escritorio
Pruebas de escritorio
 
Ejercicios de algoritmos
Ejercicios de algoritmosEjercicios de algoritmos
Ejercicios de algoritmos
 
Javadoc
JavadocJavadoc
Javadoc
 
Implementacion clases
Implementacion clasesImplementacion clases
Implementacion clases
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 
Funciones
FuncionesFunciones
Funciones
 
Constructores
ConstructoresConstructores
Constructores
 
Agregacion composicion
Agregacion composicionAgregacion composicion
Agregacion composicion
 
Arraylist
ArraylistArraylist
Arraylist
 
EJERCICIOS DE ALGORITMOS
EJERCICIOS DE ALGORITMOSEJERCICIOS DE ALGORITMOS
EJERCICIOS DE ALGORITMOS
 
Algoritmos ejemplos
Algoritmos ejemplosAlgoritmos ejemplos
Algoritmos ejemplos
 
Normas APA 2014 - Citas y Referencias Bibliográficas según Normas APA 6ta ed....
Normas APA 2014 - Citas y Referencias Bibliográficas según Normas APA 6ta ed....Normas APA 2014 - Citas y Referencias Bibliográficas según Normas APA 6ta ed....
Normas APA 2014 - Citas y Referencias Bibliográficas según Normas APA 6ta ed....
 
Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)Diagramas de Flujo y Algoritmos (Informática ll)
Diagramas de Flujo y Algoritmos (Informática ll)
 
Uml
UmlUml
Uml
 
Poo
PooPoo
Poo
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Paso de parametros
Paso de parametrosPaso de parametros
Paso de parametros
 
String
StringString
String
 
21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos
 

Similar a Modulo Grado11

Similar a Modulo Grado11 (20)

trabajo1
trabajo1trabajo1
trabajo1
 
Programación II
Programación IIProgramación II
Programación II
 
Planes anuales 2009 - 2010
Planes anuales 2009 - 2010Planes anuales 2009 - 2010
Planes anuales 2009 - 2010
 
Planes Estudio Prepa GV
Planes Estudio Prepa GVPlanes Estudio Prepa GV
Planes Estudio Prepa GV
 
Pa 3ro - msimr
Pa   3ro - msimrPa   3ro - msimr
Pa 3ro - msimr
 
Modulo Ntics II FICM (marzo-septiembre 2011)
Modulo Ntics II FICM (marzo-septiembre 2011)Modulo Ntics II FICM (marzo-septiembre 2011)
Modulo Ntics II FICM (marzo-septiembre 2011)
 
Modulo Ntics II FICM (marzo-septiembre 2011)
Modulo Ntics II FICM (marzo-septiembre 2011)Modulo Ntics II FICM (marzo-septiembre 2011)
Modulo Ntics II FICM (marzo-septiembre 2011)
 
Redes y teleproceso 2012
Redes y teleproceso 2012Redes y teleproceso 2012
Redes y teleproceso 2012
 
Redes y teleproceso 2012
Redes y teleproceso 2012Redes y teleproceso 2012
Redes y teleproceso 2012
 
Inicio del curso de ITICs
Inicio del curso de ITICsInicio del curso de ITICs
Inicio del curso de ITICs
 
Septimo ciclo
Septimo cicloSeptimo ciclo
Septimo ciclo
 
9 g syllabus_esis_aplicaciones_difusas_2013_01 (1)
9 g syllabus_esis_aplicaciones_difusas_2013_01 (1)9 g syllabus_esis_aplicaciones_difusas_2013_01 (1)
9 g syllabus_esis_aplicaciones_difusas_2013_01 (1)
 
Analitico inf 312 bases de datos i
Analitico inf 312 bases de datos iAnalitico inf 312 bases de datos i
Analitico inf 312 bases de datos i
 
Algoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio finalAlgoritmos y lenguajes de programación 9 junio final
Algoritmos y lenguajes de programación 9 junio final
 
Temario de software movil
Temario de software movilTemario de software movil
Temario de software movil
 
Jcser
JcserJcser
Jcser
 
Rc mónica morantes
Rc mónica morantesRc mónica morantes
Rc mónica morantes
 
Rc mónica morantes
Rc mónica morantesRc mónica morantes
Rc mónica morantes
 
Rc mónica morantes
Rc mónica morantesRc mónica morantes
Rc mónica morantes
 
Rc mario gomez
Rc mario gomezRc mario gomez
Rc mario gomez
 

Más de Juan pablo Obregon (20)

Boletin version enero
Boletin version eneroBoletin version enero
Boletin version enero
 
21,59x33 junio ver 1 san juan xxiii
21,59x33 junio ver 1 san juan xxiii21,59x33 junio ver 1 san juan xxiii
21,59x33 junio ver 1 san juan xxiii
 
Album de fotografias sebastian gonzalez lenis angie melissa navia 10 1
Album de fotografias sebastian gonzalez lenis  angie melissa navia  10 1Album de fotografias sebastian gonzalez lenis  angie melissa navia  10 1
Album de fotografias sebastian gonzalez lenis angie melissa navia 10 1
 
El gran show
El gran showEl gran show
El gran show
 
hola ya trabaje :)
hola ya trabaje :) hola ya trabaje :)
hola ya trabaje :)
 
Alejandra y mariana
Alejandra y marianaAlejandra y mariana
Alejandra y mariana
 
Simulador arduino
Simulador arduinoSimulador arduino
Simulador arduino
 
Simulador arduino
Simulador arduinoSimulador arduino
Simulador arduino
 
Simulacion arduino Nicole Henao y Sofia Muñoz
Simulacion arduino  Nicole Henao y Sofia MuñozSimulacion arduino  Nicole Henao y Sofia Muñoz
Simulacion arduino Nicole Henao y Sofia Muñoz
 
Proceso tecnologico
Proceso tecnologicoProceso tecnologico
Proceso tecnologico
 
Soporte prolinesa
Soporte prolinesaSoporte prolinesa
Soporte prolinesa
 
corel draw objetos
corel draw objetoscorel draw objetos
corel draw objetos
 
corel draw objetos 11a
corel draw objetos  11acorel draw objetos  11a
corel draw objetos 11a
 
Visual basic
Visual basicVisual basic
Visual basic
 
Objetos manejo paquete office
Objetos manejo paquete officeObjetos manejo paquete office
Objetos manejo paquete office
 
Equipo amarillo
Equipo amarilloEquipo amarillo
Equipo amarillo
 
COREL DRAW OBJETOS EQUIPO AZUL
COREL DRAW OBJETOS EQUIPO  AZULCOREL DRAW OBJETOS EQUIPO  AZUL
COREL DRAW OBJETOS EQUIPO AZUL
 
Equipo rojo 11 b Objetos en Officce
Equipo rojo 11 b Objetos en OfficceEquipo rojo 11 b Objetos en Officce
Equipo rojo 11 b Objetos en Officce
 
Sergio Figueroa y Alejandro Barco
Sergio Figueroa y Alejandro BarcoSergio Figueroa y Alejandro Barco
Sergio Figueroa y Alejandro Barco
 
Equipo azul visual basic 11B
Equipo azul   visual basic  11BEquipo azul   visual basic  11B
Equipo azul visual basic 11B
 

Modulo Grado11

  • 1. UNIVERSIDAD AUTÓNOMA DE OCCIDENTE FACULTAD DE INGENIERÍAS DEPARTAMENTO DE OPERACIONES Y SISTEMAS PROGRAMA DE INGENIERÍA INFORMÁTICA INFORMÁTICA 1 (Algoritmos con Java) MATERIAL RECOPILADO POR LOS PROFESORES J. ANTONIO LEMOS B. Y EDUARDO VICTORIA Z. SANTIAGO DE CALI, FEBRERO DE 2007 Informática 1. Versión 1.3 Enero de 2010 1 .
  • 2. ASIGNATURA: INFORMÀTICA 1 CODIGO: 532219 CREDITOS: 3 PRERREQUISITOS: (Ninguno) CARACTERÍSTICAS: HOMOLOGABLE, VALIDABLE FACULTAD: INGENIERÍA PROGRAMA: INGENIERÎA INFORMÁTICA, ELECTRICA, MECANICA, ELECTRÓNICA, MECATRÓNICA, BIOMÉDICA, INDUSTRIAL, AMBIENTAL, MULTIMEDIA DEPARTAMENTO QUE OFRECE: CIENCIAS DE LA INFORMACIÓN AREA: INFORMÂTICA PERIODO ACADÉMICO: 2007 – 1 ( Enero – Mayo ) I. OBJETIVO GENERAL Capacitar al estudiante en el diseño e implementación de algoritmos computacionales, utilizando los conceptos básicos de la algoritmia, e introduciéndolo en el estudio de la programación orientada a objetos. II. OBJETIVOS ESPECÍFICOS • Identificar los sistemas básicos de numeración y sus operaciones fundamentales. • Comprender las operaciones básicas de la lógica booleana. • Modelar procesos mediante técnicas algorítmicas. • Reconocer y aplicar correctamente las diferentes estructuras de decisión y de repetición en programación de computadores. • Conocer y apropiar el paradigma Orientado a Objetos y su aplicación en la programación. III. CONTENIDO PROGRAMÁTICO UNIDAD 1 – Algoritmos 1.1 Procedimiento 1.2 Ciclo de Diseño 1.3 Definición 1.4 Propiedades de los Algoritmos 1.5 Representación de los datos 1.6 Estructuras secuenciales 1.7 Estructuras condicionales 1.8 Estructuras de repetición Informática 1. Versión 1.3 Enero de 2010 2 .
  • 3. 1.9 Ejercicios resueltos 1.10 Ejercicios propuestos UNIDAD 2 – Introducción a Java 2.1 Historia de Java 2.2 Características básicas de Java 2.2.1 Orientado a objetos puro 2.2.2 Simple 2.2.3 Distribuido 2.2.4 Robusto 2.2.5 Seguro 2.2.6 Arquitectura Neutral 2.2.7 Portable 2.2.8 Interpretado 2.2.9 Alto desempeño 2.2.10 Multihilos 2.2.11 Dinámico 2.3 La estructura de Java 2.4 Instalación de Java 2.5 Construcción básica de una aplicación 2.5.1 Edición 2.5.2 Compilación 2.5.3 Carga 2.5.4 Verificación 2.5.5 Ejecución UNIDAD 3 - Tipos de datos, variables y Operadores (Java) 3.1 Variables 3.1.1 Nombres de Variables 3.2 Palabras reservadas 3.3 Tipos de datos 3.3.1 Tipos Primitivos de Datos 3.3.2 Tipos Referencia a Objeto 3.4 Declaración e inicialización de las variables 3.5 Promoción de datos (Casting) 3.5.1 Conversión automática de Java 3.5.2 Conversión de tipos incompatibles 3.6 Visibilidad y vida de las variables 3.7. Operadores de java 3.7.1 Operadores aritméticos 3.7.2 Operador módulo ( % ) 3.7.3 Operadores de asignación 3.7.4 Operadores unarios 3.7.5 Operador instanceof Informática 1. Versión 1.3 Enero de 2010 3 .
  • 4. 3.7.6 Operador condicional ?: 3.7.8 Operadores de incremento y decremento 3.7.9 Operadores relacionales 3.7.10 Operadores lógicos boléanos 3.7.11 Operador de concatenación de cadenas de caracteres (+) 3.7.12 Operadores que actúan a nivel de bits 3.8 Precedencia y asociatividad de los operadores UNIDAD 4 - Sentencias de control en Java 4.1 Estructura Secuencial 4.1.1 Salida de datos estándar 4.1.2 Entrada de datos estándar 4.2 Sentencias de decisión o selección 4.2.1 Selección simple ( if ) 4.2.2 Selección doble ( if – else ; if – else - if ) 4.2.3 Selección múltiple ( switch ) 4.3 Sentencias de Repetición ( ciclos o bucles) 4.3.1 Ciclo para ( for ) 4.3.2 Ciclo mientras ( while ) 4.3.3 Ciclo haga mientras ( do – while ) UNIDAD 5 – Métodos 5.1 Definición de métodos 5.2 Paso de Parámetros 5.3 Llamado a Métodos Apendice A – Algunos conceptos de la programación orientada a objetos (P.O.O) IV. METODOLOGÍA Durante el curso se emplearán las siguientes Métodos Pedagógicos: • Clase: Mediante la cual el profesor da explicaciones sobre algunos temas, resuelve interrogantes y aclara dudas. Los estudiantes, por su parte, escuchan las exposiciones, toman notas, preguntan y participan opinando y aclarando dudas. • Estudio Independiente: El estudiante de manera independiente realiza lecturas, tareas, consulta libros, realiza composiciones escritas y ejercicios. • Taller: En el cual se realizan ejercicios de práctica de los conceptos revisados en el curso. • Tutoría: Donde profesor y estudiante trabajan sobre el proceso, las dificultades y los problemas que va teniendo el estudiante: le ayuda a interpretar lo que está ocurriendo. Trabajos de Consulta: 1. Sistemas de Numeración. Sistema Binario, Octal, Hexadecimal. Conversión entre sistemas. Suma, Resta, Multiplicación y División en Sistema Binario. Informática 1. Versión 1.3 Enero de 2010 4 .
  • 5. 2. Sistemas lógicos. Tautología y contradicciones, equivalencia lógica, enunciados condicional y bicondicional, y argumentos 3. Programación Orientada a Objetos. Historia, Características, Aspectos Básicos. Historia de JAVA. V. EVALUACIÓN La evaluación del curso considerará los siguientes momentos evaluativos: • Primer Examen Parcial • Segundo Examen Parcial • Examen Final (acumulativo) • Talleres • Prácticas • Quices • Trabajos de Consulta VI. REFERENCIAS BIBLIOGRÁFICAS 1. Área de Informática UAO, Módulo de Informática 1, Publicaciones UAO. 2. CEBALLOS, Francisco J., JAVA 2 Curso de Programación. Ed. Alfaomega. Ra–Ma. 2000. 3. Joyanes Aguilar Luis & Zahonero Martínez Ignacio, “Programación en Java 2 – Algoritmos, Estructuras de Datos y Programación orientada a Objetos”, Ed. McGrawHill, 2002. 4. DEITEL, H.M., DEITEL, P. J. How to program Java. 3ª Edición. Ed. Prentice Hall. 2000. 5. FROUFE, Augustín. JAVA2 Manual de Usuario y Tutorial. 2ª Edición Ed. Alfa Omega 2000. 6. WU, Thomas C. Introducción a la programación orientada a objetos con Java. Ed. Mc Graw Hill. España. 2000. 7. ARNOW, David. WEISS, Gerald, Introducción a la programación con Java. Un enfoque orientado a objetos. Ed. Addison Wesley. España.2001 ELECTRÓNICAS 1. Descargar el software – J2SE, del sitio web: ) http://java.sun.com/javase/downloads/index.jsp 2. Descargar el editor – NetBeans del sitio web: http://www.netbeans.org/downloads/start.html?platform=windows&lang=en&option=all&versi on=6.7.1 3. Documentación de JAVA (JDK 1.6) http://java.sun.com/javase/downloads/index.jsp 4. Tutorial de Java http://java.sun.com/docs/books/tutorial/ 5. Free Electronic Books in Java and C++: http://www.ibiblio.org/pub/docs/books/eckel/ Informática 1. Versión 1.3 Enero de 2010 5 .
  • 6. 6. Aprenda Java como si estuviera en primero http://www.abcdatos.com/tutoriales/tutorial/l7041.html 7. Tutorial de Java (Augustin Froufe) http://www.cica.es/formacion/JavaTut/ 8. Java en Castellano http://programacion.com/java/ FUENTES DE DONDE SE RECOPILÓ EL MATERIAL PARA LA ELABORACIÓN DE ESTE MÓDULO DE INFORMÁTICA I. - Universidad de Valencia, España, Depto. de Informática http://informatica.uv.es/docencia/fguia/TI/Libro/PDFs/CAPI4.pdf - Universidad de Oviedo,España, Depto. de Informática Profesor Daniel Gayo. http://di002.edv.uniovi.es/~dani/asignaturas/ - Aprenda Java como si estuviera en primero, Escuela Superior de Ingenieros Industriales de San Sebastián. http://mat21.etsii.upm.es/ayudainf/aprendainf/Java/Java2.pdf - Matemáticas para Computación, Seymour Lipschutz, McGraw – Hill, 1992 Informática 1. Versión 1.3 Enero de 2010 6 .
  • 7. UNIDAD 1. ALGORITMOS 1.1 Procedimiento de Datos 1.2 Ciclo de Diseño • Requerimiento - Características que se desea que posea un sistema o un software. • Diseño - proceso previo de configuración mental en la búsqueda de una solución en cualquier campo. • Especificación - documento técnico oficial que establece de forma clara todas las características, los materiales y los servicios necesarios para producir componentes destinados a la obtención de productos. • Implementación – Traducir a un lenguaje de programación concreto un algoritmo. • Formas y métodos para llevar a cabo algo. Informática 1. Versión 1.3 Enero de 2010 7 .
  • 8. 1.3 Concepto de Algoritmo Definición de algoritmo. Etimología del término algoritmo En general, un algoritmo es una secuencia de instrucciones o pasos que es llevada a cabo de forma mecánica y sistemática por un actor que se desenvuelve en un ambiente o entorno dado, para resolver un problema determinado en un tiempo finito. Esa es una definición válida de algoritmo. Otras posibles definiciones son las siguientes: Un algoritmo es un conjunto de instrucciones combinadas de forma adecuada para resolver un determinado problema en una cantidad finita de tiempo. Cada instrucción es una indicación sencilla y no ambigua. Secuencia de instrucciones o pasos que es llevada a cabo de forma mecánica y sistemática por un actor que se desenvuelve en un ambiente o entorno dado, para resolver un problema determinado en un tiempo finito. Despues de los siguientes ejemplos, el lector debería tener bastante claro qué es un algoritmo, en qué consiste y dar ejemplos de algoritmos. Ahora, es probable que se esté preguntando de dónde procede el mismo término, “ALGORITMO”, ¿por qué denominamos “algoritmos” a los algoritmos y no “recetas” o “combinaciones de indicaciones sencillas y no ambiguas...”? El término proviene de Mahommed ibn Musa al-Khowârizmî (Mahommed, hijo de Musa, natural de Kharizm), matemático persa del siglo IX; las matemáticas le deben la introducción del sistema de numeración actual y del álgebra. En su libro De numero indiorum (Sobre los números hindúes) proporciona las reglas para realizar las operaciones aritméticas (con los nuevos números, por supuesto), dichas reglas se denominaron “reglas de al-Khowârizmî” y, por deformación “algoritmos”, haciéndose extensivo el término a cualquier conjunto de reglas para resolver un problema determinado. Como nota curiosa, un esbozo del rostro de al-Khowârizmî aparece en la portada del clásico libro de Álgebra del Profesor Cubano Aurelio Baldor, muy conocido en la Literaura de las Matemáticas Hispanoparlantes. Informática 1. Versión 1.3 Enero de 2010 8 .
  • 9. 1.4 Propiedades de los Algoritmos • Su lógica de construcción debe ser • Independiente del lenguaje • Simplicidad • Definido: sin ambigüedades • Preciso: orden específico de sentencias • Finito: principio y fin • Efectivo: Funciona y funciona de acuerdo a los requerimientos Ejemplos de Algoritmos : Ejemplo 1: Elaborar el análisis general que responda a la pregunta: ¿Qué debo hacer para ver la película Avatar?. 1. Ir al cine donde proyectan Avatar. 2. Comprar una entrada. 3. Ver la película. 4. Regresar a casa. Ejemplo 2: Elaborar el análisis para obtener el área de un círculo y la longitud de su circunferencia. 1. Utilizar las fórmulas del área y la circunferencia en función del radio. 2. Las entradas de datos se reducen al dato correspondiente al radio del círculo. 3. Las salidas serán los datos solicitados: área y longitud de la circunferencia. Ejemplo 3: Instrucciones para subir una escalera [...] Las escaleras se suben de frente, pues hacia atrás o de costado resultan particularmente incómodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la cabeza erguida aunque no tanto tal que los ojos puedan ver los peldaños inmediatamente superiores al que se pisa, y respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo excepciones cabe exactamente en el escalón. Puesta en el primer peldaño dicha parte, que para abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (también llamada pie, pero que no ha de confundirse con el pie antes citado), y llevándola a la altura del pie, se le hace seguir hasta colocarla en el segundo peldaño, con lo cual en éste descansará el pie, y en el primero descansará el pie. Los primeros peldaños son siempre los más difíciles, hasta adquirir la coordinación necesaria. La coincidencia de nombre entre el pie y el pie hace difícil la explicación. Cuídese especialmente de no levantar al mismo tiempo el pie y el pie. Llegando en esta forma al segundo peldaño, basta repetir alternadamente los movimientos hasta encontrarse con el final de la escalera. Se sale de ella fácilmente, con un ligero golpe de talón que la fija en su sitio, del que no se moverá hasta el momento del descenso. Informática 1. Versión 1.3 Enero de 2010 9 .
  • 10. Ejemplo 4: Elaborar Tortilla de patatas a la española (6 personas) Ingredientes: - 2 vasos (de los de agua) de aceite (1/2 litro) - Sal - 8 huevos - 1 kg de patatas Se pelan las patatas, se lavan y se secan con un paño; se parten en dos a lo largo y después se cortan en láminas finitas. Se pone el aceite a calentar en la sartén y se fríen las patatas, moviéndolas de vez en cuando y echándoles un poco de sal. Una vez fritas (más o menos doradas, según gusten), se separan y se ponen a escurrir en un colador grande. Se quita el aceite sobrante de la sartén. Aparte se baten los huevos con tenedor y muy fuerte; se pone un poco de sal; en el mismo plato de los huevos se echan las patatas y se mueven con un tenedor. En una sartén grande (o en dos pequeñas) se ponen 3 cucharadas soperas de aceite para que sólo cubra el fondo. Cuando está caliente se vierte la mezcla de huevos y patatas. Se mueve la sartén por el mango para que no se pegue la tortilla. Cuando se vea que está bien despegada y dorada (esto depende del gusto de cada cual), se pone una tapadera encima, se vuelca la sartén y se escurre suavemente la tortilla otra vez en la sartén. Se vuelve a mover por el mango y cuando esté cuajada (a gusto) se pasa a una fuente redonda y se sirve. Ejemplo 5: Algoritmo “infantil”: Multiplicación de números enteros Para obtener el producto de dos números enteros utilizando lápiz y papel se debe escribir el primer factor (multiplicando) y, justo debajo y alineado a la derecha, el segundo factor (multiplicador). Se recorren todas las cifras del multiplicador de derecha a izquierda y se operan con cada una de las cifras el multiplicando, también de derecha a izquierda, escribiendo los resultados intermedios en líneas separadas; cada línea estará desplazada una posición a la izquierda respecto a la línea inmediatamente superior. Una vez se han obtenido todos los resultados intermedios se suman columna a columna obteniéndose el resultado final. Numerando cada uno de los pasos a seguir en cada uno de los algoritmos, formalizamos un poco nuestro lenguaje cotidiano para escribir algoritmos, veamos: Informática 1. Versión 1.3 Enero de 2010 10 .
  • 11. Ejemplo 6: Cambiar la rueda pinchada de un automóvil teniendo un gato mecánico en buen estado, una rueda de reemplazo y una llave inglesa. Los pasos del algoritmo son: 1. Inicio. 2. Aflojar los tornillos de la rueda pinchada con la llave inglesa. 3. Ubicar el gato mecánico en su sitio. 4. Levantar el gato hasta que la rueda pinchada pueda girar libremente. 5. Quitar los tornillos y la rueda pinchada. 6. Poner rueda de repuesto y los tornillos. 7. Bajar el gato hasta que se pueda liberar. 8. Sacar el gato de su sitio. 9. Apretar los tornillos con la llave inglesa. 10. Fin. Podríamos modificar este algoritmo, bien sea escribiendo más líneas de detalle ó uniendo algunos pasos, y aún así funcionaría para resolver nuestro problema. Esto quiere decir que podemos tener algoritmos diferentes, con diferente diseño, que resuelven el mismo problema. ¿Cuál de ellos es más eficiente, hablando desde el punto de vista computacional? Ese es tema de otro curso, por el momento nos debemos concentrar en cuál algoritmo es más claro, cual es más fácil de entender. Ejemplo 7: Un cliente hace un pedido a una fábrica. La fábrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario lo rechaza. Elabore el algoritmo correspondiente. Los pasos del algoritmo son: 1. Inicio. 2. Leer el pedido. 3. Examinar la ficha del cliente. 4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazarlo. 5. Fin. Ejemplo 8: Averiguar si un número entero positivo es primo o no, dado que conocemos la definición de número primo: un número entero positivo, N, es primo si sólo puede dividirse por si mismo y por la unidad. Un método que nos puede dar la solución sería dividir sucesivamente el número por 2, 3, 4...N, y, según el resultado, podríamos resolver el problema. Un diseño del mismo sería: 1. Inicio. 2. Solicitar el valor del número entero positivo y guardarlo en la variable N 3. Poner X igual a 2 ( X = 2, donde X es una variable que representa a los posibles divisores de N ). 4. Dividir N por X ( o sea, operar N / X ) 5. Si el resultado de N / X es entero, entonces N no es primo ( pues esto indicaría que N es divisible entre X ) y saltar al punto 10; en caso contrario continuar el proceso en el siguiente punto, 6. 6. Incrementar el divisor X en una unidad ( X = X + 1 ) 7. Si X es menor que N saltar al punto 4, en caso contrario continuar el proceso en el siguiente punto, 8. Informática 1. Versión 1.3 Enero de 2010 11 .
  • 12. 8. Declarar que N es primo. 9. Saltar al Fin (punto 11). 10. Declarar que N no es primo. 11. Fin. Como parte del diseño de un algoritmo está la selección de aquél que sea razonablemente aceptable, entre todos los muchos posibles que resuelven el mismo problema (el ejemplo que acabamos de dar es claramente mejorable, pues si N no era divisible por 2 no tiene mucho sentido volverse a preguntar si lo es por 4). Durante el diseño es posible y aconsejable, realizar comparaciones entre algoritmos que resuelven el mismo problema. La bondad de un algoritmo puede medirse por dos factores: • El tiempo que se necesita para ejecutarlo. Para tener una idea aproximada de ello, basta con saber el número de instrucciones de cada tipo necesarias para resolver el problema. • Los recursos que se necesitan para implementarlo. Así, una vez diseñado un primer algoritmo, conviene realizar una evaluación del mismo, cuestión a veces nada fácil. Si se decide que éste no es eficiente será necesario o bien diseñar uno nuevo o bien optimizar el original. Optimizar un algoritmo consiste en introducir modificaciones en él, tendientes a disminuir el tiempo que necesita para resolver el problema o a reducir los recursos que utiliza. Por ejemplo, el algoritmo del número primo se optimiza si N se declara como primo cuando X supera a N / 2 y no esperar hasta que X llegue a N. Ejemplo 9: Realizar la suma de todos los números pares entre 2 y 1000. El problema consiste en sumar 2 + 4 + 6 + 8 + 10 + . . . + 998 + 1000. Utilizaremos las palabras SUMA y NUMERO (que llamaremos más tarde variables) para representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 + 4 + 6 + 8), etc. La solución se puede escribir con el siguiente algoritmo: 1. Inicio. 2. Establecer SUMA a 0. 3. Establecer NUMERO a 2. 4. Sumar NUMERO a SUMA. El resultado será el nuevo valor de la suma (SUMA). 5. Incrementar NUMERO en 2 unidades. 6. Si NUMERO <= 1000 bifurcar (ó, ir) al paso 4; en caso contrario, escribir el último valor de SUMA y terminar el proceso. 7. Fin. Si se estudia con atención cada uno de los algoritmos anteriores, descubriremos una serie de características interesantes que definen la naturaleza de lo que es un algoritmo: • Un algoritmo resuelve un problema específico: subir una escalera, obtener una tortilla de patatas, hacer una multiplicación o determinar el máximo común divisor de dos números. • Un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado: una persona cuyo universo inmediato se reduce a su propio cuerpo y una escalera; un cocinero con una sartén, huevos, patatas, aceite, sal y cebolla; o un estudiante con lápiz y papel. Informática 1. Versión 1.3 Enero de 2010 12 .
  • 13. Un algoritmo consta de una serie de pasos que deben llevarse a cabo siguiendo una secuencia marcada: algunos de los pasos, en uno de los algoritmos anteriores, serían: dar la vuelta a la tortilla, batir los huevos, pelar las patatas o cascar los huevos; dichos pasos deben aplicarse en un orden prefijado y no de cualquier manera. • Un algoritmo se aplica de forma mecánica: un algoritmo no precisa decisiones subjetivas ni creatividad en su ejecución, cualquiera con una receta adecuada para obtener tortilla de patatas logrará una tortilla de patatas. Sin embargo, sí es necesario un acto creativo para desarrollar un nuevo algoritmo. • Un algoritmo termina en un tiempo finito: todos los algoritmos deben finalizar, pueden tardar más o menos tiempo en lograr un resultado pero dicho tiempo debe ser finito. Diseño Descendente (Top Down), ó, Modular Los problemas complejos se pueden resolver más eficazmente cuando se descomponen en subproblemas que sean más fáciles de resolver que el original. Este método se denomina divide y vencerás (Divide and conquere) y consiste en convertir un problema complejo en otros más simples que, una vez resueltos, en su conjunto nos solucionen el original. Al procedimiento de descomposición de un problema en subproblemas más simples, llamados módulos, para, a continuación, seguir dividiendo estos subproblemas en otros más simples (otros módulos), se le denomina diseño descendente (top down, en inglés). Las ventajas más importantes de este tipo de diseño son: 1. El problema se comprende más fácilmente al dividirse en módulos o partes más simples. Cuando se realice la programación, utilizaremos esta idea constantemente, de forma que hablaremos también de subprogramas ó métodos ( procedimientos y / o funciones ). 2. Las modificaciones en los módulos son más fáciles, pues estamos ante algoritmos más sencillos. 3. La comprobación del problema se puede realizar más fácilmente, al poder localizar los posibles fallos con mayor precisión. Refinamiento por pasos Durante el diseño, entenderemos por refinamiento por pasos, la metodología por la que en un primer esbozo del algoritmo nos limitamos a señalar o describir un reducido numero de pasos, que deberán ser expresados con mayor detalle posteriormente. Tras esta primera descripción, éstos se especifican con mayor minuciosidad, de forma más extensa y con más pasos específicos. En cada nivel de refinamiento hay que considerar dos fases: ¿Qué hace el módulo? para, a continuación, responder a ¿Cómo lo hace? Como es natural, dependiendo de la complejidad del problema se necesitarán diferentes y sucesivos niveles de refinamiento antes de que pueda obtenerse un algoritmo con suficiente nivel de detalle. Así, en el ejemplo del cálculo de la longitud de una circunferencia y la superficie de su círculo, a pesar de presentar en su diseño un bajo nivel de complejidad, se puede descomponer en subproblemas más simples: 1. leer datos de entrada, 2. calcular superficie y longitud, 3. escribir resultados. El ejemplo siguiente, nos muestra el diseño de un algoritmo para un problema de carácter no numérico Informática 1. Versión 1.3 Enero de 2010 13 .
  • 14. Ejemplo: Diseñar un algoritmo que responda a la pregunta: ¿Qué debo hacer para ver la película MatriX?. Un primer análisis nos conduce a un esbozo de solución, descomponiéndolo en cuatro módulos sucesivos: 1. Ir al cine donde proyectan MatriX 2. Comprar una entrada 3. Ver la película 4. Regresar a casa Estos cuatro pasos se pueden refinar un poco más y así este problema lo podríamos descomponer de la siguiente forma, usando el lenguaje natural: INICIO ALGORITMO para ver la película MatriX consultar la cartelera de cines SI proyectan XYZ ENTONCES ir al teatro correspondiente SINO proyectan XYZ declarar el fracaso del objetivo y terminar SI hay cola ENTONCES ponerse en ella MIENTRAS haya personas delante en la cola HACER esperar el instante para avanzar en la cola preguntar si quedan entradas SI hay entradas ENTONCES comprar una entrada SINO quedan entradas declarar el fracaso del objetivo, regresar a casa y terminar encontrar el asiento correspondiente MIENTRAS proyectan la película HACER ver la película abandonar el cine regresar a casa FIN ALGORITMO para ver la película MatriX Algunas de estas acciones son primitivas para nosotros; es decir, no es necesario descomponerlas más, como el abandonar el cine. Sin embargo hay otras acciones que son susceptibles de mayor descomposición. Este es el caso de la acción: “encontrar el asiento correspondiente” si los números de los asientos están impresos en la entrada, esta acción compuesta se resuelve con el siguiente algoritmo: INICIO ALGORITMO para encontrar el asiento del espectador caminar hasta llegar a la primera fila de asientos REPETIR comparar número de fila con número impreso en la boleta SI no son iguales, ENTONCES pasar a la siguiente fila HASTA_QUE se localice la fila correcta Informática 1. Versión 1.3 Enero de 2010 14 .
  • 15. MIENTRAS número de asiento no coincida con número impreso en la boleta HACER avanzar a través de la fila a la siguiente butaca sentarse en la butaca FIN ALGORITMO para encontrar el asiento del espectador De esta forma, podríamos seguir hasta la descomposición de las distintas acciones en instrucciones susceptibles de ser interpretadas directamente por el computador. Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en caso contrario, se dice que es un algoritmo no computacional. Los que se trabajaran en el curso de informática 1, serán los algoritmos computacionales. Programación del Algoritmo Una vez que el algoritmo está diseñado y representado, se debe pasar a la fase de resolución práctica del problema con el computador. Esta fase se descompone a su vez en las siguientes subfases: (Ver Figura 1.3) 1. Codificación del algoritmo en un programa. 2. Ejecución del programa 3. Comprobación del programa. Programación del algoritmo Codificación en un Ejecución del Comprobación programa programa del programa Fig. 1.3 Programación del algoritmo La fase de conversión de un algoritmo en instrucciones de un lenguaje de programación se denomina codificación. El código deberá estar escrito de acuerdo con la sintaxis del lenguaje de programación, ya que solamente las instrucciones sintácticamente correctas pueden ser interpretadas por el computador. Nótese que durante el proceso de programación, se debe separar el diseño del algoritmo de su posterior implementación en un lenguaje de programación específico. Por ello distinguimos entre el concepto más general de programación y el más particular de codificación, que depende del lenguaje de programación utilizado. Al llegar a este punto, es posible que el lector conozca al menos uno de estos lenguajes y éste es el momento en el que podría mostrar sus habilidades para efectuar una codificación lo más correcta y eficiente posible. Tras la codificación del programa, éste deberá ejecutarse en un computador. El resultado de esta primera ejecución es incierto, ya que existe una alta probabilidad de que aparezcan errores, bien en la codificación, bien en el propio algoritmo. Por tanto, el paso siguiente consiste en comprobar el correcto funcionamiento del programa y en asegurarse, en la medida de lo posible, de la validez de los resultados proporcionados por la máquina. Informática 1. Versión 1.3 Enero de 2010 15 .
  • 16. Formas de describir un algoritmo Dado que los algoritmos permiten resolver problemas de forma mecánica, está claro que resulta muy interesante compartir dicho algoritmo de tal manera que otras personas puedan conocerlo y aplicarlo; así surge el problema de describir los algoritmos de forma tal que todas las características que los definen se mantengan invariables. Lenguaje natural. La primera y más sencilla forma de describir un algoritmo es empleando el lenguaje natural; por ejemplo, el algoritmo para encontrar las raíces de una ecuación de segundo grado (ó, ecuación cuadrática) del tipo aX 2 + bX + C = 0 ( a diferente de cero ), podría describirse así: 1. Definir (o, leer) los coeficientes de la ecuación de segundo grado: a, b y c , donde a no es cero. 2. Determinar el valor del discriminante: d = b 2 - 4ac. 3. Si el discriminante es cero, sólo hay una solución: -b / (2a). 4. Si el discriminante es positivo, hay dos soluciones: (-b ± d ) / (2a). 5. Si el discriminante es negativo, no hay soluciones reales. La ventaja fundamental es la facilidad de comprensión, pues cualquier persona (hispanoparlante, por supuesto) que lea dicho algoritmo podría entenderlo y aplicarlo; sin embargo, son varios los problemas que plantea describir un algoritmo de esta forma: • El lenguaje natural no es universal, este algoritmo sería completamente inútil para los no hispanoparlantes. • El lenguaje natural es ambiguo y, por tanto, susceptible de errores. • El lenguaje natural es demasiado amplio, lo que para una persona puede ser una instrucción sencilla, puede no serlo para otra y, desde luego, no lo será para un computador. Por todo ello, se han buscado nuevas formas de describir los algoritmos que, cuando menos, sean más universales, estén mejor delimitadas y no sean ambiguas; dos técnicas que logran esto son los organigramas y las notaciones en pseudocódigo. Diagramas de Flujo (Organigramas) Los diagramas de flujo u organigramas permiten describir los algoritmos de forma gráfica; para ello utilizan una serie de bloques que indican distintas circunstancias y flechas que muestran bajo qué condiciones se pasa de un bloque a otro. Algunos de los símbolos son los siguientes: Informática 1. Versión 1.3 Enero de 2010 16 .
  • 17. A continuación, se muestra un organigrama que describe el algoritmo anterior. Informática 1. Versión 1.3 Enero de 2010 17 .
  • 18. Los organigramas presentan varias ventajas frente al lenguaje natural: • Los símbolos son universales. • Son menos propensos a la ambigüedad. • Por estar basados en un número pequeño de bloques y reglas para su empleo permiten delimitar mejor los algoritmos. • Se aproximan más a la forma en que trabaja el computador. Sin embargo: • El hecho de emplear símbolos supone que una persona que desconozca los símbolos puede tener dificultades para comprender el algoritmo o no entenderlo en absoluto. • Aunque los símbolos son universales, el texto que se coloca en su interior sigue siendo lenguaje natural. • La representación gráfica puede resultar bastante tediosa y, en el caso de algoritmos complejos, extremadamente confusa. • Un computador no es capaz de utilizar una representación visual como descripción de un algoritmo. Actualmente, los organigramas no son muy utilizados, aunque para mostrar el funcionamiento de algoritmos sencillos continúan resultando prácticos. 1.5 Pseudocódigo El pseudocódigo pretende juntar en un solo tipo de representación las ventajas del lenguaje natural y de los organigramas sin ninguno de sus problemas; por tanto, el pseudocódigo: • Es fácilmente comprensible para una persona que lo vea por vez primera. • Está bien delimitado. • Elimina las ambigüedades del lenguaje natural. • Se representa de una forma compacta. De esta forma, el pseudocódigo se suele ver como un subconjunto de un lenguaje natural que proporciona un número limitado de operaciones para la construcción de algoritmos; la única finalidad del pseudocódigo (como de los organigramas) es la comunicación entre seres humanos. La ventajas del uso del pseudocódigo residen en: • Su uso en la planificación de un programa; permitiendo que el programador se pueda concentrar en la lógica y en las estructuras de control y no tenga que preocuparse, por ahora, de detalles acerca de las reglas sintácticas y semánticas de un lenguaje específico. • Consecuentemente, es más fácil de modificar en el caso de que se descubran errores o anomalías en la lógica del algoritmo. • Aunque el pseudocódigo es independiente del lenguaje de alto nivel que vaya a utilizarse, un algoritmo expresado en pseudocódigo puede ser traducido más fácilmente a muchos de dichos lenguajes. Elementos de construcción de un algoritmo: • Inicio del algoritmo Informática 1. Versión 1.3 Enero de 2010 18 .
  • 19. Finalización del algoritmo • Comentarios • Declaración de variables • Expresiones • Instrucciones de Salida • Instrucciones de Entrada Inicio y finalización del algoritmo - Inicio del algoritmo algoritmo NombreAlgoritmo { principal ( ) { } } - Finalización del algoritmo Ejemplos de iniciar y finalizar un algoritmo: algoritmo Edad { principal ( ) { // Cuerpo del Algoritmo …… } } Comentarios Los comentarios son la documentación interna del algoritmo. Y se hacen de 2 formas, las cuales son: Párrafo o bloque (más de una línea): Inicia con /* Termina con */ Una línea: Inicia con // Ejemplos de comentarios: // Este es comentario de una línea /* Este es un comentario de un bloque de líneas. Este es un comentario de un bloque de líneas.*/ Nota: Los comentarios se insertan en el cuerpo del algoritmo. Informática 1. Versión 1.3 Enero de 2010 19 .
  • 20. Variables Una variable es una localización o casilla en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecución del programa. Cuando un programa necesita almacenar un dato, necesita una variable. Toda variable tiene un nombre ó identificador, un tipo de dato, el valor concreto que va a guardar y una dirección en la memoria del computador. Dicho de otra forma, Son espacios de memoria reservados para guardar datos que pueden variar durante la aplicación de un algoritmo. El tipo de la variable depende del tipo de dato que pueda guardar. Antes de poder utilizar una variable es necesario declararla especificando su tipo de dato y su nombre. Para declarar variables usaremos los siguientes formatos: Declaración de una variable: tipo_de_variable nombre_de_la_variable = valor_inicial; Declaración de varias variables con el mismo tipo de dato: tipo_de_variables nombre_de_la_variable1 = valor_inicial, nombre_de_la_variable2 = valor_inicial, nombre_de_la_variable3 = valor_inicial, ... , nombre_de_la_variableN = valor_inicial ; Donde: tipo_de_variable Depende del tipo de dato que va a guardar la variable y se nombra con dicho tipo. El tipo puede ser: Primitivos: entero (si la variable almacenará un número entero) , real (si la variable almacenará un número con parte decimal) , caracter (si la variable almacenará un caracter), booleana (si la variable almacenará el valor verdadero o el valor falso, también conocida como de tipo logico). Objetos: cadena (si la variable almacenará un conjunto de caracteres). nombre_de_la_variable Nombres (ó identificadores) válidos de las variables. El nombre de una variable debe comenzar con un carácter alfabetico o un símbolo de subrayado ( _ ) . Los demás caracteres del nombre pueden ser alfabéticos (a..z, A..Z), numéricos (0..9) y el carácter subrayado ( _). Debe considerarse también que una letra mayúscula se considera diferente de una letra minúscula. No tiene restricción en su longitud No pueden contener ningún otro carácter (*, +, ?, =, (, ), /, &, %, $, #, !, @, …). No se pueden utilizar las palabras clave reservadas para el lenguaje, estas varían de acuerdo al lenguaje utilizado. Deben ser auto-documentadas y Generalmente se escribe en letras minúsculas Nombres de variables no validas: • edad_#01 • _coeficiente(4) Informática 1. Versión 1.3 Enero de 2010 20 .
  • 21. • 4_nombre_del_Trabajador • v@lorTerminal • nombre de programa • número 1 • SUELDO-45 Ejemplos de declaración de variables: La siguiente instrucción declara la variable edad de tipo ENTERA y la variable descuento de tipo Real. entero edad=0; real descuento=0.0; Esto crea las casillas de memoria edad y descuento. Luego de la creación, las variables están inicializadas en cero ( 0 ). edad 0 descuento 0 La siguiente instrucción declara las variables nota1, nota2 y nota3, todas de tipo REAL. real nota1=0.0, nota2=0.0, nota3=0.0; Esto crea los casilleros de memoria nota1, nota2 y nota3. Luego de la creación, las variables están inicializadas en cero ( 0 ). nota1 0 nota2 0 nota3 0 entero valor1= 0; caracter respuesta = ‘s’; real valor_2 = 3.14; cadena nombre = “ ”; booleano respuesta2 = verdadero; Constantes Son variables que después de habérseles asignado una valor, éste no cambia durante el proceso de aplicación del algoritmo. El nombre de las constantes, generalmente, se escribe en letras mayúsculas. Informática 1. Versión 1.3 Enero de 2010 21 .
  • 22. Ejemplos de constantes: real PI = 3.141592; real porcentaje = 0.25; Expresiones Conjunto de valores, variables, constantes y operadores relacionados matemáticamente o lógicamente, asignados a una variable. Permite mover contenidos de memoria de una posición a otra Su resultado es representado por las variables. Asigna valores a una posición de memoria. Ejemplos de Expresiones: promedio = (n1 + n2 + n3)/3; // Donde n1=4, n2=3 y n3=1 suma = suma + numero; num1 > num2 nombre_completo = nombre + apellido; entero Resultado = numero_1 + numero_2; cadena Nombre = “Jesús Antonio”; real _Sueldo = 45.36 + 854687; booleana Flag = true; caracter Vocal = ‘X’; booleana Opcion = 45 > 0 && true && (18+12)/2 > 0; booleana Otra_Opcion = true && (false || true); Instrucciones de Salida Consiste en entregar resultados al usuario mediante el dispositivo estándar de salida, la pantalla. Ya sea, mostrar el valor de una variable o alguna información que desee desplegar al usuario. En general, la forma para realizar esta acción, se expresa en el pseudocódigo mediante la palabra imprimir de la siguiente forma: Sintaxis imprimir (“El Texto que se va a imprimir”); imprimir (nombre_de_variable); imprimir (“El texto ”+ nombre_de_variable); Nota: En este caso, el simbolo + es llamado operador de concatenacion y es utilizado para encadenar dos elementos y formar un dato tipo cadena. Informática 1. Versión 1.3 Enero de 2010 22 .
  • 23. Ejemplos de Instrucciones de Salida: • Si se desea desplegar una cadena Hola Mundo: imprimir ( “Hola Mundo” ) ; • Si se desea desplegar el valor almacenado en la variable importeCompra: imprimir ( importeCompra ) ; • Si se desea desplegar la cadena El Valor Del Area Es: seguida del valor almacenado en la variable area: imprimir ( “El Valor Del Area Es: ” +area) ; Pero en el imprimir se puede tener muchas combinaciones entre variables y cadenas, como por ejemplo: Suponiendo que se han hecho las siguientes declaraciones: real area=70.4; entero valor = 21; cadena nombre = “Carlos”; • imprimir ( “El Valor Del Area Es: ” +area+“ Metros Cuadrados”) ; entonces el anterior ejemplo nos desplegaría en pantalla: El Valor Del Area Es: 70.4 Metros Cuadrados • imprimir ( “El Terreno De : ” +area+“ Tiene Un Costo De: ” +valor+“ Pesos Por Metro Cuadrado y vendido por”+nombre); entonces el anterior ejemplo nos desplegaría en pantalla: El Terreno De : 70.4 Tiene Un Costo De: 21 Pesos Por Metro Cuadrado NOTA: Observe que en las cadenas se dejaron espacios para que en al momento de desplegarse en pantalla, este espacio entre palabras sea conservado. Instrucciones de Entrada Consiste en obtener y almacenar en una variable, datos de entrada entregados por el usuario desde un dispositivo de entrada estándar (como el teclado). En general, la acción de ingresar un dato desde un dispositivo de entrada a una variable, se expresa en el pseudocódigo de la siguiente forma: Sintaxis variable = leer (“mensaje de captura “); Ejemplos de Instrucciones de Entrada: variable2 = leer (“Digite el segundo valor ”); Suponiendo que se han hecho las siguientes declaraciones: real area=0.0; Informática 1. Versión 1.3 Enero de 2010 23 .
  • 24. entero valor=0; cadena nombre=“”; • nombre = leer ( “Ingrese su nombre ”) ; entonces la anterior instrucción nos almacenaría el nombre ingresado por el usuario en la variable nombre. • valor = leer( “Ingrese el valor de venta por metros cuadrados ”) ; entonces la anterior instrucción nos almacenaría el valor por metro cuadrado ingresado por el usuario en la variable valor. • area = leer ( “Ingrese el area del terreno ”) ; entonces la anterior instrucción nos almacenaría el area del terreno ingresado por el usuario en la variable area. Por ejemplo, la instrucción: real estatura=0.0; estatura = leer(“Digite la estatura: “ ) ; solicita el ingreso de un valor, desde algún dispositivo de entrada (como el teclado), para la variable estatura. Operadores Son símbolos que establecen una relación aritmética, lógica o relacional entre datos. Tabla 1.1 Operadores aritméticos Informática 1. Versión 1.3 Enero de 2010 24 .
  • 25. Tabla 1.2 Operadores relacionales Tabla 1.3 Operadores lógicos Informática 1. Versión 1.3 Enero de 2010 25 .
  • 26. Reglas de jerarquía de los operadores aritméticos Cuando una expresión aritmética tiene más de un operador aritmético, el orden de aplicación de los operadores sigue un orden preciso determinado por las reglas de jerarquía de los operadores aritméticos, que se muestran en la siguiente tabla: Tabla 1.4 Reglas de Jerarquía de los Operadores Aritméticos, Relacionales y Lógicos Operadores Precedencia posfijo expr++ expr-- unario ++expr --expr +expr -expr ~ ! multiplicativo */% aditivo +- cambio << >> >>> relacionales < > <= >= instanceof equivalencia == != AND bit a bit & OR bit a bit exclusivo ^ OR bit a bit inclusivo | AND logico && OR logico || ternario ?: asignacion = += -= *= /= %= &= ^= |= <<= >>= >>>= Si existen paréntesis anidados, se evalúa primero la expresión en el paréntesis más interno. Si varios operadores o paréntesis tienen la misma jerarquía, la evaluación será de izquierda a derecha. Suponga que tenemos estos dos valores: valor1=1, valor2=5; Ejemplo 1: resultado = 10 * ++ valor1; resultado = 10 * 2; //Aumento primero la variable valor1 en uno, es decir su nuevo valor es 2 resultado = 20; resultado = 10 * valor1++; resultado = 10 * 1; //Primero realizo el producto y luego aumento la variable valor1 en uno, es decir su valor final es 2 resultado = 10; Informática 1. Versión 1.3 Enero de 2010 26 .
  • 27. Ejemplo 2: valor1>0 && valor2++ <=5 V && (5<=5) V && V V El valor final de valor2 es de 6, por tener el acumulador (++) como posfijo Ejemplo 3: valor1>0 && ++valor2 <=5 V&& (6<=5) V&& F F Por haber un acumulador (++) como prefijo, primero se incrementa valor2, obteniendo como nuevo valor 6 y luego realiza la operación lógica. Ejemplo 4: true && valor2 – 4 < valor1 || valor1-- < valor2 – 4 1 1 F F F F Ejemplo: ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica? Solución e = a/b/c; Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha: Primero, se dividirá a entre b. Segundo, el resultado ya obtenido de a / b se dividirá entre c. Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere ninguna pareja de paréntesis. Ejemplo:- ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica? Informática 1. Versión 1.3 Enero de 2010 27 .
  • 28. Solución c = a*b*c/d/e; Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha: Primero, se multiplicará a por b. Segundo, el resultado ya obtenido de a * b se multiplicará por c. Tercero, el resultado ya obtenido de a * b * c se dividirá entre d. Cuarto, el resultado ya obtenido de a * b * c / d se divivirá entre e. Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere ninguna pareja de paréntesis. Ejercicio: ¿Cuál es el equivalente en pseudocódigo de la siguiente expresión algebraica? Solución e = 4 / ((a + b) / (c / d)) + v / (w / p) + 5 * m * n * q ; Aplicando las reglas de jerarquía de los operadores aritméticos: Primero, se sumará a más b. Segundo, se dividirá c entre d. Tercero, el resultado ya obtenido de a+b se dividirá entre el resultado ya obtenido de c/d. Cuarto, se dividirá 4 entre el resultado ya obtenido de ( (a+b)/(c/d) ) Quinto, se dividirá w entre p. Sexto, se dividirá v entre el resultado ya obtenido de (w/p). Séptimo, se multiplicará 5 por m. Octavo, se multiplicará el resultado ya obtenido de 5*m por n. Noveno, se multiplicará el resultado ya obtenido de 5*m*n por q. Décimo, se sumará el resultado ya obtenido de 4/( (a+b)/(c/d) ) más el resultado ya obtenido de v/(w/p). Undécimo, se sumará el resultado ya obtenido de 4/( (a+b)/(c/d) ) + v/(w/p) más el resultado ya obtenido de 5*m*n*q. Se ha utilizado la mínima cantidad posible de paréntesis. Pueden usarse paréntesis adicionales, lo que no es un error. Por ejemplo, otra solución posible que arroja el mismo resultado final es: e = (4/((a+b)/(c/d))) + (v/(w/p)) + (5*m*n*q) ; Note que usando correctamente las reglas de jerarquía, es posible usar menos parejas de paréntesis. Informática 1. Versión 1.3 Enero de 2010 28 .
  • 29. FUNCIONES NATIVAS • Existen cálculos que han sido, previamente organizados y definidos, mediante funciones, que son expresiones automáticas dirigidas a resolver cierto tipo de cómputo numérico o lógico. • Las funciones “devuelven” un valor representado por cierto tipo de dato, dependiendo de su naturaleza de procesamiento. • Por tanto es factible y significativo, asignar ese resultado a una variable que pueda “contenerlo”. • equivalente en español - Minúscula Sintaxis función (argumento1, argumento2, …); Los argumentos, corresponden a los valores que evalúa la función. Ejemplos de Funciones: raiz (valor real) : calcula la raiz cuadrada de un número real o entero. Devuelve un valor real. absoluto (valor real) : calcula el valor absoluto de un número real o entero. Devuelve un valor real. potencia(valor real, valor entero) : calcula la potencia de un valor real o entero (base) elevado a una potencia entera. Devuelve un valor real. seno (valor real) : calcula el seno de un valor dado en radianes. Devuelve un valor real. ASIGNACIÓN A UNA VARIABLE variable = función (argumentos); 1.6 Estructuras Secuenciales La estructura secuencial es la más sencilla de todas, simplemente indica al procesador que debe ejecutar de forma consecutiva una lista de acciones (que pueden ser, a su vez, otras estructuras de control); para construir una secuencia de acciones basta con escribir cada acción en una linea diferente. A continuación se muestra una composición secuencial de acciones en notación algorítmica. real a=0.0, b=0.0, c=0.0; a=leer(“Digite a ” ) ; b=leer( “Digite b ” ) ; c = a+b; imprimir ( “c tiene un valor de “ + c ) ; Existe una forma alternativa de expresar una estructura secuencial escribiendo varias acciones en la misma línea pero utilizando el punto y coma ( ; ) como separador. Sin embargo, esta última notación es desaconsejable puesto que puede llegar a hacer el código bastante difícil de leer. Informática 1. Versión 1.3 Enero de 2010 29 .
  • 30. real a=0.0, b=0.0, c=0.0; a=leer(“Digite a ” ) ; b=leer( “Digite b ” ) ; c = a + b ; imprimir ( “c tiene un valor de “ + c ) ; Por último, es necesario señalar un aspecto importante de la composición secuencial y es que no es conmutativa. Para mostrar lo realizado hasta ahora tenemos este ejemplo: Algoritmo para expresar en centímetros y en pulgadas una cantidad dada en metros. Esta es una solución en pseudocódigo utilizando los conceptos computacionales descriptos en las paginas anteriores. La solución considera que 1 metro = 100 centímetros y que 1 pulgada = 2.54 centímetros. Datos de Entrada Proceso Información (con tipos) (con tipos) real cantidad_metros = leer(“Digite la longitud en metros: real cantidad_metros ”) cantidad_centimetros cantidad_pulgadas cantidad_centimetros = cantidad_metros * 100 cantidad_pulgadas = cantidad_centimetros / 2.54 imprimir (cantidad_metros + “, en centímetros, equivale a: ” + cantidad_centimetros ) imprimir (cantidad_metros + c, en pulgadas, equivale a: ” + cantidad_pulgadas ) algoritmo Conversion{ principal(){ // Declara las variables m, c y p real cantidad_metros=0.0, cantidad_centimetros=0.0 , cantidad_pulgadas=0.0; // Lectura y asignación de las variables cantidad_metros = leer(“Digite la longitud en metros: ”); // Calcula la cantidad equivalente en centímetros y lo asigna a la variable c cantidad_centimetros = cantidad_metros * 100 ; // Calcula la cantidad equivalente en pulgadas y lo asigna a la variable p cantidad_pulgadas = cantidad_centimetros / 2.54 ; // Muestra los valores de las variables c y p: imprimir(cantidad_metros + “, en centímetros, equivale a: “ + cantidad_centimetros ); imprimir(cantidad_metros + c, en pulgadas, equivale a: “ + cantidad_pulgadas ) ; } } Informática 1. Versión 1.3 Enero de 2010 30 .
  • 31. Datos de Entrada Proceso Información (con tipos) (con tipos) real radio = leer(“Digite el valor del radio: ”) real radio PI = 3.1415926535 area area = PI * potencia(radio,2) imprimir (“El área del cículo de radio “+radio+” es “+area) algoritmo AreaCirculo { principal () { // Declaración de variables real radio = 0.0; real area = 0.0; real PI = 3.1415926535; // Captura de datos radio = leer (“Digite el valor del radio: ”); //Cálculos area = PI * potencia(radio,2); // Salida de datos imprimir (“El área del cículo de radio “+radio+” es “+area); } } 1.7 Estructura Condicionales La estructura alternativa permite bifurcar el “flujo” del programa en función de una expresión lógica. Disponemos de tres estructuras alternativas diferentes: alternativa simple, alternativa doble y alternativa múltiple. 1.7.1 Estructura Condicional Simple Esta estructura permite evaluar una expresión lógica y en función de dicha evaluación ejecutar una acción (o composición de acciones) o no ejecutarla; también se la suele denominar si- entonces. A continuación se muestra la notación algorítmica para la estructura alternativa simple. si (<expresión lógica>) entonces acciones si la expresión lógica es verdadera fin_si Informática 1. Versión 1.3 Enero de 2010 31 .
  • 32. En seudocódigo la instrucción si–simple se presenta así: si( <condición> ) { // Bloque de instrucciones que se ejecuta si la condición es verdadera. } // Fin del bloque del si En el siguiente ejemplo, se calcula la longitud de una circunferencia si el radio es positivo: si ( radio > 0 ) { longitud = 2 * 3.1416 * radio ; } Ejemplo: Dada la edad de una persona, imprimir un mensaje solo si ella cumple con la mayoría de edad Datos de Entrada Proceso Información (con tipos) (con tipos) entero edad=leer(“Digite la edad de la persona”) cadena edad cumple si edad >=18 cumple=“Cumple con la mayoría de edad” imprimir (cumple) Condiciones Lenguaje natural: La edad debe ser mayor o igual a 18 para poder votar Expresion lógica: edad >=18 algoritmo MayoriaDeEdad { principal () { entero edad=0; cadena cumple=“”; //Lectura de las variables edad=leer(“Digite la edad de la persona”); si (edad>=18){ cumple=“Cumple con la mayoría de edad”; } imprimir(cumple) ; } } Informática 1. Versión 1.3 Enero de 2010 32 .
  • 33. 1.7.2 Estructura Condicional Doble La estructura alternativa doble es similar a la anterior, con la salvedad de que en este tipo de estructura se indican acciones no sólo para la rama “verdadera” sino también para la “falsa”; es decir, en caso de que la expresión lógica evaluada sea cierta, se ejecuta una acción o grupo de acciones y, en el caso de que sea falsa, se ejecuta un grupo diferente de acciones. La sintáxis en la notación algorítmica es la que se muestra a continuación: si (<expresión lógica>) entonces acciones si la expresión lógica es verdadera si no acciones si la expresión lógica es falsa fin_si En seudocódigo la instrucción si–entonces simple se presenta así: si( <condición> ) { // Bloque de instrucciones que se ejecuta si la condición es verdadera. } // Fin del bloque del si sino { // Bloque de instrucciones que se ejecuta si la condición es falsa. } // Fin del bloque del sino En el siguiente ejemplo se calcula la longitud de una circunferencia si el radio es positivo y, en caso contrario, se proporciona un mensaje de error: si ( radio > 0 ) { longitud = 2 * 3.1416 * radio ; } sino { //si radio <= 0 imprimir ( “Radio incorrecto” ) ; } Informática 1. Versión 1.3 Enero de 2010 33 .
  • 34. Ejemplo: Dada la edad de una persona, imprimir un mensaje indicando si es mayor de edad o no Datos de Entrada Proceso Información (con tipos) (con tipos) entero edad = leer (“Digite la edad de la persona”) cadena edad cumple si edad >=18 cumple=“Cumple con la mayoría de edad” sino cumple=“No Cumple con la mayoría de edad” imprimir (cumple) Condiciones Lenguaje natural: La edad debe ser mayor o igual a 18 para poder votar Expresion lógica: edad >=18 algoritmo MayoriaDeEdad { principal () { //Declaración de las variables entero edad=0; cadena cumple=“”; //Lectura de las variables edad = leer (“Digite la edad de la persona”); si (edad>=18){ cumple=Cumple con la mayoría de edad”; }sino{ cumple=“No Cumple con la mayoría de edad” ; } imprimir(cumple) ; } } Informática 1. Versión 1.3 Enero de 2010 34 .
  • 35. Ejemplo: Informar si un estudiante ha superado o no un determinado examen consistente en 20 preguntas de igual valor y calcular su nota en caso de aprobar. Datos de Entrada Proceso Información (con tipos) (con tipos) entero num_correctas = leer (“Digite el numero de preguntas real num_correctas contestadas correctamente”) nota cadena si num_correctas < 12 pasaExamen pasaExamen=“No ha superado Vd. el examen” sino nota = num_correctas * 0.25 pasaExamen= “aprobó Vd. con un ” + nota imprimir (pasaExamen); Condiciones Lenguaje natural: El numero de preguntas correctas debe ser menor a 12 para perder examen Expresion lógica: num_correctas < 12 algoritmo AprobarExamen1{ principal () { //Declaración de las variables entero num_correctas=0; real nota=0.0; cadena pasaExamen=“”; //Asignación y lectura de las variables num_correctas = leer (“Digite el numero de preguntas contestadas correctamente”); si (num_correctas<0 && num_correctas>20){ imprimir (“Error:el rango (posibles respuesta correctas)es de 0-20”); //valido la entrada de } //datos si (num_correctas < 12) { pasaExamen=“No ha superado Vd. el examen”; } sino { //si num_correctas >12 nota = num_correctas * 0.25; pasaExamen = “aprobó Vd. con un ” + nota; } imprimir (pasaExamen); } } Informática 1. Versión 1.3 Enero de 2010 35 .
  • 36. Ejemplo: Supongamos que tenemos un algoritmo para averiguar si un número es impar o par, que puede ser descrito narrativamente de la siguiente forma: “Si el residuo de la división entera del número entre dos ( 2 ) es igual a cero, entonces el número es par. En caso contrario; es decir, si el residuo es uno ( 1 ), entonces el número digitado es impar. Existe un operador que permite determinar de manera directa el residuo ( o resto ) de la división de dos números. Definición: El residuo ( ó resto ) de la división de dos números a y b se denota como “a % b”, se lee “a módulo b” y nos arroja el residuo de la división de a y b. Ejemplo: 83 % 5 = 4, pues el cociente es 20 y el residuo es 3, que es la respuesta. Este algoritmo escrito en pseudocódigo queda así: Datos de Entrada Proceso Información (con tipos) (con tipos) entero n=leer(“Digite un número entero”) CADENA n tipo si n % 2 == 0 tipo = n + “ es par” sino tipo = n + “es impar” imprimir (tipo); Condiciones Expresion lógica: num_correctas < 12 algoritmo ImparPar1{ principal () { //Declarcion de la variable entero n=0 ; cadena tipo=“”; //Lectura de la variable n=leer(“Digite un número entero”); //Procesos de Calculos si( n % 2 == 0 ) { tipo= n + “ es par”; } sino{ tipo=n + “ es impar”; } imprimir (tipo); } } Informática 1. Versión 1.3 Enero de 2010 36 .
  • 37. 1.7.3 Estructura Condicional Multiple Esta estructura evalúa una expresión que puede tomar n valores (enteros o caracteres, pero nunca reales ni cadenas) y ejecuta una acción o grupo de acciones diferente en función del valor tomado por la expresión selectora. La sintáxis en la notación algorítmica es la que se muestra a continuación: segun expresión caso valor1: acción 1 break; caso valor2: acción 2 break; ... caso valorN: acción n break; default: acción fin según En seudocódigo orientado a Java, la instrucción según–casos se presenta así: segun( <expresión entera o caracter> ) { caso valor1: // Bloque de instrucciones que se ejecuta si la expresión // toma el valor valor1 break ; caso valor2: // Bloque de instrucciones que se ejecuta si la expresión // toma el valor valor2 break; // . . . . . . caso valorN: // Bloque de instrucciones que se ejecuta si la expresión // toma el valor valorN break; default : // Bloque de instrucciones que se ejecuta si la expresión // NO toma ninguno de los valores arriba indicados break; // Aquí está de sobra… } // Llave de fin de la estructura de decisión múltiple Informática 1. Versión 1.3 Enero de 2010 37 .
  • 38. Notas: 1.- El otro caso o caso por defecto es opcional. Si no se implementa, entonces la estructura no será ejecutada en aquel caso en el que la expresión nunca tome alguno de los valores especificados en los casos. 2.- La instrucción break ; también es opcional. Si no se usa alguna de las instrucciones break; entonces la ejecución continúa hasta encontrar la siguiente instrucción break ; o la llave del fin de la estructura de decisión. En el siguiente ejemplo se proporciona como salida el número de días de un mes dado: segun ( mes ) { // Abre según caso caso 1: caso 3: caso 5: caso 7: caso 8: caso 10: caso 12: imprimir ( “31” ) ; break; caso 4: caso 6: caso 9: caso 11: imprimir ( “30” ) ; break; caso 2: imprimir ( “28” ) ; break; default: imprimir ( “Mes incorrecto” ) ; break; // Aquí está de sobra… } // Termina la ejecución de la estructura de selección múltiple Nota: Observar que es posible agrupar varios casos que conduzcan a la ejecución de un bloque común a ellos. 1.5.4. Estructura condicional – SI anidados si ( <condición 1> ) { // Bloque de instrucciones que se ejecuta si la condición 1 es verdadera. } // Fin del bloque del si para la condición 1 sino{ si( <condición 2> ) { // Bloque de instrucciones que se ejecuta si la condición 2 es verdadera. } // Fin del bloque del si para la condición 2 // . . . sino { si( <condición N> ) { // Bloque de instrucciones que se ejecuta si la condición N es verdadera. } // Fin del bloque del si para la condición N sino { // Bloque por defecto: instrucciones que se ejecutan si ninguna condición // anterior es verdadera } // Fin del bloque por defecto } // Fin del bloque del sino } // Llave de fin de la estructura si anidada Informática 1. Versión 1.3 Enero de 2010 38 .
  • 39. Nota: El último sino ( Bloque por defecto ) es opcional. Si no se implementa, entonces la estructura no será ejecutada en aquel caso en el que todas las condiciones sean falsas. Ejemplo: Algoritmo para la ecuación cuadrática del tipo aX 2 + bX + C = 0 ( a diferente de cero ). Datos de Entrada Proceso Información (con tipos) (con tipos) real solución=“” real a, b, c discr, s1, s2 a = leer (“¿Cuánto vale A?”) cadena b = leer (“¿Cuánto vale B?”) solucion c = leer (“¿Cuánto vale C?”) discr = ( b * b – 4 * a * c ) si discr == 0 s1 = -b / (2 * a) solucion = “Existen dos soluciones iguales, cuyo valor es: “ + s1 sino si discr > 0 s1 = ( -b + raiz(discr) ) / (2 * a) s2 = ( -b - raiz(discr) ) / ( 2 * a) solucion = “Las soluciones son: ”+ s1 + “ y “+ s2 sino solucion = “No hay soluciones en el conjunto de los números reales.” imprimir (solucion) Condiciones Expresiones lógicas: discr == 0 discr > 0 algoritmo EcuacionCuadrática{ principal () { //Declarcion de las variables real a=0, b=0, c=0 ;// Declaración de tres variables del tipo número real ( los 3 coeficientes ). real discr=0; // Declaración de la variable para el discriminante de la ecuación. real s1=0, s2=0; // Declaración de dos variables para las soluciones ( ó raíces ) de la ecuación. cadena solución=“”; imprimir(“Deme los coeficientes y resolveré una ecuación de 2º grado” ); Informática 1. Versión 1.3 Enero de 2010 39 .
  • 40. // Lectura y Asignación de las variables: a=leer(“¿Cuánto vale A?”); b=leer (“¿Cuánto vale B?”); c=leer (“¿Cuánto vale C?”); // Cálculo del discriminante de la ecuación cuadrática: discr = ( b * b – 4 * a * c ) ; // en discr asigne el valor de la expresión entre paréntesis. si( discr == 0 ){ // ‘ == ‘ significa ‘ igual a ‘ s1 = -b / (2 * a) ; // En s1 asigne el valor de la expresión del segundo miembro solución = “Existen dos soluciones iguales, cuyo valor es: “ + s1; } sino{ si( discr > 0 ) { s1 = ( -b + raiz(discr) ) / (2 * a) ;// En s1 asigne el valor de la expresión del segundo //miembro s2 = ( -b - raiz(discr) ) / ( 2 * a) ; // En s2 asigne el valor de la expresión del segundo //miembro solución = “Las soluciones son: ” + s1 + “ y “ + s2; }sino { solución = “No hay soluciones en el conjunto de los números reales.” ; } } imprimir(solucion); } } 1.8 Estructuras de Repetición La estructura repetitiva o iterativa permite, como su propio nombre lo indica, repetir una acción (o grupo de acciones); dicha repetición puede llevarse a cabo un número prefijado de veces o depender de la evaluación de una expresión lógica. Existen tres tipos de estructuras repetitivas: para(ó desde- hasta), mientras y haga-mientras. 1.8.1 Estructura de Repetición para (ó desde-hasta) Esta estructura permite repetir la ejecución de una acción o de un grupo de acciones un número determinado de veces; la sintáxis es la siguiente: Informática 1. Versión 1.3 Enero de 2010 40 .
  • 41. A continuación se muestran algunos ejemplos: para (entero n=1; n < =10; n++){ imprimir (“n = ”+n ); } // Fin del para El ciclo anterior imprime por pantalla los números del 1 al 10. Ahora, preste atención al siguiente Pseudocódigo: para (entero n=10; n < =0; n++){ imprimir (“n =”+n); } //Fin del para El bucle anterior no se ejecuta nunca puesto que, de entrada, la condición n <= 0 (con n inicializado en 10) va a ser falsa, es decir arroja false. ¿Qué ocurriría si, en el ciclo anterior, se cambia de < por > ? para (entero n=10; n >=0; n++){ imprimir (“n =”+n); } //Fin del para El bucle anterior es infinito puesto que la condición n >= 0 (con n inicializado en 10) siempre va a ser verdadera, es decir me arroja true. Si queremos hacer el ejemplo de n <= 0 (con n inicializado en 10), pero con paso – 2, el Pseudocódigo se puede escribir así: para (n=10; n < =0 ; n = n - 2){ imprimir (“n =”+ n); } //Fin del para Este bucle escribe los números pares de 10 a 0 en orden inverso. Ejemplo: Escriba un algoritmo que sume los “N” primeros números enteros. Datos de Entrada Proceso Información (con tipos) (con tipos) REAL suma=0 REAL n suma n = leer(“Ingrese n”) para entero contador = 1; contador <= n;contador++ suma += contador imprimir(“La suma es: ” + suma); Informática 1. Versión 1.3 Enero de 2010 41 .
  • 42. Condiciones Expresion lógica: contador <= n algoritmo Suma { principal () { entero suma=0, n=0; n = leer(“Ingrese n”); para (entero contador = 1; contador <= n ; contador++){ suma += contador; } imprimir(“La suma es: ” + suma); } } Ejemplo: Escriba un algoritmo que calcule el promedio del curso de informática 1, sabiendo que se tienen “N” estudiantes. Datos de Entrada Proceso Información (con tipos) (con tipos) REAL acumula=0 REAL N, nota promedio, n=leer(“Ingrese n”) acumula para entero contador = 1; contador <= n ;contador++ nota = leer(“Ingrese nota: “ + contador + “ : “) acumula += nota promedio = acumula/n imprimir (“Promedio es: ” + promedio) Condiciones Expresion lógica: contador <= n algoritmo Promedio { principal () { entera n=0; Informática 1. Versión 1.3 Enero de 2010 42 .
  • 43. real nota=0.0, promedio=0.0, acumula=0; n=leer(“Ingrese n); para (entero contador = 1; contador <= n ; contador++){ nota = leer(“Ingrese nota: “ + contador + “ : “); acumula += nota; } promedio = acumula/n; imprimir(“Promedio es: ” + promedio); } } 1.8.2 Estructura de Repetición mientras Cuando usamos la estructura mientras: • Cuando sea necesario ejecutar los mismos pasos varias veces y se conoce el número de veces que desea repetirse. • Cuando sea necesario ejecutar los mismos pasos varias veces y NO se conoce el número de veces que desea repetirse. • Si la condición es cierta el cuerpo del ciclo se ejecuta, sino la ejecución del ciclo termina. • Si la condición es inicialmente falsa el ciclo no se ejecuta ni una sola vez. Sintaxis General: mientras ( <expresión lógica> ) acción FIN mientras Informática 1. Versión 1.3 Enero de 2010 43 .
  • 44. A continuación se muestra un ejemplo que solicita al usuario el radio de una circunferencia mientras el radio introducido sea incorrecto: mientras (radio<=0) { //se ejecuta mientras el radio sea mayor que 0 radio = leer(Ingrese el radio); imprimir (“Radio :” +radio); } //Fin del mientras Notar que mientras radio < = 0 el ciclo se ejecuta. Ejemplo: Escriba un algoritmo que lea e imprima todos los nombre de un grupo de estudiantes: Datos de Entrada Proceso Información (con tipos) (con tipos) cadena seguir = ‘S’ cadena nombre nombres=“” nombres caracter seguir mientras (seguir == ‘S’) nombre=leer(“Ingrese Nombre”) nombres+=nombre seguir=leer(“Desea continuar”) Condiciones seguir == ‘S’ algoritmo Nombres { principal () { caracter seguir=‘S’; cadena nombre=“”, nombres=“”; mientras (seguir == ‘S’){ nombre = leer(“Ingrese Nombre”); nombres+=nombre; continuar = leer(“Desea continuar”); } imprimir(nombres); } } Informática 1. Versión 1.3 Enero de 2010 44 .
  • 45. Ejemplo: Escriba un algoritmo que calcule el promedio del curso de informática I. Datos de Entrada Proceso Información (con tipos) (con tipos) real seguir = ‘S’ ENTERA nota cuenta=0 cuenta caracter acumlua=0 REAL seguir promedio, mientras (seguir== “S) acumula cuenta++ nota=leer(“Ingrese nota: “ + cuenta + “ : ”) acumula += nota nota=leer(“Desea Continuar”) promedio = acumula/cuenta; imprimir(“Promedio es: ” + promedio); Condiciones seguir == ‘S’ algoritmo Promedio { principal () { entero cuenta=0; real nota, promedio, acumula; caracter seguir = ‘S’; seguir = leer(“Desea Continuar”); mientras (seguir== ‘S’){ cuenta++; nota=leer(“Ingrese nota: “ + cuenta + “ : “); acumula += nota; seguir=leer(“Desea Continuar”); } promedio = acumula/cuenta; imprimir(“Promedio es: ” + promedio); } } 1.8.3 Estructura de Repetición haga-mientras • Cuando sea necesario ejecutar los mismos pasos varias veces y se conoce el número de veces que desea repetirse. Informática 1. Versión 1.3 Enero de 2010 45 .
  • 46. Cuando sea necesario ejecutar los mismos pasos varias veces y NO se conoce el número de veces que desea repetirse. • Si la condición es cierta el cuerpo del ciclo se ejecuta, sino la ejecución del ciclo termina. • Si la condición es inicialmente falsa el ciclo no se ejecuta ni una sola vez. • Primero ejecuta y luego evalúa la condición de finalización • Usada para validaciones Informática 1. Versión 1.3 Enero de 2010 46 .
  • 47. 1.9 EJERCICIOS RESUELTOS NOTA: se realizara la abstracción SIN APLICAR validaciones con el ciclo haga mientras a todos los ejercicios resueltos, pero UNICAMENTE al primer ejercicio se realizara la abstracción con dicha validacion. Ademas en la parte de pseudocogo si se incluye para TODOS los ejercicios las validaciones con el ciclo haga mientras. Ejercicio 1:- Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere que: area = base x altura, y, perimetro = 2 x (base+altura). Sin validación con el ciclo haga mientras: Datos de Entrada Proceso Información (con tipos) (con tipos) real base=leer (“Digite la medida de la base del rectangulo”) real base, altura area, perimetro altura=leer(“Digite la medida de la altura del rectangulo”) area = base*altura perímetro = 2*(base+altura) imprimir (“Area :” +area) imprimir (“Perimetro:” +perimetro) Con validación con el ciclo haga mientras: Datos de Entrada Proceso Información (con tipos) (con tipos) real haga real base, altura base=imprimir (“Digite la medida de la base del area, perimetro rectangulo”) mientras(base<0) haga altura=imprimir (“Digite la medida de la altura del rectangulo”) mientras(altura<0) area = base*altura perímetro = 2*(base+altura) imprimir (“Area :” +area) imprimir (“Perimetro:” +perimetro) Informática 1. Versión 1.3 Enero de 2010 47 .
  • 48. Condiciones altura<0 base<0 algoritmo Rectangulo { principal () { // Declaración de variables real base=0.0, altura=0.0, area=0.0perímetro=0.0; // Asignación o Lectura de Datos haga{ base=leer (“Digite la medida de la base del rectangulo”); } mientras(base<0); //Se valida el ingreso de datos para la base haga{ altura=leer(“Digite la medida de la altura del rectangulo”); } mientras(altura<0); //Se valida el ingreso de datos para la altura // Proceso de cálculo area = base*altura; perímetro = 2*(base+altura); // Salida de resultados imprimir (“Area :” +area); imprimir (“Perimetro:” +perimetro); } } Ejercicio 2:- Diseñe un pseudocódigo para convertir una longitud dada en metros a sus equivalentes en centímetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centímetros, 1 pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies. Informática 1. Versión 1.3 Enero de 2010 48 .
  • 49. Datos de Entrada Proceso Información (con tipos) (con tipos) real cmetr =leer(“Digite longitud en metros”) real cmetr ccent, cpulg, ccent = cmetr * 100 cpies, cyard cpulg = ccent / 2.54 cpies = cpulg / 12 cyard = cpies / 3 imprimir( "Cantidad equivalente en centimetros: " + ccent + " cm" ) imprimir ( "Cantidad equivalente en pulgadas: " + cpulg + " pulgadas" ) imprimir ( "Cantidad equivalente en pies: " + cpies + " pies" ) imprimir ( "Cantidad equivalente en yardas: " + cyard + " yardas" ) Condiciones cmetr<0 algoritmo Conversiones1{ principal () { // Declaración de variables real cmetr=0.0,ccent=0.0, cpies=0.0, cpulg=0.0, cyard=0.0; // Asignación y lectura de variables haga{ cmetr =leer(“Digite longitud en metros”); } mientras(cmetr<0); //Se valida el ingreso de datos para la cmetr // Proceso de cálculo ccent = cmetr * 100; cpulg = ccent / 2.54; cpies = cpulg / 12; cyard = cpies / 3; // Salida de resultados imprimir ( "Cantidad equivalente en centimetros: " + ccent + " cm" ) ; imprimir ( "Cantidad equivalente en pulgadas: " + cpulg + " pulgadas" ) ; imprimir ( "Cantidad equivalente en pies: " + cpies + " pies" ) ; imprimir ( "Cantidad equivalente en yardas: " + cyard + " yardas" ) ; } } Informática 1. Versión 1.3 Enero de 2010 49 .
  • 50. Ejercicio 3:- Una institución benéfica europea ha recibido tres donaciones en soles, dolares y marcos. La donación será repartida en tres rubros: 70% para la implementación de un centro de salud, 20% para un comedor de niños y el resto para gastos administrativos. Diseñe un algoritmo que determine el monto en euros que le corresponde a cada rubro. Considere que, en la fecha de redactar este ejercicio: 1 dólar = 3.52 soles, 1 dólar = 2.08 marcos, 1 dólar = 1.07 euros. Datos de Entrada Proceso Información (con tipos) (con tipos) real csoles =leer(“Digite cantidad donada en soles”) real csoles, ceuros ,rubro1, cdolares, cdolares =leer(“Digite cantidad donada en dolares”) rubro2, rubro3 cmarcos cmarcos =leer(“Digite cantidad donada en marcos”) ceuros = (csoles / 3.52 + cdolares + cmarcos / 2.08 ) * 1.07 rubro1 = ceuros * 0.70 rubro2 = ceuros * 0.20 rubro3 = ceuros * 0.10 imprimir ("Rubro 1 para salud: $ " + rubro1 + " euros") imprimir ("Rubro 2 para comedor: $ " + rubro2 + " euros") imprimir ("Rubro 3 para gastos de admon: $ " + rubro3 + " euros") Condiciones csoles<0 cdolares<0 cmarcos<0 algoritmo Euros1{ principal () { // Declaración de variables real csoles=0.0, cdolares=0.0, cmarcos=0.0, ceuros=0.0, rubro1=0.0, rubro2=0.0; real rubro3=0.0; //Asignacion y lectura de las variables haga{ csoles =leer(“Digite cantidad donada en soles”); } mientras(csoles<0); //Se valida el ingreso de datos para la csoles haga{ cdolares =leer(“Digite cantidad donada en dolares”); } mientras(cdolares<0); //Se valida el ingreso de datos para la cdolares haga{ Informática 1. Versión 1.3 Enero de 2010 50 .