unidad: I algoritmos y programas
Algoritmo
es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y
finitas que permite llevar a cabo una actividad mediante pasos sucesivos que
no generen dudas a quien deba hacer dicha actividad. Dados un estado
inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final
y se obtiene una solución. Los algoritmos son el objeto de estudio de la
algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para resolver
problemas. Algunos ejemplos son los manuales de usuario, que muestran
algoritmos para usar un aparato, o las instrucciones que recibe un trabajador
por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de
multiplicación, para calcular el producto, el algoritmo de la división para
calcular el cociente de dos números, el algoritmo de Euclides para obtener el
máximo común divisor de dos enteros positivos, o el método de Gauss para
resolver un sistema de ecuaciones lineales.
En términos de programación, un algoritmo es una secuencia de pasos
lógicos que permiten solucionar un problema.
programa
Un programa informático o programa de computadora es una secuencia de
instrucciones, escritas para realizar una tarea específica en una
computadora. Este dispositivo requiere programas para funcionar, por lo
general, ejecutando las instrucciones del programa en un procesador central.
Lenguaje Algorítmico:
es una serie de símbolos y reglas que se utilizan para describir de manera
explícita un proceso, que servirán de apoyo para describir las soluciones que
aquí se plantean. Teniendo en cuenta la forma en que describen el proceso,
existen dos tipos de lenguajes algorítmicos:
Gráficos: Es la representación gráfica de las operaciones que realiza un
algoritmo (diagrama de flujo).
No Gráficos: Representa en forma descriptiva las operaciones que debe
realizar un algoritmo (pseudocódigo)
Lenguaje de programación:
es un lenguaje que puede ser utilizado para controlar el comportamiento de
una máquina, particularmente una computadora. Consiste en un conjunto de
reglas sintácticas y semánticas que definen su estructura y el significado de
sus elementos, respectivamente. Aunque muchas veces se usa lenguaje de
programación y lenguaje informático como si fuesen sinónimos, no tiene por
qué ser así, ya que los lenguajes informáticos engloban a los lenguajes de
programación y a otros más, como, por ejemplo, el HTML.
Partes de un algoritmo
ENTRADA: Corresponde al insumo, a los datos necesarios que requiere el
proceso para ofrecer los resultados esperados.
PROCESO: Pasos necesarios para obtener la solución del problema o la
situación planteada.
SALIDA: Resultados arrojados por el proceso como solución.
caracteristicas y Elementos para la construcción de un algoritmo
Las características fundamentales que debe cumplir un algoritmo son:
PRECISIÓN:Indica el orden de realización de cada paso dentro del proceso.
DEFINICIÓN: Indica la exactitud y consistencia de los pasos descritos en el
proceso, si el algoritmo se prueba dos veces, en estas dos pruebas, se debe
obtener el mismo resultado.
FINITUD: Indica el número razonable de pasos, los cuales deben conllevar a
la finalización del proceso y producir un resultado en un tiempo finito. Al
diseñar un algoritmo se debe tener presente las características de precisión,
definición y finitud.
Elementos para la construcción de un algoritmo
Instrucción o sentencia: dependiendo del origen del material instruccional se
habla de instrucción o sentencia; ésta, define una acción o un mandato que se
debe realizar, esa acción o mandato se representa a través de un comando o
lo que es lo mismo palabras reservadas de un lenguaje de programación en
particular. Una instrucción esta compuesta por uno o más comandos
(acción), datos, símbolos, variables o constantes y expresiones, que en
conjunto representan una instrucción o sentencia.
Comandos o palabras reservadas: todos los lenguajes, naturales o
computacionales, tienen palabras que denotan una acción. Los comandos no
son más que acciones que debe interpretar y ejecutar el computador. Cada
comando conserva una sintaxis determinada, es decir la forma de utilizarlo.
Los lenguajes computacionales tienen en su repertorio comandos dirigidos al
procesamiento de archivos y datos, entre ellos: Leer, Calcular, Asignar,
Clasificar, Imprimir.
Datos: los datos son símbolos que se convierten en condiciones, hechos,
situaciones o valores. Un dato puede significar un número, una letra, un
signo ortográfico o cualquier símbolo que represente una cantidad, una
medida, una palabra o una descripción. La importancia de los datos está en
su capacidad de asociarse dentro de un contexto para convertirse en
información. Es decir, por si mismos los datos no tienen capacidad de
comunicar un significado y por tanto no pueden afectar el comportamiento de
quien los recibe. Para ser útiles, los datos deben convertirse en información
que ofrezca un significado, conocimiento, ideas o conclusiones.
formas de representar un algoritmo
Diagrama de flujo:
Los diagramas de flujo son descripciones gráficas de algoritmos; usan
símbolos conectados con flechas para indicar la secuencia de instrucciones y
están regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos pequeños, ya
que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad
de lectura son usados como introducción a los algoritmos, descripción de un
lenguaje y descripción de procesos a personas ajenas a la computación.
Pseudocodigo:
es una descripción de alto nivel de un algoritmo que emplea una mezcla de
lenguaje natural con algunas convenciones sintácticas propias de lenguajes
de programación, como asignaciones, ciclos y condicionales, aunque no está
regido por ningún estándar. Es utilizado para describir algoritmos en libros y
publicaciones científicas, y como producto intermedio durante el desarrollo
de un algoritmo, como los diagramas de flujo, aunque presentan una ventaja
importante sobre estos, y es que los algoritmos descritos en pseudocódigo
requieren menos espacio para representar instrucciones complejas.
El pseudocódigo está pensado para facilitar a las personas el entendimiento
de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son
necesarios en una implementación. Programadores diferentes suelen utilizar
convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes
de programación concretos. Sin embargo, el pseudocódigo, en general, es
comprensible sin necesidad de conocer o utilizar un entorno de programación
específico, y es a la vez suficientemente estructurado para que su
implementación se pueda hacer directamente a partir de él.
lenguaje natural:
Son aquellas lenguas que han sido generadas espontáneamente en un grupo
de hablantes con propósito de comunicarse, a diferencia de otras lenguas,
como puedan ser una lengua construida, los lenguajes de programación o los
lenguajes formales usados en el estudio de la lógica formal, especialmente la
lógica matemática.
Traza de un algoritmo (Corrida en frió):
La traza de un Algoritmo se puede definir como la ejecución manual de
forma secuencial de las sentencias que lo componen. Así, la traza del
siguiente algoritmo es el valor que van adoptando las variables a medida que
se va ejecutando un programa. La función principal que posee realizar la
traza de una algoritmo es la de comprobar que éste funciona correctamente o
para realizar la etapa de depuración en la que se intenta corregir errores,
simplificar el algoritmo al máximo e incrementar su eficacia y velocidad.
El lenguaje máquina
es el único lenguaje que puede ejecutar una computadora, es específico en cada
arquitectura, es un código que es interpretado directamente por el microprocesador,
está compuesto por un conjunto de instrucciones ejecutadas en secuencia que
representan acciones que la máquina podrá tomar.
El lenguaje ensamblador
o assembler (en inglés assembly language y la abreviación asm), es un lenguaje de
programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan
instrucciones básicas para los computadores, microprocesadores, microcontroladores y
otros circuitos integrados programables. Implementa una representación simbólica de
los códigos de máquina binarios y otras constantes necesarias para programar una
arquitectura de procesador y constituye la representación más directa del código
máquina específico para cada arquitectura legible por un programador
diagrama de actividades (UML)
muestra un proceso de negocio o un proceso de software como un flujo de trabajo a
través de una serie de acciones. Las personas, los componentes de software o los
equipos pueden realizar estas acciones.
Puede usar un diagrama de actividades para describir procesos de varios tipos, como
los ejemplos siguientes:
Un proceso de negocio o un flujo de trabajo entre los usuarios y el sistema.
Los pasos que se realizan en un caso de uso.
Un protocolo de software, es decir, las secuencias de interacciones entre componentes
permitidas.
Un algoritmo de software.
C++ es un lenguaje de programación diseñado a mediados de los años 1980 por
Bjarne Stroustrup. La intención de su creación fue el extender al lenguaje de
programación C mecanismos que permiten la manipulación de objetos. En ese sentido,
desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje
híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumaron a
los paradigmas de programación estructurada y programación orientada a objetos. Por
esto se suele decir que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la
mayoría de los fabricantes de compiladores más modernos. Existen también algunos
intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder
crear nuevos tipos que se comporten como tipos fundamentales.
El nombre "C++" fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje
fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el
nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se
refiere a que C++ es una extensión de C.
Python
Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una
sintaxis que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a
objetos, programación imperativa y, en menor medida, programación funcional. Es un
lenguaje interpretado, usa tipado dinámico y es multiplataforma.
unidad: II estandares de calidad en el diseño de algoritmos y construccion de
programas
Todos los tipos de software a ser desarrollados requieren un control de
calidad, sea software de sistemas (Son programas que sirven a otros
programas en el trabajo de desarrollo como compiladores, editores),
ingeniería y científico (es software queposee un amplio manejo numérico
usado en biología, astronomía, CAD), computación personal (software
comercial de uso local como procesadores de texto,hojas electrónicas,
navegadores web, calendarios, agendas, recetarios), inteligencia artificial
(software de procesamiento especial sistemas expertos, sistemas basados en el
conocimiento, algoritmos no numéricos).
Hoy dia hay muchos programadores pero no todos desarrollan sus programas
con calidad, a este tipo de productos se les llama software basura, algunos ni
cuentan con un respaldo del programador, o simplementeno tiene un soporte
de calidad que se adapte al usuario. Por eso se presentan dos delos más
valiosos controles de calidad, como son la eficiencia y la eficacia. La
ingeniería del software pretende utilizar los recursos computacionales de tal
manera que se produzcan soluciones eficientes y eficaces a los problemas
informáticos, el éxito de un proyecto.
Construcción de un programa
El desarrollo de software es un proceso por el cual, dado un problema, se
encuentra un programa (o un conjunto de programas) que lo resuelva
eficientemente.
Análisis del Problema
Una vez que se ha comprendido lo que se desea de la computadora, es
necesario definir: Los datos de [Link]ál es la información que se desea
producir (salida), los métodos y fórmulas que se necesitan para procesar los
datos. Una recomendación muy practica es el que nos pongamos en el lugar
de la computadora y analicemos que es lo que necesitamos que nos ordenen y
en que secuencia para producir los resultados esperados.
Introducción a los estándares de calidad
En algunos momento se definió a la Calidad como: Lo que se hace bien y a la
primera,concepto erróneo ya que, no se puede determinar la calidad de un
servicio, producto oproceso, tomando en cuenta solo el aspecto de desarrollo,
olvidando por completo alproceso de depuración que inherentemente
involucra una serie de corrección deerrores, por lo que, la definición de
calidad esta mas allá de la observación de unaparte de dicho proceso. La
mayoría de los clientes busca calidad al mejor precio, sinembargo, lo que
puede ser excelente para algunos, no lo es para otros. Cuando
unindividuo adquiere un producto o servicio, lo hace para satisfacer una
necesidad, perosiempre espera que la nueva adquisición funcione como
lo esperado, o al menoscomo se lo prometieron en el anuncio publicitario.
Muchas veces la calidad se paga, justificando de esta forma el dicho de que
lo barato sale caro.El significado de calidad puede adquirir múltiples
interpretaciones, ya que tododependerá del nivel de satisfacción o
conformidad del cliente. Sin embargo, la calidades el resultado de un esfuerzo
arduo, se trabaja de forma eficaz para poder satisfacerel deseo del
consumidor. Dependiendo de la forma en que un producto o servicio
seaaceptado o rechazado por los clientes, podremos decir si éste es bueno o
malo. Muchas veces el nivel de calidad se mide de acuerdo a la reacción y
preferencias delcliente. Desde el mismo momento en que éste llega al
establecimiento comercial, sabeexactamente qué va a comprar y dónde
ubicarlo, va directo al lugar donde seencuentra el producto de su preferencia.
En ocasiones, no encontrará lo que estábuscando y por tanto se decidirá por
otro producto de mayor o menor precio, sin embargo, cuando su nivel de
preferencia se afinca en una determinada marca, el cliente prefiere seguir
buscando en otros establecimientos en vez de resolverse con un producto
sustitutivo.
Formas y Técnicas de documentar un
algoritmo y un programa
Son comentarios, etiquetas de texto, que facilitan la comprensión del
programa
Documentación
La documentación del programa es fundamental para diseñadores y
usuarios .En pseudocódigo solo se documentarán los algoritmos
internamente, esto es, se efectuarán comentarios de ciertas acciones o grupos
de acciones para permitir al diseñador o al equipo del diseño releer el
algoritmo con facilidad. Para documentar internamente un algoritmo en
pseudocódigo se empleará la doble barra () y a continuación el texto o la
frase explicativa .Al ejecutar el algoritmo, este texto a la derecha de la debe
ser ignorado, pues no constituye a una acción algorítmica.
Documentar el código de un programa es añadir suficiente información como
para explicar lo que hace, punto por punto, de forma que no sólo los
ordenadores sepan qué hacer, sino que además los humanos entiendan qué
están haciendo y por qué. Porque entre lo que tiene que hacer un programa y
cómo lo hace hay una distancia impresionante: todas las horas que el
programador ha dedicado a pergeñar una
solución y escribirla en el lenguaje que corresponda para que el ordenador la
ejecute ciegamente .Documentar un programa no es sólo un acto de buen
hacer del programador por aquello de dejar la obra rematada. Es además
una necesidad que sólo se aprecia en su debida magnitud cuando hay errores
que reparar o hay que extender el programa con nuevas capacidades o
adaptarlo a un nuevo escenario. Hay dos reglas que no se deben olvidar
nunca:
Todos los programas tienen errores y descubrirlos sólo es cuestión de tiempo
y de que el programa tenga éxito y se utilice frecuentemente
Todos los programas sufren modificaciones a lo largo de su vida, al menos
todos aquellos que tienen éxito.
Por una u otra razón, todo programa que tenga éxito será modificado en el
futuro, bien por el programador original, bien por otro programador que le
sustituya. Pensando en esta revisión de código es por lo que es importante
que el programa se entienda: para poder repararlo y modificarlo.
Código ASCIL
Fue creado en 1963 por el Comité Estadounidense de Estándares o "ASA", este
organismo cambio su nombre en 1969 por "Instituto Estadounidense de Estándares
Nacionales" o "ANSI" como se lo conoce desde entonces.
Este código nació a partir de reordenar y expandir el conjunto de símbolos y caracteres
ya utilizados en aquel momento en telegrafía por la compañía Bell. En un primer
momento solo incluía letras mayúsculas y números, pero en 1967 se agregaron las
letras minúsculas y algunos caracteres de control, formando así lo que se conoce como
US-ASCII, es decir los caracteres del 0 al 127.
Así con este conjunto de solo 128 caracteres fue publicado en 1967 como estándar,
conteniendo todos lo necesario para escribir en idioma ingles.
ISO/IEC 9126:
ISO 9126 es un estándar internacional para la evaluación de la calidad del software.
unidad III datos y entidades primitivas
Concepto y diferencia entre dato e información
El dato se refiere a la representación simbólica de una entidad, por ejemplo letras
del alfabeto, números, puntos, dibujos, etc.
Estos datos por sí solos no tienen valor semántico, es decir no tienen sentido, por
ende no tienen la capacidad de transmitir ningún mensaje ni mucho menos afecta a
quien lo recibe. Pero si se le procesa apropiadamente, este provee información
importante ayudando en la toma de decisiones.
Ahora sigamos con la definición de información:
La información se refiere al conjunto de datos, que están organizados para
transmitir un significado, con el propósito de reducir la incertidumbre e
incrementar el conocimiento.
La información está constituida por un grupo de datos supervisados y ordenados,
los cuales ayudan a construir un mensaje basándose en determinado tema. La
Información favorece a la resolución de problemas puesto que permite una
adecuada toma de decisiones.
Diferencias entre dato e información
Dato
Representación Simbólica
No tienen sentido semántico
No transmiten Mensaje
Describen situaciones, hechos
Información
Conjunto de Datos procesados
Conjunto de Datos organizados
Tienen un significado
Transmiten un mensaje
Permite la toma de decisiones
Favorece a la resolución de problemas
Incrementa el conocimiento
Tipos de datos
Un tipo de datos es la propiedad de un valor que determina su dominio (qué valores puede
tomar), qué operaciones se le pueden aplicar y cómo es representado internamente por el
computador.
Todos los valores que aparecen en un programa tienen un tipo.
A continuación revisaremos los tipos de datos elementales de Python. Además de éstos, existen
muchos otros, y más adelante aprenderemos a crear nuestros propios tipos de datos.
Números enteros
El tipo int (del inglés integer, que significa «entero») permite representar números enteros.
Los valores que puede tomar un int son todos los números enteros: ... -3, -2, -1, 0, 1, 2, 3, ...
Los números enteros literales se escriben con un signo opcional seguido por una secuencia de
dígitos:
1570 +4591 -12
Números reales
El tipo float permite representar números reales.
El nombre float viene del término punto flotante, que es la manera en que el computador
representa internamente los números reales.
Hay que tener mucho cuidado, porque los números reales no se pueden representar de manera
exacta en un computador. Por ejemplo, el número decimal 0.7 es representado internamente
por el computador mediante la aproximación 0.69999999999999996. Todas las operaciones
entre valores float son aproximaciones. Esto puede conducir a resultados algo sorpresivos:
>>> 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7
0.9999999999999998
Los números reales literales se escriben separando la parte entera de la decimal con un punto.
Las partes entera y decimal pueden ser omitidas si alguna de ellas es cero:
>>> 881.9843000 881.9843 >>> -3.14159 -3.14159 >>> 1024. 1024.0 >>> .22 0.22
Otra representación es la notación científica, en la que se escribe un factor y una potencia de
diez separados por una letra e. Por ejemplo:
>>> -2.45E4 -24500.0 >>> 7e-2 0.07 >>> 6.02e23 6.02e+23 >>> 9.1094E-31 9.1094e-31
Los dos últimos valores del ejemplo son iguales, respectivamente, a 6.02×10236.02×1023 (la
constante de Avogadro) y 9.1094×10−319.1094×10−31 (la masa del electrón).
Números complejos
El tipo complex permite representar números complejos.
Los números complejos tienen una parte real y una imaginaria. La parte imaginaria es
denotada agregando una j inmediatamente después de su valor:
3 + 9j -1.4 + 2.7j
Valores lógicos
Los valores lógicos True y False (verdadero y falso) son de tipo bool, que representa valores
lógicos.
El nombre bool viene del matemático George Boole, quien creó un sistema algebraico para la
lógica binaria. Por lo mismo, a True y False también se les llama valores booleanos. El nombre
no es muy intuitivo, pero es el que se usa en informática, así que hay que conocerlo.
Texto
A los valores que representan texto se les llama strings, y tienen el tipo str.
Los strings literales pueden ser representados con texto entre comillas simples o comillas
dobles:
"ejemplo 1" 'ejemplo 2'
La ventaja de tener dos tipos de comillas es que se puede usar uno de ellos cuando el otro
aparece como parte del texto:
"Let's go!" 'Ella dijo "hola"'
Es importante entender que los strings no son lo mismo que los valores que en él pueden estar
representados:
>>> 5 == '5' False >>> True == 'True' False
Los strings que difieren en mayúsculas y minúsculas, o en espacios también son distintos:
>>> 'mesa' == 'Mesa' False >>> ' mesa' == 'mesa ' False
Nulo
Existe un valor llamado None (en inglés, «ninguno») que es utilizado para representar casos en
que ningún valor es válido, o para indicar que una variable todavía no tiene un valor que tenga
sentido.
El valor None tiene su propio tipo, llamado NoneType, que es diferente al de todos los demás
valores.
Los operadores
son símbolos que indican cómo se deben manipular los operandos. Los operadores junto con
los operandos forman una expresión, que es una fórmula que define el cálculo de un valor. Los
operandos pueden ser constantes, variables o llamadas a funciones, siempre que éstas
devuelvan algún valor. El compilador evalúa los operadores, algunos de izquierda a derecha,
otros de derecha a izquierda, siguiendo un orden de precedencia. Este orden se puede alterar
utilizando paréntesis para forzar al compilador a evaluar primero las partes que se deseen.
Tipos de operadores:
Aritméticos.
Casting.
Monarios.
Relacionales y Lógicos.
Asignación.
Condicional.
Tratamiento de bits.
Punteros.
Secuencial.
Acceso a estructuras y uniones.
[ ] y ( ).
La Expresión
Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis
y nombres de funciones especiales.
Por ejemplo:
a + (b + 3) / c
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 datos que manipulan, se
clasifican las expresiones en:
Aritméticas
Relacionales
Lógicas
Tipos de expresión
Las expresiones de C++ se dividen en varias categorías:
Expresiones primarias. Son los bloques de creación con los que se forman las demás
expresiones.
Expresiones de postfijo. Son expresiones primarias seguidas de un operador (por ejemplo, el
subíndice de la matriz o el operador de incremento de postfijo).
Expresiones formadas con operadores unarios. Los operadores unarios actúan solo sobre un
operando en una expresión.
Expresiones formadas con operadores binarios. Los operadores binarios actúan sobre dos
operandos de una expresión.
Expresiones con el operador condicional. El operador condicional es un operador ternario (el
único del lenguaje C++) que utiliza tres operandos.
Expresiones de constante. Las expresiones de constante se forman completamente con datos
constantes.
Expresiones con conversiones de tipos explícitas. En las expresiones se pueden usar
conversiones de tipos explícitas.
Expresiones con operadores de puntero a miembro.
Conversión. En las expresiones se pueden usar conversiones con seguridad de tipos.
Información de tipos en tiempo de ejecución. Determine el tipo de un objeto durante la
ejecución del programa.
EVALUACIÓN DE EXPRESIONES
Toda expresión regresa un valor. Si hay más de un operador, se evalúan primero operadores
mayor precedencia, en caso de empate, se aplica regla asociatividad
Para evaluar una expresión no hay que hacer nada del otro mundo, pues es bien sencillo. Sólo
hay que saber sumar, restar, si un número es mayor que otro
Hay tres reglas de prioridad a seguir para evaluar una expresión:
Primero, los paréntesis (si tiene)
Después, seguir el orden de prioridad de operadores
Por último, si aparecen dos o más operadores iguales, se evalúan de izquierda a derecha.
Las expresiones son secuencias de constantes y/o variables separadas por operadores válidos.
Se puede construir una expresión válida por medio de :
1. Una sola constante o variable, la cual puede estar precedida por un signo + ó – .
2. Una secuencia de términos (constantes, variables, funciones) separados por operadores.
Además debe considerarse que:
Toda variable utilizada en una expresión debe tener un valor almacenado para que la
expresión, al ser evaluada, dé como resultado un valor.
Cualquier constante o variable puede ser reemplazada por una llamada a una función.
Como en las expresiones matemáticas, una expresión en Pascal se evalúa de acuerdo a la
precedencia de operadores
Identificadores
En los lenguajes informáticos, los identificadores son elementos textuales (también llamados
símbolos) que nombran entidades del lenguaje. Algunas de las de entidades que un
identificador puede denotar son las variables, las constantes, los tipos de dato, las etiquetas,
las subrutinas (procedimientos y funciones) y los paquetes.
En muchos lenguajes algunas secuencias tienen la forma léxica de un identificador pero son
conocidos como palabras clave (o palabras reservadas). Lo habitual es que si un identificador
se corresponde con una palabra clave o reservada, éste ya no pueda utilizarse para referirse a
otro tipo de entidades como variables o constantes (en unos pocos lenguajes, como PL/1, esta
distinción no está del todo clara).
REGLAS DE ESCRITURA
C y C++ tienen sus propias reglas no escritas, sancionadas por la costumbre, en cuanto a ciertas
formas concretas de usar los identificadores. Por ejemplo: Es costumbre utilizar minúsculas
para los nombres de variables y funciones (con frecuencia se utilizan combinaciones
minúsculas/Mayúsculas - por ejemplo getRvalue o rColor-, aunque la inicial suele ser
minúscula). Los identificadores de variables automáticas lo más cortos posibles; los de estáticas
y globales más largos y descriptivos. Los nombres de constantes simbólicas normalmente en
mayúsculas.
Ejemplo:
void someFunc (int numero, char clave, int* puntero_a_clase); //
static tipoCliente = 0; //
enum formaPago { CONTADO, CREDITO }; //
...
someFunc(int n, char k, int *ptr) { //
int z, y, z = 2; //
}
Variable
En programación, una variable está formada por un espacio en el sistema de almacenaje
(memoria principal de un ordenador) y un nombre simbólico (un identificador) que está
asociado a dicho espacio. Ese espacio contiene una cantidad de información conocida o
desconocida, es decir un valor.
Clasificación de las Variables
Por su contenido
Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o
negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal.
Ejemplo:
iva = 0.15 pi = 3.1416 costo = 2500
Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos
representan el resultado de una comparación entre otros datos.
Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y
caracteres especiales).
Ejemplo:
letra = a apellido = lopez direccion = Av. Libertad #190
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operación matemática
completa y que se usan normalmente dentro de un programa.
Ejemplo:
Suma = a + b /c
Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realiza una
operación o se cumple una condición. Con los incrementos generalmente de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de
una serie de valores que se van leyendo o calculando progresivamente.
Unidad IV: metodología para el análisis y planteamiento de problema
IDENTIFICACIÓN DEL PROBLEMA
Para resolver un problema es necesario el entendimiento completo de que exactamente
consiste el problema y que tipo de solución se necesita. Es necesario comprender la
naturaleza del problema ya que así se puede llegar a establecer un problema bien
definido para obtener una solución satisfactoria.
Es de suma importancia analizar el problema, diagnosticar e identificar requerimientos
y necesidades para así determinar las 3 etapas en la construcción de la solución; la
entrada, el proceso y la salida.
Para esto, se requiere una metodología que defina cada uno de los pasos que nos
llevara a obtener la solución, visto de otro modo, generar un plan de acción eficaz para
alcanzar la meta.
Es necesario establecer especificaciones de entrada proceso y salida, en la primera
etapa encontramos información de entrada o inicial, que servirá para el análisis del
problema.
La segunda etapa o fase es analizar el problema, en esta etapa es conveniente dividir o
segregar las tareas necesarias e identificadas que ayudaran a la solución del problema
dado. De esta forma se simplificaran y serán más comprensibles para su desarrollo, es
recomendable siempre ir de las tareas o actividades más simples a las más complejas.
En esta fase se transforma la información de entrada recibida.
La tercera etapa en la programación de algoritmos, consiste en la implantación y
puesta en desarrollo del mismo, aquí se obtiene la información y resultado final
resultante de las etapas anteriores.
Es necesario seguir una serie de pasos sistemáticos para que el desarrollo posea una
buena un óptimo y eficaz resultado. Estos pasos son brindados por los modelos de ciclo
de vida, los cuales están constituidos por diferentes etapas:
Modelo de ciclo de vida
Para lograr esto, existen modelos de análisis estructurado que se puede detallar en el
siguiente cuadro:
Modelo del análisis estructurado moderno.
La calidad del diseño debe ser una meta para el diseñador. El diseño estructurado
ofrece guías para apoyar al diseñador a determinar módulos, y sus interconexiones,
que mejor realizarán los requerimientos especificados por el analista. Las dos reglas
más importantes son las referentes al acoplamiento y la cohesión.
Según Taylor S. Diseño es el proceso de aplicar distintas técnicas y principios con el
propósito de definir un dispositivo, proceso, o sistema, con los suficientes detalles como
para permitir su realización física.
Se pueden considerar los objetivos del diseño estructurado de la siguiente forma:
Eficiencia
Mantenibilidad
Modificabilidad
Flexibilidad
Generalidad
Utilidad
Pudiéramos decir que el diseño es la capacidad de producir y aplicar un modelo que
sirva como base para su implementación, todo esto bajo metodologías y estándares que
gracias a estos se podrá desarrollar dicho modelo bajo criterios para solucionar un
problema.
Los métodos de desarrollo de software pueden dividirse en dos grupos: función/dato y
orientados a objetos
Orientado a función o dato
Son aquellos métodos en que las funciones o los datos son vistos como entidades
independientes, tienen a ser sistemas difíciles de mantener y dependen de la estructura
de los datos que usualmente producen programas difíciles de leer o modificar, pero
tienen fuerte transformación de datos y usualmente son dependientes los programas de
la estructura de los datos.
Orientado a objetos
Se consideran métodos orientados a objetos en donde los cuales, datos y funciones
están relacionados, la abstracción de datos, son mapeados a entidades del mundo real,
tienden a ser más fáciles de mantener y leer gracias a la construcción de subclases.
Desarrollo de la solución
Una vez que se obtenga la solución tomando en cuenta todas las posibles alternativas
se escribe de forma clara y precisa para que pueda ser entendida y revisada. Consiste
en definir cada uno de los pasos que nos permitirá llegar a la solución, en pocas
palabras, explica claramente cuáles son las acciones para llegar a la meta. Esta serie
de pasos se conocen como algoritmos.
Podemos hablar del modelo esencial como la aplicación de la metodología de Análisis
Estructurado Moderno de Yourdon. La idea fundamental con la que el modelo esencial
es concebido es la de Tecnología Perfecta en la cual no hay restricciones de cantidad
de memoria, tamaño del disco o velocidad del procesador. El modelo esencial del
sistema indica lo que el sistema debe hacer para satisfacer los requisitos del usuario y
debe mencionar el mínimo posible de como el sistema se llevará a cabo.
Dentro de este modelo se encuentra El Modelo del Ambiente: Declaración de los
objetivos. Creación de un Diagrama de Contexto y de una Lista de Eventos, describe
los estímulos que recibe el sistema y las respuestas generadas por los estímulos.
Definición del Diccionario de Datos inicial. Tabla de Estímulo/Respuesta.
También se consigue dentro del modelo esencial al Modelo de Comportamiento:
Creación de un diagrama de flujo de datos o DFD, y un ERD por cada uno de los
eventos de la Lista de Eventos. Los DFDs por eventos se unen en un único DFD (el
Modelo Funcional) y los ERDs por eventos se unen en un único ERD (el Modelo de
Datos). Se acostumbra, también, modelar el comportamiento externo del sistema con
DTE, árboles de pantallas o menús, etc. La creación simultánea del modelo de datos,
modelo funcional y modelo de interfaz o comportamiento externo, ayuda en la
validación y completitud del modelo esencial (descubriendo, por ejemplo, eventos no
considerados).
Luego de establecer el modelo esencial, se debe considerar las imperfecciones de la
tecnología y determinar: la cantidad de procesadores necesarios, las cualidades de
estos procesadores, el tamaño de disco necesario de acuerdo al volumen de la
información a ser almacenada, etc. Luego se diseña la solución sobre la base de esas
restricciones tecnológicas, esto es el modelo de implementación, que se fundamenta en
3 modelos base, el modelo del usuario, modelo de distribución y modelo de programa.
IDENTIFICACIÓN DE LOS DATOS NECESARIOS
(ENTRADAS) Y LOS DATOS A OBTENER (SALIDAS).
La entrada, se considera como todos los datos que hay que ingresar para la resolución
del problema. Para diseñar un algoritmo o programa se debe comenzar por identificar
las tareas más importantes para resolver el problema y disponerlas en el orden en el
que han de ser ejecutadas. Los pasos en esta primera descripción pueden requerir una
revisión adicional antes de que podamos obtener un algoritmo claro, preciso y
completo.
Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los
de detalle, se conoce como método descendente (top-down).
En un algoritmo se deben de considerar tres partes:
Entrada: Información dada al algoritmo.
Proceso: Operaciones o cálculos necesarios para encontrar la solución del problema.
Salida: Respuestas dadas por el algoritmo o resultados finales de los procesos
realizados.
Como ejemplo supongamos que desea desarrollar un algoritmo lo primero que
debemos hacer es plantearnos las siguientes preguntas:
Especificaciones de entrada
¿Que datos son de entrada?
¿Cuántos datos se introducirán?
¿Cuántos son datos de entrada válidos?
Entendido el problema (que se desea obtener del computador), para resolverlo es
preciso analizar:
*Los datos o resultados que se esperan.
*Los datos de entrada que nos suministran.
*El proceso al que se requiere someter esos datos a fin de obtener los resultados
esperados.
*Áreas de trabajo, fórmulas y otros recursos necesarios.
Una recomendación muy práctica es el que nos pongamos en el lugar del computador,
y analizar que es necesario que me ordenen y en que secuencia, para poder producir
los resultados esperados. También da buenos resultados hacer similitudes con la labor
de un empleado que hace el mismo trabajo que deseamos programarle al computador.
Especificaciones de salida
¿Cuáles son los datos de salida?
¿Cuántos datos de salida se producirán?
¿Qué formato y precisión tendrán los resultados?
Lista de Eventos
La lista de eventos es una lista narrativa de los estímulos que ocurren en el mundo
externo, y al que el sistema debe responder. En pocas palabras al saber que datos de
entrada obtendremos podemos hacer una correlación de estimulo respuesta en esta
tabla.
La lista de eventos es una simple lista textual de eventos del ambiente a los cuales el
sistema debe responder. Al construirla asegúrese de distinguir entre un evento y un
flujo relacionado a un evento.
Gracias a esto se pueden establecer diferentes patrones de acción dependiendo de la
entrada, se pueden destacar:
Evento de flujo
Se asocia a un flujo de datos; es decir, el sistema percibe la ocurrencia del evento
cuando un grupo de datos llega.
Eventos Temporales
Se descargan en un cierto momento, los eventos temporales no se descargan ni son
representados por cualquier flujo de datos de entrada.
Eventos de control
Son estímulos externos que ocurren en momentos imprevistos.
Eventos de múltiple respuesta
Hay múltiples transacciones que son activadas por la condición temporal . Dichas
transacciones son activadas por un Evento Temporal que precisa de múltiples
respuestas.
Diagrama de Contexto
En el diagrama de contexto una única burbuja (proceso) representa el sistema. Los
Agentes Externos (o Terminadores) por definición no son parte del sistema y están
representados por un cuadro rectangular y se comunican directamente con el sistema a
través de los Flujos de Datos o de Control.
Los terminadores representan entidades externas con las cuales el sistema se comunica.
Comúnmente un terminador es una persona o un grupo, por ejemplo una organización
externa o una agencia gubernamental, o un grupo o departamento que esté dentro de la
misma compañía u organización, pero fuera del control del sistema que se está
modelando. En algunos casos, el terminador puede ser otro sistema.
Como se está interesado en el desarrollo del modelo esencial del sistema, es importante
que se distinga entre fuentes y manipuladores cuando se dibuja a los agentes externos
en el diagrama de contexto. Un manipulador es un mecanismo, dispositivo, o el medio
físico para transportar datos dentro o fuera del sistema.
Los flujos mostrados en el diagrama de contexto modelan los datos que llegan y dejan
el sistema. Estos serán incluidos en este diagrama si son necesarios para determinar un
evento del ambiente al que el sistema debe contestar, o si son necesarios (como datos)
para que se produzca una respuesta. También pueden mostrarse los flujos de datos en
el diagrama del contexto cuando los datos son producidos por el sistema para
responder a un evento.
Hay también una clase de flujos que no representan entrada o salida de datos del
sistema sino que establecen la necesidad de ejecutar una función dada. Estos flujos se
denominan flujos de control y son mostrados con una línea punteada.
Diagrama de Contexto
Se puede comenzar con la lista de eventos o con el diagrama de contexto. Realmente,
esto no importa, a medida que los componentes del modelo ambiental son generados se
debe confirmar que haya consistencia entre ellos.
DESCRIPCIÓN DE LAS OPERACIONES A UTILIZAR (CÁLCULOS)
Dentro de este método de análisis y planteamiento del problema, se llega a obtener una
estructura clara y eficaz por medio de una serie de pasos para alcanzar la solución del
problema, esto también cuenta con operaciones dentro de los algoritmos que podemos
llamar cálculos.
Estos cálculos son determinados durante el proceso de planificación y estructuración
del sistema, de manera simple en DFD de nivel bajo y detallada en creación en sí de la
escritura y codificación del sistema que contempla la meta planteada.
Estos cálculos están íntimamente conectados con el tipo de dato de entrada que se
espera recibir y la salida que nos interesa obtener, todo previamente planificado según
el caso, se formulan operaciones precisas ya sean lógicas o aritméticas representadas
como instrucciones a seguir.
DESCRIPCIÓN DE LOS PASOS PARA LLEGAR A LA
SOLUCIÓN (PROCESOS).
La siguiente fase que debe enfrentar el analista tiene que ver con el análisis de las
necesidades del sistema. De nueva cuenta, herramientas y técnicas especiales auxilian
al analista en la determinación de los requerimientos. Una de estas herramientas es el
uso de diagramas de flujo de datos para graficar las entradas, los procesos y las
salidas de las funciones del negocio en una forma gráfica estructurada. A partir de los
diagramas de flujo de datos se desarrolla un diccionario de datos que enlista todos los
datos utilizados en el sistema, así como sus respectivas especificaciones.
Durante esta fase el analista de sistemas analiza también las decisiones estructuradas
que se hayan tomado. Las decisiones estructuradas son aquellas en las cuales se
pueden determinar las condiciones, las alternativas de condición, las acciones y las
reglas de acción.
Existen tres métodos principales para el análisis de decisiones estructuradas: español
estructurado, tablas y árboles de decisión.
En este punto del ciclo de vida del desarrollo de sistemas, el analista prepara una
propuesta de sistemas que sintetiza sus hallazgos, proporciona un análisis de
costo/beneficio de las alternativas y ofrece, en su caso, recomendaciones sobre lo que
se debe hacer. Si la administración de la empresa considera factible alguna de las
recomendaciones, el analista sigue adelante. Cada problema de sistemas es único, y
nunca existe sólo una solución correcta. La manera de formular una recomendación o
solución depende de las cualidades y la preparación profesional de cada analista.
Creación de diagrama de flujo de datos
Para la creación del DFD básicamente existen dos enfoques: Partición en Eventos
McMenam, Yourdon y Enfoque de Análisis Estructurado Clásico DeMarco, Gane.
En el enfoque de partición por eventos para la construcción del DFD preliminar, se
agrega una burbuja por cada evento definido en la lista de eventos. Por cada evento, se
especifican los flujos (control y datos), agentes externos y depósitos de datos
considerado por McMenam como partición de eventos y DeMarco lo llamo enfoque de
análisis estructurado.
En el enfoque de análisis estructurado clásico para la construcción del DFD de primer
nivel (o nivel 0), el analista (o el grupo de analistas) estudia el diagrama de contexto y
crea un DFD de nivel 0 sin una estrategia que lo asista. Sobre la base de su
conocimiento del sistema, o del tipo de aplicación, divide en "Burbujas Importantes"
(por ejemplo, que representen subsistemas).
El DFD preliminar puede ser representado como un único diseño o por un conjunto de
Diagramas separados. Para la construcción del diagrama de flujo de datos preliminar,
con un enfoque de partición por eventos, la metodología de análisis estructurado
moderna propone la siguientes cuatro etapas:
Se diseña una burbuja (proceso) para cada evento de la Lista de Eventos.
La burbuja recibe un nombre de acuerdo con la respuesta que el sistema debe dar al
evento asociado.
Se diseñan los flujos de entrada y salida apropiados de modo que cada burbuja sea
capaz de emitir una respuesta necesaria, y se diseñan los depósitos para la
comunicación entre las burbujas.
El DFD preliminar resultante es verificado en relación con el Diagrama de Contexto,
la Lista de Eventos y el Modelo de Datos para confirmar si esta completo y
[Link] DFD preliminar se compone de un solo nivel con una burbuja para cada
uno de los eventos. Ahora, precisamos subdividirlo en niveles superiores (abstracción).
Esto quiere decir que deseamos agrupar los procesos (o burbujas) relacionados en
funciones de más alto nivel de abstracción, cada uno representando una burbuja en el
diagrama de más alto nivel.
Existen tres reglas que nos ayudan en el proceso de abstracción:
Cada agrupamiento de procesos debe involucrar respuestas estrictamente relacionadas
(véase que cada burbuja en el DFD preliminar tiene un nombre relativo a la respuesta
de un evento de la lista de eventos). Esto habitualmente significa que los procesos
trabajan con datos estrechamente relacionados.
Agrupar procesos que trabajen con los mismos almacenamientos. Así, si usted
encontrara un grupo de procesos con flujos para el mismo depósito, sin que otros
procesos (que no son del grupo) se refieran a este depósito, entonces puede crear una
burbuja, en el nivel más alto, que oculte el depósito.
Se debe notar que la persona que examinara sus diagramas de flujo de datos, será un
usuario o un analista de sistemas o un diseñador, que quiere ver todo de una sola vez.
Un buen criterio de agregación o agrupamiento no tiene más de siete más o menos dos
(7 ± 2) fragmentos de información (considerando como fragmentos de información a
los Procesos y los Depósitos de Datos).
El diagrama de flujo de datos describe cómo los datos fluyen a través del sistema, pero
no proveen información acerca de estructuras de control o de secuencias de ejecución.
La única secuencia que puede ser reconocida en un DFD es la determinada por la
necesidad de información. Podemos considerar al diagrama de flujo de datos como un
lenguaje gráfico, útil para describir la funcionalidad de un sistema, en un cierto grado
de detalle.
El Diccionario de Datos
El diccionario de datos es una herramienta fundamental en el modelamiento de
sistemas. Las herramientas gráficas como los diagramas de flujo de datos, los
diagramas de entidad-relación, los diagramas de transición de estados, etc., son de
mucha importancia para el modelamiento estructural de los sistemas (estructuras
funcionales, estructuras de información, estructuras de comportamiento, etc.) y
permiten una adecuada interpretación general de las ideas modeladas pero, no son
completos. Para contar con una especificación completa es preciso tener una
descripción textual de los detalles que no pueden ser especificados en los diagramas.
El diccionario de datos es una lista organizada de todos los elementos de datos
pertinentes al sistema (todos los nombres de las componentes de los diagramas), con
definiciones precisas y rigurosas para que el usuario y el analista de sistemas puedan
conocer todas las entradas, salidas, componentes de depósitos y cálculos intermedios.
Diagrama de flujo de datos
Un proceso representa una componente funcional del sistema. Un proceso transforma,
distribuye o genera datos. Por ejemplo, los procesos pueden realizar operaciones
aritméticas o lógicas sobre los datos que recibe para producir algún resultado.
Respecto a esto, un DFD describe únicamente los nombres y los flujos de entrada y
salida, sin aportar ninguna otra información sobre las actividades internas de los
procesos. Para describir con mayor detalle, y especificar la funcionalidad por la que es
responsable el proceso, se utilizan técnicas de especificación de procesos.
Un depósito de datos es incluido en un DFD para modelar la necesidad de almacenar
datos, se utiliza para modelar un conjunto de paquetes de datos en reposo. Un depósito
de datos puede representar un archivo en el disco de la computadora o un área de
memoria global a los procesos. En la literatura es posible encontrar que este mismo
concepto puede recibir otros nombres como por ejemplo: Archivo, Almacenamiento de
Datos o Repositorio.
Diagrama de Almacenamiento de datos
Refinamiento y Descomposición de procesos
Un DFD es una herramienta comúnmente utilizada para análisis de arriba hasta abajo,
es decir que permite realizar un análisis que va de lo general a lo particular del
problema. Los DFDs son utilizados para modelar tanto vistas detalladas como de alto
nivel de un sistema o programa por eso es útil el refinamiento de procesos en un DFD.
La funcionalidad de un proceso puede llegar a ser tan compleja que para comprenderlo
sea necesario detallar sus actividades de manera separada.
Los procesos del DFD pueden ser refinados en otra red de procesos conectados por
flujos de datos, constituyendo un DFD de menor nivel de abstracción. Esta forma de
especificar un proceso, por medio de otro DFD completo se denomina refinamiento,
descomposición o explosión. El problema es definir cuál es el criterio más adecuado
para hacer esto y, determinar hasta dónde bajar en la jerarquía de DFDs, es decir
cuando parar de realizar explosiones.
na de las formas más sistemáticas de realizar el refinamiento de un proceso es el que
propone Mike Adler, con el Álgebra de Descomposición de Procesos. Se aplica un
álgebra, definida por un conjunto de operadores, a cada uno de los procesos del DFD
por separado. En los procesos que generan dudas con relación a su funcionalidad sirve
como una guía para su descomposición, mientras que para los procesos que generan
muy pocas dudas con relación a su funcionalidad, puede ser utilizado como un método
de validación. Los operadores son aplicados para producir una expresión mínima.
Al desarrollar un sistema, cualquiera fuere su tamaño, es necesario contar en primer
término, con una narrativa textual y una declaración concisa de los objetivos del
sistema (la funcionalidad que se requiere, es decir lo que se espera que el sistema
haga), por supuesto validada con el usuario del sistema.