Upload
vumien
View
240
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
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