Diapositivas

Anuncio
Fundamentos de Programación
Unidad 2: ALGORITMOS
2.1 Análisis de problemas

Problema: es la diferencia entre una situación actual y una
situación deseada, ésta última puede surgir como producto
de una necesidad, una deficiencia o una oportunidad de
mejora de los negocios.
Problema = situación actual – situación deseada
¿Dónde se esta?
¿Qué se tiene?
¿Dónde se desea estar?
¿Qué se desea tener?
¿Es realmente necesario hacerlo?
2.1.1 Características de un problema

Definir y entender el problema e Identificar las
siguientes características:
◦ Entrada: información dada del problema.
¿Qué datos se necesitan para resolver el problema?
◦ Proceso: operaciones o cálculos necesarios para encontrar la
solución del problema.
◦ Salida: respuestas dadas por el proceso resultados finales de
los cálculos.
¿Qué información debe proporcionar la solución del
problema?
Resultados
Datos
PROCESO
Entrada
Salidas
Ejemplo: calcular el área de un rectángulo
Análisis del problema:
El cálculo del área del rectángulo se puede
dividir en:
◦ Entrada de datos (altura, base)
◦ Proceso: Cálculo del área (= base x altura)
◦ Salida de datos (base, altura, área)
Area=Base x Altura
Base
Altura
2.1.2 Fases de resolución de un problema
Definición de Problema
 Análisis de los Datos
 Diseño de la Solución (Algoritmo)
 Codificación (Programa)
 Prueba y Depuración
 Documentación
 Mantenimiento

2.1.2.1 Definición del problema

Está dada en sí por el enunciado del
problema, el cual debe ser claro y completo.

Es
importante
que
conozcamos
exactamente "que se desea obtener al
final del proceso" ; mientras esto no se
comprenda no puede pasarse a la siguiente
etapa.
2.1.2.2 Análisis de los datos
Para poder definir con precisión el problema se
requiere que las especificaciones de entrada y
salida sean descritas con detalle ya que esto es un
requisito para lograr una solución eficaz.
 Analizar los siguientes aspectos:
◦ Los resultados esperados.
◦ Los datos de entrada disponibles.
◦ Herramientas a nuestro alcance para manipular
los datos y alcanzar un resultado (fórmulas,
tablas, accesorios diversos).

2.1.2.3 Diseño de la solución (Algoritmo)
Proporcionar los sucesivos pasos a realizar, esto se
refiere a la obtención de un algoritmo que
resuelva adecuadamente el problema.
 En caso de obtenerse varios algoritmos,
seleccionar uno de ellos utilizando criterios que
consideren la eficiencia del mismo.
 Esta etapa incluye la descripción del algoritmo
resultante en un lenguaje natural, de diagrama de
flujo o natural de programación.
 Los problemas complejos se pueden resolver más
eficazmente por la computadora cuando se dividen
en subproblemas que sean más fácil de solucionar.

2.1.2. 4 Codificación (Programa)
Se refiere a la escritura y representación en un
lenguaje de programación de un algoritmo.
 Para transcribir el algoritmo al lenguaje se debe
considerar:

◦ Usar solo el conjunto de palabras e instrucciones que
conforman el lenguaje de programación.
◦ Respetar las reglas de sintaxis y semántica del lenguaje.
2.1.2.5 Prueba y depuración
Se realiza una prueba del programa ejecutable, a
fin de determinar si resuelve o no el problema
planteado en forma satisfactoria.
 Comúnmente se inicia la prueba de un programa
introduciendo datos válidos, inválidos e
incongruentes y observando como reacciona en
cada ocasión.
 La depuración consiste en localizar los errores y
corregirlos en caso de que estos existan.
 Si no existen errores, puede entenderse la
depuración como una etapa de refinamiento en
la que se ajustan detalles para optimizar el
desempeño del programa.

2.1.2.6 Documentación

Debido a que el programa resultante en esta etapa
se encuentra totalmente depurado (sin errores), se
procede a la utilización para resolver problemas
del tipo que dio origen a su diseño.

En vista de que esta utilización no podrá ser
supervisada en todas las ocasiones por el
programador, debe crearse un manual o guía de
operación que indique los pasos a seguir para
utilizar el programa.
2.1.2.7 Mantenimiento
Se refiere a las actualizaciones que deban aplicarse
al programa cuando las circunstancias así lo
requieran.
 Este programa deberá ser susceptible de ser
modificado para adecuarlo a nuevas condiciones
de operación.
 Cualquier actualización o cambio en el programa
deberá reflejarse en su documentación.

2.2 Entidades Primitivas

Tipos de Datos
◦ Numéricos
◦ Lógicos
◦ Carácter y cadena

Operadores y Operandos
◦ Operadores aritméticos
◦ Operadores relacionales
◦ Operadores lógicos

Expresiones y su representación algorítmica
◦
◦
◦
◦
Aritméticas
Relacionales
Lógicas
Carácter y cadena
2.2.1 Tipos de datos1
Un dato se define como la expresión general que describe los
objetos con los cuales opera una computadora. Los datos de
entrada se transforman por el programa, después de las etapas
intermedias, en datos de salida.
 Datos Numéricos: Son aquéllos que representan una cantidad
o valor determinado. Su representación se lleva a cabo en los
formatos ya conocidos (enteros, punto y fracciones decimales si
estas existen). Estos pueden representarse en dos formas
distintas :

◦ Tipo Numérico Entero (integer): Es un conjunto finito de los
números enteros. Los enteros son números completos, no tienen componentes
fraccionarios o decimales y pueden ser negativos y positivos.
Ejemplo: 108 20
50 2015
◦ Tipo Numérico Real (real): Consiste en un subconjunto de los números
reales. Estos números siempre tienen un punto decimal y pueden ser positivos
o negativos. Un número real consiste de un número entero y una parte
decimal.También son representados como punto flotante.
Ejemplo: 3.1416 314.16 x 10-2 31416. x 10-4 78.375
2.2.1 Tipos de datos2

Carácter o Cadenas: Son los datos que representan
información textual (palabras, frases, símbolos, etc). No
representan valor alguno para efectos numéricos. Pueden
distinguirse porque son delimitados por apóstrofes o
comillas. Se clasifica en dos categorías :
◦ Datos tipo carácter (char) : Es un conjunto finito y ordenado de
caracteres que la computadora reconoce. Un dato de este tipo
contiene solo un carácter. Utiliza tablas de código como el ASCII
para su representación.Reconoce los siguientes caracteres :
 Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)
 Caracteres Numéricos (0,1,2,…9)
 Caracteres Especiales (+, -, *, /, ^, . , ;, <, >, $, …….)
◦ Datos tipo Cadena (string): Es un sucesión de caracteres que se
encuentran delimitados por una comilla (apóstrofe) o dobles
comillas, según el tipo de lenguaje de programación. La longitud de
una cadena de caracteres es el número de ellos comprendidos entre
los separadores o delimitadores. Ejemplos :
„Hola Mundo‟
‟16 de septiembre, viva bicentenario‟
2.2.1 Tipos de datos3


Lógicos: también se le denomina Booleano, es aquél dato que solo
puede tomar uno de dos valores : Falso y verdadero. Se utiliza para
representar las alternativas (si/no) a determinadas condiciones. Por
ejemplo, cuando se pide si un valor entero sea primo, la respuesta será
verdadera o falsa, según sea.
Tipos Enumerados:
◦ SUBRANGO : Son aquéllos en los que se especifica con precisión el
intervalo de valores válidos para un dato. Ejemplos:
0..100
(son enumerativos de tipo entero)
'A'..'Z'
(son enumerativos de tipo cadena)
Los Reales no son válidos para crear enumerativos, ya que su intervalo no
está definido.
◦ ENUMERATIVOS : Son aquéllos en los que se definen individualmente
los valores para un dato. Ejemplos:
(0,25,40,52)
Siempre deben ponerse entre paréntesis.
◦ DEFINIDOS POR EL USUARIO : Son aquéllos que el programador
crea para satisfacer las necesidades del programa en diseño.
2.2.2 Identificador, constantes y variables
Un identificador es un nombre que se le da un
elemento de programa, ya sea una constante, variable,
un procedimiento o una función.
 Una Constante es aquélla que no cambia de valor
durante la ejecución de un programa (o comprobación
de un algoritmo).
 Las Variables son aquéllas que pueden modificar su
valor durante la ejecución de un programa.
 El identificador que se le da a una variable o constante
suele representar un espacio de memoria donde será
almacenado su valor. Lo anterior se hace con la finalidad
de facilitar la utilización de la memoria, en lugar de
utilizar directamente direcciones de memoria.

2.2.3 Operaciones primitivas
Operando: puede ser una constante o variable
sobre la cual se realiza una determinada operación
u acción.
 Operador: es el símbolo que determina el tipo
de operación o relación que habrá de establecerse
entre los operandos para alcanzar un resultado.


Los operadores se clasifican en tres grupos:
 Aritméticos.
 Relacionales.
 Lógicos.
2.2.3.1 Operadores aritméticos

Son aquéllos que permiten la realización de cálculos
aritméticos. Utilizan operandos numéricos y proporcionan
resultados numéricos.
Operador
Operación
^
Exponenciación
*
Multiplicación
/
División
+
Suma
-
Resta
DIV
División entera (cociente)
MOD
Modulo o residuo de División
2.2.3.2 Operadores relacionales

Permiten realizar comparaciones de valores de tipo
numérico o carácter. Estos operadores sirven para
expresar las condiciones en los algoritmos. Proporcionan
resultados lógicos.
Operador
Significado
<
Menor que
>
Mayor que
<=
Menor igual
>=
Mayor igual
=
igual
<>
Diferente
2.2.3.3 Operadores lógicos

Son aquéllos que permiten la combinación de condiciones
para formar una sola expresión lógica. Utilizan operandos
lógicos y proporcionan resultados lógicos también.
Operador
Significado
Obtiene
verdadero si
NOT
Negación (No)
El operando es
falso
AND
Conjunción (Y)
Ambos operandos
son verdaderos
OR
Disyunción (O)
Al menos un
operando es
verdadero
XOR
Disyunción
Exclusiva
(O/SOLO)
Solo uno de los
operandos son
verdadero
2.2.3.3.1 Tabla de verdad
X
Y
X
AND
Y
X
OR
Y
X
XOR
Y
NOT(X)
NOT(Y)
F
F
F
F
F
V
V
F
V
F
V
V
V
F
V
F
F
V
V
F
V
V
V
V
V
F
F
F
2.2.3. 4 Prioridad de Operadores
Determina el orden en que habrán de realizarse las operaciones
en una expresión determinada. Para obtener la prioridad se
deben conocer las siguientes reglas:
 Las operaciones que están encerradas entre paréntesis se
evalúan primero. Si existen diferentes paréntesis anidados
(interiores unos a otros), las expresiones más internas se
evalúan primero.
 Las operaciones aritméticas dentro de una expresión suelen
seguir el siguiente orden de prioridad:

Operador
Prioridad
^
Exponenciación (ALTA)
*,/,DIV,MOD
multiplicación, división,
cociente , residuo
+,-
suma, resta
Relacionales
Baja
Lógicos

En caso de coincidir varios operadores de igual prioridad en una
expresión o subexpresión encerrada entre paréntesis, el orden
de prioridad en este caso es de izquierda a derecha.
2.2.3. 5 Asignación



La operación de asignación es el modo de darle valores a
una variable. La operación de asignación se representa por
el símbolo u operador :=,
.
A fin de manejar datos por medio de variables, estos
pueden recibir valores determinados. El tipo de los valores
que pueden recibir dependen de la declaración previa de
tales variables.
En una asignación se resuelve, primeramente la expresión
(al lado derecho del símbolo de asignación) y se asigna el
resultado en la variable. El formato general de asignación
es:
Nom_variable Expresión
Donde Expresión puede ser una variable o constante, operación,
función.

Ejemplos: A:=10*5 , B:=(5<10),
palabra:=“HOLA”
2.2.3. 6 Entrada y Salida de Información
Los cálculos que realizan las computadoras requieren para
ser útiles la Entrada de los datos necesarios para ejecutar
las operaciones que posteriormente se convertirán en
resultados, es decir, Salida.
 Las operaciones de entrada permiten leer determinados
valores y asignarlos a determinadas variables. Esta entrada
se conoce como operación de Lectura (read). Los datos
de entrada se introducen al procesador mediante
dispositivos de entrada (teclado, unidades de disco, etc).
 La salida puede aparecer en un dispositivo de salida
(pantalla, impresora, etc). La operación de salida se
denomina escritura (write).
 En la escritura de algoritmos las acciones de lectura y
escritura se representan por los formatos siguientes:
leer ( Nom_variable )
escribir (lista de variables de salida)

2.2.4 Expresiones
Las expresiones son combinaciones de constantes,
variables, símbolos de operadores, paréntesis y nombres de
funciones especiales.
 Cada expresión toma un valor que se determina tomando
los valores de las variables y constantes implicadas y la
ejecución de las operaciones indicadas.
 Una expresión consta de operadores y operandos.
 Según sea el tipo de objetos que manipulan, las
expresiones se clasifican en : aritméticas, relacionales,
lógicas y carácter o cadena.
 El resultado de la expresión numérica es de tipo numérico ;
el resultado de una expresión relacional y de una expresión
lógica es de tipo lógico ; el resultado de una expresión
carácter es de tipo carácter.

2.3 Técnicas de Diseño



Con el objeto de facilitar el diseño de
algoritmos y la organización de los diversos
elementos de los que se componen se utilizan
algunas técnicas que muestran una metodología
a seguir para resolver los problemas.
Estas técnicas hacen que los programas sean
más fáciles de escribir, verificar, leer y mantener.
Algunas de las técnicas más conocidas son :
 Top Down (diseño descendente)
 Botton Up
 Warnier Orr
2.3.1.1 Top Down




Es una técnica para diseñar que consiste en tomar el
problema en forma inicial como una cuestión global y
descomponerlo sucesivamente en problemas más pequeños y
por lo tanto, de solución más sencilla.
La descomposición del problema original (y de las etapas
subsecuentes), puede detenerse cuando los problemas
resultantes alcanzan un nivel de detalle que el programador o
analista pueden implementar fácilmente.
El problema se descompone en etapas o estructuras
jerárquicas, de modo que se puede considerar cada estructura
como dos puntos de vista : ¿lo que hace?, y ¿cómo lo hace ?.
Si se considera un nivel n de refinamiento, las estructuras se
consideran de la siguiente forma :
 nivel n : Vista desde el exterior. ¿lo que hace ?
 nivel n+1 : Vista desde el interior. ¿cómo lo hace ?
2.3.1.2 Ejemplo Top Down
2.3.2 Botton Up




Esta técnica consiste en partir de los detalles más
precisos del algoritmo completando sucesivamente
módulos de mayor complejidad, se recomienda cuando
ya se cuenta con experiencia y ya se sabe lo que se va
a hacer.
Conforme se va alcanzando el desarrollo de módulos
más grandes se plantea como objetivo final la
resolución global del problema.
Este método es el inverso del anterior y es
recomendable cuando se tiene un modelo a seguir o
se cuenta con amplia experiencia en la resolución de
problemas semejantes.
La técnica de Botton Up es frecuentemente utilizada
para la realización de pruebas a sistemas ya concluidos.
2.3.3.1 Warnier Orr
Es una técnica que utiliza una representación
semejante a la de cuadros sinópticos para mostrar
el funcionamiento y organización de los elementos
que conforman el algoritmo.
 Básicamente, utiliza una notación de llaves para
organizar los módulos y se auxilia en la siguiente
simbología para indicar operaciones de control.

 +
 +
 (x,y)

OR (uno, otro o varios)
XOR (uno u otro, solo uno)
puede hacerse tantas veces desde x hasta y
Los diagramas Warnier Orr se leen de izquierda a
derecha y de arriba hacia abajo.
2.3.3.2 Ejemplo Warnier Orr
2.4 Representación de Algoritmos
Descripción narrada
 Diagrama de flujo (representación gráfica)
 Pseudocódigo
 Diagramas estructurados(N-S)

2.4.1 Descripción narrada
Utiliza el lenguaje natural para describir la
secuencia de pasos a seguir para dar
solución a un problema especifico.
 Es muy utilizada para describir algoritmos
cotidianos como recetas de cocina,
instructivos de instalación, etc.
 Se debe de emplear una clara redacción con
énfasis en los detalles y sin ambigüedades.
 La secuencia de pasos se debe de enumerar
de acuerdo al orden de ejecución del
algoritmo.

2.4.2 Diagrama de flujo
Se basan en la utilización de diversos
símbolos para representar operaciones
específicas.
 Se les llama diagramas de flujo porque los
símbolos utilizados se conectan por medio
de flechas para indicar la secuencia de
operación.
 La simbología utilizada para la elaboración
de diagramas de flujo es variable y debe
ajustarse a un patrón definido previamente.

2.4.2.1 Simbología de Diagrama de flujo1
Símbolo
Función
Terminal : representa el inicio o fin de un programa,
puede también representar una parada o interrupción
programada que sea necesario realizar en un programa
Entrada/Salida de datos
Proceso: cualquier tipo de operación que pueda originar
cambio de valor, formato o posición de la información
almacenada en memoria, operaciones aritméticas.
Descisión: indica operaciones lógicas o de comparación
entre datos.
Conector: sirve para conectar partes de un diagrama en
una misma hoja.
Indicador de dirección o línea de flujo: indica el sentido de
ejecución de las operaciones.
Línea conectora: sirve de unión entre 2 símbolos
2.4.2.1 Simbología de Diagrama de flujo2
Símbolo
Función
Conector: conexión entre 2 puntos situados en páginas
diferentes.
Llamada a subrutina (proceso predeterminado) o a un
modulo independiente del programa.
Pantalla : se puede utilizar en lugar del símbolo de salida.
Impresora : se puede utilizar en lugar del símbolo de
salida.
Teclado : se puede utilizar en lugar del símbolo de
entrada.
2.4.2.2 Representación de estructuras de
control en diagrama de flujo
SECUENCIA
SIMPLE
SELECCION
NO
DOBLE
NO
Condición
Acción 1
SI
Condición
SI
Accion(es)
Accion(es)
Accion(es)
Acción 2
MULTIPLE
Selector
Acción n
Valor 1
Accion(es)
Valor 2
Accion(es)
Valor 3
Accion(es)
Valor N
…
Accion(es)
2.4.2.2 Representación de estructuras de
control de repetición diagrama de flujo
Condicionada al Inicio (While)
Condición
Condicionada al Final (Repeat-Until)
NO
Accion(es)
SI
NO
Condición
Accion(es)
PREDEFINIDA
SI
i=Val. Inicial
NO
I<=Val. Final
i=i+1
SI
Accion(es)
2.4.3 Pseudocódigo
Es un lenguaje de especificación de algoritmos. El uso de tal
lenguaje hace el paso de codificación final (esto es, la
traducción a un lenguaje de programación) relativamente
fácil.
 La ventaja del pseudocódigo es que en su uso en la
planificación de un programa, el programador se puede
concentrar en la lógica y en las estructuras de control y no
preocuparse de las reglas de un lenguaje específico.
 Es también fácil modificar si se descubren errores o
anomalías en la lógica del programa.
 utiliza para representar las acciones sucesivas palabras en
un lenguaje natural (similares a sus homónimos en los
lenguajes de programación), tales como inicio, fin, repite –
hasta, si –entonces-sino, etc.

2.4.3.1Palabras usadas en Pseudocódigo
Secuencia
Inicio
acción1
acción2
:
acción n
Fin
Decisión Simple
si condición entonces
acción1
acción2
:
acción n
Doble
si condición entonces
acción(es)
en caso contrario
acción(es)
Múltiple
casos selector de
valor1 : acción(es)
valor2 : acción(es)
:
valor n : acción(es)
2.4.3.1Palabras Iteración en Pseudocódigo
Predefinida
para var. Entera inicial hasta final hacer
acción(es)
Condicional al inicio
Haz mientras (condición)
acción(es)
Condicional al final
Repetir
acción(es)
Hasta que condición
2.4.4 Diagramas Estructurados
(nassi-schneiderman)
El diagrama N-S de Nassi-Schneiderman, también
conocido como diagrama de Caja, es como un
diagrama de flujo en el que se omiten las flechas de
unión y las cajas son contiguas.
 Las acciones sucesivas se escriben en cajas
sucesivas, y, como en los diagramas de flujo, se
pueden escribir diferentes acciones en una caja.
 Los Diagramas Estructurados, son una técnica que
permite formular algoritmos mediante una
representación geométrica y de asignación
de espacios de un bloque específico.

2.4.4.1 Estructuras de control diagramas N-S
Secuencia
Selección Simple
Selección Doble
Selección Múltiple
2.4.4.1 Estructuras de control de repetición
diagramas N-S
Condicionada al inicio (While)
Pre-definida
Condicionada al final (Repeat-Until)
2.4.4.2 Ejemplos diagrama (N-S)
Descargar