1
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
1
Tema 2. Algoritmos
Contenido del tema:Concepto de algoritmoNotación algorítmicaPseudolenguaje básicoConcepto de tipoTipos simples. OperadoresLenguajes de programaciónIntroducción a C++
Francisco Rus Mansilla
Dpto. Lenguajes y Ciencias de la Computación
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
2
Concepto de algoritmo
Ordenador (procesador):- Ejecuta operaciones simples (ej., suma y comparación).- Gran velocidad de ejecución éstas.
Descripción en términos de estas operaciones ≡ Algoritmo
Conceptos relacionados: primitiva, procesador, entorno.
Abu Jafar Muhammad Ibn Musa Al-Khwarizmi
Nació en 780 ¿en Bagdad?
Murió en 850.
Libro: “Hisab al-jabr al-muqabala”.
2
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
3
Algoritmo como secuencia de primitivas
Supongamos que tenemos un robot que funciona como criado del hogar y queremos enseñarle a preparar un café instantáneo. El algoritmo podría ser el siguiente:
(1) Hervir agua(2) Poner café en una taza(3) Echar el agua en la taza
Sin embargo, nuestro robot puede no ser capaz de interpretar una instrucción como Hervir agua y es posible que tengamos que explicarle como hacerlo:
(1) Hervir agua(1.1) Llenar un cazo con agua(1.2) Ponerlo en la hornilla(1.3) Encender el fuego(1.4) Esperar hasta que hierva(1.5) Apagar el fuego
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
4
Conceptos básicos sobre algoritmos
• Procesador: entidad capaz de “entender” un enunciado y ejecutar el trabajo descrito.
• Entorno: conjunto de condiciones necesarias para la ejecución del trabajo.
• Acción, o primitiva: cada etapa del enunciado.
• Secuencialidad: cada acción se ejecuta cuando la anterior ha terminado completamente.
• Paralelismo. Existen algoritmos en los cuales algunas (o todas) las primitivas se pueden ejecutar a la vez. Se dice entonces que se trata de un algoritmo paralelo.
3
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
5
Definición de algoritmo
• Dado un procesador bien definido y un trabajo a ejecutar por este procesador, un algoritmo es el enunciado de una secuencia de acciones primitivas que realizan ese trabajo.
• Hay que considerar 3 aspectos:– Primitivas de las que partimos.
– Lenguaje simbólico a utilizar.
– Representación de los datos.
Caracteres alfanuméricos, símbolos especiales y palabras en español.
Determinará la descripción del algoritmo y la forma de las acciones.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
6
Ejemplo 1: producto mediante ábaco
Producto de 2 números naturales X e Y.
Mediante un ábaco.• Primitivas:
– Contar bolas.– Desplazar bolas a izquierda
y derecha.
• Procesador: ábaco de 3 filas de bolas de distinto color y un operador humano.
• Representación de los datos: bolas a la izquierda.
• Condiciones de entorno:– Inicialmente a la izquierda no hay bolas.
4
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
7
Algoritmo para el ejemplo del ábaco
Desplazar X bolas rojas a la izquierda.Desplazar Y bolas azules a la izquierda.MIENTRAS haya bolas azules a la izquierda
Desplazar X bolas verdes a la izquierda.Desplazar 1 bola azul a la derecha.
FINMIENTRASContar las bolas verdes a la izquierda.PARAR
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
8
Ejemplo 2: producto con hojas de papelProducto de 2 números naturales X e Y.
Mediante hojas de papel.
- Primitivas:- Leer, escribir y borrar- Sumar y restar
– Representación de los datos: cifras escritas en el papel (numeración arábica en base 10).
– Procesador: 3 hojas de papel y operador humano.
– Condición de entorno: las tres hojas están inicialmente en blanco.
5
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
9
Algoritmo para las hojas de papel
Escribir X sobre la hoja 1.
Escribir Y sobre la hoja 2.
Escribir 0 sobre la hoja 3.REPETIR
Sumar los valores de las hojas 1 y 3 y escribir el resultado en la hoja 3, perdiéndose el valor anterior (borrando lo que hubiese antes).
Restar 1 al valor escrito en la hoja 2 y escribir el resultado en la misma hoja, perdiéndose el anterior (borrando lo que hubiese antes).
HASTA QUE el valor de la hoja 2 sea 0.
Leer el valor escrito en la hoja 3.
PARAR
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
10
Estructura general de un algoritmo
PROCESODatos de salida Datos de entrada
• Acciones de entrada: recogen los datos para el trabajo.• Acciones de proceso: ejecutan los cálculos.• Acciones de salida: ofrecen los resultados.
• Datos: - De entrada.- De salida.- Internos (resultados intermedios).
• Interfaz: acciones de entrada + acciones de salida +datos de entrada + datos de salida.
6
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
11
Fases de la resolución de un problema
1. Análisis del problema.
2. Diseño o definición del algoritmo.
3. Implementación del algoritmo en la computadora.
4. Verificación y pruebas.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
12
Notación algorítmica
Conjunto de convenios para expresar de forma no ambigua la resolución de un problema.
Notaciones
algorítmicas
• Textual: pseudolenguaje.
• Gráfica: diagramas de flujo, UML.
• Ejecutable: lenguaje de programación.
7
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
13
Diagramas de flujo
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
14
Ejemplo: sumar N números
8
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
15
Pseudolenguaje básico
• Enfoque imperativo.
• Notación algorítmica:– Palabras clave → sintaxis fija– Lenguaje natural → sintaxis libre– Sangrado o indentación para aumentar legibilidad.– Empleo de comentarios en lenguaje natural.
• Ventajas principales: flexibilidad y legibilidad.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
16
Elementos de una notación algorítmica
– Léxicos: símbolos indivisibles mínimos.• Combinaciones mínimas de caracteres.• Símbolos gráficos.
– Sintácticos: reglas para combinar jerárquicamente elementos léxicos.
• Construcción de sentencias.• Uniones válidas de símbolos gráficos.
– Semánticos: reglas que aseguran que los elementos sintácticos tienen significado.
• Compatibilidad de tipos.
9
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
17
Concepto de variablePosición de memoria que almacena un dato cuyo
valor puede cambiar durante la ejecución.
Posición de memoria Temperatura25
Contenido de la variable Nombre simbólico
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
18
Concepto de constantePosición de memoria que almacena un dato cuyo
valor NO puede cambiar durante la ejecución.
Posición de memoria TEMP_MAX45
Constante literal Constante simbólica
10
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
19
Estructura general de un algoritmo
ALGORITMO NombreDeclaraciones
INICIOAcciones
FIN Nombre
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
20
Mi primer algoritmo en pseudolenguaje
ALGORITMO HolaMundoINICIO
Escribir (“Hola Mundo”)FIN HolaMundo
11
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
21
Elementos léxicos del pseudolenguaje
– Palabras clave (reservadas)• ALGORITMO INICIO FIN VAR CONST MIENTRAS SI
– Identificadores• temperatura, MAX_VALOR, miDato, numEnt3, Leer
– Literales• Numéricos: 10, 25.67, -36.5e-2• Textuales: ‘a’, ‘9’, ‘@’, ‘:’, ‘\0’, ‘\n’, “Bienvenido”
– Operadores• Aritméticos: + - * / DIV MOD• Relacionales: < > <= >= == !=• Lógicos: Y O NO
– Otros• /* Comentarios */ // ; { } = [ ]
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
22
Elementos sintácticos
– Sentencias declarativas• Cabecera de programa• Declaración de
constante(s)• Declaración de
variable(s)– Sentencias ejecutables
• Asignación• Llamada a subprograma• Expresión aritmética• Expresión lógica
– Comentarios:// Una línea/* o varias */
ALGORITMO CalculaAreaCONST
R PI=3.14159VAR
R area, r
INICIOr = 3.45r=pow(r,2.0)area=PI * rarea >= 100.0
FIN CalculaArea
12
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
23
Entrada/salida básica
• Entrada por tecladoSe usa el subprograma estándar Leer, que pone en
una(s) variable(s) lo que el usuario teclee.Leer(variable)Leer(var1, var2, var3)
• Salida por pantallaSe usa el subprograma estándar Escribir, que saca por
pantalla el resultado de una(s) expresión(es).Escribir(expresión)Escribir(expr1, expr2, expr3)
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
24
Ejemplo: suma de números realesALGORITMO SumaNúmeros/* Lee por teclado una serie de números reales y
calcula su suma (ver transparencia diagrama flujo) */VAR // Declaraciones de variables
N nR s = 0.0, x
INICIOEscribir(“Introduzca el número de números.\n”); Leer(n)MIENTRAS n > 0 HACER // Bucle para leer y acumular
Escribir(“Introduzca número: “); Leer(x)s = s + xn = n – 1
FINMIENTRASEscribir(“La suma de los números es ”, s, ‘\n’)
FIN SumaNúmeros
13
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
25
Lenguajes de programación
Especificación: documentoNo ejecutablePublicado por organizaciones
estándares
Lenguaje de programación
Implementación: softwareEjecutable en máquinaDesarrollados normalmente por
fabricantes de ordenadores
Traductor
Lenguaje de programación Vs. traductor
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
26
Clases de lenguajes de programación• Lenguajes de propósito general
– Imperativos o proceduralesSe basan en la asignación. Se especifica la secuencia de instrucciones.• De guiones (scripts). Más simples. Suelen ser interpretados.• Internet: Hipertexto (HTML) acceso a Internet y base de datos (PHP, ASP)
– Orientados al objetoSe basan en la asignación y son más próximos al mundo real (objetos).
– DeclarativosBasados en reglas de deducción (lógicos) o funciones (funcionales).Se especifica el resultado requerido.
– VisualesEntornos que generan código automáticamente.
• Lenguajes de propósito específico– De robótica (VAL II), bases de datos (SQL), hardware (Step-5).
14
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
27
Lenguajes C y C++• Lenguaje C:
– Lenguaje de alto nivel de propósito general– De tipo imperativo: 3ª generación– Desarrollado por Brian W. Kernighan y Dennis
M. Ritchie de los Laboratorios Bell de California en 1978.
• Lenguaje C++:– Lenguaje de alto nivel de propósito general– Orientado a objetos: 4ª. generación– Desarrollado por Bjarne Stroustrup en 1983.– “Extensión” de C: es “compatible” con C.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
28
Elementos léxicos de C++– Palabras clave
main const– Identificadores (igual que en pseudolenguaje)
dato1 miDato MAX_LONG cin cout– Literales (igual que en pseudolenguaje)
• Numéricos: 12 34.5 .3 3.45e-2• Textuales: ‘a’ ‘7’ ‘#’ ‘<’ “Hola”
– Operadores• Aritméticos: + - * % /• Relacionales: < > <= >= == !=• Lógicos: && || !
– Delimitadores (igual que en pseudolenguaje)/* comentarios */ ; { } = [ ] //
El operador de la división real y la
entera es el mismo
15
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
29
Elementos sintácticos de C++– Estructura general
– Comentarios• Igual que en pseudolenguaje
– Sentencias declarativas• Todas acaban con ;• La cabecera no lleva nombre de programa• No existen secciones de declaración de constantes o variables• Las constante(s) simbólicas se preceden con la palabra clave const
– Sentencias ejecutables• Todas acaban con ; (excepto las que acaban con }).• La asignación igual que en pseudolenguaje• Las expresiones con los operadores de C• Las llamadas igual que en pseudolenguaje
main(){Sentencias declarativas
Sentencias ejecutables}
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
30
Ejemplo de programa en C++#include <iostream> // Librería estándar de E/S en C++using namespace std; // Espacio de nombres estándar/* Este programa convierte radianes a grados */int main() // en C++ siempre debe haber un main(){
// parte declarativaconst float PI=3.14159;float radianes, grados;
// parte ejecutablecout << “Introduce radianes: ”;cin >> radianes;grados = radianes*180/PI; // conversión de entero a realcout << radianes << “ radianes son ”;cout << grados << “ grados”;
return 0;}
16
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
31
Concepto de tipo
• ¿Qué es un dato?– Valor
• Constante: no cambia durante la ejecución del programa.• Variable: cambia durante la ejecución de un programa.
– Identificador: el dato tiene un nombre.• Normas de estilo para diferenciar entre identificadores
– de constantes– y de variable.
– Tipo• Dominio: valores que puede tomar el dato.• Operaciones permitidas.
– Cardinalidad (#): número de valores distintos.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
32
Ejemplos de datos en un algoritmo
CONSTN MAX_VALOR = 100
VARN suma = 0
Zonas de declaraciones de datos (constantes y variables)
Tipo Valor
IdentificadorDominio: valores naturales
Operadores: + - * DIV MOD
17
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
33
Operadores básicos
• Los operadores permiten manipular datos.• Operadores básicos: conjunto mínimo.• Construcción de nuevos operadores: busca optimizar la
eficiencia.• Operadores generales:
– Asignación (=): el valor de un dato se copia en otro dato.• Es un operador universal para todos los tipos de datos, simples o
compuestos.– Comparación de igualdad (==): verifica si dos datos tienen el
mismo valor.• Se emplea en expresiones lógicas (devuelve VERDADERO o FALSO).• No es un operador universal: no está definida para tipos compuestos.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
34
Uso de operadores y tipos
• En nuestro pseudolenguaje, los operadores se aplican sobre datos con el mismo tipo.
• Algunos lenguajes de programación son más estrictos que otros respecto al tipado de datos:– C/C++: flexible– MODULA-2: estricto– ADA: muy estricto
18
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
35
Clasificación de los tipos de datos
• Tipos simples o no estructurados– No están compuestos por otros tipos.– Contienen un solo valor.– Son atómicos: indivisibles.– Se dividen en:
• Predefinidos: propios del lenguaje empleado.• Definidos por el usuario (programador).
• Tipos compuestos o estructurados:– Se componen de otros tipos (simples o compuestos).
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
36
Tipos simples predefinidos
• Son la base de la programación.• Dependen del lenguaje empleado.• Pueden usarse sin necesidad de definirlos.• En nuestro pseudolenguaje:
•N: números naturales•Z: números enteros•R: números reales•B: booleanos•C: caracteres
19
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
37
Propiedades de los tipos predefinidos
• Atómicos.• Ordenados: admiten operadores
relacionales:==, >, <, >=, <=, !=
• Sucesor, predecesor únicos (excepto R):
Orden: ORD: T → {0, . . ., #Τ−1}Predecesor: PRED: Τ → ΤSucesor: SUC: Τ → Τ
Tipos escalares
Tipos ordinales
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
38
Operadores para tipos predefinidos
• Naturales (N): +, -, *, DIV, MOD
• Enteros (Z): +, -, *, DIV, MOD, ABS
• Reales (R): +, -, *, /, SQRT, POW, etc.
• Lógicos (B):
• Caracteres (C): ORD, CHR
Valores: VERDADERO, FALSO
Operadores: Y, O, NO
20
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
39
Tipo natural (N) y tipo entero (Z)
• Dominio: conjunto N y conjunto Z• Operadores específicos: + - (binario) * DIV MOD – (unario).
• Funciones predefinidas específicas: ABS(expresión), POW (base, exponente), etc.
• Literales: 34, -999, 0, etc.• Entrada/salida formateada: Leer(), Escribir().• Representación física:
– N: binario puro– Z: signo-magnitud, complemento-1, complemento-2.
Conversión interna entre caracteres y su representación física.
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
40
Tipo real (R)
• Dominio: conjunto R• Operadores específicos: + - (binario) * / -
(unario).• Funciones predefinidas específicas: SQRT(expresión), POW (base, exponente), etc.
• Literales: 10, -12.25, .36, 3.9E-56• Entrada/salida formateada: Leer(), Escribir().• Distintas representaciones físicas: coma fija
(precisión limitada), coma flotante (prec. variable).
21
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
41
Tipo carácter (C)
• Dominio: conjunto de caracteres gráficos y de control del sistema.
• Operadores: ninguno específico.• Funciones predefinidas específicas: CHR(), CAP().
• Literales: ‘a’, ‘A’, ‘0’, ‘&’, ‘\n’, ‘\0’, ‘\\’, ‘\’’, ‘\”’.
• Entrada/salida: Leer(), Escribir().
• Representación física: códigos E/S estándar.No hay conversión
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
42
Tipo lógico o booleano (B)
• Dominio: VERDADERO y FALSO.• Operadores lógicos: Y O NO.
• Literales: VERDADERO y FALSO.• Entrada salida: no permitida.
FFVVVV
VFVFFV
FVVFVF
VVFFFF
NO bNO aa O ba Y bba
22
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
43
Tipos predefinidos en C++
• Enteros (int, long, short): +, -, *, /, %
• Naturales (unsigned int, unsigned short,unsigned long): +, -, *, /, %
• Reales (float, double): +, -, *, /, sqrt, . . .
• Lógicos (bool):
• Caracteres (char)
Valores: true, falseOperadores: &&, ||, !
Precisión doble
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
44
Definición de tipos en C++. Ejemplo// Programa ejemplo de definición// de los tipos de las variables en C++#include <iostream>using namespace std;
int main () {int res1, res2;float dato;
cout << “Dame un valor entero”;cin >> res1;res2 = res1; // res2 contiene el mismo valor que res1cout << “Dame un valor real;”cin >> dato;cout << “Fin programa definicion de tipos”;
return 0;}
23
6-oct-05Introducción a los ComputadoresTema 2. Algoritmos
45
Bibliografía• Joyanes, L. Fundamentos de Programación.
Algoritmos y Estructuras de Datos.3ª Edición, McGraw-Hill, 2003.
• Prieto, A., Lloris, A., Torres, J.C. Introducción a la Informática.3ª edición, McGraw-Hill, 2001.
• Brookshear, J.G. Introducción a las Ciencias de la Computación.4ª Edicion, Adisson Wesley, 1995.
• Goldschlager, L., Lister, A. Computer Science: A Modern Introduction. Prentice Hall. International Series in Computer Science,1988.
Top Related