Tema v

80
Tema V. Fundamentos de Tema V. Fundamentos de algoritmos algoritmos Objetivo: Objetivo: El alumno explicará la El alumno explicará la importancia de llevar un método importancia de llevar un método formal para resolver problemas en formal para resolver problemas en la computadora; asimismo aplicará la computadora; asimismo aplicará dicho método en la resolución de dicho método en la resolución de problemas matemáticos sencillos. problemas matemáticos sencillos.

Transcript of Tema v

Tema V. Fundamentos de Tema V. Fundamentos de algoritmosalgoritmos

Objetivo:Objetivo: El alumno explicará la El alumno explicará la importancia de llevar un método formal importancia de llevar un método formal

para resolver problemas en la para resolver problemas en la computadora; asimismo aplicará dicho computadora; asimismo aplicará dicho método en la resolución de problemas método en la resolución de problemas

matemáticos sencillos.matemáticos sencillos.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Partes de un programaPartes de un programaTodo programa esta constituido por un Todo programa esta constituido por un conjunto de órdenes o instruccionesconjunto de órdenes o instrucciones capaces de manipular un conjunto de capaces de manipular un conjunto de datos. Éstas órdenes o instrucciones datos. Éstas órdenes o instrucciones pueden ser divididas en tres grandes pueden ser divididas en tres grandes bloques claramente diferenciados, bloques claramente diferenciados, correspondientes cada uno de ellos a una correspondientes cada uno de ellos a una parte del diseño de un programa.parte del diseño de un programa.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Es la parte de la Es la parte de la computación que computación que estudia los problemas estudia los problemas de decisión que pueden de decisión que pueden ser resueltos con un ser resueltos con un algoritmo o algoritmo o equivalentemente con equivalentemente con una máquina de Turing.una máquina de Turing.

Máquina ENIGMASegunda Guerra Mundial

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Teoría de la computabilidad

Máquina de TuringMáquina de Turing

Una máquina de Turing es un dispositivo que Una máquina de Turing es un dispositivo que manipula símbolos sobre una tira de cinta de manipula símbolos sobre una tira de cinta de acuerdo a una tabla de reglas.acuerdo a una tabla de reglas.

La Máquina de Turing se introdujo en 1936 por La Máquina de Turing se introdujo en 1936 por Alan M. Turing para resolver problemas Alan M. Turing para resolver problemas computables. Es la base de las computadoras computables. Es la base de las computadoras modernas.modernas.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Máquina de TuringMáquina de TuringUna máquina de Turing esta formada Una máquina de Turing esta formada por tres componentes: por tres componentes: Una Cinta, Un Una Cinta, Un Controlador y Una Cabeza de Controlador y Una Cabeza de lectura/escritura.lectura/escritura.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

CintaCinta

Aun cuando las computadoras modernas utilizan Aun cuando las computadoras modernas utilizan un dispositivo de acceso aleatorio con capacidad un dispositivo de acceso aleatorio con capacidad finita, finita, la memoria de la máquina de Turing es la memoria de la máquina de Turing es infinitainfinita. La cinta, en cualquier momento mantiene . La cinta, en cualquier momento mantiene una secuencia de caracteres del conjunto de una secuencia de caracteres del conjunto de caracteres aceptado por la máquina.caracteres aceptado por la máquina.

Cinta o Banda de Moebius

August Ferdinand Möbius y Johann Benedict Listing en 1858

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Cabeza de Lectura / EscrituraCabeza de Lectura / EscrituraLa cabeza de lectura/escritura en cualquier momento La cabeza de lectura/escritura en cualquier momento señala a un símbolo en la cinta. Llamamos a este símbolo el señala a un símbolo en la cinta. Llamamos a este símbolo el símbolo actual. La cabeza de lectura/escritura lee y escribe símbolo actual. La cabeza de lectura/escritura lee y escribe un símbolo a la vez desde la cinta. Después de leer y un símbolo a la vez desde la cinta. Después de leer y escribir se mueve a la izquierda, a la derecha o permanece escribir se mueve a la izquierda, a la derecha o permanece en su lugar. La lectura, la escritura y el desplazamiento, en su lugar. La lectura, la escritura y el desplazamiento, todos se realizan bajo instrucciones del controlador.todos se realizan bajo instrucciones del controlador.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

ControladorControladorEl controlador es la El controlador es la contraparte teóricacontraparte teórica de la unidad central de de la unidad central de proceso (CPU) en las computadoras modernas. Es un autómata de proceso (CPU) en las computadoras modernas. Es un autómata de estado finito, una máquina que tiene un número finito estado finito, una máquina que tiene un número finito predeterminado de estados y se mueve de un estado a otro con predeterminado de estados y se mueve de un estado a otro con base en la entrada. En cualquier momento puede estar en uno de base en la entrada. En cualquier momento puede estar en uno de estos estados.estos estados.

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Máquina de TuringMáquina de Turing

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Uno de los algoritmos más Uno de los algoritmos más antiguos conocidos es el antiguos conocidos es el algoritmo de Euclides. El algoritmo de Euclides. El término algoritmo proviene del término algoritmo proviene del matemático Muhammad ibn matemático Muhammad ibn Musa al-Khwarizmi, que vivió Musa al-Khwarizmi, que vivió aproximadamente entre los aproximadamente entre los años 780 y 850 D.C. en la años 780 y 850 D.C. en la actual nación iraní. Describió la actual nación iraní. Describió la realización de realización de operaciones operaciones elementales en el sistema de elementales en el sistema de numeración decimal. numeración decimal. De al-Khwarizmi se obtuvo la De al-Khwarizmi se obtuvo la derivación algoritmo.derivación algoritmo.

5.2 Elementos de los 5.2 Elementos de los algoritmos y tipos de datosalgoritmos y tipos de datos

Fundamentos de Algoritmos

Fundamentos de AlgoritmosFundamentos de Algoritmos

Un algoritmo se puede definir Un algoritmo se puede definir como un conjunto pasos, como un conjunto pasos, procedimientos o acciones que procedimientos o acciones que nos permiten alcanzar un nos permiten alcanzar un resultado o resolver un resultado o resolver un problema de un cierto tipo. Por problema de un cierto tipo. Por tanto debe ser:tanto debe ser:

PrecisiónPrecisión DeterminismoDeterminismo FinitudFinitud

5.2 Elementos de los 5.2 Elementos de los algoritmos y tipos de datosalgoritmos y tipos de datos

Características de los algoritmosCaracterísticas de los algoritmos

Precisión:Precisión:Los pasos a seguir en el algoritmo deben ser Los pasos a seguir en el algoritmo deben ser precisados claramente.precisados claramente.

Determinismo:Determinismo:El algoritmo, dado un conjunto de datos idénticos El algoritmo, dado un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos de entrada, siempre debe arrojar los mismos resultados.resultados.

Finitud:Finitud:El algoritmo, independientemente de la complejidad El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de longitud finita.del mismo, siempre debe ser de longitud finita.

5.2 Elementos de los 5.2 Elementos de los algoritmos y tipos de datosalgoritmos y tipos de datos

Características de los algoritmosCaracterísticas de los algoritmos

Conciso y Detallado:Conciso y Detallado:Debe reflejar con el máximo detalle el orden de Debe reflejar con el máximo detalle el orden de ejecución de cada acción u operación que vaya a ejecución de cada acción u operación que vaya a realizar la computadora.realizar la computadora.

Claro y Sencillo:Claro y Sencillo:Con el objetivo de facilitar su entendimiento y Con el objetivo de facilitar su entendimiento y compresión por parte del programador.compresión por parte del programador.

5.2 Elementos de los 5.2 Elementos de los algoritmos y tipos de datosalgoritmos y tipos de datos

Módulos de un algoritmoMódulos de un algoritmo

5.2 Elementos de los algoritmos 5.2 Elementos de los algoritmos y tipos de datosy tipos de datos

Tipos de algoritmosTipos de algoritmos

CualitativosCualitativos Son aquellos en los que se describen los pasos utilizando Son aquellos en los que se describen los pasos utilizando

palabras.palabras.

CuantitativosCuantitativos Son aquellos en los que se utilizan cálculos numéricos para Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.definir los pasos del proceso.

No GráficosNo Gráficos Representa en forma descriptiva las operaciones que debe Representa en forma descriptiva las operaciones que debe

realizar un algoritmo (pseudocodigo). realizar un algoritmo (pseudocodigo).

GráficosGráficos Es la representación gráfica de las operaciones que realiza un Es la representación gráfica de las operaciones que realiza un

algoritmo (diagrama de flujo). algoritmo (diagrama de flujo).

5.2 Elementos de los algoritmos 5.2 Elementos de los algoritmos y tipos de datosy tipos de datos

PseudocódigoPseudocódigoSe puede definir como el Se puede definir como el lenguaje intermedio entre el lenguaje intermedio entre el lenguaje natural y el lenguaje de programación lenguaje natural y el lenguaje de programación seleccionadoseleccionado..

Esta notación se encuentra sujeta a unas determinadas Esta notación se encuentra sujeta a unas determinadas reglas que permiten y facilitan el diseño de algoritmos. reglas que permiten y facilitan el diseño de algoritmos.

El pseudocódigo surge como método para la El pseudocódigo surge como método para la representación de instrucciones en una metodología representación de instrucciones en una metodología estructurada y nació como un lenguaje similar al inglés, estructurada y nació como un lenguaje similar al inglés, que utilizaba palabras reservadas de este idioma (start, que utilizaba palabras reservadas de este idioma (start, end, stop, while, repeat, for, if, if-else, etc.) y que end, stop, while, repeat, for, if, if-else, etc.) y que posteriormente se fue adaptando a otros lenguajes de posteriormente se fue adaptando a otros lenguajes de habla hispana.habla hispana.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

PseudocódigoPseudocódigo

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

 La estructura general de un algoritmo en pseudocódigo sería: NOMBRE DEL PROGRAMA DEFINICIÓN DE CADA MÓDULO  CUERPO DEL PROGRAMA

DATOS: parámetros, constantes, variables, ... 

ALGORITMO descripción detallada de las órdenes y acciones

que se deben ejecutar para resolver el problema...

FIN DEL ALGORITMO   

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

    

Un diagrama de flujo es la representación detallada en forma gráfica de como deben realizarse los pasos en la

computadora para producir resultados.

Esta representación gráfica se da cuando varios símbolos (que indican diferentes procesos en la

computadora), se relacionan entre si mediante líneas que indican el orden en que se deben ejecutar los

procesos.

Los símbolos utilizados han sido normalizados por el instituto norteamericano de normalización (ANSI).

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

    

Todo diagrama debe tener un inicio y un fin. Se deben se usar solamente líneas de flujo horizontales y/o verticales. Se debe evitar el cruce de líneas utilizando los conectores. Se deben usar conectores solo cuando sea necesario. No deben quedar líneas de flujo sin conectar. Se deben trazar los símbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha. Todo texto escrito dentro de un símbolo deberá ser escrito claramente, evitando el uso de muchas palabras. Utilizar comentarios ya sea al margen o mediante el símbolo grafico comentarios para que este sea entendible por cualquier persona que lo consulte. Si el diagrama abarca mas de una hoja es conveniente enumerarlo e identificar de donde viene y a donde se dirige.

Diagrama de FlujoDiagrama de Flujo

Para el diseño de algoritmos se utilizan Para el diseño de algoritmos se utilizan técnicas de representación. técnicas de representación. Una de estas técnicas son los Una de estas técnicas son los denominados Diagramas de Flujo, que se denominados Diagramas de Flujo, que se definen como la representación gráfica definen como la representación gráfica que, mediante el uso de símbolos que, mediante el uso de símbolos estándar conectados o unidos mediante estándar conectados o unidos mediante líneas de flujo, muestran la secuencia líneas de flujo, muestran la secuencia lógica de las operaciones o acciones que lógica de las operaciones o acciones que deben realizar las computadoras, así como deben realizar las computadoras, así como la corriente o flujo de datos en la la corriente o flujo de datos en la resolución de un programa.resolución de un programa.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

Construcción de los Diagramas de FlujoConstrucción de los Diagramas de Flujo

Su correcta construcción es sumamente importante porque a Su correcta construcción es sumamente importante porque a partir del mismo se puede escribir un programa en algún partir del mismo se puede escribir un programa en algún lenguaje de programación.lenguaje de programación.

Es importante mantener un estándar para la realización de Es importante mantener un estándar para la realización de dichos diagramas, esto con el fin de facilitar el intercambio dichos diagramas, esto con el fin de facilitar el intercambio de algoritmos mediante su esquematización gráfica. Es por de algoritmos mediante su esquematización gráfica. Es por eso que a continuación se muestran los símbolos a ocupar eso que a continuación se muestran los símbolos a ocupar durante el curso.durante el curso.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

Símbolo utilizado para marcar el Símbolo utilizado para marcar el inicio o fininicio o fin del del diagrama de flujo.diagrama de flujo.

Símbolo utilizado para representar un Símbolo utilizado para representar un procesoproceso. . En su interior se expresan asignaciones, En su interior se expresan asignaciones, operaciones aritméticas, cambios de valor operaciones aritméticas, cambios de valor de celdas en memoria, etc.de celdas en memoria, etc.

Símbolo utilizado para representar una Símbolo utilizado para representar una decisióndecisión. En su interior se almacena una . En su interior se almacena una condición, y dependiendo del resultado de condición, y dependiendo del resultado de la evaluación de la misma se sigue por una la evaluación de la misma se sigue por una de las ramas o caminos alternativos.de las ramas o caminos alternativos.

Símbolo utilizado para Símbolo utilizado para introducir los datos de introducir los datos de entradaentrada. Expresa lectura.. Expresa lectura.

Símbolo utilizado para representar la Símbolo utilizado para representar la impresiónimpresión de un resultado. Expresa de un resultado. Expresa escritura.escritura.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

Símbolos para los Diagramas de Flujo

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Reglas para la construcción de Diagramas de Reglas para la construcción de Diagramas de FlujoFlujo

1.Todo diagrama de flujo debe tener un 1.Todo diagrama de flujo debe tener un inicio y un fin.inicio y un fin.

2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser rectas, verticales y horizontales.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

Reglas para la construcción de Diagramas de Reglas para la construcción de Diagramas de FlujoFlujo

3. Todas las líneas utilizadas para indicar la 3. Todas las líneas utilizadas para indicar la dirección dirección del flujo del diagrama deben estar conectadasdel flujo del diagrama deben estar conectadas. La . La conexión puede ser a un símbolo que exprese conexión puede ser a un símbolo que exprese lectura, proceso, decisión, impresión, conexión o lectura, proceso, decisión, impresión, conexión o fin de diagrama.fin de diagrama.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Reglas para la construcción de Diagramas de Reglas para la construcción de Diagramas de FlujoFlujo

4. 4. El diagrama de flujo debe ser construido de El diagrama de flujo debe ser construido de arriba hacia abajo arriba hacia abajo y de izquierda a derechay de izquierda a derecha..

5. La notación utilizada en el diagrama de flujo debe ser 5. La notación utilizada en el diagrama de flujo debe ser independiente del lenguaje de programación.independiente del lenguaje de programación.

6. Es conveniente cuando realizamos una tarea compleja 6. Es conveniente cuando realizamos una tarea compleja poner poner comentarioscomentarios que expresen o ayuden a entender lo que hicimos. que expresen o ayuden a entender lo que hicimos.

7. Si el diagrama de flujo requiriera más de una hoja para su 7. Si el diagrama de flujo requiriera más de una hoja para su construcción, debemos utilizar los construcción, debemos utilizar los conectores adecuados y conectores adecuados y enumerar las páginas convenientementeenumerar las páginas convenientemente..

8. 8. No puede llegar más de una líneaNo puede llegar más de una línea a un símbolo. a un símbolo.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

Tipos de InstruccionesTipos de Instrucciones

Una instrucción puede ser considerada como Una instrucción puede ser considerada como un hecho o suceso de duración limitada que un hecho o suceso de duración limitada que genera unos cambios previstos en la genera unos cambios previstos en la ejecución de un programa, por lo que debe ejecución de un programa, por lo que debe ser una acción previamente estudiada y ser una acción previamente estudiada y definida.definida.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

Instrucciones de definición de datosInstrucciones de definición de datos

Son aquellas instrucciones utilizadas para informar Son aquellas instrucciones utilizadas para informar al procesador del espacio que debe reservar en al procesador del espacio que debe reservar en memoria, con la finalidad de almacenar un dato memoria, con la finalidad de almacenar un dato mediante el uso de variables simples o estructuras mediante el uso de variables simples o estructuras de datos más complejas como, por ejemplo, tablas.de datos más complejas como, por ejemplo, tablas.

La definición consiste en indicar un nombre a través La definición consiste en indicar un nombre a través del cual haremos referencia al dato y un tipo a del cual haremos referencia al dato y un tipo a través del cual informaremos al procesador de las través del cual informaremos al procesador de las características y espacio que deberá reservar en características y espacio que deberá reservar en memoria.memoria.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Instrucciones primitivasInstrucciones primitivas

Se consideran como tal las instrucciones de asignación y las instrucciones de entrada/salida. Se consideran como tal las instrucciones de asignación y las instrucciones de entrada/salida.

Instrucciones de entradaInstrucciones de entrada

Son aquellas instrucciones encargadas de recoger el dato de un dispositivo de entrada, y Son aquellas instrucciones encargadas de recoger el dato de un dispositivo de entrada, y seguidamente almacenarlo en memoria en una variable previamente definida, para la cual se ha seguidamente almacenarlo en memoria en una variable previamente definida, para la cual se ha reservado suficiente espacio en memoria.reservado suficiente espacio en memoria.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Instrucciones de asignaciónInstrucciones de asignación

Son aquellas instrucciones cuyo cometido es Son aquellas instrucciones cuyo cometido es almacenar un dato o valor simple obtenido como almacenar un dato o valor simple obtenido como resultado al evaluar una expresión en una variable resultado al evaluar una expresión en una variable previamente definida y declarada.previamente definida y declarada.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Instrucciones de salidaInstrucciones de salida

Son aquellas instrucciones encargadas de recoger los Son aquellas instrucciones encargadas de recoger los datos procedentes de variables evaluadas y datos procedentes de variables evaluadas y depositarlos en un dispositivo de salida.depositarlos en un dispositivo de salida.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de algoritmos (diagrama de

flujo y pseudocódigo)flujo y pseudocódigo)

Tipos de datos:Tipos de datos:

Los datos a procesar por una computadora Los datos a procesar por una computadora pueden clasificarse en: pueden clasificarse en:

SimplesSimples

EstructuradosEstructurados

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Datos SimplesDatos SimplesLa principal característica es que La principal característica es que solo ocupan sólo una casilla de solo ocupan sólo una casilla de memoriamemoria, por lo tanto, una variable simple hace referencia a un , por lo tanto, una variable simple hace referencia a un único valor a la vez. Dentro de este grupo se encuentran: único valor a la vez. Dentro de este grupo se encuentran: enteros, enteros, reales, caracteres, booleanos, enumerados y subrangosreales, caracteres, booleanos, enumerados y subrangos. .

Datos EstructuradosDatos Estructurados

Se caracterizan por el hecho de que con un nombre (identificador Se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a de variable estructurada) se hace referencia a un grupo de casillas un grupo de casillas de memoria.de memoria. Es decir un dato estructurado tiene varios Es decir un dato estructurado tiene varios componentes.componentes.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Dentro de los tipos de datos Dentro de los tipos de datos numéricos encontramos los numéricos encontramos los enteros y los realesenteros y los reales. .

Los Los enterosenteros son números son números que pueden estar que pueden estar precedidos del signo + ó -, precedidos del signo + ó -, y que no tienen parte y que no tienen parte decimal.decimal.

Los Los realesreales son números son números que pueden ser que pueden ser precedidos del signo + ó precedidos del signo + ó -, y que tienen una parte -, y que tienen una parte decimal.decimal.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

Datos numéricos

Datos alfanuméricos Datos alfanuméricos

Dentro de este tipo de datos encontramos los de tipo Dentro de este tipo de datos encontramos los de tipo caráctercarácter (simple) y (simple) y cadena de caracterescadena de caracteres (estructurado). Son (estructurado). Son datos cuyo contenido pueden ser letras del abecedario (a,b,c,datos cuyo contenido pueden ser letras del abecedario (a,b,c,…z), dígitos (0,1,2,…9) o símbolos especiales (#, $, ^, *, %, …z), dígitos (0,1,2,…9) o símbolos especiales (#, $, ^, *, %, …, etc). …, etc).

Debemos remarcar que aunque este tipo de datos puede Debemos remarcar que aunque este tipo de datos puede contener números, no pueden ser utilizados para realizar contener números, no pueden ser utilizados para realizar operaciones aritméticas. Un dato tipo cadena de caracteres operaciones aritméticas. Un dato tipo cadena de caracteres contiene un contiene un conjunto de caracteres, y se escribe entre conjunto de caracteres, y se escribe entre comillascomillas. La longitud de una cadena depende de los . La longitud de una cadena depende de los lenguajes de programación.lenguajes de programación.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Datos lógicosDatos lógicos

Dentro de este tipo de datos encontramos Dentro de este tipo de datos encontramos los booleanos. los booleanos.

Son datos que sólo pueden tomar dos Son datos que sólo pueden tomar dos valores: valores: verdadero (true) y falso (false).verdadero (true) y falso (false).

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

VariablesVariables

Las variables son objetos que Las variables son objetos que pueden cambiar pueden cambiar su valorsu valor durante la ejecución de un programa. durante la ejecución de un programa. Al igual que las constantes, pueden existir tipos Al igual que las constantes, pueden existir tipos de variables como tipos de datos.de variables como tipos de datos.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Constantes Constantes

Las constantes son Las constantes son datos que no cambiandatos que no cambian durante la ejecución de un programa. Para durante la ejecución de un programa. Para nombrar las constantes utilizamos nombrar las constantes utilizamos identificadores. Existen tipos de identificadores. Existen tipos de constantes como tipos de datos, por lo constantes como tipos de datos, por lo tanto, puede haber constantes de tipo tanto, puede haber constantes de tipo entero, real, carácter, cadena de entero, real, carácter, cadena de caracteres, etc.caracteres, etc.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Operaciones aritméticas Operaciones aritméticas Los operadores son símbolos que sirven para conectar Los operadores son símbolos que sirven para conectar los datos facilitando la realización de diversas clases los datos facilitando la realización de diversas clases de operaciones.de operaciones.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo algoritmos (diagrama de flujo

y pseudocódigo)y pseudocódigo)

Prueba de EscritorioPrueba de EscritorioLa prueba de escritorio es una herramienta útil para La prueba de escritorio es una herramienta útil para entender que hace un determinado algoritmo, o para entender que hace un determinado algoritmo, o para verificar que un algoritmo cumple con la verificar que un algoritmo cumple con la especificación sin necesidad de ejecutarlo.especificación sin necesidad de ejecutarlo.

Básicamente, una prueba de escritorio Básicamente, una prueba de escritorio es una es una ejecución ‘a mano’ del algoritmoejecución ‘a mano’ del algoritmo, por lo tanto se debe , por lo tanto se debe llevar registro de los valores que va tomando cada llevar registro de los valores que va tomando cada una de las variables involucradas en el mismo.una de las variables involucradas en el mismo.

Esta prueba consiste en que dar diferentes datos de Esta prueba consiste en que dar diferentes datos de entrada al programa y seguir la secuencia indicada en entrada al programa y seguir la secuencia indicada en el diagrama, hasta obtener los resultados.el diagrama, hasta obtener los resultados.

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

5.3 Representación de los 5.3 Representación de los algoritmos (diagrama de flujo y algoritmos (diagrama de flujo y

pseudocódigo)pseudocódigo)

letra ‘Z’; letra>=’A’ ; letra - 1

letra

fin

inicio

5.1. La computabilidad y 5.1. La computabilidad y concepto de algoritmo:concepto de algoritmo:

Máquina de Turing.Máquina de Turing.

Un algoritmo Un algoritmo contiene instrucciones elementales seleccionadas contiene instrucciones elementales seleccionadas cuidadosamente que pueden ser realizadas por un robot ó un cuidadosamente que pueden ser realizadas por un robot ó un procesadorprocesador; el procesador recibe las órdenes y ejecuta lo que ; el procesador recibe las órdenes y ejecuta lo que indican, resulta obvio que la disposición de las instrucciones indican, resulta obvio que la disposición de las instrucciones resulta crucial al momento de llevarlas a cabo. Por tanto, el resulta crucial al momento de llevarlas a cabo. Por tanto, el algoritmo debe incluir instrucciones de control que modifiquen la algoritmo debe incluir instrucciones de control que modifiquen la ruta que debe seguir el procesador, además de indicar que debe ruta que debe seguir el procesador, además de indicar que debe hacerse en cada paso, así como el momento en el cual debe hacerse en cada paso, así como el momento en el cual debe detenerse.detenerse.

Se ha probado que para implementar cualquier algoritmo, son Se ha probado que para implementar cualquier algoritmo, son suficientes tres construcciones básicas para control de flujo suficientes tres construcciones básicas para control de flujo secuencia, condicional y ciclos iterativos (repetitivos).secuencia, condicional y ciclos iterativos (repetitivos). A A continuación se describe cada una de ellas y se muestra su continuación se describe cada una de ellas y se muestra su representación tanto en pseudocódigo como en diagrama de flujo.representación tanto en pseudocódigo como en diagrama de flujo.

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e (secuencia, condicional e

iteración)iteración)

El El control de la secuenciacontrol de la secuencia se consigue combinando se consigue combinando varias instrucciones, llamadas estructuras de varias instrucciones, llamadas estructuras de control de flujo, o simplemente estructuras de control de flujo, o simplemente estructuras de control.control.

Incluso la receta del pastel contiene algunas de Incluso la receta del pastel contiene algunas de ellas, por ejemplo:ellas, por ejemplo:

5.4.1. Estructuras de Control.5.4.1. Estructuras de Control.

La estructura general de un algoritmo en pseudocódigo sería: 

NOMBRE DEL PROGRAMA (Pastel de mantequilla con fresa y limón en capas)

 DEFINICIÓN DE CADA MÓDULO (Necesitas, Procedimiento)

 CUERPO DEL PROGRAMA

DATOS:

4 onzas (1/2 pqte. de 8 oz) de queso crema PHILADELPHIA Cream Cheese, ablandado 1/2 taza  (1 barra) de mantequilla, ablandada 1-1/2 taza de azúcar 2-1/2 cucharadas  de cáscara rallada de limón verde (lime), cantidad dividida 1 cucharadita de vainilla 3   huevos 1-1/2 taza de harina 1-1/2 taza  de cobertura COOL WHIP Whipped Topping descongelada 2/3 taza de leche condensada azucarada 1/4 taza  de jugo de limón verde (lime) 12 fresas medianas, cantidad dividida 3   tiras finas de cáscara de limón verde (lime)  

ALGORITMO

PRECALIENTA el horno a 325ºF. ROCÍA un molde para pastel redondo de 9 pulgs. con aceite en aerosol.

Revuelve bien el queso crema y la mantequilla en un tazón grande con una batidora eléctrica a velocidad media. Agrega el azúcar; bate esto hasta que quede liviano y esponjoso. Agrega 2 cdas. de la cáscara de limón rallada y la vainilla; mézclalas bien. Agrega uno por uno los huevos, batiéndolos individualmente antes de añadir más. Agrega poco a poco la harina, batiendo bien cada tanto a velocidad baja antes de añadir más. Vierte el batido en el molde que preparaste.

HORNEA el pastel durante 1 hora o hasta que al insertar un palillo de dientes en el centro, éste salga limpio. Déjalo enfriar dentro el molde sobre una rejilla metálica durante 15 min. Retira el pastel del molde; déjalo enfriar por completo.

COMBINA la cobertura, la leche condensada, el jugo de limón y la 1-1/2 cdta. restante de la cáscara de limón rallada. Corta el pastel horizontalmente por la mitad. Coloca el pedazo que servirá de parte inferior sobre el platón para servir, úntale la mitad de la cobertura. Corta en rebanadas 9 de las fresas; colócalas sobre la cobertura. Ponle encima el otro pedazo de pastel. Úntale el resto de la cobertura. Corta las 3 fresas restantes en rebanadas y colócalas sobre el pastel de modo que parezcan ser 3 flores. Ponle una tira de cáscara de limón a cada una de las flores para formar los tallos. Guarda el pastel en el refrigerador.

FIN DEL ALGORITMO

La La ejecución secuencialejecución secuencial consiste consiste de ejecutar una instrucción y al de ejecutar una instrucción y al terminar, realizar lo que indica terminar, realizar lo que indica el siguiente paso del algoritmo.el siguiente paso del algoritmo.

5.4.1.1. Ejecución secuencial.5.4.1.1. Ejecución secuencial.

Consiste de ejecutar un grupo Consiste de ejecutar un grupo de acciones A ó un grupo de de acciones A ó un grupo de acciones B (pero no ambos) en acciones B (pero no ambos) en función del resultado de la función del resultado de la evaluación de una condición C evaluación de una condición C (Verdadero ó Falso).(Verdadero ó Falso).

5.4.1.2. Ejecución condicional.5.4.1.2. Ejecución condicional.

Un algoritmo que solo contiene las estructuras de Un algoritmo que solo contiene las estructuras de control anteriores funciona para tareas de longitud control anteriores funciona para tareas de longitud fija, dado que cada instrucción se ejecuta solamente fija, dado que cada instrucción se ejecuta solamente una vez. Sin embargo, generalmente se requiere una vez. Sin embargo, generalmente se requiere que algunas instrucciones sean ejecutadas más de que algunas instrucciones sean ejecutadas más de una vez (como en el algoritmo de obtención del una vez (como en el algoritmo de obtención del mcd); existen estructuras de control que se mcd); existen estructuras de control que se encargan de la ejecución repetida de bloques de encargan de la ejecución repetida de bloques de instrucciones, se conocen de forma genérica como instrucciones, se conocen de forma genérica como estructuras iterativas o ciclos.estructuras iterativas o ciclos.

5.4.1.2. Ejecución condicional.5.4.1.2. Ejecución condicional.

Sirve para ejecutar un grupo de Sirve para ejecutar un grupo de instrucciones A exactamente N instrucciones A exactamente N veces, donde N es un entero veces, donde N es un entero positivo.positivo.

5.4.1.3. Iteración definida.

Es importante notar que en el caso de la iteración Es importante notar que en el caso de la iteración definida existe una variable implícita llamada definida existe una variable implícita llamada contador, cont en el ejemplo, y sirve para tener un contador, cont en el ejemplo, y sirve para tener un registro del número de iteraciones realizadas registro del número de iteraciones realizadas hasta el momento y para llegar a la condición de hasta el momento y para llegar a la condición de paro. Otra variable muy utilizada cuando se paro. Otra variable muy utilizada cuando se trabaja con ciclos es conocida como acumulador, y trabaja con ciclos es conocida como acumulador, y sirve para almacenar resultados parciales de sirve para almacenar resultados parciales de alguna operación importante dentro del ciclo; alguna operación importante dentro del ciclo; además, al terminar el ciclo, almacena el resultado además, al terminar el ciclo, almacena el resultado final deseado.final deseado.

5.4.1.3. Iteración definida.

Conocida también como iteración Conocida también como iteración indefinida, se utiliza para repetir un indefinida, se utiliza para repetir un bloque de acciones A, mientras una bloque de acciones A, mientras una condición c sea verdadera, c es una condición c sea verdadera, c es una condición de paro.condición de paro.

5.4.1.4. Iteración 5.4.1.4. Iteración condicional.condicional.

En este caso, a diferencia de la iteración definida, la condición de En este caso, a diferencia de la iteración definida, la condición de paro C depende exclusivamente de las operaciones realizadas paro C depende exclusivamente de las operaciones realizadas dentro del cuerpo del ciclo.dentro del cuerpo del ciclo.

Cuando en un algoritmo se utilizan iteraciones, es necesario tener Cuando en un algoritmo se utilizan iteraciones, es necesario tener cuidado de no crear ciclos infinitos, esto se hace con operaciones cuidado de no crear ciclos infinitos, esto se hace con operaciones dentro del bloque de instrucciones que garanticen que la dentro del bloque de instrucciones que garanticen que la condición de paro se cumplirá.condición de paro se cumplirá.

5.4.1.4. Iteración 5.4.1.4. Iteración condicional.condicional.

CICLO ITERATIVO Se entiende por ciclo iterativo la unión de CICLO ITERATIVO Se entiende por ciclo iterativo la unión de símbolos gráficos que en su conjunto indica cómo repetir cierto símbolos gráficos que en su conjunto indica cómo repetir cierto proceso; las estructuras básicas más comunes son:proceso; las estructuras básicas más comunes son:

5.4.1.5. CICLO ITERATIVO5.4.1.5. CICLO ITERATIVO

Es conveniente realizar la Es conveniente realizar la solución de problemas con la solución de problemas con la computadora de manera computadora de manera conversacional, es decir, que conversacional, es decir, que el programa de el programa de computadora nos vaya computadora nos vaya indicando mediante indicando mediante mensajes las opciones y si mensajes las opciones y si se desea repetir el proceso se desea repetir el proceso con otros datos. El bosquejo con otros datos. El bosquejo general de un diagrama de general de un diagrama de flujo conversacional puede flujo conversacional puede ser el siguiente:ser el siguiente:

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e (secuencia, condicional e

iteración)iteración)

Aplicaciones del Ciclo Iterativo Aplicaciones del Ciclo Iterativo

Calcular el valor de la Calcular el valor de la expresión y almacenar en la expresión y almacenar en la variable indicada a la variable indicada a la izquierda del signo igual, se izquierda del signo igual, se genera el concepto de genera el concepto de contador o expresión que contador o expresión que permite contar (que consta de permite contar (que consta de un ciclo iterativo que ejecuta un ciclo iterativo que ejecuta varias veces la instrucción de varias veces la instrucción de reemplazo: C=C+1):reemplazo: C=C+1):

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e iteración)(secuencia, condicional e iteración)

Aplicaciones del Ciclo IterativoAplicaciones del Ciclo Iterativo

Otro de los conceptos de Otro de los conceptos de programación de gran utilidad programación de gran utilidad es la estructura que nos permite es la estructura que nos permite llevar a cabo llevar a cabo sumatorias sumatorias (en (en ellas el proceso que se repite es ellas el proceso que se repite es la acumulación de expresiones la acumulación de expresiones similares, por ejemplo sumar n similares, por ejemplo sumar n dígitos o sumar una y otra vez el dígitos o sumar una y otra vez el valor de una variable X elevada valor de una variable X elevada a un exponente que crece en a un exponente que crece en cada ocasión)cada ocasión)

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e iteración)(secuencia, condicional e iteración)

Otro elemento útil para el cálculo de fórmulas Otro elemento útil para el cálculo de fórmulas es el que resulta de aplicar el concepto de es el que resulta de aplicar el concepto de reemplazo del valor de la variable a lo que se reemplazo del valor de la variable a lo que se llamará una llamará una multiplicación multiplicación reiterada, la cual reiterada, la cual permite obtener factoriales de tipo permite obtener factoriales de tipo descendente o ascendente.descendente o ascendente.

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e iteración)(secuencia, condicional e iteración)

Obténganse el factorial de: 5!Obténganse el factorial de: 5!

Se sabe que su factorial ascendente es: 1 x 2 x 3 x 4 x 5Se sabe que su factorial ascendente es: 1 x 2 x 3 x 4 x 5

De dicha multiplicación se observa la presencia del De dicha multiplicación se observa la presencia del elemento llamado contador, que multiplica su valor elemento llamado contador, que multiplica su valor por el de la variable del factorial obtenido en el paso por el de la variable del factorial obtenido en el paso anterior, en efecto:anterior, en efecto:

F = 1 Valor inicial de la variable del factorialF = 1 Valor inicial de la variable del factorial

F = 1 x 2 Valor anterior de F multiplicado por 2, es decir, F = F x 2F = 1 x 2 Valor anterior de F multiplicado por 2, es decir, F = F x 2

F = 1 x 2 x 3 Valor anterior de F multiplicado por 3, es decir, F = F x 3F = 1 x 2 x 3 Valor anterior de F multiplicado por 3, es decir, F = F x 3

F = 1 x 2 x 3 x 4 Valor anterior de F multiplicado por 4, es decir, F = F x 4F = 1 x 2 x 3 x 4 Valor anterior de F multiplicado por 4, es decir, F = F x 4

F = 1 x 2 x 3 x 4 x 5 Valor anterior de F multiplicado por 5, es decir, F = F x 5F = 1 x 2 x 3 x 4 x 5 Valor anterior de F multiplicado por 5, es decir, F = F x 5

5.4 Estructuras básicas 5.4 Estructuras básicas (secuencia, condicional e iteración)(secuencia, condicional e iteración)

Un algoritmo puede contener estructuras Un algoritmo puede contener estructuras de control de flujo combinadas de forma de control de flujo combinadas de forma compleja; secuencias, condicionales e compleja; secuencias, condicionales e iteraciones pueden estar intercaladas y iteraciones pueden estar intercaladas y anidadas.anidadas.

5.4.2. Combinación de 5.4.2. Combinación de estructuras de control.estructuras de control.

Es importante mencionar que para realizar Es importante mencionar que para realizar un buen diseño de pseudocódigos y un buen diseño de pseudocódigos y diagramas de flujo es necesario realizar diagramas de flujo es necesario realizar las tres fases mencionadas en el desarrollo las tres fases mencionadas en el desarrollo de algoritmos:de algoritmos:

1. Analizar.1. Analizar.

2. Diseñar.2. Diseñar.

3. Probar.3. Probar.

5.5. Resolución de problemas 5.5. Resolución de problemas básicos de ingeniería.básicos de ingeniería.

Ejemplo: Obtener las raíces de una ecuación Ejemplo: Obtener las raíces de una ecuación cuadrática.cuadrática.

Este ejemplo presenta el pseudocódigo y el Este ejemplo presenta el pseudocódigo y el diagrama de flujo que utiliza la fórmula general diagrama de flujo que utiliza la fórmula general para obtener las raíces reales de una ecuación para obtener las raíces reales de una ecuación de cuadrática:de cuadrática:

5.5.1. Ejemplos.5.5.1. Ejemplos.

5.5.1. Ejemplos.5.5.1. Ejemplos.

5.5.1. Ejemplos.5.5.1. Ejemplos.

Aquí se presentan solo algunas de las numerosas historias relacionadas con errores en el software, varias han terminado incluso con pérdida de vidas. Es importante realizar siempre pruebas exhaustivas cuando se diseñan algoritmos y programas, sin asumir de antemano que son correctos.

A principios de los años 60’s, una nave espacial de la serie Mariner enviada a Venus se perdió debido a un error en el programa del control de vuelo, esto costó varios millones de dólares.

La importancia de las pruebas.La importancia de las pruebas.

En una serie de incidentes entre 1986 y 1987, muchos pacientes recibieron sobredosis masivas de radiación de un sistema de terapia de radiación Therac-25; tres de ellos fallecieron a causa de complicaciones relacionadas.

Un componente de hardware de seguridad que bloqueaba la radiación fue sustituido por revisiones por software, pero debido a un error en el programa no realizaba bien la tarea.

Hace algunos años una anciana danesa recibió, cercano a su cumpleaños número 107, una carta computarizada de las autoridades escolares locales con instrucciones sobre como realizar su inscripción a primer grado de educación primaria. Resulta que el campo “año” en la base de datos solo almacenaba dos dígitos.

La importancia de las pruebas.La importancia de las pruebas.

En el cambio de milenio, los problemas de software se convirtieron en noticia de primera plana con el llamado problema del año 2000, mejor conocido como “Y2K bug”. El miedo era que el 1o de enero del año 2000 todo dejaría de funcionar, ya que las computadoras usaban sólo dos dígitos para almacenar el año y por esto, asumirían que “00” era el año 1900 en lugar del 2000. Esto dio como resultado un gran (exitoso) y muy costoso esfuerzo para corregir programas en todo el mundo.

Estos son solo algunos ejemplos de la importancia que tiene realizar pruebas a los diseños de software elaborados.

La importancia de las pruebas.La importancia de las pruebas.

5.5.1. Ejemplos.5.5.1. Ejemplos.

Diseña un algoritmo que lea un número natural distinto de 0 desde teclado y muestre por pantalla todos los divisores de dicho número.

5.5.1. Ejemplos.5.5.1. Ejemplos.algoritmo : Divisores# Algoritmo que escribe los divisores de un número dado{numero=X (X N) X>0} # Declaración de variablesvar numero, contador : entero fvar 

# Cuerpo del algoritmoescribe('Introduce un número natural no nulo : ');lee(numero);escribe(1);contador := 2;mientras (contador < numero) hacer

si (numero resto contador) = 0 entoncesescribe(contador)

fsi;contador := contador + 1

fmientras;escribelin(contador)

 {numero=X contador=X}falgoritmo.