martes, 23 de noviembre de 2010

Promedio Final

99


The End

Lenguaje C++ (Puntos extras)

 Lenguaje C++


C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.



 Los tipos de datos en C++

C++ tiene los siguientes tipos fundamentales:
  • Caracteres: char (también es un entero), wchar_t
  • Enteros: short int, int, long int, long long int
  • Números en coma flotante: float, double, long double
  • Booleanos: bool
  • Vacío: void
El modificador unsigned se puede aplicar a enteros para obtener números sin signo (por omisión los enteros contienen signo), con lo que se consigue un rango mayor de números naturales.

 Hola mundo en C++



# include <iostream> 
 
using namespace std;
 
int main()
{
    cout << "Hola mundo" << endl;
    return 0; 
}
 
 




El concepto de Clase 

Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la programación orientada a objetos un objeto consta de:
  1. Métodos o funciones
  2. Atributos o Variables Miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.

Un ejemplo de una clase:

class Punto
{

private: 
        // Variable miembro privada
        int id;
protected:
        // Variables miembro protegidas
        int x;
        int y;
public:
        // Constructor
        Punto();
        // Destructor
        ~Punto();
        // Funciones miembro o métodos
        int ObtenerX();
        int ObtenerY();
};



Referencias:

Reporte 8 - Lenguajes orientados a objetos

 Lenguaje C

Bueno esta es mi entrada, solo hice este programa en C++ ,  solo hice uno , pero utilicé lo que son las funciones inline que publiqué en mi entrada anterior, con el fin de ver como se usaban y tambien para hacer pruebas en C++ ya que nunca lo habia manejado. 

Bueno este es mi ejemplo, quiero aclarar que lo del switch al parecer es lo mismo que en C , no estoy seguro de eso, pero preferí escogerlo en lugar de utilizar if como en un programa anterior que hice en phyton,  asi que si esa no es la manera correcta haganmelo saber,  eso del switch lo saqué de aquí:

Programacion Facil.com - Instruccion switch
lcc.uma.es - Switch

Bueno he aquí mi código:

#include <iostream>
int resultado;
int a, b;

using std::cin ;
using std::cout;
using std::endl;

inline int suma ( int x, int y ) { return x + y;}
inline int resta( int x, int y ) { return x - y;}
inline int multiplicacion( int x, int y ) { return x * y;}
 
void recive()
{
    cout << "Introduzca el primer numero: ";
    cin >> a;
    cout << "Introduzca el segundo numero: ";
    cin >> b;    
}

int main()
{  
 int opcion;
 cout << "--Menu--\n\n";
 cout << "1.Suma de dos numeros\n" ;
 cout << "2.Resta de dos numeros\n";
 cout << "3.Producto de dos numeros\n\n\n";

 cout << "Introduzca una opcion: " ;
 cin >> opcion;

switch ( opcion )
 {
    case 1:
    recive();
    cout << "La suma es: " << suma( a, b) << endl;

    break;
   
    case 2:
    recive();
    cout << "La resta es: " << resta( a, b) << endl;
   
    break;
        
    case 3:
    recive();
    cout << "El producto es: " << resta(a, b) << endl;
    break;
   
    default:
    cout << "\n\n\tAdios\n";       
    break;
}

 system("pause");
 return 0;     
}


Talvez no sea la manera mas adecuada de hacer un programa simple, es solo que lo hice asi para ver la funcionalidad de C.

La ejecución:




Codigo fuente:

Descarga desde Skydrive

Si hay alguna duda con respecto al codigo, no duden en preguntar en los comentarios.


lunes, 22 de noviembre de 2010

Funciones Inline

Las funciones declaradas como inline sugieren al compilador una optimización que puede que él haga o no. La llamada a una función suele requerir un tiempo extra de ejecución, es por eso que algunas funciones pequeñas que suelen usarse muchas veces en un programa son declaradas de manera inline que sugiere al compilador que copie el código de la función y lo reemplaze por cada llamada a la función.

Un ejemplo de Inline

inline void funcion() //se agrega la palabra inline
{
  cout << "Hola" << endl;
}
 
Y luego tenemos un programa que hace la llamada a la función:
 
int main()
{
  funcion();
  funcion();
  funcion();
}
 
Si el compilador acepta poner a 

funcion() 

de manera a 

inline

El programa anterior se transformaría en algo parecido a esto:  

int main()
{
  cout
<< "Hola" << endl;
  cout
<< "Hola" << endl;
  cout
<< "Hola" << endl;
}

Ejemplo de la Utilización de inline

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
//funcion INLINE.
inline int Comparar(int num1, int num2)
{
  if (num1 == num2)
    return 0;
  if (num1 > num2)
    return 1;
  return -1;
}
int main()
{
  int ent1,ent2;
  cout << "Entero 1: ";
  cin >> ent1;
  cout << "Entero 2: ";
  cin >> ent2;
  cout << "Comparacion: " << Comparar(ent1,ent2) << endl;
}
  
 
Una recomendación es que inline debe utilizarse solo con pequeñas 
funciones que se utilicen con frecuencia, cuando utilizamos funciones 
inline se puede reducir el tiempo de ejecución pero incrementar 
el tamaño del programa.
 
Referencias:
Referencia 1 
Referencia 2 
 
 

Lenguajes Orientados a objetos (Puntos extra)

 Lenguajes Orientados A Objetos

Esta es una pequeña reseña sobre lo que son los Lenguajes orientados a objetos, entre los mas comunes tenemos el C++ , Java, el Phyton , el small talk entre otros.

Primero ¿ a que se le llama lenguaje orientado a objetos? se le llama así a cualquier lenguaje de programación que implemente los conceptos definidos por la programación orientada a objetos.

Cabe notar que los conceptos definidos en la programación orientada a objetos no son una condición sino que son para definir que un lenguaje es orientado a objetos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin embargo, no invalidar su definición como lenguaje orientado a objetos.

Siguiendo esa idea, cualquier lenguaje que permita la definición de tipos de datos , de operaciones nuevas sobre esos tipos de datos, y de instanciar el tipo de datos podría ser considerado orientado a objetos.
Esta definición concuerda incluso con ciertos ejemplos prácticos, que no son considerados dentro de la programación orientada a objetos, pero que podrían serlo. Por ejemplo, la programación de interfaces gráficas de usuario para los sistemas X-Window utilizando infraestructuras de funciones y APIs como Motif, Xview y Xlib, son realizadas usualmente en lenguaje C, pero organizando el código en una manera que "parecen objetos" (los Widgets).

La programación orientada a objetos, intenta simular el mundo real a traves del significado de objetos que contiene caracteristicas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacion.
Como su mismo nombre indica, la programación orientada a objetos se basa en la idea de un objeto, que es una combinacion de variables locales y procedimientos llamados metodos que juntos conforman una entidad de programación.

En la programación orientada a objetos se define la herencia como una jerarquia de extracciones, y la relacion entre clases, donde se comparte la estructura y el comportamiento de una o más clase considerada como clases superiores o una superclase, con lo cual se resume que la herencia es una unidad independiente por si misma heredada de una abstraccion o superclase. 

Un ejemplo cotidiano lo encontramos en las aplicaciones que existen cactualmente en el mercado, donde un formulario cualquiera hereda las caracteristicas de uan ventana del sistema operativo Windows (Maximizar, Minimizar, Cerrar)

Bueno y una lista con algunos de los lenguajes de este paradigma:

  • C++
  • Objective C
  • Java
  • Smalltalk
  • Eiffel
  • Lexico (en castellano)
  • Ruby
  • Python
  • OCAML
  • Object Pascal
  • CLIPS
  • Visual .net
  • Actionscript
  • COBOL
  • Perl
  • C#
 
 Un ejemplo en C++, La serie de fibonacci

#include <iostream.h>
#include <stdlib.h>
void main()
{
int a,b,x,c,l;
a=1; b=1; x=0; c=0;
cout<<"Introduce el limite de la serie: "; cin>>l;
if (l>0) {
    if (l==1) cout<<"1"<<endl;
          else
            {
            cout<<endl<<a<<", "<<b<<", ";
            while (c<l-2)
              {
               c++;
               x=a+b;
               cout<<x<<", ";
               a=b;
               b=x;
              }
            }
        }
  }

 


Serie de Fibonacci en Java

public class Fibonacci
{

public static void main (String [] args)
{

int f1=1, f2=1;
System.out.println (f1);
while (f1<200){
System.out.println(f2);
f2+=f1;
f1 = f2 - f1;
}

}

}


Biblografía:

Lenguajes Orientados a Objetos

Lenguajes orientados a objetos - Otra referencia

El ejemplo

UML (Puntos Extra)

Como lo vimos en clase,  un diagrama UML pues nos ayuda mucho a la hora de generar una estructura general de un programa orientado a objetos, en nuestro ejemplo en clase, hicimos un diagrama en Java si no recuerdo mal.
Bueno aqui una pequeña información acerca de.



UML

Lenguaje Unificado de Modelado (LUM o UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.


DIAGRAMAS
En UML 2.0 hay 13 tipos diferentes de diagramas. Para comprenderlos de manera concreta, a veces es útil categorizarlos jerárquicamente, como se muestra en la figura de la derecha.
Los Diagramas de Estructura enfatizan en los elementos que deben existir en el sistema modelado:
  • Diagrama de clases
  • Diagrama de componentes
  • Diagrama de objetos
  • Diagrama de estructura compuesta (UML 2.0)
  • Diagrama de despliegue
  • Diagrama de paquetes
Los Diagramas de Comportamiento enfatizan en lo que debe suceder en el sistema modelado:
  • Diagrama de actividades
  • Diagrama de casos de uso
  • Diagrama de estados
COMO UTILIZARLOS

Bien, para poder generar este tipo de diagramas necesitamos un software para hacerlo, en este caso para trabajar en Ubuntu hay un paquete que se llama.

En clase vimos uno pero tambien está este llamado Dia



¿ Como lo instalo?

sudo apt-get install dia


Tambien hay otro que se llama BoUML y para instalarlo basta con entrar en los paquetes de Synaptic y buscaro , debe de aparecer , o tambien usando sudo apt-get install BoUML.




Referencias:

UML 

Recursión (Puntos extras)

La recursión se basa en expresar el resultado de un problema como operaciones aplicadas sobre una instancia reducida del mismo problema, hasta que se llega a un caso donde el problema queda bien definido.

En terminos mas simples la recursión se realiza cuando una función se llama a si misma, hasta llegar a un caso base.

Algunos ejemplos sobre recursión:

  • Factorial(x: Entero): Sea N := x el tamaño del problema, podemos definir el problema de forma recurrente como x*Factorial(x - 1); como el tamaño de Factorial(x - 1) es menor que N podemos aplicar inducción por lo que disponemos del resultado. El caso base es el Factorial(0) que es 1.
  • Ordenación por fusión(v: vector): Sea N := tamaño(v), podemos separar el vector en dos mitades. Estas dos mitades tienen tamaño N/2 por lo que por inducción podemos aplicar la ordenación en estos dos subproblemas. Una vez tenemos ambas mitades ordenadas simplemente debemos fusionarlas. El caso base es ordenar un vector de 0 elementos, que está trivialmente ordenado y no hay que hacer nada.

 Ejemplos Básicos en C

 Bueno a continuación dos ejemplos en C sobre la recursión, ya saben cuales son.

Fibonacci

#include <stdio.h>
 
long fibonacci( long n ); 
 int main()
{
   long resultado; 
   long numero;     
   printf( "Introduzca un entero: " );
   scanf( "%ld", &numero);
 
     resultado = fibonacci( numero );
 
     printf( "Fibonacci( %ld ) = %ldn", numero, 
    resultado );
      return 0; 
 
} 
 long fibonacci( long n )
{
      if ( n == 0 || n == 1 ) {
      return n;   }
   else { 
      return fibonacci( n - 1 ) + fibonacci( n - 2 );
   }    } 




Factorial

#include <stdio.h>
 
long factorial( long numero ); 
int main()
{
   int i; 

   for ( i = 0; i <= 10; i++ ) {
      printf( "%2d! = %ldn", i, factorial( i ) );
   }     return 0; 
} 
 long factorial( long numero )
{
     if ( numero <= 1 ) {
       return 1;   } 
   else { 
      return ( numero * factorial( numero - 1 ) );
   }  } 




Referencias:

Recursión
Información Sobre recursión
Ejemplo 1

Ejemplo 2

Lenguajes Multiparadigma (Puntos extra)

Lenguajes Multiparadigma

Un lenguaje de programación multiparadigma es el cual soporta más de un paradigma de programación. Según lo describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo de programación”.

El objetivo en el diseño de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Bueno pues la caraceristica principal de estos no están orientados solo a un paradigma, si no a varios.



Lenguaje Go (El lenguaje de Google)

Go es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de C. Ha sido desarrollado por Google y sus diseñadores iniciales son Robert Griesemer, Rob Pike y Ken Thompson.

En pocas palabras, es el lenguaje que desarrolló google y tiene una sintaxis parecida a la de C, si no me creen aqui les dejo unos ejemplos.

Ejemplos

El "Hola mundo"


package main

import "fmt"

func main() {
    fmt.Println("Hola mundo")
}


Otro ejemplo, la serie de fibonacci

package main


func fib() func() int {
    a, b := 0, 1
    return func() int {
        a, b = b, a+b
        return b
    }
}

func main() {
    f := fib()
    println(f(), f(), f(), f(), f())
}



Los comentarios son como en C , de una sola linea //  y de varias lineas /*  */ , ¿que le pasó al printf?  se convirtió en fmt.Println("Hola mundo") o también fmt.Printf("Hola")   

¿Un manual de Go?
Lenguaje OZ



Oz es un lenguaje de programación multi-paradigma y lenguaje de programación esotérico.
Oz fue originalmente desarrollado en el laboratorio de Programación de Sistemas en la Universidad de Saarland por Gert Smolka y sus estudiantes a comienzos de 1990. 

Oz tiene una implementación de gran calidad, el Sistema de Programación Mozart, que fue liberado bajo una licencia de Código Abierto por el Consorcio Mozart. Mozart ha sido portado a diferentes plataformas como Unix, FreeBSD, Linux, Microsoft Windows, y Mac OS X.

Oz contiene una forma simple y bien hecha de la mayoría de los conceptos de los principales paradigmas de programación, incluyendo programación lógica, funcional, imperativa, orientada a objetos, con restricciones, distribuida, concurrente. Oz tiene una semántica formal simple y una implementación eficiente, el Sistema de Programación Mozart.  



Ejemplo 

El clasico hola mundo se escribe así en Oz

 {Browse 'Hello World'}

¿y el compilador?

Bueno pues aqui en esta pagina está

Compilador


Referencias:

Información - 1
Información - 2
Ejemplos - Vienen en el cuadrito amarillo
Información - 3

sábado, 20 de noviembre de 2010

Arreglos multidimensionales en C (Puntos extra)

Introducción

Un arreglo o vector o array es una colección de variables del mismo tipo que se refieren por medio de indices.

Por ejemplo un arreglo sería este:

int numeros[10];
En este caso son 10 variables llamadas todas "numeros" pero por ejemplo, si quiero acceder a alguna de ellas solo hago referencia al indice que quiero. En C el primer indice o elemento es el elemento 0.


Arreglos 
Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). 

Hay arreglos unidimensionales(fila)  o multidimensionales. Generalmente se trabaja con arreglos de 2 dimensiones ( fila y columna).

Ejemplo Clasico (Arreglo Bidimensional)

En este ejemplo mostraré como funcionan los arreglos multidimensionales, en este caso trabajaré con 2 dimensiones (bidimensionales) , lo unico que hace este programa es hacer una suma de arreglos los hice yo , te pide el numero de filas y de columnas (tienen que ser el mismo valor en las 2 ) , lo llenas y al final suma todos los elementos del arreglo.

#include <stdio.h>   

int main (void){
   
   
    int F; //Filas//
    int C; //Columnas//
   
    do
    {
    
     printf("Escriba las filas de la matriz ");
     scanf ("%d", &amp;F);
     printf("Escriba las columnas de la matriz ");
     scanf ("%d", &amp;C);
   
     }
    while ( F != C );
    printf("La matriz es de %d x %d por lo cual tendra %d elementos \n\n" , F , C , (F*C));
   
  int matriz [F][C];   //F - Filas      C -  Columnas // //j - Filas   i = Columnas //

 
  int i;  //Columna//
  int j;  // Fila//
 
  for ( i = 1 ; i &lt;= C ; i++ ) 
  {

      for (j=1 ; j &lt;= F ; j++ )
    {
         
          printf("Escriba el valor de elemento %d en la columna %d " , j,i);
          scanf ("%d" , &amp;matriz[i][j] );
         
         
    }
   
}  
   
int suma=0;

for (i = 1 ; i &lt;= C ; i++ )
{
    for (j = 1 ; j&lt;= F ; j++ )
    {
        suma = suma + matriz[i][j];
        }
}


   
  printf ("La suma es %d \n\n" , suma ); 
   

    return 0;
}

Gráficamente

Bueno pues aqui les muestro una imagen para que entiendan los arreglos unidimensionales,  bidimensionales y multidimensionales.

La primer imagen ,  un arreglo unidimensional , la segunda a la derecha es un arreglo bidimensional y el de abajo un arreglo multidimensional.

Fuentes:
http://es.wikipedia.org/wiki/Vector_%28programaci%C3%B3n%29  --
Un poco de la info de introducción

http://logicacomputacion.blogspot.com/2007/09/clase-10-estructuras-de-datos-y.html --
Imagen

Punteros en C (Puntos extras)

 ¿Que és un apuntador?

Un puntero o apuntador es una variable que referencia una región de memoria; en otras palabras es una variable cuyo valor es una dirección de memoria.

Simplemente almacena la dirección en la memoria de una variable, pero no su valor, no confundir dirección con valor .

Por ejemplo aqui hay un codigo que permite saber si dos variables son iguales utilizando apuntadores:


#include <stdio.h>

int main()
     {
     int a, b;
     int *punt1, *punt2;

     a = 5; b = 5;
     punt1 = &a; punt2 = &b;

     if ( *punt1 == *punt2 )
     printf( "Son iguales\n" );
     }
Otro ejemplo es usar los apuntadores o punteros como argumentos de funciones:


#include <stdio.h>

int suma( int *a, int b )
     {
     int c;

     c = *a + b;
     *a = 0;
     return c;
     }

int main()
     {
     int var1, var2, resultado;

     var1 = 5; var2 = 8;
     resultado = suma(&var1, var2);
     printf( "La suma es: %i y a vale: %i\n", 
     resultado , var1 );
     }



Usos de los apuntadores

Algunos de los usos de los apuntadores son: pasar argumentos (o parámetros) a una función y modificarlos. También permiten el manejo de cadenas y de arrays. Otro uso importante es que nos permiten acceder directamente a la pantalla, al teclado y a todos los componenetes de la computadora.




Bibliografía:

http://basicma.iespana.es/tc/punteros.htm
http://www.elrincondelc.com/cursoc/cursoc9.html  - Ejemplos

Generación de Números aleatorios (Puntos extra)

Bueno compañeros , aqui les pongo esta entrada sobre la generación de numeros aleatorios en C.


Primero, lo que tenemos que saber esque hay una función llamada rand en C para la generación de numeros aleatorios. Se encuentra en la libería

A continuación un ejemplo:


Bueno esa es la ejecución de un programa que genera 20 numeros aleatorios, el codigo fuente es este:

Bueno pues ahi como ven en la imagen, está la libería stdlib la cual tiene la función rand (random), en este caso para llamar a la funcion usamos la siguiente función:

rand() % x;

En donde x es el rango hasta el cual se harán los numeros aleatorios.

por ejemplo si uso esto:

rand() % 10;

te generará numeros aleatorios entre el 0 al 10 , y si pongo esto

rand() % 10 + 1;

te generará numeros desde el 1 al 10, como se ve en la imagen de mi codigo.



EL PROBLEMA

El problema de esto , es que el programa "calcula" los numeros, no los genera, ¿que quiero decír con esto? , cada vez que ejecutes el programa anterior que puse , te "calculará" los mismos 20 numeros aleatorios, nunca cambiará , siempre serán los mismos números aleatorios.

LA SOLUCIÓN

La solución se encuentra al utilizar la función srand (se encuentra tambien en stdlib) la cual necesita de una "semilla" para que cada vez que se use la funcion rand genere numeros aleatorios diferentes ,el problema es estar dandole al programa una semilla cada vez que vaya a generar numeros aleatorios. Para esto haremos que se genere una semilla automaticamente cada vez que empiece el programa utilizando una función de la librería "time.h" .

Entonces nos quedará así utilizando el tiempo como una semilla:

srand (time (NULL)); 

eso generará una semilla aleatoriamente, basandose en la hora del sistema, dandole un valor en segundos a srand haciendo que por ejemplo , cada segundo que pase en la computadora sea una semilla diferente.  haciendo que siempre se generen numeros aleatorios automáticos distintos.


Implementando el ejemplo anterior usando srand nos quedaría así:

y bueno ahora si nos generará un numero al azar distintos cada vez que ejecutemos el programa.


PROBABILIDAD

La función rand da la misma probabilidad a todos los numeros que genere, si genera 1000 veces numeros entre el 1 y el 2 la probabilidad es casi la misma, puede que en el numero 1 sean 515 y en el numero 2 sean 485 o cualquier otro resultado, los resultados se aproximan. Para afirmar esto haré el siguiente ejemplo:

Veamos un ejemplo simulando el lanzamiento de un dado 1000 veces y vermos que las probabilidades que cayó son similiares.


El codigo es el siguiente: 


¿PARA QUE TODO ESTO?

La generación de números aleatorios nos puede servir para muchas cosas, una de las cosas que considero en la que es muy util esto ,es en los juegos, o cosas donde se ocupe la probabilidad y ese tipo de cosas.

A continuación y ya para terminar , les dejo un programa que hice el semestre pasado en estructura de datos , era un juego que genera un numero aleatorio entre el 1 y el 1000 y tu le escribes el numero y el programa te dice si está abajo o arriba de ese número hasta que aciertes con el número.



Bueno es todo, si tienen alguna pregunta del como generar numeros escribanla en los comentarios.

Codigos:


Tablas de Disperción (Puntos extra)

 ¿Qué es?

Es una técnica que se utiliza para implementar inserciones, eliminaciones y búsquedas en un tiempo medio constante.

Elementos

La estructura hash se construye con tres elementos básicos:

  • Un vector direccionable mediante números de posición capaz de almacenar N elementos.
  • Una función de dispersión que nos permita a partir de la clave,obtener el índice donde estará el dato asociado a esa clave.
  • una función de resolución de colisiones.

Las tablas hash se suelen implementar sobre arreglos de una dimensión aunque se pueden hacer implementaciones multi-dimensionales basadas en varias claves, las tablas hash proveen tiempo constante de busqueda promedio, sin importar el número de elementos de la tabla. Sin embargo, en casos particularmente malos el tiempo de búsqueda puede llegar a O(n) , es decír, en función del
numero de elementos.

Otras estructuras como arboles binarios son más rápidos en promedio ( tiempo de búsqueda(log n))
pero la información está ordenada en todo momento.

 Un ejemplo

Un diccionario es una estructura de datos abstracta para conjuntos dinámicos en los cuales se aplican las operaciones INSERCION, SUPRESION y BUSQUEDA.



Bibilografía:

http://www.slideshare.net/salomonkarr/tablas-de-dispersin
http://delta.cs.cinvestav.mx/~adiaz/anadis/hash-pdf2.pdf

IEEE 754 (Puntos Extra)

 IEE 754 (Estandar para el punto flotante)


El estándar IEEE 754 ha sido definido por el Instituto de Ingenieros Eléctricos y Electrónicos (Institute of Electrical and Electronics Engineers, IEEE) y establece dos formatos básicos para representar a los números reales en la computadora digital: precisión simple y precisión doble.
El estándar de la IEEE para aritmética en coma flotante (IEEE 754) es el estándar más extendido para las computaciones en coma flotante, y es seguido por muchas de las mejoras de CPU y FPU.

El estándar define formatos para la representación de números en coma flotante (incluyendo el cero) y valores desnormalizados, así como valores especiales como infinito y NaN, con un conjunto de operaciones en coma flotante que trabaja sobre estos valores. También especifica cuatro modos de redondeo y cinco excepciones (incluyendo cuándo ocurren dichas excepciones y qué sucede en esos momentos).

 Representación de Valores

 IEEE 754 especifica cuatro formatos para la representación de valores en coma flotante
  • precisión simple (32 bits)  
  • precisión doble (64 bits) 
  • precisión simple extendida (≥ 43 bits, no usada normalmente) 
  • precisión doble extendida (≥ 79 bits, usualmente implementada con 80 bits)

Sólo los valores de 32 bits son requeridos por el estándar, los otros son opcionales. Muchos lenguajes especifican qué formatos y aritmética de la IEEE implementan, a pesar de que a veces son opcionales. Por ejemplo, el lenguaje de programación C, ahora permite pero no requiere la aritmética de la IEEE (el tipo de C float es típicamente usado para la precisión simple de la IEEE y el tipo double usa la precisión doble del la IEEE).


Fuentes:
http://www.carlospes.com/curso_representacion_datos/06_01_estandar_ieee_754.php


http://es.wikipedia.org/wiki/IEEE_754

Punto Flotante ( Puntos Extra)

 Punto Flotante

Coma flotante es un metodo de representación de números reales que se puede adaptar al orden de magnitud del valor a representar, usualmente trasladando la coma decimal —mediante un exponente— hacia la posición de la primera cifra significativa del valor.

De esta forma, con un número dado de dígitos representativos se obtiene mayor precisión que con la coma fija, debido a que el valor de estos dígitos es siempre significativo sea el que sea el orden de magnitud del número a representar. Debido a esta adaptación, permite representar un rango mucho mayor de números (determinado por los valores límite que puede tomar el exponente).

¿Como se representa?
r = m · b^e

En donde:

r: valor real del número a representar.

m: mantisa o significando, dígitos significativos del número. El tamaño máximo de este campo, usualmente fijo y limitado, determina la precisión de la representación. 

b: base del sistema de representación.

e: exponente, orden de magnitud del significando. El mínimo y máximo valor posible del exponente determinan el rango de valores representables. 


Fuentes:

http://es.wikipedia.org/wiki/Coma_flotante



PRESENTACION 4 - TIPOS DE DATOS



Mi presentación del tema de tipos de datos.

Tuve algunos problemas con el audio. espero que puedan escuchar bien el video.

El codigo fuente es el siguiente:

Codigo

Le faltan unos detalles pero si funciona.

Notas:

En mi ejemplo consideré todos los campos como char ya que considero que en los que tienen int o float son generalmente donde se manejan cantidades como para un inventario , un negocio , el precio de algo , y pues solo eso.