Logo Studenta

PD_Fundamentos_de_programacion

¡Este material tiene más páginas!

Vista previa del material en texto

Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 1 
 
 
 
 
 
Cuatrimestre dos 
 
Programa de la asignatura: 
 
Fundamentos de Programación 
 
Clave: 
150910206 
 
 
ESAD 
Agosto, 2010 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 2 
 
 
Índice 
 
I. Información general de la asignatura 3 
a. Ficha de identificación ...................................................................................................................................... 3 
b. Descripción ........................................................................................................................................................ 3 
c. Propósito ............................................................................................................................................................ 4 
II. Competencia(s) a desarrollar 5 
Competencia general:........................................................................................................................................... 5 
Competencias específicas: .............................................................................................................................. 5 
III. Temario 6 
IV. Metodología de trabajo 8 
V. Evaluación 10 
VI. Materiales de apoyo 12 
VII. Desarrollo de contenidos por unidad 13 
Unidad 1: Introducción a la computadora y desarrollo de software ........................................................... 13 
Unidad 2: Diseño de algoritmos ........................................................................................................................ 31 
Unidad 3: Introducción al lenguaje C ............................................................................................................... 49 
Unidad 4: Estructuras de control ....................................................................................................................... 78 
Unidad 5: Estructuras de datos ....................................................................................................................... 118 
Unidad 6: Funciones ......................................................................................................................................... 148 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 3 
 
 
 
 
I. Información general de la asignatura 
 
a. Ficha de identificación 
 
Nombre de la Licenciatura o Ingeniería: Ingeniería en logística y transporte, Ingeniería en 
telemática 
Nombre del curso o asignatura Fundamentos de Programación 
Clave de asignatura: 150910206 
Seriación: Bases de Datos, Análisis Orientado a Objetos, 
Programación Orientada a Objeto 
Cuatrimestre: Dos 
Horas contempladas: 72 
 
 
b. Descripción 
 
La asignatura de Fundamentos de Programación tiene como meta principal que desarrolles las 
competencias necesarias para construir programas que resuelvan problemas reales. Constituye un pilar 
primordial para aquellos alumnos que, como tú, están estudiando una carrera relacionada con 
computación -como Desarrollo de Software y Telemática- pues los conocimientos y habilidades que 
desarrollen en este curso serán indispensables para la varias de las asignaturas subsecuentes del plan 
de estudios de ambas ingenierías, tal es el caso de bases de datos, programación orientada a objetos, 
programación web, estructura de datos, entre otras. 
 
El lenguaje de alto nivel que se ha elegido para implementar los programas es C, ya que es uno de los 
lenguajes, estructurados y modulares, utilizados actualmente; además cuenta con entornos de trabajo 
de software libre, como el que utilizaremos llamado Dev-C. 
 
Para facilitar que desarrolles las competencias establecidas, los contenidos del curso se han dividido de 
forma estratégica en seis unidades. En la primera se delinea el concepto de computadora y su 
funcionamiento, para ello se describen los elementos que la integran; posteriormente, se hace una 
aproximación a los lenguajes de programación y los paradigmas que existen en la actualidad, 
resaltando la programación modular y estructurada. En la siguiente unidad se expone la metodología de 
la programación y se introduce el concepto de algoritmo, que es la solución sistemática de problemas, 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 4 
así que también se presentan dos formas de representación: el pseudocódigo y los diagramas de flujo. 
Asimismo, se ilustran las estructuras secuenciales, selectivas y repetitivas. A continuación, en la unidad 
tres, se presentan los elementos básicos para construir un programa simple en lenguaje C: datos, 
contantes, variables y las operaciones básicas de entradas/salidas para describir el uso de los 
operadores aritméticos, relacionales y lógicos para la manipulación de operaciones y expresiones en C. 
En la unidad cuatro se distinguen y utilizan las distintas estructuras de control, tanto selectivas (if, if-
else, switch) como repetitivas (while, do-while, for), que ofrece el lenguaje C; se introduce su 
representación en diagrama de flujo y algoritmo, además de su sintaxis en C. En la unidad cinco se 
introducen las estructuras de datos: arreglos y registros, se explica qué son, cómo funcionan y para qué 
sirven, además, se plantean problemas en donde su uso es indispensable para su resolución. Por 
último, en la unidad seis se reconoce la importancia de la programación modular, construyendo 
soluciones modulares utilizando funciones en lenguaje C. 
 
 
c. Propósito 
 
El curso tiene como finalidad proporcionarte las bases para que comiences a desarrollar programas 
estructurados que solucionen problemas simples, a través del desarrollo de algoritmos en pseudocódigo 
y diagrama de flujo y su codificación en lenguaje C, además se te describe el proceso de compilación de 
un programa y su ejecución identificando los elementos de la computadora que intervienen en cada 
paso. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 5 
 
 
 
 
 
II. Competencia(s) a desarrollar 
 
 
Competencia general: 
 
Desarrollar programas estructurados y modulares que resuelvan problemas simples, mediante el 
análisis del problema, el diseño de un algoritmo y su codificación en lenguaje C. 
 
 
Competencias específicas: 
 
• Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un 
programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar 
qué elementos de la computadora intervienen en su ejecución. 
• Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo 
y la elaboración del pseudocódigo. 
• Utilizar el lenguaje de programación C para resolver problemas a través de la implementación de 
algoritmos secuenciales. 
• Utilizar estructuras de control selectivas y repetitivas para resolver problemas simples a través 
del desarrollo de programas en lenguaje C. 
• Utilizar estructuras de datos para almacenar y manipular los datos de un programa por medio del 
desarrollo de programas en lenguaje C. 
• Implementar funciones para resolver problemas a través del desarrollo de programas modulares 
escritos en lenguaje C. 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 6 
III. Temario 
1. Introducción a la computadora y desarrollo de software 
1.1. ¿Qué es una computadora?1.2. Estructura y funcionamiento de una computadora 
1.2.1. Modelo de Von Neumann 
1.2.2. Ejecución de programas en la computadora 
1.2.3. Almacenamientos de programas y datos 
1.3. Lenguajes de programación 
1.3.1. Evolución de los lenguajes de programación 
1.3.2. Paradigmas de los lenguajes de programación 
1.4. Ciclo de vida del software 
 
2. Diseño de algoritmos 
2.1. Concepto de algoritmo y características 
2.2. Representaciones de algoritmos 
2.2.1. Pseudocódigo 
2.2.2. Diagrama de flujo 
2.3. Estructuras de control 
2.3.1. Secuenciales 
2.3.2. Selectivas 
2.3.3. Repetitivas 
 
3. Introducción al lenguaje C 
3.1. Componentes de un programa 
3.1.1. Instrucciones 
3.1.2. Comentarios 
3.1.3. Palabras reservadas 
3.1.4. Estructura general de un programa 
3.2. Tipos de datos 
3.3. Variables y constantes 
3.3.1. Identificadores 
3.3.2. Declaración e inicialización de variables 
3.3.3. Tipos de constantes 
3.3.4. Declaración de constantes 
3.4. Expresiones matemáticas 
3.4.1. Tipos de operadores 
3.4.2. Evaluación de expresiones 
3.5. Bibliotecas y funciones 
3.5.1. Funciones matemáticas 
3.5.2. Funciones de entrada y salida 
3.6. Codificación de algoritmos 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 7 
4. Estructuras de control 
4.1. Estructuras selectivas 
4.1.1. Estructura selectivasimple (if) 
4.1.2. Estructura selectiva doble (if-else) 
4.1.3. Estructura selectiva múltiple (switch-case) 
4.2. Estructuras repetitivas 
4.2.1. Estructura Mientras (while) 
4.2.2. Estructura Desde-mientras (for) 
4.2.3. Estructura Hacer-mientras (do-while) 
4.3. Estructuras anidadas 
 
5. Estructuras de datos 
5.1. Arreglos 
5.1.1. Definición y tipos 
5.1.2. Declaración e inicialización 
5.1.3. Acceso a los elementos de un arreglo 
5.1.4. Ciclos y arreglos 
5.1.5. Cadenas 
5.2. Estructuras 
5.2.1. Definición, declaración e inicialización 
5.2.2. Acceso a los elementos 
 
6. Funciones 
6.1. Diseño descendente 
6.2. Definición, declaración e invocación de funciones en C 
6.3. Alcance de las variables 
6.4. Paso de parámetros 
6.4.1. Por valor 
6.4.2. Por referencia 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 8 
IV. Metodología de trabajo 
 
Para trabajar en esta asignatura, se ha propuesto la metodología del Aprendizaje Basado en 
Problemas, pues debido a la naturaleza de los contenidos, tendrás que resolver problemas de manera 
constante para poner en práctica lo aprendido. Como el propósito de este curso es que desarrolles 
programas de software que resuelvan problemas simples, por cada unidad se ha propuesto uno o más 
problemas a partir de los cuales sete presentan los contenidos correspondientes, la intención de esto es 
que primero se te planteen los problemas para que los analices y posteriormente se te presente la 
solución de los mismos mediante algoritmos o programas; lo que se busca es que alcances las 
competencias específicas de cada unidad a través de, primero la observación y el análisis de los 
problemas ejemplo que te ayudarán a identificar patrones comunes, y posteriormente la resolución de 
problemas un poco más complejos a través del desarrollo de estrategias de solución similares. 
 
Ahora bien, para que puedas resolver un problema mediante un programa de computadora, primero 
tienes que tener claro el funcionamiento principal de la misma, tanto para almacenar la información 
como para llevar a cabo el conjunto de instrucciones que integran la solución de un problema, es decir, 
el programa. Por tal motivo, en la primera unidad se expone la arquitectura tradicional de las 
computadoras conocida como el Modelo de Von Neumann a través de la cual se te explica cómo se 
almacenan los programas y los datos de un problema en una computadora y qué elementos intervienen 
en la ejecución de las instrucciones. Lo anterior se expone utilizando un programa que se encarga de 
calcular el área de un rectángulo, de esta manera podrás aprender los contenidos mediante un ejemplo 
simple. Posteriormente, se describen los pasos que llevan a la construcción de un programa, 
nuevamente, utilizando un ejemplo simple. La evaluación de esta unidad se realizará mediante una 
prueba de opción múltiple en la que se incluyen los temas expuestos. 
 
Para exponer los temas relacionados con la elaboración de los algoritmos, se recurre al mundo de la 
ardilla, un ejemplo en el cual se supone que una ardilla ha sido entrenada para realizar un conjunto 
limitado de instrucciones precisas, de tal manera que para solucionar un problema únicamente se puede 
recurrir a este conjunto. 
 
De esta forma se pretende que reconozcas intuitivamente que la computadora –al igual que la ardilla– 
sólo es capaz de realizar un conjunto limitado de instrucciones precisas, por lo que la solución de un 
problema sólo puede incluir instrucciones reconocidas por ésta. Así mismo, mediante este ejemplo, se 
te muestra qué es un algoritmo, cuáles son sus características y sus formas de representación; 
posteriormente se te presentan las estructuras de control básicas de la programación estructurada 
ejemplificando su uso a través de la construcción de algoritmos que dirigen a la ardilla en la realización 
de una tarea específica. Así se te introduce en el diseño de soluciones estructuradas de problemas 
simples representadas de manera formal, ya sea con un diagrama de flujo o con un pseudocódigo. Es 
importante mencionar que la ventaja de presentar el tema desde un ejemplo tan simple y limitado como 
el mundo de la ardilla, facilita que puedas proponer soluciones estructuradas en un lenguaje específico, 
que es justo de lo que se trata la programación. 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 9 
En las siguientes unidades la estrategia de aprendizaje es similar, se te presentan los contenidos al 
mismo tiempo que se utilizan para solucionar problemas, sólo que en este caso se proponen situaciones 
reales que te son familiares, de tal manera que cuentes con los conocimientos necesarios para 
solucionarlos y solo te tengas que enfocar en representar la solución utilizando las estructuras de 
control definidas, es decir, las instrucciones permitidas. 
 
En general, en las actividades formativas deberás realizar algunas modificaciones a los algoritmos o 
programas presentados en los contenidos, o bien, los escribirás en lenguaje C para que puedas ver su 
ejecución, además debes ingresar al foro de cada unidad para realizar los comentarios que tengas al 
respecto. Es importante que realices cada una de las actividades propuestas por que a través de ellas 
se complementan los temas expuestos. De igual manera, para poner en práctica los conocimientos 
adquiridos y evaluar que se haya alcanzado la competencia específica a lo largo del curso desarrollarás 
un proyecto integrador que consiste en el planteamiento, análisis, diseño de la solución e 
implementación de un programa que involucre el uso de todas las estructuras de control y de datos que 
se estudiarán. En este caso, tú serás el responsable de plantear el problema que deseas solucionar y 
junto con tu facilitador delimitarás las fases y/o versiones que realizarás en cada unidad. El papel que 
juega tu facilitador (a) en el proceso de aprendizaje es fundamental, pues su tarea es guiarte en la 
solución de problemas a partir del análisis que tú realices y las ideas o dudas que te surjan con el 
mismo. El facilitador por ningún motivo debe darte la solución completa de un problema, en lugar de ello 
debe propiciar el intercambio de ideas y experiencias de los estudiantes mediante foros de discusión, 
favoreciendo el aprendizaje colaborativo; si después de esto siguen existiendo dudas se recomienda 
queresuelva problemas similares para que tanto tú como tus compañeros refuercen los conocimientos y 
habilidades de una manera inductiva y así logren dar solución al problema en cuestión. Por lo anterior, 
existe un foro de discusión general en el cual cualquiera puede exponer sus dudas respecto a un tema 
o problema para que sean retroalimentados por tu facilitador y los compañeros de grupo. Es importante 
que el facilitador promueva un clima de respeto mutuo y libertad de expresión para que tanto tú como 
tus compañeros se sientan cómodos al externar sus dudas y propuestas, permitiendo la disensión de 
manera fundamentada y deferente. 
 
En lo referente a la evaluación de las actividades y evidencias, tu facilitador debe revisar 
cuidadosamente los entregables que hagas y retroalimentarlos de manera positiva, clara y concisa; 
haciendo evidente el avance que hayas alcance y sin perder de vista que los errores que comentas 
debe ser utilizados a favor de tu aprendizaje, por lo que debe prestar principal atención a éstos 
indicándote en qué consiste el error y cómo se corrige, fundamentando su anotación en los contenidos 
del curso. 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 10 
V. Evaluación 
 
La evaluación del curso corresponderá en su totalidad al trabajo en el aula virtual, que se divide en: las 
actividades formativas, equivalentes al 20% de toda la calificación y, el portafolio de evidencias que 
representa el 80% restante. De tal manera que, mediante las actividades formativas propuestas para 
cada unidad se refuerzan los conocimientos abortados y se desarrollan las habilidades que el requieres 
para solucionar por ti mismo problemas similares a los que se presentan y resuelven. En cambio, el 
propósito de las evidencias de aprendizaje propuestas para cada unidad (portafolio de evidencias) es 
comprobar que hayas alcanzado la competencia específica, de tal manera que el conjunto de todas las 
evidencias sean la prueba de que has logrado la competencia general. 
 
Es requisito indispensable que realices y/o entregues todas las actividades formativas y las evidencias 
de aprendizaje en el tiempo establecido, de esta manera se garantiza la retroalimentación en tiempo y 
forma que tu facilitador realizará para que tengas claro el avance de tu aprendizaje, lo cual te servirá 
para que desarrolles las actividades o evidencias subsecuentes. 
 
En el caso de las evidencias de aprendizaje la calificación se obtendrá a partir de las escalas 
establecidas para cada una, las cuales conocerás de antemano. En el caso de las actividades 
formativas, serán revisadas por el facilitador(a), quién te hará llegar una retroalimentación que te ayude 
a ver tu avance y los puntos que puedes mejorar. 
 
Únicamente se considerará aprobado el curso si tu promedio total es mayor o igual a la calificación 
mínima establecida por el ESAD. 
 
Los trabajos que se tomarán como evidencias de aprendizaje son: 
 
Unidad 2: 
 
Planteamiento del problema 
Especificación clara y precisa del problema que se resolverá mediante un programa en C 
Unidad 3: 
 
Análisis del problema 
Datos de entrada, salida y bosquejo de la solución. 
Unidad 4: 
 
Programa en C. Estructuras de control. 
Primera versión de la solución del problema (algoritmo y codificación) que incluya 
estructuras secuenciales, selectivas y repetitivas. 
Unidad 5: 
 
Programa en C. Estructuras de datos 
Segunda versión de la solución del problema (algoritmo y codificación) que incluya 
estructuras de datos. 
Unidad 6: 
 
Programa en C. Modular (versión final) 
Entrega final del programa que soluciona el problema de forma modular 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 11 
 
 
A continuación se te presenta la ponderación de las evidencias de aprendizaje, las cuales tendrás que 
enviar a tu facilitador (a) por medio del Portafolio de Evidencias. Recuerda que el 100% de éstas, 
equivale al 80% de la calificación final del curso en la que se promedian actividades formativas y 
sumativas: 
 
 
ACTIVIDAD PORCENTAJE 
 
Evidencia de la unidad 2 13% 
Evidencia de la unidad 3 17% 
Evidencia de la unidad 4 36% 
Evidencia de la unidad 5 17% 
Evidencia de la unidad 6 17% 
Total 100% 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 12 
 
VI. Materiales de apoyo 
 
 
Bibliografía básica: 
 
Böhm, C., & Jacopini, G. (1966). Flow diagrams, Turing machines, and languages only with two 
formation rules". Communications of the ACM, 9 (5), 366-371. 
 
Cairó, O. (2005). Metodología de la programación: Algoritmos, diagramas de flujo y programas. México, 
D.F.: Alfaomega. 
 
Guerrero, F. (s.f.). mailxmail.com. Recuperado el 15 de 8 de 2010, de http://www.mailxmail.com/curso-
introduccion-lenguaje-c 
 
Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de datos. 
España: Mc Graw Hill. 
 
Kernighan, B., & Ritchie, D. (1991). El lenguaje de programción C. México: Prentice-Hall 
Hispanoamericana. 
 
López, L. (2005). Programación estructurada en lenguaje C. México: Alfaomega. 
 
Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.: UACM. 
 
Villela, H. T. (20 de agosto de 2010). Manual de C. Obtenido de 
http://www.fismat.umich.mx/mn1/manual/ 
 
Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México, D.F.: La 
prensas de ciencias, Facultad de Ciencias, UNAM. 
 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 13 
 
VII. Desarrollo de contenidos por unidad 
Unidad 1: Introducción a la computadora y desarrollo de software 
 
Propósitos de la unidad 
 
En esta unidad: 
• Identificarás los conceptos básicos relacionados con la computadora y los lenguajes de 
programación. 
• Distinguirás los elementos de una computadora que intervienen en la ejecución de un programa 
a través del modelo de Von Neumann. 
• Distinguirás los paradigmas de programación y los lenguajes asociados a éstos. 
• Reconocerás las fases que se siguen para solucionar un problema mediante la computadora. 
 
Competencia específica 
 
Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un 
programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar qué 
elementos de la computadora intervienen en su ejecución. 
 
Introducción 
 
Bienvenido a la primera unidad del curso fundamentos de programación, en esta unidad estudiaremos 
qué son las computadoras y cómo pueden ayudarnos para resolver problemas. Lo primero que tienes 
que tener claro es que las computadoras no poseen inteligencia alguna, ya que por sí solas no son 
capaces de resolver ningún problema, su importancia está en la capacidad de datos que pueden 
almacenar y manipular; de tal manera que para lograr nuestro fin– resolver problemas mediante la 
computadora – es necesario desarrollar programas escritos en un lenguaje de programación para que 
puedan ser ejecutados por una computadora. 
 
Los orígenes de las computadoras se remontan a dispositivos mecánicos como el ábaco que sirve para 
contar y ya se utilizaba en el año 2000 a.C, seguido de la Pascalina que fue la primera calculadora 
mecánica del mundo inventada por el francés Blaise Pascal en el año de 1642, y que después fue 
perfeccionada por Gottfried Leibniz. Dos siglos después, en el año de 1834, Charles Babbage anticipó 
la estructura de la computadora electrónica moderna, sin lograr su objetivo dadas las limitaciones de 
ingeniería del siglo XIX. Fue hasta lasegunda guerra mundial (1936) que se cumplieron sus 
expectativas, cuando Alan Turing desarrolló la primera computadora electromecánica: el Colossus, 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 14 
encargada de descifrar los mensajes alemanes escritos en código Enigma.1
 
 Una década después 
Wallace J Eckert y Jonh W. Mauchly construyeron la primera computadora digital totalmente 
electrónica, llamada ENIAC (por sus siglas en inglés Electronic Numerical Intregrator And Computer). La 
característica principal de este invento es que se trataba de un componente de propósito general, ya 
que se podía programar para que resolviera diferentes problemas, pero la programación se realizaba 
modificando o reconstruyendo algunas partes del hardware. Con el fin de remediar esto, en 1945 el 
matemático Jonh Von Neumann propuso una arquitectura de computadoras cuya programación no era 
por medio de cables sino por medio de la creación de programas, a la que se le conoce como Modelo 
de Von Neumann, y que es, hasta hoy en día, la arquitectura base de las computadoras. 
Por lo anterior, en esta unidad se estudiarán los siguientes temas: el Modelo de Von Neumann, los 
pasos para realizar un programa y los principales paradigmas y lenguajes de programación utilizados 
actualmente. 
 
Actividad 1. Foro Fundamentos de programación 
 
Para facilitar el estudio de la asignatura, hemos creado un foro de discusión general, a través del cual 
podrás comentar cualquier asunto relacionado con Fundamentos de programación. Accede al foro 
desde el aula virtual. 
 
1.1 ¿Qué es una computadora? 
 
Para fines de este curso entenderemos que una computadora es una máquina electrónica que recibe 
datos de entrada y los procesa de acuerdo al conjunto de instrucciones, llamado programa, para 
obtener nuevos datos que son el resultado del proceso, tal como se ilustra en la siguiente figura. 
 
 
1 Se conoce como código Enigma al lenguaje de codificación de la máquina con el mismo nombre, utilizada en Europa a inicios de 1920, para 
cifrar y descifrar mensaje. 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 15 
 
Figura 1.1:Computadora 
Lo anterior nos lleva a clasificar los componentes de una computadora en dos clases: hardware y 
software. Los recursos de hardware son todos aquellos elementos de la computadora que se pueden 
palpar, como por ejemplo: el monitor, el teclado, el disco duro, la memoria, entre otros. En cambio, los 
recursos de software son aquellos elementos intangibles sin los cuales la computadora no funcionaría, 
esto es, el soporte lógico: programas y datos, entre los cuales se encuentran los sistemas operativos, 
editores de texto, compiladores, bases de datos, videojuegos, entre otros. 
 
1.2 Estructura y funcionamiento de una computadora 
 
Si nos cuestionamos ¿cómo funciona y se estructura internamente la computadora?, ¿cómo se obtienen 
los resultados? y ¿cómo se guardan los programas y datos en la memoria?, cuando tenemos un primer 
acercamiento con estos equipos, a pesar de manejarlos a diario, estas preguntas no son tan fáciles de 
contestar. Es por eso que en esta sección explicaremos y responderemos a estos cuestionamientos 
mediante el Modelo de Von Neumann. 
 
1.2.1 Modelo de Von Neumann 
 
El Modelo de Von Neumann propone que tanto el programa como los datos sean almacenados en la 
memoria, de esta forma la computadora no tendría que reconstruirse, pues para programarla 
únicamente debe introducirse el programa por el dispositivo indicado, y posteriormente alimentar con los 
datos de entrada para que calcule la salida correspondiente. Los elementos que componen esta 
arquitectura son: la unidad central de procesamiento integrada por la unidad aritmética-lógica y la 
unidad de control, la memoria y los dispositivos de entrada/salida. A continuación se describe 
brevemente la función de cada uno de los elementos que integran el Modelo de Von Neumann: 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 16 
• Unidad Central de Procesamiento(CPU, Central Process Unit), controla y coordina la ejecución de 
las instrucciones, para ello utiliza la Unidad Aritmético-Lógica encargada del procesamiento de los 
datos y la Unidad de Control para el procesamiento de las instrucciones. 
 
o Unidad Aritmético-Lógica(ALU, Arithmetic Logic Unit), realiza todas las operaciones 
aritméticas (suma y resta) y lógicas (operaciones del Algebra de Boole). Además de los 
circuitos que le permiten realizar dichas operaciones, la ALU incluye un elemento auxiliar 
donde se almacenan temporalmente los datos que manipula conocido como acumulador 
o registro temporal (TR, Temporal Register). 
o Unidad de Control(CU, Control Unit), se encarga de leer las instrucciones almacenadas 
en memoria, decodificarlas y después enviar las señales a los componentes que están 
involucrados en su ejecución, para lo cual tiene dos elementos auxiliares el Contador del 
Programa(PC, Program Counter) y el Registro de Instrucción(IR, Instruction Register). En 
el IR se guarda temporalmente la instrucción que debe ser ejecutada, mientras que en el 
PC se almacena la dirección de memoria que contiene la siguiente instrucción que se 
ejecutará. 
 
• Memoria principal, es la parte de la computadora donde se almacenan los datos y las instrucciones 
durante la ejecución de un programa. Físicamente está compuesta por circuitos integrados. Las 
computadoras actuales cuentan con un área de memoria de sólo lectura – a la que se le conoce 
como memoria de tipo ROM (Read Only Memory) –y otra en la cual es posible escribir y leer datos 
– denominada de tipo RAM (Random Access Memory). La memoria RAM tiene el inconveniente de 
ser volátil pues al apagarse la computadora los datos almacenados se pierden. 
 
 Para resolver este inconveniente, se cuenta con otro tipo de memoria, denominada memoria 
secundaria, en ella se pueden almacenar una gran cantidad de información permanentemente, 
mientras el usuario no la borre. La desventaja de este tipo de dispositivos es que no son tan 
rápidos como la memoria RAM. Los discos duros, los discos ópticos (CD o DVD), la memoria flash 
(USB) y las cintas magnéticas, entre otras, son ejemplos de dispositivos de almacenamiento 
secundario. 
 
• Dispositivos de entrada y salida (Input/Output), son responsables de la comunicación con el 
usuario del sistema. Los dispositivos de entrada permiten introducir en la computadora datos e 
instrucciones, mismas que son transformadas en señales binarias de naturaleza eléctrica para 
almacenarlas en la memoria. Por otro lado, los dispositivos de salida permiten enviar los resultados 
a los usuarios de las computadoras, transformando las señales eléctricas binarias en información 
que éstos puedan comprender. El teclado está considerado como el dispositivo de entrada 
estándar pero existen otros del mismo tipo, por ejemplo: el ratón, el escáner, la lectora óptica, el 
micrófono o la tabla digital. A su vez el monitor es el dispositivo de salida estándar; otros ejemplos 
de dispositivos de salida son: impresora, bocinas, plotter, etc. 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 17 
Es así que todas las unidades de la computadora se comunican a través del sistema de buses que son 
cables mediante los cuales se envían señales y dependiendo de la información que transmiten se 
clasifican en: 
 
a) El bus de direcciones transmite la dirección de memoria de la que se quiere leer o en la que se 
quiere escribir. 
b) El bus de control selecciona la operación a realizar en una celdade memoria (lectura o 
escritura). 
c) El bus de datos transmite el contenido desde o hacia una celda de memoria seleccionada en el 
bus de direcciones según la operación elegida en el bus de control sea lectura o escritura. 
 
Ahora ya sabemos cómo está estructurada internamente la computadoras, qué elementos la integran y 
cuál es la función de cada uno de ellos, el siguiente paso es descubrir cómo colaboran para llevar a 
cabo la ejecución de un programa, en seguida lo explicamos: los datos de entrada que requiere un 
programa se introducen a la computadora, a través de los dispositivos de entrada; posteriormente se 
almacenan en la memoria RAM, para que la CPU pueda procesarlos, conforme a las instrucciones del 
programa, hasta obtener el resultado deseado, mismo que envía al usuario por medio de los 
dispositivos de salida. Todas estas acciones son coordinadas por la unidad de control que envía las 
señales y datos a cada uno de los dispositivos de la computadora involucrados en la ejecución de las 
instrucciones del programa a través del sistema de buses. En la siguiente sección se describe con 
mayor detalle este proceso. 
 
1.2.2Ejecución de programas en la computadora 
 
Para que entender mejor lo que sucede en el interior de la CPU al ejecutar cualquier programa, a 
continuación se describen de manera general los pasos que se realizan, una vez que el programa y los 
datos fueron almacenados en la memoria principal: 
 
a) Primero, la unidad de control consulta en la memoria la instrucción indicada en el contador del 
programa y la almacena en el registro de instrucciones, actualizando el contador del programa 
con la dirección de memoria de la siguiente instrucción. 
b) Después de que se almacenó la instrucción en el registro del programa, la unidad de control se 
encarga de decodificarla, detectando qué dispositivos están implicados en su ejecución, estos 
pueden ser: la ALU, cuando se tiene que hacer una operación; los dispositivos de entrada y/o 
salida, cuando se tiene que enviar o recibir un dato; o la memoria, si se quiere guardar o 
consultar un dato; posteriormente envía las señales de control a los mismos indicándoles la 
acción y, si es el caso, los datos y/o la dirección de memoria correspondiente. 
c) Cuando los dispositivos realicen su tarea enviarán una señal a la unidad de control, para que 
esta repita el mismo procedimiento con la siguiente instrucción, así hasta ejecutar todo el 
programa. 
 
Al período en el que se ejecuta una instrucción se le conoce como ciclo de instrucción o ciclo fetch. 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 18 
 
Con el fin de ilustrar este procedimiento, analizaremos la ejecución del siguiente programa escrito en un 
lenguaje de programación ficticio. 
 
Ejemplo 1.1: El siguiente conjunto de instrucciones calcula el área de un rectángulo. 
 
 
Imprimir “Ingresa la base:” 
Leer b 
Imprimir “Ingresa la altura:” 
Leer h 
area← b*h 
Imprimir área 
 
Programa 1.1:Calcula área de un rectángulo 
 
 
 
Antes de definir paso a paso la ejecución de este programa describiremos la función de cada una de las 
instrucciones que lo integran. 
 
Instrucción Descripción 
Imprimir <Dato> 
Imprime en el dispositivo de salida estándar los <Datos> 
indicados en la instrucción, que pueden ser un mensaje de texto 
o el valor de una variable. 
Leer <X> Lee por medio del teclado un dato, lo almacena en la variable <X> indicado y lo almacena en la memoria RAM. 
<X> ← <Dato> 
La flecha representa una asignación, esta acción actualiza la 
dirección de memoria asignada a <X> con el valor <Dato>. 
Tabla 1.1: Lista de instrucciones en lenguaje de programación ficticio 
 
Cabe señalar que en los lenguajes de programación, las direcciones de memoria se representan por 
medio de variables, para hacerlos más legibles. De tal manera que <X> representa una variable y 
<Dato> puede ser un mensaje o cualquier valor. 
 
Ahora sí, de acuerdo con la información anterior, en la siguiente tabla se describen paso a paso las 
acciones que realiza la unidad de control junto con las otras unidades de la computadora involucradas 
en la ejecución de cada una de las instrucciones del programa. 
 
Instrucción Descripción de la instrucción 
 Imprimir “Ingresa base: ”  La unidad de control envía señales al monitor para que imprima el 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 19 
mensaje “Ingresa base:”. 
 Leer b 
 La unidad de control coordina las acciones necesarias para que, por 
medio del teclado ,el usuario introduzca un número y lo almacene en la 
memoria principal, en el espacio correspondiente a la variable b. 
 Imprimir “Ingresa altura:”  La unidad de control, nuevamente, envía una señal al monitor para que imprima el mensaje “Ingresa altura:”. 
 Leer h 
 La unidad de control coordina las acciones necesarias para que el 
usuario introduzca un número, por medio del teclado, y lo almacene en el 
espacio de memoria correspondiente a la variable h. 
area← b *h 
 La unidad de control envía la señal indicada a la ALU para que realice la 
multiplicación posteriormente envía la señal a la memoria junto con el 
resultado de la multiplicación, para que se almacene en el espacio de 
memoria a. 
 Imprimir area 
 La unidad de control trae de la memoria el dato almacenado en el 
espacio asignado a la variable area y coordina las acciones para que el 
monitor imprima este valor. 
 
Tabla 1.2: Ejecución paso a paso de un programa 
 
 
 
1.2.2 Almacenamiento de programas y datos 
 
La computadora sólo entiende señales binarias: ceros y unos, encendido y apagado, ya que todos los 
dispositivos de una computadora trabajan con dos únicos estados: hay corriente eléctrica y no hay 
corriente, respectivamente. Por tal motivo, los datos y programas almacenados en la memoria están 
codificados como cadenas de 1´s y 0´s para que la unidad de control pueda interpretarlos. A esta 
codificación se le llama lenguaje de máquina. 
 
Cabe mencionar que la memoria está dividida en varias celdas, en cada una de ellas se puede 
almacenar únicamente 0s ó 1s, a estos valores se les denomina valores binarios o BIT´s (BInary DigiT). 
Las celdas se agrupan para formar registros (también llamados palabras), a cada uno le corresponde 
una dirección de memoria, así cuando se desea escribir o leer de la memoria un dato o una instrucción 
se debe especificar la dirección dónde se encuentra. 
 
Como podrás imaginar, para un ser humano resultaría sumamente complicado escribir los programas 
en lenguaje de máquina, es por eso que los programas se escriben en lenguaje de programación 
entendibles para los seres humanos y después se traducen mediante un software especial –que pueden 
ser un compilador o un traductor– a cadenas de 0´s y 1´s. De tal manera que a cada instrucción le 
corresponde un código binario específico y para cada dato también existe una codificación única. Por 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 20 
ejemplo, la palabra “Hola” se representa como “0100 1000 0110 1111 0110 1100 0110 0000”, ya que a 
cada letra le corresponde una codificación: 
 
H O L A 
0100 1000 0110 1111 0110 1100 0110 0000 
 
El número 80 se puede representar como “0101 0000” y la instrucción “MOV R2, R7” se codifica de la 
siguiente manera “0010 0000 1000 0100.” 
 
Conforme fueron evolucionando las computadoras se inventaron diversas maneras de representar la 
información en código binario, hoy en día existen codificaciones estándar para los símbolos y los 
números, al igual que para las instrucciones; sin embargo, para nuestros objetivos es suficiente tener 
claro que cualquier dato o instrucción puede ser representado mediante cadenas de 0s y 1s. Por otrolado, escribir programas en lenguaje binario es sumamente complicado para los seres humanos, por lo 
que en las últimas décadas se han desarrollado diversos lenguajes de programación que son más 
cercanos al lenguaje natural (humano), de los cuales hablaremos en la siguiente sección. 
 
 1.3 Lenguajes de Programación 
 
Los lenguajes de programación sirven para escribir programas de computadora orientados a resolver 
algún problema o necesidad. Cada lenguaje de programación se define a partir de un conjunto de 
símbolos básicos, llamado alfabeto; un conjunto de reglas, llamado sintaxis, que definen la forma de 
manipularlos o combinarlos para representar instrucciones; y las reglas que especifican los efectos de 
dichas instrucciones cuando son ejecutadas por la computadora, conocidas como semántica. De esta 
manera tenemos que: 
 
𝐿𝑒𝑛𝑔𝑢𝑎𝑗𝑒𝑑𝑒𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎𝑐𝑖ó𝑛 = 𝑎𝑙𝑓𝑎𝑏𝑒𝑡𝑜 + 𝑠𝑖𝑛𝑡𝑎𝑥𝑖𝑠 + 𝑠𝑒𝑚á𝑛𝑡𝑖𝑐𝑎 
 
Por otro lado, dependiendo de su legibilidad para el ser humano los lenguajes de programación se 
clasifican en lenguajes de bajo nivel y lenguajes de alto nivel. Los primeros se caracterizan porque sus 
instrucciones se parecen más a las acciones elementales que ejecuta una computadora, como son: 
sumar, restar, guardar en memoria, etc. En cambio, las instrucciones de los lenguajes de alto nivel son 
más parecidas a un lenguaje humano, por lo regular inglés. Por otro lado, los programas escritos en 
bajo nivel describen a detalle lo que sucede a nivel de hardware, mientras que los programas escritos 
en un lenguaje de alto nivel lo ocultan, teniendo como ventaja que son más fáciles de entender para las 
personas. 
 
 1.3.1. Evolución de los lenguajes de programación 
 
Con las primeras computadoras surgió el primer lenguaje de programación que –como es de 
imaginarse– fue el lenguaje de máquina, el cual es considerado el lenguaje de primera generación. Las 
instrucciones en lenguaje de máquina dependían de las características de cada equipo, por lo que dada 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 21 
la dificultad de desarrollar programas en unos y ceros, los investigadores de la época desarrollaron el 
lenguaje ensamblador, cuyo conjunto de instrucciones consta de palabras nemotécnicas que 
corresponden a las operaciones básicas que una computadora puede ejecutar. 
 
Para ilustrar esto revisemos la siguiente instrucción:2
 
 
Mueve el contenido del registro 8 al contenido del registro 10 
 
En lenguaje de máquina esta se podría representar como: 
 
0010 0000 1000 0100 
 
Lo cual es ilegible para el ser humano, en cambio en lenguaje ensamblador esta instrucción se puede 
representar de la siguiente forma: 
 
MOV R2, R7 
 
 Aunque sigue estando en clave, es más amigable que las cadenas de ceros y unos. Otra característica 
del lenguaje ensamblador es que las instrucciones dependían de las características físicas 
(arquitectura) de la computadora. 
 
Para traducir de lenguaje ensamblador a lenguaje de máquina, se desarrollaron programas llamados 
ensambladores (en inglés, assemblers). Este lenguaje fue considerado de segunda generación. 
Posteriormente, en la década de los 50´s aparecieron los primeros lenguajes de alto nivel, cuyas 
instrucciones son más parecidas al idioma inglés y, por lo tanto, más fácil de utilizar para los 
programadores, además de que son independientes de la arquitectura de las computadoras. Algunos 
ejemplos son: FORTRAN y COBOL (que son los primeros lenguajes que aparecieron y en sus inicios 
se utilizaron para aplicaciones científicas), C, Pascal, Ada, Lisp y Prolog (utilizados principalmente en 
inteligencia artificial), Java, C++, C#, entre otros. 
 
Al igual que el lenguaje ensamblador, los programas escritos en un lenguaje de alto nivel deben ser 
codificados a lenguaje de máquina, así que junto con ellos se desarrollaron programas traductores, que 
de acuerdo con la forma en que trabajan se dividen en dos tipos: compiladores e intérpretes. 
 
• Los compiladores traducen todo el programa escrito en un lenguaje de alto nivel, llamado 
programa fuente, generando un nuevo programa objeto que está escrito en lenguaje de máquina 
y a partir de este se genera un programa ejecutado, el cual puede ejecutarse cada vez que se 
desee sin tener que compilar el programa fuente de nueva cuenta. Además, como parte del 
proceso de traducción el compilador detecta los errores que hay en el código fuente, 
 
2 Este ejemplo es una adaptación de la versión original que aparece en (Joyanes & Zohanero, 2005, pág. 32) (Joyanes & Zohanero, 2005, pág. 32) 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 22 
informándole al programador para que los corrija, pues un programa sólo se compila si no tiene 
errores. 
 
• En cambio, un intérprete revisa una a una cada línea de código, la analiza y enseguida la 
ejecuta, sin revisar todo el código y sin generar un programa objeto, así que cada vez que se 
quiere ejecutar el programa se vuelve a traducir el programa fuente línea por línea. 
 
Por lo anterior, los compiladores requieren una fase extra antes de poder generar un programa 
ejecutable, y aunque esto pareciera menos eficiente en cuanto a tiempo, los programas creados con 
compiladores se ejecutan mucho más rápido que un mismo programa ejecutado con un intérprete. 
Además, cuando un programa ya ha sido compilado puede ejecutarse nuevamente sin tener que 
compilarse, mientras que los programas que son interpretados, cada vez que se ejecutan se deben 
volver a traducir. 
 
Conforme han ido evolucionando las computadoras también lo han hecho las estrategias para 
solucionar problemas, generando nuevos programas programación con diferentes filosofías, llamadas 
paradigmas de programación, de esto hablaremos a continuación. 
 
 
 
 
 
 
 1.3.2 Paradigmas de los lenguajes de programación 
 
Un paradigma de programación representa un enfoque particular o filosofía para diseñar soluciones. Los 
paradigmas difieren unos de otros en los conceptos y la forma de abstraer los elementos involucrados 
en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el 
cómputo. 
 
Un lenguaje de programación siempre sigue un paradigma de programación, aunque también podemos 
encontrar lenguajes con la influencia de dos paradigmas, tal es el caso del lenguaje C++, que surgió 
bajo el paradigma procedimental y se transformó al paradigma orientado a objetos, de tal manera que 
puede soportar ambos paradigmas. 
Los paradigmas más importantes son: 
 
• Paradigma imperativo o procedural. Es el método de programación tradicional, donde los 
programas describen la forma de solucionar un problema a partir de una lista de instrucciones 
que se ejecuta de forma secuencial, a menos que se trate de estructuras de control 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 23 
condicionales o repetitivas, o bien, saltos de secuencia representados por la instrucción GOTO.3
 
 
La programación imperativa se define a partir del cambio de estado de las variables que se 
produce por la ejecución de las instrucciones, por ejemplo, el programa 1.1, que calcula el área 
de un rectángulo, es un ejemplo de un programa imperativo, ya que describe paso a paso como 
solucionar el problema y el resultado corresponde al estado final de la variable area. Sin 
embargo, el lenguaje en el que está escrito no corresponde a ningún lenguaje de programación 
real, pero el lenguaje de máquina es un ejemplo de este paradigma. Otros lenguajes imperativos 
son: Fortran, Cobol, Pascal, Basic, Ada y C. 
• Paradigma declarativo. En contraste con el paradigma imperativo, el objetivo deeste paradigma 
no es describir cómo solucionar un problema, sino describir un problema mediante predicados 
lógicos o funciones matemáticas. Dentro de este paradigma se encuentran los lenguajes de 
programación funcionales y los lenguajes de programación lógicos. Los primeros representan el 
problema utilizando funciones matemáticas, por ejemplo, un programa que calcule el área de un 
rectángulo utilizando un lenguaje funcional se vería así: 
 
𝑎𝑟𝑒𝑎𝑅𝑒𝑐𝑡𝑎𝑛𝑔𝑢𝑙𝑜(𝑏,ℎ) = 𝑏 ∗ ℎ 
 
De tal manera que para calcular el área de un rectángulo de base igual a 5 unidades y altura 
igual a 10 unidades, se ejecuta la función con los parámetros 5,10, es decir, areaRectángulo 
(5,10), la cual devuelve como resultado 50. 
 
Los lenguajes de programación más representativos del paradigma funcional son: Lisp, ML y 
Haskell. 
 
En el caso de los lenguajes lógicos la solución se representa a través de un conjunto de reglas, 
por ejemplo: 
𝑎𝑟𝑒𝑎𝑅𝑒𝑐𝑡á𝑛𝑔𝑢𝑙𝑜(𝑏,ℎ,𝑎𝑟𝑒𝑎) ∶ −𝑚𝑢𝑙𝑡𝑖𝑝𝑙𝑖𝑐𝑎𝑐𝑖ó𝑛(𝑏,ℎ,𝑎𝑟𝑒𝑎) 
 
Esta regla dice que el valor de la variable area corresponde al área del rectángulo con base b y 
altura h sólo si area es el resultado de multiplicar b por h. Estamos suponiendo que se ha 
definido el predicado multiplicación(a, b, c). 
 
En este caso para calcular el resultado se utiliza el principio de razonamiento lógico para 
responder a las preguntas planteadas, por ejemplo si se desea calcular el área del mismo 
rectángulo, la pregunta sería la siguiente: 
 
? 𝑎𝑟𝑒𝑎𝑅𝑒𝑐𝑡𝑎𝑛𝑔𝑢𝑙𝑜(5,10,𝑋) 
 
 
3 De esto hablaremos en unidades posteriores. 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 24 
Y después de que se realicen los cálculos (en este caso llamadas inferencias) el resultado que 
arrojaría sería: 
 
𝑋 = 50 
 
El lenguaje más representativo del paradigma lógico es Prolog. 
 
• Paradigma orientado a objetos. En este caso la solución de un problema se plantea en términos 
de objetos y relaciones entre ellos. Está basado en varias técnicas, incluyendo, herencia, 
polimorfismo, modularidad y encapsulamiento. En este caso se definen clases que son las 
plantillas para crear objetos, por ejemplo, un si se quiere un programa orientado a objetos que 
calcule el área de un rectángulo, se debe definir una clase rectángulo que contenga un método 
encargado de calcular el área. El lenguaje Java y C#, que actualmente son los más utilizados, 
son ejemplos de este paradigma. 
 
 
 
 
 
 
 
 
 
 
 
1.4 Ciclo de vida del software 
 
Independientemente del paradigma que se siga y del lenguaje que se utilice para programar, existe un 
conjunto de fases que deben seguirse para realizar un programa de computadora, al cual se le conoce 
como ciclo de vida del software, en la siguiente figura se lista cada una de ellas. 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 25 
 
En las siguientes secciones aprenderemos en qué consiste cada una de las fases, para lo cual nos 
apoyaremos en la resolución del siguiente problema con la intención de que se entienda mejor: 
 
Problema 1.1: Se requiere construir un programa que calcule el área de un rectángulo, con base 
b y altura h. 
 
 1.4.1 Análisis del problema 
 
En esta fase se determina ¿qué hace el programa? Por lo cual debe definirse de manera clara y concisa 
el problema en cuestión, se debe establecer el ámbito del problema, las características, limitaciones y 
modelos de lo que se desea resolver. Este paso debe conducir a una especificación completa del 
problema en donde se describa cuáles son los datos requeridos para resolverlo (datos de entrada) y 
cuál es el resultado deseado (salida). 
 
 
 
 
El análisis de nuestro ejemplo es muy simple y se resume en la siguiente tabla: 
 
¿Cuál es la salida deseada? El área de un cuadrado, la cual 
identificaremos como 
¿Qué método(s) se pueden 
utilizar para llegar a la 
El área de un rectángulo se puede 
calcular con la siguiente fórmula: 
Planteamiento 
del problema 
Mantenimiento 
Documentación 
delprograma 
Pruebas y 
validación 
Implementación o 
codificación 
Diseño del 
algoritmo 
Análisis del 
problema 
Ciclo de vida del software 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 26 
solución? Á𝑟𝑒𝑎 = 𝐵𝑎𝑠𝑒 ∗ 𝐴𝑙𝑡𝑢𝑟𝑎 
¿Qué datos de entrada se 
requieren? 
 
Por el planteamiento del problema y 
dado el método anterior, los únicos 
datos que se requieren son: la medida 
de la base que se representa por b y la 
medida de la altura indicada por h 
¿Qué datos o información 
adicional es necesaria para 
solucionar el problema? 
En este caso no se requiere más 
información. 
¿Existe algún problema o 
condiciones que deban 
cumplirse? 
Las únicas restricciones son que las 
medidas de la base y altura sean 
mayores a cero. 
Tabla 1.3: Análisis del problema 1 
 
 1.4.2Diseño de la solución 
 
Es en esta fase se define ¿cómo el programa resuelve el problema? Para ello, se describe paso a paso 
la solución del mismo, lo cual se conoce como algoritmo. Cuando el problema es grande se recomienda 
dividirlo en subproblemas más pequeños y resolver por separado cada uno de ellos. A esta metodología 
se le conoce como diseño descendente (top-down) o modular. Existen diferentes formas de representar 
un algoritmo algunas formales, como una fórmula matemática, o informales, como es el caso del 
lenguaje natural. 
 
En la siguiente unidad estudiaremos a mayor profundidad los algoritmos y su representación, pero para 
seguir con el desarrollo de nuestro programa ejemplo, plantearemos la solución como una secuencia de 
pasos en español. 
 
1. Obtener la medida de la base (𝒃) y la altura (𝒉) 
2. Calcular: á𝒓𝒆𝒂 = 𝒃 ∗ 𝒉 
3. Imprimir el resultado (á𝒓𝒆𝒂) 
Algoritmo 1.1: Calcula el área de un rectángulo 
 
El programa 1.1es otra forma de representar la solución de este problema, se conoce como 
pseudocódigo. 
 
1.4.3 Implementación (codificación) 
 
El algoritmo no puede ser ejecutado por una computadora por ello debe traducirse a un lenguaje de 
programación (como por ejemplo C) para obtener un programa fuente que se traduzca a lenguaje de 
máquina para que sea ejecutado por la computadora. 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 27 
En el siguiente cuadro se muestra la codificación en lenguaje C del algoritmo, por ahora no es necesario 
que lo comprendas puesto que esto lo podrás hacer conforme vayas aprendiendo a programar, por lo 
pronto solamente se muestra con fines ilustrativos. 
 
#include<stdio.h> 
#include<stdlib.h> 
main() 
{ 
 int b,h, area; 
printf("Ingresa la base y altura:"); 
scanf("%d %d", &b,&h); 
 area = b * h; 
 printf("Area = %d", area); 
} 
Programa 1.2: Programa en C que calcula área de un rectángulo 
 
1.4.4 Validación y pruebas 
 
Esta fase debe hacerse una vez que se ha diseñado el algoritmo y después de que se codifica, sirve 
para verificar que son correctos. Existen diferentes formas de probar que la solución es correcta, 
algunas de ellas formales y otras informales: las primera se utilizan para garantizar que el programa o 
algoritmo siempre calcula el resultado deseado para cualquier conjunto de datos de entrada; en cambio, 
en las segundas sólo se prueba que funciona correctamente para algunos datos de entrada, tratando de 
encontrar posibles errores, en este caso no se puede garantizar el programa o algoritmo calcule la 
salida correcta para cualquier conjunto de datos. En cualquiera de los dos casos, si se encuentra alguna 
falla se debe corregir y volver a realizar pruebas. En este cursoutilizaremos las pruebas de escritorio, 
las cuales se explicarán en la unidad 2. 
 
 
 
 
 
 
 
 
El ejemplo es muy sencillo y si ejecutamos manualmente el programa o algoritmo mostrado en la fase 
anterior, con un caso específico de rectángulo veremos que ambos son correctos. En la siguiente figura 
se ilustra la ejecución del programa: 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 28 
 
Figura 1.2: Ejecución del programa 1.2 
 
 
1.4.5 Documentación 
 
Cualquier proyecto de software por la complejidad que tiene requiere tanto las ideas principales como 
el desarrollo de principio a fin sea documentado, con el fin de que cualquiera puedan entender la lógica 
del programa y de ser necesario pueda modificarlos sin tantas complicaciones. Es común que si se 
desea modificar un programa y no se tiene información acerca de cómo fue construido sea más fácil 
volverlo a hacer que intentar entenderlo. Uno de los mejores ejemplos de la importancia de la 
documentación es el software libre, en el cual colaboran diversos desarrolladores para su elaboración, 
los cuales se encuentran en diferentes puntos geográficos de globo terráqueo, así que la forma de 
entender que está haciendo cada uno y bajo que método es la documentación. Además de que se debe 
tomar en cuenta que se llama software libre porque está disponible el código fuente para que cualquier 
persona pueda modificarlo a su conveniencia. 
 
Como parte de la documentación también deben incluirse manuales de usuario y las normas de 
mantenimiento para que se haga un buen uso del software. 
 
1.4.6 Mantenimiento 
 
Esta fase tiene sentido una vez que fue terminada una primera versión del programa y ya está siendo 
utilizado. Ya que en ésta se actualiza y modifica para corregir errores no detectados o para cambiar y/o 
agregar una nueva función. Por ejemplo, se puede extender el programa 1.1, que calcula el área de un 
rectángulo para que también calcule su perímetro. 
 
Ejemplo 1.2: El siguiente conjunto de instrucciones calcula el área y perímetro de un rectángulo. 
 
 
#include<stdio.h> 
#include<stdlib.h> 
main() 
{ 
 int b,h, area, perimetro; 
printf("Ingresa la base y altura:"); 
 scanf("%d %d", &b,&h); 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 29 
perimetro = 2*b + 2*h; 
area = b * h; 
printf("Perimetro = %d", perimetro); 
 printf("Area = %d", area); 
} 
 
Programa 1.3: Calcula el área y perímetro de un rectángulo 
 
En el programa se resaltan las instrucciones que se añadieron al programa para calcular el perímetro. 
 
Actividad de Autoevaluación 
 
Ingresa al aula virtual para realizar las dos actividades de autoevaluación, la primera trata de un 
pequeño juego tipo maratón en el que pondrás a prueba tus conocimientos, la segunda consiste en un 
cuestionario de opción múltiple. 
 
Consideraciones específicas de la unidad 
 
Para alcanzar los objetivos de esta unidad se ha propuesto una actividad formativa en la cual revises la 
ejecución de un problema apoyándote en una animación que muestra paso a paso la ejecución del 
programa 1.1 que se presentó en esta unidad, en dicha animación se especifica cada uno de los 
elementos que están involucrados en la ejecución de las instrucciones. 
 
Referencias: 
 
 
• Guerrero, F. (s.f.). mailxmail.com. Recuperado el 15 de agosto de 2010, de 
http://www.mailxmail.com/curso-introduccion-lenguaje-c 
 
• Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de 
datos. España: Mc Graw Hill. 
 
• Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.: 
UACM. 
 
• Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México, 
D.F.: La prensas de ciencias, Facultad de Ciencias, UNAM. 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 30 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 31 
Unidad 2: Diseño de algoritmos 
 
Propósitos 
 
En esta unidad: 
• Identificar los datos de entrada y la salida de un algoritmo 
• Diseñar un algoritmo que solucione un problema. 
• Representar el algoritmo en diagrama de flujo y pseudocódigo 
• Verificar que el algoritmo calcule el resultado correcto 
 
Competencia específica 
 
Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo y la 
elaboración del pseudocódigo. 
 
Introducción 
 
En la unidad anterior se describieron los pasos que se requieren para construir un software, sin lugar a 
dudas, la fase más importante es el diseño de la solución, ya que es aquí donde se debe crear un 
modelo que corresponde a los pasos que llevan a la solución del problema en cuestión, y se conoce 
como algoritmo. Para construir esta solución se requiere no sólo de inteligencia, sino también de 
creatividad, ya que el programador sólo cuenta con la especificación del problema y su experiencia en 
resolver problemas de una forma estructurada. 
 
En este apartado se introduce formalmente el concepto de algoritmo, hablaremos de sus características 
y estudiaremos dos formas de representarlos: una gráfica, conocida como diagramas de flujo; y la otra 
similar a un lenguaje humano, en este caso español, la cual se llama pseudocódigo. También se 
describen los tres tipos de estructuras de control: secuenciales, selectivas y repetitivas, que son las 
instrucciones con que se cuenta en la programación estructurada para diseñar soluciones. 
 
Para logar nuestro objetivo se introduce “el mundo de la ardilla”, en el cual se deben solucionar 
problemas mediante un conjunto de instrucciones específicas que puede ejecutar una ardilla sobre un 
tablero. 
 
2.1 Concepto de algoritmo y características 
 
La palabra algoritmo proviene del nombre de un matemático persa conocido como Mohammad Al-
KhoWârizmi, nacido alrededor del 780 d.c. en KhoWârizm, de ahí el su seudónimo. Se considera como 
el padre de la algoritmia porque definió las reglas paso a paso para sumar, restar, multiplicar y dividir 
números decimales. La traducción al latín de Al-Khwārizmī es algoritmi, que da origen a la palabra 
algoritmo (Joyanes & Zohanero, 2005). 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 32 
Formalmente, un algoritmo se define como una secuencia finita de instrucciones precisas y eficaces 
para resolver un problema, que trabaja a partir de cero o más datos (entrada) y devuelve un resultado 
(salida).4
 
 
 Para ilustrar este concepto se presenta el siguiente escenario ficticio, que hemos llamado: 
El mundo de la ardilla 
 
Supongamos que una ardilla ha sido entrenada para realizar las instrucciones que se muestran en la 
tabla 2.1, sobre un tablero. 
 
 
INSTRUCCIÓN 
 
DESCRIPCIÓN DE LOS MOVIMIENTOS DE LA ARDILLA 
avanza() Se mueve una ubicación en la dirección actual 
giraIzquierda() Voltea a la izquierda 
dejaBellota() Coloca una bellota en la ubicación actual 
hayBellota() Responde si hay o no bellotas en la posición actual 
hayPared() Responde si hay o no pared en la ubicación siguiente 
recogeBellota() La ardilla coloca en su boca una bellota que está en la ubicación actual5
bellotasRecogidas() 
 
Dice el número de bellotas que tiene en la boca 
Tabla 2.1: Lista de instrucciones que puede ejecutar la ardilla 
 
 
Los paréntesis al final de cada instrucción sirven para identificar que se trata de una orden que puede 
ejecutar la ardilla. Si observas la lista de instrucciones podrás darte cuenta que, la ardilla no es capaz 
de voltear a la derecha y mucho menosde responder a órdenes más complejas como “mueve una 
bellota que se encuentra en la primera casilla del tablero al final del mismo”. Sin embargo, podría 
realizar ambas tareas si se le dan las instrucciones precisas en términos de las acciones que sabe 
hacer. Por ejemplo, para que la ardilla gire a la derecha tendríamos que ordenarle tres veces que girará 
a la izquierda, es decir, la secuencia de instrucciones que debe ejecutar es: 
giraIzquierda() 
giraIzquierda() 
giraIzquierda() 
 
 
4 Esta definición es una adaptación de la que aparecen en (Viso & Pelaez, 2007, pág. 3) 
5La ardilla poseen una bolsa donde almacena cualquier cantidad de bellotas. 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 33 
Estos pasos constituyen un algoritmo, el cual soluciona el problema de hacer que la ardilla gire a la 
derecha. 
 
Una de las características principales de los algoritmos es que cada paso debe estar definido de forma 
clara y precisa, sin ambigüedades, de tal manera que pueda ejecutarse de manera inequívoca, por 
ejemplo, en el mundo de la ardilla, la instrucción gira() sería una instrucción ambigua, ya que la ardilla 
no sabría si debe girar a la derecha o a la izquierda. 
 
Otra característica de los algoritmos es que siempre terminan, por lo que no puede ser una lista infinita 
de pasos. Y tampoco puede contener pasos que sean irrealizables o cuya ejecución sea infinita, pues 
en este caso no sería posible calcular el resultado deseado, si una instrucción está bien definida y es 
eficaz se puede asegurar que su ejecución termina con éxito, sin embargo, esto no garantiza, de 
ninguna manera, que el algoritmo también termine. 
 
Por lo anterior, al diseñar un algoritmo se debe garantizar que dada cualquier entrada siempre termine y 
calcule la respuesta correcta. De tal manera que todo algoritmo debe tener las siguientes 
características: 
 
1.Entrada. 
2. Salida. 
3. Definido. 
4. Eficaz. 
5. Terminación. 
 
Una vez que se ha diseñado un algoritmo, se recomienda realizar una prueba de escritorio para verificar 
si funciona correctamente, ésta consiste en ejecutar el algoritmo utilizando papel y lápiz, se propone 
datos de entrada específicos y se realiza cada una de las instrucciones en el orden establecido, 
registrando los cambios que se producen después de la ejecución de cada instrucción. De esta manera, 
se valida que el resultado obtenido en la prueba de escritorio corresponda al resultado deseado (el 
correcto). 
 
2.2. Representación de algoritmos 
 
Existen diversas formas de representar un algoritmo, en la unidad anterior expusimos diversas formas 
de representar la solución del problema de calcular el área de un rectángulo, por ejemplo, en el 
programa 1.1 se expresa la solución en pseudocódigo, después en el algoritmo 1.1 se representa en 
lenguaje natural (español) y en el programa 1.2 se utiliza el lenguaje de programación C, o se puede 
expresar mediante la fórmula matemática: 
 
á𝑟𝑒𝑎 = 𝑏𝑎𝑠𝑒 × 𝑎𝑙𝑡𝑢𝑟𝑎 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 34 
Todas estas representaciones, excepto el lenguaje natural, se consideran formales, y cabe mencionar 
que existen más, sin embargo, las representaciones más comunes son el pseudocódigo y los diagramas 
de flujo. La primera, generalmente se utilizar por su parecido con el lenguaje natural (español, inglés, 
francés o cualquier otro) y porque su codificación en un lenguaje de programación estructurado y 
modular, como C, es directa. En cambio, los diagramas de flujo son totalmente gráficos, lo que hace 
más fácil seguir el orden en que se ejecutan las instrucciones. Es importante mencionar que se puede 
utilizar cualquiera de las dos representaciones para diseñar un algoritmo, pues en cualquiera de los dos 
se puede expresar cualquier algoritmo estructurado, de tal manera que la más conveniente depende de 
cada programador. En las siguientes secciones se presenta cada uno de ellos y así podrás decidir cuál 
prefieres. 
 
2.2.1. Pseudocódigo 
 
El pseudocódigo es un lenguaje de especificación formal de algoritmos. La solución de un problema se 
representa de manera narrativa utilizando palabras claves, generalmente verbos, escritos en un 
lenguaje natural, que en nuestro caso será español. Para ilustrarlo construyamos un algoritmo que 
resuelva el siguiente problema. 
 
Problema 2.1: En la figura 2.1.a. se muestra el estado inicial de un tablero, el cual contiene en la primer 
casilla (de izquierda a derecha) una bellota, representada por un asterisco (*), y a la ardilla, 
representada por una flecha que apunta hacia la dirección que está mirando. El problema consiste en 
diseñar un algoritmo que la ardilla pueda ejecutar para llegar al estado meta representado en la figura 
2.1.b., que implica que la ardilla lleve la bellota a la última casilla. Para resolverlo se tiene la siguiente 
información: 
 
a) El mundo es conocido, es decir, se sabe de antemano que el tablero está cercado por paredes y 
sólo tiene seis casillas colocadas en línea. 
b) Al inicio la ardilla está en la primera casilla volteando hacia arriba y no tiene ninguna bellota en 
la boca. 
c) En la primera casilla hay una bellota. 
 
 
* 
Estado inicial (a) 
 
 
 * 
Estado final (b) 
 
Figura 2.1: Primer mundo lineal 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 35 
Análisis: Haciendo un rápido análisis del problema, nos podemos dar cuenta que la ardilla debe 
recoger la bellota, avanzar cinco casillas y soltar la bellota, esto traducido en un algoritmo queda de la 
siguiente forma: 
 
 
 
Inicio 
recogeBellota() 
giraIzquierda() 
giraIzquierda() 
giraIzquierda() 
avanza() 
avanza() 
avanza() 
avanza() 
avanza() 
dejaBellota() 
Fin 
Algoritmo 2.1. Primer mundo de la ardilla 
 
 
En este caso las instrucciones son parecidas al lenguaje natural. 
 
 
2.2.2. Diagrama de flujo 
 
 
Los diagramas de flujo son una representación gráfica de un algoritmo que utiliza símbolos para 
representar las instrucciones y flechas para unirlas e indicar el orden en que deben ejecutarse -llamadas 
líneas de flujo. Estos símbolos fueron normalizados por el Instituto Norteamericano de Normalización 
ANSI (American National Standars Institute, por sus siglas en inglés). Los símbolos más utilizados se 
muestran en la siguiente tabla. 
 
 
Símbolo Descripción 
 Terminal. Representa el inicio y el final de un algoritmo. 
 
 
Terminal 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 36 
 Entrada y Salida (E/S). Representa la lectura de datos desde el 
dispositivo de entrada estándar, así como la impresión de datos 
en el dispositivo de salida estándar. 
 
Proceso. Representa cualquier tipo de operación que pueda 
originar un cambio de la información almacenada en memoria, 
asignaciones u operaciones aritméticas. 
 
Decisión. Nos permite analizar una situación, con base en los 
valores verdadero y falso. Toma una decisión de las instrucciones 
que a continuación ejecuta el algoritmo. 
 Conector. Sirve para enlazar dos partes cualesquiera del 
diagrama que están en la misma página. 
 
 Línea de flujo. Indica el orden de la ejecución de las operaciones. 
La flecha indica cuál es la siguiente instrucción que se debe 
realizar. 
 Conector. Conecta a dos puntos del diagrama cuando éstos se 
encuentran en páginas diferentes. Representa el inicio y el final 
de un programa. 
 Llamada a subrutina. Llama a un proceso determinado o 
subrutina. Una subrutina es un módulo independiente del módulo 
principal, que realiza una tarea determinada y al finalizarregresa 
el control de flujo al módulo principal. 
Tabla 2.2 Símbolos de los diagramas de flujo 
 
Problema 2.2: Ahora la tarea de la ardilla es que cambie las bellotas que están en la primera fila (ver 
figura 2.2.a) a la segunda y viceversa, dejándolas en la misma columna (ver figura 2.2.b). 
 
Las condiciones de inicio son: 
 
a) El mundo es conocido y sabemos exactamente dónde hay bellotas. 
b) La ardilla no tiene ninguna bellota en la boca al inicio. 
c) El mundo está encerrado por paredes y si la ardilla choca contra una se considerará un error 
garrafal. 
d) En este punto los científicos ya entrenaron a la ardilla para ejecutar la orden giraDerecha(), por 
lo tanto, ya puede ser usada en el algoritmo. 
 
Decisión 
Proceso 
 
E/S 
Subrutina 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 37 
 
* * * 
 * * * 
Estado inicial (a) 
 
 
 * * * 
* * * 
Estado final (b) 
 
Figura 2.2:Segundo mundo de la ardilla 
 
Análisis: De acuerdo con la figura 2.2, inciso a, para que la ardilla cumpla con su tarea debe realizar los 
siguientes pasos: recoger la bellota, girar a la derecha, avanzar, dejar la bellota, girar a la izquierda, 
avanzar, recoger la bellota, girar a la izquierda, avanzar, dejar la bellota, voltear a la derecha y avanzar. 
Hasta este punto las coordenadas de la ardilla son: primera fila y tercera casilla (volteando a la derecha, 
como al inicio). 
 * * * 
* * * 
 
Si la ardilla repite otra vez este bloque de instrucciones, logrará cambiar las siguientes dos bellotas; al 
repetirlo nuevamente cambiaría las últimas dos, salvo que cuando la ardilla avance después de haber 
dejado la bellota chocará contra la pared, por lo tanto, antes de que avance –última instrucción del 
bloque – tenemos que verificar que no haya pared. La condición para que la ardilla repita el bloque de 
instrucciones es que no haya pared. 
 
De lo anterior tenemos el siguiente algoritmo representado en diagrama de flujo. 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 38 
 
Algoritmo 2.2. Solución problema 2.2 
 
Actividad 1. Representación de algoritmos 
 
En esta actividad, reflexionarás sobre el uso de los diagramas de flujo y pseudocódigos a partir de 
varias preguntas. Posteriormente, ingresarás un comentario al respecto en el Foro Representación de 
algoritmos. 
 
Evidencia de aprendizaje. Planteamiento del problema 
 
Como primera evidencia de aprendizaje para esta unidad deberás elegir un problema que se pueda 
solucionar mediante un programa de computadora y realizarás la descripción precisa del mismo. 
 
2.3. Estructuras de control 
 
Los primeros lenguajes de programación de alto nivel permitían realizar “saltos” a diferentes líneas del 
código mediante la instrucción GOTO, esto tiene el gran inconveniente que cuando se hacía una 
modificación en el programa, era necesario modificar todas las instrucciones GOTO para asegurar que 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 39 
los saltos se hicieran a las líneas de código correctas. Además de lo tedioso que podía ser estar 
corrigiendo el programa, las instrucciones GOTO lo hacían difícil de leer. 
 
En 1966 Corrado Böhm y Giuseppe Jacopini demostraron que “cualquier algoritmo puede diseñarse e 
implementar utilizando únicamente tres tipos de estructuras de control: secuenciales, condicionales y 
repetitivas; esto es, sin utilizar GOTO”(Böhm & Jacopini, 1966), basándose en este resultado, a 
principios de los años 70´s Edsger Dijkstra se dio cuenta que la forma en la que los lenguajes de 
programación de alto nivel podían modificarse sin problemas era eliminando las instrucciones GOTO (o 
similares), así que propuso un nuevo estilo de programación al que llamó programación estructurada, 
ésta incluye estructuras secuenciales, selectivas y repetitivas, conocidas como estructuras de control. 
 
 
2.3.1. Estructuras secuenciales 
 
Las estructuras secuenciales son un bloque de instrucciones que se ejecutan una tras otra, en el mismo 
orden en el que están escritas. 
Un ejemplo de este tipo de instrucciones son todas las que se utilizaron en el algoritmo 2.1. Veamos 
otro ejemplo. 
 
Problema 2.3: Ahora la ardilla se enfrenta a un nuevo mundo (ver figura 2.3) en el que su tarea consiste 
en recoger las dos bellotas colocadas en la posiciones indicadas por la figura 2.3.a y llevarlas a la 
última casilla de la primera fila, como se muestra en la figura 2.3.b. Considerando que tenemos un 
mapa del nuevo mundo y sabemos en qué casillas están colocadas las bellotas diseñemos un algoritmo 
para que la ardilla realice su cometido. 
 
 
 
 * 
 * 
 
Estado inicial (a) 
 
 
 ** 
 
 
Estado final (b) 
 
 
Figura 2.3.Tercer mundo de la ardilla 
 
 
 
Análisis: Nuevamente el problema planteado es muy sencillo de analizar, la ardilla debe hacer los 
movimientos que le permitan recoger la primera bellota, después ir por la segunda y llegar a la última 
casilla de la prime fila. Otra posible opción es que recoja la primera bellota, la lleve a la primera casilla, 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 40 
regrese por la segunda bellota y también la lleve a la primera casilla. Esta última opción requiere más 
esfuerzo por parte de la ardilla, dado que la ardilla no tiene limitado el número de bellotas que puede 
llevar en la boca, entonces la primera opción es más eficiente. El algoritmo quedaría como: 
 
 
 
Inicio 
avanza() 
giraIzquierda() 
avanza() 
avanza() 
recogeBellota() 
giraIzquierda() 
avanza() 
giraDerecha() 
avanza() 
avanza() 
recogeBellota() 
avanza() 
dejaBellota() 
dejaBellota() 
Fin 
 
Algoritmo 2.3. Solución problema 2.3. 
 
 
 
Las instrucciones selectivas, más usuales, que una computadora es capaz de realizar son: Imprimir, 
Leer y Asignar. La representación en diagrama de flujo de estas instrucciones se ilustra en la siguiente 
tabla, en cuanto que la representación en diagrama de flujo se utilizan los mismos verbos y símbolos 
pero encerrados entre un símbolo de proceso. 
 
 
 
 
 
 
 
 
 
 
 
Fundamentos de programación 
Programa Desarrollado 
 
 
 
 
Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 41 
Tipo Pseudocódigo Diagrama de flujo Descripción 
Asignación <var> ← <Expresión> 
 Asigna el valor de la expresión 
a la variable <var> 
Entrada y 
Salida 
Imprimir 
<mensaje/variable> 
 Envía a pantalla un mensaje o 
el valor de la variable indicada. 
En caso de que se imprima un 
mensaje debe estar escrito 
entre comillas, si es el valor de 
una variable sólo se pondrá el 
nombre de la variable (sin 
comillas) 
Leer <variable> 
 
 
 
 
Lee un dato del teclado y lo 
almacena en la variable 
indicada. 
Tabla 2.3 Estructuras secuenciales 
 
2.3.2 Estructuras selectivas 
 
En esencia, las estructuras selectivas se utilizan cuando la solución de un problema conlleva tomar una 
decisión, ya que se ejecuta un conjunto determinado de instrucciones dependiendo de si se cumple o no 
una condición en un momento determinado. Por ejemplo, la ardilla solamente puede avanzar si se no 
hay pared, en este caso la condición es no hayPared() y la acción que se realiza es avanza(). 
Revisemos el siguiente ejemplo: 
 
Problema 2.4: Nuevamente la ardilla está en el mundo lineal que se ilustra en la figura 2.4.a, tiene que 
recoger una bellota y llevarla a la última casilla como se muestra en la figura 2.4.b, sólo que ahora no 
sabe con precisión en que casilla está la bellota y la única información con la que cuenta es la siguiente: 
 
a) En el tablero hay una sola bellota. Las casillas donde puede

Continuar navegando