viernes, 17 de febrero de 2017

PROGRAMACIÓN LÓGICA Y FUNCIONAL




Ingeniería en sistemas computacionales
Departamento de sistemas y computación
Nombre de los integrantes:
Adela Gpe. Acosta Cruz
Selene Izumi Komukai Lucero
Samuel Arturo Villegas Palacios
No. de Control:
13510621
1310674
13510739
Nombre del curso:
Programación Lógica y funcional.
Nombre del Profesor:
Ing. Manuel de Jesús Matuz Cruz
Periodo: Enero/ Junio
Actividad: 7
Fecha: 17 de Febrero 2017









Instrucciones.
R
eporte de la unidad 1. Conceptos Fundamentales.

Desarrollo.
1.1.  Estilos de programación.
El estilo de programación imperativa (es decir, la programación a través de acciones que modifican el estado del computador) ha dominado elpanorama de la programación desde sus inicios; los lenguajes de más amplio uso están basados en este paradigma: Fortran, e, C++, Pascal, Basic, etc. Una razón fundamental de este dominio reside en que los lenguajes imperativos son más cercanos a la forma como realmente funciona la máquina. Existen otros paradigmas de programación diferentes al imperativo como la programación funcional y la programación lógica, cuyo estudio, desarrollo y uso han estado principalmente restringidos al ámbito académico.
La programación funcional, es casi tan antigua como la imperativa; el primer lenguaje funcional, LlSP, fue desarrollado en la misma época en la que se desarrolló FORTRAN. Sin embargo, la programación funcional ha estado tradicionalmente circunscrita a áreas de aplicación específicas como la inteligencia artificial y la computación simbólica. (R., 1958)G (F.)[1]

Existen otros paradigmas de programación diferentes al imperativo como la programación funcional y la programación lógica, cuyo estudio, desarrollo y uso han estado principalmente restringidos al ámbito académico. La programación funcional, es casi tan antigua como la imperativa; el primer lenguaje funcional, LlSP, fue desarrollado en la misma época en la que se desarrolló FORTRAN. Sin embargo, la programación funcional ha estado tradicionalmente circunscrita a áreas de aplicación específicas como la inteligencia artificial y la computación simbólica.(R., 1958)[2]


Figura 1.1 Concepto de Estilo de programación representado en mapa conceptual.  


1.2      Evaluación de expresiones.
             Es una subrutina o subprograma( también llamada procedimiento, función o rutina), como idea general, se presenta como un sub-algoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica.

Las expresiones se evalúan de acuerdo con la presidencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando paréntesis.
Tipos de expresiones .

                         Dentro de las expresiones distinguimos dos clases según el tipo de datos que devuelven que devuelven al evaluarlas :

Expresiones numéricas.

                   Son expresiones en las que solamente aparecen operadores aritméticos.
( +, -, *, /, %3 ) , conectando términos de tipo numérico exclusivamente.
Una expresión lógica.

 Es aquella en la cual el resultado se da en términos de verdadero o falso. Generalmente una expresión lógica se construye a partir de expresiones comparativas (dos expresiones numéricas relacionadas mediante algún operador relacional), de variables y/o literales booleanos, los cuales se conectan mediante operadores lógicos. Los operadores de comparación usados en programación son los siguientes:
mayor que (>), menor que (<), igual (=), mayor o igual que (>=), menor o igual que (<=) y diferente (<>); mientras que los operadores lógicos usados son: o (ı), y (&) y la negación (~).


             Las expresiones se utilizan fundamentalmente en las asignaciones y en las partes condicionales de la sentencias If, While y Repeat. (básicos)[3]


Figura 1.2 conceptos de Evaluación de Expresiones representado en mapa conceptual.


1.3      Definición de funciones.
Las funciones son subrutinas que pueden tener o no argumentos pero que siempre devuelven un valor de retorno. Así pues, las invocaciones a funciones son expresiones de un tipo determinado y deben emplearse igual que cualquier expresión de su tipos; es decir, una llamada a función puede formar parte de una expresión aritmética, lógica o de cadena en función de su tipo, puede constituir la parte derecha de una sentencia de asignación, aparecer en una sentencia de salida o constituir un argumento para otro subprograma. Por otro lado, las llamadas a funciones nunca pueden formar una sentencia aislada ni constituir la parte izquierda de una sentencia de asignación. Las invocaciones a funciones siguen, tanto en la notación algorítmica como en FORTRAN, la siguiente sintaxis:

nombre_función ([argumento][,argumento]*)

Como se puede ver, es posible tener funciones con 0 o más argumentos, las funciones que se utilizarán en nuestros algoritmos pueden estar definidas por el propio usuario o, en muchas ocasiones, ser funciones estándar, esto es, definidas por el propio compilador. (Líbano)[4]


 1.4.  Disciplina de tipos.
Las principales características de los lenguajes funcionales con disciplina de tipos son las siguientes:

1.- Toda expresión tiene un tipo.
2.- Los tipos se infieren, es decir se comprueban, de forma estática, en tiempo de compilación.
3.- Los tipos utilizados pueden ser básicos o construidos.

Como puede observarse en el ejemplo, se ha definido un tipo de datos lista, mediante una declaración de datos, en la cual aparecen los símbolos”[ ]” y “:” que son denominados los constructores del tipo y aparece también el símbolo t, que se denomina variable de tipo. Esto implica que es posible construir listas de diferentes con diferentes tipos de datos. En programación funcional, las expresiones utilizadas denotan valores, y el valor de una expresión depende de un contexto. En el caso de utilizar una función, cada valor de su domino está asociado a un único valor en el codomino. Esta propiedad se denomina transparencia referencial y consiste en que el valor de una expresión es independiente del orden de evaluación y del modo de uso de esta expresión como subexpresión de otra.

Una característica muy importante de las funciones consiste en la operación de composición. La composición de funciones es una de las principales técnicas utilizadas en la programación funcional, debido a que una de las formas más simples de estructurar un programa consiste en realizar cierto número de operaciones una después de otra, esto se consigue mediante la composición de funciones en la cual el resultado de una función es la entrada de otra. (Castro, Junio 2005. )[5]



Figura 1.4 conceptos de Disciplina de tipos representado en mapa conceptual.



1.5.  Tipos de datos.
Cuando nos planteamos la resolución de problemas mediante computador lo más usual es que queramos tratar con datos que son variables y cuantificables, es decir, que toman un conjunto de valores distintos entre un conjunto de valores posibles, además de poder almacenar los valores de estos datos en alguna forma aceptable para el computador (ya sea en la memoria o en periféricos de almacenamiento externo). En un lenguaje de programación el concepto de tipo de datos se refiere al conjunto de valores que puede tomar una variable. Esta idea es similar a la que se emplea en matemáticas, donde clasificamos las variables en función de determinadas características, distinguiendo entre números enteros, reales o complejos. Sin embargo, en matemáticas, nosotros somos capaces de diferenciar el tipo de las variables en función del contexto, pero para los compiladores esto resulta mucho más difícil. Por este motivo debemos declarar explícitamente cada variable como perteneciente a un tipo. Este mecanismo es útil para que el computador almacene la variable de la forma más adecuada, además de permitir verificar que tipo de operaciones se pueden realizar con ella. Se suelen diferenciar los tipos de datos en varias categorías:

         Tipos elementales, que son aquellos cuyos valores son atómicos y, por tanto, no pueden ser descompuestos en valores más simples.
Entre las variables de estos tipos siempre encontramos definidas una serie de operaciones básicas: asignación de un valor, copia de valores entre variables y operaciones relacionales de igualdad o de orden (por lo tanto, un tipo debe ser un conjunto ordenado). Los tipos más característicos son:

booleanos = {verdadero, falso}
enteros = {… -2, -1, 0, +1, +2, …}
reales = {… -1.0, …, 0.0, …, +1.0, …}
caracteres = {… ‘a’, ‘b’, …, ‘Z’, …}. (Oliag, 1995.)[6]


Bibliografía

Castro, J. d. (Junio 2005. ). Eliminación de Variables Extra en Programación Lógico Funciona. .de Madrid. (España) : Departamento de Sistemas Informáticos y Programación Universidad Complutense .
Líbano, R. E. Subprogramas. Capítulo 3.
básicos, C. Los datos en programación Módulo 2.
F., G. O. Programación funcional: Conceptos y perpectivas.
Oliag, S. T. (1995.). Curso de programación en C++ . . EUI (UPV) Valencia: Apuntes de clase .. Pág 2 .
R., C. H. (1958). Combinatory Logic. NortHolland.











1unio 2005.ción Lógico Funciona.



PROGRAMACIÓN LÓGICA Y FUNCIONAL



Nombre: Adela Guadalupe Acosta Cruz
Selene Izumi Komukai Lucero
Samuel Arturo Villegas Palacios
No de control: 13510621
13510674
13510739
Nombre del curso:
Programador lógica y funcional
Nombre del profesor:
Manuel de Jesús Matuz Cruz
Periodo: 1
Actividad: 7 Temario
Fecha: 17 de Febrero del 2017





PROGRAMACIÓN LÓGICA Y FUNCIONAL.


1.1 ESTILOS DE PROGRAMACIÓN



El estilo de programación imperativa (es decir, la programación a través de acciones que modifican el estado del computador) ha dominado elpanorama de la programación desde sus inicios; los lenguajes de más amplio uso están basados en este paradigma: Fortran, e, C++, Pascal, Basic, etc. Una razón fundamental de este dominio reside en que los lenguajes imperativos son más cercanos a la forma como realmente funciona la máquina. Existen otros paradigmas de programación diferentes al imperativo como la programación funcional y la programación lógica, cuyo estudio, desarrollo y uso han estado principalmente restringidos al ámbito académico. La programación funcional, es casi tan antigua como la imperativa; el primer lenguaje funcional, LlSP, fue desarrollado en la misma época en la que se desarrolló FORTRAN. Sin embargo, la programación funcional ha estado tradicionalmente circunscrita a áreas de aplicación específicas como la inteligencia artificial y la computación simbólica. (R., 1958)G (F.)



Existen otros paradigmas de programación diferentes al imperativo como la programación funcional y la programación lógica, cuyo estudio, desarrollo y uso han estado principalmente restringidos al ámbito académico. La programación funcional, es casi tan antigua como la imperativa; el primer lenguaje funcional, LlSP, fue desarrollado en la misma época en la que se desarrolló FORTRAN. Sin embargo, la programación funcional ha estado tradicionalmente circunscrita a áreas de aplicación específicas como la inteligencia artificial y la computación simbólica.





1.2 EVALUACIÓN DE EXPRESIONES


Es una subrutina o subprograma( también llamada procedimiento, función o rutina), como idea general, se presenta como un sub-algoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica.
Las expresiones se evalúan de acuerdo con la presidencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando paréntesis.
Tipos de expresiones
Dentro de las expresiones distinguimos dos clases según el tipo de datos que devuelven que devuelven al evaluarlas :

Expresiones numéricas.
Son expresiones en las que solamente aparecen operadores aritméticos.
( +, -, *, /, %3 ) , conectando términos de tipo numérico exclusivamente.
Una expresión lógica.
 Es aquella en la cual el resultado se da en términos de verdadero o falso. Generalmente una expresión lógica se construye a partir de expresiones comparativas (dos expresiones numéricas relacionadas mediante algún operador relacional), de variables y/o literales booleanos, los cuales se conectan mediante operadores lógicos. Los operadores de comparación usados en programación son los siguientes:
mayor que (>), menor que (<), igual (=), mayor o igual que (>=), menor o igual que (<=) y diferente (<>); mientras que los operadores lógicos usados son: o (ı), y (&) y la negación (~).
Las expresiones se utilizan fundamentalmente en las asignaciones y en las partes condicionales de la sentencias If, While y Repeat.






1.3 DEFINICIÓN DE FUNCIONES


Las funciones son subrutinas que pueden tener o no argumentos pero que siempre devuelven un valor de retorno. Así pues, las invocaciones a funciones son expresiones de un tipo determinado y deben emplearse igual que cualquier expresión de su tipos; es decir, una llamada a función puede formar parte de una expresión aritmética, lógica o de cadena en función de su tipo, puede constituir la parte derecha de una sentencia de asignación, aparecer en una sentencia de salida o constituir un argumento para otro sub-programa. Por otro lado, las llamadas a funciones nunca pueden formar una sentencia aislada ni constituir la parte izquierda de una sentencia de asignación. Las invocaciones a funciones siguen, tanto en la notación algorítmica como en FORTRAN, la siguiente sintaxis:
.             
.              nombre_función ([argumento][,argumento]*)
.             
.              Como se puede ver, es posible tener funciones con 0 o más argumentos, las funciones que se utilizarán en nuestros algoritmos pueden estar definidas por el propio usuario o, en muchas ocasiones, ser funciones estándar, esto es, definidas por el propio compilador.


.              


1.4 DISCIPLINA DE TIPOS



Las principales características de los lenguajes funcionales con disciplina de tipos son las siguientes: 
1.- Toda expresión tiene un tipo. 
2.- Los tipos se infieren, es decir se comprueban, de forma estática, en tiempo de compilación. 
3.- Los tipos utilizados pueden ser básicos o construidos.

 Como puede observarse en el ejemplo, se ha definido un tipo de datos lista, mediante una declaración de datos, en la cual aparecen los símbolos”[ ]” y “:” que son denominados los constructores del tipo y aparece también el símbolo t, que se denomina variable de tipo. Esto implica que es posible construir listas de diferentes con diferentes tipos de datos. En programación funcional, las expresiones utilizadas denotan valores, y el valor de una expresión depende de un contexto. En el caso de utilizar una función, cada valor de su domino está asociado a un único valor en el codomino. Esta propiedad se denomina transparencia referencial y consiste en que el valor de una expresión es independiente del orden de evaluación y del modo de uso de esta expresión como subexpresión de otra. Una característica muy importante de las funciones consiste en la operación de composición. La composición de funciones es una de las principales técnicas utilizadas en la programación funcional, debido a que una de las formas más simples de estructurar un programa consiste en realizar cierto número de operaciones una después de otra, esto se consigue mediante la composición de funciones en la cual el resultado de una función es la entrada de otra. 






1.5 TIPOS DE DATOS


Cuando nos planteamos la resolución de problemas mediante computador lo más usual es que queramos tratar con datos que son variables y cuantificables, es decir, que toman un conjunto de valores distintos entre un conjunto de valores posibles, además de poder almacenar los valores de estos datos en alguna forma aceptable para el computador (ya sea en la memoria o en periféricos de almacenamiento externo). En un lenguaje de programación el concepto de tipo de datos se refiere al conjunto de valores que puede tomar una variable. Esta idea es similar a la que se emplea en matemáticas, donde clasificamos las variables en función de determinadas características, distinguiendo entre números enteros, reales o complejos. Sin embargo, en matemáticas, nosotros somos capaces de diferenciar el tipo de las variables en función del contexto, pero para los compiladores esto resulta mucho más difícil. Por este motivo debemos declarar explícitamente cada variable como perteneciente a un tipo. Este mecanismo es útil para que el computador almacene la variable de la forma más adecuada, además de permitir verificar que tipo de operaciones se pueden realizar con ella. Se suelen diferenciar los tipos de datos en varias categorías:

          Tipos elementales, que son aquellos cuyos valores son atómicos y, por tanto, no pueden ser descompuestos en valores más simples. Entre las variables de estos tipos siempre encontramos definidas una serie de operaciones básicas: asignación de un valor, copia de valores entre variables y operaciones relacionales de igualdad o de orden (por lo tanto, un tipo debe ser un conjunto ordenado). Los tipos más característicos son:

booleanos = {verdadero, falso}
enteros = {… -2, -1, 0, +1, +2, …}
reales = {… -1.0, …, 0.0, …, +1.0, …}
caracteres = {… ‘a’, ‘b’, …, ‘Z’, …}




CONCLUSIÓN


La programación funciona es "El estilo de programación que enfatiza la evaluación de expresiones, antes que la ejecución de comandos " . Ademas un programa funcional está constituido enteramente por funciones; el programa principal es una función que toma como argumento la entrada al programa y genera la salida del programa como su resultado. Las características que hemos ilustrado de hasta ahora evidencian el gran potencial de los lenguajes funcionales como herramientas que les facilite a los programadores enfrentar la complejidad creciente del desarrollo de software; esto nos permite afirmar que en los próximos años los lenguajes funcionales tomarán un lugar en el área de desarrollo de software a gran escala, aliado de lenguajes tan tradicionales como e, e++,ADA.

REFERENCIAS
1.1- (R., 1958)
1.2- (básicos)[1]
1.3- Rosa Echevarría Líbano. Capítulo 3 Subprogramas. pág. 31
1.4- (Castro, Junio 2005. )
1.5- (Oliag, 1995.)


domingo, 17 de mayo de 2015

Herramientas de medicion

HERRAMIENTAS DE MEDICIÓN


Herramientas de medicion

El Monitor de confiabilidad y rendimiento de Windows es un complemento de Microsoft Management Console (MMC) que combina la funcionalidad de herramientas independientes anteriores, incluidos Registros y alertas de rendimiento, Server Performance Advisor y Monitor de sistema. Proporciona una interfaz gráfica para personalizar la recopilación de datos de rendimiento y sesiones de seguimiento de eventos. 

También incluye el Monitor de confiabilidad, un complemento de MMC que lleva un seguimiento de los cambios producidos en el sistema y los compara con los cambios de estabilidad del sistema, proporcionando una vista gráfica de su relación.

Indicadores de desempeño

Indicadores del Rendimiento de un Computador

Los indicadores del rendimiento de un computador son una serie de parámetros que conforma una modelo simplificado de la medida del rendimiento de un sistema y son utilizados por los arquitectos de sistemas, los programadores y los constructores de compiladores, para la optimización del código y obtención de una ejecución más eficiente. Dentro de este modelo, estos son los indicadores de rendimiento más utilizados:

4.1 Turnaround Time

El tiempo de respuesta. Desde la entrada hasta la salida, por lo que incluye accesos a disco y memoria, compilación, sobrecargas y tiempos de CPU. Es la medida más simple del rendimiento.

En sistemas multiprogramados no nos vale la medida del rendimiento anterior, ya que la máquina comparte el tiempo, se produce solapamiento E/S del programa con tiempo de CPU de otros programas. Necesitamos otra medida como es el TIEMPO CPU USUARIO.

4.2 Tiempo de cada ciclo ( )

El tiempo empleado por cada ciclo. Es la constante de reloj del procesador. Medida en nanosegundos.

4.3 Frecuencia de reloj (f) 

Es la inversa del tiempo de ciclo. f = 1/ . Medida en Megahertz.

4.4 Total de Instrucciones (Ic) 

Es el número de instrucciones objeto a ejecutar en un programa.

4.5 Ciclos por instrucción (CPI) 

Es el número de ciclos que requiere cada instrucción. Normalmente, CPI = CPI medio.

Roadmap

Un RoadMap (que podría traducirse como hoja de ruta) es una planificación del desarrollo de un software con los objetivos a corto y largo plazo, y posiblemente incluyendo unos plazos aproximados de consecución de cada uno de estos objetivos. Se suele organizar en hitos o "milestones", que son fechas en las que supuestamente estará finalizado un paquete de nuevas funcionalidades.

Para los desarrolladores de software, se convierte en una muy buena práctica generar un Roadmap, ya que de esta forma documentan el estado actual y posible futuro de su software, dando una visión general o específica de hacia adónde apunta a llegar el software.

La expresión Roadmap se utiliza para dar a conocer el "trazado del camino" por medio del cual vamos a llegar del estado actual al estado futuro. Es decir, la secuencia de actividades o camino de evolución que nos llevará al estado futuro.

miércoles, 25 de marzo de 2015

Control de Tareas y Procesos

Todos los SO de multi-programación están construido entorno al concepto de proceso

Los requerimientos principales que debe cumplir  un SO para con los procesos  son los siguientes:
1._ El SO debe intercalar la ejecución de procesos para optimizar la  utilización de el procesador ofreciendo alavés un tiempo de respuesta razonable
2._ El SO debe asignar los  recursos del sistema a los procesos en conformidad con una política específica que evite situaciones de ínter bloqueo
3._ El SO podría tener que dar soporte a la comunicación entre procesos y ofrecer mecanismos para su creación
Creación y terminación de procesos
El sistema de operación debe crear un mecanismo para la creación y terminación de procesos.
 1._  Creación de procesos
   Cuando un nuevo proceso se agrega el sistema de operación construye las estructuras de datos que son usadas para administrar los procesos y le asigna espacio de direcciones. Estas acciones constituyen la creación de un nuevo proceso.
Los eventos comunes para la creación de procesos

- En un ambiente batch, un proceso es creado en   respuesta al sometimiento a ejecución de un trabajo.
- En un ambiente interactivo, un proceso es creado cuando un nuevo usuario entra al sistema.
- El sistema de operación puede crear un proceso para que realice una función en respuesta a una petición de un programa usuario, sin que el usuario tenga que esperar.
- Creación de procesos hijos por parte de procesos usuarios ya existentes el proceso que crea se llama proceso padre.

2._  Terminación de procesos

      Un proceso termina cuando ejecuta su última instrucción y pide al sistema operativo que lo elimine.
 En este momento, el proceso puede devolver un valor de estado a su proceso padre.
      El sistema operativo libera la asignación de todos los recursos del proceso, incluyendo las memorias física y virtual, los archivos abiertos y los búferes de
E\S.
La terminación puede producirse también en otras circunstancias.
Un proceso puede causar la terminación de otro proceso a través de la adecuada llamada al sistema.
Dicha llamada al sistema al sistema sólo puede ser invocada por el padre del proceso que va am terminar.
En caso contrario, los usuarios podrían terminar arbitrariamente los trabajos de otros usuarios.
Adicionalmente, un número de error  o una condición de fallo puede llevar a la finalización de un proceso. Las condiciones mas habituales son las siguientes:
Finalización normal .
Limite de tiempo excedido.
Memoria no disponible.
Violaciones de frontera .
Error de protección .
Limite de tiempo.
Fallo de E/S.
Instrucción no válida.
Instrucción privilegiada.
Uso inapropiado de datos.
Intervención del operador por el sistema operativo.
Terminación del proceso padre.
Solicitud del proceso padre.

ESTADOS DE UN PROSESO DE SISTEMAS

Preparado (R).- Proceso que está listo para ejecutarse
Ejecutando (O).- Sólo uno de los procesos preparados se está ejecutando en cada momento
Suspendido (S).- Se esta suspendido si no entra en el reparto de CPU, el proceso pasa a formar parte del conjunto de procesos preparados.
 PARADO (T).- Será cuando pasarán a estar preparados cuando reciban una señal determinada que les permita continuar.
Zombie (Z).- Todo proceso al finalizar avisa a su proceso padre . En vaso de que el padre no lo reciba, el proceso hijo queda en estado zombie, no está consumiendo CPU, pero sí continua consumiendo recursos del sistema .

Transiciones de estado de los procesos

De ejecución á Bloqueado: Se realiza esta transición cuando cuando queda en espera cuando por la concesión de sus recursos o por la determinación de un suceso.
De ejecución á Listo: Cuando el proceso que ocupa la CPU lleva demasiado tiempo ejecutándose ,el sistema operativo decide que otro proceso ocupe la CPU, pasando el proceso que ocupaba la CPU a estado listo.
De Listo á en ejecución: Cuando lo requiere el planificador de la CPU.
De Bloqueado á Listo: Se dispone del recurso por el que se había bloqueado el proceso.
De Nuevo a Preparado: Es cuando el SO acepta o admite un proceso mas.
De Preparado a Terminado: Ocurre cuando cuando el proceso padre decide finalizar la ejecución del hijo.

De Bloqueado a Terminado: Ocurre cuándo el proceso supere el tiempo máximo de espera de un recurso y el SO decida terminarlo.