viernes, 19 de octubre de 2012

METODOS DE ORDENAMIENTO:


MÉTODOS DE ORDENAMIENTO:

·         ORDENAMIENTO POR SELECCIÓN:
·         ORDENAMIENTO POR INSERCIÓN DIRECTA:
·         ORDENAMIENTO POR INSERCIÓN BINARIA:
·         ORDENAMIENTO SHELL SORT:
·         ORDENAMIENTO QUICK SORT:
·         ORDENAMIENTO HEAP SORT:

ORDENAMIENTO:

                ES  LA OPERACIÓN DE ARREGLAR LOS REGISTROS DE UNA TABLA EN ALGÚN ORDEN SECUENCIAL DE ACUERDO A UN CRITERIO DE ORDENAMIENTO. EL ORDENAMIENTO SE EFECTÚA CON BASE EN EL VALOR DE ALGÚN DATO EN UN REGISTRO. EL PROPÓSITO PRINCIPAL DE UN ORDENAMIENTO ES EL DE FACILITAR LA BÚSQUEDA DE LOS MIEMBROS DEL CONJUNTO ORDENADO.
                EL ORDENAR  UN GRUPO DE DATOS SIGNIFICA MOVER  LOS DATOS O SUS DIFERENCIAS PARA QUE QUEDEN EN UNA SECUENCIA TAL QUE REPRESENTE UN ORDEN, EL CUAL PUEDE SER NUMÉRICO, ALFABÉTICO, O INCLUSO ALFANUMÉRICO, ASCENDENTE O DESCENDIENTE.

ORDENAMIENTO POR SELECCIÓN:

DESCRIPCION:

·         BUSCAS EL ELEMENTO MÁS PEQUEÑO DE UNA LISTA.
·         LO INTERCAMBIAS CON EL ELEMENTO UBICADO EN LA PRIMERA POSICION DE LA LISTA.
·         BUSCAS EL SEGUNDO ELEMENTO MÁS PEQUEÑO DE LA LISTA.
·         SE INTERCAMBIA CON EL ELEMENTO Q OCUPA EL SEGUNDO LUGAR DE LA LISTA.
·         REPITES ESTE PROCESO HASTA UE HALLA TERMINADO DE ORDENAR LALISTA..!
·          
ANÁLISIS DE ALGORITMO:

                REQUERIMIENTO DE MEMORIA:  AL IGUAL QUE EL ORDENAMIENTO BURBUJA, ESTE ALGORITMO SOLO NECESITA UNA VARIABLE ADICIONAL PARA REALIZAR LOS INTERCAMBIOS.
TIEMPO DE EJECUCIÓN:

                EL CICLO EXTERNO SE EJECUTA N VECES PARA UNA LISTA DE UN N ELEMENTOS. CADA BÚSQUEDA REQUIERE COMPARAR TODOS LOS ELEMENTOS NO CLASIFICADOS.

VENTAJAS:

·        • FÁCIL IMPLEMENTACIÓN
·       •  NO REQUIERE MEMORIA ADICIONAL
·         •RENDIMIENTO CONSTANTE: POCA DIFERENCIA ENTRE EL PEOR Y EL MEJOR

DESVENTAJAS:

·      •   LENTO.
·       •  REALIZA NUMEROSAS COMPARACIONES



CODIFICACIÓN EN C++.


ORDENAMIENTO POR INSERCIÓN DIRECTA:
DESCRIPCIÓN:

                EL ALGORITMO DE ORDENACIÓN POR MÉTODO DE INSERCIÓN DIRECTA ES UN ALGORITMO RELATIVAMENTE SENCILLO Y SE COMPORTA RAZONABLEMENTE BIEN EN GRAN CANTIDAD DE SITUACIONES.
                DE ESTOS TRES ALGORITMOS ES EL Q MEJOR RESULTADO DE AFECTOS  PRÁCTICOS. REALIZA UNA  CANTIDAD E COMPARACIONES BASTANTE EQUILIBRADA CON RESPECTO A LOS INTERCAMBIOS, Y TIENE UN PAR DE CARACTERÍSTICAS QUE LO HACEN AVENTAJAR A LOS DOS EN LA MAYOR PARTE DE LAS SITUACIONES.
                ESTE ALGORITMO SE BASA EN HACER COMPARACIONES, ASÍ QUE PAR QUE REALICE SU TRABAJO DE ORDENACIÓN SON IMPRESCINDIBLES DOS COSAS: UN ARRAY O ESTRUCTURA SIMILAR DE ELEMENTOS COMPARABLES Y UN CRITERIO CLARO DE COMPARACIÓN, TAL QUE DADOS LOS ELEMENTOS NOS DIGA SI ESTÁN EN ORDEN O NO. EN CADA ITERACIÓN DE SICLO EXTERNO LOS ELEMENTOS 0 A I FORMAN UNA LISTA ORDENADA.

ANÁLISIS DEL ALGORITMO:
ESTABILIDAD:

 ESTE ALGORITMO NUNCA INTERCAMBIA REGISTROS CON CLAVES IGUALES. POR LO TANTO ES ESTABLE.
REQUERIMIENTOS DE MEMORIA:

UNA VARIABLE ADICIONAL PARA REALIZAR LOS INTERCAMBIOS.
TIEMPO DE EJECUCIÓN:

  PARA UNA LISTA “N” ELEMENTOS EL CICLO EXTERNO SE EJECUTA N-1 VECES. EL CICLO INTERNO SE EJECUTA COMO MÁXIMO UNA VEZ EN AL PRIMERA ITERACIÓN, 2 VECES EN LA SEGUNDA, 3 VECES EN LA TERCERA, ETC...
VENTAJAS:  

·        • FÁCIL IMPLEMENTACIÓN.
·         •REQUERIMIENTO MÍNIMO DE MEMORIA.

DESVENTAJAS:  

·         •LENTO
·         •REALIZA NUMEROSAS COMPARACIONES.

CODIFICACIÓN EN C++.



MÉTODO DE ORDENACIÓN POR INSERCIÓN BINARIA:  

                ESTE MÉTODO ES UNA MEJORA DEL MÉTODO DE ASERCIÓN DIRECTA.  PARA LOGRAR ESTA MEJORA SE RECURRE A UNA BÚSQUEDA BINARIA EN LUGAR DE UNA BÚSQUEDA SECUENCIAL PARA INSERTAR UN ELEMENTO EN LA PARTE IZQUIERDA DEL ARREGLO, QUE YA SE ENCUENTRA ORDENADO. EL RESTO DEL PROCEDIMIENTO ES SIMILAR AL DE INSERCIÓN DIRECTA, ES DECIR, SE REPITE ESTE MISMO PROCEDIMIENTO DESDE EL SEGUNDO TERMINO HASTA EN ULTIMO ELEMENTO.

CODIFICACIÓN EN C++.



ORDENAMIENTO POR EL MÉTODO DE SHEL:

                ES UNA VERSIÓN MEJORADA DE EL MÉTODO DE INSERCIÓN DIRECTA. ESTE MÉTODO TAMBIÉN SE CONOCE CON EL NOMBRE DE INSERCIÓN CON INCREMENTOS DECRECIENTES. EN EL MÉTODO DE ORDENACIÓN POS INSERCIÓN DIRECTA CADA ELEMENTO SE COMPRARA POR SU UBICACIÓN CORRECTA EN EL ARREGLO, CON LOS ELEMENTOS QUE SE ENCUENTRAN EN LA PARTE IZQUIERDA DEL MISMO. SI EL ELEMENTO INSERTAR ES MAS PEQUEÑO QUE EL GRUPO DE ELEMENTOS QUE SE ENCUENTRAN A SU IZQUIERDA, ES NECESARIO EFECTUAR ENTONCES VARIAS COMPARACIONES ANTES DE SU UBICACIÓN.
               
SHELL PROPONE QUE LAS COMPARACIONES ENTRE ELEMENTOS SE EJECUTEN CON SALTOS DE MAYOR TAMAÑO PERO CON INCREMENTOS DECRECIENTES, ASÍ, LOS ELEMENTOS QUEDARAN ORDENADOS EN EL ARREGLO MAS RÁPIDAMENTE.
               
SHELL SOLO ES UNA GENERALIZACIÓN DEL ORDENAMIENTO POR INSERCIÓN, TENIENDO EN CUENTA DOS OBSERVACIONES:

1       EL ORDENAMIENTO POR INSERCIÓN ES EFICIENTE SI LA ENTRADA ESTA “CASI ORDENADA”
2      EL ORDENAMIENTO POR INSERCIÓN ES INEFICIENTE, EN  GENERAL, PORQUE REMUEVE LOS VALORES SOLO UNA POSICIÓN CADA VEZ.

                EL ALGORITMO SHELL SORT MEJORA EL ORDENAMIENTO POR INSERCIÓN COMPARANDO ELEMENTOS SEPARADOS POR UN ESPACIO DE VARIAS POSICIONES. ESTO PERMITE QUE UN ELEMENTO HAGA “PASOS MAS GRANDES” HACIA SU POSICIÓN ESPERADA. LOS PASOS MÚLTIPLES SOBRE LOS DATOS SE HACEN CON TAMAÑOS DE ESPACIO CADA VEZ MAS PEQUEÑOS. EL ULTIMO PASO DE SHELLSORT ES UN SIMPLE ORDENAMIENTO POR INSERCIÓN, PERO PARA ENTONCES, YA ESTA GARANTIZADO QUE LOS DATOS EL VECTOR ESTÁN CASI ORDENADOS...

CÓDIGO EN C++... 



ORDENAMIENTO QUICK SORT:

                EL ORDENAMIENTO POR PARTICIÓN (QUICK SORT) SE PUEDE DEFINIR EN UNA FORMA MÁS CONVENIENTE COMO UN  PROCEDIMIENTO RECURSIVO.
                TIENE APARENTEMENTE LA PROPIEDAD DE TRABAJAR MEJOR PARA ELEMENTOS DE ENTRADA DESORDENADOS COMPLETAMENTE QUE PARA ELEMENTOS SEMI-ORDENADOS. ESTA SITUACIÓN ES PRECISAMENTE LA OPUESTA A ORDENAMIENTO EN BURBUJA.
                 ESTE TIPO DE  ALGORITMOS SE BASA EN LA TÉCNICA “DIVIDE Y VENCERÁS”, ÓSEA ES MÁS RÁPIDO Y FÁCIL ORDENAR DOS ARREGLOS O LISTAS DE DATOS PEQUEÑOS, QUE UN ARREGLO O LISTA GRANDE.
                NORMALMENTE AL INICIO DE LA ORDENACIÓN SE ESCOGE UN ELEMENTO APROXIMADAMENTE EN LA MITAD DEL ARREGLO, ASÍ AL EMPEZAR A ORDENAR, SE DEBE LLEGAR A QUE EL ARREGLO ESTE ORDENADO RESPECTO A PUNTO DE DIVISIÓN O LA MITAD DEL ARREGLO.
                SE PODRÁ GARANTIZAR QUE LOS ELEMENTOS A LA IZQUIERDA DE LA MITAD SON MENORES Y LOS ELEMENTOS DE LA DERECHA SON MAYORES.

                      LOS SIGUIENTES PASOS SON LLAMADOS RECURSIVOS CON EL PROPÓSITO DE EFECTUAR LA  ORDENACIÓN  POR PARTICIÓN AL ARREGLO IZQUIERDO Y AL ARREGLO DERECHO, QUE SE OBTIENEN DE LA PRIMERA FASE. EL TAMAÑO DE ESOS ARREGLOS EN PROMEDIO SE REDUCE A LA MITAD.
                ASÍ SE CONTINÚA HASTA QUE EL TAMAÑO DE LOS ARREGLOS A ORDENAR ES  1, ES DECIR, TODOS LOS ELEMENTOS YA ESTÁN ORDENADOS.
                EL PROMEDIO PARA TODOS LOS ELEMENTOS DE ENTRADA DE TAMAÑO “N”, EL MÉTODO HACE  “O” (n  log n) COMPRARACIONES, EL CUAL ES RELATIVAMENTE EFICIENTE...

CODIFICACIÓN EN C++.



ORDENAMIENTO BEAP SORT:

                EL ORDENAMIENTO POR MONTÍCULOS (HEAP SORT)  ES UN ALGORITMO DE ORDENACIÓN NO RECURSIVO, NO ESTABLE, CON COMPLEJIDAD COMPUTACIONAL O (n log n).
ESTE ALGORITMO CONSISTE EN ALMACENAR TODOS LOS ELEMENTOS DEL VECTOR A ORDENAR EN UN MONTÍCULO (heap), Y LUEGO DE EXTRAER EL NODO QUE QUEDA COMO  NODO RAÍZ DEL MONTÍCULO CIMA EN SUCESIVAS ITERACIONES OBTENIENDO EL CONJUNTO ORDENADO. BASA SU FUNCIONAMIENTO EN PROPIEDAD DE LOS MONTÍCULOS, POR LA CUAL, LA CIMA CONTIENE SIEMPRE EL MENOR ELEMENTO  (O EL MAYOR, SEGÚN SE HAYA DEFINIDO EL MONTÍCULO) DE TODOS LOS ALMACENAMIENTOS EN EL.

                EL SIGNIFICADO DE HEAP ES CIENCIA COMPUTACIONAL  ES EL DE UNA COLA DE PRIORIDADES (PRIORITY QUEUE). TIENE LAS SIGUIENTES CARACTERÍSTICAS.

                UN HEAP ES UN ARREGLO DE N POSICIONES AGRUPADO POR LOS ELEMENTOS DE LA COLA (NOTA: SE UTILIZA UN ARREGLO Q INICIA EN LA POSICIÓN 1  Y NO ES CERO, DE LA MANERA QUE EL IMPLEMENTARLA EN  C SE TIENE  n+ 1  POSICIONES EN EL ARREGLO.)
                SE MAPEA UN ÁRBOL BINARIO DE LA MANERA EN EL ARREGLO QUE EL NODO EN LA POSICIÓN I ES EL PARTE DE LOS NODOS EN LAS POSICIONES (2*I) Y (2*I+1).
                EL VALOR EN UN NODO ES MAYOR O IGUAL A LOS VALORES DE SUS HIJOS. POR CONSIGUIENTE, EL NODO PADRE TIENE EL MAYOR VALOR  DE TODO SU ÁRBOL.

PROCEDIMIENTO:

HEAP SORT CONSISTE ESENCIALMENTE EN:


CODIFICACIÓN EN C++.



LIBRERÍA UTILIZADA EN LOS CÓDIGOS:

•ORDENACIÓN POR SELECCIÓN
•ORDENACIÓN POR INSERCIÓN DIRECTA
•ORDENACIÓN POR INSERCIÓN BINARIA
•ORDENACIÓN SHELL SORT
•ORDENACIÓN QUICK SORT
“leearreglo.h”







miércoles, 10 de octubre de 2012

COMO DARLE INICIO A UN PROGRAMA EN C++

MATERIA: Lenguaje II

CLASE: Nº 01   »COMO  DARLE  INICIO  A  UN  PROGRAMA EN C++

USAREMOS  COMO  EJEMPLO  UNA  CALCULADORA  QUE  SUME  TRES  DIGITOS:

SE INICIA DE LA SIGUIENTE MANERA:

1)   SE INTRODUCE UN  # A LO QUE SE LE LLAMA UN  PRE-PROCESADOR.
2)  SE  INTRODUCE   include  ESTO ES INCLUIR.
3)  INTRODUCIMOS  EL TIPO DE  LIBRERÍA EJEMPLO: <iostream.h>, <conio.h>, <stdio.h>, <string.h>
4)  INTRODUCIMOS  EL main .
5)  ABRIMOS UNA LLAVE   {  ESTO INDICA EL INICIO DEL CUERPO DE NUESTRO PROGRAMA.  OJO UNA VEZ Q HALLA SIDO ABIERTO EL CUERPO TODAS LAS LINEAS DE CÓDIGO DEBEN SER CERRADAS CON   ;
DE LO CONTRARIO PUEDE OCASIONAR UN ERROR DE SINTAXIS.
6) LUEGO DE ESTO DECLARAMOS  EL TIPO DE VARIABLE  ESTAS  PUEDEN SER DE TIPO  int, char. etc
7) EN ESTE PASO SE DEFINEN LAS VARIABLES  POR EJEMPLO:
int  d,g,h,k;
8)SE INTRODUCE UN  cout<<; LO QUE SIGNIFICA IMPRIMIR POR PANTALLA EJEMPLO: cout<< "INGRESE EL PRIMER DÍGITO A SUMAR";
9) LUEGO INTRODUCIMOS cin>>; ESTO INDICA ENTRADA DESDE EL TECLADO ES DECIR EL COMANDO QUE NOS HABILITARA PARA INTRODUCIR LOS DATOS QUE QUEREMOS SUMAR. ESTE PASO SE DEBERÁ REPETIR LA CANTIDAD DE NUMERON Q QUIERES SUMAR.. 
10) EN  ESTE  PASO  INDICAMOS  LA  FUNCIÓN  QUE  QUEREMOS QUE  EL PROGRAMA  EJECUTE  EN  ESTE  CASCO  SERA  SUMAR  LOS TRES   DÍGITOS.
ASÍ QUE PROCEDEMOS DE LA SIGUIENTE MANERA:
k=d+g+h;
11) INTRODUCIMOS NUEVAMENTE UN cout<< PARA QUE NOS MUESTRE LA RESPUESTA ARROJADA POR LA SUMATORIA DE LOS DATOS:
cout<<k;
12) INTRODUCIMOS UN COMANDO DE PAUSA system ("pause");. ESTO LIMITARA AL PROGRAMA A RALIZAR UNA PAUSA...
13)  INTRODUCIMOS UN return Ø () ESTO INDICA RETORNAR AL PRINCIPIO DEL PROGRAMA..
14  Y FINALMENTE  INTRODUCIMOS NUEVAMENTE UNA LLAVE PERO CERRADA } LO CUAL INDICA LO INVERSO DE LA ANTERIOR  USADA. ES DECIR ETA CIERRA EL CUERPO DEL PROGRAMA...

EL COMANDO  \n ES PARA DARLE UN SALTO DE LINEA AL CÓDIGO.. ESO TENDRÁ EFECTO AL EJECUTAR EL PROGRAMA

EL CÓDIGO EXPLICADO ANTERIORMENTE QUEDARÍA DE LA SIGUIENTE MANERA:


#include <iostream.h>
int main ()
{
int d,g,h,k;

cout<<"ingrese primer dijito\n";
cin>>d;
cout<<"ingresesegundo  dijito\n";
cin>>g;
cout<<"ingrese tercer dijito\n";
cin>>h;
cout<<"el resultado de la sumatoria es\n";
k=d+g+h;
cout<<k;
system ("pause");
    return 0;
}

PUEDE SER EJECUTADO EN DEV C++..

Descarga Dev C++ Compiler



EN EL LENGUAJE DE PROGRAMACIÓN SOLO HAY DOS TIPOS DE ERRORES:

 ERROR  DE SINTAXIS   &  ERROR DE LÓGICA

LOS ERRORES DE SINTAXIS SON LAS MAS FÁCILES DE DETECTAR EN EL CÓDIGO FUENTE DE UN PROGRAMA. UN ERROR DE SINTAXIS SE PRODUCE AL ESCRIBIR,  INCORRECTAMENTE, ALGUNA PARTE DEL CÓDIGO..

LOS ERRORES DE LÓGICA SON LAS AS DIFÍCILES DE DETECTAR CUANDO UN PROGRAMA NO TIENE ERRORES DE SINTAXIS NI DE EJECUCIÓN  PERO, AUN ASÍ  NO FUNCIONA BIEN, ESTO ES DEBIDO A LA EXISTENCIA DE ALGÚN ERROR LÓGICO  DE MANERA QUE, UN ERROR DE LÓGICA SE PRODUCE CUANDO LOS RESULTADOS OBTENIDOS NO SON LOS ESPERADOS.