jueves, 23 de septiembre de 2010

UNIDAD 2

SISTEMA DECIMAL   

El principio de agrupamiento de este sistema es diez, en donde cada
10 unidades se forma otra de carácter superior, la cual se escribe a la
izquierda de la primera de las unidades. Esto es ilustrado en el ábaco,
en donde cada vez que tenemos 10 fichas en una varilla, las transformamos
en una de la varilla inmediatamente izquierda y la ubicamos en ésta, con
lo cual obtenemos que 10 unidades equivales a una decena, que 10 decenas
equivalen a 1 centena y así sucesivamente.

SISTEMA BINARIO

El sistema binario, en matemáticas e informática, es un sistema de numeración
en el que los números se representan utilizando solamente las cifras cero y
uno (0 y 1). Es el que se utiliza en las computadoras, pues trabajan internamente
con dos niveles de voltaje, por lo que su sistema de numeración natural es el
sistema binario (encendido 1, apagado 0).

En binario, tan sólo existen dos dígitos, el cero y el uno. Hablamos, por tanto,
de un sistema en base dos, en el que 2 es el peso relativo de cada cifra respecto
de la que se encuentra a la derecha.

El sistema de numeración binario o de base 2 es un sistema que utiliza sólo dos
símbolos para representar un número. Los agrupamientos se realizan de 2 en 2: dos
unidades de un orden forman la unidad de orden superior siguiente. Este sistema
de numeración es el utilizado por las computadoras para realizar todas sus operaciones.

CONVERSIÓN DE DECIMAL A BINARIO

Para la conversión de decimal a binario se emplean dos métodos.
El primero es divisiones sucesivas y el segundo es suma de potencias de 2.

Por divisiones sucesivas

Se va dividiendo la cantidad decimal por 2, apuntando los residuos,
hasta obtener un cociente cero.

Ejemplo

Convertir el número 15310 a binario.
153/2= 76 RESIDUO 1
76/2= 38   RESIDUO 0
38/2= 19   RESIDUO 0
19/2= 9     RESIDUO 1
972= 4      RESIDUO 1
4/2= 2       RESIDUO 0
2/2= 1       RESIDUO 0
1/2= 0       RESIDUO 1

El resultado en binario de 15310 es 10011001, ya que se toma el valor
del residuo en este caso de abajo hacia arriba

Por sumas de potencias de 2

Este método consiste en determinar el conjunto de pesos binarios cuya
suma equivalga al número decimal.

Ejemplo

Convertir el número 15310 a binario.

15310 = 2(potencia 7) + 2(potencia 4) + 2(potencia 3) + 2(potencia 0) = 128 + 16 +8 +1

15310= 10011001(base 2)

Como se aprecia, si se cuenta con alguna familiaridad con las potencias
de 2 este último método es más rápido.
CONVERSIÓN DE BINARIO A DECIMAL

Para convertir un número en base 2 a base 10 (de binario a decimal), se toma cada
dígito de derecha a izquierda y se multiplica por 2 elevado a la potencia que
corresponda a su posición, de modo que el primero se multiplica por 2(A LA POTENCIA 0),
el segundo por 2(A LA POTENCIA 1), el tercero por 2 (A LA POTENCIA 2), y así sucesivamente.
La suma de todos los productos nos dará el valor decimal.

Para convertir el numero binario 11011001 se hace lo siguiente:

1*2(a la potencia de 0)= 1
0*2(a la potencia de 1)= 0
0*2(a la potencia de 2)= 0
1*2(a la potencia de 3)= 8
1*2(a la potencia de 4)= 16
0*2(a la potencia de 5)= 0
1*2(a la potencia de 6)= 64
1*2(a la potencia de 7)= 128

Se suman los resultados de las multiplicaciones y el valor que resulte sera el equivalente
en numero decimal.


SISTEMA DE NUMERACIÓN OCTAL

En el sistema de numeración octal, los números se representan mediante ocho dígitos diferentes: 0, 1, 2, 3, 4, 5, 6 y 7. Cada dígito tiene, naturalmente, un valor distinto dependiendo del lu­gar que ocupen. El valor de cada una de las posiciones viene determinado por las potencias de base 8.
Por ejemplo, el número octal 2738 tiene un valor que se calcula así:

2*83 + 7*82 + 3*81 = 2*512 + 7*64 + 3*8 = 149610
                                                                    2738 = 1 49610

CONVERSIÓN DE DECIMAL A OCTAL

La conversión de un número decimal a octal se hace con la misma técnica que ya hemos utilizado en la conversión a binario, mediante divisiones sucesivas por 8 y colocando los restos obtenidos en orden inverso. Por ejemplo, para escribir en octal el número decimal 12210 tendremos que hacer las siguientes divisiones:

122 / 8 = 15    Resto: 2
15 / 8 = 1        Resto: 7
1 / 8 = 0          Resto: 1
Tomando los restos obtenidos en orden inverso tendremos la cifra octal:

12210 = 1728 

 CONVERSIÓN DE OCTAL A DECIMAL

La conversión de un número octal a decimal es igualmente sencilla, conociendo el peso de cada posición en una cifra octal. Por ejemplo, para convertir el número 2378 a decimal basta con desarrollar el valor de cada dígito:

2*82 + 3*81 + 7*80 = 128 + 24 + 7 = 15910

2378 = 15910

SISTEMA DE NUMERACIÓN HEXADECIMAL

En el sistema hexadecimal los números se representan con dieciseis símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Se utilizan los caracteres A, B, C, D, E y F representando las cantidades decima­les 10, 11, 12, 13, 14 y 15 respectivamente, porque no hay dígitos mayores que 9 en el sistema decimal. El valor de cada uno de estos símbolos depende, como es lógico, de su posición, que se calcula mediante potencias de base 16.

CONVERSIÓN DE HEXADECIMAL A DECIMAL

Calculemos, el valor del número hexadecimal 1A3F16:

1A3F16 = 1*163 + A*162 + 3*161 + F*160

1*4096 + 10*256 + 3*16 + 15*1 = 6719

1A3F16 = 671910

CONVERSIÓN DE DECIMAL A HEXADECIMAL

Utilizando la técnica habitual de divisiones sucesivas, la conversión de un número decimal a hexadecimal. Por ejemplo, para convertir a hexadecimal del número 173510 será necesario hacer las siguientes divisiones:


1735 / 16 = 108    Resto: 7
108 / 16 = 6          Resto: C es decir, 1210
6 / 16 = 0               Resto: 6

De ahí que, tomando los restos en orden inverso, resolvemos el número en hexadecimal:

173510 = 6C716

BIBLIOGRAFÍA
Cuaderno de apuntes y presentación de exposición 


Esta es la liga para el podcast


http://blip.tv/file/4076606/

 COMPUERTAS LÓGICAS

Hay disponible una gran variedad de compuertas estándar, cada una con un comportamiento
perfectamente definido, y es posible combinarlas entre si para obtener funciones nuevas.
Desde el punto de vista práctico, podemos considerar a cada compuerta como una caja negra, en la que se introducen valores digitales en sus entradas, y el valor del resultado aparece en la salida.
Cada compuerta tiene asociada una tabla de verdad, que expresa en forma de lista el estado de su salida para cada combinación posible de estados en la(s) entrada(s).
Si bien al pensar en la electrónica digital es muy común que asumamos que se trata de una tecnología relativamente nueva, vale la pena recordar que Claude E. Shannon experimentó con relés e interruptores conectados en serie, paralelo u otras configuraciones para crear las primeras compuertas lógicas funcionales. En la actualidad, una compuerta es un conjunto de transistores dentro de un circuito integrado, que puede contener cientos de ellas. De hecho, un microprocesador no es más que un chip compuesto por millones de compuertas lógicas.
Veremos a continuación que símbolo se utiliza para cada compuerta.
EXPRESIONES BOOLEANAS

Definición. Una expresión booleana es una sucesión de símbolos que incluye 0,1, algunas variables y las operaciones booleanas.

Para ser más precisos definamos una expresión booleana en n variables x1, x2..., xn recursivamente como: 


  • Si E1 y E2 son expresiones booleanas en x1, x2,... xn también lo son E1 + E2; E1 E2 y E1’.










  • Los símbolos 0 y 1 y x1, x2,..., xn son expresiones booleanas en x1, x2,... x










  • TABLA DE VERDAD

    La tabla de valores de verdad, también conocida como tabla de verdad, es una herramienta desarrollada por Charles Peirce en los años 1880, siendo sin embargo más popular el formato que Ludwig Wittgenstein desarrolló en su Tractatus logico-philosophicus, publicado en 1918 por Bertrand Russell.

    Se emplean en lógica para determinar los posibles valores de verdad de una expresión o proposición. O si un esquema de inferencia, como argumento, es formalmente válido mostrando que, efectivamente, es una tautología. 
    Consiste en abreviar o simbolizar las oraciones o juicios, que en la lógica matemática se llaman proposiciones. Estas proposiciones se reducen en el lenguaje formal a una sola letra, que llamamos variable, y la simbolizamos con las letras minúsculas del alfabeto que van de la “p” hasta el final del abecedario.

    COMPUERTA LÓGICA "AND"

    Con dos o más entradas, esta compuerta realiza la función booleana de la multiplicación.
    Su salida será un “1” cuando todas sus entradas también estén en nivel alto. En cualquier otro caso, la salida será un “0”. El operador AND se lo asocia a la multiplicación, de la misma forma que al operador SI se lo asociaba a la igualdad.
    En efecto, el resultado de multiplicar entre si diferentes valores binarios solo dará como resultado “1” cuando todos ellos también sean 1.




    COMPUERTA LÓGICA "OR"

    La función booleana que realiza la compuerta OR es la asociada a la suma, y matemá-ticamente la expresamos como “+”.
    Esta compuerta presenta un estado alto en su salida cuando al menos una de sus entradas también esta en estado alto.
    En cualquier otro caso, la salida será 0.
    Tal como ocurre con las compuertas AND, el número de entradas puede ser mayor a dos.


    COMPUERTA LÓGICA "NOT"

    Esta compuerta presenta en su salida un valor que es el opuesto del que esta presente en su única entrada. En efecto, su función es la negación, y comparte con la compuerta IF la caracte- rística de tener solo una entrada.
    Se utiliza cuando es necesario tener disponible un valor lógico opuesto a uno dado. La figura muestra el símbolo utilizado en los esquemas de circuitos para representar esta compuerta, 


    COMPUERTA LÓGICA "NAND"

    Cualquier compuerta lógica se puede negar, esto es, invertir el estado de su salida, simplemente agregando una compuerta NOT que realice esa tarea. Debido a que es una situación muy común,se fabrican compuertas que ya están negadas internamente. Este
    es el caso de la compuerta NAND: es simplemente la negación de la compuerta AND vista anteriormente.
    Esto modifica su tabla de verdad, de hecho la invierte (se dice que la niega) quedando que la salida solo será un 0 cuando todas sus entradas estén en 1.
    El pequeño círculo en su salida es el que simboliza la negación. El numero de entradas debe ser como mínimo de dos, pero no es raro encontrar NAND de 3 o mas entradas.


    COMPUERTA LÓGICA "NOR"

    De forma similar a lo explicado con la compuerta NAND, una compuerta NOR es la negación de una compuerta OR, obtenida agregando una etapa NOT en su salida. 
     
    BIBLIOGRAFÍA
    http://www.ucontrol.com.ar/PDF/compuertasl.pdf











    sábado, 18 de septiembre de 2010

    UNIDAD 3

    PROBLEMA

    ¿Qué es?
    Un problema es una pregunta sobre objetos y estructuras que requiere una explicación y demostración.

    La determinación del problema es una operación mediante la cual se especifica claramente y de un modo concreto sobre qué se va a realizar la investigación.
    El problema, responde al ¨ POR QUE¨, de la Investigación lo podemos definir como la situación propia de un objeto, que provoca una necesidad en un sujeto, el cual desarrollará una actividad para transformar la situación mencionada.
    El problema es objetivo en tanto es una situación presente en el objeto; pero es subjetivo, pues para que exista el problema, la situación tiene que generar una necesidad en el sujeto.

    ELEMENTOS Y RELACIONES DEL PROBLEMA
    Son elementos aquellas características de la situación problemática imprescindibles para el enunciado del problema, es decir, sumados los elementos del problema se tiene como resultado la estructura de la descripción del problema.
    Para poder abarcar la búsqueda de una solución a un problema, el investigador debe precisar la naturaleza y las dimensiones del mismo. Para ello, se requiere reunir datos empíricos que se puedan relacionar con el problema y posibles explicaciones del mismo.
    Para que la lista obtenida de los elementos del problema adquiera verdadero significado, el investigador procurará hallar las relaciones que existen entre los hechos empíricos, por una parte, y entre las explicaciones racionales por la otra, y tratara de relacionar aquellos con estas.
    Luego de incorporar nuevos datos a la lista de elementos, eliminar los que considere carentes de importancia, el investigador realizará un profundo examen de los supuestos en que se basan los hechos, explicaciones y relaciones halladas. 

    HARDWARE

    ¿Qué es?

    En computación, término inglés que hace referencia a cualquier componente físico tecnológico, que trabaja o interactúa de algún modo con la computadora. No sólo incluye elementos internos como el disco duro, CD-ROM, disquetera, sino que también hace referencia al cableado, circuitos, gabinete, etc. E incluso hace referencia a elementos externos como la impresora, el mouse, el teclado, el monitor y demás periféricos.

    ¿QUÉ ES UN SISTEMA OPERATIVO?

    Un Sistema Operativo (SO) es el software básico de una computadora que provee una interfaz entre el resto de programas del ordenador, los dispositivos hardware y el usuario.
    Las funciones básicas del Sistema Operativo son administrar los recursos de la máquina, coordinar el hardware y organizar archivos y directorios en dispositivos de almacenamiento.
    Los Sistemas Operativos más utilizados son dos, Windows, Linux y Mac. Algunos SO ya vienen con un navegador integrado, como Windows que trae el navegador Internet Explorer.
    PROGRAMAS DE APLICACIÓN

    En la informática, un programa de aplicación es un tipo de software diseñado para facilitar al usuario la concreción de un cierto trabajo. Esta característica lo diferencia de otros tipos de programas, como los sistemas operativos (que son los que hacen funcionar a la computadora), los lenguajes de programación (que permiten crear los programas informáticos en general) y las utilidades (que realizan tareas de mantenimiento o de uso general).

    LENGUAJE DE PROGRAMACIÓN 

    Los lenguajes de programación de una computadora en particular se conoce como código de máquinas o lenguaje de máquinas.
    Estos lenguajes codificados en una computadora específica no podrán ser ejecutados en otra computadora diferente.

    Para que estos programas funcionen para diferentes computadoras hay que realizar una versión para cada una de ellas, lo que implica el aumento del costo de desarrollo.

    Por otra parte, los lenguajes de programación en código de máquina son verdaderamente difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin sentido nemotécnico.

    Los lenguajes de programación facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leídas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.

    Los lenguajes de programación representan en forma simbólica y en manera de un texto los códigos que podrán ser leídos por una persona.

    Los lenguajes de programación son independientes de las computadoras a utilizar.
    Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programación simbólico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la información en forma de texto, representada en los lenguajes de programación simbólicos.


    BIBLIOGRAFÍA

    GENERACIONES DE LOS LENGUAJES DE PROGRAMACIÓN

    Los lenguajes de programación se dividen en 2 categorías fundamentales:
    bajo nivel: Son dependientes de la máquina, están diseñados para ejecutarse en una determinada computadora. A esta categoría pertenecen las 2 primeras generaciones. Alto Nivel: Son independientes de la máquina y se pueden utilizar en una variedad de computadoras. Pertenecen a esta categoría la tercera y la cuarta generación. Los lenguajes de más alto nivel no ofrecen necesariamente mayores capacidades de programación, pero si ofrecen una interacción programador/computadora más avanzada. Cuanto más alto es el nivel del lenguaje, más sencillo es comprenderlo y utilizarlo.
    Cada generación de lenguajes es más fácil de usar y más parecida a un lenguaje natural que su predecesores. Los lenguajes posteriores a la cuarta generación se conocen como lenguajes de muy alto nivel. Son lenguajes de muy alto nivel los generadores de aplicaciones y los naturales.
    En cada nuevo nivel se requieren menos instrucciones para indicar a la computadora que efectúe una tarea particular. Pero los lenguajes de alto nivel son sólo una ayuda para el programador. Un mayor nivel significa que son necesarios menos comandos, debido a que cada comando o mandato de alto nivel reemplaza muchas instrucciones de nivel inferior.


    Generaciones   
    La evolución de los lenguajes de programación se puede dividir en 5 etapas o generaciones.
    Primera generación: lenguaje maquina.
    Segunda generación: se crearon los primeros lenguajes ensambladores.
    Tercera generación: se crean los primeros lenguajes de alto nivel. Ej. C, Pascal, Cobol…
    Cuarta generación. Son los lenguajes capaces de generar código por si solos, son los llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el lenguaje. Aquí también se encuentran los lenguajes orientados a objetos, haciendo posible la reutilización de partes del código para otros programas. Ej. Visual, Natural Adabes…
    Quinta generación: aquí se encuentran los lenguajes orientados a la inteligencia artificial. Estos lenguajes todavía están poco desarrollados. Ej. LISP

    BIBLIOGRAFÍA
     
    http://www.desarrolloweb.com/articulos/2358.php
    http://www.mailxmail.com/curso-componentes-pc-s/generaciones-lenguajes-programacion 


    ESTRUCTURAS BÁSICAS DE DIAGRAMAS DE FLUJO

    Un problema se puede dividir en acciones elementales o instrucciones, usando un número limitado de estructuras de control (básicas) y sus combinaciones que pueden servir para resolver dicho problema.
    Las Estructuras Básicas pueden ser:

    Secuenciales: cuando una instrucción del programa sigue a otra.
    Selección o decisión: acciones en las que la ejecución de alguna dependerá de que se cumplan una o varias condiciones. Repetición, Iteración: cuando un proceso se repite en tanto cierta condición sea establecida para finalizar ese proceso
    .
    ESTRUCTURAS BÁSICAS.
    Tipos de estructuras de programación. Estructuras básicas y secuencial.
    Estructura Secuencial.
    Se caracteriza porque una acción se ejecuta detrás de otra. El flujo del programa coincide con el orden físico en el que se han ido poniendo las instrucciones. Dentro de este tipo podemos encontrar operaciones de inicio/fin, inicialización de variables, operaciones de asignación, cálculo, sumarización, etc. Este tipo de estructura se basa en las 5 fases de que consta todo algoritmo o programa:
    Definición de variables (Declaración),inicialización de variables,.lectura de datos,cálculo, salida
      
    Representación en Diagrama de Flujo para el ejemplo:

      
    Tipos de estructuras de programación. Estructuras básicas y secuencial.





    Tipos de estructuras selectivas. Estructura simple.

    La especificación formal de algoritmos tiene realmente utilidad cuando el algoritmo requiere una descripción más complicada que una lista sencilla de instrucciones. Este es el caso cuando existen un número de posibles alternativas resultantes de la evaluación de una determinada condición.
    Estas estructuras se identifican porque en la fase de solución del problema existe algún punto en el cual es necesario establecer una pregunta, para decidir si ciertas acciones deben realizarse o no.
    Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if - then - else o en español si - entonces - sino) y en flujograma con una figura geométrica en forma de rombo.
    Las estructuras selectivas o alternativas se clasifican en:
    a) Simples
    b) Dobles
    c) Compuestas
    d) Múltiples

    ESTRUCTURAS SELECTIVAS SIMPLES.

    Se identifican porque están compuestos únicamente de una condición. La estructura si - entonces evalúa la condición y en tal caso:
    Si la condición es verdadera, entonces ejecuta la acción Si (o acciones si son varias).
    Si la condición es falsa, entonces no se hace nada.

    Español                      Inglés
    Si <condición>            If <condición>
    Entonces                    then
    <acción Si>                <acción Si>
    fin_si                          endif

     Estructura de selección doble.

    Son estructuras lógicas que permiten controlar la ejecución de varias acciones y se utilizan cuando se tienen dos opciones de acción, por la naturaleza de estas se debe ejecutar una o la otra, pero no ambas a la vez, es decir, son mutuamente excluyentes.
    Representación pseudocodificada..

    Español                                    Inglés
    Si <condición> entonces             If <condición> then
    <acción S1>                             <acción S1>
    sino                                          else
    <acción S2>                             <acción S2>
    Fin_Si                                      End_if
    Entonces, si una condición C es verdadera, se ejecuta la acción S1 y si es falsa, se ejecuta la acción S2.
     
    Estructura de selección doble.


    Estructuras selectivas compuestas.


    En la solución de problemas encontramos numerosos casos en los que luego de tomar una decisión y marcar el camino correspondiente a seguir, es necesario tomar otra decisión. Dicho proceso puede repetirse numerosas veces. En aquellos problemas en donde un bloque condicional incluye otro bloque condicional se dice que un bloque está anidado dentro del otro.


    Ejemplo
    Dados los datos A, B y C que representan números enteros diferentes, construir un algoritmo para escribir estos números en forma descendente. Este es un ejemplo de los algoritmos conocidos como de Lógica Pura, ya que poseen muchas decisiones y muchas bifurcaciones.
    Salida: A, B y C ordenados descendentemente.
    Entradas: A, B y C.
    La dinámica del problema es comparar dos números a la vez para conocer cuál es el mayor.
    Estructuras selectivas compuestas.

    Con frecuencia es necesario que existan más de dos elecciones posibles. Este problema se podría resolver por estructuras selectivas simples o dobles, anidadas o en cascada, pero si el número de alternativas es grande puede plantear serios problemas de escritura y de legibilidad.
    Usando la estructura de decisión múltiple se evaluará una expresión que podrá tomar n valores distintos, 1, 2 , 3, ....,n y según que elija uno de estos valores en la condición, se realizará una de las n acciones o lo que es igual, el flujo del algoritmo seguirá sólo un determinado camino entre los n posibles.
    Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la acción 1, si toma el valor 2 ejecutará la acción 2, si toma el valor N realizará la acción N.
    Estructura selectiva múltiple.


    Estructuras repetitivas e iterativas.

    Son operaciones que se deben ejecutar un número repetido de veces. El conjunto de instrucciones que se ejecuta repetidamente cierto número de veces, se llama Ciclo, Bucle o Lazo.
    Iteración
    es cada una de las diferentes pasadas o ejecuciones de todas las instrucciones contenidas en el bucle.
    Fases de un Programa Cíclico :
    1. Entrada de datos e instrucciones previas
    2. Lazo o bucle
    3. Instrucciones finales o resto del proceso
    4. Salida de resultado

    Ejemplo de bucle infinito:
    Estructuras repetitivas e iterativas.

    En el flujograma anterior, observa que la flecha que se regresa hacia arriba nos está indicando que hay que volver a evaluar la expresión. En ese caso como el bucle es infinito, no se tiene una condición para terminar y se estará haciendo siempre. En el siguiente ejemplo, ya se agregó una condición, la cual nos permitirá finalizar la ejecución del bucle en el caso en que la condición se cumpla.

    Ejemplo de bucle finito:
     Estructuras repetitivas e iterativas.


    Bucles Repetitivos:
    A continuación, te muestro tres diseños de estructuras cíclicas: las independientes son cuando los bucles se realiza uno primero hasta que se cumple la condición y solo en ese caso se entra al bucle B.
    En los ciclos anidados, al entrar a una estructura de repetición, dentro de ella se encuentra otra. La más interna se termina de realizar y se continúa con la externa hasta que la condición se cumple.
    En los bucles cruzados, los cuales no son convenientes de utilizar, se tiene que iniciamos un bucle y no se ha terminado cuando empezamos otro, luego utilizamos estructuras goto (saltos) para pasar al bucle externo y se quedan entrelazados.
    Esto puede ocasionar que el programa pierda el control de cuál proceso se está ejecutando y podamos obtener resultados erróneos. Veamos gráficamente el diseño de estas tres formas cíclicas:
    Estructuras repetitivas e iterativas.
    BIBLIOGRAFÍA
      


    Diseñar un algoritmo que lea cuatro variables y calcule e imprima el producto, suma y media aritmética.


    Este es la liga que para el podcast. http://blip.tv/file/4300840/