lunes, 11 de marzo de 2019

unidad 2: PROGRAMACIÓN FUNCIONAL





2.1. El tipo de datos



En lenguajes de programación un tipo de dato es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar.





En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores. Casi todos los lenguajes de programación explícitamente incluyen la notación del tipo de datos, aunque lenguajes diferentes pueden usar terminología diferente. La mayor parte de los lenguajes de programación permiten al programador definir tipos de datos adicionales, normalmente combinando múltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato.
Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluirá un nombre y una fecha de nacimiento.

Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos.
Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. 

Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que: 4 Bytes = 4x8 = 32 bits Con 32 bits se pueden representar 232=4294967296 valores: Sólo positivos:
  • Positivos  del 0 al 4294967295 
  • negativos: del -2147483648 al 2147483647

Tipos de datos en coma flotante Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: 
  • float 
  • double. 
El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.Tipo:float4 Bytes (32 bits) double8 Bytes (64 bits)

Tipo de dato carácter (Char) Es cualquier signo tipográfico, puede ser una letra, un número, un signo de puntuación o un espacio. Este término se usa mucho en computación. Un valor de tipo carácter es cualquier carácter que se encuentre dentro del conjunto ASCII ampliado, el cual está formado por los 128 caracteres del ASCII más los 128 caracteres especiales que presenta, en este caso, IBM.






Los valores ordinales del código ASCII ampliado se encuentran en el rango de 0 a 255. Dichos valores pueden representarse escribiendo el carácter correspondiente encerrado entre comillas simples (apóstrofos).Así, podemos escribir: ‘A' < 'a ‘Que significa: "El valor ordinal de A es menor que el de a" o "A está antes que a “Un valor de tipo carácter (char en inglés) se guarda en un byte de memoria. La única operación (además de las relacionales) que podemos hacer con caracteres es la concatenación concatenando dos caracteres, por ejemplo 'a' y 'X' obtendríamos la cadena "aX".

Tipo de dato lógico El tipo de dato lógico o booleano es en computación aquel que puede representar valores de lógica binaria, esto es, valores que representen falso o verdadero. Se utiliza normalmente en programación, estadística, electrónica, matemáticas (Álgebra booleana), etc...Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se emplean los operadores relacionales (u operadores de relación), por ejemplo: 0 es igual a falso y 1 es igual a verdadero (3>2)= 1 = verdadero (7>9)= 0 = falso

Palabra reservada una palabra reservada es una palabra que tiene un significado Gramatical especial para ese lenguaje y no puede ser utilizada como un identificador en ese lenguaje.





2.2 Funciones

Un problema complejo se puede dividir en pequeños subproblemas más sencillos. Estos subproblemas se conocen como “Módulos” y su complementación en un lenguaje se llama subprograma (procedimientos y funciones).

Un subprograma realiza las mismas acciones que un programa, sin embargo, un subprograma lo utiliza solamente un programa para un propósito específico.

Un subprograma recibe datos de un programa y le devuelve resultados (el programa “llama” o “invoca” al subprograma, este ejecuta una tarea específica y devuelve el “control” al programa que lo llamo).

Función: Una función en matemáticas, es una operación que toma un o más valores (argumentos) y devuelve un resultado (valor de la función para los argumentos dados). Por ejemplo:

F(X) = X / (1+X2)

Donde:

F………….. Nombre de la función

X…………. Es el argumento (también conocido como parámetro formal)

Definición de funciones: Una definición de función se presenta de la siguiente manera:

Función nombre_funcion (p1, p2,…, pn)

Inicio

Bloque de instrucciones

Fin

Donde:

Función…………… Es la palabra clave que nos indica una definición de función.

Nombre_funcion…. Es el identificador con el cual se reconoce a la función en el cuerpo del

Algoritmo principal.

P1, p2,…, pn……… Es el grupo de parámetros que define a la función.

Llamado a una función

Cuando definimos una función solo le indicamos al algoritmo que esta función existe, pero una definición de función no implica la realización de las instrucciones que la constituyen. Para hacer uso de una función, el algoritmo principal la debe llamar. Por ejemplo:

Función F(X)

Inicio

F = X / (1 + X^2)

Fin

Inicio

Imprimir “Este es el algoritmo principal”

Leer N

R = F(N) llamado de la función

Imprimir “El resultado de la función es:”, R

Fin

2.3 intervalos

2.4 Operadores

Haskell soporta cinco operadores matemáticos básicos:

§ suma (+)

§ resta (-)

§ multiplicación (*)

§ división (/)

§ exponenciación ( ^)

El circunflejo que representa la exponenciación en la mayoría de los teclados saldrá usando la combinación de teclas “alt gr”+” {”, será necesario pulsar la barra espaciadora después de eso para que aparezca el circunflejo.

Veamos algunos ejemplos de funciones que usen estos operadores.



2.3. Intervalos Funciones devuelven siempre el mismo valor  Los lenguajes funcionales puros tienen la propiedad de transparencia referencial  Como consecuencia, en programación funcional, una función siempre devuelve el mismo valor cuando se le llama con los mismos parámetros  Las funciones no modifican ningún estado, no acceden a ninguna variable ni objeto global y modifican su valor Diferencia entre declaración y modificación de variables  En programación funcional pura una vez declarada una variable no se puede modificar su valor  En algunos lenguajes de programación (como Scala) este concepto se refuerza definiendo la variable como inmutable (con la directiva val).  En programación imperativa es habitual modificar el valor de una variable en distintos pasos de ejecución 



2.4. Operadores  En programación declarativa sólo existen valores, no hay referencias.  La distinción entre valores y referencias es fundamental, sin embargo, en la programación imperativa.




jueves, 21 de febrero de 2019

1.2.1 EVALUACION DE EXPRECIONES


1.2. Evaluación de expresiones




Una expresión es una combinación de operadores y operando de cuya evaluación se obtiene un valor. Los operando pueden ser nombres que denoten objetos variables o constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u otras expresiones más simples. La evaluación de una expresión da lugar a un valor de algún tipo, una expresión se dice que es del tipo de su resultado. Ejemplos de expresiones:

a + 5*b
(a >= 0) and ((b+5) > 10)
a
-a * 2 + b
-b + sqrt(b**2 - 4*a*c) 
length(s) > 0

Las expresiones se evalúan de acuerdo con la precedencia 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 al evaluarlas:
Aritméticas: las que devuelven un valor numérico
Lógicas: las que devuelven true o false

Las expresiones se utilizan fundamentalmente en las asignaciones y en las partes condicionales de las sentencias if, while y repeat.

mapa mental


martes, 19 de febrero de 2019

examen

EXAMEN REALIZADO

Estilos De Programacion



            programación

El estilo de programación’ se refiere a la forma en que se da formato al código fuente. 
Para C, esto involucra la forma en que se ubican las llaves, se indenta el código y se utilizan los paréntesis. GNOME tiene una mezcla de estilos de programación y no se obliga el uso de ninguno de ellos. Lo más importante es que el código sea consistente dentro de un programa o una biblioteca — el código con un formato desordenado no es aceptable debido a que es difícil de leer.

Cuando escribas un nuevo programa o biblioteca, sigue un estilo consistente de ubicación de llaves y de indentación. Si no tienes ninguna preferencia personal de estilo, recomendamos el estilo de programación del núcleo de Linux o el estilo de programación de GNU.

Lee el nodo de info (Standards)Writing C en la documentación de GNU. Luego, obtén el código fuente de Linux y lee el archivo linux/Documentation/CodingStyle, e ignora los chistes de Linus. Estos dos documentos te darán una buena idea de nuestras recomendaciones para el código de GNOME.









estilos de programacion



Estilo de programación

‘El estilo de programación’ se refiere a la forma en que se da formato al código fuente. Para C, esto involucra la forma en que se ubican las llaves, se indenta el código y se utilizan los paréntesis. GNOME tiene una mezcla de estilos de programación y no se obliga el uso de ninguno de ellos. Lo más importante es que el código sea consistente dentro de un programa o una biblioteca — el código con un formato desordenado no es aceptable debido a que es difícil de leer.

Cuando escribas un nuevo programa o biblioteca, sigue un estilo consistente de ubicación de llaves y de indentación. Si no tienes ninguna preferencia personal de estilo, recomendamos el estilo de programación del núcleo de Linux o el estilo de programación de GNU.

Lee el nodo de info (Standards)Writing C en la documentación de GNU. Luego, obtén el código fuente de Linux y lee el archivo linux/Documentation/CodingStyle, e ignora los chistes de Linus. Estos dos documentos te darán una buena idea de nuestras recomendaciones para el código de GNOME.

Estilo de indentación

Para el código del núcleo de GNOME preferimos el estilo de indentación del núcleo de Linux. Usa tabuladores de 8 espacios para la indentación.

Usar tabuladores de 8 espacios para indentación proporciona un número de beneficios. Permite que el código sea más fácil de leer, ya que la indentación se marca claramente. También ayuda a mantener el código ordenado forzando a dividir funciones en trozos más modulares y bien definidos — si la indentación va más allá del margen derecho, significa que la función está mal diseñada y que debiera dividirse para hacerla más modular o bien, repensarla.

Los tabuladores de 8 espacios para indentación también ayudan al diseño de funciones que encajen bien en la pantalla, lo cual significa que las personas puedan entender el código sin tener que desplazarse atrás y adelante para entenderlo.

Si usas Emacs, entonces puedes seleccionar el estilo de indentación del núcleo de Linux incluyendo en el archivo .emacs lo siguiente:(add-hook 'c-mode-common-hook (lambda () (c-set-style "k&r") (setq c-basic-offset 8)))


En los nuevos Emacs o con el nuevo cc-mode, puedes ser capaz de hacerlo más simple con:(add-hook 'c-mode-common-hook (lambda () (c-set-style "linux")))




El estilo de indentación de GNU es el predeterminado para Emacs, así que no es necesario agregar nada en el archivo .emacs para habilitarlo. Si deseas seleccionarlo explícitamente, sustituye «gnu» por «linux» en el ejemplo anterior.

Si usas Vim, entonces puedes seleccionar el estilo de indentación del núcleo de Linux incluyendo el siguiente fragmento en el archivo .vimrc:set ts=8 if !exists("autocommands_loaded") let autocommands_loaded = 1 augroup C autocmd BufRead *.c set cindent augroup END endif




Como alternativa puedes seleccionar el estilo de indentación de GNU en Vim usando lo siguiente en el archivo .vimrc: [1]:augroup C autocmd BufRead *.c set cinoptions={.5s,:.5s,+.5s,t0,g0,^-2,e-2,n-2,p2s,(0,=.5s formatoptions=croql cindent shiftwidth=4 tabstop=8 augroup END




Nota

Si sabe personalizar el estilo de indentación en otros editores populares, por favor háganoslo saber y así podemos expandir este documento.

Convenciones de nombres

Es importante seguir una buena convención de nombres para los símbolos de los programas. Es específicamente importante para las bibliotecas, ya que no debería ensuciarse el espacio de nombres global — es muy molesto cuando una biblioteca tiene símbolos nombrados desordenadamente que chocan con nombres que pueda querer usar en sus programas.

Los nombres de las funciones deberían ser de la forma modulo_submodulo_operacion, por ejemplo, gnome_canvas_set_scroll_region o gnome_mime_get_keys. Esta convención elimina las colisiones de nombres de símbolos entre módulos. Es muy importante para las bibliotecas.

Los símbolos deben tener nombres descriptivos. Como Linus dice, no use cntusr(), sino que use count_active_users(). Esto permite que el código sea más fácil de leer y casi se auto documenta.

Intente usar las mismas convenciones de nombre que tienen GTK+ y las bibliotecas de GNOME:



Los nombres de las funciones en minúsculas, con líneas de subrayado para separar palabras, tal como: gnome_canvas_set_scroll_region(),gnome_mime_get_keys().


Las macros y las enumeraciones en mayúsculas, con líneas de subrayado para separar palabras, tal como: GNOMEUIINFO_SUBTREE() para una macro yGNOME_INTERACT_NONE para un valor enumerado.


Los nombres de tipos y estructuras usan una mezcla de mayúsculas y minúsculas, tal como: GnomeCanvasItem, GnomeIconList.

Al utilizar líneas de subrayado para separar palabras el código estará menos apretado y facilita la edición, ya que puede usar las secuencias de teclas que permiten navegar entre palabras más rápidamente en cualquier editor.

Si estás escribiendo una biblioteca, entonces puedes necesitar exportar símbolos que serán usados sólo dentro de la biblioteca. Por ejemplo, dos de los archivos objeto que componen la biblioteca libfoo.so pueden requerir acceder a símbolos ubicados en el otro archivo, pero se tiene la intención que éstos símbolos no sean utilizados desde los programas de usuario. En este caso, coloca una línea de subrayado antes del nombre de la función y haz que la primera palabra siga la convención estándar módulo/submódulo. Por ejemplo, podrías tener una función llamada _foo_internal_frobnicate().

Consistencia entre nombres

Es importante que las variables se nombren de manera consistente. Por ejemplo, un módulo que manipula una lista puedes elegir nombrar las variables que mantienen un puntero a la lista como «l», por elegancia y simplicidad. Sin embargo, es importante que un módulo que manipula widgets y tamaños no use variables llamadas «w» tanto para widgets y anchos («width») (como en valores de ancho/alto); esto podría hacer que el código sea inconsistente y difícil de leer.

Por supuesto, nombre muy cortos y elegantes solamente deberían ser usados para variables locales de funciones. Nunca llame una variable global «x»; use un nombre más largo que indique lo que signific