Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos y Programación I
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y
astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados de forma lógica y secuencial, que describe el proceso que se debe seguir,
para dar solución a un problema específico.
El lenguaje algorítmico es aquel que implementa una solución teórica a un problema indicando las operaciones a realizar
y el orden en el que se deben efectuarse.
Los algoritmos son independientes de los lenguajes de programación. En cada problema el algoritmo puede escribirse y
luego ejecutarse en un lenguaje diferente de programación. El algoritmo es la infraestructura de cualquier solución, escrita luego
en cualquier lenguaje de programación.
Características de los algoritmos: Características que deben de cumplir los algoritmos obligatoriamente.
Un algoritmo debe resolver el problema para el que fue formulado. Lógicamente no sirve un algoritmo que no resuelve ese
problema. En el caso de los programadores, a veces crean algoritmos que resuelven problemas diferentes al planteado.
Los algoritmos son independientes del ordenador. Los algoritmos se escriben para poder ser utilizados en cualquier
máquina.
Los algoritmos deben de ser precisos. Los resultados de los cálculos deben de ser exactos, de manera rigurosa. No es
válido un algoritmo que sólo aproxime la solución.
Los algoritmos deben de ser finitos. Deben de finalizar en algún momento. No es un algoritmo válido aquel que produce
situaciones en las que el algoritmo no termina.
Los algoritmos deben de poder repetirse. Deben de permitir su ejecución las veces que haga falta. No son válidos los que
tras ejecutarse una vez ya no pueden volver a hacerlo por la razón que sea.
Validez. Un algoritmo es válido si carece de errores. Un algoritmo puede resolver el problema para el que se planteó y sin
embargo no ser válido debido a que posee errores.
Eficiencia. Un algoritmo es eficiente si obtiene la solución al problema en poco tiempo. No lo es si es lento en obtener el
resultado.
Óptimo. Un algoritmo es óptimo si es el más eficiente posible y no contiene errores. La búsqueda de este algoritmo es el
objetivo prioritario del programador. No siempre podemos garantizar que el algoritmo hallado es el óptimo, a veces sí.
1. Análisis. En esta se determina cuál es exactamente el problema a resolver. Qué datos forman la entrada del algoritmo y
cuáles deberán obtenerse como salida.
2. Diseño. Elaboración del algoritmo.
3. Prueba. Comprobación del resultado. Se observa si el algoritmo obtiene la salida esperada para todas las entradas.
Gráficos: Es la representación mediante símbolos de las operaciones que realiza un algoritmo (diagrama de flujo).
Ejemplo: Tengo un teléfono residencial, necesito llamar a alguien y no sé cómo hacerlo.
Inicio
Levante la bocina
Espere tono
Marque el número
Cuelgue la bocina
Fin
No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocódigo).
Inicio
Levante la bocina
Espere tono
Marque el número
Espere que contesten
Hable con la otra persona
Cuelgue la bocina
Fin
Técnicas para la formulación de Algoritmos (Pseudocódigo y Diagrama de Flujo).
Pseudocódigo: Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se emplea, dentro
de la programación estructurada, para realizar el diseño de un programa. En esencial, el Pseudocódigo se puede definir como un
lenguaje de especificaciones de algoritmos. Es la representación narrativa de los pasos que debe seguir un algoritmo para dar
solución a un problema determinado.
Un algoritmo escrito en pseudocódigo siempre se suele organizar en tres secciones: cabecera, declaraciones y cuerpo. En
la sección de cabecera se escribe el nombre del algoritmo. En la sección de declaraciones se declaran algunos objetos (variables,
constantes,...) que va a utilizar el programa. En el cuerpo están descritas todas las acciones que se tienen que llevar a cabo en el
programa, y siempre se escriben entre las palabras inicio y fin.
Escritura o salida de datos: Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora) un resultado o
mensaje. Esta instrucción presenta en pantalla el mensaje escrito entre comillas o el contenido de la variable. Este proceso se
representa así como sigue:
Lectura o entrada de datos: La lectura o entrada de datos consiste en recibir desde un dispositivo de entrada (p.ej. el
teclado) un valor o dato. Este dato va a ser almacenado en la variable que aparece a continuación de la instrucción. Esta operación
se representa así:
Declaración de Variables y Constantes: La declaración de variables es un proceso que consiste en listar al principio del
algoritmo todas las variables que se usarán, además de colocar el nombre de la variable se debe decir qué tipo de variable es .
entero edad,i,contador;
cadena dirección;
real sueldo;
carácter opción;
En la anterior declaración de variables edad, i y contador son declaradas de tipo entero; sueldo es una variable de tipo
real, opcion es de tipo carácter y la variable direccion está declarada como una variable alfanumérica de cadena de caracteres.
Asignación: La asignación consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será
reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
Algoritmo Sumar
variables
entero num1, num2, suma;
Inicio
Escribir (“Introduzca el primer número entero:”);
Leer (num1);
Escribir (“Introduzca el 2do. Número entero:”);
Leer (num2);
suma ← num1 + num2;
Escribir (“El resultado de la suma es: ", suma);
Fin
En programación, los algoritmos (además de en pseudocódigo) también se pueden representar, gráficamente, por medio
de diagramas de flujo.
Un Diagrama de Flujo: Es la representación gráfica de un algoritmo. También se puede decir que es la representación
detallada en forma gráfica de cómo deben realizarse los pasos en la computadora para producir resultados. Esta representación
gráfica se da cuando varios símbolos (que indican diferentes procesos en la computadora), se relacionan entre sí mediante líneas
que indican el orden en que se deben ejecutar los procesos. Los diagramas de flujo se pueden utilizar con otros fines, no obstante,
a los diagramas de flujo que representan algoritmos también se les conoce como ordinogramas. Dicho de otra forma, un
ordinograma representa, de manera gráfica, el orden de los pasos o acciones de un algoritmo. Por ejemplo, véase el siguiente
ordinograma:
Inicio
Leer (num1)
Leer (num2)
suma num1+num2
Fin
El pseudocódigo y los diagramas de flujo son las dos herramientas más utilizadas para diseñar algoritmos en
programación estructurada. Si bien, entre ambos tipos de representación existen las siguientes diferencias importantes:
Favorecen la comprensión del proceso al mostrarlo como un dibujo. El cerebro humano reconoce muy fácilmente los
dibujos.
Un buen diagrama de flujo reemplaza varias páginas de texto.
Permiten identificar los problemas y las oportunidades de mejora del proceso.
Al igual que el pseudocódigo, el diagrama de flujo con fines de análisis de algoritmos de programación puede ser
ejecutado en un ordenador, con un IDE(Entorno de Desarrollo Integrado).
Los símbolos utilizados han sido normalizados por el instituto norteamericano de normalización (ANSI):
Símbolos gráficos más utilizados para dibujar algoritmos por medio de diagramas de flujo (ordinogramas):
Un tipo de dato, es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase
de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué
operaciones se pueden realizar. Tipos de datos comunes son: enteros, números de cómo flotante (decimales), cadenas
alfanuméricas, fechas, horas, entre otros. Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter,
tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una
variable.
Los datos que utilizan los programas (o algoritmos) se pueden clasificar en base a diferentes criterios. Uno de los más
significativos es aquel que dice que todos los datos que utilizan los programas son simples o estructurados. Un dato simple es
indivisible (atómico), es decir, no se puede descomponer.
A continuación, se van a estudiar cinco tipos de datos: entero, real, lógico, carácter y cadena. De ellos, tan solo el tipo
cadena es compuesto. Los demás son los tipos de datos simples considerados estándares. Esto quiere decir que la mayoría de los
lenguajes de programación permiten trabajar con ellos. Por ejemplo, en lenguaje C es posible utilizar datos de tipo entero, real y
carácter, sin embargo, los datos de tipo lógico no se pueden utilizar, ya que, no existen en este lenguaje. Existen otros tip os de
datos, simples y compuestos, que se estudiarán más adelante. A los tipos de datos simples estándares también se les conoce
como tipos de datos primitivos, básicos o fundamentales.
Entero (entero)
Numéricos
Real (real)
Simples Lógicos
Carácter (caracter)
Alfanuméricos
Tipos de Cadena (cadena)
Datos Arreglos (Vectores, Matrices)
Estructurados Registros
(Def. por el usuario) Archivos
Apuntadores
Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los
reales. Este tipo de datos permiten realizar operaciones aritméticas comunes.
Ejemplo: La edad de una persona y el año en que nació, son dos datos de tipo entero:
Edad...: 29
Año....: 1976
Z es un conjunto infinito de números enteros, y como el ordenador no puede representarlos todos, un dato de tipo entero
sólo puede tomar por valor un número perteneciente a un subconjunto de Z. Los valores máximo y mínimo de dicho subconjunto
varían según las características de cada ordenador y del compilador que se utilice. En pseudocódigo, para indicar que un dato es
de tipo entero se utiliza la palabra reservada: entero.
Ejemplo: El peso de una persona (en kilogramos) y su altura (en centímetros), son datos que pueden considerarse de tipo real.
Peso.....:75,3
Altura...: 172,7
R es un conjunto infinito de números reales, y como el ordenador no puede representarlos todos, un dato de tipo real sólo
puede tomar por valor un número perteneciente a un subconjunto de R. Los valores de dicho subconjunto varían según las
características de cada ordenador y del compilador que se utilice. En pseudocódigo, para indicar que un dato es de tipo real se
utiliza la palabra reservada: real.
Datos lógicos: Son aquellos que solo pueden tener dos valores (verdadero o falso) ya que representan el resultado de
una comparación entre otros datos (numéricos o alfanuméricos).
Los valores "verdadero" y "falso" son contrapuestos, de manera que, un dato de tipo lógico siempre está asociado a que
algo se cumpla o no se cumpla.
Ejemplo: El estado de una barrera de paso de trenes es un dato que puede considerarse de tipo lógico, por ejemplo, asociando
"verdadero" a que esté subida y "falso" a que esté bajada.
En pseudocódigo, para indicar que un dato es de tipo lógico se utiliza la palabra reservada: lógico.
Datos alfanuméricos (string): Es una secuencia de caracteres alfanuméricos que permiten representar valores
identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como
alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos
se representan encerrados entre comillas.
En pseudocódigo, el valor de un dato de tipo carácter se puede representar entre comillas simples (') o dobles ("). Pero, en
este curso de diseño de algoritmos, se van a utilizar solamente las comillas simples.
Ejemplo: En un examen con preguntas en las que hay que seleccionar la respuesta correcta entre varias opciones dadas
(a, b, c, d, e), la respuesta correcta de cada una de las preguntas es un dato de tipo carácter.
Obsérvese que, en la cadena "La Odisea", el carácter espacio en blanco también se cuenta. En pseudocódigo, para
indicar que un dato es de tipo cadena se utiliza la palabra reservada:
Identificadores
La mayoría de los elementos de un algoritmo escrito en pseudocódigo se diferencian entre sí por su nombre. Por ejemplo,
los tipos de datos básicos se nombran como:
entero, real, logico y carácter
Cada uno de ellos es un identificador. Los identificadores representan los datos o elementos de un programa (constantes,
variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posición en la memoria de
la computadora, que permite acceder a su contenido.
Los identificadores entero, real, logico y caracter están predefinidos, forman parte del lenguaje algorítmico. No obstante,
en un algoritmo también pueden existir identificadores definidos por el programador. Por ejemplo, un algoritmo puede utilizar
variables y constantes definidas por el programador. Además, los algoritmos también se deben nombrar mediante un identificador.
En pseudocódigo, a la hora de asignar un nombre a un elemento de un algoritmo, se debe de tener en cuenta que todo
identificador debe cumplir unas reglas de sintaxis.
Reglas para formar un identificador:
Ejemplo 1: Algunos identificadores válidos que pueden ser definidos por el programador son:
numero
dia_del_mes
PINGUINO1
_ciudad
Z
Ejemplo 2: Los siguientes identificadores no son válidos por incumplir la segunda regla:
numero123
_DÍA
numero*
lugar de nacimiento
año
entero y caracter son identificadores predefinidos (ya existen), por tanto, no pueden ser definidos por el programador, en
cumplimiento de la tercera regla.
Variable: Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la
ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa. Para poder reconocer una variable en la
memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo.
En programación, una variable representa a un espacio de memoria en el cual se puede almacenar un dato.
Gráficamente, se puede representar como:
Cuantas son las variables que el programa necesita para realizar las tareas que se le han encomendado.
El tipo de dato que puede almacenar cada una de ellas.
Durante la ejecución de un programa, el valor que tome el dato almacenado en una variable puede cambiar tantas veces
como sea necesario, pero, siempre, tomando valores pertenecientes al tipo de dato que el programador ha decidido que puede
almacenar dicha variable, ya que, el tipo de dato de una variable no puede ser cambiado durante la ejecución de un programa.
Ejemplo:
area = pi * radio ^ 2
Las variables son : el radio, el area y la constate es pi
Para que un programa pueda hacer uso de una o más variables, éstas deben ser declaradas previamente. Todas las
variables de un programa se declaran de la misma forma, indicando de cada una de ellas:
Ejemplo 1: La declaración de una variable para almacenar la edad de una persona se escribe:
entero edad
En un programa no se pueden declarar varias variables con el mismo nombre (salvo excepciones que estudiaremos más
adelante), sin embargo, sí pueden existir varias variables del mismo tipo de dato. Siguiendo con el ejemplo, si también se quiere
declarar una variable para almacenar su número de hijos, se debe escribir:
entero edad
entero numero_de_hijos
Las variables de un programa no tienen por qué estar contiguas en la memoria del ordenador:
Puesto que las dos variables son del mismo tipo de dato, se pueden declarar en la misma línea separándolas por medio
de una coma (,).
Opcionalmente, cuando se declara una variable, a ésta se le puede asignar un valor inicial.
Ejemplo 2: Si se desea declarar una variable para almacenar un número entero y que, inicialmente, contenga el valor 35, se debe
escribir:
entero numero = 35
Clasificación de las Variables
Por su contenido
Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir
almacenan números del 0 al 9, signos (+ y -) y el punto decimal.
Ejemplo:
iva = 0.15 pi = 3.1416 costo = 2500
Variables Lógicas: Son aquellas que solo pueden tener dos valores (verdadero o falso) estos representan el resultado de
una comparación entre otros datos.
Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y caracteres especiales).
Ejemplo:
letra = a apellido = lopez direccion = Av. Libertad #190
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan
normalmente dentro de un programa.
Ejemplo:
Suma = a + b /c
Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una
condición. Con los incrementos generalmente de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se
van leyendo o calculando progresivamente.
En programación, una constante representa a un valor (dato almacenado en memoria) que no puede cambiar durante la
ejecución de un programa. Por ejemplo, en lenguaje C, una constante puede ser de tipo entero, real, carácter, cadena o
enumerado. Las constantes de tipo enumerado se van a estudiar en el apartado "Datos de Tipos Enumerados". En cuanto a las
demás, se pueden expresar de dos formas diferentes:
1. Por su valor.
2. Con un nombre (identificador).
Ejemplo 1: Las siguientes constantes de tipo entero están expresadas por su valor:
-5
10
Para expresar una constante con un nombre, la constante debe ser declarada previamente. Todas las constantes que se
declaran en un programa son definidas de la misma forma, indicando de cada una de ellas:
1. Su nombre (mediante un identificador).
2. El valor que simboliza (mediante una expresión).
En pseudocódigo, para declarar una constante, vamos a utilizar la sintaxis:
<nombre_de_la_constante> = <expresión>
Y para declarar más de una constante en una misma línea, las separaremos por medio de comas (,).
Ejemplo 2: De modo que, si se quieren declarar las constantes de tipo entero del ejemplo anterior, asignándoles un
identificador, se puede escribir, por ejemplo:
TEMPERATURA = -5
MES = 10
O también:
Operadores
Son elementos que relacionan de forma diferente, los valores de una o mas variables y/o constantes. Es decir, los
operadores nos permiten manipular valores.
Operadores Aritméticos
Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores (variables y constantes).
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado
es entero; si alguno de ellos es real, el resultado es real.
Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
mod Modulo (residuo de la división entera)
Ejemplos:
Expresión Resultado
7/2 3.5
12 mod 7 5
4+2*5 14
Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con paréntesis anidados se evalúan de
dentro a fuera, el paréntesis más interno se evalúa primero.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden:
1. ^ Exponenciación
2. *, /, mod Multiplicación, división, modulo.
3. +, - Suma y resta.
Los operadores en una misma expresión con igual nivel de prioridad se evalúan de izquierda a derecha.
Ejemplos:
4 + 2 * 5 = 14 23 * 2 / 5 = 9.2
3 + 5 * (10 - (2 + 4)) = 23 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98
Operadores Relacionales
Se utilizan para establecer una relación entre dos valores. Luego compara estos valores entre si y esta comparación
produce un resultado de certeza o falsedad (verdadero o falso).
Los operadores relacionales comparan valores del mismo tipo (numéricos o cadenas). Estos tienen el mismo nivel de
prioridad en su evaluación.
Ejemplos no lógicos:
a<b<c
10 < 20 < 30
V > 5 < 30
(no es lógico porque tiene diferentes operandos)
Operadores Lógicos
Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos valores pueden ser resultado de una
expresión relacional.
Ejemplo:
Para los siguientes ejemplos T significa verdadero y F falso.
Operador Or Operador Or
Operando1 Operador Operando2 Resultado
V Or V V
V F V
F V V
F F F
V = VERDADERO
F = FALSO