Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

FUNDAMENTOS DE

PROGRAMACIÓN
FUNDAMENTOS DE
PROGRAMACIÓN

JAIME ALBERTO ECHEVERRI ARIAS


GILDARDO ANTONIO ORREGO VILLA
FUNDAMENTOS DE PROGRAMACIÓN

Primera edición: 2012

© Universidad de Medellín
© Ediciones de la U
© Jaime Alberto Echeverri Arias
© Gildardo Antonio Orrego Villa

ISBN 000-000-0000-00-0

Editor:
Leonardo David López Escobar
e-mail: [email protected]
Universidad de Medellín
Carrera 87 No. 30–65
Bloque 20 segundo piso
Teléfono: 340 53 35

Distribución y ventas:
Universidad de Medellín Ediciones de la U
e-mail: [email protected] e-mail: [email protected]
www.udem.edu.co www.edicionesdelau.com
Carrera 87 No. 30–65 Carrera 27 #27-43 Bogotá
Teléfono: 340 52 42 Teléfono: (57 1) 3203510
Diagramación con LATEX:
Paulo Mora Noguera
e-mail: [email protected]

Impresión:
Xpress Estudio Gráfico y Digital S.A.
Av. Américas No. 39-53 Bogotá
PBX: 57(1) 602 0808 Ext. 204
e-mail: [email protected]

Todos los derechos reservados.


Esta publicación no puede ser reproducida, ni en todo ni en parte, por ningún medio
inventado o por inventarse, sin el permiso previo, por escrito, de la Universidad de
Medellín y de Ediciones de la U.

Hecho el depósito legal.


Medellín – Colombia.
Durante los últimos años he tenido los mejores maestros de mi vida, quie-
nes han compartido conmigo duras jornadas de exámenes, trabajos y ta-
lleres, ellos durante este tiempo me han enseñado que “solo se aprende
cuando se hace”. Gracias a mis alumnos de fundamentos de programación
por ser la fuente de inspiración y apoyo para el desarrollo de este trabajo
y a todos aquellos que indirectamente, o a propósito, trataron de impedir
este trabajo y me hicieron redoblar esfuerzos.
Jaime Alberto Echeverri Arias

Gracias a la Facultad de Ingeniería de Sistemas de la Universidad de


Medellín por darme la oportunidad de presentarles este trabajo; gracias
también a mis estudiantes que a partir de ese cúmulo de preguntas han
originado en mi la sabiduría necesaria para plasmarla en este libro; pero
muy en especial le doy gracias a Dios y mi familia que son en gran parte
mi razón de ser.
Gildardo Antonio Orrego Villa
AGRADECIMIENTOS

Para la elaboración de este texto he recibido ayuda de los diferentes profeso-


res de la asignatura Fundamentos de Programación, quienes a lo largo de su
trabajo con cientos de estudiantes de las carreras de ingeniería han logrado
adquirir una amplia experiencia en cuanto a las temáticas fundamentales y
los puntos críticos en la enseñanza de esta divertida asignatura. Mi espe-
cial agradecimiento a los profesores: Juan David Trujillo, Lina Tobón, Juan
David Carrasquilla, Héctor Jairo Ortiz, Jesús Balaguera, Darío León Valen-
cia, Walter Cano, por su aporte fundamental para el planeamiento de los
ejemplos propuestos.

Jaime Alberto Echeverri Arias

Agradezco a Diego Hernán Montoya por su apoyo, y a mi compañero Jaime


Alberto por haberme permitido la coautoría de este texto. En especial, a
los estudiantes de la Universidad de Medellín y de la Escuela de Ingenie-
rías de Antioquia, porque con sus preguntas nos motivaron para mejorar el
desarrollo de este texto.

Gildardo Antonio Orrego Villa


CONTENIDO

PRÓLOGO 15

INTRODUCCIÓN 17

CAPÍTULO 1: INTRODUCCIÓN AL DISEÑO DE ALGORITMOS 19

1.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.2 Generalidades de los algoritmos . . . . . . . . . . . . . . . . . . . . 21

1.3 Concepto de algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . 21

1.4 Metodología para el proceso enseñanza–aprendizaje en el diseño de


algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1.5 Fases para la ejecución de un algoritmo . . . . . . . . . . . . . . . 23

1.6 Etapas para la solución algorítmica de problemas por computador 24

CAPÍTULO 2: ESTRUCTURA DE UN ALGORITMO 29

2.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.2 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.3 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2.3.1 Datos numéricos . . . . . . . . . . . . . . . . . . . . . . . . 32

2.3.2 Datos lógicos (booleanos) . . . . . . . . . . . . . . . . . . . 32

2.3.3 Dato carácter . . . . . . . . . . . . . . . . . . . . . . . . . . 33


12 Contenido

2.4 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.5 Concepto de variable y constante . . . . . . . . . . . . . . . . . . . 36

2.6 Clasificación de las variables . . . . . . . . . . . . . . . . . . . . . . 37

2.6.1 Variables por su contenido . . . . . . . . . . . . . . . . . . . 37

2.6.2 Variables por su uso . . . . . . . . . . . . . . . . . . . . . . 37

2.7 Estructura del diseño de un algoritmo en pseudocódigo . . . . . . . 39

2.8 Propuesta metodológica para el diseño de algoritmos . . . . . . . . 41

CAPÍTULO 3: ESTRUCTURAS DE PROGRAMACIÓN 51

3.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

3.2 Mapa conceptual para estructuras de programación . . . . . . . . . 52

3.3 Estructura secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.4 Estructura selectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

3.5 Estructura condicional simple . . . . . . . . . . . . . . . . . . . . . 57

3.5.1 Estructura selectiva múltiple . . . . . . . . . . . . . . . . . 67

3.5.2 Condicionales anidados . . . . . . . . . . . . . . . . . . . . . 72

3.6 Vicios comunes de los programadores . . . . . . . . . . . . . . . . . 79

3.7 Estructura repetitiva . . . . . . . . . . . . . . . . . . . . . . . . . . 85

3.7.1 Ciclos centinela . . . . . . . . . . . . . . . . . . . . . . . . . 86

3.7.2 Ciclos contador . . . . . . . . . . . . . . . . . . . . . . . . . 87

3.8 Ciclos anidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

CAPÍTULO 4: VECTORES 137

4.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

4.2 Concepto de vector . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

4.3 Operaciones con vectores . . . . . . . . . . . . . . . . . . . . . . . . 138


Fundamentos de programación 13

4.3.1 Operaciones sobre los elementos de un vector . . . . . . . . 138

4.3.2 Operaciones sobre el arreglo completo . . . . . . . . . . . . 138

4.3.3 Asignación con vectores . . . . . . . . . . . . . . . . . . . . 140

4.3.4 Lectura/escritura de datos de vectores . . . . . . . . . . . . 146

4.4 Ordenamiento de un vector . . . . . . . . . . . . . . . . . . . . . . 155

4.5 Búsqueda en un vector . . . . . . . . . . . . . . . . . . . . . . . . . 156

CAPÍTULO 5: MATRICES 159

5.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

5.2 Concepto de matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

5.3 Declaración de matrices . . . . . . . . . . . . . . . . . . . . . . . . 160

5.4 Referencia a los elementos de una matriz . . . . . . . . . . . . . . . 161

5.5 Recorridos en una matriz . . . . . . . . . . . . . . . . . . . . . . . 166

CAPÍTULO 6: PROGRAMACIÓN MODULAR 173

6.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

6.2 Conceptos básicos de programación modular . . . . . . . . . . . . . 174

6.3 Comunicación entre los módulos . . . . . . . . . . . . . . . . . . . 175

6.4 Parámetros de un subprograma . . . . . . . . . . . . . . . . . . . . 175

6.4.1 Parámetro según su ubicación en el programa . . . . . . . . 176

6.4.2 Parámetro según el paso del valor . . . . . . . . . . . . . . . 176

6.4.3 Formas de paso de parámetros . . . . . . . . . . . . . . . . 178

6.5 Tipos de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.5.1 Variable local . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.5.2 Variable global . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.6 Subprogramas: funciones y procedimientos . . . . . . . . . . . . . . 179


14 Contenido

6.6.1 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.6.2 Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . 202

6.7 Las variables locales y globales . . . . . . . . . . . . . . . . . . . . 205

CONCLUSIONES 213

GLOSARIO 215

BIBLIOGRAFÍA 219
PRÓLOGO

El desarrollo tecnológico actual ha hecho de la programación de computado-


res, un campo esencial en la mayoría de las áreas de la ciencia. Es difícil
encontrar un campo de aplicación en el cual la ciencia de la computación no
tenga herramientas que faciliten las tareas cotidianas. En los programas de
las carreras de Ingeniería Ambiental, Civil, Financiera, de Sistemas y Tele-
comunicaciones de la Universidad de Medellín contemplan, dentro de su plan
de estudios, la asignatura Fundamentos de Programación, brindándoles los
conceptos necesarios para desarrollar la habilidad de diseñar programas pa-
ra computadores. En las clases teóricas se trabaja con pseudocódigo1 . Esto
permite codificar un programa con mayor agilidad que en cualquier lenguaje
de programación, con la misma validez semántica, normalmente se utiliza
en las fases de análisis o diseño de software, o en el estudio de un algoritmo.
Forma parte de las distintas herramientas de la ingeniería de software.

En este texto se utilizará el lenguaje de programación MatLab. Es una ne-


cesidad sentida en la Universidad de Medellín contar con un lenguaje que
permita, de manera rápida, poner en práctica los conceptos teóricos tratados
en las clases de Fundamentos de Programación y Programación Orientada
a Objetos (para estudiantes de Ingeniera de Sistemas), lo que ha motivado
la redacción de este texto. Su propósito es acercar a los estudiantes a una
herramienta potente y fácil de utilizar en un tiempo reducido, con el fin
de probar los algoritmos diseñados en clase y validarlos de acuerdo con los
requerimientos impuestos. Se pretende con este texto servir de guía a los es-
1
“Un pseudocódigo (falso lenguaje) es una serie de palabras léxicas y gramaticales
referidas a los lenguajes de programación, pero sin llegar a la rigidez de la sintaxis de estos
ni a la fluidez del lenguaje coloquial” (tomado de http://pseudocodigobasico.galeon.com).
16 Prólogo

tudiantes de Fundamentos de Programación de la Universidad de Medellín


y de otras universidades para que puedan poner en práctica los conceptos
tratados en la clase teórica.

La algoritmia lleva varias décadas aplicándose en los computadores; pero


aún no ha alcanzado un nivel de evolución lo suficientemente alto como
el que tienen otras ciencias y disciplinas, tales como las matemáticas, la
medicina, la física y la química.
INTRODUCCIÓN

Diseñar algoritmos es una actividad exigente; es una disciplina que permite


al programador situarse al frente de la solución de un problema de manera
organizada y hábil, evitando una serie de errores de análisis y lógicos que
posiblemente no le dejarán tener un buen desempeño. Entre otras, las de-
bilidades que tiene el ser humano para desarrollar la solución de problemas
y, en particular, en el diseño de algoritmos son: pereza mental, distracción,
desconcentración; falta de análisis, creatividad, sentido común, dedicación
y planeación lógica.

Para trabajar la disciplina de programación, las cualidades que fortalecen


a un programador son: el análisis lógico, la creatividad, el entusiasmo, el
dinamismo, la concentración, la atención, la dedicación, el sentido común,
la memoria, el orden y el planeamiento lógico.

En cada capítulo del texto se presentan conceptos de los diferentes temas


con ejemplos y problemas resueltos que le ayudarán a visualizar diferentes
maneras de construir algoritmos. Al final de estos, se presentan problemas
propuestos con los cuales el lector se podrá ejercitar para adquirir la habi-
lidad en el diseño de algoritmos.

El texto está dividido en 4 partes: la primera parte aborda las temáticas re-
lacionadas con la ciencia de la programación, conformada por dos capítulos:
uno que tata los conceptos básicos del diseño de algoritmos (variables, tipos
de datos y tipos de expresión) y otro relacionado con la estructura de un
algoritmo. La segunda parte hace un tratado a las estructuras de programa-
ción, conformado por dos capítulos, así: uno para explicar las estructuras
de programación secuencial y selectiva o condicional, y otro que trata la
18 Introducción

estructura de programación repetitiva o ciclo. La tercera parte trabaja una


estructura de programación más compleja que las anteriores, denominada
arreglo, la cual está dividida en dos capítulos: vectores y matrices. Final-
mente, la parte cuatro presenta técnicas para solucionar problemas, como
un conjunto de subproblemas que se integran mediante funciones o proce-
dimientos, y no como una unidad.

En cada capítulo se presentan conceptos de los diferentes temas con ejem-


plos y problemas resueltos que le ayudarán a visualizar diversas maneras de
construir algoritmos. Los problemas propuestos están pensados de tal ma-
nera que sirvan como base y ejercitación para otras asignaturas relacionadas
con la programación de computadoras, como: Lenguajes de Programación,
Estructuras de Datos, entre otras. De ahí la gran importancia de desarro-
llarlos. De tal manera, el estudiante conocerá las teorías y técnicas median-
te las cuales podrá desarrollar destrezas lógico–abstractas que le permitan
conceptualizar e implementar algoritmos computacionales que solucionen
problemas matemáticos mediante la estrategia de aprendizaje por ejemplos.

Se sugiere, además, una metodología que les sirve tanto a los docentes como
a los estudiantes en el proceso de enseñanza–aprendizaje. Es recomenda-
ble leer y aplicar las actividades que allí se proponen, pues provienen de
nuestra experiencia como docentes y de la de los estudiantes de distintas
instituciones educativas, tanto de secundaria como universitaria.

Tanto los estudiantes de Tecnología en Desarrollo de Software como los de


Ingeniería tendrán la posibilidad de conocer los principios para el diseño
de algoritmos que les faciliten una aproximación a los lenguajes de alto
nivel y les ayuden en el razonamiento lógico–matemático para la solución
de problemas por medio del uso de herramientas informáticas.
Capítulo

INTRODUCCIÓN
AL DISEÑO DE
ALGORITMOS
Sorprenderse, extrañarse, es comenzar a entender.

José Ortega y Gasset (1883–1955)


Filósofo y ensayista español

En este capítulo va a encontrar:


1.1 Presentación
1.2 Generalidades de los algoritmos
1.3 Concepto de algoritmo
1.4 Metodología para el proceso enseñanza–aprendizaje en el diseño
de algoritmos
1.5 Fases para la ejecución de un algoritmo
1.6 Etapas para la solución algorítmica de problemas por computador

1.1. PRESENTACIÓN

En la actualidad, todas las áreas de la tecnología utilizan herramientas in-


formáticas que permiten agilizar y organizar la información y, por lo tanto,
optimizar los recursos empleados en labores cotidianas dentro de las orga-
nizaciones.

Diseñar algoritmos se ha convertido en una de las disciplinas más solicita-


das en el mundo, para el desarrollo tareas en el diseño y manejo de datos,
en la construcción de software para aplicaciones específicas y su respectivo
manejo haciendo que las tecnologías en desarrollo de software tengan una
importancia preponderante para el desarrollo de un país; así quedó con-
firmado en el clúster de Tecnologías de la Información y la Comunicación
(TIC). Para trabajar en la disciplina de la programación, las cualidades que
fortalecen a un programador son el análisis lógico, la creatividad, el entu-
siasmo, el dinamismo, la concentración, la atención, la dedicación, el sentido
común, la memoria, el orden y el planeamiento lógico.
20 Capítulo 1: Introducción al diseño de algoritmos

El desarrollo de algoritmos lleva varias décadas aplicándose en los compu-


tadores, pero aún no ha alcanzado el nivel de evolución lo suficientemente
alto como el que tienen otras ciencias y disciplinas, tales como las matemáti-
cas, la medicina, la física y la química. Sin embargo, ha servido de base para
el desarrollo de estas, y a la par con las ciencias, la disciplina de diseñar
algoritmos ha continuado su proceso de desarrollo, tratando de suplir las
complejas necesidades humanas y sirviendo de apoyo a las demás ciencias.

El presente capítulo tiene como fin primordial inducir y orientar los con-
ceptos básicos para el diseño de algoritmos, los cuales se podrían codifi-
car para obtener programas computacionales. En efecto, algunos problemas
planteados y los algoritmos diseñados estarán resueltos en un lenguaje que
puede llevarse a un computador. Como se parte de lo más simple, no es
necesario que el lector deba tener alguna fundamentación o conocimientos
previo de programación para diseñar un algoritmo; basta con que aplique
la metodología que se propone dentro de este texto y de tal manera, podrá
fundamentarse en esta disciplina; sin embargo, podrá fundamentarse para
el manejo del lenguaje de programación.

El diseño de algoritmos va a la par que los desarrollos tecnológicos, pues


a medida que avanza la informática, también progresan las herramientas
de programación. Entre otras herramientas se conocen: diagramas de flu-
jo, diagramas rectangulares, pseudocódigo y las modernas herramientas de
Lenguajes para el modelado tales como UML (Unified Modeling Language).
Dichas herramientas se pueden utilizar según la necesidad; además, permi-
ten que se pueda pasar de una herramienta a otra, sin temor a errores de
consistencia; todo depende de la necesidad para saber qué herramienta utili-
zar. Es precisamente como el carpintero, que dependiendo de lo que necesita
hacer, utiliza la herramienta adecuada que le facilite el trabajo. Sin embar-
go, este texto utilizará como herramienta de programación el pseudocódigo,
porque facilita la codificación para diferentes lenguajes.

Diseñar algoritmos es una actividad exigente; es una disciplina que permite


al programador situarse al frente de la solución de un problema de manera
organizada y hábil, evitando una serie de errores lógicos que posiblemente no
le dejarán tener un buen desempeño. Entre otras, las debilidades que tiene
el ser humano para desarrollar la solución de problemas y, en particular, en
Fundamentos de programación 21

el diseño de algoritmos son: pereza mental, distracción, desconcentración;


falta de análisis, poca creatividad, carecer de sentido común.

La planeación lógica facilita la elaboración, puesta a punto y ejecución de


algoritmos.

1.2. GENERALIDADES DE LOS ALGORITMOS

La palabra “algoritmo” se conocía en la época antigua como “algorism”.


Desde la Antigüedad ya se conocían algoritmos; por ejemplo, 300 años a. de
C. se tuvo un procedimiento sistemático, conocido como “algoritmo de Eu-
clides”, con el cual se hallaba el máximo común divisor (MCD), de bastante
utilidad en la teoría de números.

Se podría decir que la palabra algoritmo proviene del nombre del matemá-
tico persa del siglo IX Abu Ja’Far Mohamed ibn Músa (al–jwarizm), quien
escribió el texto matemático “Kitab al jabr wál–muqubala”, en el año 825
d. de C.

La ciencia del cálculo aritmético y algebraico denominada “Algoritmia” es


la que compete al desarrollo de esta propuesta; pero, no serán únicamente
problemas matemáticos los que desarrollarán, mas sí aquellos problemas
de tipo cuantitativo que demandan crear un modelo matemático, es decir,
todo aquel fenómeno físico, económico, humano, etc., posible de representar
mediante una fórmula matemática o con las instrucciones de un programa,
con el fin de estudiarlo mejor posteriormente.

1.3. CONCEPTO DE ALGORITMO

Se denomina algoritmo a un conjunto limitado de pasos o instrucciones que


se dan claramente bajo cierta sintaxis, de acuerdo con unas condiciones
establecidas previamente, con el fin de lograr un resultado u obtener una
respuesta, en un tiempo definido.

Un algoritmo es un conjunto limitado de instrucciones que solucionan un


problema o permite hacer una tarea determinada. Se caracteriza porque, en
tiempo definido, con un número finito de pasos, se obtiene el resultado que
da solución a un problema, sin ambigüedades.
22 Capítulo 1: Introducción al diseño de algoritmos

Los algoritmos se clasifican en matemáticos y computacionales. En ambos


tipos de algoritmos los procedimientos obtenidos cumplen las características
de un algoritmo, y solo se diferencian en la lógica utilizada para llegar al
resultado.

Los matemáticos. Dan los pasos con que se efectúa una operación matemáti-
ca; por ejemplo, el algoritmo de la resta, de la multiplicación, de la división
o de la raíz cuadrada.

Uno de los algoritmos de mayor reconocimiento en la teoría de números y


en especial en la computación es el algoritmo de Euclides utilizado para
calcular el MCD de varios números.

Los computacionales. Se procesan mediante el computador. Se subdividen


en cualitativos y cuantitativos.

Los cualitativos describen situaciones del mundo real; tienen aplicación en


inteligencia artificial; por ejemplo: algoritmo para montar una llanta de
bicicleta, algoritmo para fritar unos huevos.

Los cuantitativos producen resultados mediante cálculos aritméticos o ló-


gicos; se aplican en el modelado matemático. Para tal fin, se modela una
fórmula con símbolos matemáticos y se obtiene el resultado mediante cálcu-
los aritméticos o lógicos.; por ejemplo, el algoritmo que genere los primeros
100 números primos, recordando que un número primo es aquel que solo
puede ser dividido exactamente entre la unidad y entre sí mismo.

Un algoritmo se define como una serie lógica y finita de pasos para resolver
un problema; diariamente ejecutamos algoritmos en nuestra cotidianidad;
por ejemplo, los pasos que seguimos para desplazarnos a nuestro lugar de
trabajo, las diferentes actividades realizadas para preparar un delicioso arroz
se pueden clasificar como algoritmos.

1.4. METODOLOGÍA PARA EL PROCESO DE ENSEÑANZA–


APRENDIZAJE EN EL DISEÑO DE ALGORITMOS

Los estudiantes, en su proceso de aprendizaje, presentan dificultades para el


diseño de algoritmos. Para mejorar el desarrollo de estos procesos, se sugiere
que tengan en cuenta las siguientes actividades:

También podría gustarte