Logo Studenta

Lógica de Programación - Niurka Jiménez

¡Este material tiene más páginas!

Vista previa del material en texto

LÓGICA DE PROGRAMACIÓN CON C++ 
INGENIERÍA TRONCO COMÚN 
 
ING. JOSE RODRIGUEZ RUIZ 
DEPTO. DE INGENIERIA EN SISTEMAS COMPUTACIONALES E INFORMATICA 
INSTITUTO TECNOLOGICO DE CELAYA 
 
CONTENIDO 
 PAG. 
INTRODUCCIÓN EDUCACIÓN EN COMPETENCIAS 5 
 
UNIDAD I CONCEPTOS BÁSICOS Y METODOLOGÍA PARA LA 7 
 SOLUCIÓN DE PROBLEMAS POR MEDIO DE COMPUTADORAS 
 
Introducción 7 
1.1 De los problemas a los algritmos y a los programas 8 
1.2 Desarrollo de software para solucionar problemas 10 
1.2.1 Definición de algoritmo 11 
1.2.2 Técnicas de representación de algoritmos 11 
 1.2.2.1 Diagrámas de flujo 13 
 1.2.2.2 Pseudocódigo 14 
1.3 Algoritmos cotidianos 15 
1.4 Breves Prácticas de escritura de algoritmos 17 
1.5 Programas 20 
 1.5.1 Definición de lenguaje 20 
 1.5.2 Lenguajes de bajo nivel 20 
 1.5.3 Lenguajes de alto nivel 21 
 1.5.4 El lenguaje C++ 22 
1.6 Programas en C++ 23 
 1.6.1 Tipos de datos 23 
 1.6.1.1 Datos numéricos 24 
 1.6.1.2 Datos carácter 24 
 1.6.1.3 Datos cadena de caracteres 24 
 1.6.1.4 Datos lógicos o booleanos 25 
 1.6.1.5 Datos apuntador 27 
1.7 Variables, nombres de variables y expresiones 27 
 17.1 Declaración de variables 28 
 1.7.2 Expresiones matemáticas 29 
 1.7.2.1 Conversión de expresiones matemáticas 29 
 1.7.2.2 Precedencia de operadores 30 
 1.7.2.3 Evaluación de expresiones 31 
 1.7.3 Constantes simbólicas 33 
1.8 Entrada/salida 35 
 1.8.1 Operación de salida 35 
 1.8.2 Operación de entrada 39 
 1.8.2.1 Entrada numérica con cin 39 
 1.8.2.2 Entrada de caracteres con cin,get() 39 
 1.8.2.3 Entrada de cadena de caracteres con getline() 39 
1.9 Manipuladores de ancho de campo 41 
1.10 Funciones internas 43 
1.11 Resolución de problemas 46 
1.12 Desarrollo de software 46 
 1.12.1 Ciclo de desarrollo de software 46 
 1.12.1.1 Entender problema 47 
 1.12.1.2 Diseñar algoritmo 47 
 1.12.1.3 Escribir el algoritmo o el programa y probarlo 47 
 1.12.1.4 Documentar el algoritmo o programa 48 
 1.12.2 Ejemplo de la utilización del ciclo de desarrollo de software 48 
 1.12.3 Traducción del pseudocódigo C++ a código C++ (programa) 53 
1.13 Textos en inglés para su traducción 55 
 
 
 
 
 
 
 
UNIDAD II ESTRUCTURAS BÁSICAS DE CONTROL 60 
 
2.1 Estructuras de repetición (lazos) 60 
 2.1.1 Instrucciòn while (mientras) 
 2.1.2 Métodos para controlar las repeticiones (lazos) 64 
 2.1.2.1 Control del lazo por contador 65 
 2.1.2.1.1 Utilización del encabezado #include<iomanip> 68 
 2.1.2.1.2 Cómo concatenar en una variable todas las líneas de salida 72 
 del programa 
 2.1.2.1.3 Validación de datos de entrada 76 
 Validación de datos nunéricos 76 
 Validación de datos cadena de caracteres 77 
 2.1.2.2 Control del lazo por dato centinela 80 
 2.1.2.3 Control del lazo por pregunta directa 83 
 2.1.3 Instrucción for (lazo contado) 86 
 2.1.4 Instrucción do..while92 
 
2.2 Generación de números aleatorios 95 
 2.2.1 Escalamiento a un rango real entre 0.0 y <1.0 97 
 2.2.2 Escalamiento a un rango entero entre 0 y N-1 98 
 2.2.3 Escalamiento a un rango entero entre 1 y N 98 
 2.2.4 Escalamiento a un rango entero entre A y B 99 
2.3 Contadopres y acumuladores 100 
2.4 Repeticiones anidadas 102 
2.5 Estructuras de decisión 105 
 2.5.1 Instrucción if 105 
 2.5.2 Instrucción if..else 110 
 2.5.3 Instrucción switch 119 
 2.5.4 Instrucción de decisión anidadas 127 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PENDIENTES 
 
UNIDAD III ARREGLOS 
 
UNIDAD IV MANEJO DE MÓDULOS 
 
4.1 Concepto y características de un módulo 
4.2 Clasificación de los módulos 
 4.2.1 funciones 
4.3 Operaciones de módulos y sus parámetros 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
LÓGICA DE PROGRAMACIÓN CON C++ 
INTRODUCCIÓN 
 
EDUCACIÓN EN COMPETENCIAS 
 
 La educación actual debe ser una educación centrada en la naturaleza humana, lo que trae 
una consecuencia muy importante: la educación debe preparar para la vida. Esto obliga a 
considerar en la planeación de cualquier curso escolar las dos grandes ramas del 
conocimiento: las ciencias y las humanidades. 
 Con respecto a la forma de facilitar está educación, la escuela debe fomentar el desarrollo 
de competencias en el ser humano (lectura, escritura, análisis, solución de problemas, etc.), 
ya que estas son apoyos invaluables para toda persona que desee apropiarse de un 
conocimiento. 
 Aquí, la palabra competencia no se refiere a desafiar a alguien más para tratar de ganar y 
demostrar que se es “mejor”, como sería el caso de una competencia deportiva; sino que se 
refiere a la capacidad de una persona para desempeñar una actividad cualquiera con un alto 
desempeño y obtener a satisfacción el resultado deseado. La educación en competencias se 
perfila en tres saberes: saber aprender (aprender a aprender), saber hacer y saber Ser. 
 Saber aprender significa ejercitar en grado máximo nuestras habilidades mentales, tales 
como escuchar, percibir, tener curiosidad, tener creatividad, analizar, sintetizar, comunicar 
y muchas otras, que nos permitan ser responsables del propio aprendizaje. Implícito está el 
tener una motivación propia y ser capaz de saber dónde buscar el conocimiento con el 
propósito de auto actualizarse constantemente. 
 Saber hacer se refiere a ser capaces de aplicar nuestro conocimiento para transformar 
nuestro entorno de manera inteligente y responsable para beneficio de la sociedad. Está 
relacionado con el aprendizaje de una profesión y el trabajo productivo, con la solución de 
problemas y con la toma de decisiones racionales en la producción de bienes y servicios de 
calidad. 
 Saber Ser implica descubrir la verdadera naturaleza humana, es decir, la naturaleza tanto 
de usted como mía; encontrar la esencia de uno mismo. Nos permite descubrir nuestra 
dimensión universal, lugar de donde proceden los valores genuinos que no son 
individuales, sino propios de nuestra humanidad. Este saber define un orden interno en la 
persona que le permite desarrollar su potencial ilimitado. 
 Así pues, este curso a simple vista parece pertenecer ciento por ciento a la rama de las 
ciencias; sin embargo, es un curso por competencias, no sólo porque administrativamente 
así se haya clasificado, sino porque la realidad actual lo exige: un programador debe saber 
aprender, saber hacer y saber Ser si es que quiere desarrollar plenamente sus habilidades y 
encontrar una satisfacción plena en esta actividad. 
 El texto que tiene en sus manos incluye no solamente información, teoría y prácticas 
sobre la programación, sino que también incluye algunas actividades denominadas 
“Ejercicio de competencias”, donde se le pide al alumno que realice algunas actividades 
que le permitan desarrollar algunas competencias tanto genéricas como propias de su 
especialidad, tales como la capacidad de análisis y de síntesis, lectura y redacción, 
comunicación oral y escrita en el idioma propio, el conocimiento de una segunda lengua 
(idioma inglés), comprensión de conceptos, y muchos otras. 
 A modo de ejemplo se presenta el primer ejercicio de competencias, el cual se refiere a 
“saber Ser”. Este ejercicio pretende que el alumno se considere primero que todo como un 
ser humano antes que como un estudiante, como un profesionista, o como cualquier otro 
título que pretenda obtener. Tiene el propósito también de que entre en su mente la idea de 
considerarse como un Ser perfecto. Wayne W. Dyer dice en su libro El límite es el cielo. 
“Es perfectamente válido considerarse a sí mismo perfecto. No equivale, ni mucho menos, 
a ser presuntuoso, a creerse superior al resto de la humanidad ni a carecer de motivaciones 
para seguir desarrollando la propia personalidad.” 
Desarrollar la propia personalidad implica cambio en un sentido positivo. Se reconoce 
entonces que este cambio es una evolución y un aprendizaje permanente porque, continúa 
Dyer, “… todas las cosas existentes son todo lo perfectas que pueden ser aunque estén 
continuamente cambiando…Usted puede evolucionar, cambiar y ser distinto de mil modos, 
y, sin embargo, no es menos perfecto por ello. Usted puede evolucionar, cambiar y ser 
distinto de mil modos, y, sin embargo, ser una criatura perfecta. La esencia de su perfección 
es su propia capacidad para verse para verse a sí mismo, pero aceptar lo que ve como 
perfecto en el momento presente, y ser luego capaz de convertirse en algo completamente 
distinto, pero perfecto aún.” 
Dyer resume su idea de Ser perfecto de la siguiente manera: 
 
“Ser perfecto significa verse a sí mismo con ojos nuevos. Significa permitirse llegar 
plenamente a la vida, en vez de andar siempre dando vueltas, pensando que aún no es usted 
lo bastante bueno para incorporarse a la Gran Competición. Significa respetar su propia 
humanidad y su ilimitada capacidad como ser humano. Significa concederse permiso para 
desarrollarse y alcanzar los niveles más altos imaginables. En este sentido, tiene usted 
capacidad para ser perfecto. Puede considerarse usted una obra concluida (sin tener que 
presumir ante los demás ni demostrar nada a nadie) si cultiva el equilibrio, la confianza y la 
sensación de orgullo interior” que lo posibilitará a experimentar “una plenitud humana 
total”. 
 
Si usted inicia este curso, y cualquiera otra tarea que desee, con esta mentalidad de Ser 
perfecto, si considera que todo ser humano (usted mismo) está dotado con todas las 
capacidades (aunque todavía deba desarrollarlas, muchas veces con gran esfuerzo) 
necesarias para triunfar en cualquier actividad que usted emprenda, entonces estará en el 
camino que, en su momento, le permitirá lograr sus metas. 
 
 
 
Ejercicio de competencias 1.1: 
Saber Ser: Ser perfecto 
 
Lea la introducción Educación en competencias y después haga lo siguiente: 
a) Redacte brevemente, en sus propias palabras, que es Educación en competencias. 
b) Cuando usted se ve ante un espejo, ¿aceptalo que ve como perfecto en el momento presente? Porqué sí o 
porqué no. 
c) Tomando en consideración lo que acaba de leer, ¿Cuál cree usted que va a ser su logro personal al final 
(no me refiero solamente a su calificación numérica) de este curso? Redacte claramente su respuesta. 
 
UNIDAD I CONCEPTOS BÁSICOS Y METODOLOGÍA PARA LA SOLUCIÓN 
DE PROBLEMAS POR MEDIO DE COMPUTADORAS 
 
 
 
 INTRODUCCIÓN 
 El uso de computadoras para el procesamiento de información y la solución de problemas 
se ha incrementado aceleradamente desde su introducción a mediados de los 1940’s. A 
cada momento del día, millones de computadoras utilizan software diverso que manipula 
datos que tocan nuestras vidas en una gran variedad de formas. A cualquier lado que 
volteamos, encontramos productos relacionados con las computadoras. Todas nuestras 
facturas por servicios de gas, electricidad, médicos, y muchos otros han sido calculados e 
impresos por computadoras. Nuestros cheques de pago, cuentas bancarias, reservaciones de 
hoteles o de aviones son preparados eficientemente por computadoras. Podemos llamar a 
nuestro banco con respecto a nuestros saldos y recibimos respuesta inmediata cuando la 
persona que nos atiende teclea nuestro número de cuenta en una computadora. Los gerentes 
de empresas consultan las bases de datos almacenadas en computadoras y reciben 
información actualizada sobre la cual basar sus decisiones. 
 La computadora es capaz de dar respuesta a muchos y diferentes tipos de problemas. 
Cálculos complejos que nos tomarían horas, días y aún semanas si los realizáramos a mano, 
pueden ser hechos en segundos por una computadora. 
 Una computadora puede realizar operaciones matemáticas simples o complejas, dibujar 
figuras, trazar gráficas o simular juegos. Puede ordenar datos, buscar en tablas de 
información y actualizar los datos de archivos. Puede comparar valores y realizar 
operaciones diferentes dependiendo de los resultados de la comparación. 
 Pero hay algo importante que deberemos tener en cuenta: la computadora no puede 
resolver problemas por ella misma. La idea de que la computadora es un “cerebro” está 
muy lejos de la verdad. Sólo es una máquina; una herramienta para extender las 
capacidades mentales del ser humano. No puede tomar ninguna decisión por su propia 
cuenta sino que debe recibir explícitamente y a detalle las operaciones que debe ejecutar. 
La computadora está limitada a aplicaciones que tienen propósitos predeterminados y que 
pueden ser definidos mediante una serie de instrucciones lógicas. Si una persona no puede 
definir todos los pasos involucrados en la solución de un problema, entonces tampoco lo 
puede hacer la computadora. 
 La velocidad y precisión de las operaciones en la computadora son tremendas. La 
computadora funcionará erróneamente sólo si alguno de sus componentes falla (lo cual es 
poco probable), y puede ejecutar operaciones una y otra vez sin sentirse “cansada”. Esto sin 
mencionar que el producto de sus computaciones son siempre perfectas; Sin embargo, 
frecuentemente se encuentran errores en los listados de salida, en los reportes, en las 
cantidades de las facturas o en el resultado de cálculos numéricos. Pero los errores se 
originan en el software que dirige a la computadora, o en los datos que se le suministran. El 
acrónimo GIGO (Garbage in, Garbage out; basura adentro, basura afuera), implica que el 
usuario obtendrá resultados válidos sólo si la computadora recibe datos adecuados y es 
instruida correctamente (por medio de un programa). 
El número de aplicaciones para las computadoras se han incrementado enormemente desde 
su introducción. Estas aplicaciones caen dentro de tres categorías generales: ciencia, 
negocios y humanidades. (Cole, J.W. Perry. ANSI FORTRAN IV, A Structured Programming Approach. 2o. ed. WCB) 
Ejercicio de competencias 1.2: 
Conocimiento de una segunda lengua 
 
Traduzca al español el siguiente texto en inglés. 
 
Business applications are involved mainly with record processing and operational and managerial reports. 
These applications include: payroll, accounting, inventory control, economic forecasting, publishing and 
printing, farming, and many, many more. 
Scientific applications are primarily involved with numeric processing and include: airplane stress analysis, 
statistics, matrix manipulation, complex equations, space, engineering, oceanography, meteorology, physics, 
aeronautics, and many others. 
Humanities applications are involved mainly with non-numeric processing and include: computer art, music, 
composition, archaeology, psychology, languages, map reproduction, poetry, concordance construction, 
artifact classification, historical research, culture analysis, architecture, and others. 
We are indeed affected by computers in almost every part of our lives-- by computers in almost every part of 
our lives—educational, business, social, governmental, religious, and recreational. Computers are here to stay. 
Our society cannot go back to older manual methods of processing information. It is up to you to learn to deal 
with them effectively. 
 
1.1 DE LOS PROBLEMAS A LOS ALGORITMOS Y A LOS PROGRAMAS 
 
PROBLEMAS 
“¿Quién no tiene problemas? ¿Quién no los ha tenido? ¿Quién no se ha preocupado 
ante ellos? Y ¿quién no ha tenido fracasos en la tarea de resolverlos? 
Problemas de salud, económicos, laborales, de relaciones familiares, problemas de 
diseño, problemas mecánicos, eléctricos, organizativos, de aprendizaje… 
Ya el niño pequeño se ve obligado a hacer esfuerzos repetidos por gatear, hablar, 
caminar, vestirse, mantenerse aseado, por imponer sus deseos. 
De manera particular, los cambios son fuente de problemas. Y la vida está toda 
salpicada de cambios: entrar a la escuela, tener un nuevo hermanito, pasar de la 
primaria a la secundaria, aprender a andar en bicicleta, casarse, tener hijos, enviudar, 
cambiar de trabajo, cambiar de domicilio, cumplir 50 años, cumplir 60 años… 
El punto de vista general es que “los problemas son el clavo en el zapato”; por ello, 
suelen suscitar reacciones negativas y defensivas. Pero también son la “sal de la vida. 
Las actividades de la mayoría de las profesiones y oficios se encaminan a resolver 
problemas y, si se eliminan todos éstos, cientos de millones se quedarían sin trabajo; 
además, podemos verlos como retos y como obstáculos superables en nuestro camino 
hacía los objetivos.” (Rodríguez Estrada, Mauro y Fernández Ortega, Juan Antonio. Creatividad para resolver 
problemas. Principios y técnicas. Ed. Pax. México. 2000) 
 
 Efectivamente, desde el inicio de la humanidad, el hombre ha tenido que lidiar con 
múltiples problemas no sólo para sobrevivir, sino también para progresar porque “al 
agilizar nuestra mente y expander nuestra imaginación, los problemas nos educan.” (Rodríguez 
Estrada, Mauro y Fernández Ortega, Juan Antonio) 
 
 “Originalmente, problema significaba algún objeto físico, por ejemplo, una pared o una 
barda que una persona encontraba en su camino. Pero fácilmente se vio la analogía entre el 
camino físico y el camino psicológico. Y se hizo la metáfora: problema vino a ser algo que 
se interpone en el “camino” entre la realidad actual de una persona y lo que necesita o 
desea. Y ahora se piensa en problemas en este segundo sentido.” (Rodríguez Estrada, Mauro y 
Fernández Ortega, Juan Antonio) 
 Entonces desde este punto de vista “un problema no es una realidad física, sino una 
realidad de orden psicológico: es una vivencia, una toma de conciencia. Tan es así que una 
misma situación es para Juan un problema terrible, para Pedro uno sencillo, y para Pablo no 
es problema… Por ser una realidad humana y no matemática o físico-química, el campo de 
los problemas presenta una gran flexibilidad.” (Rodríguez Estrada, Mauro y Fernández Ortega, Juan Antonio) 
Esto último es de una gran importancia, porque implica que no hay una única manera de 
resolver un problema. 
 
“Por definición, un problemaimplica la búsqueda de algo que no se tiene: una luz 
oculta; un resorte aún no existente. Este “algo” es nuevo; de lo contrario, el problema 
dejaría de existir. Ahora bien, la búsqueda de lo nuevo nos obliga a utilizar el 
pensamiento creativo. 
Un problema puede contemplarse como un “sistema”. Tiene sus entradas (que no 
necesariamente son datos), sus procesos, sus salidas (que no necesariamente son las 
incógnitas), pero también tiene sus controles y mecanismos. Las incógnitas se 
presentan en variadas formas y pueden ser: 1. las salidas (que es la situación más 
común), 2. las entradas y 3. el proceso. 
La solución de problemas es una actividad eminentemente creativa. Al tratar de 
resolver un problema, consideramos sucesivamente sus diversos aspectos, les damos 
vueltas en la mente. Si persistimos podremos encontrar alternativas, simplificarlo, 
descomponer y recomponer sus elementos; pero siempre en un afán de búsqueda, en 
un intento por llegar a lo que pretendemos: su solución.” (Rodríguez Estrada, Mauro y Fernández 
Ortega, Juan Antonio) 
 
 Ahora, ¿todas las personas utilizan los mismos métodos para encontrar la solución a un 
problema? Desde luego que no. Esto se debe a que 
 
“Es indudable que algunas personas tienen más capacidad para resolver problemas. 
No pretendemos discutir aquí la influencia de la herencia y del medio ambiente; lo 
que sí conviene establecer es que cualquier persona tiene la suficiente inteligencia 
para desarrollar su capacidad de solución de problemas. 
Las energías exógenas –bloqueos que se adquieren en las etapas formativas del 
individuo—y endógenas –falta de decisión, tenacidad y perseverancia para adquirir 
dicha capacidad—provocan diferencias determinantes entre una persona y otra.” 
(Rodríguez Estrada, Mauro y Fernández Ortega, Juan Antonio) 
 
 Debe quedar muy claro que toda persona, tú lector, tienen el potencial de resolver 
problemas. Pero este potencial no se liberará si no se tiene voluntad y si no se pone un 
esfuerzo consciente. Además, es también de gran ayuda seguir los consejos de gente más 
experimentada. Las siguientes son las nueve sugerencias planteadas en su texto por los 
autores Rodríguez y Fernández para enfrentar con grandes probabilidades de éxito el 
proceso de solución de problemas: 
 
1) Atrévete a enfrentar el problema. 
2) Defínelo y entiéndelo bien. 
3) Investígalo. 
4) No te impongas restricciones inexistentes. 
5) Trata de verlo desde otro punto de vista. 
6) Intenta primero lo sencillo. 
7) Pon en práctica tu intuición. 
8) Aprende de los intentos fallidos. 
9) Lleva en tu mente la convicción de que ninguna idea es realmente mala. 
 
 Si el lector analiza estas sugerencias podrá captar la validez de las mismas desde 
diferentes ámbitos. Por ejemplo, la sugerencia 1) significa que solamente con la actitud 
adecuada podremos iniciar el proceso de solución. Si la actitud es de temor o desconfianza 
en uno mismo, entonces no podremos encontrar una solución que ni siquiera intentamos 
buscar. Para mayor información sobre cada una de estas sugerencias, consultar el capítulo 
10 del texto mencionado. 
 
Ejercicio de competencias 1.3: 
Capacidad de redacción 
 
Lea el capítulo 1, páginas 1-3 del texto Rodríguez Estrada, Mauro y Fernández Ortega, Juan Antonio. Creatividad para 
resolver problemas. Principios y técnicas. Ed. Pax. México. 2000 y después haga lo siguiente: 
 
 Escriba de manera breve (redacte) un reporte de lo que comprendió del capítulo que leyó. 
 
 
 
1.2 DESARROLLO DE SOFTWARE PARA SOLUCIONAR PROBLEMAS 
 
Sin importar cual campo de trabajo se elija, siempre habrá problemas que resolver. 
Muchos de estos, como calcular la cuenta por los alimentos consumidos en un restaurant, 
pueden resolverse sin mayor esfuerzo. Otros, como aprender a tocar un instrumento 
musical, requieren algo de práctica, pero pronto se vuelven automáticos. Otros más 
requieren de un análisis del problema y de una planeación cuidadosa para que la solución 
sea apropiada y eficiente. Por ejemplo, construir un gran edificio o crear un nuevo sistema 
operativo para una computadora son problemas en donde la improvisación y las soluciones 
por prueba y error pueden conducir a resultados erróneos y bastante costosos en tiempo, 
dinero y esfuerzo. 
Crear un programa de computadora no es diferente porque un programa es una solución 
desarrollada en software para resolver un problema particular. Sin embargo, escribir un 
programa casi es el último paso en un proceso de desarrollo de software. Antes de pensar 
en escribir la primera instrucción del programa, se debe resolver el problema, y esto solo lo 
puede hacer un ser humano. Esto es necesario porque, 
 
La computadora no resuelve problemas. 
 
La computadora solamente puede ejecutar (correr) la solución del problema siempre y 
cuando se le haya proporcionado (cargado en su memoria) el programa adecuado. 
Así, antes de escribir un programa, el programador debe pasar a través de un proceso que 
incluye comprender completamente el problema, identificar claramente los datos que van a 
usarse, las operaciones a realizarse y el resultado (salida) correcto. Dentro de este proceso, 
una parte muy importante es la creación de un algoritmo. Solo después de entender con 
claridad los datos y de escribir correctamente el algoritmo (pasos específicos para producir 
el resultado deseado) podemos pensar en codificar, es decir, en escribir el programa en un 
lenguaje de programación (como Pascal, Java o C++, entre otros). Desde este punto de 
vista, 
 
La programación es la traducción de un algoritmo a un lenguaje que pueda utilizar la 
computadora. 
 
 
 
1.2.1 DEFINICIÓN DE ALGORITMO 
 La ciencia de la computación es el estudio de los algoritmos. En ésta definición el 
concepto de algoritmo es fundamental. Por lo tanto, se debe definir qué es lo que se 
entiende por algoritmo en ciencia de la computación: 
 
Un algoritmo es un conjunto finito de instrucciones, libres de ambigüedades, que 
cuando se ejecutan efectúan una tarea particular. 
 
Además, todo algoritmo debe satisfacer los siguientes requisitos: 
 ENTRADA. Cero o más conjuntos de datos se proporcionan desde el exterior. 
 SALIDA. Al menos se debe producir una salida que muestre un resultado. 
 DEFINITIVIDAD. Cada instrucción debe ser clara, comprensible y sin 
ambigüedades. 
 FINITIVIDAD. En todos los casos, el algoritmo debe terminar en un número finito 
de pasos. 
 EFECTIVIDAD. Cada instrucción debe ser lo suficientemente básica para que 
pueda ser efectuada por una persona utilizando solamente papel y lápiz. 
 
Resumiendo, en un algoritmo se tiene que: 
 
1. Un algoritmo es la representación de la solución a un problema. 
2. Después de la ejecución de cada instrucción siempre se deberá conocer la siguiente 
instrucción a ser ejecutada. 
3. Debe haber un punto de inicio único y claramente definido, y uno o más puntos de 
terminación perfectamente especificados. 
4. El algoritmo se compone de instrucciones cuyo significado debe ser claro y sin 
ambigüedades para la persona o máquina que lo ejecute. 
 
 
1.2.2 TÉCNICAS DE REPRESENTACIÓN DE ALGORITMOS 
 Hay varias técnicas para representar algoritmos. Algunas de ellas son: 
 Utilizar un idioma humano, en nuestro caso, el español. 
Por ejemplo, para encontrar la suma de los primero n números enteros positivos, el 
algoritmo en español es el siguiente: 
 
1. Obtener el valor de n. 
2. La variable suma se inicializa con el valor cero. 
3. La variable número se inicializa con el valor 1. 
4. Repetir los pasos 5 y 6 mientras número sea menor o igual a n: 
5. suma= suma + número 
6. número= número + 1 
7. Mostrar el valor de la variable suma. 
8. Fin de algoritmo. 
 
Aunque el lenguaje humano es muy apropiada para representar las ideas iniciales de la 
solución de un problema, sobre todo si el propósito es comunicar estas ideas a otra persona, 
esta alternativa tiene desventajas obvias. Tiene muchas palabras y las oraciones no tienenninguna restricción en el vocabulario. Además, generalmente carecen completamente de 
relación con el lenguaje de programación que se va a utilizar posteriormente, lo cual 
dificulta la codificación del algoritmo para convertirlo en programa. 
 
 Escribir el algoritmo directamente en un lenguaje de programación. 
Se podría pensar en tomar la posición opuesta al lenguaje humano, que sería escribir 
el algoritmo en algún lenguaje de programación, por ejemplo en C++. El 
algoritmo anterior que encuentra la suma de los primeros n números enteros 
positivos escrito en C++ es: 
 
/* PROGRAMA sumaNumeros 
 Este programa suma los primeros n enteros positivos: 1+2+3+4+5+ … + n. */ 
#include<iostream> 
using namespace std; 
 
int n; 
int suma, numero; 
 
int main() 
 { 
 cout << “Hasta que numero (entero positivo) quieres sumar ? ”; 
 cin >> n; 
 suma= 0; numero= 1; 
 while(numero <= n) 
 { 
 suma= suma + numero; 
 numero++; 
 } 
 cout << "La suma de los primeros " << n << " enteros positivos es " << suma << endl; 
 system(“pause”); 
 return 0; 
 } // fin de la función main 
 Nuevamente se tienen desventajas muy claras. Al escribir en C++ se tienen 
consideraciones sintácticas (sobre cómo escribir correctamente las instrucciones) que no 
forman parte del proceso algorítmico. Consideraciones tales como el uso de palabras 
reservadas como int o cout, la colocación de los puntos y coma (;), la utilización de 
cabeceras include, etc. pertenecen a la fase de codificación en donde es obligatorio utilizar 
correctamente las reglas del lenguaje, pero no a la fase de solución del problema, cuya 
responsabilidad recae única y exclusivamente en la persona. 
 
1.2.2.1 Diagramas de flujo 
 
 Los diagramas de flujo son otra opción para representar algoritmos. Un diagrama de flujo 
es un conjunto de símbolos que en forma gráfica representan la solución a un problema. La 
forma de cada símbolo indica la clase de operación que representa. Generalmente se escribe 
dentro del símbolo una breve descripción de la operación que se va a realizar. La flecha que 
sale de un símbolo indica cual es la siguiente operación a ser realizada. El algoritmo en 
diagrama de flujo se ejecuta empezando por el óvalo de inicio, siguiendo las flechas y 
haciendo todas las operaciones indicadas. Se continúa así hasta llegar al óvalo de fin. Los 
seis símbolos básicos (no son los únicos) de un diagrama de flujo son: 
 
1) PROCESAMIENTO. Este símbolo representa una o más 
instrucciones que tienen una función de procesamiento o 
manipulación de datos. Ejemplos son las operaciones aritméticas, las 
transferencias de valores entre variables o las comparaciones entre 
números. 
 
2) DECISIÓN. Representa un punto en el programa donde exista una 
comparación y se deba tomar un proceso alternativo dependiendo del 
resultado de la comparación. Un ejemplo de comparación es 
averiguar si un valor es mayor que otro ( A > B ). 
 
 
3) ENTRADA/SALIDA. Este símbolo indica cualquier función de un 
dispositivo de entrada o de salida que permitan obtener datos o 
mostrar resultados. Ejemplo de entrada es teclear datos; ejemplo de 
salida es mostrar información sobre la pantalla. 
 
4) REPETICIÓN. Indica que un grupo de instrucciones de un algoritmo 
se van a ejecutar varias veces. 
 
 
 
5) CONECTOR. Es un pequeño círculo que conecta dos partes de un 
diagrama de flujo que están físicamente separadas (por ejemplo, en 
hojas diferentes), pero que lógicamente una es la continuación de la 
otra. También la terminación de la estructura de decisión if..else. 
 
6) TERMINAL. Indica inicio o terminación de un diagrama de flujo. 
 El algoritmo para sumar los primeros n enteros positivos como diagrama de flujo es el 
siguiente: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Observe que el algoritmo se construyó utilizando algunos de los símbolos básicos de un 
diagrama de flujo. 
 
 
1.2.2.2 PSEUDOCÓDIGO 
 Hay otra alternativa para representar algoritmos: los lenguajes algorítmicos, los cuales no 
son lenguajes humanos, aunque utiliza algunas palabras de ellos. Un lenguaje algorítmico 
es muy parecido a los lenguajes formales, es decir, a aquellos lenguajes inventados para 
comunicarse con las computadoras, tales como el FORTRAN, COBOL, BASIC, Pascal, 
C, C++, Java y muchos otros. 
Un tipo de lenguaje algorítmico, conocido como pseudocódigo, es muy utilizado para 
escribir algoritmos. Los pseudocódigos utilizan instrucciones de un lenguaje de 
programación, pero simplificadas. Sus reglas de sintaxis (forma de escribir correctamente 
una instrucción) son más flexibles que las del lenguaje de programación. El algoritmo para 
sumar los primeros n enteros positivos como pseudocódigo C++ es el siguiente: 
 
 suma = 0 
 numero= 1 
inicio 
fin 
While (numero <= n) 
numero = numero + 1 
suma= suma + numero 
Obtener valor de 
n 
Imprimir suma 
/* ALGORITMO sumaNumeros 
 Suma los primeros n enteros positivos: 1+2+3+4+5+ … + n. 
*/ 
 
int n 
int suma, numero 
 
main() 
 { 
 cout << “Hasta que numero (entero positivo) quieres sumar ? ” 
 cin >> n 
 suma= 0 numero= 1 
 
 while(numero <= n) 
 { 
 suma= suma + numero 
 numero++ 
 } 
 
 cout << “La suma de los primeros “ << n << “enteros positivos es ” << suma<< endl 
 } // fin de la función main 
 
 Comparando este pseudocódigo con el código C++ se puede observar que ambos son 
muy parecidos, pero el pseudocódigo no requiere de detalles. Por ejemplo, no se requiere 
escribir cabeceras #include o punto y coma (;) al final de cada instrucción. 
 
 
Ejercicio de competencias 1.4: 
Capacidad de análisis y redacción 
 
Observe y analice los algoritmos para sumar los n primeros números mostrados anteriormente como código 
C++ y como pseudocódigo y escriba una lista de las diferencias entre ellos que usted encuentre. 
 
 
1.3 ALGORITMOS COTIDIANOS 
 Los algoritmos se encuentran en todas las actividades humanas, ya que representan la 
solución a un problema. Este tipo de enfoque para resolver problemas tiene cientos de años 
de existencia. La palabra algoritmos se deriva del nombre del matemático persa del siglo 
IX, al-Khowarizmi. En la actualidad, algoritmo suele referirse a una solución ejecutable por 
una computadora. 
 Encontramos algoritmos tanto en aplicaciones de negocios como científicas. En 
matemáticas es frecuente encontrar algoritmos para diversas operaciones, por ejemplo, para 
calcular números aleatorios, encontrar raíces cuadradas de un número o determinar si un 
valor es más grande que otro. 
 Algunos algoritmos se utilizan con tanta frecuencia en varias actividades humanas que 
prácticamente son cotidianos, es decir se utilizan día con día. Algunos de ellos son: 
 
 
ALGORITMOS DE BÚSQUEDA 
 Una gran cantidad de tiempo de computadora se destina a buscar. Es decir, a tratar de 
localizar un dato o una información en particular. Cuando un empleado bancario teclea el 
número de cuenta de un cliente para localizar su cuenta, un programa de computadora 
realiza la búsqueda. De igual manera, cuando una computadora juega ajedrez, se deben 
realizar una multitud de búsquedas para encontrar el movimiento óptimo. Hay varios 
algoritmos para realizar búsquedas, y cada uno de ellos recibe un nombre que lo identifica. 
Dos de ellos muy populares son la búsqueda secuencial y la búsqueda binaria. 
 
ALGORITMO DE ORDENAMIENTO 
 Ordenar una sucesión de datos significa ponerla en algún orden específico: orden 
ascendente (de menor a mayor) o en orden descendente (de mayor a menor). Por ejemplo, 
un directorio telefónico tiene ordenados los nombres alfabética y ascendentemente (de la A 
a la Z). Una ventaja de usar un conjunto de datos ordenados es que es más fácil encontrar 
un dato específico. Tan sólo considere la dificultad de tratar de encontrar el número 
telefónico de un amigo en un directoriono ordenado. Al igual que con los algoritmos de 
búsqueda, se han diseñado cientos de algoritmos de ordenamiento. Decidir que algoritmo se 
debe usar depende de muchos factores, entre otros, el tamaño de los datos y su 
representación. Entre los algoritmos de ordenamiento más conocidos están el ordenamiento 
burbuja y la inserción por orden. 
 
ALGORITMOS RECURSIVOS 
 Una función recursiva es una función que se invoca a sí misma. Un algoritmo recursivo 
es un algoritmo que contiene una función recursiva. La recursión es una forma poderosa y 
elegante de resolver una clase amplia de problemas. Un problema de esta clase se resuelve 
mediante una técnica de divide y vencerás en la que el problema se descompone en 
subproblemas del mismo tipo que el problema original. Cada subproblema a su vez, se 
descompone aún más hasta que el proceso produce subproblemas que se pueden resolver de 
manera directa (solución trivial). Un ejemplo es el algoritmo recursivo (también hay uno 
iterativo) del factorial de un número. En este caso la función recursiva es 
 
n!= n ∙ (n-1)! 
 
En este caso el problema original (calcular n!) se descompone en subproblemas cada vez 
más sencillos: calcular (n-1)!, calcular (n-2)! Y así sucesivamente hasta llegar a calcular 0!, 
la cual es una solución trivial porque 0!= 1. Por ejemplo el factorial de 3 se desarrolla así: 
 
3!= 3∙ (3-1)! = 3∙ 2! 2!= 2∙ (2-1)! = 2∙ 1! 1!= 1∙ (1-1)! = 1∙ 0! 0!= 1 
 
Ahora se sustituye en orden inverso: 
0!= 1 1!= 1∙ 1 = 1 2!= 2∙ 1 = 2 3!= 3∙ 2 = 6 
 
El resultado es que el factorial de 3 es 6. 
 
 
1.4 BREVES PRÁCTICAS DE ESCRITURA DE ALGORITMOS 
 La computadora puede ejecutar cualquier tipo de problema, siempre y cuando se le 
proporcione un conjunto completo de instrucciones que pueda entender. Como ya se 
mencionó, a tal conjunto de instrucciones, en su etapa inicial, se le conoce como algoritmo. 
El algoritmo se convertirá en programa cuando sus instrucciones sean traducidas a sus 
instrucciones equivalentes en un lenguaje de programación. 
 Para reafirmar algunos conceptos, entre ellos el de que todo problema debe ser resuelto por 
una persona, a continuación se harán unas breves prácticas de programación en su etapa de 
algoritmo. Por simplicidad, los algoritmos se escribirán en nuestro lenguaje humano: el 
español. De esta manera, nuestra atención se enfocará en la solución del problema y no en 
cómo se escribe en un determinado lenguaje de programación. 
 
Práctica 1. Escribir un algoritmo que calcule el promedio final de cuatro calificaciones 
parciales. 
 
 La computadora tiene la capacidad (tiene los circuitos electrónicos necesarios) de realizar 
el cálculo pedido. Pero no tiene idea de los significados que nosotros otorgamos a las 
palabras. No “entiende” que es una calificación o qué es un promedio. Por tanto, es labor de 
una persona encontrar las operaciones, y su secuencia correcta, necesarias para cumplir con 
la tarea que se quiere realizar (en este caso, calcular un promedio). Es decir, tiene que 
encontrar la solución que se requiere y expresarla en una forma apropiada: como un 
algoritmo. 
 Inicialmente, el algoritmo puede escribirse en un idioma humano, en nuestro caso en 
español. Entonces, el algoritmo pedido puede ser el siguiente: 
 
1. Obtener las cuatro calificaciones. 
2. Sumar las cuatro calificaciones. 
3. Dividir la suma entre el número de calificaciones (cuatro). 
4. Mostrar el resultado de la división (que es el promedio final). 
5. Fin de algoritmo. 
 
 Esta lista de instrucciones es el algoritmo que calcula el promedio final. Es importante 
hacer notar que en esta etapa no fue necesaria la intervención de la computadora. Lo que se 
requirió fue una persona deseosa de resolver el problema. Una persona que hiciera uso de 
sus capacidades mentales para analizar el problema e imaginarse la manera de resolverlo. 
Desde luego que en etapas posteriores sí se tendrá que considerar a la computadora y al 
lenguaje de programación que puede entender, por lo que el algoritmo sufrirá los cambios 
necesarios hasta convertirse en un programa. 
 Una vez que se ha obtenido el algoritmo lo puede ejecutar cualquier persona 
(posteriormente, cualquier computadora). 
 
 Considerado lo anterior, la práctica 1 consiste en que usted siga las instrucciones del 
algoritmo anterior y calcule el promedio final de las calificaciones 87, 76, 93, 84 (usted 
puede cambiar estos valores para calcular diferentes promedios). 
 
Práctica 2. Escribir un algoritmo que calcule el promedio final de cuatro calificaciones 
parciales para n estudiantes. Cada estudiante se identifica por su número de control. La 
salida del algoritmo debe mostrar para cada estudiante su número de control y su 
promedio. 
 Tenemos en esencia el mismo problema de la práctica 1, pero ahora se pide que el cálculo 
del promedio se repita n veces, una vez por cada estudiante. Esta pequeña modificación en 
el enunciado del problema nos obliga a modificar la lógica que utilizamos anteriormente 
para incorporar el concepto de repetición o lazo. Después de analizar esta nueva versión del 
problema se obtuvo el siguiente algoritmo: 
 
1. Obtener el número n de estudiantes. 
2. Repetir n veces los pasos 3 al 7: 
3. Obtener el número de control del estudiante. 
4. Obtener las cuatro calificaciones 
5. Sumar las cuatro calificaciones. 
6. Dividir la suma entre el número de calificaciones (cuatro). 
7. Mostrar el número de control y el resultado de la división (promedio final). 
8. Fin de algoritmo. 
 
 La práctica 2 consiste en que usted siga las instrucciones del algoritmo y calcule el 
promedio final de los n estudiantes y muestre la salida pedida en el paso 7. 
 
Práctica 3. Escribir un algoritmo que calcule el promedio final de cuatro calificaciones 
parciales para n estudiantes. Cada estudiante se identifica por su número de control. La 
salida del algoritmo debe mostrar para cada estudiante su número de control y su 
promedio. 
 
El enunciado es exactamente igual que el de la práctica 2, pero alguien proporcionó el 
siguiente algoritmo: 
 
1. Obtener el número n de estudiantes. 
2. Obtener el número de control del estudiante. 
3. Repetir n veces los pasos 4 al 7: 
4. Obtener las cuatro calificaciones 
5. Sumar las cuatro calificaciones. 
6. Dividir la suma entre el número de calificaciones (cuatro). 
7. Mostrar el número de control y el resultado de la división (promedio final). 
8. Fin de algoritmo. 
 La práctica 3 consiste en que usted siga las instrucciones del algoritmo y escriba 
exactamente lo que hace, que compare los resultados de las prácticas 2 y 3 y que determine 
cuál de las dos versiones es la correcta (en caso de que alguna lo sea). 
 Observe que en estos algoritmos no nos hemos preocupado por saber cómo se escriben 
las instrucciones en un lenguaje de programación. Por ejemplo, cuando escribimos Repetir 
n veces los pasos 4 a 7, no nos preocupa si esta idea de Repetir se escribe como while o 
como for en un cierto lenguaje de programación. En esta primera etapa de solución del 
problema (etapa de creatividad) estamos preocupados solamente con generar las ideas 
correctas y en expresarlas en el idioma que dominamos: el español. 
 
Práctica 4. Escribir un algoritmo que multiplique los primero 5 números enteros positivos. 
Una versión de este algoritmo es la siguiente: 
 
1. La variable producto se inicializa con el valor cero. 
2. La variable número se inicializa con el valor 1. 
3. Repetir los pasos 4 y 5 mientras número sea menor o igual a 5: 
4. producto= producto x número 
5. número= número + 1 
6. Mostrar el valor de la variable producto. 
7. Fin de algoritmo. 
 
 La práctica 4 consiste en que usted verifique si este algoritmo es correcto o no y escriba 
a detalle qué es lo que hizo para hacer la verificación. 
 
 Las práctica 5, 6 y 7 consisten en que usted escriba algoritmossimilares a los que se 
presentan en las prácticas anteriores. 
 
Práctica 5. Escribir un algoritmo que sume los primero n números enteros positivos. 
 
Práctica 6. Se tiene el nombre de n agentes de ventas, el kilometraje inicial y el final de su 
automóvil (después de un viaje), como en el ejemplo siguiente: 
 
 Nombre kilometraje inicial kilometraje final 
 Pedro Ríos 13505 13930 
 
 Escriba un algoritmo que imprima el nombre del vendedor, el kilometraje total recorrido 
y sus viáticos ($1.50 por kilometro). 
 
Práctica 7. Ejecute manualmente el algoritmo de la práctica 6 (viáticos de agentes de 
ventas) para los tres agentes siguientes: 
 
 Nombre kilometraje inicial kilometraje final 
 Pedro Ríos 13505 13930 
 Luis Ramírez 25678 25897 
 Salvador Santana 18123 18792 
 
 
 
 
 
Ejercicio de competencias 1.5: 
Capacidad de resolver problemas 
 
Escriba un diagrama de flujo para cada uno de los algoritmos de las prácticas anteriores. 
 
 
1.5 PROGRAMAS 
 
 Por lo leído hasta este punto, debe haber quedado establecido que todo problema debe ser 
resuelto por un ser humano, y la solución (algoritmo), una vez encontrada, puede ser 
ejecutada por cualquier otra persona, e incluso por una máquina. La máquina a la que nos 
referimos es la maravilla moderna de la electrónica: la computadora digital. 
 Actualmente ya es posible delegar a esta máquina muchas de las actividades intelectuales 
que en su momento eran exclusivas del ser humano. Ahora las computadoras pueden 
ejecutar la solución a prácticamente cualquier problema planteado por la imaginación de 
cualquier persona. En computación, a la solución del problema también se le llama 
algoritmo. Pero antes de que una computadora pueda empezar a ejecutar la solución a un 
problema, esta debe ser traducida a un lenguaje que pueda ser entendido por la máquina. 
 A la solución de un problema traducido a un lenguaje de computadora le llamamos 
código o programa. 
 Los algoritmo y programas de ejemplo de este texto incluirán todas las etapas del ciclo 
del desarrollo de software para que el alumno se dé cuenta que para escribir un algoritmo o 
programas correctos y eficientes no es suficiente con tomar papel y lápiz y empezar a 
escribir instrucciones. Es necesario un trabajo previo lógico, cuidadoso y sistemático. 
 
 
1.5.1 DEFINICIÓN DE LENGUAJE 
 Un lenguaje es un medio de comunicación. Incluye un conjunto de reglas que permiten 
utilizarlo correctamente. Sus reglas de sintaxis indican cómo escribir correctamente las 
palabras del lenguaje; las reglas de semántica se refieren al significado de esas palabras. 
Los lenguajes se pueden dividir en dos grandes grupos: los lenguajes naturales y los 
lenguajes formales. 
 Los lenguajes naturales son los lenguajes que utilizamos los humanos, como el español, 
el inglés, el italiano, o el alemán. Los lenguajes formales son aquellos inventados para 
comunicarse con las computadoras, tales como el FORTRAN, COBOL, BASIC, Pascal, C, 
C++, Java, y muchos otros. 
 Los lenguajes formales son los que utilizamos para escribir programas de computadora. 
Se dividen en lenguajes de bajo nivel y lenguajes de alto nivel. Los lenguajes de bajo nivel 
son el lenguaje máquina y el lenguaje ensamblador. 
 
 
1.5.2 LENGUAJES DE BAJO NIVEL 
El lenguaje máquina es el único que entiende la computadora. Está formado con 
instrucciones que contienen exclusivamente ceros y unos. Por ejemplo: 
 
“he aquí un fragmento de un programa en lenguaje máquina para una computadora 
hipotética: 
0000010010000000 
0000000010000001 
0000010110000000 
0000111100000000 
 
Incluso si dijéramos que este programa se diseñó para sumar el contenido de las 
localidades de memoria 128 y 129, luego colocar la suma en la dirección de memoria 
128 y sobreescribir lo que esté en ella, después de lo cual se detiene, probablemente 
pensaría que estas instrucciones son tan comprensibles como un texto jeroglífico.” 
(Rick Decker-Stuart Hirshfield. Máquina analítica. Introducción a las ciencias de la computación. Ed. Thomson. México, 2001.) 
 
 Como se puede ver en el ejemplo anterior, un programa en lenguaje máquina es difícil de 
leer y de comprender porque requiere que el programador conozca perfectamente las 
características del hardware de la computadora. Por esta razón los programadores buscaron 
una nueva forma más fácil de escribir programas. Inventaron un nuevo lenguaje llamado 
ensamblador. 
El lenguaje ensamblador ocupa un escalón arriba del lenguaje máquina, pero sigue siendo 
un lenguaje de bajo nivel porque todavía requiere un conocimiento detallado del hardware. 
Pero un lenguaje ensamblador usa nemónicos en lugar de ceros y unos para representar las 
instrucciones. Un nemónico es una abreviación alfabética que se usa para ayudar a 
recordar. Por ejemplo, en lugar de usar una combinación de ceros y unos para representar la 
operación de guardar un valor en una localidad de memoria, el programador puede usar el 
nemónico STO, que es una abreviación de la palabra inglesa storage. 
 Siguiendo con el ejemplo máquina anterior que suma dos localidades de memoria, el 
programa equivalente en ensamblador sería el siguiente: 
 
LOD 128 
ADD 129 
STO 128 
 HALT 
 
 Aunque los lenguajes ensambladores proporcionan una manera más fácil y eficiente de 
programar que los lenguajes máquina, todavía mantiene control sobre el funcionamiento 
interno de la computadora al nivel más básico. Además, antes de que una computadora 
pueda correr un programa en lenguaje ensamblador debe ser traducido a lenguaje máquina, 
que como se dijo anteriormente, es el único que entiende la computadora. Comparado con 
los lenguajes de alto nivel, los lenguajes de bajo nivel (máquina y ensamblador) son 
tediosos, difíciles y muy propensos a errores. 
 
1.5.3 LENGUAJES DE ALTO NIVEL 
Un lenguaje de alto nivel contiene instrucciones formadas por palabras de un lenguaje 
humano (Inglés, Español, etc.) y notación matemática. Los lenguajes de alto nivel no 
requieren que el programador tenga un conocimiento detallado acerca de las operaciones 
internas de una computadora (hardware.) Debido a que se parecen mucho al lenguaje 
humano, los lenguajes de alto nivel son mucho más fáciles de aprender y usar que los de 
bajo nivel. En general, la programación de alto nivel requiere de menos tiempo y esfuerzo 
porque los errores son más fáciles de evitar y de corregir. 
Los lenguajes de alto nivel se diseñan para que sean independientes de la computadora. Así, 
pueden ser transportados de computadora a computadora y corridos sin ningún cambio o 
con cambios mínimos. Como resultado, actualmente la abrumadora mayoría de los 
lenguajes que se usan para programación son de alto nivel, dejándose los de bajo nivel para 
aplicaciones muy especializadas. 
A veces, algunas porciones de un programa requieren más velocidad o eficiencia de la que 
puede ser lograda con un lenguaje de alto nivel. Para estos casos, la mayoría de los 
lenguajes de alto nivel permiten incluir programas en lenguaje ensamblador para acelerar su 
ejecución y mejorar sus capacidades. 
Un lenguaje de alto nivel debe ser traducido a lenguaje máquina antes de que la 
computadora lo pueda ejecutar. Hay dos tipos de programas traductores de lenguaje que se 
utilizan frecuentemente para traducir lenguajes de alto nivel: compiladores e interpretes. Un 
compilador traduce un programa completo, llamado el código fuente, a lenguaje máquina 
de una sola vez. Una vez que ya está traducido, se almacena en un formato legible para la 
máquina, llamado el códigoobjeto. El código objeto puede ser ejecutado inmediatamente 
por la computadora en cualquier momento. El código fuente permanece intacto después de 
la traducción y puede ser modificado y actualizado si se requiere y después recompilado a 
código objeto antes de ser corrido. 
Un interprete traduce un programa a lenguaje máquina una línea a la vez, ejecutando 
cada línea del programado después de que fue traducida. En la mayoría de los interpretes, 
el formato legible para la máquina no se almacena en la memoria principal o en 
almacenamiento secundario. Por tanto, el programa debe ser interpretado cada vez que se 
vaya a ejecutar. 
Siguiendo con el ejemplo del programa que suma dos números, su código en lenguaje de 
alto nivel se ve así: 
int acumulador; 
int x, y; 
 
x= 6; y= 9; 
acumulador= x; 
acumulador = acumulador + y; 
x= acumulador; 
 
Actualmente, la gran mayoría de los programadores utilizan lenguajes de alto nivel. 
 
1.5.4 EL LENGUAJE C++ 
 
 C++ fue desarrollado a principios de la década de los 1980’s, cuando Bjarne Stroustrup, 
científico de AT&T, usó sus conocimientos en lenguajes de simulación para crear un 
lenguaje de programación orientado a objetos. Una característica central de los lenguajes 
de simulación es que modelan situaciones de la vida real. Esta orientación a objetos, la cual 
era ideal para objetos gráficos presentados en pantalla como rectángulos y círculos, se 
combinó con características del lenguaje C para formar C++. Por tanto, C++ conservo el 
conjunto extenso de capacidades estructuradas y de procedimientos proporcionadas por C, 
pero agregó su propia orientación a objetos para convertirse en un verdadero lenguaje de 
programación de uso general. Como tal, C++ puede usarse desde programas interactivos 
simples, hasta programas de ingeniería y científicos sofisticados y complejos, dentro del 
contexto de una estructura en verdad orientada a objetos. (Gary J. Bronson. C++ para ingeniería y ciencias) 
 
1.6 PROGRAMAS EN C++ 
 
En esta sección se empezarán a presentar los conceptos e instrucciones básicas para 
escribir programas completos en el lenguaje de programación C++. 
 
 
1.6.1 TIPOS DE DATOS 
 Una computadora es una herramienta muy poderosa para almacenar, procesar y propagar 
información. Aunque para la computadora la información se presenta como una secuencia 
de ceros y unos, para nosotros es una serie de símbolos o datos. En computación es 
necesario distinguir entre datos e información. Datos son simplemente cadenas de 
caracteres. Por ejemplo, 5-27-85 o JRR-3679 son datos. Sin embargo, los datos se 
convierten en información cuando se ligan a un contexto. Por ejemplo, 5-27-85 podría ser 
un número telefónico, y JRR-3679 podría ser una clave de acceso a un sistema de 
computación. Resumiendo, la computadora es una máquina que opera sobre datos; la gente 
usa la información. 
 Así, la computadora toma datos a la entrada, los procesa (calcula, ordena, compara, …), y 
genera una salida en forma tal que tenga sentido para una persona; es decir, produce 
información a partir de datos. 
 Igual que para una persona, los datos no son iguales para una computadora. Las personas 
distinguimos intuitivamente los datos, y los clasificamos por los menos en dos grandes 
grupos: numéricos y alfabéticos. Del mismo modo, la computadora clasifica los datos que 
puede manipular y los divide en diferentes tipos de datos. Un tipo de datos le proporciona a 
la computadora información esencial sobre cómo almacenar y manipular a ese dato. Entre 
la información importante que proporciona un tipo de dato está el rango de valores que 
pertenecen a ese tipo, y las operaciones que se pueden hacer sobre esos valores. Por 
ejemplo, cuando la computadora utiliza dos bytes para representar el tipo de dato entero su 
rango de valores va desde -32768 hasta +32767; y el tipo de operaciones que se pueden 
realizar sobre estos números incluyen a las operaciones aritméticas, y algunas otras de tipo 
matemático, como elevar a una potencia o extraerles raíz cuadrada. 
 La siguiente figura representa los tipos de datos que se utilizarán en este curso. 
 
TIPO DE DATO 
 
 
 NUMÉRICO CARÁCTER CADENA DE CARACTERES LÓGICO O APUNTADOR 
 BOOLEANO 
 
entero (int) real 
 
 float double 
 
A continuación se explican cada uno de estos tipos de datos. 
 
1.6.1.1 DATOS NUMÉRICOS 
Hay dos tipos: enteros y reales. Los datos numéricos enteros se representarán con la 
abreviatura de entero (integer) en inglés, int. Los enteros son los números que utilizamos 
para contar. Son números completos sin parte decimal, y sus valores pueden ser negativos, 
cero o positivos. Todos los siguientes son números enteros: 
 
28 1600 -89 +12345 0 -29768 3 -28 30876 +16 31234 
 
 Los datos reales se subdividen en flotantes y en dobles; respectivamente float y double. 
Son números que tienen una parte entera, un punto decimal y una parte fraccionaria. 
Pueden ser positivos o negativos, cero incluido. Ambos float y double pueden utilizarse en 
cualquier operación que requiera números reales. La diferencia entre ellos es que el rango 
de valores para el tipo float es la mitad de la del tipo double. Es decir, el tipo double utiliza 
el doble de memoria que el tipo float y, por tanto, puede almacenar valores más grandes. 
Todos los siguientes son números reales: 
 
28.98 458908.987 0.0 31234.0 +32198767.988776 -0.00000564 456.09 
 
1.6.1.2 DATOS CARÁCTER 
 Un dato del tipo carácter (char) es un solo símbolo perteneciente al código de 
computación que utilice la computadora (ASCII, Unicode, etc.). El carácter debe encerrarse 
entre comillas simples (‘). Generalmente, los símbolos básicos que acepta una computadora 
son los 256 del código ASCII, que incluyen letras (mayúsculas y minúsculas), dígitos 
decimales (del 0 al 9) y un conjunto de símbolo de puntuación y control (por ejemplo ; % 
# @ ¿ : } = . / ¡ espacio, y muchos más). Ejemplos de datos del tipo carácter 
son: 
 
‘g’ ‘#’ ‘(’ ‘{’ ‘H’ ‘;’ ‘7’ ‘s’ ‘9’ ‘?’ ‘$’ 
 
 Como se observa, el tipo de dato char es un solo símbolo encerrado entre comillas 
simples. Por tanto, es en este tipo de dato es un error escribir dos o más símbolos entre 
comillas simples: 
 
 ‘no’ ‘B ’ ERROR. No son valores legales para el tipo de dato char. 
 
 En estos dos últimos ejemplos, ambos no son del tipo char porque incluyen más de un 
carácter entre las comillas simples: ‘no’ tiene dos letras; ‘B ’ tiene 6 caracteres: la letra B 
más cinco espacios, que también son caracteres. 
 
1.6.1.3 DATOS CADENA DE CARACTERES 
 Una cadena de caracteres (string) es una secuencia de símbolos (que puede incluir al 
espacio) que se usa para aplicaciones no numéricas. Una cadena puede contener cualquier 
símbolo. Llamado carácter que este definido en el código de caracteres que utiliza la 
computadora (generalmente ASCII o Unicode. Este último incluye los caracteres del 
primero.) No hay un solo código, por lo que el conjunto de caracteres de una computadora 
puede ser diferente al de otra. Sin embargo, se puede asegurar que cualquier computadora 
puede manipular los caracteres alfabéticos (A..Z, a..z), los dígitos decimales (0..9) y un 
conjunto variable de caracteres especiales (espacio, %, *, ], $, :, /, @, etc.). 
Una cadena de caracteres se escribe dentro de comillas dobles (“ ”) que son los 
delimitadores que indican el principio y el final de la cadena. En general, una cadena puede 
contener hasta 256 caracteres, aunque este máximo puede variar de computadora en 
computadora. Ejemplos de cadenas son los siguientes: 
 
“Este en un ejemplo de cadenade caracteres” 
 
“cadena corta” 
 
“ cadena con espacios iniciales y finales. Los espacios se respetan ” 
 
“ cadena con números 2390 y símbolos no alfabéticos *&$#@?” 
 
Cabe mencionar que C++ considera a string como una clase, por lo cual hay objetos 
string. 
 
1.6.1.4 DATOS LÓGICOS O BOOLEANOS 
 El tipo lógico está formado por dos valores constantes: falso y verdadero, ordenados de 
modo que falso < verdadero. Un uso típico de los datos lógicos es en las comparaciones 
entre dos valores, donde se desea determinar si la comparación es falsa o verdadera (¿es 
Luis mayor que Pedro?), es decir, se desea determinar el valor booleano de la comparación. 
Para comparar valores de deben utilizar los operadores relacionales: 
 
 OPERADOR RELACIONAL SIGNIFICADO 
 > mayor que 
 < menor que 
 == igual 
 >= mayor o igual 
 <= menor o igual 
 != desigual o diferente 
 
 Los operadores relacionales se pueden usar con todos los tipos de datos, pero en una 
comparación particular, ambos valores deben de ser del mismo tipo. Es decir, se deben 
comparar enteros con enteros, reales con reales, cadenas con cadenas, etc. Los siguientes 
son ejemplos de comparaciones booleanas: 
 
 Comparación simple valor booleano 
 5 > 8 falso (F) 
 32.09 <= 32.89 verdadero (V) 
 ‘N’ > ‘R’ falso 
 “mario” != “mario” falso 
 “navarro” > “nava” verdadero 
 “me gusta el rojo” <= “me gusta el verde” falso 
 
Los tres últimos ejemplos contienen cadenas (string). La manera en que se evalúan este tipo 
de comparaciones es la siguiente: 
La evaluación compara carácter por carácter, en este ejemplo, letra por letra, empezando 
con el primero y continuando con los siguientes hasta que encuentra una diferencia entre 
ellos o hasta que ya no haya más caracteres. En este momento se decide el valor booleano 
de la comparación. Entonces, en la comparación 
 
“mario” != “mario” 
 
Se inicia comparando la primera letra de cada cadena: 
 m de la primera cadena con m de la segunda. Son iguales, no hay decisión 
 
Continuando con las siguientes letras: 
a de la primera cadena con a de la segunda. Son iguales, no hay decisión 
r de la primera cadena con r de la segunda. Son iguales, no hay decisión 
i de la primera cadena con i de la segunda. Son iguales, no hay decisión 
o de la primera cadena con o de la segunda. Son iguales, pero como es la última letra, se 
llega a una decisión considerando que la comparación es: 
 
 o != o lo cual es falso porque son iguales. Entonces la comparación completa 
 
“mario” != “mario” tiene el valor booleano falso 
 
En la comparación “navarro” > “nava” la evaluación es: 
 
Se inicia comparando la primera letra de cada cadena: 
 n de la primera cadena con n de la segunda. Son iguales, no hay decisión 
 
Continuando con las siguientes letras: 
a de la primera cadena con a de la segunda. Son iguales, no hay decisión 
v de la primera cadena con v de la segunda. Son iguales, no hay decisión 
a de la primera cadena con a de la segunda. Son iguales, no hay decisión 
r de la primera cadena con espacio de la segunda. Son diferentes, se llega a una decisión 
considerando que la comparación es: 
r > espacio 
 
 lo cual es verdadero porque cualquier letra es mayor al espacio, de acuerdo a su orden en el 
código que usa la computadora (ASCII o Unicode)es. Entonces la comparación completa 
 
“navarro” > “nava” tiene el valor booleano verdadero 
 
Observe que cuando una cadena es más corta que otra, en este caso nava tiene menos letras 
que navarro, se considera que el carácter que inmediatamente sigue al último de la cadena 
más corta es el carácter espacio (“”). 
Se deja como ejercicio que el alumno verifique el valor booleano de l comparación 
 
“me gusta el rojo” <= “me gusta el verde” 
 
 
 
 
OPERADORES LÓGICOS 
 Además de los operadores relacionales, hay tres operadores lógicos que se pueden aplicar 
solamente a valores booleanos para dar un resultado booleano (falso o verdadero): 
 
 
 OPERADOR LÓGICO SIGNIFICADO 
 AND (&&) conjunción lógica y (operador binario) 
 OR (||) disjunción lógica o (operador binario) 
 NOT (!) negación lógica no (operador unitario) 
 
 Los valores de los operadores lógicos se definen en las llamadas tablas de verdad, que se 
presentan a continuación: 
 
 P Q P && Q P || Q P !P 
 
 V V V V V F 
 V F F V F V 
 F V F V 
 F F F F 
 
 
 En estas tablas V es verdadero y F es falso. P y Q son condiciones booleanas simples, y 
cada una de ellas tiene su propio valor F o V. 
 La regla para la tabla AND (&&) indica que si ambas condiciones simples que forman la 
condición compuesta son verdaderas, entonces toda la condición compuesta es verdadera. 
En caso contrario, es falsa. 
 La regla para la tabla OR (||) indica que si por lo menos un condición simple de las que 
forman la condición compuesta es verdadera, entonces toda la condición compuesta es 
verdadera. En caso contrario, es falsa. 
 La regla para la tabla NOT (!) indica que si una condición es verdadera, entonces su 
negación es falsa; si es falsa, entonces su negación es verdadera. Es decir, una negación 
cambia el valor booleano de su condición (de verdadero a falso y viceversa). 
 
 
PRECEDENCIA DE OPERADORES RELACIONALES Y LÓGICOS 
 
para poder interpretar correctamente las comparaciones simples o compuestas se requiere 
seguir un criterio de prioridad de operadores es decir, cuál operador se evalúa primero que 
otro. La siguiente tabla muestra la precedencia o jerarquía entre los operadores relacionales 
y lógicos. 
 
NIVEL OPERADOR SIGNIFICADO PRECEDENCIA 
 1 ! NOT (NO o negación) mayor 
 2 < <= > >= menor, menor o igual, mayor, mayor o igual 
 3 == != igual, diferente 
 4 && AND (Y lógico o conjunción) 
 5 || OR ( O lógico o disjunción) menor 
A excepción del operador negación (not), que se evalúa de derecha a izquierda en una 
expresión, todos los demás operadores en el mismonivel tienen la misma prioridad, por lo 
que se evalúan de izquierda a derecha. 
 
 Con los operadores lógicos se pueden formar comparaciones (también se les puede llamar 
condiciones) compuestas (dos o más comparaciones simples unidas por operadores 
relacionales): 
 
 Comparación compuesta valor booleano 
 1. (15 >= 8) && (6 > 4) V 
 2. (13.5 < 18.9) || (20 = 14) V 
 3. (10 > 12) && (9 > 6) && !(3> 5) F 
 4. ((‘f’ < ‘h’) || (25 <= 16)) && (“Tomas > Tovar”) F 
 
 
 En la comparación compuesta 1, las dos comparaciones simples están unidas por un 
AND. Como ambas comparaciones son verdaderas, toda la comparación compuesta es 
verdadera. 
En la comparación 2, las comparaciones simples están ligadas por un OR. Como al menos 
una de ellas es verdadera (la primera), toda la comparación compuesta es verdadera. 
 La comparación 3 usa dos AND para unir a sus tres condiciones simples. Como la 
primera es falsa, toda la condición compuesta es falsa, sin importar que las dos siguientes 
sean verdaderas. 
 En la comparación 4 el operador lógico principal es AND, que une a una condición 
compuesta que tiene un OR y a una condición simple. La condición OR es verdadera, pero 
la condición simple es falsa; por tanto, toda la condición compuesta es falsa. 
Las condiciones compuestas tienen varias aplicaciones en programación. Una de ellas es 
para evaluar las condiciones booleanas que controlan a las instrucciones de decisión y de 
repetición (temas que se verán en la unidad II Estructuras de control). Algunos ejemplos 
son los siguientes: 
 
1. Se quiere averiguar si la calificación que se proporciona a un programa esta 
en el rengo 0 a 100. La condición compuesta correspondiente que utiliza un operador 
lógico AND (&&) es: 
 (calificación>= 0) && (calificacion <= 100) 
 
Si la calificación está en el rango mencionado (por ejemplo 96, 0, 34, 100, etc.) el 
valor booleano de la condición compuesta debe ser verdadero (true). Si no lo està, el 
valor es falso (false). 
 
a) Suponiendo que la calificación es 85 la ejecución de esta condición procede así: 
 
Primero se evalua la primera condición simple: 
 (85 >= 0) Su valor booleano es verdadero. 
 
Después se avalua la segunda condición simple: 
 (85 <= 100) Su valor booleano es verdadero. 
Ahora se evalúan los valores booleanos unidos por el operador lógico AND: 
 
 (verdadero && verdadero) su valor booleano es verdadero 
 
La conclusión es que 85 sí está en el rango 0 a 100. 
 
b) Suponiendo que la calificación es -79 la ejecución de esta condición procede así: 
 
Primero se evalua la primera condición simple: 
 (-79 >= 0) Su valor booleano es falso. 
 
Después se avalua la segunda condición simple: 
 (-79 <= 100) Su valor booleano es verdadero. 
 
Ahora se evalúan los valores booleanos unidos por el operador lógico AND (&&): 
 
 (falso && verdadero) su valor booleano es falso 
La conclusión es que -79 no está en el rango 0 a 100. 
 
2. Se quiere saber si al lanzar tres dados a la vez se obtiene un 6 en cada uno de ellos. La 
condición compuesta correspondiente que utiliza operadores lógicos AND (&&) es: 
 
 (dado1== 6 && dado2== 6 && dado3== 6) 
 
a) Suponiendo que la dado1= 6, dado2= 6 y dado3= 6 la ejecución de esta 
condición procede así: 
 
Primero se evalua la primera condición simple: 
 (6 == 6) Su valor booleano es verdadero. 
 
Después se avalua la segunda condición simple: 
 (6== 6) Su valor booleano es verdadero. 
 
Después se avalua la tercera condición simple: 
 (6== 6) Su valor booleano es verdadero. 
 
Ahora se evalúan los valores booleanos unidos por el operador lógico AND: 
 
 (verdadero && verdadero && verdadero) su valor booleano es verdadero 
 
La conclusión es que todos los dados muestran un 6. 
 
 
b) Suponiendo que la dado1= 6, dado2= 4 y dado3= 6 la ejecución de esta 
condición procede así: 
 
Primero se evalua la primera condición simple: 
 (6 == 6) Su valor booleano es verdadero. 
 
Después se avalua la segunda condición simple: 
 (6== 4) Su valor booleano es falso. 
 
Después se avalua la tercera condición simple: 
 (6== 6) Su valor booleano es verdadero. 
 
Ahora se evalúan los valores booleanos unidos por el operador lógico AND: 
 
 (verdadero && falso && verdadero) su valor booleano es falso 
 
La conclusión es que no todos los dados muestran un 6. 
 
1.6.1.5 DATOS APUNTADOR 
 Este tipo de dato se emplea principalmente con las estructuras de datos (listas ligadas, 
colas, árboles, etc.). 
Un apuntador almacena (apunta hacia) la dirección de una localidad de memoria de la 
computadora que a su vez almacena la información que se desea accesar. Por ejemplo, si un 
apuntador p almacena la dirección de una variable x, se dice que “p apunta a x”. 
Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y 
asocia el nombre de esta a la dirección de memoria donde comienzan los datos de esa 
variable. Las direcciones de memoria se suelen describir como números en hexadecimal 
(números formados por los dígitos del 0 al 9 y por las letras de la A a la F). 
 El tipo de dato apuntador se emplea principalmente con las estructuras de datos: listas 
ligadas, colas, árboles, etc., que se estudian en la materia del mismo nombre, por lo que no 
se utilizará en este curso. 
En apuntadores se usan dos operadores ( * y &): 
 * (asterisco). Permite declarar a una variable como un apuntador. Ejemplos: 
 
int *ptr1; // Apuntador a un dato de tipo entero (int) 
 char *cad1, *cad2; // Dos apuntadores a datos de tipo carácter (char) 
 double *ptr2; // Apuntador a un dato de tipo real (double) 
 
 & (ampersand. No confundirlo con el operador lógico AND). Permite referenciar 
una variable. Es decir, permite obtener la dirección donde está almacenada una 
variable. 
Referenciación. Es la obtención de la dirección de una variable. 
 
Ejemplo: el siguiente programa utiliza el operador (*) para declarar una variable de tipo 
apuntador, y el operador (&) que obtiene la dirección en memoria de la variable. 
 
/* PROGRAMA datoApuntador 
 Muestra los operadores * y & de los apuntadores 
 AUTOR: ing. Jose Rodriguez Ruiz 
 */ 
#include<iostream> 
using namespace std; 
 
int y= 34; // declaración de una variable entera con valor inicial 34 
int *p; // declara a p como un apuntador a una variable entera 
 
 
int main() 
{ 
 p= &y; // el apuntador p toma la direcciòn en memoria de la variable x 
 
 cout<< "El valor de la variable y es: " << y << endl; 
 cout<< "La dirección de x en hexadecimal es: " << &y << endl; 
 cout<<"La variable x esta en la direccion entera: "<< (int)p<<endl<< endl; 
 
 system("pause"); 
 return 0; 
} // fin de main 
 
La salida de este programa es: 
 
 
 
 
Debe quedar claro que este valor puede variar durante cada ejecución del programa, ya 
que se pueden reservar distintos espacios de memoria durante cada ejecución. 
 
 
1.7 VARIABLES, NOMBRES DE VARIABLES, EXPRESIONES Y CONSTANTES 
 Una variable es un objeto que puede tomar diferentes valores, uno a la vez. Pero en 
computación se entiende por variable un lugar de la memoria de la computadora que se 
identifica por un nombre y que puede almacenar diversos valores, uno a la vez. Por 
ejemplo, la variable area (en computación no se utilizan acentos) se puede

Otros materiales

Materiales relacionados

385 pag.
Estructura de Datos y Algoritmos - Aho Hopcroft Ullman

Colégio Dom Bosco

User badge image

Hamburguesa Queso

168 pag.
Fundamentos de Informática

SIN SIGLA

User badge image

Omar Castellanos

45 pag.
Programacion Estructurada

SIN SIGLA

User badge image

Vanina Gisele Beguiristain

557 pag.