27

CAPíTULO 1 - Ublog.clervivanco.ublog.cl/archivos/14581/librodelalgoritmojava_pseint.pdf · pseudo-código presentamos en PSeInt el proceso Suma, este ejemplo está disponible en

  • Upload
    vumien

  • View
    234

  • Download
    0

Embed Size (px)

Citation preview

CAPíTULO 1

Enfoques de Programación

Historia

Existen muchas interpretaciones respecto a la historia de la programación, cito a la

historia desde 1700 en adelante para explicar el valor de la automatización del mismo.

Antiguamente las instrucciones lógicas eran un conjunto de valores entre 0 y 1, el cual

lo conocemos como sistema binario, bajo el concepto de ese conjunto de valores se

dio una interpretación física que conocemos como tarjeta perforada, está

representaría dependiendo de su hendidura, abierta o cerrada en la representación

binaria, si bien las primeras tarjetas perforadas fueron usadas por primera vez

alrededor de 1725 por Basile Bouchon y Jean-Baptiste Falcon como una forma más

robusta de los rollos de papel perforados usados en ese entonces para controlar

telares textiles en Francia. Esta técnica fue enormemente mejorada por Joseph Marie

Jacquard en su telar de Jacquard en 1801.

La tarjeta perforada es una cartulina con unas determinaciones al estar perforadas, lo

que supone un código binario. Estos fueron los primeros medios utilizados para

ingresar información e instrucciones a un computador en los años 1960 y 1970.

Las tarjetas perforadas fueron usadas por primera vez Para crear un programa, y que la

computadora interprete y ejecute las instrucciones escritas en él, debe usarse un

lenguaje de programación.

En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje

específico, del más bajo nivel, conocido como código máquina, siendo éste

excesivamente complicado para programar. De hecho sólo consiste en cadenas de

números 1 y 0 (sistema binario).

Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el

área decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras

o letras provenientes del inglés; las codificaron y crearon así un lenguaje de mayor

nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar

se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje

ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las

letras y palabras son bastante más fáciles de recordar y entender que secuencias de

números binarios, teniendo en cuenta que la mayoría de los intérpretes creaban más

1

instrucciones del lenguaje de máquinas, para abarcar todas las posibilidades que se

podían interpretar del lenguaje.

A medida que la complejidad de las tareas que realizaban las computadoras

aumentaba, se hizo necesario disponer de un método sencillo para programar.

Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial

como multiplicar dos números puede necesitar un conjunto de instrucciones en

lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una, esto facilito

la distribución del lenguaje para la interpretación de las tareas comunes, a la

semántica algorítmica creando un conjunto de instrucciones secuenciales, cumplieran

un propósito procedural o funcional.

Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje

de alto nivel, es necesario compilarlo, es decir, traducirlo a lenguaje máquina.

Bajo este concepto entonces ya teniendo claro que la lógica de cómo crear ese

lenguaje de máquinas está resuelto, entonces se toma en cuenta que la manera de

dirigir la lógica hacia un resultado o meta, para ello se plantean diferentes enfoques

que sirven para diferentes propósitos de solución, sin más veamos el primero a

representar.

El Algoritmo

En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo

(del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi)

es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas

que permite realizar una actividad mediante pasos sucesivos que no generen dudas a

quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo

los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos

son el objeto de estudio de la algoritmia.

En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas.

Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un

aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos

ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos

números, el algoritmo de Euclides para obtener el máximo común divisor de dos

enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.

En particular estos algoritmos resolverían un problema en particular o llegar a una

meta, simplemente la primera formulación de la meta es un parámetro importante,

que debemos plantear de un comienzo, entendiendo que la meta llevará establecer

todos los pasos y las operaciones y/o expresiones que tendrán que ocurrir para llegar a

esa meta, entonces algoritmo clásico a plantear mesclando la lógica matemática es la

“suma”

Suma = sumando + sumando

Algoritmo para resolver una suma dependiendo de entrada y salida.

Algoritmo Sumar

Ingresar primer sumando

Ingresar segundo sumando

Calcular la suma

Mostrar la suma

Si bien la suma es una operación diremos que esto es un proceso algorítmico, que

contiene los pasos de ingresar primer sumando, ingresar segundo sumando, calcular la

suma, cuyo resultado y propósito final es mostrar la suma.

Estos pasos para llegar a nuestra meta se hacen posible en estricto rigor, al orden de

los pasos planteados, si bien estos son secuenciales hacen que la lógica aplicada sea

ocupada de manera intuitiva, también está más adelante puede tener bifurcaciones

lógicas, decisiones, repeticiones y casos particulares que pueden representarse

algorítmicamente.

Programación Estructurada

De acuerdo a la programación de estos lenguajes de alto nivel, surgió la necesidad de

establecer ciertas reglas y/o convenciones para llegar a un orden de cómo programar,

entonces este conjunto de instrucciones fueron enfocadas a dar mejor claridad,

calidad y tiempo de desarrollo, para ello se define todas las soluciones utilizando

únicamente subrutinas, con tres estructuras: secuencia como conjunto de pasos de

programación, selección (If, switch) como una bifurcación a la secuencia, de acuerdo a

una condición lógica a cumplir hacer un conjunto de pasos de programación o en caso

contrario y no cumpla la condición lógica un conjunto de pasos programación,

iteración como un conjunto de pasos de programación que se repitan una cierta

cantidad de veces de acuerdo a una condición lógica, dado que este tipo de

programación posee un alto grado de rigidez entonces se omiten los saltos de pasos

sin condición como los es GOTO (Traducción Literal “Ir a”), esto fue reforzado por una

famosa carta que la sentencia goto era considerada perjudicial, de Edsger Dijkstra en

1968.

Programación Orientada a Objetos

La necesidad de representación de diferentes niveles de abstracción y

comportamientos, llevó a crear un nuevo paradigma llamado programación orientada

a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación

que usa los objetos en sus interacciones, para diseñar aplicaciones y programas

informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión,

abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a

principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes

de programación que soportan la orientación a objetos.

Desde el punto de vista de la programación, programación estructurada y

programación orientada a objetos están estrechamente relacionadas, en un orden de

abstracción y pertenencia la programación orientada a objetos, contiene en sus

comportamientos la programación estructurada.

Programación Orientada a Objetos

Atributos

Programación Estructurada

incluida en el método

Método Método

CAPíTULO 2

Introducción a la programación

Estructurada

Para aprender a programar utilizaremos un lenguaje común de seudocódigo en este

caso será el programa PSeInt, el cual servirá para poner en practica la creación de

soluciones estructuradas para diferentes problemas dentro de este paradigma de

programación.

Instalación de PseInt

Para instalar la ultima versión de pseint debe ir a la siguiente URL

http://pseint.sourceforge.net/ en la sección descargas encontrarás para diferentes

sistemas operativos.

La instalación en Windows es muy simple clic en el

instalador para Windows, descargará la en este caso

es pseint-w32-20121208.exe que es la última versión

del 8 de diciembre del 2012.

2

Con esto estaría instalado PSeInt la última versión, se debe tener en cuenta que esta

aplicación utiliza JAVA, por lo tanto es uno de los prerrequisitos antes de instalarlo.

El Pseudo-código

El pseudo-código es una convención en ciencias de la computación, y análisis numérico

el pseudocódigo (o falso lenguaje), es una descripción informal de alto nivel de un

algoritmo informático de programación, compacto e informal, que utiliza las

convenciones estructurales de un lenguaje de programación real, pero que está

diseñado para la lectura humana en lugar de la lectura mediante máquina, y con

independencia de cualquier otro lenguaje de programación. Esta convención facilita el

aprendizaje e internalización de la lógica aplicada a la programación. Normalmente, el

pseudocódigo omite detalles que no son esenciales para la comprensión humana del

algoritmo, tales como declaraciones de variables, código específico del sistema y

algunas subrutinas, pero en este punto nosotros tendremos una diferencia ya que el

enfoque de este libro, es dar una coherencia entre este pseudo-código y un lenguaje

de programación real como lo es JAVA, para relacionar ambos lenguajes en sintaxis y

semántica.

Se utiliza comúnmente en los libros de texto y publicaciones científicas que se

documentan varios algoritmos, y también en la planificación del desarrollo de

programas informáticos, para esbozar la estructura del programa antes de realizar la

efectiva codificación.

En esta edición se tomará las características del pseudolenguaje que fueron

propuestas en 2001, por el responsable de la asignatura de fundamentos de

programación (Horacio Loyarte) en la carrera de ingeniería en informática de la FICH-

UNL, en donde las premisas que se ocuparán son:

• Sintaxis sencilla

• Manejo de las estructuras básicas de control

• Solo 3 tipos de datos básicos: numérico, carácter/cadenas de caracteres y

lógico (verdadero-falso)

• Estructuras de datos: arreglos

Forma general de un Algoritmo

El algoritmo en pseudocódigo de esta convención tiene la siguiente estructura general:

Proceso NombreProceso

accion 1;

accion 2;

.

.

.

accion n;

Fin Proceso

Si bien esta es la convención en donde comienza un proceso siguiendo la misma

estructura de pasos de un algoritmo, esto también permite el uso planteado de la

programación estructurada secuencia, selección e iteración, omitiendo como

convención el uso de saltos de paso (GOTO).

Respecto a su estructura comienza con la palabra clave Proceso seguida por el nombre

del programa, en este caso el programa definirá la meta a conseguir, que por

generalidad lo llamaremos el verbo a conseguir (vc), después de la palabra clave

proceso, sigue una secuencias de instrucciones que definirá todos verbo adjetivo (va),

estos harán que nuestro meta se cumpla, después de estas instrucciones termina este

proceso con la palabra clave FinProceso. Se establece como convención de termino de

instrucción el punto y coma “;”.

Cada acción puede ser una entrada y salida, asignación de variables, selección si-

entonces o selección multiple, iteraciones con mientras, repetir o para.

Para ejemplificar con un algoritmo simple, representado por esta convención de

pseudo-código presentamos en PSeInt el proceso Suma, este ejemplo está disponible

en la ayuda de PSeInt

Siguiendo la semántica de la forma general del algoritmo, este pseudo-código

presenta, la palabra clave Proceso Suma representa nuestra meta del proceso, para

ello se ocupa una salida (Escribir “Ingrese el primer numero:”), que mostrará a nuestro

usuario o cliente un mensaje de lo que debe hacer, luego tenemos una entrada (Leer

A), que produce que el proceso espere al usuario que escriba el valor por teclado, que

asignará a la variable A, luego siguiendo la misma lógica de mostrar al usuario lo que

debe escribir, esperar que introduzcan por teclado el valor de una variable, siguen las

instrucciones de salida (Escribir “Ingrese el segundo numero:”) y la entrada (Leer B),

luego viene una expresión que calcula la suma a través de una asignación (C <- A+B),

esto se lee de derecha a izquierda sumar A con B, luego el resultado de esta suma

asignarlo a la variable C, por último una salida para mostrar el resultado de esta

operación (Escribir “El resultado es: “, C).

Ejercicio Resuelto

1.- Cuadrado

Escriba un programa que reciba como entrada un lado del cuadrado y entregue como

salida el área y el perímetro:

Ingrese un lado del cuadrado: 3

Area: 9

Perimetro: 12

Ir a Inicio, Programas, PSeInt

Al abrir PSeInt aparecerá el proceso por defecto sin_titulo eligen guardar con el

nombre 01_cuadrado.

Notar que cambio la pestaña superior a 01_cuadrado.psc, la extensión psc es la que

guardar los algoritmos hechos por PSeInt.

Cambiar el nombre del proceso de sin_titulo a cuadrado.

Para plantear el algoritmo de cuadrado primero identificamos nuestra meta a

conseguir de acuerdo a pasos algorítmicos,

i. Mostramos al usuario “Ingrese un lado del cuadrado: ”

ii. Solicitamos una entrada por teclado del lado

iii. Calculamos el área del lado con la siguiente expresión: area = lado*lado;

iv. Calculamos el perímetro del lado con la siguiente expresión: perimetro =

4*lado;

v. Mostramos al usuario “Area: “ + area, esto es una concatenación de 2

resultados, el primero es la cadena de caracteres “Area: “ y luego el valor

almacenado en la variable area es agregado después de “Area :”, teniendo

como resultado ambos valores unidos.

vi. Mostramos al usuario “Perimetro: “ + perimetro

Una vez planteado el algoritmo secuencial, se procede a escribir esto en pseudo-

código

Mostramos al usuario “Ingrese un lado del cuadrado: ”

Solicitamos una entrada por teclado del lado

Para ver si esto funciona correctamente pueden ejecutar este algoritmo con

Notarán que las 2 instrucciones escritas podrán probarlas.

Continuamos con nuestro algoritmo.

Calculamos el área del lado con la siguiente expresión: area = lado*lado;

Notarán que area es una variable que recibe el resultado de multiplicar lado*lado, a

esto se le llama asignación.

Calculamos el perímetro del lado con la siguiente expresión: perimetro = 4*lado;

Mostramos al usuario “Area: “ + area

Mostramos al usuario “Perimetro: “ + perímetro

Ejecutamos este algoritmo completo de acuerdo a la situación planteada en el

ejercicio, para comprobar si los resultados son los esperados.

Si notamos existe un ligera diferencia entre la situación planteada y el resultado final,

cuando mostramos al usuario “Ingrese un lado del cuadrado: “, notamos que al leer

pasa a la siguiente línea. Para poder representar horizontalmente el resultado se debe

cambiar la palabra reservada Escribir por Escribir sin saltar.

El resultado entonces es el esperado de acuerdo a lo que se especificó.

Ejecutar Paso a Paso

Para aprender a programar es importante tener en cuenta el avance secuencial, esté

de acuerdo a lo esperado, para eso los diferentes lenguajes de programación proveen

herramientas de depuración, que servirán para saber los pasos que ha hecho el

programa y los valores de las variables que contienen, de esta manera se establecerá

la coherencia de los resultados a través de las pruebas realizadas.

En PSeInt se ejecutan paso a paso las instrucciones de tu algoritmo con el siguiente

icono:

Este símbolo significa ejecutar paso a paso, también tiene una tecla de acceso

rápido F5.

Existe otra forma de ver como se ejecuta paso a paso las instrucciones de nuestro

algoritmo.

En borde derecho superior al hacer clic se expandirá un panel en donde tendrá los

botones:

• Comenzar

• Continuar

• Primer Paso

• Prueba de Escritorio

• Evaluar

Primero presionar el botón comenzar esto nos dará las opciones:

• Finalizar

• Pausar

La opción continuar es equivalente a ejecutar paso a paso.

Ahora existe una funcionalidad novedosa que es para saber el valor de cada variable

esto es a través de la prueba de escritorio, Sabiendo cuales son las variables que se

ocuparán dentro del algoritmo se puede saber instrucción a instrucción cuales son los

valores que adquieren.

Iniciaremos una prueba y agregaremos cada variable a esta prueba instrucción a

instrucción, y ver qué valores adquiere para finalmente ver el resultado en pantalla.

Configurar las variables que serán visualizadas paso a paso

Clic en Prueba de Esc.

Agregar las variables del algoritmo cuadrado area, lado, perímetro.

Hacer clic en realizar seguimiento y clic en aceptar.

Hacer clic en primer paso, esto permitirá detenerse en la instrucción 1.

Hacer clic en Avanzar un Paso, esto avanzará hasta la instrucción 2, hay que tener en

cuenta que al avanzar un paso se ejecutará la instrucción, en nuestro primer caso al

pasar por la instrucción 1 no se vio reflejado ningún cambio.

Hacer clic Avanzar un Paso, al pasar de la instrucción 2 a la instrucción 3 se ve reflejado

un cambio en el programa, debido a que se ejecuto un Escribir Sin Saltar (Notar que las

variables aun no sufren ningún cambio).

Hacer clic en Avanzar un Paso, notar que se han deshabilitado opciones de botones en

el Paso, existían Finalizar, Continuar, Avanzar un Paso y Evaluar, ahora solamente está

finalizar, esto se debe a que la instrucción leer detiene la ejecución del programa,

hasta que ingresen por teclado un valor a la variable lado por la instrucción Leer.

Al ingresar el valor vuelven las opciones de botón se vuelven a mostrar: continuar,

avanzar un paso y evaluar, y avanza a la siguiente instrucción 4.

En la prueba de escritorio notar que la variable lado cambio del valor 0 al valor 3.

Hacer clic en avanzar un paso, al pasar de la instrucción 4 a la instrucción 5 se realiza se

evalúa la expresión lado * lado, la cual da como resultado 3*3=9, luego de tener esta

expresión evaluada se asigna a la variable area el valor resultante 9.

En la prueba de escritorio la variable area cambio del valor 0 al 9.

Hacer clic en avanzar un paso, al pasar de la instrucción 5 a la instrucción 6, se evalúa

la expresión 4*lado, la cual da el resultado de 4 * 3 = 12, luego de tener esta expresión

evaluada el valor 12 de este resultado se asigna a la variable perimetro.

Hacer clic en avanzar un paso, al pasar de la instrucción 6 a la instrucción 7, la

expresión (“Area: “, area) es evaluada, primero la variable area se traduce a su valor

que es 9, luego la cadena de caracteres “Area : “ es unida al valor 9, formando una

nueva cadena “Area : 9”, esta nueva cadena es pasada como argumento a Escribir

mostrándolo en pantalla como salida.

Hacer clic en avanzar un paso, al pasar de la instrucción 7 a la instrucción 8, la

expresión (“Perimetro: “, perimetro) es evaluada, primero la variable perimetro se

traduce a su valor que es 12, luego la cadena de caracteres “Perimetro : “ es unida al

valor 12, formando una nueva cadena “Perimetro : 12”, esta nueva cadena es pasada

como argumento a Escribir mostrándolo en pantalla como salida.

Hacer clic en avanzar un paso, al pasar de la instrucción 8 a la instrucción 9, termina la

ejecución del programa.

Si bien una ejecución paso a paso no es el comportamiento real del programa, esto nos

dará claros indicios si el programa hace lo que debe hacer, como regla general cuando

nos enfrentamos a una situación en donde la programación depende de ciertas

secuencias esperadas, los resultados de la evaluación lógica serán un factor clave de

éxito para nuestra meta a obtener.

Diagrama de Flujo

Otra forma de ver este algoritmo es la representación gráfica dibujado como diagrama

de flujo.

Este símbolo permitirá leer tu algoritmo y representarlo de acuerdo al flujo de

eventos que ocurran secuencialmente.

La simbología es la siguiente:

Proceso y FinProceso.

Asignación, Dimensión, Definición, Salida sin variables

Entrada por teclado

Salida con variables

Si – Entonces

Según

Mientras

Repetir Hasta que

Para

a

También para ver el listado de todas las variables existentes

Notamos que las variables son area, lado, perimetro.

Ejercicio Propuesto

2.- Triangulo

Escriba un programa que reciba como entrada la base y la altura de un triángulo y

entregue como salida el área:

Ingrese la base: 2

Ingrese la altura: 4

Area: 4

Algoritmo

i. Mostrar al usuario “Ingrese la base: “ sin saltar línea.

ii. Solicitar una entrada por teclado de la base

iii. Mostrar al usuario “Ingrese la altura: “ sin saltar línea.

iv. Solicitar una entrada por teclado de la altura

v. Calcular el area con la expresión: area = (base * altura)/2

vi. Mostrar al usuario “Area :” + area