Desarrolla Software Utilizando Programacion Estructurada
Desarrolla Software Utilizando Programacion Estructurada
Desarrolla Software Utilizando Programacion Estructurada
Estructurada
Parte I
• Concepto de algoritmo
• Propiedades de un algoritmo
• El rol del algoritmo en la resolución de
problemas
Concepto de algoritmo (I)
Algoritmo
Acción o Acción o
procedimiento procedimiento
Un primer ejemplo de algoritmo
1. Inicio
2. Leer base y altura (b, a)
3. ar ← b*a
4. pe ← 2*(b + a)
5. Escribir “Área del rectángulo: ”, ar
6. Escribir “Perímetro del rectángulo: ”, pe
7. Fin
Características de los algoritmos (I)
• Entrada
• Proceso
• Salida
Computadora con el
Código en compilador de
Fortran Fortran
El rol del algoritmo en la resolución de
problemas (I)
Descripción y Programa en un
Diseño del
análisis del lenguaje de
algoritmo
problema programación
Ejemplos de algoritmos (I.a.)
Datos de entrada:
• Total de deportistas (N)
• Sexo de la persona (S)
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:
1. Inicio
2. Inicializar en cero el total de personas del sexo masculino: CM ←
0
3. Inicializar en cero el total de personas del sexo femenino: CF ← 0
4. Inicializar en cero el total de personas procesadas: TP ← 0
5. Leer total de deportistas (N)
6. MIENTRAS TP < de
6.1 Leer sexo N la persona (S)
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):
7. Calcular porcentaje de hombres en el grupo: PM ← CM/N*100
8. Calcular porcentaje de mujeres en el grupo: PF ← CF/N*100
9. Escribir “Porcentaje de hombres en el grupo: ”, PM
10. Escribir “Porcentaje de mujeres en el grupo: ”, PF
11. Fin
Diseño del
algoritmo
Diseño Representación
descendente Refinamiento gráfica
Diseño de algoritmos (II)
Problema
Subproblema Subproblema
Diseño de algoritmos (IV)
U P2 P
X Y
P1 P4
V Q
P3
V R S Q
P31 P32 P33
Diseño de algoritmos (V)
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)
Especificación
Algoritmo en Programa
pseudocódigo
Diseño de algoritmos (XII)
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)
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)
Cuando se usa el
pseudocódigo como
ME ← SE/N lenguaje de
MP ← SP/N especificación de un
algoritmo, el
write “La edad promedio es: ”, ME
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)
5. FIN-MIENTRAS
Calcular la media de la edad: ME <- SE/N
6. Calcular la media del peso: MP <- SP/N SP <- 0
7. Escribir “La edad promedio es: ”, ME
8. Escribir “El peso promedio es: ”, MP 1
9. 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
5. FIN-MIENTRAS
Calcular la media de la edad: ME <- SE/N
6. Calcular la media del peso: MP <- SP/N MP <- SP/N
7. Escribir “La edad promedio es: ”, ME
Escribir
8. Escribir “El peso promedio es: ”, MP ME, MP
9. Fin
Fin
Diseño de algoritmos (XIX)
Escribir “área: ”, ar
Escribir “perímetro: ”, pe
Fin
Diseño de algoritmos (XXIV)
si_no
<acciones> <acciones>
<acción 2>
selector
Estructura
de control otro 1 2 3 ... n
condicional
CASE
Diseño de algoritmos (XXV)
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)
Mientras (condición)
HASTA (condición)
Diseño de algoritmos (XXVII)
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)
CPU
Unidad Central de Proceso
ALU
Unidad
lógico-aritmética
Dispositivos CU Dispositivos
de entrada Unidad de control de salida
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)
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)
Lenguajes declarativos
Lenguajes
ensambladores
Lenguajes de máquina
Lenguajes de programación: niveles,
sintaxis y semántica (II)
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
Traductores de
lenguaje
Intérpretes Compiladores
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
Programa Programa ejecutable
fuente Compilador objeto Linker
en lenguaje
de máquina
• 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 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.
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
Cálculo de
estadísticas
Diseño modular