SlideShare ist ein Scribd-Unternehmen logo
1 von 78
Curso de Programación
     Estructurada
        Parte I

 Dr. Ana Lilia Laureano-Cruces
    e-mail: clc@correo.azc.uam.mx
    Departamento de Sistemas
    UAM, Unidad Azcapotzalco
Objetivos (I)


Que al final del curso el estudiante sea capaz de:

  • Ubicar la importancia de la programación en la ingeniería
    del software
  • Explicar el proceso de construcción de un programa
  • Diseñar algoritmos para resolver problemas simples
  • Diseñar y construir programas modulares bajo el enfoque
    de la programación estructurada utilizando eficazmente y
    eficientemente un entorno de desarrollo convencional
Objetivos (II)



• Explicar y aplicar algoritmos iterativos de búsqueda y
  ordenamiento
• Conocer el papel de las etapas de análisis, diseño y
  programación en el desarrollo estructurado del software
Contenido Sintético
 Resolución de
problemas y los
  algoritmos

          De los algoritmos
          a los programas
                       Constructores
                     fundamentales de
                      la programación
                        estructurada

                               Fundamentos del
                                diseño modular
                                            Algoritmos
                                           iterativos de
                                            búsqueda y
                                          ordenamiento

                                                           Archivos

                                                                 Introducción a los
                                                                   tipos de datos
                                                                     abstractos
                                                                               Introducción al
                                                                              análisis y diseño
                                                                              estructurado del
                                                                                   software
Resolución de problemas y los
               algoritmos

• Concepto de algoritmo
• Propiedades de un algoritmo
• El rol del algoritmo en la resolución de
  problemas
Concepto de algoritmo (I)

Un algoritmo es un procedimiento para resolver un problema.
Éste describe un conjunto finito y ordenado de pasos, reglas o
instrucciones para producir la solución a un problema dado.
Un algoritmo puede ser definido como una secuencia de
instrucciones bien definidas y efectivas, y finaliza con la
producción del resultado esperado a partir de las entradas
dadas.
Concepto de algoritmo (II)


                                Algoritmo




Especificación         Acción o                  Acción o      Descripción
de las entradas     procedimiento     ...     procedimiento   del resultado o
                                                                   efecto




             Acción o            Acción o
          procedimiento       procedimiento
Un primer ejemplo de algoritmo

El siguiente algoritmo calcula el área y el perímetro de un rectángulo

 Datos de entrada: b y a (base y altura)                  Análisis resumido
 Datos de salida: ar y pe (área y perímetro)              del problema
 Procesos: ar = b*a, pe = 2*(b + a)

 •    Inicio
 •     Leer base y altura (b, a)
 •     ar ← b*a
 •     pe ← 2*(b + a)
 •     Escribir “Área del rectángulo: ”, ar
 •     Escribir “Perímetro del rectángulo: ”, pe
 •    Fin
Características de los algoritmos (I)


• Son precisos. Deben indicar el orden de realización de
  cada paso, así como especificar con precisión las
  entradas y cada paso o etapa
• Están bien definidos. Etapas bien definidas y concretas
• Exactitud y corrección. Se debe demostrar que el
  algoritmo resuelve el problema para el cual fue escrito
• Son finitos. Deben tener un número finito de pasos y
  deben terminar
• Deben describir el resultado o efecto final. La salida
  esperada del algoritmo debe estar completamente
  especificada
Características de los algoritmos (II)


Partes que debe describir la definición de un algoritmo:

    • Entrada
    • Proceso
    • Salida


       Entrada               Proceso                Salida
Características de los algoritmos (III)


• Son independientes tanto del lenguaje de programación
  en el que se expresan como del hardware en que se
  ejecutan los programas
                  Expresado                 Ejecutado
                  en                        en
                              Código en C
                                                   Computadora con
                                                   los compiladores
                                                     de C y Pascal
      Algoritmo               Código en
                               Pascal

                                                  Computadora con el
                              Código en             compilador de
                               Fortran                 Fortran
El rol del algoritmo en la resolución de
                    problemas (I)

La resolución de un problema en computadora requiere como
paso previo el diseño de un algoritmo que especifique el
procedimiento para resolver el problema. Es decir, antes de
codificar un programa se requiere diseñar el algoritmo.



     Descripción y                           Programa en un
                           Diseño del
      análisis del                             lenguaje de
                           algoritmo
       problema                               programación
Ejemplos de algoritmos (I.a.)

Definición del problema
Calcular los porcentajes de hombres y mujeres en un grupo de N
deportistas

Análisis del problema
Datos a considerar:
   •    Sexo de la persona (S)
   •    Número de personas del sexo masculino (CM)
   •    Número de personas del sexo femenino (CF)
   •    Total de deportistas (N)
   •    Porcentaje de hombres (PM)
   •    Porcentaje de mujeres (PF)
Ejemplos de algoritmos (I.b.)

Datos de entrada:
     •    Total de deportistas (N)
     •    Sexo de la persona (S)

Datos de salida:                                  Continuamos con el
                                                  análisis del problema
     •    Porcentaje de hombres (PM)
     •    Porcentaje de mujeres (PF)

Procesos:
 •       Contar la cantidad de personas del sexo masculino (CM = CM + 1)
 •       Contar la cantidad de personas del sexo femenino (CF = CF + 1)
 •       Calcular el porcentaje de hombres en el grupo (PM = CM/N*100)
 •       Calcular el porcentaje de mujeres en el grupo (PF = CF/N*100)
Ejemplos de algoritmos (I.c.)

Algoritmo:
  •    Inicio
  •     Inicializar en cero el total de personas del sexo masculino: CM ←
       0
  •     Inicializar en cero el total de personas del sexo femenino: CF ← 0
  •     Inicializar en cero el total de personas procesadas: TP ← 0
  •     Leer total de deportistas (N)
  •     MIENTRAS sexo de la persona (S)
          6.1 Leer TP < N
         6.2 SI S =‘M’, entonces CM ← CM + 1
         6.3 SI S = ‘F’, entonces CF ← CF + 1
         6.4 Incrementar en 1 el contador: TP ← TP + 1
       FIN-MIENTRAS
Ejemplos de algoritmos (I.d.)

Algoritmo (continuación):
  •    Calcular porcentaje de hombres en el grupo: PM ← CM/N*100
  •    Calcular porcentaje de mujeres en el grupo: PF ← CF/N*100
  •    Escribir “Porcentaje de hombres en el grupo: ”, PM
  •    Escribir “Porcentaje de mujeres en el grupo: ”, PF
  •    Fin

          En este algoritmo se puede apreciar el uso de las tres
          estructuras de control de la programación estructurada:
          • Estructura secuencial
          • Estructura selectiva
          • Estructura iterativa
Ejemplos de algoritmos (II)


 1.   Cálculo de la media de N observaciones numéricas
 2.   Determinar si un número es primo dada una lista de N
      números enteros
 3.   Cálculo del factorial de un número N
 4.   Retiro de efectivo en un cajero automático
 5.   Receta para preparar “spaghetti alla napoletana”

Definir en cada caso: entrada, procesos/operaciones y salida.
Escribir el algoritmo completo para todos los casos.
Diseño de algoritmos (I)



                Diseño del
                algoritmo




  Diseño                      Representación
descendente    Refinamiento       gráfica
Diseño de algoritmos (II)

                 Diseño descendente (I)
El diseño descendente (top down) es un procedimiento de
refinamiento iterativo de un problema, en el cual se parte del
mayor nivel de abstracción del problema (sistema o tarea) y
se prosigue hacia los niveles inferiores a través de un proceso
de descomposición del problema en subproblemas.
En el diseño descendente se parte de una visión estructural
del problema sin especificar detalles para ninguna de sus
partes componentes. Cada componente del sistema es
entonces refinado, mostrando más detalles en cada nivel de
refinamiento.
Diseño de algoritmos (III)

                       Diseño descendente (II)

                                             Problema




     Subproblema            Subproblema                 Subproblema
                                                                          ...           Subproblema




Subproblema   Subproblema                 Subproblema       Subproblema   Subproblema    Subproblema




                                Subproblema       Subproblema
Diseño de algoritmos (IV)

               Diseño descendente (III)
El diseño descendente efectúa una relación entre las
sucesivas etapas de refinamiento, de forma tal que éstas se
relacionen unas con otras a través de los flujos de entrada y
de salida de información.
                           X                  Y
                                       P


                               U       P2       P
                 X                                       Y
                      P1                            P4
                               V            Q
                                       P3


                 V                 R                S          Q
                      P31               P32              P33
Diseño de algoritmos (V)

                  Diseño descendente (IV)
        Ejemplo: el problema del cajero automático
                                        Cajero
                                      automático




Lectura y                  Selección de        Selección de
validación                    tipo de             tipo de      ...     Finalizar
 del NIP                      cuenta            operación




             Consulta de         Retiro de      Traspaso
               saldo             efectivo     entre cuentas   ...    Pago de
                                                 propias             servicios
Diseño de algoritmos (VI)

            Refinamiento del algoritmo (I)
Comúnmente, la primera versión de un algoritmo no
constituye una versión completa ni específica del mismo. El
refinamiento del algoritmo se refiere a la conversión del
primer esbozo/versión del algoritmo en una versión más
detallada y completa, haciendo los pasos del algoritmo más
específicos. Este proceso conduce a la obtención de un
algoritmo claro, preciso y completo.
Diseño de algoritmos (VII)

              Refinamiento del algoritmo (II)
Algoritmo para el cálculo de la media de la edad y peso de un grupo de
estudiantes (primer esbozo)


1. Inicio
2. Leer cantidad de estudiantes
3. Leer edad y peso de los estudiantes
4. Calcular las medias de la edad y del peso
5. Escribir resultados
Diseño de algoritmos (VIII)

             Refinamiento del algoritmo (III)
Algoritmo para el cálculo de la media de la edad y peso de un grupo de
estudiantes (versión refinada)
•   Inicio
•    Leer cantidad de estudiantes (N)
•    NE ← 0, SE ← 0, SP ← 0
•    MIENTRAS NE < N
       4.1 Leer edad y peso del estudiante (E, P)
       4.2 SE ← SE + E
       4.3 SP ← SP + P
      4.4 Incrementar el contador: NE ← NE + 1
     FIN-MIENTRAS
Diseño de algoritmos (IX)

             Refinamiento del algoritmo (IV)
Algoritmo para el cálculo de la media y desviación estándar de la edad y
peso de un grupo de estudiantes (versión refinada)

•    Calcular la media de la edad: ME ← SE/N
•    Calcular la media del peso: MP ← SP/N
•    Escribir “La edad promedio es: ”, ME
•    Escribir “El peso promedio es: ”, MP
•   Fin
Diseño de algoritmos (X)

  Especificación y representación gráfica del
                   algoritmo
• Pseudocódigo
• Diagramas de flujo
• Diagramas de Nassi-Schneiderman (N-S)
Diseño de algoritmos (XI)

  Especificación del algoritmo: pseudocódigo (I)

El pseudocódigo es un lenguaje de especificación de
algoritmos, comúnmente con una sintaxis para las estructuras
de control similar a la expresada en el lenguaje de
programación al que será traducido el algoritmo. Cuando un
algoritmo es expresado en pseudocódigo, entonces la
traducción de éste al lenguaje de programación seleccionado
resultará relativamente fácil.

                         Especificación
     Algoritmo                en                Programa
                         pseudocódigo
Diseño de algoritmos (XII)

  Especificación del algoritmo: pseudocódigo (II)
Las acciones y las estructuras de control se representan en el
pseudocódigo con palabras reservadas del inglés, similares a las utilizadas
en los lenguajes de programación estructurada. Entre estas palabras
reservadas, las más usadas son:

          start
           read                            Comúnmente, la
           write                           escritura del
                                           pseudocódigo
           If-then-else
                                           requiere el uso de la
           while-end                       indentación de las
           repeat-until                    diferentes líneas

          end
Diseño de algoritmos (XIII)

Especificación del algoritmo: pseudocódigo (III)

Begin
  read N
  NE ← 0
                                    Algoritmo para el
  SE ← 0
                                    cálculo de la media y
  SP ← 0                            desviación estándar
  while NE < N                      de la edad y peso de
        read E, P                   un grupo de
                                    estudiantes (versión
        SE ← SE + E
                                    en pseudocódigo)
        SP ← SP + P
        NE ← NE + 1
  end while
Diseño de algoritmos (XIV)

Especificación del algoritmo: pseudocódigo (IV)

                                      Cuando se usa el
                                      pseudocódigo como
  ME ← SE/N                           lenguaje de
  MP ← SP/N                           especificación de un
  write “La edad promedio es: ”, ME   algoritmo, el
                                      programador puede
  write “El peso promedio es: ”, MP   concentrarse en la
end                                   lógica y en las
                                      estructuras de control
                                      sin preocuparse por
                                      la sintaxis y reglas
                                      del lenguaje de
                                      programación.
Diseño de algoritmos (XV)

      Representación gráfica del algoritmo:
              diagramas de flujo (I)
Un diagrama de flujo (flowchart, del inglés) es una técnica de
representación gráfica de la lógica o pasos de un algoritmo. El diagrama
de flujo consiste de un conjunto de símbolos (tales como rectángulos,
paralelogramos, rombos, etc.) y flechas que conectan estos símbolos.
Los símbolos representan las diferentes acciones que se pueden
ejecutar en un algoritmo (lectura, asignación, decisión, escritura, etc.),
mientras que las flechas muestran la progresión paso a paso a través
del algoritmo.
Con la aparición de los lenguajes de programación estructurada el uso
de los diagramas de flujo ha disminuído considerablemente, dando
paso a otras técnicas de representación (como por ejemplo, diagramas
N-S, tablas procesos-entidades, diagramas estructurales, diagramas de
burbujas, etc. ) que capturan en un modo más adecuado la esencia y
principios de la programación estructurada.
Diseño de algoritmos (XVI)

    Representación gráfica del algoritmo:
                diagramas de flujo (II)
          Símbolo           Representación           Significado

Flechas o líneas de flujo                    Indica el sentido de
                                             ejecución de las acciones
Rectángulo                                   Proceso o acción a realizar
                                             (por ejemplo, asignación)
Paralelogramo                                Representa una entrada o
                                             salida
Rombo                                        Representa el constructor de
                                             selección (decisión lógica)
Rectángulo redondeado                        Representa el inicio y fin del
                                             diagrama
Círculo                                      Se usa como conector entre
                                             dos partes del diagrama
Diseño de algoritmos (XVII)

      Representación gráfica del algoritmo:
                  diagramas de flujo (III)
1. Inicio
2. Leer cantidad de estudiantes (N)              Inicio
3. NE <- 0, SE <- 0, SP <- 0
4. MIENTRAS NE < N                              Leer N
   4.1 Leer edad y peso del estudiante (E, P)
   4.2 SE <- SE + E                             NE <- 0
   4.3 SP <- SP + P
   4.4 Incrementar el contador: NE <- NE + 1
                                                SE <- 0

1. FIN-MIENTRAS
   Calcular la media de la edad: ME <- SE/N
2. Calcular la media del peso: MP <- SP/N       SP <- 0
3. Escribir “La edad promedio es: ”, ME
4. Escribir “El peso promedio es: ”, MP            1
5. Fin
Diseño de algoritmos (XVIII)
                                                          1
            Continuación (IV)
                                                      Leer E, P

1. Inicio
                                                     SE <- SE+E
2. Leer cantidad de estudiantes (N)
3. NE <- 0, SE <- 0, SP <- 0                         SP <- SP+P
4. MIENTRAS NE < N
   4.1 Leer edad y peso del estudiante (E, P)        NE <- NE+1
   4.2 SE <- SE + E
                                                Si
   4.3 SP <- SP + P                                    NE <N
   4.4 Incrementar el contador: NE <- NE + 1                  No

                                                     ME <- SE/N
1. FIN-MIENTRAS
   Calcular la media de la edad: ME <- SE/N
2. Calcular la media del peso: MP <- SP/N            MP <- SP/N
3. Escribir “La edad promedio es: ”, ME
                                                      Escribir
4. Escribir “El peso promedio es: ”, MP               ME, MP
5. Fin
                                                       Fin
Diseño de algoritmos (XIX)

     Representación gráfica del algoritmo:
    diagramas de Nassi-Schneiderman (N-S) (I)
El diagrama de Nassi-Schneiderman (N-S) (también conocido como
diagrama de Chapin) es una técnica de representación gráfica de
algoritmos que combina la especificación en pseudocódigo con la
representación gráfica del diagrama de flujo.
Cuando se usa el diagrama N-S un algoritmo es representado con un
rectángulo dividido en franjas o bandas horizontales, donde cada banda
representa una acción a realizar.
La especificación de los pasos del algoritmo se hace utilizando las
palabras reservadas ya vistas en el pseudocódigo, mientras que los
símbolos utilizados en el diagrama corresponden a cada tipo de
estructura de control: secuencia, selección, iteración.
Diseño de algoritmos (XX)

      Representación gráfica del algoritmo:
    diagramas de Nassi-Schneiderman (N-S) (II)
Representación gráfica N-S de un algoritmo        Palabras reservadas
                                               comúnmente usadas en la
     Begin                                   especificación de las acciones
                                              (pueden ser también usadas
                                                      en español)
      <acción 1>
                                                Begin
      <acción 2>                                  read
                                                  write
      <acción 3>                                  If-then-else
                                                  while-end
      ...
                                                  repeat-until
     End
                                                end
Diseño de algoritmos (XXI)

     Representación gráfica del algoritmo:
   diagramas de Nassi-Schneiderman (N-S) (III)
   Representación de la estructura de control secuencial
Declaración de variables
                             Asignación
tipo : nombre_variable
                             Variable = expresion
Ejemplos:
                             Ejemplos:
entero: edad
                             edadPromedio = sumaEdad/N
real: edadPromedio,
                             pesoPromedio = sumaPeso/N
    pesoPromedio
                             sexo = ‘M’
caracter: sexo
                             Deporte = “atletismo”
cadena: deporte
Diseño de algoritmos (XXII)

     Representación gráfica del algoritmo:
   diagramas de Nassi-Schneiderman (N-S) (IV)
   Representación de la estructura de control secuencial
Instrucción leer
leer <lista de identificadores de variables>
Ejemplos:
leer edad, peso
leer deporte
Instrucción escribir
escribir <lista de variables y constantes>
Ejemplos:
escribir edadPromedio, pesoPromedio
escribir deporte
Diseño de algoritmos (XXIII)

      Representación gráfica del algoritmo:
    diagramas de Nassi-Schneiderman (N-S) (V)
Algoritmo para calcular el área y               Diagrama N-S
  perímetro de un rectángulo
                                    Inicio
•    Inicio
•      Leer base y altura (b, a)     real: b, a, ar, pe
•      ar ← b*a
                                     Leer b, a
•      pe ← 2*(b + a)
•      Escribir “Área: ”, ar         ar = b*a
•      Escribir “Perímetro: ”, pe
•    Fin                             pe = 2(b + a)

                                     Escribir “área: ”, ar

                                     Escribir “perímetro: ”, pe

                                    Fin
Diseño de algoritmos (XXIV)

     Representación gráfica del algoritmo:
   diagramas de Nassi-Schneiderman (N-S) (VI)
   Representación de la estructura de control condicional
          Algoritmo                                    Diagrama N-S
si <condición> entonces
                                                            condición
 <acción 1>                                       Sí                       No

si_no
                                                  <acciones>       <acciones>
 <acción 2>


                                    selector

                Estructura
                de control   otro     1    2   3 ...    n
               condicional
                  CASE
Diseño de algoritmos (XXV)

      Representación gráfica del algoritmo:
   diagramas de Nassi-Schneiderman (N-S) (VII)
    Representación de la estructura de control condicional

                                                Diagrama N-S
              Algoritmo
                                                         S = ‘M’
Leer sexo de la persona (S)                Sí                               No
SI S =‘M’, entonces CM ← CM + 1
SI S = ‘F’, entonces CF ← CF + 1       }
Incrementar el contador: TP ← TP + 1       CM = CM + 1             CF = CF + 1
Diseño de algoritmos (XXVI)

     Representación gráfica del algoritmo:
  diagramas de Nassi-Schneiderman (N-S) (VIII)
   Representación de la estructura de control de iteración
Representación en el diagrama N-S   Representación en el diagrama N-S
   de la estructura MIENTRAS         de la estructura REPITE-HASTA

Mientras          (condición)




      <acciones que se repiten>           <acciones que se repiten>



                                                      HASTA (condición)
Diseño de algoritmos (XXVII)

  Representación gráfica del algoritmo:
diagramas de Nassi-Schneiderman (N-S) (IX)
Representación de la estructura de control de iteración

               Representación en el diagrama N-S
                     de la estructura PARA

            Para Contador ← valor_inicial hasta valor_final
            hacer




                          <acciones que se repiten>
Diseño de algoritmos (XXVIII)

      Representación gráfica del algoritmo:
    diagramas de Nassi-Schneiderman (N-S) (X)
start                        Inicio
   read N                    real: SE, SP
   NE ← 0                    entero: NE

   SE ← 0                    NE = 0

   SP ← 0                    SE = 0
                             SP = 0
   while NE < N
        read E, P            Mientras               NE <N

        SE ← SE + E                   leer E, P

        SP ← SP + P                   SE = SE + E
                                      SP = SP + P
        NE ← NE + 1
                                      NE = NE + 1
   end while
Diseño de algoritmos (XXIX)

        Representación gráfica del algoritmo:
      diagramas de Nassi-Schneiderman (N-S) (XI)
  ME <- SE/N
                                        ME = SE/N
  MP <- SP/N
                                        MP = SP/N
  write “Edad promedio: ”, ME           Escribir “Edad promedio”, ME
  write “Peso promedio: ”, MP           Escribir “Peso promedio”, MP
end
                                        Fin




         Lo que hemos hecho en estas últimas dos transparencias
         ha sido la especificación en un diagrama N-S del
         algoritmo para el cálculo de la edad promedio y peso
         promedio de un grupo de N personas
De los algoritmos a los programas


• Elementos, estructura y funcionamiento de un
  sistema de cómputo
• Lenguajes de programación: niveles, sintaxis y
  semántica
• Estrategias de contrucción de programas
Elementos, estructura y funcionamiento de
       un sistema de cómputo (I)

         Organización física de una computadora

                     CPU
                   Unidad Central de Proceso
                           ALU
                           Unidad
                        lógico-aritmética


 Dispositivos             CU                     Dispositivos
  de entrada           Unidad de control          de salida



                           RAM                 Memoria externa
                           Memoria             (almacenamiento
                                                  permanente)
Elementos, estructura y funcionamiento de
         un sistema de cómputo (II)

             Funcionamiento de una computadora (I)

La unidad central de proceso (del inglés, CPU)
La unidad central de proceso (del inglés, CPU) es el “cerebro” de la
computadora. La CPU dirige y controla el proceso de información efectuado
por la computadora, es la unidad donde se ejecutan las instrucciones de los
programas y donde se controla el funcionamiento de los distintos
componentes de la computadora. La CPU procesa información almacenada
en la memoria, puede recuperar información desde la memoria (datos o
programas) y almacenar nueva información o información procesada en la
memoria. La CPU está compuesta por dos componentes: la unidad de
control (CU) y la unidad lógico-aritmética (ALU)
Elementos, estructura y funcionamiento de
         un sistema de cómputo (III)

             Funcionamiento de una computadora (II)
La unidad de control (CU)
La unidad de control (CU) dirige y coordina las actividades de la
computadora, determina la secuencia de operaciones a realizar, interpreta
instrucciones codificadas, controla las funciones de decodificación,
ejecución y almacenamiento. Esta unidad controla y sincroniza todo el
proceso que tiene lugar en la computadora.


La unidad lógico-aritmética (ALU)
Como su nombre lo indica, la unidad lógico-aritmética es la encargada de
realizar operaciones artiméticas y lógicas (suma, resta, multiplicación,
división y comparaciones) sobre datos que provienen de la memoria
principal (RAM).
Elementos, estructura y funcionamiento de
         un sistema de cómputo (IV)

            Funcionamiento de una computadora (III)

La memoria central (RAM)
El papel de la memoria central (memoria RAM, Random Access Memory) es
el almacenamiento de información: datos y programas. Para que un
programa se pueda ejecutar, debe ser almacenado en la memoria central
(carga o load del programa). También los datos que serán usados por el
programa durante su ejecución deben ser situados en la memoria. Es decir,
la memoria RAM se usa para mantener los programas mientras se están
ejecutando y los datos mientras se están procesando.



           Memoria              Memoria             Procesador
           central               caché
Elementos, estructura y funcionamiento de
         un sistema de cómputo (V)

            Funcionamiento de una computadora (IV)

Dispositivos de entrada/salida
Los dispositivos de entrada/salida establecen la comunicación entre la
computadora y el usuario. Los dispositivos de entrada (teclado, mouse,
unidad CD-ROM, unidad DVD, escaner, cámara, etc.) permiten la
introducción de datos y programas en la computadora para su
procesamiento. Una vez que los datos son leídos de los dispositivos de
entrada, éstos son almacenados en la memoria central para su
procesamiento. Los dispositivos de salida (pantalla, impresora, etc.)
permiten representar/visualizar el resultado de la ejecución de los
programas.
Elementos, estructura y funcionamiento de
          un sistema de cómputo (VI)

            Funcionamiento de una computadora (V)

La memoria externa
La memoria externa es un medio de almacenamiento permanente tanto para
programas como para datos. Entre los dispositivos de almacenamiento (o
memorias auxiliares) más comúnmente utilizados se encuentran:

•   El disco duro
•   Disquetes magnéticos
•   Unidad CD-ROM
•   Unidad DVD
•   Memoria USB
Elementos, estructura y funcionamiento de
        un sistema de cómputo (VII)

                           El microprocesador
El microprocesador es un chip, un circuito integrado electrónico que es
utilizado como unidad central de proceso en una computadora. Las
funciones del microprocesador son el cálculo y control computacional.

                                   Microprocesador


                                       Unidad de
         Memoria central                control



                                     Unidad lógico-
                                       aritmética
Lenguajes de programación: niveles,
      sintaxis y semántica (I)

Niveles de lenguajes de programación (I)


           Lenguajes declarativos



           Lenguajes de alto nivel


                Lenguajes
              ensambladores


           Lenguajes de máquina
Lenguajes de programación: niveles,
            sintaxis y semántica (II)

       Niveles de lenguajes de programación (II)
Lenguajes de máquina
Fue el primer lenguaje utilizado en la programación de computadoras.
Constituye la capa más interna en los niveles de lenguaje en la
computación. Se podría decir que el lenguaje de máquina es el único que
entiende directamente la computadora. Este lenguaje se expresa a través
del alfabeto binario, el cual consta solo de los símbolos 0 y 1. El lenguaje de
máquina es dependiente de la computadora.

Lenguajes ensambladores
El lenguaje ensamblador es una representación simbólica del lenguaje de
máquina asociado. Es decir, cada computadora tiene un lenguaje
ensamblador propio. El lenguaje ensamblador usa palabras nemotécnicas
para representar cada instrucción (cadenas de bits) del lenguaje de
máquina asociado.
Lenguajes de programación: niveles,
           sintaxis y semántica (III)
      Niveles de lenguajes de programación (III)
Lenguajes de alto nivel
Constituyen los lenguajes de programación más utilizados. Son lenguajes
independientes de la computadora. Un programa escrito en lenguaje de alto
nivel puede ser ejecutado en cualquier computadora, siempre que ésta
disponga del traductor o compilador del lenguaje en cuestión. Los
programas pueden ser escritos y comprendidos de una forma más sencilla,
dada la aproximación de estos lenguajes con el lenguaje natural. Se
caracterizan por proporcionar librerías de uso frecuente (entrada/salida,
funciones matemáticas, manejo de cadenas, etc.). Ejemplos de estos
lenguajes son: Pascal, Fortran, C, C++, Java, Ada, Lisp y Prolog.

Lenguajes declarativos
Son aquellos lenguajes en los que se indica a la computadora qué es lo que
debe hacer, qué es lo que se desea obtener o qué es lo que se está
buscando. Son comúnmente lenguajes de órdenes, donde se expresa lo
que hay que hacer en lugar de cómo hacerlo. Ejemplos de lenguajes
declarativos son SQL y Prolog.
Lenguajes de programación: niveles,
     sintaxis y semántica (IV)




Lenguaje de programación =
   Léxico + Sintaxis + Semántica
Lenguajes de programación: niveles,
          sintaxis y semántica (V)
Aspectos a considerar en el diseño e implementación de los
              lenguajes de programación (I)

       •   Léxico
       •   Sintaxis
       •   Semántica
       •   Gestión de memoria
       •   Manejo de excepciones
       •   Implementación
       •   Pragmática
Lenguajes de programación: niveles,
              sintaxis y semántica (VI)
Aspectos a considerar en el diseño e implementación de los
             lenguajes de programación (II)
Léxico
Es el conjunto de categorías gramaticales que definen el vocabulario del
lenguaje de programación. Comúnmente, el léxico de un lenguaje de
programación posee las siguientes categorías gramaticales:
•   Identifier (nombre de variables, nombre de constantes, nombre de
    funciones, etc.)
•   Literal (números enteros y decimales)
•   Operator (+, -, *, /. etc.)
•   Separator (; . , etc.)
•   Keyword (while, read, write, if, for, case, int, real, etc.)
Lenguajes de programación: niveles,
            sintaxis y semántica (VII)
Aspectos a considerar en el diseño e implementación de los
             lenguajes de programación (III)

Sintaxis
La sintaxis de un lenguaje de programación es la definición gramatical de
lo que constituye un programa en dicho lenguaje. La sintaxis se especifica
en términos de un conjunto de reglas que rigen la construcción de los
programas. La definición de la sintaxis de un lenguaje de programación
debe ser clara, concisa y formal. La sintaxis del lenguaje de programación
se describe a partir de otros lenguajes, llamados metalenguajes. Uno de
los metalenguajes más difundidos es el formalismo BNF (Backus-Naur
Form), una gramática libre de contexto.
Lenguajes de programación: niveles,
            sintaxis y semántica (VIII)
 Aspectos a considerar en el diseño e implementación de los
              lenguajes de programación (IV)
Semántica
Se refiere al significado de los programas. Es el conjunto de reglas que
permiten determinar el significado de cualquier construcción del lenguaje.
La semántica asocia un significado a cada posible construcción gramatical
del lenguaje.

Gestión de memoria
La gestión de memoria se refiere al proceso de asignar valores a la
memoria, considerando tanto las características estáticas como dinámicas
de dichos valores. Los valores pueden ser asignados a una de tres
categorías de memoria: memoria estática, la pila en tiempo de ejecución y
el montículo.
Lenguajes de programación: niveles,
            sintaxis y semántica (IX)
 Aspectos a considerar en el diseño e implementación de los
              lenguajes de programación (V)
Manejo de excepciones
Una excepción es una condición detectada por una operación la cual no
se puede resolver en el contexto de la operación. Dos procesos básicos
se asocian al manejo de excepciones: (1) lanzamiento de la excepción y
(2) captura de la excepción. El lanzamiento de una excepción es señalar
que se ha producido una excepción, mientras que la captura de la
excepción consiste en proporcionar una forma de manipular dicha
excepción, transfiriéndose el control del programa al manipulador de la
excepción.
Lenguajes de programación: niveles,
             sintaxis y semántica (X)
 Aspectos a considerar en el diseño e implementación de los
              lenguajes de programación (VI)

Implementación
Cómo se ejecutan los programas.



Pragmática
Se refiere a los aspectos prácticos del uso de los programas.
Lenguajes de programación: niveles,
           sintaxis y semántica (XI)
                        Lenguaje natural
                            Aplicación
                     Lenguaje de programación
                       Compilador/Intérprete

 Contexto en el           Máquina virtual
                          Sistema operativo
 que se ubican
los lenguajes de            Lenguaje
                            de máquina
  programación
Lenguajes de programación: traductores de
               lenguajes (I)


                             Traductores de
                                 lenguaje




               Intérpretes                    Compiladores




Un traductor de lenguaje es un programa que traduce a código de
máquina un programa fuente escrito en un lenguaje de alto nivel.
Lenguajes de programación: traductores de
               lenguajes (II)

                            Intérpretes
Un intérprete es un traductor que recibe como entrada un programa
fuente, lo traduce y lo ejecuta. Un intérprete traduce y ejecuta una
instrucción en código fuente, a la vez. Los programas interpretados
generalmente son más lentos en ejecución que los programas compilados.




                                                     Traducción y
    Programa fuente           Intérprete            ejecución línea
                                                        a línea
Lenguajes de programación: traductores de
               lenguajes (III)

                           Compiladores
Un compilador traduce un programa fuente escrito en lenguaje de alto
nivel al lenguaje de máquina de la computadora. El programa traducido a
lenguaje de máquina es almacenado como código objeto.




    Programa fuente            Compilador            Programa objeto
Lenguajes de programación: traductores de
                 lenguajes (IV)

             Fases de la compilación de un programa

                                                                              Programa
 Programa                           Programa                                  ejecutable
  fuente        Compilador           objeto                 Linker
                                                                             en lenguaje
                                                                             de máquina




Analizador   Analizador      Analizador        Generador       Optimizador      Generador
  léxico     sintáctico      semántico          de código       de código       de código
                                               intermedio                        objeto
Paradigmas de programación (I)


•   Programación imperativa
•   Programación funcional
•   Programación lógica
•   Programación orientada a objetos
•   Programación concurrente
•   Programación guiada por eventos
Paradigmas de programación (II)

Programación imperativa
El programa se define como una serie de acciones o pasos, cada uno de
los cuales recibe una entrada, ejecuta un cálculo, o produce como
resultado una salida. La programación imperativa se basa en la asignación
de valores, en la utilización de variables para almacenar valores y en la
realización de operaciones con estos valores almacenados. Ejemplos de
lenguajes de programación imperativa son los lenguajes de alto nivel
(Fortran, C, Pascal, etc.) y los lenguajes ensambladores.

Programación funcional
Los programas están formados por una colección de definiciones de
funciones. Las funciones interactúan entre sí utilizando condicionales,
recursividad y composición funcional. Ejemplos de lenguajes de
programación funcional son Lisp y Scheme.
Paradigmas de programación (III)

Programación lógica
Un lenguaje de programación lógica es un tipo de lenguaje declarativo, en
el cual el programa está formado por un conjunto de declaraciones lógicas
(predicados, hechos). La ejecución de un programa consiste en aplicar
estas declaraciones para obtener todas las soluciones posibles a un
problema. El ejemplo clásico de lenguaje de programación lógica es
Prolog.


Programación orientada a objetos
El programa es una colección de objetos que interactúan entre sí a través
del paso de mensajes, los cuales comúnmente transforman el estado de
los objetos. Ejemplos de lenguajes orientados a objetos son Smalltalk, C+
+, Eiffel y Java.
Paradigmas de programación (IV)

Programación concurrente
La programación se basa en la ejecución simultánea de procesos, ya sea
en una misma computadora con uno o varios procesadores, que en un
cluster de computadoras. El programa se define como una colección de
procesos cooperativos y asíncronos. Ejemplos de lenguajes concurrentes
son Linda y Fortran de alto rendimiento.

Programación guiada por eventos
El programa responde a eventos externos generados en un orden no
predecible. Los eventos comúnmente se generan a partir de acciones del
usuario en la pantalla (por ejemplo, clics del mouse o pulsaciones de
teclas), pudiendo existir también otras fuentes generadoras de eventos.
Ejemplos de lenguajes de programación guida por eventos son Visual
Basic y Java.
Estrategias de construcción de
         programas (I)
 Fases de construcción de un programa

   Descripción y
    análisis del
     problema
              Diseño del
              algoritmo

                      Codificación
                      del programa

                               Ejecución del
                                 programa

                                        Validación del
                                          programa
Estrategias de construcción de
               programas (II)
                    Programación modular (I)
La filosofía subyacente de la programación modular es la descomposición
del programa en módulos independientes, cada uno de los cuales ejecuta
una única actividad o función. Cada módulo se analiza, se diseña, se
codifica y se verifica por separado. El programa es una jerarquía de
módulos, con un módulo principal (también llamado programa principal) con
una función de controlador. El módulo principal transfiere el control a los
módulos inmediatamente subordinados (o subprogramas), de modo que
éstos puedan ejecutar sus funciones. Una véz que el módulo subordinado
haya completado su tarea, devolverá nuevamente el control al módulo
controlador.
La descomposición de un módulo en submódulos continúa hasta que se
llegue a un punto en que el módulo resultante tenga sólo una tarea
específica que ejecutar (lectura, salida de resultados, procesamiento de
datos o control de otros módulos).
Estrategias de construcción de
                programas (III)
                        Programación modular (II)
                                             Módulo
                                            principal




      Módulo 1               Módulo 2                   Módulo 3       ...         Módulo N




Módulo 11        Módulo 12              Módulo 31          Módulo 32   Módulo N1   Módulo N2




                               Módulo 311        Módulo 312
Estrategias de construcción de
             programas (IV)
             Programación modular (III)
Ejemplo de descomposición de un programa en módulos:
  programa para el cálculo de estadísticas descriptivas

                           Cálculo de
                          estadísticas




Lectura de   Cálculo de       Cálculo de
             medidas de                    Generación de   Generación de
  datos                       medidas de      tablas         gráficos
             tendencia        dispersión
               central                       resumen
Estrategias de construcción de
              programas (V)
 Programación estructurada (programación sin goto)
La programación estructurada es un conjunto de técnicas que
incorporan:


                     Diseño modular



             Diseño descendente (top-down)


             Estructuras de control básico:
            secuencia, selección e iteración

Weitere ähnliche Inhalte

Was ist angesagt?

Gestion de la configuracion del software
Gestion de la configuracion del softwareGestion de la configuracion del software
Gestion de la configuracion del softwareGiovani Ramirez
 
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING)
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING) METODOLOGÍA UWE (UML-BASED WEB ENGINEERING)
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING) Germán Sánchez
 
Enfoque estructurado y Enfoque OO - Ingenieria de software
Enfoque estructurado y Enfoque OO  - Ingenieria de softwareEnfoque estructurado y Enfoque OO  - Ingenieria de software
Enfoque estructurado y Enfoque OO - Ingenieria de softwareKola Real
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)katherine revelo gomez
 
Qué es la ingeniería web
Qué es la ingeniería webQué es la ingeniería web
Qué es la ingeniería webVictor Barraza
 
Tema N° 11 Lenguaje de Representación (UML y URN)
Tema N° 11 Lenguaje de Representación (UML y URN)Tema N° 11 Lenguaje de Representación (UML y URN)
Tema N° 11 Lenguaje de Representación (UML y URN)SaraEAlcntaraR
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)Yadith Miranda Silva
 
Diseño de interfaces de usuario
Diseño de interfaces de usuarioDiseño de interfaces de usuario
Diseño de interfaces de usuarioDiego Rosas
 
Cuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoCuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoFreddySantiago32
 
Principios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwarePrincipios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwareJose Patricio Bovet Derpich
 
Proceso, modelos y metodos de ingenieria de software
Proceso, modelos y metodos de ingenieria de softwareProceso, modelos y metodos de ingenieria de software
Proceso, modelos y metodos de ingenieria de softwaresergio
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosAlvaro Enrique Ruano
 

Was ist angesagt? (20)

Gestion de la configuracion del software
Gestion de la configuracion del softwareGestion de la configuracion del software
Gestion de la configuracion del software
 
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING)
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING) METODOLOGÍA UWE (UML-BASED WEB ENGINEERING)
METODOLOGÍA UWE (UML-BASED WEB ENGINEERING)
 
Enfoque estructurado y Enfoque OO - Ingenieria de software
Enfoque estructurado y Enfoque OO  - Ingenieria de softwareEnfoque estructurado y Enfoque OO  - Ingenieria de software
Enfoque estructurado y Enfoque OO - Ingenieria de software
 
Estimación Software por Puntos de Función
Estimación Software por Puntos de FunciónEstimación Software por Puntos de Función
Estimación Software por Puntos de Función
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)
 
Diseño Estructurado
Diseño EstructuradoDiseño Estructurado
Diseño Estructurado
 
Qué es la ingeniería web
Qué es la ingeniería webQué es la ingeniería web
Qué es la ingeniería web
 
Tema N° 11 Lenguaje de Representación (UML y URN)
Tema N° 11 Lenguaje de Representación (UML y URN)Tema N° 11 Lenguaje de Representación (UML y URN)
Tema N° 11 Lenguaje de Representación (UML y URN)
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Principios diseño del software
Principios diseño del software Principios diseño del software
Principios diseño del software
 
Diseño Estructurado
Diseño EstructuradoDiseño Estructurado
Diseño Estructurado
 
Diseño de interfaces
Diseño de interfacesDiseño de interfaces
Diseño de interfaces
 
MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)MODELO COCOMO (INGENIERA DE SOFTWARE)
MODELO COCOMO (INGENIERA DE SOFTWARE)
 
Diseño de interfaces de usuario
Diseño de interfaces de usuarioDiseño de interfaces de usuario
Diseño de interfaces de usuario
 
Cuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoCuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientado
 
Principios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del softwarePrincipios de diseño de la arquitectura del software
Principios de diseño de la arquitectura del software
 
Proceso, modelos y metodos de ingenieria de software
Proceso, modelos y metodos de ingenieria de softwareProceso, modelos y metodos de ingenieria de software
Proceso, modelos y metodos de ingenieria de software
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
 
Sistemas operativos; procesos
Sistemas operativos; procesosSistemas operativos; procesos
Sistemas operativos; procesos
 
Generación de reportes
Generación de reportesGeneración de reportes
Generación de reportes
 

Andere mochten auch

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
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructuradaEduardo Bazurto
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modularShadai Black
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyradaguestefc95b
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltosfermodcor
 

Andere mochten auch (7)

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
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
HigherEd
HigherEdHigherEd
HigherEd
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modular
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyrada
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 

Ähnlich wie Curso Programación Estructurada Parte I

Ähnlich wie Curso Programación Estructurada Parte I (20)

Prog est 1
Prog est 1Prog est 1
Prog est 1
 
Prog estruct
Prog estructProg estruct
Prog estruct
 
Programación estructurada
Programación  estructuradaProgramación  estructurada
Programación estructurada
 
Programacion estruturada
Programacion  estruturadaProgramacion  estruturada
Programacion estruturada
 
Programación estructurada
Programación  estructuradaProgramación  estructurada
Programación estructurada
 
Algoritmos2
Algoritmos2Algoritmos2
Algoritmos2
 
Algoritmos2
Algoritmos2Algoritmos2
Algoritmos2
 
Diseño de pseudocodigo
Diseño de pseudocodigoDiseño de pseudocodigo
Diseño de pseudocodigo
 
Algoritmos y programas estructuras
Algoritmos y programas estructurasAlgoritmos y programas estructuras
Algoritmos y programas estructuras
 
AlgoritmoSoluciondeProblema.pdf
AlgoritmoSoluciondeProblema.pdfAlgoritmoSoluciondeProblema.pdf
AlgoritmoSoluciondeProblema.pdf
 
01_IntroduccionAlgoritmos (1).pdf
01_IntroduccionAlgoritmos (1).pdf01_IntroduccionAlgoritmos (1).pdf
01_IntroduccionAlgoritmos (1).pdf
 
Cuestionario de algoritmoss2
Cuestionario de algoritmoss2Cuestionario de algoritmoss2
Cuestionario de algoritmoss2
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos computacionales conceptos básicos
Algoritmos computacionales   conceptos básicosAlgoritmos computacionales   conceptos básicos
Algoritmos computacionales conceptos básicos
 
algoritmos
algoritmosalgoritmos
algoritmos
 
Introduccion a los algoritmos
Introduccion a los algoritmosIntroduccion a los algoritmos
Introduccion a los algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
clase 1 programacion biomedica.ppt
clase 1 programacion biomedica.pptclase 1 programacion biomedica.ppt
clase 1 programacion biomedica.ppt
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 

Curso Programación Estructurada Parte I

  • 1. Curso de Programación Estructurada Parte I Dr. Ana Lilia Laureano-Cruces e-mail: clc@correo.azc.uam.mx Departamento de Sistemas UAM, Unidad Azcapotzalco
  • 2. Objetivos (I) Que al final del curso el estudiante sea capaz de: • Ubicar la importancia de la programación en la ingeniería del software • Explicar el proceso de construcción de un programa • Diseñar algoritmos para resolver problemas simples • Diseñar y construir programas modulares bajo el enfoque de la programación estructurada utilizando eficazmente y eficientemente un entorno de desarrollo convencional
  • 3. Objetivos (II) • Explicar y aplicar algoritmos iterativos de búsqueda y ordenamiento • Conocer el papel de las etapas de análisis, diseño y programación en el desarrollo estructurado del software
  • 4. Contenido Sintético Resolución de problemas y los algoritmos De los algoritmos a los programas Constructores fundamentales de la programación estructurada Fundamentos del diseño modular Algoritmos iterativos de búsqueda y ordenamiento Archivos Introducción a los tipos de datos abstractos Introducción al análisis y diseño estructurado del software
  • 5. Resolución de problemas y los algoritmos • Concepto de algoritmo • Propiedades de un algoritmo • El rol del algoritmo en la resolución de problemas
  • 6. Concepto de algoritmo (I) Un algoritmo es un procedimiento para resolver un problema. Éste describe un conjunto finito y ordenado de pasos, reglas o instrucciones para producir la solución a un problema dado. Un algoritmo puede ser definido como una secuencia de instrucciones bien definidas y efectivas, y finaliza con la producción del resultado esperado a partir de las entradas dadas.
  • 7. Concepto de algoritmo (II) Algoritmo Especificación Acción o Acción o Descripción de las entradas procedimiento ... procedimiento del resultado o efecto Acción o Acción o procedimiento procedimiento
  • 8. Un primer ejemplo de algoritmo El siguiente algoritmo calcula el área y el perímetro de un rectángulo Datos de entrada: b y a (base y altura) Análisis resumido Datos de salida: ar y pe (área y perímetro) del problema Procesos: ar = b*a, pe = 2*(b + a) • Inicio • Leer base y altura (b, a) • ar ← b*a • pe ← 2*(b + a) • Escribir “Área del rectángulo: ”, ar • Escribir “Perímetro del rectángulo: ”, pe • Fin
  • 9. Características de los algoritmos (I) • Son precisos. Deben indicar el orden de realización de cada paso, así como especificar con precisión las entradas y cada paso o etapa • Están bien definidos. Etapas bien definidas y concretas • Exactitud y corrección. Se debe demostrar que el algoritmo resuelve el problema para el cual fue escrito • Son finitos. Deben tener un número finito de pasos y deben terminar • Deben describir el resultado o efecto final. La salida esperada del algoritmo debe estar completamente especificada
  • 10. Características de los algoritmos (II) Partes que debe describir la definición de un algoritmo: • Entrada • Proceso • Salida Entrada Proceso Salida
  • 11. Características de los algoritmos (III) • Son independientes tanto del lenguaje de programación en el que se expresan como del hardware en que se ejecutan los programas Expresado Ejecutado en en Código en C Computadora con los compiladores de C y Pascal Algoritmo Código en Pascal Computadora con el Código en compilador de Fortran Fortran
  • 12. El rol del algoritmo en la resolución de problemas (I) La resolución de un problema en computadora requiere como paso previo el diseño de un algoritmo que especifique el procedimiento para resolver el problema. Es decir, antes de codificar un programa se requiere diseñar el algoritmo. Descripción y Programa en un Diseño del análisis del lenguaje de algoritmo problema programación
  • 13. Ejemplos de algoritmos (I.a.) Definición del problema Calcular los porcentajes de hombres y mujeres en un grupo de N deportistas Análisis del problema Datos a considerar: • Sexo de la persona (S) • Número de personas del sexo masculino (CM) • Número de personas del sexo femenino (CF) • Total de deportistas (N) • Porcentaje de hombres (PM) • Porcentaje de mujeres (PF)
  • 14. Ejemplos de algoritmos (I.b.) Datos de entrada: • Total de deportistas (N) • Sexo de la persona (S) Datos de salida: Continuamos con el análisis del problema • Porcentaje de hombres (PM) • Porcentaje de mujeres (PF) Procesos: • Contar la cantidad de personas del sexo masculino (CM = CM + 1) • Contar la cantidad de personas del sexo femenino (CF = CF + 1) • Calcular el porcentaje de hombres en el grupo (PM = CM/N*100) • Calcular el porcentaje de mujeres en el grupo (PF = CF/N*100)
  • 15. Ejemplos de algoritmos (I.c.) Algoritmo: • Inicio • Inicializar en cero el total de personas del sexo masculino: CM ← 0 • Inicializar en cero el total de personas del sexo femenino: CF ← 0 • Inicializar en cero el total de personas procesadas: TP ← 0 • Leer total de deportistas (N) • MIENTRAS sexo de la persona (S) 6.1 Leer TP < N 6.2 SI S =‘M’, entonces CM ← CM + 1 6.3 SI S = ‘F’, entonces CF ← CF + 1 6.4 Incrementar en 1 el contador: TP ← TP + 1 FIN-MIENTRAS
  • 16. Ejemplos de algoritmos (I.d.) Algoritmo (continuación): • Calcular porcentaje de hombres en el grupo: PM ← CM/N*100 • Calcular porcentaje de mujeres en el grupo: PF ← CF/N*100 • Escribir “Porcentaje de hombres en el grupo: ”, PM • Escribir “Porcentaje de mujeres en el grupo: ”, PF • Fin En este algoritmo se puede apreciar el uso de las tres estructuras de control de la programación estructurada: • Estructura secuencial • Estructura selectiva • Estructura iterativa
  • 17. Ejemplos de algoritmos (II) 1. Cálculo de la media de N observaciones numéricas 2. Determinar si un número es primo dada una lista de N números enteros 3. Cálculo del factorial de un número N 4. Retiro de efectivo en un cajero automático 5. Receta para preparar “spaghetti alla napoletana” Definir en cada caso: entrada, procesos/operaciones y salida. Escribir el algoritmo completo para todos los casos.
  • 18. Diseño de algoritmos (I) Diseño del algoritmo Diseño Representación descendente Refinamiento gráfica
  • 19. Diseño de algoritmos (II) Diseño descendente (I) El diseño descendente (top down) es un procedimiento de refinamiento iterativo de un problema, en el cual se parte del mayor nivel de abstracción del problema (sistema o tarea) y se prosigue hacia los niveles inferiores a través de un proceso de descomposición del problema en subproblemas. En el diseño descendente se parte de una visión estructural del problema sin especificar detalles para ninguna de sus partes componentes. Cada componente del sistema es entonces refinado, mostrando más detalles en cada nivel de refinamiento.
  • 20. Diseño de algoritmos (III) Diseño descendente (II) Problema Subproblema Subproblema Subproblema ... Subproblema Subproblema Subproblema Subproblema Subproblema Subproblema Subproblema Subproblema Subproblema
  • 21. Diseño de algoritmos (IV) Diseño descendente (III) El diseño descendente efectúa una relación entre las sucesivas etapas de refinamiento, de forma tal que éstas se relacionen unas con otras a través de los flujos de entrada y de salida de información. X Y P U P2 P X Y P1 P4 V Q P3 V R S Q P31 P32 P33
  • 22. Diseño de algoritmos (V) Diseño descendente (IV) Ejemplo: el problema del cajero automático Cajero automático Lectura y Selección de Selección de validación tipo de tipo de ... Finalizar del NIP cuenta operación Consulta de Retiro de Traspaso saldo efectivo entre cuentas ... Pago de propias servicios
  • 23. Diseño de algoritmos (VI) Refinamiento del algoritmo (I) Comúnmente, la primera versión de un algoritmo no constituye una versión completa ni específica del mismo. El refinamiento del algoritmo se refiere a la conversión del primer esbozo/versión del algoritmo en una versión más detallada y completa, haciendo los pasos del algoritmo más específicos. Este proceso conduce a la obtención de un algoritmo claro, preciso y completo.
  • 24. Diseño de algoritmos (VII) Refinamiento del algoritmo (II) Algoritmo para el cálculo de la media de la edad y peso de un grupo de estudiantes (primer esbozo) 1. Inicio 2. Leer cantidad de estudiantes 3. Leer edad y peso de los estudiantes 4. Calcular las medias de la edad y del peso 5. Escribir resultados
  • 25. Diseño de algoritmos (VIII) Refinamiento del algoritmo (III) Algoritmo para el cálculo de la media de la edad y peso de un grupo de estudiantes (versión refinada) • Inicio • Leer cantidad de estudiantes (N) • NE ← 0, SE ← 0, SP ← 0 • MIENTRAS NE < N 4.1 Leer edad y peso del estudiante (E, P) 4.2 SE ← SE + E 4.3 SP ← SP + P 4.4 Incrementar el contador: NE ← NE + 1 FIN-MIENTRAS
  • 26. Diseño de algoritmos (IX) Refinamiento del algoritmo (IV) Algoritmo para el cálculo de la media y desviación estándar de la edad y peso de un grupo de estudiantes (versión refinada) • Calcular la media de la edad: ME ← SE/N • Calcular la media del peso: MP ← SP/N • Escribir “La edad promedio es: ”, ME • Escribir “El peso promedio es: ”, MP • Fin
  • 27. Diseño de algoritmos (X) Especificación y representación gráfica del algoritmo • Pseudocódigo • Diagramas de flujo • Diagramas de Nassi-Schneiderman (N-S)
  • 28. Diseño de algoritmos (XI) Especificación del algoritmo: pseudocódigo (I) El pseudocódigo es un lenguaje de especificación de algoritmos, comúnmente con una sintaxis para las estructuras de control similar a la expresada en el lenguaje de programación al que será traducido el algoritmo. Cuando un algoritmo es expresado en pseudocódigo, entonces la traducción de éste al lenguaje de programación seleccionado resultará relativamente fácil. Especificación Algoritmo en Programa pseudocódigo
  • 29. Diseño de algoritmos (XII) Especificación del algoritmo: pseudocódigo (II) Las acciones y las estructuras de control se representan en el pseudocódigo con palabras reservadas del inglés, similares a las utilizadas en los lenguajes de programación estructurada. Entre estas palabras reservadas, las más usadas son: start read Comúnmente, la write escritura del pseudocódigo If-then-else requiere el uso de la while-end indentación de las repeat-until diferentes líneas end
  • 30. Diseño de algoritmos (XIII) Especificación del algoritmo: pseudocódigo (III) Begin read N NE ← 0 Algoritmo para el SE ← 0 cálculo de la media y SP ← 0 desviación estándar while NE < N de la edad y peso de read E, P un grupo de estudiantes (versión SE ← SE + E en pseudocódigo) SP ← SP + P NE ← NE + 1 end while
  • 31. Diseño de algoritmos (XIV) Especificación del algoritmo: pseudocódigo (IV) Cuando se usa el pseudocódigo como ME ← SE/N lenguaje de MP ← SP/N especificación de un write “La edad promedio es: ”, ME algoritmo, el programador puede write “El peso promedio es: ”, MP concentrarse en la end lógica y en las estructuras de control sin preocuparse por la sintaxis y reglas del lenguaje de programación.
  • 32. Diseño de algoritmos (XV) Representación gráfica del algoritmo: diagramas de flujo (I) Un diagrama de flujo (flowchart, del inglés) es una técnica de representación gráfica de la lógica o pasos de un algoritmo. El diagrama de flujo consiste de un conjunto de símbolos (tales como rectángulos, paralelogramos, rombos, etc.) y flechas que conectan estos símbolos. Los símbolos representan las diferentes acciones que se pueden ejecutar en un algoritmo (lectura, asignación, decisión, escritura, etc.), mientras que las flechas muestran la progresión paso a paso a través del algoritmo. Con la aparición de los lenguajes de programación estructurada el uso de los diagramas de flujo ha disminuído considerablemente, dando paso a otras técnicas de representación (como por ejemplo, diagramas N-S, tablas procesos-entidades, diagramas estructurales, diagramas de burbujas, etc. ) que capturan en un modo más adecuado la esencia y principios de la programación estructurada.
  • 33. Diseño de algoritmos (XVI) Representación gráfica del algoritmo: diagramas de flujo (II) Símbolo Representación Significado Flechas o líneas de flujo Indica el sentido de ejecución de las acciones Rectángulo Proceso o acción a realizar (por ejemplo, asignación) Paralelogramo Representa una entrada o salida Rombo Representa el constructor de selección (decisión lógica) Rectángulo redondeado Representa el inicio y fin del diagrama Círculo Se usa como conector entre dos partes del diagrama
  • 34. Diseño de algoritmos (XVII) Representación gráfica del algoritmo: diagramas de flujo (III) 1. Inicio 2. Leer cantidad de estudiantes (N) Inicio 3. NE <- 0, SE <- 0, SP <- 0 4. MIENTRAS NE < N Leer N 4.1 Leer edad y peso del estudiante (E, P) 4.2 SE <- SE + E NE <- 0 4.3 SP <- SP + P 4.4 Incrementar el contador: NE <- NE + 1 SE <- 0 1. FIN-MIENTRAS Calcular la media de la edad: ME <- SE/N 2. Calcular la media del peso: MP <- SP/N SP <- 0 3. Escribir “La edad promedio es: ”, ME 4. Escribir “El peso promedio es: ”, MP 1 5. Fin
  • 35. Diseño de algoritmos (XVIII) 1 Continuación (IV) Leer E, P 1. Inicio SE <- SE+E 2. Leer cantidad de estudiantes (N) 3. NE <- 0, SE <- 0, SP <- 0 SP <- SP+P 4. MIENTRAS NE < N 4.1 Leer edad y peso del estudiante (E, P) NE <- NE+1 4.2 SE <- SE + E Si 4.3 SP <- SP + P NE <N 4.4 Incrementar el contador: NE <- NE + 1 No ME <- SE/N 1. FIN-MIENTRAS Calcular la media de la edad: ME <- SE/N 2. Calcular la media del peso: MP <- SP/N MP <- SP/N 3. Escribir “La edad promedio es: ”, ME Escribir 4. Escribir “El peso promedio es: ”, MP ME, MP 5. Fin Fin
  • 36. Diseño de algoritmos (XIX) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (I) El diagrama de Nassi-Schneiderman (N-S) (también conocido como diagrama de Chapin) es una técnica de representación gráfica de algoritmos que combina la especificación en pseudocódigo con la representación gráfica del diagrama de flujo. Cuando se usa el diagrama N-S un algoritmo es representado con un rectángulo dividido en franjas o bandas horizontales, donde cada banda representa una acción a realizar. La especificación de los pasos del algoritmo se hace utilizando las palabras reservadas ya vistas en el pseudocódigo, mientras que los símbolos utilizados en el diagrama corresponden a cada tipo de estructura de control: secuencia, selección, iteración.
  • 37. Diseño de algoritmos (XX) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (II) Representación gráfica N-S de un algoritmo Palabras reservadas comúnmente usadas en la Begin especificación de las acciones (pueden ser también usadas en español) <acción 1> Begin <acción 2> read write <acción 3> If-then-else while-end ... repeat-until End end
  • 38. Diseño de algoritmos (XXI) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (III) Representación de la estructura de control secuencial Declaración de variables Asignación tipo : nombre_variable Variable = expresion Ejemplos: Ejemplos: entero: edad edadPromedio = sumaEdad/N real: edadPromedio, pesoPromedio = sumaPeso/N pesoPromedio sexo = ‘M’ caracter: sexo Deporte = “atletismo” cadena: deporte
  • 39. Diseño de algoritmos (XXII) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (IV) Representación de la estructura de control secuencial Instrucción leer leer <lista de identificadores de variables> Ejemplos: leer edad, peso leer deporte Instrucción escribir escribir <lista de variables y constantes> Ejemplos: escribir edadPromedio, pesoPromedio escribir deporte
  • 40. Diseño de algoritmos (XXIII) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (V) Algoritmo para calcular el área y Diagrama N-S perímetro de un rectángulo Inicio • Inicio • Leer base y altura (b, a) real: b, a, ar, pe • ar ← b*a Leer b, a • pe ← 2*(b + a) • Escribir “Área: ”, ar ar = b*a • Escribir “Perímetro: ”, pe • Fin pe = 2(b + a) Escribir “área: ”, ar Escribir “perímetro: ”, pe Fin
  • 41. Diseño de algoritmos (XXIV) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (VI) Representación de la estructura de control condicional Algoritmo Diagrama N-S si <condición> entonces condición <acción 1> Sí No si_no <acciones> <acciones> <acción 2> selector Estructura de control otro 1 2 3 ... n condicional CASE
  • 42. Diseño de algoritmos (XXV) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (VII) Representación de la estructura de control condicional Diagrama N-S Algoritmo S = ‘M’ Leer sexo de la persona (S) Sí No SI S =‘M’, entonces CM ← CM + 1 SI S = ‘F’, entonces CF ← CF + 1 } Incrementar el contador: TP ← TP + 1 CM = CM + 1 CF = CF + 1
  • 43. Diseño de algoritmos (XXVI) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (VIII) Representación de la estructura de control de iteración Representación en el diagrama N-S Representación en el diagrama N-S de la estructura MIENTRAS de la estructura REPITE-HASTA Mientras (condición) <acciones que se repiten> <acciones que se repiten> HASTA (condición)
  • 44. Diseño de algoritmos (XXVII) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (IX) Representación de la estructura de control de iteración Representación en el diagrama N-S de la estructura PARA Para Contador ← valor_inicial hasta valor_final hacer <acciones que se repiten>
  • 45. Diseño de algoritmos (XXVIII) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (X) start Inicio read N real: SE, SP NE ← 0 entero: NE SE ← 0 NE = 0 SP ← 0 SE = 0 SP = 0 while NE < N read E, P Mientras NE <N SE ← SE + E leer E, P SP ← SP + P SE = SE + E SP = SP + P NE ← NE + 1 NE = NE + 1 end while
  • 46. Diseño de algoritmos (XXIX) Representación gráfica del algoritmo: diagramas de Nassi-Schneiderman (N-S) (XI) ME <- SE/N ME = SE/N MP <- SP/N MP = SP/N write “Edad promedio: ”, ME Escribir “Edad promedio”, ME write “Peso promedio: ”, MP Escribir “Peso promedio”, MP end Fin Lo que hemos hecho en estas últimas dos transparencias ha sido la especificación en un diagrama N-S del algoritmo para el cálculo de la edad promedio y peso promedio de un grupo de N personas
  • 47. De los algoritmos a los programas • Elementos, estructura y funcionamiento de un sistema de cómputo • Lenguajes de programación: niveles, sintaxis y semántica • Estrategias de contrucción de programas
  • 48. Elementos, estructura y funcionamiento de un sistema de cómputo (I) Organización física de una computadora CPU Unidad Central de Proceso ALU Unidad lógico-aritmética Dispositivos CU Dispositivos de entrada Unidad de control de salida RAM Memoria externa Memoria (almacenamiento permanente)
  • 49. Elementos, estructura y funcionamiento de un sistema de cómputo (II) Funcionamiento de una computadora (I) La unidad central de proceso (del inglés, CPU) La unidad central de proceso (del inglés, CPU) es el “cerebro” de la computadora. La CPU dirige y controla el proceso de información efectuado por la computadora, es la unidad donde se ejecutan las instrucciones de los programas y donde se controla el funcionamiento de los distintos componentes de la computadora. La CPU procesa información almacenada en la memoria, puede recuperar información desde la memoria (datos o programas) y almacenar nueva información o información procesada en la memoria. La CPU está compuesta por dos componentes: la unidad de control (CU) y la unidad lógico-aritmética (ALU)
  • 50. Elementos, estructura y funcionamiento de un sistema de cómputo (III) Funcionamiento de una computadora (II) La unidad de control (CU) La unidad de control (CU) dirige y coordina las actividades de la computadora, determina la secuencia de operaciones a realizar, interpreta instrucciones codificadas, controla las funciones de decodificación, ejecución y almacenamiento. Esta unidad controla y sincroniza todo el proceso que tiene lugar en la computadora. La unidad lógico-aritmética (ALU) Como su nombre lo indica, la unidad lógico-aritmética es la encargada de realizar operaciones artiméticas y lógicas (suma, resta, multiplicación, división y comparaciones) sobre datos que provienen de la memoria principal (RAM).
  • 51. Elementos, estructura y funcionamiento de un sistema de cómputo (IV) Funcionamiento de una computadora (III) La memoria central (RAM) El papel de la memoria central (memoria RAM, Random Access Memory) es el almacenamiento de información: datos y programas. Para que un programa se pueda ejecutar, debe ser almacenado en la memoria central (carga o load del programa). También los datos que serán usados por el programa durante su ejecución deben ser situados en la memoria. Es decir, la memoria RAM se usa para mantener los programas mientras se están ejecutando y los datos mientras se están procesando. Memoria Memoria Procesador central caché
  • 52. Elementos, estructura y funcionamiento de un sistema de cómputo (V) Funcionamiento de una computadora (IV) Dispositivos de entrada/salida Los dispositivos de entrada/salida establecen la comunicación entre la computadora y el usuario. Los dispositivos de entrada (teclado, mouse, unidad CD-ROM, unidad DVD, escaner, cámara, etc.) permiten la introducción de datos y programas en la computadora para su procesamiento. Una vez que los datos son leídos de los dispositivos de entrada, éstos son almacenados en la memoria central para su procesamiento. Los dispositivos de salida (pantalla, impresora, etc.) permiten representar/visualizar el resultado de la ejecución de los programas.
  • 53. Elementos, estructura y funcionamiento de un sistema de cómputo (VI) Funcionamiento de una computadora (V) La memoria externa La memoria externa es un medio de almacenamiento permanente tanto para programas como para datos. Entre los dispositivos de almacenamiento (o memorias auxiliares) más comúnmente utilizados se encuentran: • El disco duro • Disquetes magnéticos • Unidad CD-ROM • Unidad DVD • Memoria USB
  • 54. Elementos, estructura y funcionamiento de un sistema de cómputo (VII) El microprocesador El microprocesador es un chip, un circuito integrado electrónico que es utilizado como unidad central de proceso en una computadora. Las funciones del microprocesador son el cálculo y control computacional. Microprocesador Unidad de Memoria central control Unidad lógico- aritmética
  • 55. Lenguajes de programación: niveles, sintaxis y semántica (I) Niveles de lenguajes de programación (I) Lenguajes declarativos Lenguajes de alto nivel Lenguajes ensambladores Lenguajes de máquina
  • 56. Lenguajes de programación: niveles, sintaxis y semántica (II) Niveles de lenguajes de programación (II) Lenguajes de máquina Fue el primer lenguaje utilizado en la programación de computadoras. Constituye la capa más interna en los niveles de lenguaje en la computación. Se podría decir que el lenguaje de máquina es el único que entiende directamente la computadora. Este lenguaje se expresa a través del alfabeto binario, el cual consta solo de los símbolos 0 y 1. El lenguaje de máquina es dependiente de la computadora. Lenguajes ensambladores El lenguaje ensamblador es una representación simbólica del lenguaje de máquina asociado. Es decir, cada computadora tiene un lenguaje ensamblador propio. El lenguaje ensamblador usa palabras nemotécnicas para representar cada instrucción (cadenas de bits) del lenguaje de máquina asociado.
  • 57. Lenguajes de programación: niveles, sintaxis y semántica (III) Niveles de lenguajes de programación (III) Lenguajes de alto nivel Constituyen los lenguajes de programación más utilizados. Son lenguajes independientes de la computadora. Un programa escrito en lenguaje de alto nivel puede ser ejecutado en cualquier computadora, siempre que ésta disponga del traductor o compilador del lenguaje en cuestión. Los programas pueden ser escritos y comprendidos de una forma más sencilla, dada la aproximación de estos lenguajes con el lenguaje natural. Se caracterizan por proporcionar librerías de uso frecuente (entrada/salida, funciones matemáticas, manejo de cadenas, etc.). Ejemplos de estos lenguajes son: Pascal, Fortran, C, C++, Java, Ada, Lisp y Prolog. Lenguajes declarativos Son aquellos lenguajes en los que se indica a la computadora qué es lo que debe hacer, qué es lo que se desea obtener o qué es lo que se está buscando. Son comúnmente lenguajes de órdenes, donde se expresa lo que hay que hacer en lugar de cómo hacerlo. Ejemplos de lenguajes declarativos son SQL y Prolog.
  • 58. Lenguajes de programación: niveles, sintaxis y semántica (IV) Lenguaje de programación = Léxico + Sintaxis + Semántica
  • 59. Lenguajes de programación: niveles, sintaxis y semántica (V) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (I) • Léxico • Sintaxis • Semántica • Gestión de memoria • Manejo de excepciones • Implementación • Pragmática
  • 60. Lenguajes de programación: niveles, sintaxis y semántica (VI) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (II) Léxico Es el conjunto de categorías gramaticales que definen el vocabulario del lenguaje de programación. Comúnmente, el léxico de un lenguaje de programación posee las siguientes categorías gramaticales: • Identifier (nombre de variables, nombre de constantes, nombre de funciones, etc.) • Literal (números enteros y decimales) • Operator (+, -, *, /. etc.) • Separator (; . , etc.) • Keyword (while, read, write, if, for, case, int, real, etc.)
  • 61. Lenguajes de programación: niveles, sintaxis y semántica (VII) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (III) Sintaxis La sintaxis de un lenguaje de programación es la definición gramatical de lo que constituye un programa en dicho lenguaje. La sintaxis se especifica en términos de un conjunto de reglas que rigen la construcción de los programas. La definición de la sintaxis de un lenguaje de programación debe ser clara, concisa y formal. La sintaxis del lenguaje de programación se describe a partir de otros lenguajes, llamados metalenguajes. Uno de los metalenguajes más difundidos es el formalismo BNF (Backus-Naur Form), una gramática libre de contexto.
  • 62. Lenguajes de programación: niveles, sintaxis y semántica (VIII) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (IV) Semántica Se refiere al significado de los programas. Es el conjunto de reglas que permiten determinar el significado de cualquier construcción del lenguaje. La semántica asocia un significado a cada posible construcción gramatical del lenguaje. Gestión de memoria La gestión de memoria se refiere al proceso de asignar valores a la memoria, considerando tanto las características estáticas como dinámicas de dichos valores. Los valores pueden ser asignados a una de tres categorías de memoria: memoria estática, la pila en tiempo de ejecución y el montículo.
  • 63. Lenguajes de programación: niveles, sintaxis y semántica (IX) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (V) Manejo de excepciones Una excepción es una condición detectada por una operación la cual no se puede resolver en el contexto de la operación. Dos procesos básicos se asocian al manejo de excepciones: (1) lanzamiento de la excepción y (2) captura de la excepción. El lanzamiento de una excepción es señalar que se ha producido una excepción, mientras que la captura de la excepción consiste en proporcionar una forma de manipular dicha excepción, transfiriéndose el control del programa al manipulador de la excepción.
  • 64. Lenguajes de programación: niveles, sintaxis y semántica (X) Aspectos a considerar en el diseño e implementación de los lenguajes de programación (VI) Implementación Cómo se ejecutan los programas. Pragmática Se refiere a los aspectos prácticos del uso de los programas.
  • 65. Lenguajes de programación: niveles, sintaxis y semántica (XI) Lenguaje natural Aplicación Lenguaje de programación Compilador/Intérprete Contexto en el Máquina virtual Sistema operativo que se ubican los lenguajes de Lenguaje de máquina programación
  • 66. Lenguajes de programación: traductores de lenguajes (I) Traductores de lenguaje Intérpretes Compiladores Un traductor de lenguaje es un programa que traduce a código de máquina un programa fuente escrito en un lenguaje de alto nivel.
  • 67. Lenguajes de programación: traductores de lenguajes (II) Intérpretes Un intérprete es un traductor que recibe como entrada un programa fuente, lo traduce y lo ejecuta. Un intérprete traduce y ejecuta una instrucción en código fuente, a la vez. Los programas interpretados generalmente son más lentos en ejecución que los programas compilados. Traducción y Programa fuente Intérprete ejecución línea a línea
  • 68. Lenguajes de programación: traductores de lenguajes (III) Compiladores Un compilador traduce un programa fuente escrito en lenguaje de alto nivel al lenguaje de máquina de la computadora. El programa traducido a lenguaje de máquina es almacenado como código objeto. Programa fuente Compilador Programa objeto
  • 69. Lenguajes de programación: traductores de lenguajes (IV) Fases de la compilación de un programa Programa Programa Programa ejecutable fuente Compilador objeto Linker en lenguaje de máquina Analizador Analizador Analizador Generador Optimizador Generador léxico sintáctico semántico de código de código de código intermedio objeto
  • 70. Paradigmas de programación (I) • Programación imperativa • Programación funcional • Programación lógica • Programación orientada a objetos • Programación concurrente • Programación guiada por eventos
  • 71. Paradigmas de programación (II) Programación imperativa El programa se define como una serie de acciones o pasos, cada uno de los cuales recibe una entrada, ejecuta un cálculo, o produce como resultado una salida. La programación imperativa se basa en la asignación de valores, en la utilización de variables para almacenar valores y en la realización de operaciones con estos valores almacenados. Ejemplos de lenguajes de programación imperativa son los lenguajes de alto nivel (Fortran, C, Pascal, etc.) y los lenguajes ensambladores. Programación funcional Los programas están formados por una colección de definiciones de funciones. Las funciones interactúan entre sí utilizando condicionales, recursividad y composición funcional. Ejemplos de lenguajes de programación funcional son Lisp y Scheme.
  • 72. Paradigmas de programación (III) Programación lógica Un lenguaje de programación lógica es un tipo de lenguaje declarativo, en el cual el programa está formado por un conjunto de declaraciones lógicas (predicados, hechos). La ejecución de un programa consiste en aplicar estas declaraciones para obtener todas las soluciones posibles a un problema. El ejemplo clásico de lenguaje de programación lógica es Prolog. Programación orientada a objetos El programa es una colección de objetos que interactúan entre sí a través del paso de mensajes, los cuales comúnmente transforman el estado de los objetos. Ejemplos de lenguajes orientados a objetos son Smalltalk, C+ +, Eiffel y Java.
  • 73. Paradigmas de programación (IV) Programación concurrente La programación se basa en la ejecución simultánea de procesos, ya sea en una misma computadora con uno o varios procesadores, que en un cluster de computadoras. El programa se define como una colección de procesos cooperativos y asíncronos. Ejemplos de lenguajes concurrentes son Linda y Fortran de alto rendimiento. Programación guiada por eventos El programa responde a eventos externos generados en un orden no predecible. Los eventos comúnmente se generan a partir de acciones del usuario en la pantalla (por ejemplo, clics del mouse o pulsaciones de teclas), pudiendo existir también otras fuentes generadoras de eventos. Ejemplos de lenguajes de programación guida por eventos son Visual Basic y Java.
  • 74. Estrategias de construcción de programas (I) Fases de construcción de un programa Descripción y análisis del problema Diseño del algoritmo Codificación del programa Ejecución del programa Validación del programa
  • 75. Estrategias de construcción de programas (II) Programación modular (I) La filosofía subyacente de la programación modular es la descomposición del programa en módulos independientes, cada uno de los cuales ejecuta una única actividad o función. Cada módulo se analiza, se diseña, se codifica y se verifica por separado. El programa es una jerarquía de módulos, con un módulo principal (también llamado programa principal) con una función de controlador. El módulo principal transfiere el control a los módulos inmediatamente subordinados (o subprogramas), de modo que éstos puedan ejecutar sus funciones. Una véz que el módulo subordinado haya completado su tarea, devolverá nuevamente el control al módulo controlador. La descomposición de un módulo en submódulos continúa hasta que se llegue a un punto en que el módulo resultante tenga sólo una tarea específica que ejecutar (lectura, salida de resultados, procesamiento de datos o control de otros módulos).
  • 76. Estrategias de construcción de programas (III) Programación modular (II) Módulo principal Módulo 1 Módulo 2 Módulo 3 ... Módulo N Módulo 11 Módulo 12 Módulo 31 Módulo 32 Módulo N1 Módulo N2 Módulo 311 Módulo 312
  • 77. Estrategias de construcción de programas (IV) Programación modular (III) Ejemplo de descomposición de un programa en módulos: programa para el cálculo de estadísticas descriptivas Cálculo de estadísticas Lectura de Cálculo de Cálculo de medidas de Generación de Generación de datos medidas de tablas gráficos tendencia dispersión central resumen
  • 78. Estrategias de construcción de programas (V) Programación estructurada (programación sin goto) La programación estructurada es un conjunto de técnicas que incorporan: Diseño modular Diseño descendente (top-down) Estructuras de control básico: secuencia, selección e iteración