martes, 5 de marzo de 2013

Una nota sobre los punteros

Volviendo a practicar con C, y nos volvemos a encontrar las míticas criaturas llamadas "punteros" del lenguaje C, esas siniestras y crueles seres que confunden y aterran al programador nuevo.

Entonces ¿por que están implementadas?, ¿Para que sirven?, bueno en realidad los Punteros, es algo sencillo, los estúpidos y ridículos usos que les dan  es lo que espanta a la gente.

¿Que son?, cuando tienes un arreglo, digamos array[i], tenemos  el arreglo "array" y su indicie, llamado 'i' por la misma razón, si el valor de i es 0 entonces obtenemos el valor en array[0], si el indice es 1, entonces obtenemos el valor en array[1].

Si 'i' es el indice, y el indice es la dirección en donde esta la información del arreglo, entonces el Arreglo como tal, es un conjunto de direcciones, pero localizadas en la memoria de la maquina, y los indices de un arreglo, nos dicen en que parte de la maquina esta.

Esto permite a C pensar en tu computadora como si fuera un enorme arreglo de bytes, un montón de espacio en memoria para ser acomodados.

A todo esto, ¿Que son?, bueno un puntero, es un "apuntador" a esa direccion en memoria, los punteros no almacenan nada, solo "apuntan" a donde esta, imaginemos que tu arreglo es un librero,  y quieres el libro que esta en libros[3][2], vas a esa dirección y lo tomas, un puntero seria como la ficha bibliográfica  te dice en donde esta, en que parte esta, sin embargo NO ES el libro, solo te dice donde esta.

Recuerda este proceso que pasa cuando asignas un puntero:

-Tu computadora crea un bloque de memoria en si misma, que representa al arreglo
-"Apuntamos" el inicio de ese bloque de memoria
-Se usa el "indice", que en este caso es Array[i], para obtener el elemento en una parte del bloque de memoria
-el puntero esta "apuntando" al inicio del bloque de memoria, si queremos obtener el mismo dato tenemos que hacer puntero+i, osea mueve el puntero i posiciones.

C sabe a donde apunta el puntero, sabe que tipo de datos es a lo que apunta, el tamaño de esos datos y como obtenerte esos datos. Pero al igual que los arreglos, los punteros pueden ser "modificados", sin embargo el puntero NO ES  otro arreglo, es el mismo arreglo, así que si modificas un puntero, terminaras modificando el arreglo original, aquí es donde la gente tiene problemas.

Imagina que tienes el arreglo:

 char *Caminantes[] = {"Jace","Chandra","Garruck","Ajani", "Liliana"}

, creamos un puntero

char *puntero_caminates = Caminantes;

agregamos un caminante
Caminantes.add("Karn") //No es la sintaxis correcta, pero me entienden

nuestro arreglo queda como

Caminantes ={"Jace","Chandra","Garruck","Ajani", "Liliana","Karn"}

que pasa si hacemos

puntero_caminates.add("Tezzert");

Tezzert es agregado,PERO al arreglo de caminantes, no en puntero, por que no es un arreglo

asi que tenemos

Caminantes ={"Jace","Chandra","Garruck","Ajani", "Liliana","Karn", "Tezzeret"}

Los punteros tienen varios usos prácticos:

-Le pides al sistema operativo trabajar con el bloque de memoria creado, incluso funciona con struct y strings
-Pasar grandes bloques de memoria a funciones con punteros para no tener que pasar todo.

Digamos que tienes que pasar un bloque de 200 megas, si quieres "pasarlo" de manera normal, tendrías que crear una variable para almacenarla, así que la computadora reservaría otros 200 megas, el del arreglo normal y el del arreglo nuevo, y si es una estructura que tienes que estar pasando entre funciones es muy desgastante en memoria. Con un puntero sin embargo solo pasas el "AHI ESTA" y no creas nada adicional.

-Tomar la dirección de una función para hacer llamadas dinámicas

Los punteros te van a mostrar como esta ese bloque de memoria en ese momento, así que si fue afectado por algún otra forma puedes obtener ese bloque con un puntero,

-ACompleto analizis de un bloque de memoria para convertir los bytes de un puerto de red en estructura de datos o convertirlo a archivo


Para cualquier otro uso, se deberían usar arreglos, antes los punteros se usaban con mucha frecuencia por que el compilador no optimizaba los arreglos de forma efectiva, así que tener 1 o 2 arreglos nuevos alentaba mucho tu programa, ahora ya no es el caso.

Syntaxis de los puntero

Como nota adicional:

type *ptr
"un puntero "type" llamado  ptr"
*ptr
"El valor de lo que sea que ptr apunta"
*(ptr + i)
"el valor de lo que sea que ptr apunta + i"
&thing
"la direccion de thing"
type *ptr = &thing
"un puntero type llamado ptr inicializado a la direccion de thing"
ptr++
"incrementar donde ptr apunta"

viernes, 1 de marzo de 2013

Estructura de datos fundamentales

Del libro "Algoritmo y estructura de datos" de Wirth Nicklaus

Introducción

La computadora digital moderna fue inventada e ideada como dispositivo que debe facilitar y acelerar operaciones de calculo complicadas y que consumen mucho tiempo.En la mayoría de las aplicaciones su capacidad de almacenar y acceder a grandes cantidades de información se ha vuelto su principal característica  Su capacidad de contar o computar, ese ha vuelto irrelevante.

En la mayoría de los casos, esta información representa una abstracción de una parte de la realidad. La información que se ocupa es un conjunto de datos del problema real. Por lo tanto, los datos representan una abstracción de la realidad en el sentido que ciertas propiedades y características de los objetos reales son ignorados por que son irrelevantes para el problema. Una abstracción es por tanto una simplificación de hechos.

Al resolver un problema con o sin una computadora se necesita elegir una abstracción de la realidad. Esta acción debe ser guiada por el problema a resolver. Luego una elección de esta información  que normalmente por las herramientas usadas para resolver el problema, en este caso los recursos que proporciona la computadora.

Generalmente se sabe que las computadoras utilizan la numeración binaria. Que es inadecuada para los seres humanos, pero es ideal para las computadoras ya que se puede representar el 0 y 1 por la ausencia o presencia de corriente eléctrica, carga eléctrica, o campos magnéticos.

Un lenguaje de programación representa a una computadora abstracta capaz de interpretar los términos que se utilizan en este lenguaje. Así  los programadores que utiliza este lenguaje de nivel superior queda liberado de cuestiones referentes a la representación numérica para la computadora de una instrucción en especifico.

La ventaja de usar un lenguaje de programación es que incluye un conjunto conveniente de abstracciones básicas comunes a muchos problemas de procesamiento de datos. Es mas fácil diseñar un programa basado en el razonamiento con nociones bien conocidas de números  conjuntos, secuencias y repeticiones que en bits, unidades de almacenamiento y saltos.

Cuanto mas próximas estén a una cierta computadora las abstracciones, mas fácil sera hacer una elección de la representación para el ingeniero o implantador del lenguaje y mayor sera la probabilidad de que una sola elección sea adecuada para todas las aplicaciones imaginables.

Sin embargo, también hay que considerar el hecho de que si una abstracción base de un lenguaje es muy especifica, otros programadores podrán usarla de una forma errónea.

jueves, 14 de febrero de 2013

Ejercicios de Razonamiento 2

Seguimos con los ejercicios de Razonamiento

2. De tres prisioneros que se hallaban en cierta cárcel  uno tenia visión normal, el otro tenia un solo ojo y el tercero era totalmente ciego.  Los tres eran, por lo menos, de inteligencia media. El carcelero dijo a los prisioneros que de un conjunto de tres sombres blancos y dos rojos, eligiria tres de ellos y los colocaría sobre sus cabezas. Se prohibía a cada uno de ellos que vieran el color del sombrero, que tenia sobre su propia cabeza.

Se los reunió y el carcelero ofreció la libertad al prisionero con visión normal si podía decir de que color era el sombre que tenia sobre su cabeza. El prisionero confeso que no podía; Luego, el carcelero ofreció la libertad al prisionero de un solo ojo si podía decir el color de su sombrero, confeso que no podía  El carcelero no se molesto en ofrecerle el trato al ciego, pero a pedido de este acepto concederle la misma oportunidad  El prisionero ciego esbozo entonces una ancha sonrisa y dijo "No necesito de mi vista; pues , por lo que mis amigos con ojos han dicho, veo claramente que mi sombrero es blanco".

¿Como fue capaz el prisionero ciego de saber el color de su sombrero cuando los demás no pudieron?

Bueno vamos a desglosar el problema, tenemos los siguientes datos

Hay 5 sombrero, 3 blancos y 2 rojos
Hay 3 prisioneros, pero 1 de ellos no ve nada

Ya que son 3 prisioneros, los sombreros se pueden acomodar de las siguientes formas

3 blancos a cada uno
2 rojos y 1 blanco
2 blancos y 1 rojo

Consideremos la capacidad de los primeros prisioneros de poder ver.

Premisa 1: Si hubieran visto 2 sombreros blancos, entonces había una posibilidad de que su sombrero hubiera habido una posibilidad de que su propio sombrero fuera blanco o rojo

Premisa 2: Si hubieran visto 2 sombreros rojos, entonces por deducción  su propio sombrero era blanco, ya que no hay mas sombrero rojos

Premisa 3: Si hubiera visto 1 sombreo blanco y 1 sombrero rojo, eso quiere decir que su propio sombrero puede ser blanco o rojo.

Ahora, hay 2 prisioneros que pueden ver, y los 2 prisioneros no pudieron dar una respuesta, eso quiere decir que la premisa 2 es falsa para los prisioneros que pueden ver.

Ahora ambos prisioneros no pudieron responder, si ambos hubieran visto sombreros blancos, es muy probable que hubieran escogido blancos con seguridad, y pensaran que los "sombreros rojos", eran una mentira, sin embargo, no pudieron ni deducirlo, así que la única posibilidad es que ambos prisioneros videntes vieran un sombrero rojo y un sombrero blanco.

Digamos ahora que hay 2 sombreros rojos y 1 sombrero blanco,  el de vista normal vería el rojo del tuerto y el blanco del ciego, y tendría duda del propio  el tuerto prisionero vería el rojo del de vista normal, y el blanco del ciego, y tendría duda del propio,

Conclusión: Al no poder deducir su propio color, eso le da a entender al ciego que su amigos videntes están en la situación en la que no saben con seguridad cual es su sombrero  osea que cada uno ve los resultados de la premisa 3, como cada uno de los videntes están suficientemente inseguros para no poder deducirlo, eso quiere decir que cada uno tiene un sombrero rojo, que el otro puede ver, pero como solo 2 son sombreros rojos, entonces el del ciego es sin duda un sombrero blanco

miércoles, 13 de febrero de 2013

Ejercicios de razonamiento

Ejercicios de razonamiento

Los siguientes problemas exigen razonamiento para su solución.
Para probar que una respuesta es correcta, una vez hallada, se necesita un razonamiento cuyas premisas estén contenidas en el enunciado del problema, y cuya conclusión sea la respuesta al mismo. Se recomienda al lector a que, al trabajar en estos problemas, se preocupe no solamente de hallar la respuesta correcta, si no también de formular razonamiento que demuestren corrección de las respuestas.

1. En una cierta comunidad mítica  los políticos siempre mienten, y los no políticos siempre dicen la verdad. Un extranjero se encuentra con tres nativos, y pregunta al primero de ellos si es político  Este responde a la pregunta. El segundo nativo informa, entonces, que el primer político negó ser político  Pero el tercer nativo afirma que el primer nativo es realmente un político  ¿Cuantos de estos 3 nativos eran políticos?

Premisa: Los políticos siempre mienten
Premisa: Los no políticos siempre dicen la verdad
Premisa: No sabemos la respuesta del primer nativo

Premisa: Si el segundo nativo es político, entonces el primer nativo también es político
Premisa: Si el segundo nativo NO es político, entonces el primer nativo NO es político

Premisa: Si el tercer nativo es político, entonces el primer nativo, NO es político
Premisa: Si el tercer nativo NO es político, entonces el primer nativo es político

Conclusión: Si los 3 nativos son políticos, entonces la respuesta del segundo nativo haría al primer nativo en político, PERO la respuesta del tercer nativo contradice, lo cual es algo imposible, por lo tanto esta conclusión es falsa.

Conclusión: Si el primer nativo y el tercer nativo son políticos, también seria contradictorio, ya que si el tercero es político el primero no puede ser político, así que esta conclusión falsa.

Conclusión: Si el primer nativo y el segundo nativo son políticos,entonces el tercero es NO político, esta conclusión no se contradice, así que esta podría ser

Conclusión: Si el tercer nativo es político y el segundo no político, entonces el primer nativo NO es político,  esta también es posible ya que no contradice ninguna respuesta.


Conclusión: Si los 3 nativos son NO políticos  esta al igual que la primera conclusión es falsa, ya que no podemos tener al tercer nativo y al segundo iguales ya que sus respuestas son opuestas

¿Cuantos son políticos?, Pues por las conclusiones  uno o 2 pueden ser politicos

martes, 12 de febrero de 2013

Ejercicios de razonamientos

Ejercicios del libro del libro "Introducción a la lógico" de Irving M. Copi

Cuáles de los siguientes pasajes expresan razonamientos? Donde haya razonamientos, indicar las premisas y las conclusiones.

Recordemos que en lógica  el razonamiento es una estructura que contiene proposiciones, pero están las premisas, que son las que dan evidencia, y la conclusión, que es la afirmación de las premisas, en otras palabras, las proposiciones que sean, deben relacionarse, las premisas proporcionar evidencia para la conclusión y la conclusión debe usar estas premisas como su forma de afirmación.

No estamos buscando la verdad todavía, solo estamos viendo si los pasajes tienen razonamiento

1. Actualmente, en nuestras grandes escuelas, se azota a los alumnos menos que antes, pero también se les enseña menos; de modo que lo que ganan los muchachos por un lado lo pierden por el otro. (BOSWELL, Vida de Johnson)

Premisa: "Se azota a los alumnos menos que antes"
Premisa: "Se les enseña menos a los alumnos"
Conclusión: "Lo que los muchachos ganan por un lado, lo pierden por el otro, su ganancia son menos golpe, pero pierden educación"

2. Ay, bribón, por que luchas como un caballero, Siendo solamente un bribón, te odio aún mas. (TENNYSON, Garteh and Lynette)

En lo personal no encuentro razonamiento, ya que no encuentro conclusión, ni premisas, si alguien difiere, no dude en comentar
Premisa: "Ser un bribón que lucha como un caballero"
Conclusión: "Es mas odiado por aparentar algo que no es"

Aun así no me convence.

3. Pues, debe observarse que los hombres deben ser acariciados, o si no aniquilados; se vengaran de los pequeños daños, pero no podrán hacerlo de los grandes; por lo tanto, el daño que inflijamos a un hombre debe ser tal que no necesitemos temer a su venganza. (MAQUIAVELO; El príncipe)

Premisa: "Pequeño daño, como una caricia, y se vengara"
Premisa: "Gran daños a alguien, como aniquilarlo, y no se vengara"
Conclusión: "Hacer suficiente daño a alguien para que no temerle a su venganza"

4. Y alzo los ojos, vio a los ricos que echaban sus dones en el arca de las ofrendas, y vio también a una vida pobre, por  que echaba allí dos blancas, y dijo: en verdad os digo, que esta viuda pobre ha echado mas que todos. Por que todos estos, de lo que les sobra han hechado para las ofrendas de Dios; mas ella, de su indigencia ha hechado todo el sustento que tenia. (LUCAS, 21,1-4)

Premisa: "Echar tus sobras como ofrenda, no satisface a Dios"
Premisa: "Echar tu sustento, el dar hasta que duela, si satisface a Dios"
Conclusión: "Dar todo lo que tengas, no tus sobras hace feliz a Dios"

Aun así tampoco me convence

5. ¡ Adiós para siempre, Casio!, Si nos encontramos nuevamente, pues sonreiremos; De lo contrario, habra sido una oportuna despedida. (SHAKESPEARE, Julio César)

Premisa: "Despedirse y volverse a encontrar trae alegria"
Premisa: "Despedirse y no volverse a encontrar es una verdadera despedida"
Conclusión: "Al despedirse para siempre, es oportuno si no se vuelven a ver"

6. El que tiene mujer e hijos ha encontrado rehenes a la fortuna, pues ellos, son impedimentos para las grandes empresas sean virtuosas o dañinas. (FRANCIS BACON, Del matrimonio y la vida de soltero)
Premisa: Los solteros pueden fundar grandes empresas que generan fortuna
Premisa: Los casados o con hijos no pueden
Conclusión: Por lo tanto, esta casado o con hijos impide que fundes grandes empresas que generan fortuna

7. Si los deseo fueran caballos, entonces los mendigos cabalgarian

Premisa: Si los deseo fueran caballos
Premisa: Los Mendigos piden muchos deseo
Conclusión: los Mendigos tendrían muchos caballos, tantos que podrían cabalgar

8. Nada de eso, Yo sabía que usted llegó de Afganistán  Debido a un largo habito , los pensamientos transcurrieron tan rápidamente por mi cabeza que llegue a la conclusión sin ser cociente de los pasos intermedios sin embargo, hubo tales pasos, la serie de razonamientos fue: 'He aquí un caballero que parece medico y tiene aire militar. Debe de tratarse, por tanto, de un medico del ejercito.
Solo puede haber llegado de los trópicos  pues su rostro esta tostado y este no es el color natural de su piel, ya que sus muñecas son blancas, Debe de haber pasado penurias y enfermedades, como lo revela claramente su rostro ojeroso, Se ha herido el brazo izquierdo, pues lo mueve de manera rígida y poco natural, En que lugar de los trópicos un medico del ejercito ingles puede haber pensado penurias y haberse herido un brazo?, Indudablemente Afganistán  Toda esta serie de pensamientos paso por mi mente en meno" de un segundo. Entonces dije usted acaba de llegar de Afganistán y usted se quedo asombrado. (A.Conan Doyle, Estudio en Escarlata)


Ah el buen Sir Arthur Doyle con el buen Sherlock, este ejercicio me encanta por que, básicamente te dice todo, pero a su vez  tiene varios, desglocemoslo

Premisa: Un caballero que parece medico
Premiso: El caballero tiene aire militar
Conclusión: Es un medico del ejercito

Premisa: El rostro del caballero esta tostado
Premisa: Sus muñecas son blancas
Conclusión: Su color de piel original es blanco y se tostó la piel en algún lugar

Premisa: Sus ojos están ojerosos
Conclusión: Debe haber pasado penurias y enfermedades

Premisa: Mueve el brazo izquierdo de forma rígida
Premisa: Mueve el brazo izquierdo de forma poco natural
Conclusión: Tiene herido el brazo izquierdo

Premisa: Es un medico del ejercito
Premisa: Su color de piel original es blanco y se tostó en algún lugar
Premisa: Paso penurias y enfermedades
Premisa: Tiene herido el brazo izquierdo
Conclusión: En que lugar de los trópicos un medico militar, paso por penurias y enfermedad y se pudo haber herido un brazo, Afganistán

Como podemos ver, se pueden usar las conclusiones de otros razonamientos, para un razonamientos mas grande

lunes, 11 de febrero de 2013

Terminos Tecnicos de la Lógica

Términos Técnicos de Lógica.

Del libro "Introducción a la lógico" de Irving M. Copi

Inferencia, es el proceso en el cual de una proposición y se la afirma sobre una base de otras u las otras proposiciones son aceptadas como punto de partida.

Sin embargo al lógico no le interesa el proceso de inferencia, SIN EMBARGO, le es muy importante las proposiciones ya que conforman parte inicial y final del proceso, así como las relaciones.

Las proposiciones son verdaderas o falsas

Es necesario distinguir entre las oraciones declarativas y sus significados. Dos oraciones distintas, escritas de  forma diferente pero tienen el mismo significado. Por ejemplo:


-Juan ama a María
-María es amada por Juan

Se acostumbra usar la palabra 'proposición' para designar el significado de una oración declarativa.

La diferencia entre oraciones y proposiciones se da ya que una oración declarativa forma parte de un lenguaje determinado, el lenguaje en el cual es enunciado (escrito,dicho), sin embargo una proposición no forma parte de ningún lenguaje. Por ejemplo:

-Llueve
-Il pleut
-Es regnet

Las tres significan lo mismo, pero están en diferentes lenguajes (español, francés y alemán).

Aunque el proceso de inferencia no le importa  a los lógicos  para cada inferencia hay un razonamiento, y son estos razonamientos lo que le interesan a los lógicos  ya que la lógica se encarga de saber la diferencia entre un razonamiento correcto y uno incorrecto.

El razonamiento lo podemos definir como un grupo de proposiciones que una de ella se afirme. Y deja las demás como evidencia de verdad.

En lógica sin embargo, el razonamiento también describe una estructura, en esta estructura se usan términos como 'premisas' y 'conclusión'. La concilio de un razonamiento es la proposición que se afirma de acuerdo a las otras proposiciones, y a su vez estas otras proposiciones se convierten en premisas del razonamiento, ya que llevaron el proceso del razonamiento a esta conclusión.

El razonamiento se divide tradicionalmente en dos tipos diferentes: deductivos e inductivos.

El razonamiento siempre tiene como meta afirmar que sus premisas ofrecen evidencias de verdad para su conclusión, sin embargo, solo el razonamiento deductivo pretende que sus premisas ofrezcan evidencias concluyentes. En este caso, se usan términos como 'valido' o 'invalido' en vez de 'correcto' e 'incorrecto'.

Todo razonamiento deductivo es valido o invalido, y es deber del lógico aclarar la naturaleza de la relación entre las premisas y la conclusión, esto sirve para discriminar  entre los demás razonamiento de uno u otro tipo. Esta es la base de la 'Teoría de la deducción'.

El razonamiento inductivo, no pretende que sus premisas ofrezcan una evidencia total de la verdad de su conclusión , si no que solo ofrezcan cierta evidencia de ella.

De las proposiciones puede venir la verdad o la falsedad, mas no de los razonamientos.

Algunos razonamientos validos contienen solamente proposiciones verdades, por ejemplo:
-Todas las ballenas son mamíferos.
-Todos los mamíferos tienen pulmones.
-Por tanto, todas las ballenas tienen pulmones.

También esta el caso de que las proposiciones falsas
-Todas las arañas tienen 6 patas
-Todos los animales de 6 patas tienen alas
-Por tanto, todas las arañas tienen alas

Este razonamiento es valido, ya que si las premisas fueran verdaderas, su conclusión también seria verdadera.

Sin embargo, también esta el caso de que las premisas sean verdaderas y su conclusión sea verdad, no es valido. Por ejemplo:
-Si yo tuviera todo el dinero de México seria muy rico
-No tengo todo el dinero de México
-Por lo tanto, no soy muy rico

Este razonamiento no es valido, ya que la premisa pueden ser verdaderas pero la conclusión falsa, aunque la evidencia no sea inmediata, si yo heredara millones, las primeras premisas seguirían siendo verdaderas, pero la conclusión es falsa, es mas notable con este ejemplo:
-Si Bill Gates tuviera todo el dinero de México, Bill Gates seria muy rico.
-Bill Gates no tiene todo el dinero de México.
-Por lo tanto, Bill Gates no es muy rico.

La verdad o falsedad de su conclusión no determina la validez o invalidez de un razonamiento, tampoco la validez de un razonamiento garantiza la verdad de su conclusión.

Determinar la verdad o falsedad de las premisas es tarea de la ciencia en general. Pues las premisas pueden ser de cualquier tema. El lógico no se interesa tanto por la verdad o falsedad de las proposiciones, pero si se interesa si el razonamiento es correcto o incorrecto, el lógico se interesa por corregir razonamientos cuyas premisas pueden ser falsas.

domingo, 10 de febrero de 2013

¿Que es la Lógica?

Del libro intruducción a la lógica de Irving M. Copi

¿Que es la lógica ?

Aunque todo libro de lógica te dirá que "Este libro no es el definitivo" o "nada de lo que esta aquí es la ultima palabra" es bueno para darnos una idea.

A menudo usamos el termino de "Eso es ilógico" o "lo mas lógico es", como un sinónimo de "razonable", sin embargo, no es del todo correcto.

El estudio de la lógica es el estudio de métodos y principios  usados para distinguir que razonamiento es incorrecto.

Esto incluye, saber que razonamiento es correcto o incorrecto y por que lo es.

Ahora, ¿Que es razonamiento?, el razonamiento es un un genero especial del pensamiento, del cual se derivan conclusiones a partir de premisas.

Y como si fuera poco, ¿Que es premisa?, bueno una premisa es una "idea" , indicio, señal u origen  de algo que puede ser deducido o conocido.

La distinción de un razonamiento, correcto e incorrecto es el problema central que trata la lógica. Los métodos y técnicas creados por los lógicos (personas que estudian Lógica) fueron creado para aclarar esta disnticion. El lógico, estudiante de Logica, se interesa por todos los razonamientos, sin importar su contenido, pero solo con la intención de identificar cual es incorrecto y cual es correcto.

Conversion de diferentes bases a Decimal

Del libro de "Lógica Digital y Diseños de Computadores", de M. Morris Mano, Capitulo 1 "Sistemas Binarios"

1-7 Convierta los siguientes números a decimal:

a) (1001001.011)
2


Binario a decimal ya es algo que hemos hecho asi que pasamos directo al proceso.

1*2⁶ + 1*2³ + 1*2⁰ + 1*2⁻² + 1*2⁻² =
64 + 8 + 1 + 0.25 + 0.125 = (73.375)10


b) (12121)3

Para convertir cualquier base a decimal la formula  seria

Suma(numero * base ^ la posición de la cifra), en otras palabras, es el mismo procedimiento que con binario, pero en vez de multiplicarlo por 2 de binario, se multiplica por el valor de la base.
Entonces el procedimiento es el siguiente:

1*3^4 + 2*3^3 + 1*3^2 + 2*3^1 + 1*3^0=

81 + 54 + 9 + 6 + 1 = (151)10


c) (1032.2)4

En este caso, recordemos que el 0 no se toma en cuenta ya que no agrega ningún valor, (cualquier numero multiplicado por 0 es 0), pero se añadirá al procedimiento  para mostrar su efecto

1*4^3 + 0*4^2 + 3*4^1 + 2*4^0 + 2*4^-1 =
64 + 0 + 12 + 2 + 0.5 = (78.5)10

d) (4310)5

4*5^3 + 3*5^2 + 1*5^1 + 0*5^0 =
500 + 75 + 5 +0 = (580)10

e) (0.342)6

0*6^0 + 3*6^-1 + 4*6^-2 + 2*6^-3=
0 + 0.5 + 0.111+ 0.009259 = (0.620259259)10

f) (50)7

5*7^1 + 0*7^0 =
35 + 0 = (35)10

g) (8.3)9

8*9^0 + 3*9^-1 =
8 + 0.333 = (8.333)10

h) (198)12

1*12^2 + 9*12^1 + 8*12^0 =

144 +108 + 8 = (260)10

jueves, 7 de febrero de 2013

Conversion de numeros de diferente base a otra base diferente

Del libro de "Lógica Digital y Diseños de Computadores", de M. Morris Mano, Capitulo 1 "Sistemas Binarios"

1-6 Convierta los siguientes numeros en base a las bases que se indican

a) decimal 225.225 a binario, octal y hexadecimal

Este siendo el ejercicio mas sencillo, ya que es decimal a diferentes bases,

A binario:


225 / 2 = 112 , 1/2 , a0 = 1
112 / 2 = 56, 0/2, a1 = 0
28 / 2 = 14, 0/2, a2 = 0
14 / 2 = 7 , 0/2 , a3 = 0
7 / 2 = 3, 1/2, a4 = 1
3 / 2 = 1, 1/2, a5 = 1
1 / 2 = 0 , 1/2, a6 = 1

parte entera: (1110001)2

0.225 * 2 = 0.45, a-1 = 0
0.45 * 2 = 0.9, a-2 = 0
0.9 * 2 = 1.8, a-3 = 1
0.8 * 2 = 1.6, a-4 = 1
0.6 * 2 = 1.2, a-5 = 1
0.2 * 2 = 0.4, a-6 = 0
0.4 * 2 = 0.8, a-7 = 0 <---- En este punto se "cicla", no importa cuantas veces se multiplique por 2, nunca llegara a 0

resultado en binario: (1110001.0011100)2

Para convertir decimal a una diferente base se hace el mismo proceso que se hizo para convertirlo en binario, solo que se cambia la base, por ejemplo si en la parte entera dividimos entre 2, para octal dividiremos entre 8 y para hexadecimal entre 16, y en la parte con punto, se multiplica por la base

A octal

225  / 8 = 28.125, 0.125 = 1/8 , a0 = 1

28 / 8 = 3.5, 0.5 = 4/8, a1 = 4
3 / 8 = 0.375, 0.375 = 3/7, a2 = 3

parte entera = (341)
8
0.225 * 8 = 1.8 , a-1 = 1
0.8 * 8 =  6.4 , a-2 = 6
0.4 * 8 = 3.2, a-3 = 3
0.2 * 8= 1.6, a-4 = 1
0.6 * 8 = 4.8, a-5 = 4
0.8 *8 = 6.4, a-6 = 6 <----- Aquí se repite el resultado, se "ciclea"

Resultado final: (341.163146)8
225 / 16 = 14.0625 , 0.0625 = 1/16 , a0 = 1
14 / 16 = a1 = 14 = E <---- Recuerden que en Hexadecimal, la base es hasta 15, asi que en vez de poner 10,11,12,13,14, se usan las letras A,B,C,D,E respectivamente

parte entera: (E1)16

0.225 * 16 = 3.6 , a-1= 3
0.6 * 16 = 9.6, a-2 = 9
0.6 * 16 = 9.6 a-3 = 9 <---- Aqui se ciclea

resultado final: (E1.399)16

b) binario 11010111.110 a decimal, octal y hexadecimal

El binario es una de las bases mas importante referente  a computación  ya que es como "nos comunicamos" con la maquina, sin embargo el Octal y Hexadecimal, también son importante, no es casualidad  que estas sean las 4 bases que se enseñan en informática.


Binario a Decimal:

Este método se vio en la entrada anterior, así que el resultado es:

1*2⁷ + 1*2⁶ + 1*2⁴ + 1*2² + 1*2¹ + 1*2⁰ + 1*2⁻¹ + 1*2⁻² = 
128 + 64 + 16 + 4 + 2 + 1 + 0.5 + 0.25 = (215.75)10

Binario a Octal:

Aquí hay 2 formas de hacerlo, una puede ser convertirlo a Decimal, y de ahí convertirlo en binario, ya que tenemos el datos hagamoslo de esa forma primero, el valor en decimal es 215.75:

215 / 8 = 26.875, 0.875 = 7/8, a0 = 7
26 / 8 = 3.25 , 0.25 = 2/8, a1 = 2
3/8 = 0.375, 0.375 = 3/8 , a2 = 3

0.75 * 8 = 6.0, a
-1 = 6

Resultado final: (327.6)8

Sin embargo tambien existe otro metodo, citando a Morris Mano, pagina 9, capitulo 1-4 "La conversion binario a octal y hexadecimal y viceversa juega un papel muy importante en los computadores digitales. Como 2³ = 8 y 2⁴ = 16, cada digito octal corresponde a tres digitos binarios, y cada  digito hexadecimal corresponde a 4 digitos en binario."

Entonces para convertir de binario a decimal, tenemos que tomar el numero binario, y separarlo en secciones de 3 dígitos, por que 3, por que 2³ = 8, y 8 es la base octal

el numero es 11010111.110, al separarlo tenemos -011-010-111.-110-, entonces con nuestro conocimiento en binario, sabemos que

000 = 0,  100  = 4

001 = 1,   101 = 5
010 = 2,  110 = 6
011 = 3,  111 = 7

entonces, remplazando cada sección con el numero, tenemos -3-2-7.-6

que es lo mismo que obtuvimos cuando convertimos de decimal a octal, 
(327.6)8

Hexadecimal a binario:

Al igual, que el caso anterior, tenemos el dato en decimal, asi que podemos resolverlo rápidamente

215 / 16 = 13.4375, 04375 = 7/16 , a0 = 7
13 / 16 = 0.8125, 0.8125 = 13/16, a1 = 13 = D

0.75 * 16 = 12.0 , a
-1 = 12 = C

Resultado final: (D7.C)16


Pero también esta el otro método  sin en octal se divide en 3 cifras, para hexadecimal, son 4 cifras, ya que 2⁴ = 16 y la base de hexadecimal es 16

entonces el numero binario 
11010111.110, se convierte en -1101-0111-.-1100-

Recurrimos de nuevo a nuestros conocmiento en binario:


0000 = 0, 0101 = 5, 1010 = 10 = A , 1111 = 15 = F
0001 = 1, 0110 = 6, 1011 = 11 = B
0010 = 2, 0111 = 7, 1100 = 12 = C
0011 = 3, 1000 = 8,1101 = 13 = D
0100 = 4, 1001 = 9,1110 = 14 = E

Remplazando valores obtenemos: -D-7-.-C-, que es lo mismo que obtuvimos al sacarlo desde decimal: (D7.C)16

c) octal 623.77 a decimal, binario, y hexadecimal

d) el hexadecimal 2AC5.D a decimal, octal y binario

miércoles, 6 de febrero de 2013

Conversion de binario a decimal

Del libro de "Lógica Digital y Diseños de Computadores", de M. Morris Mano, Capitulo 1 "Sistemas Binarios"

1-5 Convierta lo siguientes números binario a decimales:


10.10001 , 101110.0101 , 1110101.110 , 1101101.111

El método para convertir de binario a decimal suele ser muy sencillo,

imaginemos una tabla, donde los 1 indican los valores existentes y 0 los valores que no se toman en cuenta, por ejemplo queremos saber el valor del numero binario 10101

16 8 4 2 1
10101


Entonces los valores que están "activos", osea los que tienen 1, son 1,4 y 16, los sumamos y nos da 21, entonces 10101 = 21

siguiendo esta idea,  imaginamos que cada cifra es una columna, tomamos el primer ejercicio, tiene punto, en ese caso, cada columna, es n/2, así que la primera seria 0.5, .25, .125 y así consecuentemente.

convertiendolo en tabla:

Posición de la cifra 4 3 2 1 0 . -1 -2 -3 -4 -5
Equivalente en decimal 16 8 4 2 1 . .5 .25 .125 .0625 .03125
Binario 0 0 0 1 0 . 1 0 0 0 1


como se explico, solo los valores que tienen uno se toman en cuenta, así que tenemos

2 + 0.5 + 0.03125 = 2.53125


Ahora hacer la tabla para cada numero binario, seria muy latoso, así que de ahora en adelante, veremos que posición de la cifra  esta el 1 y solo anotaremos el valor del 1, ya que los de 0 no interesan.

b) 101110.0101

Viendo en que posiciones estan los 1's, se escribira de esta forma

1 * 2⁵ + 1*2³ + 1*2² + 1*2¹ + 1*2⁻² + 1*2⁻⁴ =

32 + 8 + 4 +2 + 0.25 + o.o625 = 46.3125

c) 1110101.110

1 * 2⁶ +1 * 2⁵ + 1*2⁴ + 1*2² + 1*2⁰ + 1*2⁻¹ + 1*2⁻² =

64 + 32 + 16  + 4 + 1 + 0.5 + 0.25 = 117.75

d) 1101101.111

1 * 2⁶ +1 * 2⁵ + 1*2³ + 1*2² + 1*2⁰ + 1*2⁻¹ + 1*2⁻² + 1*2⁻³ =

64 + 32 + 8 + 4 + 1 + 0.5 + 0.125 = 109.875

martes, 5 de febrero de 2013

Conversión Decimal a Binaria

Del libro de "Lógica Digital y Diseños de Computadores", de M. Morris Mano, Capitulo 1 "Sistemas Binarios"

1-4 Convierta los siguientes números decimales a binarios: 12.0625 , 10^4, 673.23 y 1998

Como se explico en la entrada anterior, para base binaria (base 2), es le mismo procedimiento

Separamos entero y punto, obtenemos 12 y .0625

12 / 2  = 6 y 0/2 por lo tanto a0=0 
6/2 = 3 y 0/2, a1 = 0
3/2 = 1 y 1/2, a2 = 1
1/2 = 0 y 1/2, a3 = 1

parte entera = (1100)2

parte con punto

0.0625 * 2 = 0.125, a-1= 0
0.125 * 2 = 0.25, a-2 = 0
0.25 * 2 = 0.5, a-3 = 0
0.5 * 2 = 1.0, a-4 = 1

parte con punto = (.0001)2


Resultado final = (1100.0001)2

10^4 = 10,000

10,000 / 2 = 5,000, 0/2, a0 = 0

5,000 / 2  = 2,500, 0/2, a1 = 0
2500 / 2 = 1,250, 0/2, a2 = 0
1,250 / 2 = 625, 0/2, a3 = 0
625 / 2 = 312, 1/2, a4 = 1
312 / 2 =  156, 0/2, a5 = 0
156 / 2 = 78, 0/2, a6 = 0
78 / 2 = 39, 0/2 , a7 = 0
39 / 2 = 19, 1/2, a8 = 1
19 / 2 = 9, 1/2, a9 = 1
9 / 2 = 4, 1/2, a10 = 1
4 / 2 = 2, 0/2 , a11 = 0
2 / 2 = 1, 0/2 , a12 = 0
1 / 2  = 0 , 1/2, a13 = 1

Resultado final: (10011100010000)2

673.23

673 / 2 = 336, 1/2 , a0 = 1
336 / 2 = 168, 0/2, a1 = 0
168 / 2 = 84, 0/2, a2 = 0
84 / 2 = 42, 0/2, a3 = 0
42 /2 = 21, 0/2, a4 = 0
21/ 2 = 10, 1/2, a5 = 1
10 / 2 = 5 , 0/2, a6 = 0
5 / 2 = 2, 1/2, a7 = 1
2 / 2 = 1, 0/2, a8 = 0
1 / 2 = 0, 1/2, a9 = 1

Parte entera : (1010100001)2

0.23 * 2 = 0.46, a-1 = 0
0.46 * 2 = 0.92, a-2 = 0
0.92 * 2 = 1.84, a-3 = 1
0.84 * 2 = 1.68, a-4 = 1

En muchos casos, sobre todo en binario, la parte después del punto no llega a ser exacta, asi que se deja un aproximado

parte con punto: (.0011)2


Resultado final: (1010100001.0011)2

1998

1998 / 2 = 999, 0/2 , a0 = 0
999 / 2 = 499, 1/2, a1 = 1
499 / 2 = 249, 1/2, a2 = 1
249 / 2 = 124, 1/2, a3 = 1
124 / 2 = 62, 0/2, a4 = 0
62 / 2 = 31, 0/2, a5 = 0
31 / 2 = 15, 1/2, a6 = 1
15 / 2 = 7, 1/2, a7 = 1
7 / 2 = 3, 1/2, a8 = 1
3 / 2 = 1, 1/2, a9 = 1
1 / 2  = 0, 1/2, a10 = 1

Resultado Final: (11111001110)2

lunes, 4 de febrero de 2013

Conversión de decimal a diferentes bases

Del libro de "Lógica Digital y Diseños de Computadores", de M. Morris Mano, Capitulo 1 "Sistemas Binarios"

1-3 Convierta el numero decimal 250,5 a base 3, 4, 7 , 8 y 16 respectivamente.

Para convertir de una decimal a cualquier otra se siguen estos pasos:

Se separan el numero con punto decimal, en dos, entero y punto decimal, osea 250 y 0.5

La parte entera se divide por la base , el resultado la parte entera se vuelve a dividir  la parte con punto, se convierte en fracción y se toma el numerador, se repite este proceso hasta que la parte entera es 0.

Por ejemplo:

250/3 = 83 entero, 1/3 en fraccion, por lo tanto se toma el 1, y se denomina como a0 = 1
se repite el proceso con los nuevos valores

83/3 = 27 entero, 2/3 en fraccion, por lo tanto a1 = 2

27/3 = 9 entero, 0/3 en fraccion a2 = 0

9/3 = 3 entero, 0/3 en fracccion a3 = 0

3/3 = 1 entero, 0/3 en fraccion a4 = 0

1/3 = 0 entero, 1/3 en fraccion a5 = 1

Ya que llegamos a 0, se toman todos los valores de la siguiente forma, el numero convertido quedaría de la siguiente forma (a5a4a3a2a1a0), por lo tanto el numero convertido es (100021)3

Para la parte faccionaria, el numero fraccionario se multiplicar por la base hasta que sea 0 la parte después del punto

0.5 * 3  = 1.5 , lo se paramos en enteros y fraccionario de nuevo y se le asigna a-1 al entero, por lo tanto a-1 = 1 y el resto es 0.5 y se repite el proceso

0.5 * 3 = 1.5 a-2 = 1 resto 0.5
0.5 * 3 = 1.5 a-3 = 1 resto 0.5
0.5 * 3 = 1.5 a-4 = 1 resto 0.5
0.5 * 3 = 1.5 a-5 = 1 resto 0.5

En este caso en particular, no importa cuantas veces lo multipliquemos, no se acercara mas al entero, asi que con suficientes cifras después del punto basta

El resultado despues del punto queda en este formato (a-1a-2a-3a-4a-5), asi que la parte fraccionaria queda como (.11111)3

El resultado final debe quedar de la siguiente forma (...a5a4a3a2a1a0.a-1a-2a-3a-4a-5...) , por lo tanto el resultado final es (100021.11111)3

Para el resto de los ejercicios es el mismo procedimiento, recordando dividir o multiplicar por la base que corresponda

250.5 a base 4

250/4 = 62 y 2/4 a0 = 2
62/4 = 15 y 2/4 a1 = 2
15/4 = 3 y 3/4 a2 = 3
3/ 4= 0 y 3/4 a3 = 3

Partes entera (3322)4

0.5 * 4 = 2 entera 0 fraccionaria a-1 = 2

Como el valor resultante ya es 0, ya no se continua y el valor fraccionaria queda como (0.2)4

Resultado final (3322.2)4