Está en la página 1de 36

Tema 2.

Algoritmos y
Software
Algoritmos
Universidad de Yachay Tech
Francisco Ortega Zamorano

ndice
1.

Teora de Algoritmos
Concepto de Algoritmo
Calculabilidad
Mquina de Turing
Complejidad
Correccin

2.

El Software
Concepto de Software
Sistemas operativos
Lenguajes de programacin
Procesadores de lenguajes

3.

Introduccin al Pseudolenguaje
Pseudolenguaje
Diagrama de Flujo

1. Teora de Algoritmos

Concepto de Algoritmo
Algoritmo: Conjunto prescrito de instrucciones o reglas bien
definidas, ordenadas y finitas que permite realizar una
actividad mediante pasos sucesivos
Distinguimos entre:

Algoritmo: mtodo de resolucin de problemas en un


nmero finito de pasos

Programa: algoritmo escrito en un lenguaje concreto

Concepto de Algoritmo
Programacin:
Objetivo:
Establecer una secuencia de acciones que puedan ser
ejecutadas por el procesador y que realizan un trabajo
Fases:
Resolucin del problema propuesto => determinacin de un algoritmo
Adaptacin del algoritmo al computador => escribir un programa

Concepto de Algoritmo. Ejemplos


Clculo de la media aritmtica de tres
nmeros con una calculadora:
a) Pulsar la tecla C.
b) Teclear el primer nmero.
c) Pulsar la tecla +.
d) Teclear el segundo nmero.
e) Pulsar la tecla +.
f) Teclear el tercer nmero.
g) Pulsar la tecla /.
h) Teclear el nmero 3.
i) Pulsar la tecla =.

Describa cualquier procedimiento


cotidiano como un algoritmo

Preparacin de un tinto de verano


a) Colocar tres cubitos de hielo en un
vaso.
b) Echar vino tinto hasta cubrir el hielo.
c) Aadir gaseosa hasta llenar el vaso.
d) Agitar el contenido.
Acciones primitivas.
a) Colocar tres cubitos de hielo en un vaso.
a1) Sacar la cubitera del congelador.
a2) Rociar la parte inferior con agua.
repetir
a3) Extraer un cubito.
a4) Echarlo al vaso.
hasta que el n de cubitos sea 3.
a5) Rellenar los huecos de la cubitera con agua
a6) Meter de nuevo la cubitera en el congelador

Calculabilidad
Durante muchos aos existi la creencia de
que no exista ningn problema que no pudiera
resolverse
David Hilbert (1862-1943):
Sistema matemtico formal (smbolos, axiomas y
reglas de produccin)
Problema de "decisin (decidir si una sentencia
matemtica es un teorema)
Algoritmo general para resolver cualquier
problema matemtico (1928)
Completitud: cualquier proposicin puede ser
probada o rechazada
Consistencia: no hay contradicciones
Decidibilidad: cualquier proposicin puede ser
cierta o falsa tras una secuencia finita de pasos

Calculabilidad
Kurt Gdel: teorema de incompletitud (1931)
Problema de "decisin" de Hilbert no
computable
Church, Kleene, Post y Turing encontraron
otros problemas no computables
Ejemplo: "Problema de la parada" (no existe
ningn algoritmo que resuelva el problema de
la parada)
Afirmacin fuerte: existen problemas no
computables, esto es, no existe, y nunca
existir ningn algoritmo que los resuelva

Mquina de Turing
Para Turing, un algoritmo es todo aquello que puede realizarse sobre
una mquina abstracta que l mismo dise: "Mquina de Turing
Mquina de Turing (es el logo de nuestra escuela!):
Siguiendo unas reglas de operacin dadas y a partir de unos datos iniciales,
realiza operaciones y obtiene unos resultados en un tiempo finito
Se caracteriza por:
Disponer de una cinta, infinita por ambos extremos, dividida en celdas. Cada celda
almacena un smbolo del alfabeto prefijado
Disponer de una cabeza de lectura/escritura mvil que en cada momento accede a una
nica celda
Encontrarse siempre en un determinado estado qi de entre un conjunto finito de
estados
Realizar las siguientes acciones elementales en funcin del estado en que se encuentre y
del smbolo que lea de la cinta:
Reescritura del contenido de la celda leda
Movimiento de la cabeza a derecha o izquierda de la celda leda

Complejidad
La teora de la calculabilidad intenta identificar para qu problemas
existe una solucin algortmica (son computables) y para cules no
Es interesante conocer los recursos computacionales necesarios para
ejecutar un determinado algoritmo
La teora de la complejidad se encarga de estudiar dichas
necesidades. Slo aquellos algoritmos que utilizan una cantidad
factible de recursos son tiles en la prctica
Requisitos a considerar: Tiempo y espacio

Correccin
Objetivo bsico exigible a un programa
La mayora de los programas actuales contienen errores
Prueba / Verificacin
La prueba experimental puede ser empleada para mostrar la presencia de
errores, pero nunca su ausencia
La nica forma de demostrar la correccin de un programa es mediante la
verificacin de programas (lgica de Hoare, 1969)
Permite probar la verdad o falsedad de propiedades de programas imperativos
Especificacin Pre/Post
La precondicin indica las condiciones que debe cumplir el estado inicial del programa
La postcondicin indica las condiciones que ha de cumplir el estado final del programa

Correccin parcial (se supone que el programa termina normalmente)


{}
Correccin total (se demuestra que el programa termina)
{}

2. El Software

Concepto de Software
Software: Conjunto de instrucciones (programas de
ordenador), que cuando se ejecutan proporcionan la funcin
y el comportamiento deseado
Distinguimos entre:

Algoritmo: mtodo de resolucin de problemas en un


nmero finito de pasos
Programa: algoritmo escrito en un lenguaje concreto

Concepto de Software. Evolucin


Evolucin constante y vertiginosa
Ejemplo slo de los navegadores y tecnologas asociadas:
http://evolutionofweb.appspot.com/
Etapas:
Inicialmente se programa en funcin del hardware
Aparecen empresas de software
Mantenimiento costoso
Proceso artesanal mejorado
Aparecen ordenadores personales
Abaratamiento de cierto tipo de software
Nuevas tecnologas: orientacin a objetos, componentes, servicios

Concepto de Software. Caractersticas


Caractersticas del software
El software no se fabrica, se desarrolla
El software no se estropea, se deteriora
El software se construye a medida

Concepto de Software. Tipos


Clasificacin tradicional
Software de sistemas: controla el funcionamiento del ordenador, gestiona los
recursos, genera nuevas aplicaciones y proporciona facilidades a los usuarios
(SO, lenguajes de programacin, utilidades del sistema)
Software de aplicacin
Software estndar (proc. texto, hojas de clculo, bases de datos, paquetes integrados)
Software a medida

Clasificacin de Pressman
Software de sistemas
Software de tiempo real
Software de gestin
Software de ingeniera y cientfico
Software empotrado
Software de inteligencia artificial

Sistemas Operativos
Concepto:

Un Sistema Operativo es un programa que acta como


intermediario entre el usuario y el hardware de un
computador y su propsito es proporcionar un entorno
en el cual el usuario pueda ejecutar programas.
Funciones:

Gestin los recursos del sistema de forma eficiente


Facilitar a los usuarios el manejo del sistema
Proporcionar una serie de funciones de alto nivel para
las aplicaciones

Sistemas Operativos
Evolucin histrica:

Ligados al desarrollo del hardware. Inicialmente se programa sobre el Hw (no


existan los SO)
Automatizacin de la carga y control de programas en un ordenador
Forma interactiva de proceso con el usuario, concepto de memoria virtual
Aparecen los SO tal y como los conocemos hoy en da: MS/DOS, Windows,
Unix

Caractersticas

Nmero de usuarios
Monousuario
Multiusuario

Nmero de tareas

Monotarea
Multitarea

Capacidad para multiprocesador


Sistema de archivos
Kernel o ncleo
Interzaz con el usuario: clsico (modo texto, intrprete de comandos) y grfico

Lenguajes de Programacin
Cmo se programan los ordenadores?
El principal motivo para la elaboracin de algoritmos y su codificacin
en programas es la resolucin de problemas mediante los
ordenadores
Para la resolucin de estos problemas se debe seguir una
metodologa, denominada metodologa de la Programacin
Esta tarea se divide principalmente en tres fases:
Anlisis
Diseo (o desarrollo del algoritmo)
Implementacin (del algoritmo en el ordenador)

Ejemplo: Conversor Euro-Dlar

Lenguajes de Programacin. Anlisis


El propsito del anlisis es ayudar al programador para llegar
a una cierta compresin de la naturaleza del problema. Para
ello, el problema debe estar bien definido
La correcta definicin de un problema requiere la
descripcin detallada de las especificaciones de E/S
El anlisis del problema requiere:
Obtener una idea de lo que el problema pide
Determinar que informacin debe proporcionar la resolucin de un
problema (salida) y qu datos necesita el problema (entrada)

Lenguajes de Programacin. Diseo


Un ordenador no posee capacidad para resolver un problema, a menos que se le proporcione la
solucin como una secuencia de pasos que debe realizar Algoritmo
Los algoritmos son independientes de los lenguajes de programacin y de la mquina donde se
ejecute
En la programacin es ms importante el algoritmo que el lenguaje de programacin.
Caractersticas de un buen algoritmo:
Definido, finito y preciso
Las herramientas ms usadas para la descripcin de los algoritmos son: Pseudocdigo,
Representacin grfica, Frmulas, Lenguaje natural, etc.
En esta asignatura utilizaremos una representacin en pseudocdigo para el diseo de los
algoritmos. En las sesiones prcticas se experimentar con un lenguaje de programacin en
concreto
Ejemplo de Diseo:

Leer el valor monetario de la primera moneda y el tipo

Realizar la conversin

Mostrar el resultado

Lenguajes de Programacin. Codificacin


Una vez que el algoritmo esta diseado , se debe pasar a la
fase de la implementacin del problema con el ordenador

Program EuroCalcu;
Begin
......
.....
....
end

Cdigo Fuente

010101010
010100111

Programa

Lenguajes de Programacin. Clasificacin


Concepto de nivel
Clasificacin por nivel
Lenguajes de alto nivel
Lenguajes declarativos: Natural y SQL
Lenguajes de alto imperativos: Cobol, C, Pascal, Delphi, Python, Visual Basic

Lenguajes bajo nivel


Lenguajes ensambladores: para cada tipo de arquitectura

Lenguajes mquinas

Clasificacin por la aplicacin


Aplicaciones cientficas: Fortran, Apl
Aplicacin de procesamiento de datos: Cobol, RPG
Aplicaciones en inteligencia artificial: Lisp, Prolog, C
Aplicaciones en programacin de sistemas: ADA, C, Java

Procesadores de Lenguajes
Traductores: programas que traducen un programa escrito en un
lenguaje de alto nivel a su correspondiente en lenguaje mquina
Intrpretes: traducen un programa (fuente) instruccin a instruccin
La ejecucin del programa se realiza a la vez que la traduccin => se lee una instruccin,
se traduce y se ejecuta
Cada vez que se desea ejecutar el programa hay que traducirlo

Compiladores: traducen un programa completo (fuente) a cdigo binario


(objeto)
El programa objeto se almacena en memoria y puede ser ejecutado sin necesidad de
realizar otra vez la traduccin
En el proceso de traduccin se detectan errores de escritura en el programa fuente

La ejecucin de un programa interpretado es ms lenta que la de un


programa compilado

Procesadores de Lenguajes. Esquema de un


Compilador

3. Introduccin al
Pseudolenguaje

Pseudolenguaje
Ventaja clara frente a lenguajes de programacin:
Flexibilidad en su sintaxis

Existir, no obstante, una sintaxis fija de palabras clave que proporcionan


las acciones primitivas, construcciones estructuradas, declaraciones de datos
y caractersticas de modularidad
A lo largo del curso usaremos el siguiente pseudolenguaje:
La estructura de un algoritmo ser:
Algoritmo nombre
declaraciones
Inicio
acciones
Fin

Pseudolenguaje
Las palabras reservadas o clave se escribirn en maysculas o subrayadas
Las acciones se podrn expresar con diferentes niveles de refinamiento. En
todo caso el resultado final deber estar expresado en funcin de las
acciones primitivas que componen el pseudolenguaje, las cuales se describen
a continuacin y se explicarn a lo largo del curso
Dentro de la "libertad" y flexibilidad que tiene un pseudolenguaje, se deber
seguir un estilo de presentacin de los algoritmos que siga las pautas
marcadas en el anexo dedicado al estilo en programacin. Esto nos conducir
a expresar los mismos de una forma clara y legible
Los tipos estndar se denotan de la siguiente forma:

Tipo BOOLEANO (B)


Tipo CARCTER (C)
Tipo NATURAL (N)
Tipo ENTERO (Z)
Tipo REAL (R)

Pseudolenguaje
En la zona de declaraciones de un algoritmo se realiza:

Definicin de tipos. Bajo el epgrafe Tipos


Declaracin de constantes. Bajo el epgrafe Constantes
Declaracin de variables. Bajo el epgrafe Variables
Declaracin de subalgoritmos.

Para definir tipos de datos: nombre del tipo, el signo de igualdad y la


especificacin del mismo. Los tipos definidos por el programador podrn ser:
El tipo array: poniendo explcitamente el tipo ndice y el tipo base, adems de las
palabras reservadas ARRAY y DE. Ejemplo: ARRAY [1..10] DE N
El tipo registro: declarando todos los campos que lo componen entre las palabras
reservadas REGISTRO y FINREGISTRO. Ejemplo:
REGISTRO
x:N
y:R
FINREGISTRO

Pseudolenguaje
Para declarar una constante: nombre de la constante, el signo = y el valor
constante que toma. Nuestro pseudolenguaje dispondr de la constante
predefinida INTRO que representa a la tecla retorno de carro leda de teclado
Para declarar una variable: nombre de la variable seguido por el nombre (o
especificacin) del tipo, utilizando como separador los dos puntos. Ejemplo: x: Z.
La variable no toma ningn valor concreto al ser declarada. Se dice que toma un
valor "indefinido"
Los subalgoritmos se usan para especificar el comportamiento exacto de aquellas
acciones no primitivas que hayamos usado en nuestro algoritmo (principal)
Un subalgoritmo se declara usando un formato similar al de un algoritmo principal. La nica
diferencia estriba en que, junto al nombre del subalgoritmo se aade la especificacin de los
parmetros que intervienen en el mismo
Los procedimientos tendrn una cabecera en la que se indicarn el nombre del mismo y sus
parmetros formales, que pueden ser de entrada (), de salida () o de entrada/salida
()
Ejemplo: PROC p(arg1:Z; arg2:N; arg3:N).

Las funciones tendrn una cabecera en la que se indicarn el nombre de la misma, los
parmetros formales y el tipo del valor que devuelve. El valor siempre se devolver en una
variable predefinida llamada Resultado
Ejemplo: FUNC f(arg1:Z) :N

Pseudolenguaje
En la zona de acciones:

Disponemos de tres operaciones de Entrada/Salida: leer(v), almacena en la variable v el valor


leido por teclado (se pueden poner varias variables separadas por comas); escribir(v), muestra
por pantalla el valor del objeto v (se pueden poner varios separados por comas) y saltar_linea
que hace que la siguiente salida por pantalla se realice en la siguiente lnea
Las asignaciones se denotan con "". Ejemplo: x 3. Sirven para darle valores a las variables
Para usar un subalgoritmo basta con indicar su nombre y los parmetros que usa
Estructuras de seleccin:
SI condicin ENTONCES
acciones
SINOSI condicin ENTONCES
acciones
SINO
acciones
FINSI
CASO expresin SEA
valores1: acciones
valores2: acciones
...... ......
valoresn: acciones
[ OTRO CASO: acciones ]
FINCASO

Pseudolenguaje
En la zona de acciones:
Estructuras de Iteracin:
PARA vble valor1 HASTA valor2 (PASO p) HACER
acciones
FINPARA
MIENTRAS condicin HACER
acciones
FINMIENTRAS
REPETIR
acciones
HASTA QUE condicin

Pseudolenguaje. Ejemplo
Ejemplo: Calcular e imprimir el mayor de dos nmeros ledos de
teclado
Primer nivel de refinamiento:
Algoritmo escribir_mayor
Inicio
Leer dos nmero de teclado
Calcular el mayor de los dos
Escribir el resultado

Fin

Pseudolenguaje. Ejemplo
Segundo nivel de refinamiento (definitivo):
/* Algoritmo que calcula e imprime el mayor de dos
* nmeros ledos de teclado
*/
Algoritmo escribir_mayor
// Lee dos nmeros de teclado
PROC obtener_datos( x,y:N)
Inicio
escribir(Introduzca los dos numeros: )
leer(x,y)

// Escribe el resultado (mayor)


PROC imprimir( x:N)
Inicio
escribir(El mayor de los dos numeros es: )
escribir(x)
Fin

Variables
num1,num2,mayor:N
Inicio
obtener_datos(num1,num2)
calcular_mayor(num1,num2,mayor)
imprimir(mayor)

Fin
// Calcula el mayor de dos numeros
PROC calcular_mayor( x,y:N; mayor:N)
Inicio
SI (x > y) ENTONCES
mayor x
SINO
mayor y
FINSI
Fin

Fin

Diagramas de Flujo
Herramienta grfica para la descripcin
de algoritmos
Smbolos usados en un diagrama de flujo:
Para seguir el flujo del algoritmo
Indica el comienzo y la terminacin del
algoritmo. El smbolo de comienzo tiene
una flecha de salida y el de terminacin
una de entrada
Para operaciones de Entrada y de Salida.
Tienen una flecha de entrada y una de
salida
Para cualquier primitiva que pueda realizar
el procesador. Tienen una flecha de
entrada y otra de salida
Para las bifurcaciones. Tienen una flecha
de entrada y 2 de salida (o varias en el
caso de la decisin mltiple)

Diagrama de Flujo. Ejemplo

También podría gustarte