Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Docente
Módulo I: Introducción
a la programación
Módulo I. Introducción a la Programación
Introducción
El capítulo introduce los fundamentos teóricos necesarios para comprender la forma en la que los desarrolladores
de software resuelven problemas cotidianos a través de algoritmos que luego son transformados en programas
de computadora empleando un lenguaje específico.
1.1 Definición
1.1.1. Algoritmo
La definición más elemental de un algoritmo nos dice que es un método para resolver un problema y consta
de: Entrada, Proceso y Salida. Un algoritmo básico de una receta de cocina tiene como entrada:
Ingredientes y utensilios empleados. Como proceso: Elaboración de la receta en la cocina. Como salida:
Terminación del plato (por ejemplo, arroz con pollo).
Este término tiene diversos significados, cada uno de los cuales intenta profundizar en el concepto y su función,
veamos algunos.
• Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base
a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solución o indicar
la falta de esta a un problema en un tiempo determinado.
• Es una serie ordenada de instrucciones, pasos o procesos que llevan a la solución de un determinado
problema. Los hay tan sencillos y cotidianos como seguir la receta del médico, abrir una puerta, lavarse
las manos, etc; hasta los que conducen a la solución de problemas muy complejos.
• Es un sistema por el cual se llega a una solución, teniendo en cuenta que debe de ser definido, finito y
preciso.
• Conjunto de sentencias / instrucciones en lenguaje nativo (natural), los cuales expresan la lógica de un
programa.
• Descripción exacta y precisa de la secuencia de instrucciones en que se ha de realizar un conjunto de
actividades tendientes a resolver un determinado problema, mediante un número finito de pasos.
• Toda receta, proceso, rutina, método, procedimiento, técnica, fórmula que resuelven un determinado
problema.
• Un algoritmo es una técnica de solución de problemas, que consiste en una serie de instrucciones paso
a paso y que produce resultados específicos para un problema determinado [1]
Para diseñar algoritmos hay que tener presente los requisitos/características siguientes siguientes:
Indicar el orden lógico de realización de cada acción (especificidad)
Estar definido sin ambigüedad.
Ser finito.
Ejemplo 1: Pasos para cambiar una bombilla (foco) se pueden expresar en forma de
Algoritmo:
1. Ubicar una escalera o un banco debajo de la bombilla fundida
2. Tomar una bombilla nueva
3. Subir por la escalera o al banco
4. Girar la bombilla fundida hacia la izquierda hasta soltarla
5. Enroscar la bombilla nueva hacia la derecha en el plafón hasta apretarla
6. Bajar de la escalera o del banco
7. Fin
FIG. 2 IMAGEN DEL
Ejemplo 2: Elabore un algoritmo para ver la película “Cuarto de Guerra” ALGORITMO DEL
BOMBILLO
▪ Averiguar por medio de la cartelera (en web o en un periódico) dónde y en qué
horario se exhibe la película.
▪ Estar en la taquilla del cine donde se exhibe un poco antes del horario.
▪ Comprar una entrada y entrar a la sala correspondiente.
▪ Sentarse en la butaca
▪ Ver la película
▪ Salir del cine
Partes de un Algoritmo:
▪ Cabecera de programa: es una acción
que puede iniciar con la palabra
algoritmo/proceso seguido del nombre
asignado. Ejemplo: Algoritmo suma,
Proceso Mayores.
▪ Bloque o cuerpo del algoritmo: Consta
de dos secciones:
La sección de declaración: es donde
se definen o declaran las variables y
constantes (nombre y tipo de dato que Fig 3. Partes de un algoritmo en PSeInt
almacena)
La sección ejecutable: empieza generalmente con la palabra inicio. Aquí se escriben las acciones que
deberá realizar la computadora cuando el algoritmo se convierta a un programa en un lenguaje en particular
y éste sea ejecutado. Básicamente es el proceso que dará solución al problema, puede incluir mensajes
solicitando datos, lectura de valores, asignación de valores, cálculos, impresión de resultados
▪ Fin del algoritmo: todo algoritmo es finito, por ello debe terminar con la palabra fin.
El seudocódigo tiene estructuras sintácticas y semánticas similares a los lenguajes procedurales, aunque menos
formales que las de éstos, por lo que no puede ser ejecutado directamente por un computador.
El pseudocódigo utiliza para representar las sucesivas acciones, palabras reservadas similares a sus homónimas
en los lenguajes de programación, tales como start / inicio, end, stop, if-then-else, while-do, repeat-until,
(inicio, fin, parar, si-entonces sino, mientras-hacer, repetir-hasta), etc.
Nota: para efectos prácticos se usará el lenguaje C incluido en DevC++ para escribir el pseudocódigo, por ser
muy sencillo de aprender a ejemplificar algoritmos. Deberá instalarlo, revisar los manuales y familiarizarse con
la herramienta antes de ir al laboratorio.
Ejemplo 3: Represente mediante pseudocódigo la solución algorítmica para calcular el área de un triángulo.
Algoritmo Área
Variables:
base, altura: entero
area: real
Inicio
Imprimir(“Introduce la medida de la base: ”)
Leer base
Imprimir(“Introduce la medida de la altura: ”)
Leer altura
area = (base * altura) / 2
Imprimir(“El valor del área es: ”)
Fig. 4 Representación de Pseudocódigo en C
Imprimir area
Fin
Ejemplo 4: Desarrolle el diagrama de flujo para el cálculo del área del triángulo.
Algoritmo Área
Variables:
base, altura: entero
area: real
Inicio
Imprimir(“Introduce la medida de la base: ”)
Leer base
Imprimir(“Introduce la medida de la altura: ”)
Leer altura
area = (base * altura) / 2
Imprimir(“El valor del área es: ”)
Imprimir area
Fin
Actividad Individual:
• Elabora un algoritmo para realizar 2 actividades cotidianas (depositar en la cuenta de ahorro, botar la
basura, asistir a la universidad, maquillarte, desmaquillarte, hacer un postre, preparar el almuerzo, bañar
a tu mascota, etc).
• Revise en la red diferentes algoritmos representados a través de pseudocódigo y diagrama de flujo que
resuelvan situaciones como las que se enumeran a continuación.
Calcular el área de figuras geométricas varias.
Determinar el mayor de 2 valores de entrada.
• Está definido como un conjunto de instrucciones, que ejecutarán una tarea determinada mediante
procedimientos lógicos. De esto se deduce que el programa realizará lo que el programador desea.
• Un programa de computadora es un conjunto de sentencias o instrucciones ordenadas en una secuencia
lógica, que se traducen en órdenes dadas a la máquina y que producirán la ejecución de una determinada
tarea.
• Un programa es una secuencia lógica de instrucciones escritas en un determinado lenguaje de
programación, que indica a la computadora las acciones que debe llevar a cabo. En esta definición
encontramos dos elementos: instrucción y secuencia lógica [1].
Una instrucción que es una orden que se le da a la máquina para que ejecute una acción y
que se compone de operador (operación a realizar) y operando (valores en la operación). En la
fig.6 en la instrucción → area = (base * altura) / 2, base y altura son operandos. El signo =, *
y / son operadores
Diferencia entre Algoritmo y Programa: Una diferencia notoria entre un algoritmo y un programa es que el
algoritmo incorpora las características estructurales básicas de la computación, independientemente de los
detalles de su implementación; mientras que un programa tiene un conjunto específico de detalles para resolver
un problema, como por ejemplo: un lenguaje y su sintaxis, el entorno de desarrollo integrado, entre otros.
• ¿Lenguaje de Programación?
Conjunto de símbolos, vocablos, reglas sintácticas y estándares que emplean los desarrolladores para escribir
programas de computador (software), que puedan ser entendidos por él.
El sistema para describir (“escribir”) un algoritmo consiste en realizar una descripción paso a paso con un
lenguaje natural del citado algoritmo. Recordemos que un algoritmo es un método o conjunto de reglas para
solucionar un problema. Estas reglas tienen las siguientes propiedades:
• Deben ir seguidas de alguna secuencia definida de pasos hasta que se obtenga un resultado coherente.
• Sólo puede ejecutarse una operación a la vez.
• Debe mantener la indentación (sangría).
El flujo de control usual de un algoritmo es secuencial; consideremos el algoritmo que responde a la pregunta:
La respuesta es muy sencilla y puede ser descrita en forma de algoritmo general de la siguiente manera:
Éstas incluyen los conceptos importantes de selección (expresadas por si-entonces-si_no, if-then-else) y de
repetición (expresadas con mientras-hacer o a veces repetir-hasta e iterar-fin_iterar, en inglés, whiledo y repeat-
until) que se encuentran en casi todos los algoritmos, especialmente en los de proceso de datos. La capacidad de
decisión permite seleccionar alternativas de acciones a seguir o bien la repetición una y otra vez de operaciones
básicas.
2. Otro aspecto a considerar es el método elegido para describir los algoritmos, empleando indentación
(sangrado o justificación) al escribir. La indentación facilita la comprensión del algoritmo al momento de
leer la secuencia de instrucciones o las acciones interiores a las estructuras fundamentales citadas: selectivas
y repetitivas. Por lo tanto la indentación o sangrado de los algoritmos será obligatoria para la escritura
de los algoritmos del curso.
Un paradigma de programación representa un conjunto de métodos sistemáticos aplicables en todos los niveles
del diseño de programas.
Es una manera técnica y filosófica de crear código, en la mayoría de casos son creadas por la comunidad de
Desarrolladores de Software, que al dar un resultado y llenar esa demanda que pide el mercado es adoptada como
un estándar de trabajo en la Programación.
Cada Paradigma puede tener diferentes conceptos y formas de abstracción de los elementos que componen un
proyecto. El Paradigma que se usa en la actualidad es el de la Programación Orientada a Objetos (POO) que
funciona mediante la integración de datos que se procesan en una entidad que se llama objeto. Bajo este
paradigma de trabajará en cursos posteriores, empleando Java como lenguaje de programación
Es decir, cada sentencia o instrucción señala al compilador para que realice alguna tarea: obtener una entrada,
producir una salida, por ejemplo: sumar tres números, dividir por cinco, etc.
Para resolver este problema, los programas se descompusieron en unidades más pequeñas que adoptaron el
nombre de funciones (procedimientos, subprogramas o subrutinas). Cada una de estas funciones o
componentes agrupa la lista de sentencias o instrucciones a ejecutar. De este modo en un programa orientado a
procedimientos se divide en funciones, de modo que cada función tiene un propósito bien definido y resuelve
una tarea concreta, y se diseña una interfaz claramente definida (el prototipo o cabecera de la función) para su
comunicación con otras funciones.
Esta característica hace que a medida que los programas se hacen más grandes y complejos, el paradigma
estructurado comienza a dar señales de debilidad y resultando muy difícil terminar los programas de un modo
eficiente.
Existen varias razones de la debilidad de los programas estructurados para resolver problemas complejos. Tal
vez las dos razones más evidentes son éstas. Primero: las funciones tienen acceso ilimitado a los datos globales.
Segundo: las funciones inconexas y datos, fundamentos del paradigma procedimental proporcionan un modelo
pobre del mundo real.
Otro tipo de datos son los datos globales a los cuales se puede acceder desde cualquier función del programa. Es
decir, dos o más funciones pueden acceder a los mismos datos siempre que estos datos sean globales.
En el mundo físico tratamos con objetos (personas, autos o aviones) y no son como los datos ni como las
funciones. Los objetos complejos del mundo real tienen atributos y comportamiento. Los atributos son
características de los objetos son, por ejemplo: en las personas, su edad, su profesión, su domicilio, etc. El
comportamiento es una acción que ejecutan los objetos del mundo real como respuesta a un determinado
estímulo. El comportamiento, en esencia, es como una función: se llama a una función para hacer algo (visualizar
la nómina de los empleados de una empresa). Por estas razones, ni los datos ni las funciones, por sí mismas,
modelan los objetos del mundo real de un modo eficiente.
La programación orientada a objetos, es tal vez el paradigma de programación más utilizado en el mundo del
desarrollo de software y de la ingeniería de software del siglo XXI, trae un nuevo enfoque a los retos que se
plantean en la programación estructurada cuando los problemas a resolver son complejos.
La programación orientada a objetos (POO) expresa un programa como un conjunto de objetos que intercambian
información entre sí para realizar algo específico.
descubrir e implementar los objetos que juegan un rol en el dominio del problema y en consecuencia en
el programa. Ejemplo de objetos que pueden usarse en un programa en POO: estudiante, universidad,
empleado, clientes, proveedores, entre otros.
✓ Clases: define qué datos se utilizan para representar un objeto y las operaciones que se pueden ejecutar
sobre esos datos. Cada clase tiene sus propias características y comportamiento; en general, una clase
define los datos que se utilizan y las operaciones que se pueden ejecutar sobre esos datos. Una clase
describe un objeto.
En POO los objetos son miembros de clases, y ésta es un tipo de dato que contiene datos y funciones.
Una clase contiene muchos objetos y es preciso definirla. Una clase es una descripción de un número de
objetos similares.
Por definición todos los objetos de una clase comparten los mismos atributos (datos) y las mismas
operaciones (métodos). Una clase encapsula las abstracciones de datos y operaciones necesarias para
describir una entidad u objeto del mundo real.
✓ Abstracción: significa centrarse en qué es y qué hace un objeto y no en cómo debe implementarse.
Durante el proceso de abstracción es cuando se decide qué características y comportamiento debe tener
el modelo.
✓ Encapsulación: El encapsulado o encapsulación de datos es el proceso de agrupar datos y operaciones
relacionadas bajo la misma unidad de programación. En el caso de los objetos que poseen las mismas
características y comportamiento se agrupan en clases, que no son más que unidades o módulos de
programación que encapsulan datos y operaciones.
✓ Ocultamiento: Capacidad de ocultar los detalles dentro de un objeto.
✓ Herencia: Mecanismo para compartir automáticamente métodos y atributos entre clases y subclases.
✓ Polimorfismo: Característica que permite implementar múltiples formas de un mismo método,
dependiendo cada una de ellas de la clase sobre la que se realice la implementación.
La programación dirigida por eventos (creado en 2013), es un paradigma de programación en el que tanto la
estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema,
definidos por el usuario o que ellos mismos provoquen.
En la programación dirigida por eventos, al comenzar la ejecución del programa se llevarán a cabo las
inicializaciones y demás código inicial y a continuación el programa quedará bloqueado hasta que se produzca
algún evento. Cuando alguno de los eventos esperados por el programa tenga lugar, el programa pasará a ejecutar
el código del correspondiente administrador de evento. Por ejemplo, si el evento consiste en que el usuario ha
hecho clic en el botón de play de un reproductor de películas, se ejecutará el código del administrador de evento,
que será el que haga que la película se muestre por pantalla.
Un ejemplo claro lo tenemos en los sistemas de programación en Visual Basic, en los que a cada elemento del
programa (objetos, controles, etcétera) se le asignan una serie de eventos que generará dicho elemento, como la
pulsación de un botón del ratón sobre el control.
La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse
también para desarrollar interfaces entre componentes de Software.
Para resolver problemas por computadora se requiere de las fases enumeradas a continuación, veamos cada
una de ellas:
1.3.1 Definición del problema: es importante identificar cuál es el problema a resolver, por tanto “problema”
serán aquellas cuestiones conceptuales o prácticas, cuya solución es expresable mediante un algoritmo.
En esta etapa se necesita entender qué se necesita resolver, qué requiero para resolver la situación y qué
información demanda el usuario como respuesta al utilizar el programa. Esto permitirá la resolución de un
problema de manera más sencilla, pues se cuenta con una idea bastante precisa de cómo podemos llegar a esta
solución.
Algunas sugerencias para hacer una definición/comprensión exitosa del problema son:
✓ Leer el problema varias veces
✓ Establecer los datos del problema
✓ Aclarar lo que se va a resolver (¿Cuál es la pregunta?)
✓ Precisar el/los resultado(s) que se desea lograr
✓ Determinar la(s) incógnita(s) del problema
✓ Organizar la información
✓ Agrupar los datos en categorías
✓ Trazar una figura o diagrama.
1.3.2. Análisis y Diseño del Problema: El objetivo del análisis del problema, es ayudar al programador a llegar
a una cierta comprensión de la naturaleza del mismo.
Por lo tanto el análisis necesita una serie de pasos (Ver Fig. 11):
Definir el problema con total precisión.
Especificar los datos de partida necesarios para la resolución del mismo (especificaciones de entrada):
¿Qué datos son necesarios para resolver el problema?
Especificar la información que debe proporcionarse al resolverse (especificaciones de salida): ¿Qué
información debe proporcionar la resolución del problema?
Una vez se cumplan los pasos anteriores se puede hacer un diseño para dar respuesta al problema.
Ejemplo 5: Se desea que usted encuentre el área de un triángulo. ¿Cómo resolvería esta situación bajo el
enfoque de programación?
Fase 1: Descripción del problema:
▪ El algoritmo debe resolver el área de un
triángulo.
▪ Necesito conocer la fórmula específica.
▪ El usuario requiere del cálculo correcto
(impreso / pantalla).
Ejemplo 6: Construir un algoritmo que calcule el promedio de 5 notas y mostrarlo por pantalla al usuario.
¿Cómo resolvería esta situación bajo el enfoque de programación?
Fase 1: Descripción del problema:
▪ El algoritmo debe calcular el promedio de 5 notas de 0 a 100.
▪ Necesito conocer la fórmula para promedio.
▪ El usuario requiere la salida correcta por pantalla.
Algoritmo Promedio:
1. Inicio.
2. Realizar la lectura de las notas.
3. Verificar que cada nota esté entre 0 y 100 Fig 14. Diagrama de Flujo para
Promedio de 5 notas
4. Si las notas están entre 0 y 100 entonces
a. Sumar las 5 calificaciones
b. Aplicar la fórmula de promedio
c. Imprimir el resultado por pantalla.
5. Si no (rango incorrecto)
a. Enviar mensaje de error
6. Fin del algoritmo
1.3.3 Programación: es una fase de resolución práctica del problema con el computador. Esta fase se
descompone en las siguientes subfases: algoritmo, prueba de escritorio, codificación, compilación/ejecución,
documentación. Veamos brevemente cada una.
1.3.3.1 Algoritmo: especifica un conjunto de instrucciones capaz de obtener datos de salida correctos, a partir
de datos válidos de entrada. Recordar que según su definición, un algoritmo debe describir tres partes:
Entrada, Proceso y Salida.
Algoritmo Promedio:
1. Inicio.
2. Realizar la lectura de las notas.
3. Verificar que cada nota esté entre 0 y 100
4. Si las notas están entre 0 y 100 entonces
a. Sumar las 5 calificaciones
b. Aplicar la fórmula de promedio
c. Imprimir el resultado por pantalla.
5. Si no (rango incorrecto)
a. Enviar mensaje de error
6. Fin del algoritmo
Ejemplo 7: Desarrolle la prueba de escritorio para el cálculo del área del triángulo.
Prueba de Escritorio para Algoritmo Área de
Algoritmo Área Triángulo
Entrada Proceso Salida
Variables:
base altura area
base, altura: entero
area: real 10 5 (10*5)/2 25
-10 5 (-10*5)/2 -25
Inicio 10 -5 (10*-5)/2 -25
Imprimir(“Introduce la medida de la base: ”) -10 -5 (-10*-5)/2 25
Leer base
Imprimir(“Introduce la medida de la altura: ”)
Leer altura
Como puede observarse, el algoritmo genera
area = (base * altura) / 2 respuestas correctas si las entradas son válidas
Imprimir(“El valor del área es: ”) (positivas), pero si el usuario ingresa valores
Imprimir area no válidos o negativos, el algoritmo sigue
Fin
generando respuesta incorrecta (no hay área
negativa); inclusive cuando en la última línea
el resultado es correcto, se debió validar que ambas entradas eran incorrectas.
La prueba de escritorio indica que al algoritmo hay que realizarse correcciones.
1.3.3.3 Codificación: Cuando ya se ha diseñado completamente el algoritmo, se tiene escrito en algún esquema
de representación (pseudo-código o diagrama de flujo), el siguiente paso es codificarlo en el lenguaje de
programación definido para tal fin. En este momento es cuando el programador interactúa con el computador
mediante el lenguaje seleccionado (Visual Basic.Net, C#, C++, Java, PHP, Phyton, otros).
Ejemplo 8: A continuación se muestra la codificación del problema para calcular el área de un triángulo en
PSeInt y Lenguaje C.
Solución por Algoritmo
Algoritmo Área
Variables:
base, altura: entero
area: real
Inicio
Imprimir(“Introduce la medida de la base: ”)
Leer base
Imprimir(“Introduce la medida de la altura: ”)
Leer altura
area = (base * altura) / 2
Imprimir(“El valor del área es: ”)
Imprimir area
Fin
Solución en PSeInt Solución en Lenguaje C
1.3.3.4 Compilación/Ejecución: Un programa escrito en un lenguaje de alto nivel (C, Visual Basic.Net, C#,
C++, etc) se conoce como programa fuente y no puede ser ejecutado directamente por un ordenador, sino que
debe ser traducido primero a lenguaje máquina.
Compilación es el proceso de traducir el programa fuente a lenguaje de máquina, llamado código objeto (cuya
extensión suele ser .obj); si el código está libre de errores de compilación, el código objeto se une al
código compilado de las librerías y módulos invocados por el código fuente y se genera un archivo ejecutable
(extensión .exe en Windows)
Proceso de Ejecución: fase de la programación mediante la cual se generan los resultados. Esta primera
ejecución es incierta, ya que existe una alta posibilidad de que aparezcan errores, ya sea en la codificación o en
la lógica del algoritmo.
En la ejecución se carga el programa con extensión .exe en el propio entorno de ejecución, y luego el archivo
ejecutable se lanza en el Sistemas Operativo.
Se inicia entonces la ejecución de las instrucciones por la CPU, ya que el procesador accede al código máquina
del programa ya convertido y ejecuta las acciones. Es aquí cuando vemos los resultados.
Errores de compilación o de sintaxis: se producen en tiempo de compilación y se deben al mal uso de las reglas
del lenguaje de programación en cuanto a su sintaxis (violaciones a las reglas de sintaxis). Ejemplo: no terminar
una sentencia con punto y coma (;), escribir prit en lugar de printf y otros.
Si existe un error de sintaxis, la computadora no puede comprender la instrucción y no puede generarse el
programa objeto. El programa despliega una lista de errores encontrados.
[1]Barraza, O., Krol, F., Velásquez, M. y Meléndez, L. Introducción a la Programación Orientada a Objetos
[2]Juan Carlos Lopez García. Algoritmos y Programación – Guía para Docentes.
[3]Samperio Monroy Theira Irasema. Antología “Programación Estructurada”. Diciembre2006
[4]Cairó Olvaldo, Metodología de la programación (algoritmos, diagramas de flujo y programas), Editorial
Alfaomega, Segunda edición.
[5]Joyanes Aguilar Luís, Fundamentos de programación (Algoritmos, estructuras de datos y objetos), Editorial
Mc GrawHill, Tercera Edición.
[6]Ferreyra Cortés Gonzalo, Informática para cursos de bachillerato, Editorial Alfaomega, Segunda Edición