Está en la página 1de 28

Tecsup

Virtu@l

Algoritmos
pseudocódigos
y diagramas de
flujo

Copyright © 2008 por TECSUP


Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

ÍNDICE

1. Introducción ................................................................................ 3
2. Objetivos ..................................................................................... 3
3. Historia de la programación ........................................................ 3
4. ¿Qué es programación? ............................................................... 3
5. ¿Qué es un Algoritmo?................................................................ 4
6. Características de un algoritmo:.................................................. 4
7. Resolución de Problemas ............................................................ 5
8. Criterios para desarrollar algoritmos........................................... 6
9. Ejemplos de desarrollo de algoritmos: ........................................ 7
10. Flujogramas................................................................................. 9
11. Diagramas de Flujo ..................................................................... 9
12. Ejemplo de Diagrama de Flujo ................................................. 10
13. Pseudocódigos........................................................................... 10
14. Fundamentos de la programación ............................................. 11
15. El valor del lenguaje.................................................................. 14
16. Errores de los programas........................................................... 14
17. Pasos para crear un programa ................................................... 14
18. Características de los programas ............................................... 14
19. Importancia relativa .................................................................. 15
20. Representación de la información ............................................. 15
21. Datos ......................................................................................... 15
22. Clasificación de los lenguajes de programación ....................... 16
22.1. Lenguajes imperativos .................................................. 16
22.2. Lenguajes declarativos .................................................. 22
23. Lenguajes de programación ...................................................... 25
24. Interpretes y compiladores ........................................................ 26
25. Compiladores ............................................................................ 27
26. Estructurado VS Objetos........................................................... 27
27. Glosario ..................................................................................... 28
28. Referencias Bibliográficas ........................................................ 28

Página 2
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

1. Introducción

Esta unidad nos permite conocer los elementos fundamentales de


los lenguajes de programación, la importancia de los algoritmos,
nos da un alcance de los diferentes lenguajes de programación.
También revisamos la diferencia entre los intérpretes y
compiladores.

2. Objetivos

• Definir los conceptos de programa y algoritmo.


• Definir y crear algoritmos para resolver problemas.
• Resolver problemas usando pseudo códigos.
• Diferenciar los lenguajes de programación.
• Definir la diferencia entre intérpretes y compiladores.

3. Historia de la programación

Al desarrollarse las primeras computadoras electrónicas, se vio la


necesidad de programarlas, es decir, de almacenar en memoria la
información sobre la tarea que iban a ejecutar. Las primeras se
usaban como calculadoras simples; se les indicaban los pasos de
cálculo, uno por uno.

John Von Neumann desarrolló el modelo que lleva su nombre,


para describir este concepto de "programa almacenado". En este
modelo, se tiene una abstracción de la memoria como un conjunto
de celdas, que almacenan simplemente números. Estos números
pueden representar dos cosas: los datos, sobre los que va a
trabajar el programa; o bien, el programa en sí.

Un programa es el arte
4. ¿Qué es programación?
de:
- Seleccionar la parte que
• Programación es: hacer, construir, programas.
nos interesa de la realidad.
• Un programa es el arte y la técnica de :
- Sintetizarla en unos
• Seleccionar la parte que nos interesa de la realidad.
pocos datos.
• Sintetizarla en unos pocos datos. - Reproducir su
• Reproducir su comportamiento. comportamiento.
• Y analizar las consecuencias. Y analizar las
• O sea, que es un soporte fundamental a la ingeniería. consecuencias.

Página 3
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

5. ¿Qué es un Algoritmo?

Es una fórmula para resolver un problema. Es un conjunto de


acciones o secuencia de operaciones que ejecutadas en un
determinado orden resuelven el problema. Existen “n”
algoritmos, hay que elegir el más efectivo".

Un algoritmo se define como un método que se realiza paso a


paso para solucionar un problema que termina en un número
finito de pasos.

Pienso
Deseo calcular
Ya tengo la
el máximo de
solución
dos números

• Es una forma de escribir la solución de un problema.


• Serie ordenada y finita de instrucciones elementales que
trabaja sobre los datos modificándolos.
• A partir de los valores iniciales.
• Calcula los valores finales.
• Muchas veces hay que ir llevando a los datos a través de
múltiples transformaciones.
• Estados: inicial -> intermedios -> final.

6. Características de un algoritmo:

Las características de un algoritmo son:

• Debe ser preciso e indicar el orden de realización de cada


paso.
• Debe ser definido. Si se sigue un algoritmo dos veces, se debe
obtener el mismo resultado cada vez.
• Debe ser finito. Si se sigue un algoritmo, se debe terminar en
algún momento; o sea debe tener un número finito de pasos.
• La definición de un algoritmo debe describir tres partes:
Entrada, Proceso y Salida.

Página 4
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

Actividad:
¿Cuáles son las características de un algoritmo?
¿Qué partes debe describir un algoritmo?

T = minutos

Problema Problema
A Piensa y plantea
B
una solución

Cerebro

“Lógica” Algoritmo

Lenguaje de programación

Programa
Almacena en memoria

Solución Solución
A B

T = segundos

7. Resolución de Problemas

Resolución de un problema desde el punto de vista algorítmico:

• Análisis preliminar o evaluación del problema: Estudiar el


problema en general y ver que parte nos interesa. El objetivo
de ésta fase es comprender el problema.
• Definición o análisis del problema: Ver que es lo que entra y
que es lo que sale, las posibles condiciones o restricciones.
• Diseño del algoritmo: Diseñar la solución. Una vez
comprendido el problema se trata de determinar que pasos o
acciones tenemos que realizar para resolverlo.

Página 5
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

8. Criterios para desarrollar algoritmos

Si el problema es bastante complicado lo mejor es dividirlo en


partes más pequeñas e intentar resolverlas por separado.

Dividir el
Problema problema
complejo en módulos

Algoritmo Algoritmo
Problema a b
Problema
a b
Algoritmo
Problema e
e
Solución

Problema Problema Algoritmo Algoritmo


c d c d

Esta metodología de “divide y vencerás” también se conoce con el


nombre de diseño descendente. Las ventajas de aplicar esto son:

• Al dividir el problema en módulos o partes se comprende más


fácilmente.
• Al hacer modificaciones es más fácil sobre un módulo en
particular que en todo el algoritmo.
• En cuanto a los resultados, se probarán mucho mejor
comprobando si cada módulo da el resultado correcto que si
intentamos probar de un golpe todo el programa porque si se
produce un error sabemos en que módulo ha sido.

Página 6
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

9. Ejemplos de desarrollo de algoritmos:

• Máximo de dos números:

• Primera Solución:

• Segunda Solución:

Página 7
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

• Mayor de tres números:


• Pensamos en la posible solución del problema:

Ya sé !
Es como si quisiera
saber cuál de
tres objetos
pesa más !
Para ello utilizo
una “balanza”
Deseo calcular
Cómo resuelvo
el máximo de
este problema ?
tres números

1Kg 2Kg 3Kg

• Encontramos la solución:

1Kg Luego la pesamos con la


Comparamos dos al
tercera y determinamos
azar y determinamos
la que tiene más peso.
cuál pesa más.
2Kg
1Kg 2Kg

3Kg

2Kg 3Kg

Página 8
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

• Determinamos el algoritmo a utilizar :


• Comparar el primero y el segundo entero,
deduciendo cuál es el mayor.
• Comparar el mayor anterior con el tercero y
deducir cuál es el mayor. Este será el resultado.

• Suma de los 10 primeros números:

Suma = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

Se inicializa la variable suma:


Suma = 0
Se inicializa la variable contador:
Contador = 1
Suma = Suma + Contador
Incrementa Contador
Es Contador es diferente de 11 entonces Vuelve
a sumar
Fin

10. Flujogramas

• Es una notación gráfica para implementar algoritmos. Se basa


en la utilización de unos símbolos gráficos que denominamos
cajas, en las que escribimos las acciones que tiene que realizar
el algoritmo.
• Las cajas están conectadas entre sí por líneas y eso nos indica
el orden en el que tenemos que ejecutar las acciones. En todo
algoritmo siempre habrá una caja de inicio y otra de fin, para
el principio y final del algoritmo.

11. Diagramas de Flujo

• Un Diagrama de Flujo es una representación semigráfica del


algoritmo en cuestión y en el que cada paso de; algoritmo se
visualiza dentro del símbolo adecuado. Esto nos facilita la
visión descriptiva de la ejecución del programa, pudiéndose
obtener para cada paso un resultado.
• En forma genérica un Diagrama de Flujo es un método para
representar con símbolos las operaciones y el flujo de datos en
el procesamiento de la información acerca de los datos de un
sistema de procesamiento o de un programa.
• Se acostumbra dibujar los Diagramas de Flujo de manera que
puedan ser leídos de izquierda a derecha, y de arriba hacia

Página 9
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

abajo. Si el flujo va en sentido inverso se utilizan pequeñas


flechas para indicarlo. Estas flechas pueden ser usadas
también, en el flujo normal para aumentar la claridad y
legibilidad del mismo, llamadas líneas de flujo.

12. Ejemplo de Diagrama de Flujo

• La suma de dos números:

13. Pseudocódigos

• Es una herramienta utilizada en el diseño de un programa


para describir la solución del problema, en forma de
algoritmo, dirigido a la máquina, haciendo uso del lenguaje
natural lógico, pero sometido a ciertas reglas.
• El lenguaje de pseudocódigo nos permite escribir los
programas de manera que lo entienda la computadora, es
decir, imitar el código de las computadoras. El pseudocódigo
se concibió para superar las dos principales desventajas de un
Diagrama de Flujo: su lentitud para crearlo y la dificultad de
modificación.
• Con el pseudocódigo la rutina alcanzada, sería la misma, sin
importar el lenguaje en que se vaya a desarrollar. Posee una
sintaxis intuitiva y menos formal que la de un Lenguaje de
Programación.
• Los comandos del pseudocódigo son de la misma naturaleza
que los empleados en los algoritmos. Aquí una lista de los
mismos:
• Se utilizan los símbolos como en los algoritmos, los
operadores aritméticos, que son: suma ( + ), resta ( - ),
multiplicación ( * ), división ( / ), división entera (div),
resto división entera ( mod) y potenciación ( ^ ).
• Se utilizan los identificadores (nombres simbólicos) que
representan las cantidades que son procesadas por el

Página 10
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

algoritmo. (variables constantes, nombres de programa o


algoritmos, etc.).
• Utilizan los comentarios, textos adicionales que no serán
ejecutados por el programa, sirven de ayuda o referencia.
Los símbolos para poder incluir comentarios son: { }, [ ],
(* *), ‘, !. Si existe texto entre estos símbolos el programa lo
leerá como un comentario.
• Se usan ciertas palabras claves.

14. Fundamentos de la programación

¿Cómo es que describimos un programa como números? Se tenía


el problema de representar las acciones que iba a realizar la
computadora, y que la memoria, al estar compuesta por switches
correspondientes al concepto de bit, solamente nos permitía
almacenar números binarios.

La solución que se tomó fue la siguiente: a cada acción que sea


capaz de realizar nuestra computadora, asociarle un número, que
será su código de operación (opcode). Por ejemplo, una
calculadora programable simple podría asignar los opcodes:

1 = SUMA
2 = RESTA
3 = MULTIPLICA
4 = DIVIDE

Podemos ver que con esta representación, es simple expresar las


operaciones de las que es capaz el hardware (en este caso, nuestra
calculadora imaginaria), en la memoria.

La descripción y uso de los opcodes es lo que llamamos lenguaje


de máquina. Es decir, la lista de códigos que la máquina va a
interpretar como instrucciones, describe las capacidades de
programación que tenemos de ella; es el lenguaje más primitivo,

Página 11
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

depende directamente del hardware, y requiere del programador


que conozca el funcionamiento de la máquina al más bajo nivel.

Un Lenguaje de Programación es aquél que es utilizado para


escribir programas de computadoras que puedan ser entendidos
por ellas.

Estos lenguajes se clasifican en tres grandes categorías:


• Lenguaje Máquina
• Lenguaje de Bajo nivel (ensamblador)
• Lenguaje de Alto nivel

Los lenguajes más primitivos fueron los lenguajes de máquina.


Esto, ya que el hardware se desarrolló antes del software, y
además cualquier software finalmente tiene que expresarse en el
lenguaje que maneja el hardware.

La programación en esos momentos era sumamente tediosa, pues


el programador tenía que "bajarse" al nivel de la máquina (unos y
ceros) y decirle, paso a paso, cada punto de la tarea que tenía que
realizar. Además, debía expresarlo en forma numérica; y por
supuesto, este proceso era propenso a errores, con lo que la
productividad del programador era muy limitada.

El primer gran avance que se dio, como ya se comentó, fue la


abstracción dada por el Lenguaje Ensamblador, y con él, el
nacimiento de las primeras herramientas automáticas para
generar el código máquina. Esto redujo los errores triviales, como
podía ser el número que correspondía a una operación, que son
sumamente engorrosos y difíciles de detectar, pero fáciles de
cometer. Sin embargo, aún aquí es fácil para el programador
perderse y cometer errores de lógica, pues debe bajar al nivel de
la forma en que trabaja el CPU, y entender bien todo lo que
sucede dentro de él.

Con el desarrollo en los 50s y 60s de algoritmos de más elevado


nivel, y el aumento de poder del hardware, empezaron a entrar al
uso de computadoras científicos de otras ramas; ellos conocían
mucho de Física, Química y otras ramas similares, pero no de
Computación, y por supuesto, les era sumamente complicado
trabajar con lenguaje Ensamblador en vez de fórmulas.

Así, nació el concepto de Lenguaje de Alto Nivel, con el primer


compilador de FORTRAN (FORmula TRANslation), que, como su
nombre indica, inició como un "simple" esfuerzo de traducir un
lenguaje de fórmulas, al lenguaje ensamblador y por consiguiente
al lenguaje de máquina. A partir de FORTRAN, se han
desarrollado innumerables lenguajes, que siguen el mismo
concepto: buscar la mayor abstracción posible, y facilitar la vida al

Página 12
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

programador, aumentando la productividad, encargándose los


compiladores o intérpretes de traducir el lenguaje de alto nivel, al
lenguaje de computadora.

Hay que notar la existencia de lenguajes que combinan


características de los de alto nivel y los de bajo nivel (es decir,
Ensamblador).

Un ejemplo es C: contiene estructuras de programación de alto


nivel, y la facilidad de usar librerías que también son
características de alto nivel; sin embargo, fue diseñado con muy
pocas instrucciones, las cuales son sumamente sencillas, fáciles de
traducir al lenguaje de la máquina; y requiere de un
entendimiento apropiado de cómo funciona la máquina, el uso de
la memoria, etcétera.

Por ello, muchas personas consideramos a lenguajes como C (que


fue diseñado para hacer sistemas operativos), lenguajes de nivel
medio.

• El lenguaje natural es complicado y ambiguo


• “La señora hizo un lenguaje”.

Necesitamos un lenguaje
• Simple.
• Conciso.

Página 13
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

• Preciso.
• Abstracto.
• Capaz.

• ...que permita describir datos y algoritmos

15. El valor del lenguaje

Como todos los lenguajes ideados por los humanos, un lenguaje


de programación sirve para expresar conceptos.

Un lenguaje es tanto mejor cuanto más fácil sea escribir


programas con el, lo que quiere decir que los programas sea
menos susceptibles de contener errores y más económico sean de
mantener en el futuro.

16. Errores de los programas

Sintácticos
• Los detecta el compilador.
• Mal uso de los elementos lexicográficos.
• Ejemplo: Falta un paréntesis, sobre una coma, etc.

Semánticos

• Lo que se dice no tiene sentido.


• Estáticos: los detecta el compilador.
• Ejemplo: Sumar longitud con volumen.
• Dinámicos: se detectan al ejecutar.
• Ejemplo: Sumar en vez de multiplicar.

17. Pasos para crear un programa

• Diseñar la solución
• Editar un programa
• Compilar el programa
• Ejecutar el programa
• Probar el programa
• Mantener el programa

18. Características de los programas

• Correctos
• ¿Quién quiere un programa incorrecto?

Página 14
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

• ¿Existe la perfección?
• Ingeniería es el arte de lo posible.
• Eficientes
• Uso eficaz de recursos (memoria, disco ...)
• Ingeniería es el arte de lo rentable.
• Fácilmente modificables
• Los clientes cambian.
• Los problemas evolucionan.
• La comprensión del problema y la solución mejoran.
• Ingeniería es el arte de lo adaptable.

19. Importancia relativa

• Teniendo en cuenta que


• Nada es perfecto.
• Los computadores son cada día más rápidos.
• Todo cambia.
• legible > correcto > eficiente
¿Qué se hace con los programas incorrectos?
• Se educa al cliente.
• Se cambia la especificación.
• Se modifica el programa!

20. Representación de la información

• Aproximación a la realidad
• Números enteros
• Se representan en binario.
• 4, 8, 16, 23, 64 bits => ¡rango limitado!
• Reales -> conjunto finito
• <mantisa, exponente> con número finito de cifras.
• Hay un mínimo, un máximo y un granulado.
• Caracteres
• a-z, A-Z, 0-9, ?¿<=>,;... : número limitado.

21. Datos

• Estructuras algebraicas.
• Conjunto de valores.
• Propiedades y operaciones.
• Las hay sencillas y compuestas.
• Las estructuras de datos reflejan las estructuras de la realidad.
• Los datos concretos cuantifican la realidad.

Página 15
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

22. Clasificación de los lenguajes de programación

22.1. Lenguajes imperativos

Estos lenguajes se basan en comandos u órdenes que se les


da al computador para que hagan algo, con el fin de
organizar o cambiar valores en ciertas partes de la
memoria.

La ejecución de estos comandos se realiza, en la mayor


parte de ellos, secuencialmente; es decir, hasta que un
comando no ha sido ejecutado no se lee el siguiente.

Según el domino, o mejor dicho con el propósito que se


utiliza el programa podríamos hablar de lenguajes de
dominio específico y de dominio general.

22.1.1. Específicos

Las computadoras se fabrican hoy en día con un


gran propósito general, por lo que existen
problemas para desarrollar programas para las
mismas. Para cubrir este problema se crean los
lenguajes específicos, donde el programador se
encuentra en un nivel de abstracción aún mayor,
puesto que se focaliza mucho más en el problema
y muy lejos de lo que sería el hardware del
computador. Este hecho tiene por el contrario la
necesidad de unos compiladores o intérpretes
mucho más potentes para realizar el mapeo del
programa.

Estos lenguajes ofrecen la posibilidad de


desarrollar software, usando una notación más
cercana a la utilizada por expertos en el dominio
del problema que se quiere resolver. Este tipo de
lenguajes también facilita la reutilización de
software, así como facilitar la verificación del
software que se produzca, además pueden
permitir a personas que no son programadores la
producción de software. Algunos lenguajes
específicos son:

• Macromedia director: para la realización de


presentaciones.
• Html: generación de hipertextos para WWW.
• Mathematica: procesamiento simbólico

Página 16
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

22.1.2. Generales

Podríamos decir que estos lenguajes son los que


no son específicos, englobando a un gran número
de lenguajes que pueden ser utilizados con
diferentes fines. Se pueden dividir en alto y bajo
nivel, según la complejidad de su código y del
nivel de abstracción.

22.1.2.1. Lenguajes de Bajo Nivel

Son los lenguajes más básicos donde no existe casi


nivel de abstracción, en los que cada instrucción
de máquina corresponde con una instrucción que
aporta el usuario, bien sea en código binario
(lenguaje máquina) o bien en códigos simbólicos
(ensambladores).

Lenguaje máquina

Estos son de alta dificultad para el usuario, ya que


los programas deben ser escritos en forma de
sucesiones de 1 y 0, tales que el computador
pueda reconocer y ejecutar cada instrucción. Por
tanto estos lenguajes son directamente inteligibles
por el computador. Los principales inconvenientes
del uso del lenguaje de máquina es la lentitud de
redacción del programa, la dificultad de su
escritura y la facilidad con la que se cometen
errores.

Sin embargo existe una ventaja, en ocasiones


definitiva, con respecto a otros lenguajes, ésta es la
posibilidad de cargar y ejecutar directamente el
programa escrito en lenguaje máquina, cosa
imposible con otros lenguajes.

Ensambladores

El contenido habitual en una instrucción de la


computadora consiste en la información sobre la
operación a efectuar (código de operación) y sobre
la dirección del dato sobre el cual se trabaja
(operando).

Con el fin de simplificar la confección de


programas, se piensa en la sustitución de los ceros
y unos de la instrucción por una serie de símbolos.

Página 17
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

A los lenguajes de programación que utilizan esta


filosofía se les llama lenguajes ensambladores.

Normalmente estos lenguajes construyen sus


instrucciones mediante dos códigos simbólicos,
uno correspondiente al código de operación, y
otro para expresar la dirección del operando, de
modo que la complejidad a la hora de introducir
grandes series de ceros y unos desaparece al ser
sustituidos los códigos numéricos por símbolos
que de alguna manera se relacionan con la clase
de operación a realizar.

La principal característica del ensamblador es que


se requiere una instrucción simbólica por cada
instrucción de máquina.

Se dice que este tipo de lenguaje está orientado a


la máquina, con lo cual el lenguaje ensamblador
de un computador no es utilizable en un modelo
distinto, ya que los juegos de instrucciones de
computadores distintos suelen ser diferentes.

A diferencia de lo que ocurre en el lenguaje de


máquina, un programa escrito en lenguaje
ensamblador no puede ser ejecutado directamente
por el computador, sino que es necesaria una fase
previa de traducción al lenguaje de máquina en la
que los distintos códigos simbólicos del programa
original (programa fuente) son sustituidos por sus
respectivos códigos binarios. Al resultado de esta
traducción se le conoce como programa objeto,
que es directamente ejecutable por el computador.

El empleo de un ensamblador hace que el


computador se implique más a la hora de resolver
un problema, en beneficio del programador,
además se facilita un poco la inteligibilidad del
programa y su puesta a punto final.

En cualquier caso el uso del lenguaje ensamblador


tiene una serie de inconvenientes: Dependencia
total de la máquina, que hace que en caso de
cambio de computador nuestro programa sea
inútil.

Necesidad de personal muy especializado en


programación, que conozca ampliamente el
computador y su lenguaje.

Página 18
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

Estos dos condicionantes eliminan casi siempre la


utilización del computador como instrumento de
resolución de problemas, ya que se perdería
mucho tiempo en aprender a utilizar el lenguaje
ensamblador.

22.1.2.2. Lenguajes de Alto Nivel

Ante estas limitaciones surge la necesidad de crear


un nuevo tipo de lenguaje que sea más fácil de
utilizar y que sirva para cualquier computador, es
así como nacen los lenguajes de nivel alto, con
unas características principales para satisfacer la
necesidad:
• Universalidad: Posibilidad de utilización en
cualquier computador.
• Orientación al problema: es decir, creados para
un determinado problema.

Su importancia radica en que un programador no


tiene porque tener un conocimiento sobre el
computador, simplemente se puede limitar a
preocuparse del lenguaje en sí mismo. Esto
acarrea el consiguiente problema de que se
necesitará de un “traductor” posteriormente para
pasarse al lenguaje máquina: los llamados
compiladores.

Estos lenguajes se podrían dividir en tres:


Procedurales, por bloques, orientados a objetos

Procedurales

Los lenguajes procedurales están fundamentados


en la utilización de variables para almacenar
valores y en la realización de operaciones con los
datos almacenados. Algunos ejemplos son:
FORTRAN, PASCAL, C, ADA, ALGOL.

En este tipo de lenguajes, cuyo origen está ligado


a la propia arquitectura de von Neumann, la
arquitectura consta de una secuencia de celdas,
llamadas memoria, en la cual se pueden guardar
en forma codificada, lo mismo datos que
instrucciones; y de un procesador, el cual es capaz
de ejecutar de manera secuencial una serie de
operaciones, principalmente aritméticas y
booleanas, llamadas comandos. En general, un

Página 19
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

lenguaje procedural ofrece al programador


conceptos que se traducen de forma natural al
modelo de la máquina. El programador por lo
general tiene que traducir la solución abstracta del
problema a términos muy primitivos, cercanos a
la máquina. La distancia entre el nivel del
razonamiento humano y lo expresable por los
lenguajes imperativos causa que sus programas
sean más "comprensibles" para la máquina que
para el hombre.

Orientados a objetos

Un objeto se puede definir como un grupo de


procedimientos que comparten un estado. Se
define al conjunto de datos como “estado”, y
“métodos” como el conjunto de procedimientos
que pueden alterar ese estado. Un programa
orientado a objeto es un método de
implementación en el que los programas están
organizados como colecciones de objetos, donde
cada uno es una instancia de alguna clase, y
donde todas las clases son miembros de una
jerarquía de clases conectadas por relaciones de
herencia.

Son aquellos en los que el lenguaje obliga a seguir


una determinada metodología.

Son lenguajes recientes y como ejemplos de ellos


tendríamos:

• SMALLTALK: Sería el primer lenguajes


relevante orientado a objetos. Es
principalmente un lenguaje interpretado, es
decir es un lenguaje compilado en forma
incremental: tanto el compilador como el
lenguaje son parte del ambiente de
programación smalltalk, cuando se utiliza
smalltalk nunca se sale del ambiente de
programación.

• C++: Es una versión ampliada de C. Es un


lenguaje de propósito bastante general que
tiene su fundamento obviamente en el antiguo
C, pero que utiliza algunas sentencias de
smalltalk. Es un programa compilado.

Página 20
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

• JAVA: Se diseñó para ser pequeño, sencillo y


portátil a través de plataformas y sistemas
operativos, tanto a nivel de código fuente
como binario, lo que significa que los
programas en Java pueden ejecutarse en
cualquier computadora que tenga instalada
una máquina virtual de Java. Es un lenguaje
ideal para distribuir programas ejecutables vía
WWW, además de un lenguaje de
programación de propósito general para
desarrollar programas que sean fáciles de usar.
Otra característica es que es interpretado ya
que corre en máquina virtual.

Proceso paralelo

La necesidad de ofrecer concurrencia en el acceso


a los recursos computacionales se remonta a los
primeros sistemas operativos. Mientras que un
programa realizaba una operación de entrada o
salida otro podría gozar del tiempo del
procesador para realizar otra distinta. Aprovechar
al máximo los recursos computacionales fue una
necesidad apremiante, sobre todo en la época en
que las computadoras eran caras y escasas; el
sistema operativo tenía que ofrecer la ejecución
concurrente y segura de programas de varios
usuarios, que desde distintas terminales utilizaban
un solo procesador, y así surgió la necesidad de
introducir algunos conceptos de programación
concurrente para programar los sistemas
operativos.

Posteriormente, cuando los procesadores


cambiaron de tamaño y de precio, se abrió la
posibilidad de contar con varios procesadores en
una máquina y ofrecer el procesamiento en
paralelo, es decir, procesar varios programas al
mismo tiempo. Esto dio el impulso a la creación
de lenguajes que permitían expresar el
paralelismo.

Finalmente, llegaron las redes de computadoras,


que también ofrecen la posibilidad de ejecución en
paralelo, pero con procesadores distantes, lo cual
conocemos como la programación distribuida.

En resumen, el origen de los conceptos para el


manejo de concurrencia, paralelismo y

Página 21
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

distribución está en el deseo de aprovechar al


máximo la arquitectura von Neumann y sus
modalidades reflejadas en conexiones paralelas y
distribuidas.

Históricamente encontramos en la literatura


soluciones conceptuales y mecanismos tales como:
semáforos, regiones críticas, monitores, envío de
mensajes (CSP), llamadas a procedimientos
remotos (RPC), que posteriormente se incluyeron
como partes de los lenguajes de programación en
Concurrent Pascal, Modula, Ada, OCCAM, y
últimamente en Java.

22.2. Lenguajes declarativos

A diferencia de los lenguajes imperativos, los lenguajes


declarativos facilitan la escritura de relaciones y funciones
y en ellos no se hacen nunca asignaciones a variables.

Están considerados como “de más alto nivel”, ya que


un programador declarativo trabaja con conceptos más
que con localizaciones dentro de la propia máquina, es
decir, está basado en el pensamiento humano y las
matemáticas; y más alejado del modelo de computador.

Si bien hay que ser consciente de que existen aplicaciones


más idóneas para el uso de otros estilos de programación,
el paradigma declarativo ha demostrado su eficiencia en
campos como la inteligencia artificial, las bases de datos
relacionales, los sistemas expertos, los algoritmos
numéricos, el desarrollo de compiladores y programas de
búsqueda y ordenamiento, así como sistemas para la
encriptación de información.

Los lenguajes declarativos están orientados a buscar la


solución del problema, sin preocuparse por la forma de
llegar a ello; es decir, el programador debe concentrarse en
la lógica del algoritmo, más que en el control de la
secuencia. Los programas están formados por un conjunto
de definiciones o ecuaciones, las cuales describen lo que
debe ser calculado, no en sí la forma de hacerlo. Las
variables sólo pueden tener asignado un solo valor a lo
largo de la ejecución del programa, lo cual implica que no
puede existir asignación destructiva. Debido a esto, cobra
especial importancia el uso del anidamiento y la
recursividad.

Página 22
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

22.2.1. Programación funcional

Los lenguajes funcionales son modelos basados en


la noción de las funciones matemáticas, las cuales
pueden considerarse como un mecanismo para
aplicar ciertas operaciones sobre algunos valores
(argumentos), y con esto obtener un resultado
(valor de la función para dichos argumentos). En
los lenguajes funcionales puros no se permiten
asignaciones a variables globales ni efectos
laterales: sólo operan sobre funciones.

Aunque normalmente estamos acostumbrados a


que los argumentos y el resultado de una función
sean constantes numéricas, existe también la
posibilidad de que, tanto los argumentos como el
resultado de la función, pudiesen ser otra función
o incluso la misma, lo que puede interpretarse
como una forma de recursividad, que constituye
una de las herramientas más poderosas de las que
se sirve la programación funcional.

El primero, y todavía más común lenguaje


funcional, es el LISP, basado en el cálculo lambda
de Alonzo Church; y en el cual se basa toda la
teoría de la programación funcional.

22.2.2. Programación lógica

El fundamento de este estilo de programación es


la lógica de predicados, una extensión del sistema
lógico de Aristóteles, el cual es usado para
encontrar nueva información de una base de datos
conocida, siguiendo unas reglas deductivas.

Por tanto, estas aserciones lógicas representan el


conocimiento que se tiene de un ambiente
determinado, el cual es analizado y explotado
para encontrar soluciones a problemas
dependientes de dicho conocimiento. Una de las
reglas deductivas básicas es la reducción al
absurdo, por la cual se toma como verdadera una
afirmación falsa para, tras varias demostraciones,
derivar en una contradicción. Una versión de el
método de reducción es la base para el lenguaje de
programación lógica, PROLOG [1972], el cual está
basado en la descripción de hechos conocidos y
las relaciones existentes entre ellos para luego, a

Página 23
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

partir de los datos introducidos, deducir nuevos


hechos y resolver problemas automáticamente.

22.2.3. Paradigma de Base de Datos

Una base de datos es más o menos un archivo


permanente con estructura. En su forma más
simple, es un archivo de grabaciones, como una
especie de catálogo de entidades, las cuales no
desaparecen al terminar el programa, sino que,
una vez organizadas, son permanentes.

El paradigma de la base de datos está


estrechamente relacionado con los lenguajes
basados en la lógica. Se diferencia de ellos en que
los lenguajes de base de datos soportan la
persistencia. Del mismo modo, podemos decir que
las relaciones entre sus entidades están
preservadas de cambios externos, por lo que otra
característica a tener en cuenta es la del control de
cambios.

Un sistema de gestión de bases de datos, DBMS


(Database Management System) incluye
normalmente un lenguaje de definición de datos,
DDL (Data Definition Language), para la
descripción de nuevos hechos o datos; y un
lenguaje de manipulación de datos, DML (Data
Manipulation Language), para la interacción con
las bases de datos existentes. El DML es a menudo
embebido por otro lenguaje de programación de
alto nivel para mayor flexibilidad.

SQL (Structured Query Language) es el lenguaje


de base de datos más utilizado y, a pesar de no ser
completamente funcional en el sentido de ser tan
potente como un lenguaje procedural, dota de
operaciones suficientes a las aplicaciones de base
de datos. Tiene muchas deficiencias; la más seria
de ellas es que nunca fue realmente diseñado de
acuerdo con ambas partes (álgebra y cálculo), y
por lo tanto, está lleno de numerosas restricciones
y reglas especiales.

Página 24
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

23. Lenguajes de programación

Algunos de los lenguajes más difundidos son:

• BASIC, que durante mucho tiempo se ha considerado un


buen lenguaje para comenzar a aprender, por su sencillez,
aunque se podía tender a crear programas poco legibles. A
pesar de esta "sencillez" hay versiones muy potentes, incluso
para programar en entornos gráficos como Windows (es el
caso de Visual Basic).

• COBOL, que fue muy utilizado para aplicaciones de negocios.

• Ensamblador (en inglés, Assembler, que se suele abreviar


como Asm) es un lenguaje de programación de computadores
de bajo nivel (muy cercano al código máquina), por lo que es
específico de cada tipo de computador (básicamente, de cada
procesador). Es más difícil de aprender que los lenguajes de
alto nivel, resulta mucho menos legible, y prácticamente no es
portable, pero si se domina, es el que dará la mayor velocidad
a nuestro programa.
• Sustituye las secuencias de ceros y unos (bits) por palabras
más fáciles de recordar, como MOV, ADD, CALL o JMP.

• FORTRAN, concebido para ingeniería, operaciones


matemáticas, etc. También va quedando desplazado.

• Delphi, es una herramienta visual para Windows


desarrollada por Borland, basada en el lenguaje Pascal.

• C, el mejor considerado actualmente, porque no es difícil y


permite un grado de control del computador muy alto,
combinando características de lenguajes de alto y bajo nivel.
Además, es muy transportable: existe un estándar, el ANSI C,
lo que asegura que se pueden convertir programas en C de un
computador a otro o de un sistema operativo a otro con
bastante menos esfuerzo que en otros lenguajes.

• C++, es una evolución del lenguaje C, que soporta la


Programación Orientada a Objetos.

• PASCAL, el lenguaje estructurado por excelencia, y que en


algunas versiones tiene una potencia comparable a la del
lenguaje C, como es el caso de Turbo Pascal en programación
para DOS y Windows. Frente al C tiene el inconveniente de
que es menos portable, y la ventaja de que en el caso concreto
de la programación para DOS, Turbo Pascal no tiene nada que
envidiar la mayoría de versiones del lenguaje C, pero resulta

Página 25
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

más fácil de aprender, es muy rápido, crea archivos EXE más


pequeños, etc.

• Lisp, es un lenguaje muy utilizado en Inteligencia Artificial.

• Prolog, es un lenguaje de programación diseñado para la


“Programación Lógica" (de ahí su nombre), y para inteligencia
artificial. Su planteamiento y forma de trabajo es totalmente
distinta a la de los lenguajes "convencionales".

• Java, es un lenguaje de programación de computadores,


desarrollado por Sun, orientado principalmente a la
programación en Internet o intranets. Tiene una sintaxis muy
parecida a la de C++ y existen versiones para distintos
sistemas operativos.

• Modula-2, es un lenguaje de programación de computadores,


de propósito general. Fue diseñado por Wirth, el creador de
Pascal, intentando superar a este lenguaje, especialmente en lo
relativo a modularidad.

• SQL, es un lenguaje estándar para acceder a los datos


almacenados en una base de datos (Structured Query
Language - Lenguaje de Consulta Estructurado). Su utilidad
radica en que casi todas las bases de datos se manejan de
forma más o menos distinta, pero la mayoría de las más
potentes permiten hacerle consultas en este lenguaje.

24. Interpretes y compiladores

Se puede distinguir dos tipos de lenguajes, según se realice esta


conversión:

• En los intérpretes, cada instrucción que contiene el programa


se va convirtiendo a código máquina antes de ejecutarla, lo
que hace que sean más lentos.

• En los compiladores, se convierte todo el programa en bloque


a código máquina y después se ejecuta. Así, hay que esperar
más que en un intérprete para comenzar a ver trabajar el
programa, pero después éste funciona mucho más rápido.

Página 26
Algoritmos pseudocódigos y diagramas de flujo Tecsup
Agosto 2008

25. Compiladores

La mayoría de los lenguajes actuales son compiladores, y suelen


incluir:
• Un editor para escribir o revisar los programas.
• El compilador propiamente dicho, que los convierte a código
máquina.
• Otros módulos auxiliares, como enlazadores (linkers) para
unir distintos subprogramas, y depuradores (debuggers) para
ayudar a descubrir errores.

26. Estructurado VS Objetos

• Dos conceptos que se mencionan mucho al hablar de


programación son "programación estructurada" y
"programación orientada a objetos".
• La programación estructurada consiste en dotar al
programa de un cierto orden, dividiéndolo en bloques
independientes unos de otros, que se encargan de cada
una de las tareas necesarias. Esto hace un programa más
fácil de leer y modificar.
• La programación orientada a objetos se tratará más
adelante, cuando ya se tenga una buena base de
programación.

Página 27
Tecsup Algoritmos pseudocódigos y diagramas de flujo
Agosto 2008

27. Glosario

InformáticaLa Informática es el tratamiento automático de


información.
Computador Es una máquina programable.
• Ejecuta programas previamente almacenados.
Programa Un programa esta compuesto por: Datos +
algoritmo.
Algoritmo Se define como un método que se realiza paso a
paso para solucionar un problema que termina en
un número finito de pasos.
Diagrama Un Diagrama de Flujo es una representación
de flujo semigráfica del algoritmo en cuestión y en el que
cada paso de; algoritmo se visualiza dentro del
símbolo adecuado.
Pseudo Es una herramienta utilizada en el diseño de un
códigos programa para describir la solución del
problema, en forma de algoritmo, dirigido a la
máquina, haciendo uso del lenguaje natural
lógico, pero sometido a ciertas reglas.

28. Referencias Bibliográficas

• BOWMAN, Charles: Algoritmos y estructuras de datos:


Aproximación en C. PUCP Lima, 1999

Direcciones Web consultadas:

• http://www.algoritmia.net
• http://docs.rinet.ru/KofeynyyPrimer/

FIN DE LA UNIDAD

Página 28

También podría gustarte