23
6-oct-05 Introducción a los Computadores Tema 2. Algoritmos 1 Tema 2. Algoritmos Contenido del tema: Concepto de algoritmo Notación algorítmica Pseudolenguaje básico Concepto de tipo Tipos simples. Operadores Lenguajes de programación Introducción a C++ Francisco Rus Mansilla Dpto. Lenguajes y Ciencias de la Computación 6-oct-05 Introducción a los Computadores Tema 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”.

Tema 2. Algoritmos - Departamento Lenguajes y Ciencias de ...rusman/docencia/ic/tema2_2005_2006.pdf · – Palabras clave (reservadas) ... (HTML) acceso a Internet y base de datos

  • Upload
    vuliem

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

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.