sábado, 12 de abril de 2014

sistemas numericos

Sistemas numéricos
Convencionalmente diversos conjuntos dotados de "adición" y "multiplicación" se llaman sistemas numéricos. Entre estos conjuntos están los números naturales, los enteros, los racionales, los reales y los complejos, aunque existen otros que generalizan a algunos de los anteriores. Aunque no existe una definición formal de sistema numérico, todos los conjuntos dotados de operaciones binarias que se cuentan convencionalmente entre los sistemas numéricos tienen propiedades comunes.
En todos los sistemas numéricos convencionales hay definidas dos operaciones binarias asociativas denominadas adición y multiplicación, y además se cumple que la multiplicación es distributiva con respecto a la adición. La adición es siempre conmutativa, aunque en algunos sistemas numéricos la multiplicación no siempre es conmutativa 1 ): Para a, b y c elementos cualesquiera de :
·         Propiedad conmutativa de la adición: a + b = b + a
·         Propiedad asociativa de la adición: (a + b) + c = a + (b + c)
·         Propiedad asociativa de la multiplicación: (a • b) • c = a • (b • c)
·         Propiedad distributiva de la multiplicación sobre la adición: a • (b + c) = a • b + a • c
La adición y la multiplicación no necesariamente deben ser las de la aritmética elemental.
Más formalmente un sistema numérico se caracterizan por una séxtupla, donde:
\scriptstyle \mathcal{A} Es un conjunto de axiomas que definen las propiedades algebraicas de las operaciones y conjeturan la posible existencia de cierto tipo de elementos (opuestos, inversos, etc.)
\scriptstyle \mathcal{O} Es un conjunto de axiomas referidos a la teoría del orden, que dan cuenta de ciertas propiedades asociadas a la relaciones existentes ente los elementos.
 Es un conjunto de axiomas topológicos, que posiblemente incluyen la definición de ciertas funciones (distancia) y propiedades (completitud, densidad, etc.)

Ejemplos intuitivos

La mayor parte de ejemplos de sistemas numéricos sencillos están relacionados con extensiones de los números naturales:
·         Los números enteros,  generalizar la idea de contar y permiten formalizar el concepto de deuda o defecto de algo, es decir, en ellos se puede formalizar operaciones como "4 - 7", etc. Este sistema numérico tiene una estructura de anillo conmutativo unitario, una topología discreta trivial. Las propiedades de orden son relativamente simples ya que cualquier conjunto acotado es finito tiene un elemento mínimo y un elemento máximo pertenecientes a dicho conjunto.

·         Los números racionales, permiten formalizar además de la idea de deuda o defecto de algo, la noción de porción de algo, eso implica a su vez propiedades topológicas más complicadas, como la que entre dos números racionales siempre existe al menos otro número racional. Eso hace topológicamente complicados a los racionales ya que un conjunto acotado no tiene porqué tener un máximo o un mínimo (aunque sí una cota superior y una cota inferior). Algebraicamente los racionales tienen estructura de cuerpo. La principal diferencia con los reales es que los racionales no son un conjunto topológicamente completo.

Los restos de módulo 2


Los restos de módulo 2, con las operaciones de suma y multiplicación de restos, forman un sistema numérico. La congruencia de Gauss es una relación de equivalencia. El cociente del conjunto  por una relación de equivalencia lo divide en clases disjuntas. En el caso de las congruencias de módulo 2 lo que se hace es dividir a los enteros en números pares e impares. Las operaciones de suma y multiplicación definidas permiten responder de qué paridad es el resultado de una suma o multiplicación de números pares o impares, en cualquier combinación que se utilice. Los símbolos "0" y "1" representan a los restos posibles de la división entera por 2: 0 para los números pares y 1 para los impares. La expresión 1 + 1 = 0 es equivalente a: impar + impar = par.
Tabla de sumar
+
0
1
0
0
1
1
1
0

algoritmos

Algoritmos
Un algoritmo es una secuencia de pasos para resolver un problema.
Los pasos deben estar muy bien definidos, y tienen que describir sin ambigüedades cómo llegar desde el inicio hasta el final.
Componentes de un algoritmo
Conceptualmente, un algoritmo tiene tres componentes:
  1. la entrada: son los datos sobre los que el algoritmo opera;
  2. el proceso: son los pasos que hay que seguir, utilizando la entrada;
  3. la salida: es el resultado que entrega el algoritmo.
El proceso es una secuencia de sentencias, que debe ser realizada en orden. El proceso también puede tener ciclos (grupos de sentencias que son ejecutadas varias veces) y condicionales (grupos de sentencias que sólo son ejecutadas bajo ciertas condiciones).
Medios de expresión de un algoritmo
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
1.   Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
2.   Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
3.   Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.

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.
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.

Pseudocódigo

El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) 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.
Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema.

Sistemas formales

La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Los modelos más comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas. Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación.

Implementación

Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.

Variables

Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iníciales a variables:
1.   Mediante una sentencia de asignación.
2.   Mediante un procedimiento de entrada de datos (por ejemplo: 'read').


Análisis de algoritmos
Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los casos, su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje muy simple tal como Léxico, cuyos códigos pueden estar en el idioma del programador.
Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento, mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera algún dispositivo físico que fuera capaz de funcionar eternamente. En este último caso, la finalización con éxito del algoritmo no se podría definir como la terminación de este con una salida satisfactoria, sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la ejecución del algoritmo. Por ejemplo, un algoritmo que verifica que hay más ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa correctamente, el valor devuelto por el algoritmo será válido, hasta que evalúe el siguiente dígito binario. De esta forma, mientras evalúa la siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y, en cualquier otro caso, devolverá una mezcla de señales positivas y negativas.