miércoles, 8 de enero de 2014

EXPOCICIONES VISTAS EN ESTRUCTURA DE DATOS

Clases para la implementacion de listas 

Los métodos básicos que deben de tener estas implementaciones son: • Insert ( x, p ), insert el elemento x en la posición p

 • end (), va a la posición final de datos.(No necesariamente la del arreglo).

 • Locate ( x ), retorna la posición del elemento x.

 • Retrieve ( p ), retorna el elemento en la posición p.

 • Delete ( p ) ,Delete ( x ),Borra la posicion p. Borra el o los elementos x.

• Next () ,Next ( p ), Posición siguiente o posición siguiente a p. La posición.

Pues la verdad se le  entendía y se pudo explicar el tema aunque le fato mas material 

Representación en memoria de arboles

Los nodos del árbol binario serán representados como registros que contendrán como mínimo tres campos. En un campo se almacenará la información del nodo. Los dos restantes se utilizarán para apuntar al sub arbol izquierdo y derecho del sub arbol en cuestión.

Pues en este tema estuvo muy confuso ya que no veni algo preparado y le falto material y unos ejemplos.

Arboles binarios  

Recorrido de un Árbol Binario

 Hay tres manera de recorrer un árbol : en inorden, preorden y postorden.
Cada una de ellas tiene una secuencia distinta para cada recorrido. Cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener más de dos hijos. Si algún hijo tiene como referencia a null, es decir que no almacena ningún dato, entonces este es llamado un nodo externo.

En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los árboles binarios son los árboles binarios de búsqueda. Un árbol binario es un árbol con raíz en el que cada nodo tiene como máximo dos hijos. Un árbol binario lleno es un árbol en el que cada nodo tiene cero o dos hijos. Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas (vértices con cero hijos) están a la misma profundidad (distancia desde la raíz, también llamada altura).

Pues en este tema se le entendió y si sabia de lo que trataba el tema y también tuvo ejemplos para guiarse y los explico muy bien.

Recorrido en un árbol binario

Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
1.     Visite la raíz
2.     Atraviese el sub-árbol izquierdo
3.     Atraviese el sub-árbol derecho
Inorden: (izquierdo, raíz, derecho). Para recorrer un árbol binario no vacío en inorden (simétrico), hay que realizar las siguientes operaciones recursivamente en cada nodo:
1.     Atraviese el sub-árbol izquierdo
2.     Visite la raíz
3.     Atraviese el sub-árbol derecho

Postorden: (izquierdo, derecho, raíz). Para recorrer un árbol binario no vacío en postorden, hay que realizar las siguientes operaciones recursivamente en cada nodo:
1.     Atraviese el sub-árbol izquierdo
2.     Atraviese el sub-árbol derecho
3.     Visite la raíz
En general, la diferencia entre preorden, inorden y postorden es cuándo se recorre la raíz. En los tres, se recorre primero el sub-árbol izquierdo y luego el derecho.
·         En preorden, la raíz se recorre antes que los recorridos de los sub árboles izquierdo y derecho
·         En inorden, la raíz se recorre entre los recorridos de los árboles izquierdo y derecho, y
·         En postorden, la raíz se recorre después de los recorridos por el sub árbol izquierdo y el derecho

Preorden (antes), inorden (en medio), postorden (después).
Pues también supieron explicar muy bien el tema que les toco y dieron varios ejemplos 

Árbol binario de búsqueda

También llamados BST (acrónimo del inglés Binary Search Tree) es un tipo particular de árbol binario que presenta una estructura de datos en forma de árbol usada en informática.

La mayoría de los árboles binarios son de búsqueda
Un árbol binario no vacío, de raíz R, es un árbol binario de búsqueda si:
En caso de tener sub árbol izquierdo, la raíz R debe ser mayor que el valor máximo almacenado en el sub árbol izquierdo, y que el sub árbol izquierdo sea un árbol binario de búsqueda.

En caso de tener sub árbol derecho, la raíz R debe ser menor que el valor mínimo almacenado en el sub árbol derecho, y que el sub árbol derecho sea un árbol binario de búsqueda.

File:Binary search tree.svg

Un árbol binario que cumple que el subárbol izquierdo de cualquier nodo (si no está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío) contiene valores mayores.
Para estas definiciones se considera que hay una relación de orden establecida entre los elementos de los nodos. Que cierta relación esté definida, o no, depende de cada lenguaje de programación. De aquí se deduce que puede haber distintos árboles binarios de búsqueda para un mismo conjunto de elementos.

 GRAFOS

En teoría de grafos, se usa la siguiente definición: «Un árbol binario es un grafo conexo, acíclico y no dirigido tal que el grado de cada vértice no es mayor a 3». De esta forma sólo existe un camino entre un par de nodos. Existen diferentes implementaciones del tipo grafo: con una matriz de adyacencias (forma acotada) y con listas y multilistas de adyacencia (no acotadas)

Tipos de Grafos:
 Grafos simples
 Grafo completo
Grafo conexo

martes, 19 de noviembre de 2013

OPINIÓN SOBRE LOS TEMAS EXPUESTOS YA EN CLASES SOBRE LO DE LOS EQUIPOS

PILAS, DEFINICIÓN, OPERACIONES Y CLASES PARA LA IMPLEMENTACION

Pues para mi el tema expuesto estuvo muy bien se entendió a la perfección tanto por que si supieron explicarlo y no pasaron a leer mucho.

COLAS Y DEFINICIÓN
Pues esto se me costo un poco entenderlo pero estuvo mas o menos  aunque si pasaron a leer un poco y hasta pusieron algunos vídeos .

TIPOS DE COLAS SIMPLES, CIRCULARES Y DOBLES

Pues en este sub tema la verdad si se me complico pero a mi parecer se podría decir que se expusieron muy bien y si dieron algunos ejemplos.








domingo, 14 de octubre de 2012

Programa objeto, Programa Fuente y compilador




PROGRAMA OBJETO.

Programa Objeto es aquel programa que resulta de la traducción del lenguaje fuente (lenguaje entendible por el ser humano) a un lenguaje máquina, es decir a aquel que es inteligible por la computadora.
Esta tarea es llevada a cabo por los programas intérpretes o compiladores. Los primeros, los intérpretes, realizan la traducción de manera tal que el lenguaje obtenido puede ser ejecutado directamente por la 
máquina. En cuanto a los compiladores, no realizan la traducción directa para que pueda ser ejecutable por la computadora sino que debe utilizar también un programa montador o enlazador, conocido como linker, que es el que realiza la acción final que permite que el programa objeto pueda ser ejecutado.

PROGRAMA FUENTE.

Se relaciona de forma directa con los lenguajes de programación y las aplicaciones creadas, porque precisamente "Programa Fuente" describe el argumento escrito por el programador que da inicio al desarrollo de su obra de software.

COMPILADOR

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

PARTES DE UN COMPILADOR


La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.
  • Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis Léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en frases gramaticales ) y Análisis Semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
  • Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end:
  • Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.
  • Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)


domingo, 7 de octubre de 2012

Estructura básica de un programa C++














Estructura básica de un programa en C
La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo que se puede escribir en C es el siguiente:
main( )
{
}
Como nos podemos imaginar, este programa no hace nada, pero contiene la parte más importante de cualquier programa C y además, es el más pequeño que se puede escribir y que se compile correctamente. En el se define la función main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una función C siempre va seguida de paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada por un bloque de sentencias, que esta encerrado entre llaves {}.
Un programa algo más complicado es el siguiente:
#include <stdio.h>
main( )
{
printf("Hola amigos!\n");
}
Con el visualizamos el mensaje Hola amigos! en el terminal. En la primera línea indica que se tengan en  las funciones y tipos definidos en la librería stdio (standard input/output). Estas definiciones se encuentran en el fichero header stdio.h. Ahora, en la función main se incluye una única sentencia que llama a la función printf. Esta toma como argumento una cadena de caracteres, que se imprimen van encerradas entre dobles comillas " ". El símbolo \n indica un cambio de línea.

Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican algunos caracteres especiales del código ASCII. Los más importantes son:
\a
Alerta
\b
Espacio atrás
\f
Salto de página
\n
Salto de línea
\r
Retorno de 
\t
Tabulación horizontal
\v
Tabulación vertical
\\
Barra invertida
\'
Comilla simple
\"
Comillas dobles
\OOO
Visualiza un carácter cuyo código ASCII es OOO en octal
\xHHH
Visualiza un carácter cuyo código ASCII es HHH en hexadecimal


Un programa C puede estar formado por diferentes módulos o fuentes. Es conveniente mantener los fuentes de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuración. Los diferentes fuentes son compilados de forma separada, únicamente los fuentes que han sido modificados desde la última compilación, y después combinados con las librerías necesarias para formar el programa en su versión ejecutable.




miércoles, 3 de octubre de 2012

TIPOS DE DATOS Y OPERADORES



















DATOS, TIPOS DE DATOS Y OPERACIONES

Dato: Es un objeto o elemento que tratamos a lo largo de diversas operaciones.
            Tienen 3 características:
-          Un nombre que los diferencia del resto.
-          Un tipo que nos determina las operaciones que podemos hacer con ese dato.
-          Un valor que puede variar o no a lo largo de la operación.
Existen diferentes tipos de datos.

- Características de los tipos:
-          Cada tipo se representa o almacena de forma diferente en la computadora.
Bit:1/0;  Byte=8 bits.
-          Un tipo agrupa a los valores que hacen las mismas operaciones.
-          Si tiene definida una relación de orden es un tipo escalar.
-          Cardinalidad de un tipo: Número de valores distintos que puede tomar un tipo.
Pueden ser finitos (caracteres), y si son infinitos el ordenador los toma como finitos porque esta limitado por el tamaño de los bytes en el que la cifra es almacenada.

- Los datos pueden ser:
-          Simples: Un elemento.
-          Compuestos: Varios elementos.

- Los tipos pueden ser:
-          Estándar: Que vienen en el sistema por defecto.
-          No estándar: Son los que crea el usuario.

- Los tipos simples más importantes son:
-          Numéricos.
-          Lógicos.
-          Caracteres.
·         Numéricos:
-          Entero: Subconjunto finito del conjunto matemático de los números enteros. No tiene parte decimal. El rango de los valores depende del tamaño que se les da en memoria.
-          Real: Subconjunto finito del conjunto matemático de los números reales. Llevan signo y parte decimal. Se almacenan en 4 Bytes (dependiendo de los modificadores). Si se utilizan números reales muy grandes, se puede usar notación científica que se divide en mantisa, base y exponente; tal que el valor se obtiene multiplicando la mantisa por la base elevada al exponente.
·         Lógicos o booleanos:
-          Aquel que sólo puede tomar uno de los dos valores, verdadero o falso (1/0).
·         Carácter:
-          Abarca al conjunto finito y ordenado de caracteres que reconoce la computadora (letras, dígitos, caracteres especiales, ASCII).
Tipo de cadena o String: Conjunto de caracteres, que van a estar entre “”.

El propio lenguaje puede añadir más tipos, o se pueden añadir modificadores.
            Entero : Int à Long int
En algunos lenguajes se definen tipos especiales de fecha y hora, sobre todo en los más modernos.








domingo, 30 de septiembre de 2012


LOS BUCLES WHILE, DO...WHILE Y EL FOR

El Bucle while o bucle mientras es una estructura de la mayoría de los lenguajes de programación estructurados cuyo propósito es repetir un bloque de código mientras una condición se mantenga verdadera.


Condición

La condición ha de ser una sentencia que devuelva un valor booleano, y esta puede ser el valor booleano en sí, verdadero(true) si la condición se cumple, o falso si esta no se cumple(false). También puede contener el nombre de una variable booleana, y el valor de la expresión dependerá de su contenido. Se debe tener en cuenta que además de las variables también puede haber llamadas a funciones que devuelvan un valor.


Sentencias Comparativas

La forma más obvia tal vez, y la más usada sin duda, son las sentencias comparativas, que usan los operandos igual, diferente, menor o igual, mayor o igual, menor y mayor. En el caso del lenguaje C, se utilizan los siguientes símbolos para representar las comparaciones anteriores: ==, !=, <=, >=, <, >,

Particularidades de lenguajes

En algunos lenguajes, se pueden utilizar variables no booleanas en la comparación: Por ejemplo, si la variable vale 0 será como si la condición no se cumpliera, y siempre que sea diferente de 0, se considerará que la condición se cumple.

DO WHILE
El bucle do……while es la ultima de las estructuras para implementar  repeticiones de las que dispone Javascript. Se utiliza generalmente cuando no sabemos cuantas veces se habrá de ejecutar  el bucle, igual que el bucle While, con la diferencia de que sabemos seguro el bucle por lo menos se ejecutará una vez.

Este tipo de bucle se introdujo en el Javascript 1.2, por lo que no todos lo navegadores lo soportan, sólo los de versión 4 o superior. En cualquier caso, cualquier código que quieras escribir con Do……While  se puede escribir también utilizando un bucle WHILE, con lo que en navegadores antiguos deberás traducir  tu bucle Do….While por bucle While.
La sintaxis es la siguiente. 

do { 
    //sentencias del bucle 
} while (condición) 

FOR

 El bucle for o ciclo for es una estructura de control en la que se puede indicar el número mínimo de iteraciones. Está disponible en casi todos los lenguajes de programación imperativos

Elementos del bucle

  • 'Variable de control': prácticamente un mandato impuesto por el uso habitual es utilizar la letra i Iterador como variable de control, o bien sus sucesoras en caso de bucles anidados. El uso de esta letra críptica quizás a primera vista es sin embargo una excelente forma de aportar agilidad de lectura al código por su uso tan extensivo. Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla cuestión de explosión exponencial), las letras i, j y k suelen ser las únicas relacionadas con este uso. En C se define en el primer parámetro de la instrucción junto con la inicialización (opcional).
  • Inicialización de la variable de control: en pseudolenguaje se pide explicitarlo (es la sección := ValorInicial), sin embargo, otros lenguajes más permisivos como C no lo requieren de forma obligatoria. De todos modos, la práctica de utilizar variables de control que no se inicializan en el bucle no es recomendada para la legibilidad del código. En C se define en el primer parámetro del bucle junto con la variable de control.
  • Condición de control: en pseudolenguaje se ve representado por el valor final que puede tomar la variable de control (la sección A ValorFinal). En C es el segundo parámetro y puede ser cualquier condición (ni siquiera es obligación que esté la variable de control, aunque una vez más, esto no se considera una buena práctica).
  • Incremento: en pseudolenguaje se toma por defecto el valor 1, aunque puede explicitar se por medio de la sentencia PASO = ValorPaso cualquier número entero (léase bien entero, o sea que técnicamente podemos decrementar). En C es el último parámetro.
  • Cuerpo: es lo que se hará en cada iteración, pueden ser una o más instrucciones. En pseudo lenguaje pesa la restricción de no poder alterar el valor de la variable de control; esto no es requerido en C, pero no se considera una buena práctica.


 USOS
Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o consultar datos que se encuentren según el índice. Por esto último, una condición mínima del vector es que debe ser ordenado, por que si se intenta leer un dato inexistente, esto genera un error de programación.

For en pseudolenguaje

La principal diferencia de un bucle PARA con respecto a los bucles MIENTRAS Y REPETIR, es que puede determinarse al comienzo del bucle cuántas veces se iterará el mismo, lo cual muchas veces puede redundar en una optimización del código por parte de los compiladores. Los condicionales constituyen junto con los bucles los pilares de laprogramación estructurada, y su uso es una evolución de una sentencia de lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición.
El bucle PARA se ha convertido en el bucle más ampliamente utilizado en la programación, ya que con la evolución de los lenguajes la mayoría de las condiciones de fin
MIENTRAS NoFinDeTabla(tabla) HACER
 PróximoRegistro(tabla)
 HacerAlgo(ElementoActual(tabl
FIN MIENTRAS