jueves, 14 de julio de 2011

Extra ANSI C

Formato Para Variable



FormatoDescripción
%c
%d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%%
%p
%n
Un caracter
Real o Entero
Real
Notacion con "e"
Notacion con "E"
Real
Real
Real con notacion "E"
Octal
Cadena
Real sin signo
Hexadecimal en minusculas
Hexadecimal en mayusculas
Imprime %
Apuntador
Argumento de apuntador



Funciones de Conversion


FunciónDescripción
fcvt
ecvt
gcvt
itoa
ltoa
ultoa
ctime
atoi
atol
_atold
atof
strtol
strtoul
strtod
asctime
strlwr
strupr
strxfrm
toupper
tolower
toascii
Convierte un real a string
Convierte un real a string
Convierte un real a string
Convierte un entero a string
Converts a long to a string
Convierte un unsigned long a string
Convierte fecha y hora a un string
Convierte un string a entero.
Convierte un string a un long
Convierte un string to un long double
Convierte un string a real
Convierte un string a long
Convierte un string a unsigned long
Convierte un string a double real
Convierte fecha y hora a ASCII
Convierte el contenido de un apuntador a caracteres a minusculas
Convierte el contenido de un apuntador a caracteres a mayusculas
Transforma una porcion de un string
Translada caracteres a mayusculas
Translada caracteres a minusculas
Translada caracteres a ASCII formato


REFERENCIAS
http://www.publispain.com/supertutoriales/programacion/c_y_cplus/cursos/3/index.htm

Extra ANSI C

C

El lenguaje de programacion en el cual estuvimos enfocados al 100% en este curso fue en el C.
Es un programa facil de aprender con practica, pero tambien tiene sus ventajas y desventajas.

Ventajas de C

  • Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.

  • A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.

  • Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.


  • Inconvenientes

    - La velocidad de desarrollo: es más lento programar en C, sobre todo para el principiante. La razón estriba en que el compilador de C se limita a traducir código sin apenas añadir nada.

    - C no dispone de sistemas de control automáticos y la seguridad depende casi exclusivamente de la experiencia del programador.

     - La gestión de la memoria es un ejemplo clásico: en C el programador ha de reservar y liberar la memoria explícitamente. En otros lenguajes (como BASIC, Matlab o C#) la memoria es gestionada de forma transparente para el programador. Esto alivia la carga de trabajo humano y en muchas ocasiones previene errores, aunque también supone mayor carga de trabajo para el procesador.
    ..
    .
    REFERENCIAS
    http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)

    Extra ANSI C

    Imagenes en LATEX

    El dia de ayer subi una presentacion con diapositivas al blog, y  puse un par de formulas, pero las formulas salieron chuecas y no se veian bien, la Dra. Schaeffer me recomendo usar imagenes en LATEX, entonses me puse a investigar sobre esto.


    En cualquier tipo de documento que escribamos, las imágenes son una parte importante para darle realce al mismo o para explicar un tema que contenga demasiada teoria, en Latex insertar imágenes es un tema que a muchos nos da más de un problema, pero la solución es fácil.

    El formato de preferencia para imágenes en Latex son los PostScript (eps), y se debe guardar en la misma carpeta que se encuentra el archivo tex, asi se evita de problemas como que la imagen no aparezca cuando se lleve el archivo a otra máquina para ejecutarlo.

    Escribimos el siguiente código:
    En el preambulo del documento es decir despues de \documentclass [......] {….} cargamos el paquete de imágenes:
    \usepackage{graphicx}
    Esto nos permitira ingresar imágenes en cualquier parte del documento con la siguiente estructura:
    \begin{figure} [h]
    \begin {center}
    \includegraphics[width=0.5\textwidth]{nombre de la imágen}
    \caption{Descripción}
    \end {center}
    \end{figure}
    En la primera línea se encuentra entre corchetes [h], esto indica el lugar donde va la imágen, pero si lo elimina Latex seleccionará el mejor lugar donde colocarla, que no siempre es el lugar que deseamos.

    - El “truco” para insertar la imagen en el documento consiste en poner la referencia relativa (al archivo fuente.tex) de la imagen, en este ejemplo indicando con el punto y la barra [ ./ ] se le indica al compilador de LaTeX que debe buscar la imagen [./wow.jpg] “en este mismo directorio en donde se localiza el archivo fuente.tex” o en su defecto; con el punto, la barra y el nombre de un directorio, se le indica que debe buscar dentro de ese directorio la imagen deseada [./images/aguila.jpg]
    .
    ..
    Esta pagina que dejo es para hacer las formulas en imagenes latex(es necesario un sistema operativo linux) .
    http://dougneubauer.com/2011/01/create-png-images-from-latex-equations/
    ..
    .
    REFERENCIAS
    http://jkharlos.wordpress.com/2007/09/03/imagenes-en-latex/
    http://valar.wordpress.com/2004/01/30/imagenes-en-latex/

    Extra ANSI C

    CONTROL DE VERSIONES

    - Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo. Los sistemas de control de versiones facilitan la administración de las distintas versiones de cada producto desarrollado, así como las posibles especializaciones realizadas.

    - El control de versiones se realiza principalmente en la industria informática para controlar las distintas versiones del código fuente.

    - Existen varios software de control de versiones, como por ejemplo el git (recomendado).

    GIT

    - Git es un software de control de versiones , pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de código fuente.

    - Git se ha convertido en un sistema de control de versiones con funcionalidad plena.

    - Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.
    ..
    .
    REFERENCIAS
    http://es.wikipedia.org/wiki/Git
    http://es.wikipedia.org/wiki/Control_de_versiones

    Extra ANSI C

    COMPILADOR

    - El compilador que usamos durante todo el curso de verano fue el gcc.

    - El proceso de compilación involucra cuatro etapas sucesivas: preprocesamiento, compilación, ensamblado y enlazado. Para pasar de un programa fuente escrito por un humano a un archivo ejecutable es necesario realizar estas cuatro etapas en forma sucesiva. Los comandos gcc son capaces de realizar todo el proceso de una sola vez.

    - Etapas de compilacion:

    Preprocesado:
     En esta etapa se interpretan las directivas al preprocesador. Entre otras cosas, las variables inicializadas con #define son sustituídas en el código por su valor en todos los lugares donde aparece su nombre.

    Compilacion
     La compilación transforma el código C en el lenguaje ensamblador propio del procesador de nuestra  máquina.

    Ensamblado
     El ensamblado transforma el programa escrito en lenguaje ensamblador a código objeto, un archivo binario en lenguaje de máquina ejecutable por el procesador.

    Enlazado
     Las funciones de C incluídas en nuestro código, tal como printf(), se encuentran ya compiladas y ensambladas en bibliotecas existentes en el sistema. Es preciso incorporar de algún modo el código binario de estas funciones a nuestro ejecutable. En esto consiste la etapa de enlace, donde se reúnen uno o más módulos en código objeto con el código existente en las bibliotecas.

    ..
    .
    REFERENCIAS
    http://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm#EtapasCompilacion

    DECLARACION DE VARIABLES ,,Extra Ansi C

    Tipo Declaración Limite Inferior Limite Superior
    Entero
    Entero Corto
    Entero Largo
    Entero sin Signo
    Entero con Signo
    Real
    Real Doble
    Real Largo
    Caracter
    Caracter sin signo
    Caracter con signo
    Palabra
    Valor Nulo
    Arreglo
    Texto
    ante
    Apuntador
    Int A;
    Short Int A;
    Long Int A;
    Unsigned Int A;
    Signed Int A;
    Float A;
    Double A;
    Long DoubleA;
    Char A;
    Unsigned Char A;
    Signed Char A;
    Char[ ] A;
    Void
    Int A[N]
    Text A;
    A;
    *A
    -32768
    -128
    2E -6
    0
    -65000
    -3.4E37
    -1.7E -304
    3.4E -4932
    -128
     
      0
    32767
    127
    2E 6
    65535
    65000
    3.4E 38
    1.7E 308
    1.1E 4932
    127
     
      0

    Extra ANSI C

     RUTINAS

    - Una rutina es una especie de subprograma que utiliza el programa principal sólo cuando lo considera necesario para realizar una tarea específica.

    - En programación, una rutina de software independiente que realiza una tarea para el programa en que está escrita o para algún otro programa. La función ejecuta la operación y devuelve el control a la instrucción siguiente a la que la llamó o al programa que la llamó.
     SUBRUTINAS

    - Una subrutina se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica.

    - Una subrutina al ser llamada dentro de un programa hace que el código principal se detenga y se dirija a ejecutar el código de la subrutina.
     ..
     .
    REFERENCIAS 
    http://www.mastermagazine.info/termino/5094.php
    http://es.wikipedia.org/wiki/Subrutina 

    Extra ANSI C

    Bueno, como se que todos los de la clase de ANSI C somos IAS o ITS es importante entender esto:

    Lenguaje de Programacion:

    - Un lenguaje de es un lenguaje que puede utilizado para controlar el comportamiento de una máquina, particularmente una computadora.

    - Aunque muchas veces se usa lenguaje de programación y lenguaje informático como si fuesen sinónimos, no tiene por qué así, ya que los informáticos engloban a los de y a otros más, como, por ejemplo, el HTML (lenguaje para el de páginas web).

    de y a otros más, como, por ejemplo, el HTML (lenguaje para el de páginas web).

    - Un lenguaje de permite a o más programadores especificar de manera precisa: sobre qué datos una debe operar, cómo deben estos almacenados, transmitidos y qué acciones debe tomar una variada de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural.

    - El software es un conjunto de instrucciones o secuencias, realizadas por el usuario, las cuales permiten controlar las actividades u funciones de las computadoras u ordenadores.

    - Algunos programas en los que aprenderemos a programar a lo largo de la carrera (ya sea en clases o por nuestra cuenta) son:
      - Java
      - C
      - HTML
      - MySQL
      - PHP
      - XML
      - C #
    ..
    .
    REFERENCIAS
    http://www.monografias.com/trabajos61/resolucion-problemas-usando-computadoras/resolucion-problemas-usando-computadoras2.shtml
    http://www.lenguajes-de-programacion.com/software.shtml

    Extra ANSI C

    PILA

    - Una pila es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir, a diferencia de la cola que es FIFO First in First Out) que permite almacenar y recuperar datos.

    - Para el manejo de los datos se cuenta con dos operaciones básicas: apilar , que coloca un objeto en la pila, y su operación inversa, retirar , que retira el último elemento apilado.

    - En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado.

    - Las pilas suelen emplearse en los siguientes contextos:
    • Evaluación de expresiones en notación postfija (notación polaca inversa).
    • Reconocedores sintácticos de lenguajes independientes del contexto
    • Implementación de recursividad.

    REFERENCIAS
    http://es.wikipedia.org/wiki/Pila_(inform%C3%A1tica)

    Extra ANSI C

    COLAS

    Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.

    Aplicabilidad

    Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

    --
    --
    -
    Existen 2 tipos de colas:

    - Colas circulares (anillos): en las que el último elemento y el primero están unidos.
    - Colas de prioridad:  En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen.

    ...
    ..
                                              EJEMPLO
     
    REFERENCIAS

    Extra ANSI C

    Bueno, ya que en mi primer tarea obtuve pocos puntos, la modifico en esta entrada poniendo para que se uso hoy en dia ANSI C

    - Se usa para el desarrollo de otros sistemas operativos

    - Es muy usado en aplicaciones científicas (como modelos y simuladores), industriales (industria robótica, cibernética, sistemas de información y base de datos para la industria petrolera y petroquímica

    - Predominan también todo lo que se refiere a simulación de máquinas de manufactura), simulaciones de vuelo

    - Se puede seguir encontrando código C en grandes desarrollos de animaciones, modelados y escenas en 3D en películas y otras aplicaciones multimedia.

    - C es el lenguaje común para programar sistemas embebidos.


    REFERENCIAS:
    http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)#Aplicabilidad

    Extra Diferentes tipos de algoritmos

    Algoritmos

    Existen diferentes tipos de Algoritmos .

    Los algoritmos se clasifican en 2 clases:
    - Algoritmos de ordenamiento
    - Algoritmos de busqueda

    Algoritmos de Ordenamiento

    Este tipo de algoritmos pone elementos de una lista o un vector en una secuencia dada por una relación de orden, es desir, hace un reordenamiento.

    Hay una serie de algoritmos de ordenamiento, pero los mas utilizados son :

    - Bubble Sort
    - Merge Sort
    - Insertion Sort
    - Shell Sort
    - Quick Sort
    - Heap Sort

    Estos son solo unos ejemplos de los algoritmos de ordenamiento. La mayoria de estos algoritmos tienen una complejidad  "O(n²)" , o "O(n log n)".

    Algoritmos de Busqueda

    Es aquel que está diseñado para localizar un elemento con ciertas propiedades dentro de una estructura de datos; por ejemplo, ubicar el registro correspondiente a cierta persona en una base de datos, o el mejor movimiento en una partida de ajedrez.

    Entre los mas destacados algoritmos de busqueda estan los siguientes:

    - Algoritmo Boyer-Moore
    - Algoritmo A*
    - Algoritmo de busqueda en grafos
    - Algoritmo Dijkstra

    ....
    ..
    .
    Recomiendo que vean esta pagina para que vean todos los tipos de algoritmos de ordenamiento, ya que tiene los links a cada uno de ellos. http://es.wikipedia.org/wiki/Algoritmos_de_ordenacion


    REFERENCIAS
    http://www.wikipedia.com/

    Extra Algoritmos - Algoritmo de prim

    Algoritmo de prim

    El algoritmo de Prim es un algoritmo perteneciente a la teoría de los grafos para encontrar un árbol recubridor mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas.

    En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible

    Como Funciona

    El algoritmo incrementa continuamente el tamaño de un árbol, comenzando por un vértice inicial al que se le van agregando sucesivamente vértices cuya distancia a los anteriores es mínima. Esto significa que en cada paso, las aristas a considerar son aquellas que inciden en vértices que ya pertenecen al árbol.
    El árbol recubridor mínimo está completamente construido cuando no quedan más vértices por agregar.

    Pseudocodigo del Algoritmo con sus repectivos comentarios

    // Inicializamos todos los nodos del grafo. La distancia la ponemos a infinito y el padre de cada nodo a NULL
           // Encolamos, en una cola de prioridad donde la prioridad es la distancia, todas las parejas <nodo,distancia> del grafo
           por cada u en V[G] hacer
               distancia[u] = INFINITO
               padre[u] = NULL
               Añadir(cola,<u,distancia[u]>)
           distancia[u]=0
           mientras cola != 0 hacer
               // OJO: Se entiende por mayor prioridad aquel nodo cuya distancia[u] es menor.
               u = extraer_minimo(cola) //devuelve el minimo y lo elimina de la cola.
               por cada v adyacente a 'u' hacer
                   si ((v ∈ cola) && (distancia[v] > peso(u, v)) entonces
                       padre[v] = u
                       distancia[v] = peso(u, v)
                       Actualizar(cola,<v,distancia[v]>)
    
    Algoritmo de Prim

    Ya que no me quiso agarrar el embed del video, aqui les dejo el link donde biene muy bien explicado el algoritmo de prim: http://www.youtube.com/watch?v=O8XEOz8FCDQ

    REFERENCIAS
    http://es.wikipedia.org/wiki/Algoritmo_de_Prim

    miércoles, 13 de julio de 2011

    martes, 12 de julio de 2011

    Extra ANSI C , Tablas de Dispersion y Usos

    - Las tablas de dispersion sirven para realizar inserciones, eliminaciones y busquedas en tiempo promedio constante. 

    - Son estructuras de datos que se usan en aplicaciones que manejan una secuencia de elementos, de tal forma que cada elemento tiene asociado un valor clave .

    - Estructura de datos ideal: un vector con tamano fijo N.
     
    - Una funcion de dispersion establece la correspondencia
    de cada clave con algun numero en el intervalo [0 . . . N − 1].

    - Esta funcion tiene que ser facil de calcular, y asegurar que
    dos claves distintas se correspondan con celdas diferentes.

    - Como esto ultimo es imposible, buscamos una funcion que distribuya homogeneamente las claves entre las celdas.

    - Resta escoger una funcion y decidir el tamano de la tabla y que hacer cuando dos claves caen en la misma celda.

    - Si al insertar un elemento, este se dispersa en el mismo valor que un elemento ya insertado tenemos una colision y hay que resolverla.


    - Las tablas hash se suelen implementar sobre vectores de una dimensión, aunque se pueden hacer implementaciones multi-dimensionales basadas en varias claves

    - Las tablas de dispersion se usan para representar diccionarios en los que se busca una clave y se devuelve su definicion.

    REFERENCIAS:
    www.madsgroup.org/docencia/alg/tablas_de_dispersion.pd
    http://www.ie.uia.mx/acad/atortole/progra2/hash.html 

    #5 ANSI C

    #include "entrada.h"
    #include "bool.h"
    char pide_opcion(char* permitidos) {
      char actual;
      bool listo = FALSE;
      while (TRUE) {
        if (!listo) {
          actual = tolower(getchar());
          if (strchr(permitidos, actual) != NULL) {
     listo = TRUE;
          }
        } else {
          if (getchar() == '\n') {
     if (listo) {
       break;
     }
          }
        }
      }
      return actual;
    }

    int pide_numero(int minimo, int maximo) {
    if(Maximo> pide_numero) {
      int numero = SIN_DEFINIR;
      char* entrada = NULL;
      char actual;
      int pos;
      double temp;
     
      entrada =
        (char*)malloc(sizeof(char)*
        LARGO_MAXIMO + 1);
      if (entrada == NULL) {
        return SIN_DEFINIR;
      }
      do {
        printf("Dame un valor entre %d y %d: ",
        minimo, maximo);
        // insistir
        pos = 0;
        do {
          actual = getchar();
          if (pos < LARGO_MAXIMO) {
     if (isdigit(actual)) {
       entrada[pos++] = actual;
     }
          }
        } while (actual != '\n');
        entrada[pos] = '\0';
        temp = atof(entrada);
        if (temp > INT_MAX - 1) {
          continue;
        }
        numero = atoi(entrada);
      } while (numero < minimo || numero > maximo);
      printf("Gracias.\n");
      free(entrada);
      return numero;
    }
    void pide_cadena(char* entrada) {
      char actual;
      int pos;
      bool ignorar_resto;
     
      do {
        ignorar_resto = FALSE;
        // printf("Dame una palabra: ");
        // insistir
        pos = 0;
        actual = getchar();
        if (!isalpha(actual)) {
          ignorar_resto = TRUE;
        } else {
          entrada[pos++] = toupper(actual);
          //printf("Iniciando con %c.\n", actual);
        }
        do {
          actual = getchar();
          if (pos < LARGO_MAXIMO) {
     if (!ignorar_resto &&
         isalnum(actual)) {
       entrada[pos++] = toupper(actual);
       //printf("Aceptamos %c.\n", actual);
     } else {
       if (actual == '\n') {
         //printf("Procesando.\n");
         break;
       }
       ignorar_resto = TRUE;
       //printf("Rechazamos %c.\n", actual);
     }
          }
        } while (TRUE);
        if (ignorar_resto) {
          pos = 0;
        }
      } while (pos == 0);
      entrada[pos] = '\0';
      printf("Gracias: <%s>\n", entrada);
      return;
    }

    EXTRA

    GRAFOS
    Teoria de Grafos
    En matemáticas y en ciencias de la computación, la teoría de grafos estudia las propiedades de los grafos. Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de pares de vértices, llamados aristas que pueden ser orientados o no. Típicamente, un grafo se representa mediante una serie de vértices conectados por aristas.
                                       
                                             DIAGRAMA DE UN GRAFO CON 6 VERTICES Y 7 ARISTAS

    Grafos Bipartitos
    Un Grafo bipartito se denomina en Teoría de grafos a un grafo cuyos vértices se pueden separar en dos conjuntos disjuntos V1 y V2 y las aristas siempre unen vértices de un conjunto con vértices de otro:
                                                               V_1 \cup V_2 = V
                                                               V_1 \cap V_2 = \empty
                          \forall x_1,x_2 \in V_1, \forall y_1,y_2 \in V_2  no existe ninguna arista e = x1,x2 ni e = y1,y2

    Siendo V el conjunto que contiene todos los vértices del grafo.
    Los grafos bipartitos suelen representarse gráficamente con dos columnas (o filas) de vértices y las aristas uniendo vértices de columnas (o filas) diferentes.


    EJEMPLO DE GRAFO BIPARTITO

    REFERENCIAS:
    Familia de Grafos: http://es.wikipedia.org/wiki/Categor%C3%ADa:Familias_de_grafos

    Extra Algoritmos Computacionales.

    Vectores Propios
    Los vectores propios de un operador lineal son los vectores no nulos que, cuando son transformados por el operador, dan lugar a un múltiplo escalar de sí mismos, con lo que no cambian su dirección.

    A menudo, una transformación queda completamente determinada por sus vectores propios y valores propios. Un espacio propio es el conjunto de vectores propios con un valor propio común.
    La formula es:

    Espectro de Matriz

    El conocimiento del espectro de una matriz, esto es, el conjunto de sus valores propios, tiene mucho interes a la hora de estudiar su condicionamiento para aplicar metodos iterativos de resolucion de sistemas de ecuaciones lineales. El teorema de Gerschgorin define la zona donde se encuentra dicho espectro.
    TEOREMA DE GERSCHGORIN
    El teorema de Gerschgorin nos dice que los autovalores de una matriz compleja (esto incluye también a las reales) de orden nxn, se encuentran en el espacio del plano complejo delimitado por la unión de los círculos Di.








    REFERENCIAS:
    http://es.wikipedia.org/wiki/Vector_propio_y_valor_propio
    lc.fie.umich.mx/~jrincon/apuntes%20intro%20valores%20propios.pdf

    viernes, 8 de julio de 2011

    Steve Jobs Comic

    Codigo Ordenamiento de Mezcla

    void mergeSort(int numbers[], int temp[], int array_size)

    {
    m_sort(numbers, temp, 0, array_size - 1);

    }



    void m_sort(int numbers[], int temp[], int left, int right)

    {
    int mid;

    if (right > left)

    {

    mid = (right + left) / 2;

    m_sort(numbers, temp, left, mid);

    m_sort(numbers, temp, mid+1, right);


    merge(numbers, temp, left, mid+1, right);

    }

    }



    void merge(int numbers[], int temp[], int left, int mid, int right)

    {

    int i, left_end, num_elements, tmp_pos;


    left_end = mid - 1;

    tmp_pos = left;

    num_elements = right - left + 1;



    while ((left <= left_end) && (mid <= right))

    {

    if (numbers[left] <= numbers[mid])

    {

    temp[tmp_pos] = numbers[left];

    tmp_pos = tmp_pos + 1;

    left = left +1;

    }

    else

    {

    temp[tmp_pos] = numbers[mid];

    tmp_pos = tmp_pos + 1;

    mid = mid + 1;

    }

    }



    while (left <= left_end)

    {

    temp[tmp_pos] = numbers[left];

    left = left + 1;

    tmp_pos = tmp_pos + 1;

    }

    while (mid <= right)

    {

    temp[tmp_pos] = numbers[mid];

    mid = mid + 1;

    tmp_pos = tmp_pos + 1;

    }



    for (i = 0; i <= num_elements; i++)

    {

    numbers[right] = temp[right];

    right = right - 1;

    }

    }

    TAREA #3 Algoritmos Computacionales (Merge Sort)

    jueves, 7 de julio de 2011

    TAREA #4 ANSI C Programa utilizando un ciclo con el comando FOR

    #include <stdio.h>
    #include <stdlib.h>


    int main(){
    int dime,conta,resu;


    printf("dime el numero a multiplicar: ");
    scanf("%d",&dime);

    for(conta=0; conta<21; conta++){
    resu=dime*conta;
    printf("%d*%d = %d \n" ,dime,conta,resu);
    }

    return 1;
    }


    Este es un programa que realize. Se trata de que el usuario le diga un numero , y la maquina le lanzara la tabla de multiplicar del numero introducido hasta el 20.

    miércoles, 6 de julio de 2011

    TAREA #2 Algoritmos Computacionales

    PROBLEMA "INDEPENDENT SET" conocido como IND-SET

    Problema: Es un problema NP completo. El problema consiste en encontrar el mas largo(maximum) independent set en una grafica. Este problema de optimizacion puede ser tansformado en un problema de desicion, siguiendo el siguiente lenguaje:

         INDSET = {<G,k> : G es una grafica con un independent set de tamano k.


    La grafica del problema consiste en una serie de aristas unidas por un nodo o vertice quq tienen algun color (color negro) pero algunos nodos tienen un color distinto (color rojo), y los nodos que tienen el color rojo no se pueden conectar mediante aristas, en cambio los negros si lo pueden hacer.








    *Un independent set que no es el subconjunto de otro independent set es llamado: Maximal independent set

    *Independent Set : juego independiente.

    *El nivel de una grafica independent set es el numero de sus aristas.

    En la ciencia computacional , diversos problemas computacionales relacionados con "independent set" han sido estudiados, ejemplos:

     - Independent set Decision: aqui la entrada(input) es un grafico indirigido y un numero "k", y la salida(output) es una exprecion booleana: verdadero si la grafica contiene un independent set de tamano k, y falso de alguna otra manera.

    - Maximum Independent Set problem: aqui la entrada(input) es un grafico indirigido, y la salida(output) es un Maximum independent set en la grafica. Si hay varios Maximum Independent sets solo una necesitara ser la salida.

    - Maximal independent set listing problem: aqui la entrada(input) es un grafico indirigido, y la salida(output) y la salida es una lista de todos sus Maximum Independent sets. El Maximum independent set problem puede ser solucionado usando una subrutina o algoritmo para el Maximal independent set listing problem, poque el Maximun independent set debe ser incluido entre todos los Maximal independent sets.



    Justificacion : despues de investigar algunas horas este problema, me preguntaba para que sirve esto?, cuales son sus aplicaciones? y aqui encontre algunas:
    - sirve para la teroria de informacion/codificacion.
    - para etiquetaje de mapas(map labeling).
    - biologia molecular.
    - Planificacion
    y algunas otras mas, pero estas fueron las que me parecieron mas interesantes.


     *Imagen: Map labeled(mapa etiquetado)






    1- void conflict( )
    2- {
    3- int c=0,del=0,rm,J=0;
    4-   for(int i=0;i<size1;i++)
    5-   {
    6-   c=0;
    7-     for(int j=0;j<size1;j++)
    8-       if( graph[ind_set[i]][ind_set[j]]=1)
    9-       c++;
    10-       if(c>del)
    11-      {
    12-      del=c;
    13-      rm=ind_set[i];
    14-      }
    15-    }
    16-    if(del>0)
    17-   {
    18-    size1--;
    19-    J=0;
    20-     for(int i=0;i<num_node;i++)
    21-        if(rm!=ind_set[i] AND J<size1)
    22-        G1[J++]=ind_set[i];
    23-           for(i=0;i<J;i++)
    24-           ind_set[i]=G1[i];
    25-           size1=J;
    26-          conflict( );
    27-     }
    28- }


    Este es un algoritmo para encontrar el Maximum independent Set en una grafica.


    Derivaciones del problema:
    - Un set es independiente si y solo si hay un clique en las graficas complementarias.
    - Un set es independiente si y solo si su complemento es un vertex cover.


    REFERENCIAS
    http://en.wikipedia.org/wiki/Independent_set_%28graph_theory%29
    http://mathworld.wolfram.com/IndependentSet.html
    Muy recomendada esta pag:
    http://www.dharwadker.org/independent_set/