SlideShare a Scribd company logo
1 of 75
Tema V. Fundamentos de
      algoritmos

  Objetivo: El alumno explicará la
  importancia de llevar un método
  formal para resolver problemas en la
  computadora;     asimismo   aplicará
  dicho método en la resolución de
  problemas matemáticos sencillos.
1.1. La computabilidad y concepto de
                algoritmo:
             Máquina de Turing.
Partes de un programa
 Todo programa esta constituido por un conjunto
 de órdenes o instrucciones capaces de manipular
 un conjunto de datos. Éstas órdenes o
 instrucciones pueden ser divididas en tres grandes
 bloques         claramente          diferenciados,
 correspondientes cada uno de ellos a una parte
 del diseño de un programa.
1.1. La computabilidad y concepto de
             algoritmo:
          Máquina de Turing.
1.1. La computabilidad y concepto de
                  algoritmo:
               Máquina de Turing.
Teoría de la computabilidad
Es   la   parte    de  la
computación que estudia
los problemas de decisión
que pueden ser resueltos
con    un   algoritmo   o
equivalentemente con una
máquina de Turing.
                            Máquina ENIGMA
                            Segunda Guerra Mundial
1.1. La computabilidad y concepto
              de algoritmo:
            Máquina de Turing.
Máquina de Turing
 La Máquina de Turing se introdujo en 1936
 por Alan M. Turing para resolver problemas
 computables.    Es   la    base    de   las
 computadoras modernas.
1.1. La computabilidad y concepto de
                algoritmo:
             Máquina de Turing.
Máquina de Turing
 Una máquina de Turing esta formada por tres
 componentes: Una Cinta, Un Controlador y
 Una Cabeza de lectura/escritura.
1.1. La computabilidad y concepto de
                 algoritmo:
              Máquina de Turing.
Cinta
 Aun cuando las computadoras modernas utilizan un dispositivo
 de acceso aleatorio con capacidad finita, la memoria de la
 máquina de Turing es infinita. La cinta, en cualquier momento
 mantiene una secuencia de caracteres del conjunto de
 caracteres aceptado por la máquina.




  Cinta o Banda de Moebius
  August Ferdinand Möbius y Johann Benedict Listing en 1858
1.1. La computabilidad y concepto de
                 algoritmo:
              Máquina de Turing.
Cabeza de Lectura / Escritura
  La cabeza de lectura/escritura en cualquier momento 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 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 en su lugar. La lectura, la escritura y el
  desplazamiento, todos se realizan bajo instrucciones del
  controlador.
1.1. La computabilidad y concepto de
                algoritmo:
             Máquina de Turing.

Controlador
El controlador es la contraparte teórica de la unidad central de
proceso (CPU) en las computadoras modernas. Es un autómata de
estado finito, una máquina que tiene un número finito
predeterminado de estados y se mueve de un estado a otro con base
en la entrada. En cualquier momento puede estar en uno de estos
estados.
1.1. La computabilidad y concepto de
                       algoritmo:
                    Máquina de Turing.
Máquina de Turing
5.2 Elementos de los algoritmos y tipos
                de datos
Fundamentos de Algoritmos
Uno de los algoritmos más
antiguos conocidos es el algoritmo
de Euclides. El término algoritmo
proviene      del     matemático
Muhammad ibn Musa al-Khwarizmi,
que vivió aproximadamente entre
los años 780 y 850 D.C. en la
actual nación iraní. Describió la
realización    de     operaciones
elementales en el sistema de
numeración decimal. De al-
Khwarizmi se obtuvo la derivación
algoritmo.
5.2 Elementos de los algoritmos y tipos
                      de datos
Fundamentos de Algoritmos

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

   Precisión
   Determinismo
   Finitud
5.2 Elementos de los algoritmos y tipos
                  de datos

Características de los algoritmos
Precisión:
   Los pasos a seguir en el algoritmo deben ser precisados
   claramente.
Determinismo:
   El algoritmo, dado un conjunto de datos idénticos de
   entrada, siempre debe arrojar los mismos resultados.
Finitud:
   El algoritmo, independientemente de la complejidad del
   mismo, siempre debe ser de longitud finita.
5.2 Elementos de los algoritmos y tipos
                   de datos
Características de los algoritmos

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

Claro y Sencillo:
   Con el objetivo de facilitar su entendimiento y compresión
   por parte del programador.
5.2 Elementos de los algoritmos y tipos
                   de datos

Módulos de un algoritmo
5.2 Elementos de los algoritmos y tipos
                      de datos

Tipos de algoritmos

   Cualitativos
    Son aquellos en los que se describen los pasos utilizando palabras.
   Cuantitativos
    Son aquellos en los que se utilizan cálculos numéricos para definir los
    pasos del proceso.
   No Gráficos
     Representa en forma descriptiva las operaciones que debe realizar
    un algoritmo (pseudocodigo).
   Gráficos
     Es la representación gráfica de las operaciones que realiza un
    algoritmo (diagrama de flujo).
5.3 Representación de los algoritmos
            (diagrama de flujo y pseudocódigo)

Diagrama de Flujo

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

Construcción de los Diagramas de Flujo


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

  Es importante mantener un estándar para la realización de dichos
  diagramas, esto con el fin de facilitar el intercambio de algoritmos
  mediante su esquematización gráfica. Es por eso que a continuación
  se muestran los símbolos a ocupar durante el curso.
5.3 Representación de los algoritmos
 (diagrama de flujo y pseudocódigo)
  Símbolos para los Diagramas de Flujo
         Símbolo utilizado para marcar el inicio o fin del
            diagrama de flujo.
         Símbolo utilizado para representar un proceso. En
            su    interior   se    expresan    asignaciones,
            operaciones aritméticas, cambios de valor de
            celdas en memoria, etc.
         Símbolo utilizado para representar una decisión. En
            su interior se almacena una condición, y
            dependiendo del resultado de la evaluación de
            la misma se sigue por una de las ramas o
            caminos alternativos.
         Símbolo utilizado para introducir los datos de
            entrada. Expresa lectura.
         Símbolo utilizado para representar la impresión de
            un resultado. Expresa escritura.
5.3 Representación de los algoritmos
 (diagrama de flujo y pseudocódigo)
5.3 Representación de los algoritmos
 (diagrama de flujo y pseudocódigo)
5.3 Representación de los algoritmos
      (diagrama de flujo y pseudocódigo)
Reglas para la construcción de Diagramas de Flujo
1.Todo diagrama de flujo debe tener un 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 algoritmos
       (diagrama de flujo y pseudocódigo)
Reglas para la construcción de Diagramas de Flujo
3. Todas las líneas utilizadas para indicar la dirección del flujo
   del diagrama deben estar conectadas. La conexión puede ser
   a un símbolo que exprese lectura, proceso, decisión,
   impresión, conexión o fin de diagrama.
5.3 Representación de los algoritmos
           (diagrama de flujo y pseudocódigo)
     Reglas para la construcción de Diagramas de Flujo
4. El diagrama de flujo debe ser construido de arriba hacia abajo y de
      izquierda a derecha.
5.   La notación utilizada en el diagrama de flujo debe ser independiente
      del lenguaje de programación.
6.     Es conveniente cuando realizamos una tarea compleja poner
      comentarios que expresen o ayuden a entender lo que hicimos.
7.     Si el diagrama de flujo requiriera más de una hoja para su
      construcción, debemos utilizar los conectores adecuados y enumerar
      las páginas convenientemente.
8.   No puede llegar más de una línea a un símbolo.
5.3 Representación de los algoritmos
      (diagrama de flujo y pseudocódigo)
Tipos de Instrucciones

  Una instrucción puede ser considerada como un
  hecho o suceso de duración limitada que genera
  unos cambios previstos en la ejecución de un
  programa, por lo que debe ser una acción
  previamente estudiada y definida.
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)
Instrucciones de definición de datos

  Son aquellas instrucciones utilizadas para informar al
  procesador del espacio que debe reservar en memoria, con la
  finalidad de almacenar un dato mediante el uso de variables
  simples o estructuras de datos más complejas como, por
  ejemplo, tablas.
  La definición consiste en indicar un nombre a través del cual
  haremos referencia al dato y un tipo a través del cual
  informaremos al procesador de las características y espacio
  que deberá reservar en memoria.
5.3 Representación de los algoritmos
         (diagrama de flujo y pseudocódigo)
Instrucciones primitivas
  Se consideran como tal las instrucciones de asignación y las
  instrucciones de entrada/salida.
Instrucciones de entrada
  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 reservado
  suficiente espacio en memoria.
5.3 Representación de los algoritmos
      (diagrama de flujo y pseudocódigo)
Instrucciones de asignación

  Son aquellas instrucciones cuyo cometido es almacenar un
  dato o valor simple obtenido como resultado al evaluar una
  expresión en una variable previamente definida y declarada.
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)
Instrucciones de salida

  Son aquellas instrucciones encargadas de recoger los datos
  procedentes de variables evaluadas y depositarlos en un
  dispositivo de salida.
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)
Tipos de datos:

    Los datos a procesar por una computadora pueden
    clasificarse en:

   Simples

   Estructurados
5.3 Representación de los algoritmos
      (diagrama de flujo y pseudocódigo)
Datos Simples
  La principal característica es que solo ocupan sólo una casilla de
  memoria, por lo tanto, una variable simple hace referencia a un
  único valor a la vez. Dentro de este grupo se encuentran: enteros,
  reales, caracteres, booleanos, enumerados y subrangos.


Datos Estructurados

  Se caracterizan por el hecho de que con un nombre (identificador de
  variable estructurada) se hace referencia a un grupo de casillas de
  memoria. Es decir un dato estructurado tiene varios componentes.
5.3 Representación de los algoritmos
     (diagrama de flujo y pseudocódigo)
          Datos numéricos
Dentro de los tipos de datos
numéricos encontramos los
enteros y los reales.          Los reales son números que
Los enteros son números que    pueden ser precedidos del
pueden estar precedidos del    signo + ó -, y que tienen una
signo + ó -, y que no tienen   parte decimal.
parte decimal.
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)
Datos alfanuméricos

  Dentro de este tipo de datos encontramos los de tipo caracter
  (simple) y cadena de caracteres (estructurado). Son datos cuyo
  contenido pueden ser letras del abecedario (a,b,c,…z), dígitos
  (0,1,2,…9) o símbolos especiales (#, $, ^, *, %, …, etc). Debemos
  remarcar que aunque este tipo de datos puede contener números,
  no pueden ser utilizados para realizar operaciones aritméticas. Un
  dato tipo cadena de caracteres contiene un conjunto de
  caracteres, y se escribe entre comillas. La longitud de una cadena
  depende de los lenguajes de programación.
5.3 Representación de los algoritmos
     (diagrama de flujo y pseudocódigo)

Datos lógicos

  Dentro de este tipo de datos encontramos los
  booleanos.
  Son datos que sólo pueden tomar dos valores:
  verdadero (true) y falso (false).
5.3 Representación de los algoritmos
      (diagrama de flujo y pseudocódigo)

Variables

  Las variables son objetos que pueden cambiar su
  valor durante la ejecución de un programa. Al igual
  que las constantes, pueden existir tipos de variables
  como tipos de datos.
5.3 Representación de los algoritmos
     (diagrama de flujo y pseudocódigo)
Constantes

 Las constantes son datos que no cambian
 durante la ejecución de un programa. Para
 nombrar       las     constantes     utilizamos
 identificadores. Existen tipos de constantes
 como tipos de datos, por lo tanto, puede haber
 constantes de tipo entero, real, carácter,
 cadena de caracteres, etc.
5.3 Representación de los algoritmos
        (diagrama de flujo y pseudocódigo)

Operaciones aritméticas
  Los operadores son símbolos que sirven para conectar los
  datos facilitando la realización de diversas clases de
  operaciones.
5.3 Representación de los algoritmos
     (diagrama de flujo y pseudocódigo)

Pseudocódigo
 Se puede definir como el lenguaje intermedio entre el
 lenguaje natural y el lenguaje de programación
 seleccionado. Esta notación se encuentra sujeta a unas
 determinadas reglas que permiten y facilitan el diseño de
 algoritmos. El pseudocódigo surge como método para la
 representación de instrucciones en una metodología
 estructurada y nació como un lenguaje similar al inglés,
 que utilizaba palabras reservadas de este idioma (start,
 end, stop, while, repeat, for, if, if-else, etc.) y que
 posteriormente se fue adaptando a otros lenguajes de
 habla hispana.
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)

Pseudocódigo
5.3 Representación de los algoritmos
       (diagrama de flujo y pseudocódigo)

Prueba de Escritorio
  La prueba de escritorio es una herramienta útil para entender
  que hace un determinado algoritmo, o para verificar que un
  algoritmo cumple con la especificación sin necesidad de
  ejecutarlo.
  Básicamente, una prueba de escritorio es una ejecución ‘a
  mano’ del algoritmo, por lo tanto se debe llevar registro de
  los valores que va tomando cada una de las variables
  involucradas en el mismo.
  Esta prueba consiste en que dar diferentes datos de entrada
  al programa y seguir la secuencia indicada en el diagrama,
  hasta obtener los resultados.
5.3 Representación de los algoritmos
         (diagrama de flujo y pseudocódigo)

         inicio




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




         letra




         fin
1.1. La computabilidad y concepto de
             algoritmo:
          Máquina de Turing.
5.3 Representación de los algoritmos
            (diagrama de 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 algoritmos
            (diagrama de 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).
    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.
5.4 Estructuras básicas
    (secuencia, condicional e iteración)

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

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


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

Incluso la receta del pastel contiene algunas de ellas, por
ejemplo:
5.4.1.1. Ejecución secuencial.



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


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


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


Sirve para ejecutar un grupo de
instrucciones A exactamente N
veces, donde N es un entero
positivo.
5.4.1.3. Iteración definida.

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


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

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

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

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

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

Aplicaciones del Ciclo Iterativo

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

Aplicaciones del Ciclo Iterativo

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

    Otro elemento útil para el cálculo de fórmulas es el que resulta de aplicar el
    concepto de reemplazo del valor de la variable a lo que se llamará una
    multiplicación reiterada, la cual permite obtener factoriales de tipo
    descendente o ascendente.
Obténganse el factorial de: 5!
Se sabe que su factorial ascendente es: 1 x 2 x 3 x 4 x 5
    De dicha multiplicación se observa la presencia del elemento llamado
    contador, que multiplica su valor por el de la variable del factorial obtenido
    en el paso anterior, en efecto:

F   =   1   Valor inicial de la variable del factorial
F   =   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 3
F   =   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 5
5.4.2. Combinación de
         estructuras de control.



Un algoritmo puede contener estructuras de
control de flujo combinadas de forma
compleja;   secuencias,  condicionales   e
iteraciones pueden estar intercaladas y
anidadas.
1.5. Resolución de problemas básicos de
                  ingeniería.


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

1. Analizar.
2. Diseñar.
3. Probar.
1.5.1. Ejemplos.


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

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


    Aquí se presentan solo algunas de las númerosas historias relacionadas
    con errores en el software, varias han terminado incluso con pérdida
    de vidas. Es importante realizar simpre 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.
   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.
La importancia de las pruebas.


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.
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 (existoso) 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.
1.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.
1.5.1. Ejemplos.
algoritmo : Divisores
# Algoritmo que escribe los divisores de un número dado
{numero=X ∧ (X ∈ N) ∧ X>0}

# Declaración de variables
var numero, contador : entero fvar

    # Cuerpo del algoritmo
    escribe('Introduce un número natural no nulo : ');
    lee(numero);
    escribe(1);
    contador := 2;
    mientras (contador < numero) hacer
                 si (numero resto contador) = 0 entonces
                           escribe(contador)
                 fsi;
                 contador := contador + 1
    fmientras;
    escribelin(contador)

{numero=X ∧ contador=X}
falgoritmo.
Tema v

More Related Content

What's hot

Algoritmos TECNICO EN DESARROLLO DE SOFTWARE
Algoritmos TECNICO EN DESARROLLO DE SOFTWAREAlgoritmos TECNICO EN DESARROLLO DE SOFTWARE
Algoritmos TECNICO EN DESARROLLO DE SOFTWAREPedro Alvarez
 
ALGORITMOSAlgoritmo yy estructura de datos
ALGORITMOSAlgoritmo yy estructura de datosALGORITMOSAlgoritmo yy estructura de datos
ALGORITMOSAlgoritmo yy estructura de datosKevin Avilés Torres
 
Programas diseñados para realizar algoritmo
Programas  diseñados para realizar algoritmoProgramas  diseñados para realizar algoritmo
Programas diseñados para realizar algoritmoTAMELIMAR
 
Disenoestructuradoalgoritmos
DisenoestructuradoalgoritmosDisenoestructuradoalgoritmos
Disenoestructuradoalgoritmosarmando_franco
 
Operaciones basicas
Operaciones basicasOperaciones basicas
Operaciones basicaskenia14
 
Programacion lenguaje-c
Programacion lenguaje-cProgramacion lenguaje-c
Programacion lenguaje-cClariza
 
Unidad2 compu luis jimenez
Unidad2 compu luis jimenezUnidad2 compu luis jimenez
Unidad2 compu luis jimenezLuisJoseJimenez
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicoscbertolotti
 
Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos kira-akira
 
Logica de programacion de algoritmos
Logica de programacion de algoritmosLogica de programacion de algoritmos
Logica de programacion de algoritmosDavid Ramos
 

What's hot (19)

Algoritmos TECNICO EN DESARROLLO DE SOFTWARE
Algoritmos TECNICO EN DESARROLLO DE SOFTWAREAlgoritmos TECNICO EN DESARROLLO DE SOFTWARE
Algoritmos TECNICO EN DESARROLLO DE SOFTWARE
 
ALGORITMOSAlgoritmo yy estructura de datos
ALGORITMOSAlgoritmo yy estructura de datosALGORITMOSAlgoritmo yy estructura de datos
ALGORITMOSAlgoritmo yy estructura de datos
 
Teoría algoritmo
Teoría algoritmoTeoría algoritmo
Teoría algoritmo
 
Programas diseñados para realizar algoritmo
Programas  diseñados para realizar algoritmoProgramas  diseñados para realizar algoritmo
Programas diseñados para realizar algoritmo
 
Disenoestructuradoalgoritmos
DisenoestructuradoalgoritmosDisenoestructuradoalgoritmos
Disenoestructuradoalgoritmos
 
Algoritmos diagrama-de-flujo
Algoritmos diagrama-de-flujoAlgoritmos diagrama-de-flujo
Algoritmos diagrama-de-flujo
 
Resumen prgramacion
Resumen prgramacionResumen prgramacion
Resumen prgramacion
 
Introduccion Analisis Algoritmos
Introduccion Analisis AlgoritmosIntroduccion Analisis Algoritmos
Introduccion Analisis Algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Operaciones basicas
Operaciones basicasOperaciones basicas
Operaciones basicas
 
ALGORITMOS EN EL SOFTWARE
ALGORITMOS EN EL SOFTWAREALGORITMOS EN EL SOFTWARE
ALGORITMOS EN EL SOFTWARE
 
Diseño Estructurado de Algoritmos
Diseño Estructurado de AlgoritmosDiseño Estructurado de Algoritmos
Diseño Estructurado de Algoritmos
 
Programacion lenguaje-c
Programacion lenguaje-cProgramacion lenguaje-c
Programacion lenguaje-c
 
Unidad2 compu luis jimenez
Unidad2 compu luis jimenezUnidad2 compu luis jimenez
Unidad2 compu luis jimenez
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicos
 
Tecnoooo00000000000
Tecnoooo00000000000Tecnoooo00000000000
Tecnoooo00000000000
 
Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Logica de programacion de algoritmos
Logica de programacion de algoritmosLogica de programacion de algoritmos
Logica de programacion de algoritmos
 

Viewers also liked

Tema vi guia de c
Tema vi guia de cTema vi guia de c
Tema vi guia de cMaye Re
 
Tema iii
Tema iiiTema iii
Tema iiiMaye Re
 
Dominar la ortografia_teoria_ebook_es
Dominar la ortografia_teoria_ebook_esDominar la ortografia_teoria_ebook_es
Dominar la ortografia_teoria_ebook_esUniversidad Yacambú
 
Reglas de Ortografia.
Reglas de Ortografia.  Reglas de Ortografia.
Reglas de Ortografia. Venciendo88
 
reglas fundamentales de la ortografía
reglas fundamentales de la ortografíareglas fundamentales de la ortografía
reglas fundamentales de la ortografíaAleja Uribe
 
Windows 8 Guía Práctica
Windows 8 Guía PrácticaWindows 8 Guía Práctica
Windows 8 Guía Prácticapedro martinez
 
Ortografía
OrtografíaOrtografía
Ortografíamaricel
 
Reglas BáSicas De OrtografíA
Reglas BáSicas De OrtografíAReglas BáSicas De OrtografíA
Reglas BáSicas De OrtografíAvanessacabero
 
Introducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CIntroducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CCarlos Pes
 
Paginas de matematicas
Paginas de matematicasPaginas de matematicas
Paginas de matematicasespanol
 

Viewers also liked (14)

Tema vi guia de c
Tema vi guia de cTema vi guia de c
Tema vi guia de c
 
Tema i
Tema iTema i
Tema i
 
Tema iii
Tema iiiTema iii
Tema iii
 
Tema ii
Tema iiTema ii
Tema ii
 
Tema iv
Tema ivTema iv
Tema iv
 
Dominar la ortografia_teoria_ebook_es
Dominar la ortografia_teoria_ebook_esDominar la ortografia_teoria_ebook_es
Dominar la ortografia_teoria_ebook_es
 
Reglas de Ortografia.
Reglas de Ortografia.  Reglas de Ortografia.
Reglas de Ortografia.
 
reglas fundamentales de la ortografía
reglas fundamentales de la ortografíareglas fundamentales de la ortografía
reglas fundamentales de la ortografía
 
Windows 8 Guía Práctica
Windows 8 Guía PrácticaWindows 8 Guía Práctica
Windows 8 Guía Práctica
 
Ortografía
OrtografíaOrtografía
Ortografía
 
Reglas BáSicas De OrtografíA
Reglas BáSicas De OrtografíAReglas BáSicas De OrtografíA
Reglas BáSicas De OrtografíA
 
Taller de signos de puntuacion
Taller de signos de puntuacionTaller de signos de puntuacion
Taller de signos de puntuacion
 
Introducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CIntroducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje C
 
Paginas de matematicas
Paginas de matematicasPaginas de matematicas
Paginas de matematicas
 

Similar to Tema v

Resolución de problemas y algoritmo
Resolución de problemas y algoritmoResolución de problemas y algoritmo
Resolución de problemas y algoritmoNombre Apellidos
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoDesarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoLeidiCaro1
 
Algoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujoAlgoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujoClariza
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento SebastianGomezPayan
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoDesarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoSaragongoravillaquir
 
Tarea de tegnologia pdf (1)
Tarea de tegnologia pdf (1)Tarea de tegnologia pdf (1)
Tarea de tegnologia pdf (1)anaforero11
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slidesharedaniel_estrada
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slidesharedaniel_estrada
 
Manual users algoritmos
Manual users   algoritmosManual users   algoritmos
Manual users algoritmosJeremy Luis
 
Razonamiento algoritmico
Razonamiento algoritmicoRazonamiento algoritmico
Razonamiento algoritmicopaty_cursocompu
 
Algoritmos univ colombia
Algoritmos univ colombiaAlgoritmos univ colombia
Algoritmos univ colombiaJulio Camargo
 
Unidad algoritmos y df
Unidad algoritmos y dfUnidad algoritmos y df
Unidad algoritmos y dfernestdo1
 
Presentación Luis Barreto
Presentación Luis BarretoPresentación Luis Barreto
Presentación Luis BarretoLuisBarreto80
 

Similar to Tema v (20)

Resolución de problemas y algoritmo
Resolución de problemas y algoritmoResolución de problemas y algoritmo
Resolución de problemas y algoritmo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Apartes De Algoritmos
Apartes De AlgoritmosApartes De Algoritmos
Apartes De Algoritmos
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoDesarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento
 
Algoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujoAlgoritmos y diagramas_de_flujo
Algoritmos y diagramas_de_flujo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoDesarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento
 
Tarea de tegnologia pdf (1)
Tarea de tegnologia pdf (1)Tarea de tegnologia pdf (1)
Tarea de tegnologia pdf (1)
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slideshare
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slideshare
 
Manual users algoritmos
Manual users   algoritmosManual users   algoritmos
Manual users algoritmos
 
Razonamiento algoritmico
Razonamiento algoritmicoRazonamiento algoritmico
Razonamiento algoritmico
 
Los algoritmos
Los algoritmosLos algoritmos
Los algoritmos
 
Algoritmos univ colombia
Algoritmos univ colombiaAlgoritmos univ colombia
Algoritmos univ colombia
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Unidad algoritmos y df
Unidad algoritmos y dfUnidad algoritmos y df
Unidad algoritmos y df
 
EL ALGORITMO
EL ALGORITMOEL ALGORITMO
EL ALGORITMO
 
Power point algoritmo
Power point algoritmoPower point algoritmo
Power point algoritmo
 
Presentación Luis Barreto
Presentación Luis BarretoPresentación Luis Barreto
Presentación Luis Barreto
 

More from Maye Re

Algoritmos
AlgoritmosAlgoritmos
AlgoritmosMaye Re
 
Tema vi guia de c 2
Tema vi guia de c 2Tema vi guia de c 2
Tema vi guia de c 2Maye Re
 
Tema iii
Tema iiiTema iii
Tema iiiMaye Re
 
Ejercicios
EjerciciosEjercicios
EjerciciosMaye Re
 
Ejercicios diagramadeflujo
Ejercicios diagramadeflujoEjercicios diagramadeflujo
Ejercicios diagramadeflujoMaye Re
 
Repaso tvi
Repaso tviRepaso tvi
Repaso tviMaye Re
 
Tema 1 cpi
Tema 1 cpiTema 1 cpi
Tema 1 cpiMaye Re
 

More from Maye Re (17)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Tema ii
Tema iiTema ii
Tema ii
 
Tema vi guia de c 2
Tema vi guia de c 2Tema vi guia de c 2
Tema vi guia de c 2
 
Tema vi
Tema viTema vi
Tema vi
 
Tema iv
Tema ivTema iv
Tema iv
 
Tema iii
Tema iiiTema iii
Tema iii
 
Tema ii
Tema iiTema ii
Tema ii
 
Tema i
Tema iTema i
Tema i
 
Serie2
Serie2Serie2
Serie2
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Ejercicios diagramadeflujo
Ejercicios diagramadeflujoEjercicios diagramadeflujo
Ejercicios diagramadeflujo
 
Repaso tvi
Repaso tviRepaso tvi
Repaso tvi
 
Tema vi
Tema viTema vi
Tema vi
 
Tema iv
Tema ivTema iv
Tema iv
 
Tema 3
Tema 3Tema 3
Tema 3
 
Tema 2
Tema 2Tema 2
Tema 2
 
Tema 1 cpi
Tema 1 cpiTema 1 cpi
Tema 1 cpi
 

Tema v

  • 1. Tema V. Fundamentos de algoritmos Objetivo: El alumno explicará la importancia de llevar un método formal para resolver problemas en la computadora; asimismo aplicará dicho método en la resolución de problemas matemáticos sencillos.
  • 2. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Partes de un programa Todo programa esta constituido por un conjunto de órdenes o instrucciones capaces de manipular un conjunto de datos. Éstas órdenes o instrucciones pueden ser divididas en tres grandes bloques claramente diferenciados, correspondientes cada uno de ellos a una parte del diseño de un programa.
  • 3. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing.
  • 4. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Teoría de la computabilidad Es la parte de la computación que estudia los problemas de decisión que pueden ser resueltos con un algoritmo o equivalentemente con una máquina de Turing. Máquina ENIGMA Segunda Guerra Mundial
  • 5. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Máquina de Turing La Máquina de Turing se introdujo en 1936 por Alan M. Turing para resolver problemas computables. Es la base de las computadoras modernas.
  • 6. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Máquina de Turing Una máquina de Turing esta formada por tres componentes: Una Cinta, Un Controlador y Una Cabeza de lectura/escritura.
  • 7. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Cinta Aun cuando las computadoras modernas utilizan un dispositivo de acceso aleatorio con capacidad finita, la memoria de la máquina de Turing es infinita. La cinta, en cualquier momento mantiene una secuencia de caracteres del conjunto de caracteres aceptado por la máquina. Cinta o Banda de Moebius August Ferdinand Möbius y Johann Benedict Listing en 1858
  • 8. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Cabeza de Lectura / Escritura La cabeza de lectura/escritura en cualquier momento 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 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 en su lugar. La lectura, la escritura y el desplazamiento, todos se realizan bajo instrucciones del controlador.
  • 9. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Controlador El controlador es la contraparte teórica de la unidad central de proceso (CPU) en las computadoras modernas. Es un autómata de estado finito, una máquina que tiene un número finito predeterminado de estados y se mueve de un estado a otro con base en la entrada. En cualquier momento puede estar en uno de estos estados.
  • 10. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing. Máquina de Turing
  • 11. 5.2 Elementos de los algoritmos y tipos de datos Fundamentos de Algoritmos Uno de los algoritmos más antiguos conocidos es el algoritmo de Euclides. El término algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi, que vivió aproximadamente entre los años 780 y 850 D.C. en la actual nación iraní. Describió la realización de operaciones elementales en el sistema de numeración decimal. De al- Khwarizmi se obtuvo la derivación algoritmo.
  • 12. 5.2 Elementos de los algoritmos y tipos de datos Fundamentos de Algoritmos Un algoritmo se puede definir como un conjunto pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un problema de un cierto tipo. Por tanto debe ser:  Precisión  Determinismo  Finitud
  • 13. 5.2 Elementos de los algoritmos y tipos de datos Características de los algoritmos Precisión: Los pasos a seguir en el algoritmo deben ser precisados claramente. Determinismo: El algoritmo, dado un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos resultados. Finitud: El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de longitud finita.
  • 14. 5.2 Elementos de los algoritmos y tipos de datos Características de los algoritmos Conciso y Detallado: Debe reflejar con el máximo detalle el orden de ejecución de cada acción u operación que vaya a realizar la computadora. Claro y Sencillo: Con el objetivo de facilitar su entendimiento y compresión por parte del programador.
  • 15. 5.2 Elementos de los algoritmos y tipos de datos Módulos de un algoritmo
  • 16. 5.2 Elementos de los algoritmos y tipos de datos Tipos de algoritmos  Cualitativos Son aquellos en los que se describen los pasos utilizando palabras.  Cuantitativos Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.  No Gráficos Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo).  Gráficos Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo).
  • 17. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Diagrama de Flujo Para el diseño de algoritmos se utilizan técnicas de representación. Una de estas técnicas son los denominados Diagramas de Flujo, que se definen como la representación gráfica que, mediante el uso de símbolos estándar conectados o unidos mediante líneas de flujo, muestran la secuencia lógica de las operaciones o acciones que deben realizar las computadoras, así como la corriente o flujo de datos en la resolución de un programa.
  • 18. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Construcción de los Diagramas de Flujo Su correcta construcción es sumamente importante porque a partir del mismo se puede escribir un programa en algún lenguaje de programación. Es importante mantener un estándar para la realización de dichos diagramas, esto con el fin de facilitar el intercambio de algoritmos mediante su esquematización gráfica. Es por eso que a continuación se muestran los símbolos a ocupar durante el curso.
  • 19. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Símbolos para los Diagramas de Flujo Símbolo utilizado para marcar el inicio o fin del diagrama de flujo. Símbolo utilizado para representar un proceso. En su interior se expresan asignaciones, operaciones aritméticas, cambios de valor de celdas en memoria, etc. Símbolo utilizado para representar una decisión. En su interior se almacena una condición, y dependiendo del resultado de la evaluación de la misma se sigue por una de las ramas o caminos alternativos. Símbolo utilizado para introducir los datos de entrada. Expresa lectura. Símbolo utilizado para representar la impresión de un resultado. Expresa escritura.
  • 20. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo)
  • 21. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo)
  • 22. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Reglas para la construcción de Diagramas de Flujo 1.Todo diagrama de flujo debe tener un inicio y un fin 2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser rectas, verticales y horizontales.
  • 23. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Reglas para la construcción de Diagramas de Flujo 3. Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben estar conectadas. La conexión puede ser a un símbolo que exprese lectura, proceso, decisión, impresión, conexión o fin de diagrama.
  • 24. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Reglas para la construcción de Diagramas de Flujo 4. El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a derecha. 5. La notación utilizada en el diagrama de flujo debe ser independiente del lenguaje de programación. 6. Es conveniente cuando realizamos una tarea compleja poner comentarios que expresen o ayuden a entender lo que hicimos. 7. Si el diagrama de flujo requiriera más de una hoja para su construcción, debemos utilizar los conectores adecuados y enumerar las páginas convenientemente. 8. No puede llegar más de una línea a un símbolo.
  • 25. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Tipos de Instrucciones Una instrucción puede ser considerada como un hecho o suceso de duración limitada que genera unos cambios previstos en la ejecución de un programa, por lo que debe ser una acción previamente estudiada y definida.
  • 26. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Instrucciones de definición de datos Son aquellas instrucciones utilizadas para informar al procesador del espacio que debe reservar en memoria, con la finalidad de almacenar un dato mediante el uso de variables simples o estructuras de datos más complejas como, por ejemplo, tablas. La definición consiste en indicar un nombre a través del cual haremos referencia al dato y un tipo a través del cual informaremos al procesador de las características y espacio que deberá reservar en memoria.
  • 27. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Instrucciones primitivas Se consideran como tal las instrucciones de asignación y las instrucciones de entrada/salida. Instrucciones de entrada 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 reservado suficiente espacio en memoria.
  • 28. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Instrucciones de asignación Son aquellas instrucciones cuyo cometido es almacenar un dato o valor simple obtenido como resultado al evaluar una expresión en una variable previamente definida y declarada.
  • 29. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Instrucciones de salida Son aquellas instrucciones encargadas de recoger los datos procedentes de variables evaluadas y depositarlos en un dispositivo de salida.
  • 30. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Tipos de datos: Los datos a procesar por una computadora pueden clasificarse en:  Simples  Estructurados
  • 31. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Datos Simples La principal característica es que solo ocupan sólo una casilla de memoria, por lo tanto, una variable simple hace referencia a un único valor a la vez. Dentro de este grupo se encuentran: enteros, reales, caracteres, booleanos, enumerados y subrangos. Datos Estructurados Se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria. Es decir un dato estructurado tiene varios componentes.
  • 32. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Datos numéricos Dentro de los tipos de datos numéricos encontramos los enteros y los reales. Los reales son números que Los enteros son números que pueden ser precedidos del pueden estar precedidos del signo + ó -, y que tienen una signo + ó -, y que no tienen parte decimal. parte decimal.
  • 33. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Datos alfanuméricos Dentro de este tipo de datos encontramos los de tipo caracter (simple) y cadena de caracteres (estructurado). Son datos cuyo contenido pueden ser letras del abecedario (a,b,c,…z), dígitos (0,1,2,…9) o símbolos especiales (#, $, ^, *, %, …, etc). Debemos remarcar que aunque este tipo de datos puede contener números, no pueden ser utilizados para realizar operaciones aritméticas. Un dato tipo cadena de caracteres contiene un conjunto de caracteres, y se escribe entre comillas. La longitud de una cadena depende de los lenguajes de programación.
  • 34. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Datos lógicos Dentro de este tipo de datos encontramos los booleanos. Son datos que sólo pueden tomar dos valores: verdadero (true) y falso (false).
  • 35. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Variables Las variables son objetos que pueden cambiar su valor durante la ejecución de un programa. Al igual que las constantes, pueden existir tipos de variables como tipos de datos.
  • 36. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Constantes Las constantes son datos que no cambian durante la ejecución de un programa. Para nombrar las constantes utilizamos identificadores. Existen tipos de constantes como tipos de datos, por lo tanto, puede haber constantes de tipo entero, real, carácter, cadena de caracteres, etc.
  • 37. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Operaciones aritméticas Los operadores son símbolos que sirven para conectar los datos facilitando la realización de diversas clases de operaciones.
  • 38.
  • 39. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Pseudocódigo Se puede definir como el lenguaje intermedio entre el lenguaje natural y el lenguaje de programación seleccionado. Esta notación se encuentra sujeta a unas determinadas reglas que permiten y facilitan el diseño de algoritmos. El pseudocódigo surge como método para la representación de instrucciones en una metodología estructurada y nació como un lenguaje similar al inglés, que utilizaba palabras reservadas de este idioma (start, end, stop, while, repeat, for, if, if-else, etc.) y que posteriormente se fue adaptando a otros lenguajes de habla hispana.
  • 40. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Pseudocódigo
  • 41. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) Prueba de Escritorio La prueba de escritorio es una herramienta útil para entender que hace un determinado algoritmo, o para verificar que un algoritmo cumple con la especificación sin necesidad de ejecutarlo. Básicamente, una prueba de escritorio es una ejecución ‘a mano’ del algoritmo, por lo tanto se debe llevar registro de los valores que va tomando cada una de las variables involucradas en el mismo. Esta prueba consiste en que dar diferentes datos de entrada al programa y seguir la secuencia indicada en el diagrama, hasta obtener los resultados.
  • 42. 5.3 Representación de los algoritmos (diagrama de flujo y pseudocódigo) inicio letra ‘Z’; letra>=’A’ ; letra - 1 letra fin
  • 43. 1.1. La computabilidad y concepto de algoritmo: Máquina de Turing.
  • 44. 5.3 Representación de los algoritmos (diagrama de 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    
  • 45. 5.3 Representación de los algoritmos (diagrama de 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). 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.
  • 46. 5.4 Estructuras básicas (secuencia, condicional e iteración) Un algoritmo contiene instrucciones elementales seleccionadas cuidadosamente que pueden ser realizadas por un robot ó un procesador; el procesador recibe las órdenes y ejecuta lo que indican, resulta obvio que la disposición de las instrucciones resulta crucial al momento de llevarlas a cabo. Por tanto, el algoritmo debe incluir instrucciones de control que modifiquen la ruta que debe seguir el procesador, además de indicar que debe hacerse en cada paso, así como el momento en el cual debe detenerse. Se ha probado que para implementar cualquier algoritmo, son suficientes tres construcciones básicas para control de flujo secuencia, condicional y ciclos iterativos (repetitivos). A continuación se describe cada una de ellas y se muestra su representación tanto en pseudocódigo como en diagrama de flujo.
  • 47. 5.4.1. Estructuras de Control. El control de la secuencia se consigue combinando varias instrucciones, llamadas estructuras de control de flujo, o simplemente estructuras de control. Incluso la receta del pastel contiene algunas de ellas, por ejemplo:
  • 48. 5.4.1.1. Ejecución secuencial. La ejecución secuencial consiste de ejecutar una instrucción y al terminar, realizar lo que indica el siguiente paso del algoritmo.
  • 49. 5.4.1.2. Ejecución condicional. Consiste de ejecutar un grupo de acciones A ó un grupo de acciones B (pero no ambos) en función del resultado de la evaluación de una condición C (Verdadero ó Falso).
  • 50. 5.4.1.2. Ejecución condicional. Un algoritmo que solo contiene las estructuras de control anteriores funciona para tareas de longitud fija, dado que cada instrucción se ejecuta solamente una vez. Sin embargo, generalmente se requiere que algunas instrucciones sean ejecutadas más de una vez (como en el algoritmo de obtención del mcd); existen estructuras de control que se encargan de la ejecución repetida de bloques de instrucciones, se conocen de forma genérica como estructuras iterativas o ciclos.
  • 51. 5.4.1.3. Iteración definida. Sirve para ejecutar un grupo de instrucciones A exactamente N veces, donde N es un entero positivo.
  • 52. 5.4.1.3. Iteración definida. Es importante notar que en el caso de la iteración definida existe una variable implícita llamada contador, cont en el ejemplo, y sirve para tener un registro del número de iteraciones realizadas hasta el momento y para llegar a la condición de paro. Otra variable muy utilizada cuando se trabaja con ciclos es conocida como acumulador, y sirve para almacenar resultados parciales de alguna operación importante dentro del ciclo; además, al terminar el ciclo, almacena el resultado final deseado.
  • 53. 5.4.1.4. Iteración condicional. Conocida también como iteración indefinida, se utiliza para repetir un bloque de acciones A, mientras una condición c sea verdadera, c es una condición de paro.
  • 54. 5.4.1.4. Iteración condicional. En este caso, a diferencia de la iteración definida, la condición de paro C depende exclusivamente de las operaciones realizadas dentro del cuerpo del ciclo. Cuando en un algoritmo se utilizan iteraciones, es necesario tener cuidado de no crear ciclos infinitos, esto se hace con operaciones dentro del bloque de instrucciones que garanticen que la condición de paro se cumplirá.
  • 55. 5.4.1.5. CICLO ITERATIVO CICLO ITERATIVO Se entiende por ciclo iterativo la unión de símbolos gráficos que en su conjunto indica cómo repetir cierto proceso; las estructuras básicas más comunes son:
  • 56. 5.4 Estructuras básicas (secuencia, condicional e iteración) Es conveniente realizar la solución de problemas con la computadora de manera conversacional, es decir, que el programa de computadora nos vaya indicando mediante mensajes las opciones y si se desea repetir el proceso con otros datos. El bosquejo general de un diagrama de flujo conversacional puede ser el siguiente:
  • 57.
  • 58. 5.4 Estructuras básicas (secuencia, condicional e iteración) Aplicaciones del Ciclo Iterativo Calcular el valor de la expresión y almacenar en la variable indicada a la izquierda del signo igual, se genera el concepto de contador o expresión que permite contar (que consta de un ciclo iterativo que ejecuta varias veces la instrucción de reemplazo: C=C+1):
  • 59. 5.4 Estructuras básicas (secuencia, condicional e iteración) Aplicaciones del Ciclo Iterativo Otro de los conceptos de programación de gran utilidad es la estructura que nos permite llevar a cabo sumatorias (en ellas el proceso que se repite es la acumulación de expresiones similares, por ejemplo sumar n dígitos o sumar una y otra vez el valor de una variable X elevada a un exponente que crece en cada ocasión)
  • 60. 5.4 Estructuras básicas (secuencia, condicional e iteración) Otro elemento útil para el cálculo de fórmulas es el que resulta de aplicar el concepto de reemplazo del valor de la variable a lo que se llamará una multiplicación reiterada, la cual permite obtener factoriales de tipo descendente o ascendente. Obténganse el factorial de: 5! Se sabe que su factorial ascendente es: 1 x 2 x 3 x 4 x 5 De dicha multiplicación se observa la presencia del elemento llamado contador, que multiplica su valor por el de la variable del factorial obtenido en el paso anterior, en efecto: F = 1 Valor inicial de la variable del factorial F = 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 3 F = 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 5
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66. 5.4.2. Combinación de estructuras de control. Un algoritmo puede contener estructuras de control de flujo combinadas de forma compleja; secuencias, condicionales e iteraciones pueden estar intercaladas y anidadas.
  • 67. 1.5. Resolución de problemas básicos de ingeniería. Es importante mencionar que para realizar un buen diseño de pseudocódigos y diagramas de flujo es necesario realizar las tres fases mencionadas en el desarrollo de algoritmos: 1. Analizar. 2. Diseñar. 3. Probar.
  • 68. 1.5.1. Ejemplos. Ejemplo: Obtener las raíces de una ecuación cuadrática. Este ejemplo presenta el pseudocódigo y el diagrama de flujo que utiliza la fórmula general para obtener las raíces reales de una ecuación de cuadrática:
  • 71. La importancia de las pruebas. Aquí se presentan solo algunas de las númerosas historias relacionadas con errores en el software, varias han terminado incluso con pérdida de vidas. Es importante realizar simpre 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.  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.
  • 72. La importancia de las pruebas. 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. 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 (existoso) 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.
  • 73. 1.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.
  • 74. 1.5.1. Ejemplos. algoritmo : Divisores # Algoritmo que escribe los divisores de un número dado {numero=X ∧ (X ∈ N) ∧ X>0} # Declaración de variables var numero, contador : entero fvar # Cuerpo del algoritmo escribe('Introduce un número natural no nulo : '); lee(numero); escribe(1); contador := 2; mientras (contador < numero) hacer si (numero resto contador) = 0 entonces escribe(contador) fsi; contador := contador + 1 fmientras; escribelin(contador) {numero=X ∧ contador=X} falgoritmo.