sábado, 13 de abril de 2019

Capítulo 1 - Algoritmos, pseudocódigos y diagramas de flujos

1. Algoritmo

Un algoritmo, en su definición más genérica, es un método para resolver un problema.

Aplicando el concepto al ámbito de la programación, podremos afirmar que un algoritmo es un modelo que representa la lógica de cómo se desarrolla la solución de un problema (que se resolverá luego mediante la elaboración de un programa), sin necesidad aún de codificarlo en un lenguaje de programación. Eso permite a los programadores desarrollar modelos que, luego de probarlos y depurarlos, les permitan obtener el código en un determinado lenguaje de programación de una manera más simple y eficiente.

Características
  • Debe ser preciso indicando la realización de cada paso ordenadamente.
  • Debe estar bien definido, si se sigue un algoritmo más de una vez, los resultados deben ser los mismos.
  • Debe tener un fin; es decir, deberá ser finito.
  • Debe ser independiente a la forma como se implementará en un lenguaje de programación dado.
  • Debe estar documentado con comentarios que permitan su fácil interpretación.
  • Debe ser lo más específico posible dentro del tenor del problema planteado.


2. ¿Qué es un pseudocódigo?


Es un lenguaje intermedio entre nuestro lenguaje y el de programación, debido a que quien lo utiliza se guía por una serie de normas, pero sin llegar a usar una estructura tan rígida como la del lenguaje de programación.

El objetivo al que apunta es que quien lo pone en práctica se centre más en la solución del algoritmo o el diseño de un software que en el programa que utiliza para crearlo. Y esto es posible porque es más fácil de manipular ya que no tiene que tener en mente el lenguaje en sí y además, es más fácil de construir que un programa.

Por ejemplo, si alguien tiene que hacer un software con un fin determinado, utiliza un pseudocódigo propio en donde confluyen frases del lenguaje coloquial y algunas sentencias de programación y una vez que se logra concretar el software, se puede pasar al escalón siguiente que es el de la transformación al lenguaje de programación formal que se vaya a utilizar.

De esta manera, al ser un lenguaje intermedio, no tiene una sintaxis determinada por lo que no todos los programadores utilizan la misma sintaxis con exactitud. Pero a la vez, como es una herramienta que está un paso previo al lenguaje formal de programación es fácil de transformar al que será ejecutado en la computadora

2.1 Partes de un pseudocódigo

Por lo general, los pseudocódigos se pueden componer de las siguientes partes:
  • Declaración de variables: Sección donde se declaran las variables y tipos de datos necesarios para el ingreso de datos.
  • Ingreso de datos: Sección donde se leen los datos de entrada almacenándolos en variables, sin los cuales no se puede efectuar el proceso.
  • Proceso: Parte donde se realizan los cálculos dependiendo de las reglas de negocio del problema.
  • Impresión de resultados: Parte final del pseudocódigo que es donde se muestran los resultados de los procesos y cálculos realizados.

Ejemplo
A continuación, se muestra el pseudocódigo para obtener el promedio de un alumno en base a 3 notas.

Inicio
Declarar intNota1
Declarar IntNota2
Declarar intNota3
Declarar floatPromedio
Leer intNota1
Leer intNota2
Leer intNota3
floatPromedio= (intNota1+intNota2+intNota3)/3
Escribir sngpromedio
Fin

3. Algoritmo representado por el diagrama de flujo


Los diagramas de flujo, al igual que el pseudocódigo, permiten elaborar algoritmos, pero en este caso, de manera gráfica en base a una simbología previamente definida. Cada tipo de acción (lectura, escritura, condiciones, bucles, etc.) tiene su propia simbología y manera de representarse.

Es en sí, un diagrama que representa el flujo lógico secuencial de la lógica para resolver un problema, que, si no presenta incoherencias, puede ser fácilmente codificado en un determinado lenguaje de programación.


Los diagramas de flujo, al igual que el pseudocódigo, permiten elaborar algoritmos, pero en este caso, de manera gráfica en base a una simbología previamente definida. Cada tipo de acción (lectura, escritura, condiciones, bucles, etc.) tiene su propia simbología y manera de representarse.

Es en sí, un diagrama que representa el flujo lógico secuencial de la lógica para resolver un problema, que, si no presenta incoherencias, puede ser fácilmente codificado en un determinado lenguaje de programación.


4. Input / Output


El ingreso de datos es importante para que la computadora realice los cálculos; esta operación es la entrada; luego, estos datos se convertirán en resultados y estos serán la salida.

A la entrada se le conoce como operación de Lectura (read). Esta operación se realiza a través de los dispositivos de entrada que son teclado, unidades de disco, CD-Rom y otros. La operación de salida se realiza por medio de dispositivos como monitor, impresora y otros, a esta operación se le conoce
como escritura (write).

Para las aplicaciones Web, normalmente el cliente ingresa o selecciona datos que envía al servidor mediante un formulario, conociéndose a esto como el input y el servidor recibe estos datos que después de procesarlos responde al cliente con una nueva página según solicitud del cliente, siendo esto la salida.

5. Los operadores aritméticos


Existe una gran variedad de operadores en Java con los que podemos procesar nuestros datos, así tenemos las siguientes categorías de operadores:

  • Aritméticos + - * / % ++ --
  • Lógicos && || ! ^
  • Relacionales == != < > <= >=
  • Bits & | ^~
  • Asignación = += -= *= /= %=
  • Ternario ? :


5.1 Aritméticos


  • + Adición
  • - Sustracción
  • * Multiplicación
  • / División
  • % Módulo. Toma el residuo de una división de enteros.
  • ++ Se incrementa en uno
  • -- Decremento en uno. Contrario al anterior.

5.2 Lógicos


5.3 Relacionales


  • == Igual que
  • != Diferente que.
  • < Menor que
  • <= Menor o igual que
  • > Mayor que
  • >= Mayor o igual que

5.4 Bits


&
A & B Operación AND a nivel de bits. Si ambos bits
comparados son 1, establece el resultado en 1. De lo
contrario, da como resultado 0.

|
A | B Operación OR a nivel de bits. Si por lo menos uno de
los dos bits comparados es 1, establece el resultado en 1.
De lo contrario, da como resultado 0.

^
A ^ B Operación XOR a nivel de bits. Si uno de los bits
comparados es 0 y el otro 1, el resultado es 1. Si ambos
bits comparados son iguales, el resultado es 0.

~
~A Complemento de A, a nivel de bits. Solo invierte los
bits, es decir, convierte los ceros en unos y viceversa.


5.5 Asignación

  • = Asigna un valor
  • += Compacta una adición
  • -= Compacta una sustracción
  • *=Compacta un producto
  • /= Compacta una división
  • %= Compacta el módulo

5.6 Ternario


? :
Tiene tres operandos, cada uno de los cuales es una expresión; se ordena de la siguiente forma:
expresión1 ? expresión2 : expresión3

El valor de la expresión completa equivale al de la expresión2 si la expresión1 es verdad, o al valor de la expresión3 en caso contrario.


6. Uso de variables en la programación de aplicaciones


Una variable es un espacio de memoria en el que podemos almacenar un valor o dato. En una variable podemos cambiar de valores durante la ejecución del algoritmo, es decir, una variable puede haber almacenado “n” valores distintos, pero del mismo tipo; es decir, si la variable es entera, podemos guardar en ella valores enteros, lo mismo sería para cadenas u otros tipos de datos.

Para poder manejar variables de manera correcta, primero debe declararlas y luego, asignarles un valor. 

Por ejemplo, observe lo siguiente: Declarar int x;
x = 50;

En el ejemplo anterior, declaramos la variable entera x y luego asignamos en ella, el valor 50. En las siguientes líneas, podemos asignar otros valores si queremos, por eso se llama variable.

6.1 Las constantes


Una constante es todo lo contrario a una variable. Es un espacio de memoria que una vez asignado su tipo de dato y su valor, este ya no se puede modificar durante la ejecución del algoritmo.

Si queremos declarar una constante cuyo valor nunca podrá ser modificado, esta debe ser inicializada en el momento de su definición utilizando la palabra reservada final.

Generalmente, utilizamos variables finales combinadas con la palabra reservada static para crear constantes que son variables fijas, es decir que nunca cambiarán de valor.

Por convención, los nombres de las variables estáticas se definen en mayúsculas. Si el nombre está formado por más de una palabra, las palabras se separan por un carácter de subrayado.

6.2 Tipo de datos primitivos en Java


En Java tenemos diferentes tipos de datos y para ello, tenemos el siguiente cuadro de valores primitivos:


El cuadro muestra los tipos de datos y los rangos de valores que en ellos debemos considerar.

Para asignar cadenas, Java utiliza objetos que revisaremos en capítulos posteriores. Ejemplo: La clase String.










No hay comentarios:

Publicar un comentario