centro uiversitario salina cruz (1)

97
CENTRO UIVERSITARIO SALINA CRUZ ALUMANA: RUBI ALEJANDRA HERNANDEZ TRINIDAD MATERIA: TEORÍA DE ALGORITMO

Upload: hernandeztrinidadadrubialejandragmailcom

Post on 05-Aug-2016

224 views

Category:

Documents


4 download

DESCRIPTION

teoria de algoritmo

TRANSCRIPT

Page 1: Centro uiversitario salina cruz (1)

CENTRO UIVERSITARIO SALINA CRUZ

ALUMANA: RUBI ALEJANDRA HERNANDEZ TRINIDAD

MATERIA: TEORÍA DE ALGORITMO

Page 2: Centro uiversitario salina cruz (1)

INDICE

CONTENIDO

ESTRUCTURA DE DATOS EXTERNAS, ARCHIVOS

BÚSQUEDA Y ORDENAMIENTO

PROGRAMACIÓN DE APLICACIONES

Page 3: Centro uiversitario salina cruz (1)

CONTENIDO

1.-Estructura de Datos Externas, Archivos

1.1 Conceptos y Definiciones

1.2 Características

1.2.1 Residencia

1.2.2 Permanencia

1.2.3 Portabilidad

1.2.4 Capacidad

1.3 Clasificación

1.3.1 Permanentes

1.3.1.1 Constantes

Page 4: Centro uiversitario salina cruz (1)

1.3.1.2 Maestros

1.3.1.3 Históricos

1.3.2 De movimiento

1.3.3 De maniobra o trabajo

1.4 Organización

1.4.1 Secuencia

1.4.2 Random o directo

1.4.3 Indexada

2.- Búsqueda y Ordenamiento

2.1 Algoritmo de búsqueda

2.1.1 Secuencial

Page 5: Centro uiversitario salina cruz (1)

2.1.2 Binaria

2.1.3 Calculo de dirección

2.2 Ordenamiento

2.2.1 Optimo teórico para ordenamiento de tablas

2.2.2 Intercambio simple

2.2.3 Algoritmo de la burbuja

2.2.4 Shell sort

2.2.5 Quicksort

2.2.6 Tree sort o Heap sort

2.2.7 Ordenamiento pot intercalation

2.2.8 Ordenamiento por distribución

Page 6: Centro uiversitario salina cruz (1)

2.3 Ordenamiento externo

2.3.1 El torneo de tenis para ordenamiento externo

2.3.2 Intercalación con lotes. Algoritmo balanceado

2.3.3 El algoritmo poli fase para intercalación por lotes

2.3.4 El algoritmo de cascada

ENTREGAR EL DIA 7 DEJULIO DEL 2016 TEORIA DE ALGORITMOS 2

2.4 Arboles balanceados

2.4.1 Definiciones

2.4.2 Arboles AVL

2.4.3 Arboles B

2.5 Dispersión al azar, desmenuzamiento o hassing

Page 7: Centro uiversitario salina cruz (1)

2.5.1 Algoritmos

2.5.2 Funciones de dispersión

2.5.3 Manejo de colisiones

2.5.4 Manejo de sobre flujo

2.5.5 Un corrector de ortografía

Page 8: Centro uiversitario salina cruz (1)

ESTRUCTURA DE DATOS ESTERNA DE ARCHIVOS DEFINICIÓN: es una estructura externa de datos, constituida por un conjunto de elementos todos del mismos tipos, organizados en unidades de acceso llamadas registros. 1.2 CARACTERÍSTICAS Las principales características son: • RESIDENCIA: soporte de almacenamiento externo la información se almacena de forma permanente. • PERMANENCIA: alta capacidad de almacenamiento de datos. • PORTABILIDAD: USB, DVD, CD, Blutooth y Correo Electrónico. • CAPACIDAD 1.2.1 RESIDENCIA

Es la ubicación de información en dispositivos o en otro medio donde que se pueden localizar o almacenar datos como memorias secundarias que es el caso de cintas y discos duros. 1.2.2 PERMANENCIA Significa que toda la información que se ha almacenado en la memoria central desaparece cuando se ejecuta el programa que lo maneja, pero para eso se requiere realizar un proceso de borrado para eliminar un archivo.1.2.3 PORTABILIDAD Es el medio por el cual podemos llevar de un lugar a otro aquellos datos para manejarlos o utilizarlos en otra parte. Esto se hace mediante dispositivos externos. 1.2.4CAPACIDAD La capacidad de almacenamiento podría ser ilimitada pero debido a que existe una memoria central este le impide o le establece un límite, conforme a la capacidad de la memoria será el límite de almacenamiento. 1.3 CLASIFICACIÓN Las diferentes clases de archivos se clasifican en:

Page 9: Centro uiversitario salina cruz (1)

• PERMANENTES

• CONSTANTES • MAESTROS • HISTÓRICOS • DE MOVIMIENTO • DE MANIOBRA O TRABAJO 1.3.1PERMANENTES Los archivos permanentes son aquellos en los que la información a lo largo del tiempo cambia o varía poco de forma que permanecen casi intactos. 1.3.1.1 CONSTANTES Estos son aquellos archivos que no sufren movimiento alguno, estos son utilizados como archivos de consulta. Un archivo de este tipo podría ser la red del metro de una ciudad que contiene su descripción, características, etc., de cada día. 1.3.1.2 MAESTROS Son colecciones de registros que afectan a una organización. Los datos de estos archivos pueden construir una revisión histórica de eventos. Estos archivos contienen datos primordiales para la operación continua de la organización. Constantemente debe ser actualizados o revisados en busca de posibles errores o cambios que se desean realizar. 1.3.1.3HISTÓRICOS: Nunca se modifican (Rentas de años anteriores). DE MOVIMIENTOS: Información para la actualización de ficheros

permanentes (Compra, Ventas Diarias). DE TRABAJO: Creados por el sistema compilaor (back). SEGÚN SU ORGANIZACIÓN:

SECUENCIAL: Fichero secuencial

DIRECTA: Fichero directo

SECUENCIA – INDEXADA: Fichero secuencial – indexado.

ACCESO SECUELCIAL:

Page 10: Centro uiversitario salina cruz (1)

Para acceder a un registro en particular deben ser accedidos

todos los registros que le proceden.

Este modo de acceso se permite en soporte direccionables o no.

Por ejemplo: archivo de canciones almacenadas en cinta magnética no tiene más remedio que organizarse de manera secuencial y accederse de igual forma.

ACCESO DIRECTO:

Permite acceder a un registro directamente, sin tener que acceder antes a todos los registros que le proceden.

Sólo se permite esté modo de acceso en soportes direccionables, disquetes, discos duros, etc.

El acceso puede realizarse bien por el número de registro o por la clave de acceso.

Por ejemplo: archivos almacenados en nuestro pan drive. F. SECUENCIALES INDEXADOS: Cada registros se identifica unívocamente con una clave única, conocida como la clave primaria y esta clave pertenece al registro. ORGANIZADA EN TRES ZONAS: ÁREA DE INDICES: Organizada secuencialmente y actualizada pertenece. Cada registro contiene la dirección de comienzo de un bloque y la clave más alta que contiene. ÁREA PRIMARIA: Zona dividida en segmento que contiene, organizados secuencialmente más de un registró. ÁREA DE EXCEDENTES: Contendrá aquellos registros que no caben en el área principal.

Page 11: Centro uiversitario salina cruz (1)

BÚSQUEDA Y ORDENAMIENTO

Algoritmos de Búsqueda

• Los procesos de búsqueda involucran recorrer un arreglo

completo con el fin de encontrar algo. Lo más común es buscar el

menor o mayor elemento (cuando es puede establecer un orden), o

buscar el índice de un elemento determinado.

• Para buscar el menor o mayor elemento de un arreglo, podemos

usar la estrategia, de suponer que el primero o el último es el menor

(mayor), para luego ir comparando con cada uno de los elementos,

e ir actualizando el menor (mayor). A esto se le llama Búsqueda

Lineal.

Algoritmos de Búsqueda

• Definición: – Para encontrar un dato dentro de un arreglo, para

ello existen diversos algoritmos que varían en complejidad,

eficiencia, tamaño del dominio de búsqueda.

• Algoritmos de Búsqueda:

– Búsqueda Secuencial

– Búsqueda Binaria

BÚSQUEDA SECUENCIAL:

• Consiste en ir comparando el elemento que se busca con cada

elemento del arreglo hasta CUÁNDO SE ENCUENTRA:

Page 12: Centro uiversitario salina cruz (1)

• Busquemos el elementos ‘u’

Page 13: Centro uiversitario salina cruz (1)
Page 14: Centro uiversitario salina cruz (1)
Page 15: Centro uiversitario salina cruz (1)
Page 16: Centro uiversitario salina cruz (1)
Page 17: Centro uiversitario salina cruz (1)
Page 18: Centro uiversitario salina cruz (1)

Algoritmos por direcciones

Print ( bin (lista l), n° a buscar

Retornar índice que coincide con números que buscar si no está

retorna -1 tiempo (log n).

ORDENAMIENTO:

En computación y matematicas un algoritmo de ordenamiento es

un algoritmo que pone elementos de una lista o un vectoren una

secuencia dada por una relación de orden, es decir, el resultado de

salida ha de ser una permutación —o reordenamiento— de la

entrada que satisfaga la relación de orden dada. Las relaciones de

orden más usadas son el orden numérico y el orden lexicográfico.

Ordenamientos eficientes son importantes para optimizar el uso de

otros algoritmos (como los de búsqueda y fusión) que requieren

listas ordenadas para una ejecución rápida. También es útil para

poner datos en forma canónica y para generar resultados legibles

por humanos.

Page 19: Centro uiversitario salina cruz (1)

OPTIMO TEÓRICO PARA ORDENAMIENTO DE TABLAS

INTRODUCCIÓN: A la hora de tratar datos, muchas veces nos

conviene que estén ordenados. Estos métodos nos pueden resultar

eficientes cuando hacemos las búsquedas. ORDENACIÓN: Consiste

en organizar un conjunto de datos en un orden determinado según

un criterio. La ordenación puede ser interna o externa: • Interna: La

hacemos en memoria con arryas. Es muy rápida. • Externa: La

hacemos en dispositivos de almacenamiento externo con ficheros.

Para determinar lo bueno que es un algoritmo de ordenación hay

que ver la complejidad del algoritmo (cantidad de trabajo de ese

algoritmo), se mide en el número de operaciones básicas que realiza

un algoritmo. La operación básica de un algoritmo es la operación

fundamental, que es la comparación. Existen diferentes algoritmos

de ordenación elementales o básicos cuyos detalles de

implementación se pueden encontrar en diferentes libros de

algoritmos. La enciclopedia de referencia es [KNUTH 1973]1 y sobre

todo la 2.a edición publicada en el año 1998 [KNUTH 1998]2. Los

algoritmos presentan diferencias entre ellos que los convierten en

más o menos eficientes y prácticos según sea la rapidez y eficiencia

demostrada por cada uno de ellos. Los algoritmos básicos de

ordenación más simples y clásicos son: • Ordenación por selección.

• Ordenación por inserción. • Ordenación por burbuja. Los métodos

más recomendados son: selección e inserción, aunque se estudiará

el método de burbuja, por aquello de ser el más sencillo aunque a la

par también es el más ineficiente; por esta causa no recomendamos

su uso, pero sí conocer su técnica. Los datos se pueden almacenar

en memoria central o en archivos de datos externos guardados en

unidades de almacenamiento magnético (discos, cintas, disquetes,

CD-ROM, DVD, discos flash USB, etc.) Cuando los datos se guardan

en listas y en pequeñas cantidades, se suelen almacenar de modo

Page 20: Centro uiversitario salina cruz (1)

temporal en arrays y registros; estos datos se almacenan

exclusivamente para tratamientos internos que se utilizan en

gestión masiva de datos y se guardan en arrays de una o varias

dimensiones. Los datos, sin embargo, se almacenan de modo

permanente en archivos y bases de datos que se guardan en discos y

cintas magnéticas.

ALGORITMOS DE ORDENAMIENTO POR INTERCAMBIO

El algoritmo del intercambio aunque es el más sencillo de

implementar es uno de los mas pobres en rendimiento, se basa en la

idea de buscar cada vez el menor elemento del conjunto y ubicarlo

al principio del mismo, repitiendo este proceso cada vez con el

conjunto sin su primer elemento (el menor del conjunto anterior),

hasta llegar a un conjunto de un solo elemento que por definición ya

está ordenado.

En cada paso del algoritmo se compara el primer elemento del

conjunto x[i], con los demás elementos del mismo x[j] (j=i+1 .. n) y

cuando x[i] es mayor que x[j], se intercambian sus valores. Cuando

se termina de recorrer el arreglo el proceso nos garantiza que en x[i]

está el menor elemento del conjunto.

Teniendo en cuenta que el algoritmo de ordenamiento por

intercambio se realiza siempre de la misma manera independiente

de los datos que estén almacenados, no existe un mejor, peor o

caso promedio y su complejidad siempre será O(n^2)

Page 21: Centro uiversitario salina cruz (1)

ALGORITMOS DE ORDENACIÓN POR INTERCAMBIO

METODO BURBUJA

El método de ordenamiento rápido o método quicksort, es una

técnica basada en otra conocida con el nombre divide y vencerás,

que permite ordenar una cantidad de elementos en un tiempo

proporcional a n2 en el peor de los casos o a n log n en el mejor de

los casos. El algoritmo original es recursivo, como la técnica en la

que se basa.

METODO QUICKSORT

Es un algoritmo de ordenamiento que ordena enteros procesando

sus dígitos de forma individual. Como los enteros pueden

representar cadenas de caracteres (por ejemplo, nombres o fechas)

y, especialmente, números en punto flotante especialmente

formateados, radix sort no está limitado sólo a los enteros.

METODO RADIX

DENTRO DEL ALGORITMO DE ORDENACIÓN POR INTERCAMBIO SE

ENCUENTRAN 4 MÉTODOS:

-METODO DE LA BURBUJA

-METODO QUICKSORT

-METODO SHELLSORT

-METODO RADIX

El método de ordenación shellsort es una versión mejorada del

método de ordenación por inserción directa, que se utiliza cuando el

número de elementos es grande. Este método recibe su nombre

gracias a su creados Donald L. Shell, también se conoce con el

nombre inserción con incrementos decrecientes.

En el método de ordenación por inserción directa, cada elemento se

compara con los elementos contiguos de su izquierda de uno por

Page 22: Centro uiversitario salina cruz (1)

uno, para lograr su ordenamiento; si por ejemplo, el elemento a

comparar es el más pequeño y se encuentra en la última posición

del arreglo, hay que ejecutar muchas comparaciones antes de

colocar el elemento en su lugar de forma definitiva.

El método de ordenación shellsort mejora el ordenamiento por

inserción comparando elementos separados por un espacio de

varias posiciones. Esto permite que un elemento haga pasos más

grandes hacia la posición que debe ocupar. Los pasos múltiples

sobre los elementos se hacen con tamaños de espacio cada vez más

pequeños y el último paso del método es un simple ordenamiento

por inserción directa, pero para entonces, los elementos de arreglo

ya casi están ordenados.

Para determinar el tamaño de los incrementos (saltos) constantes, el

primero debe ser generado a partir del tamaño del arreglo entre

dos, obteniendo solo su parte entera de la división o redondeando

el resultado de la misma, y posteriormente ir reduciendo a la mitad

el incremento en cada repetición, hasta que el incremento sea un

uno.

METODO SHELL SORT

UNIDAD 6

ORDENACIÓN INTERNA O DE ARREGLOS

LA ORDENACIÓN INTERNA O DE ARREGLOS, RECIBE ESTE NOMBRE

YA QUE LOS ELEMENTOS O COMPONENTES DEL ARREGLO SE

ENCUENTRA EN LA MEMORIA PRINCIPAL DE LA COMPUTADORA,

QUE ES LA MEMORIA RAM.

LOS MÉTODOS DE ORDENACIÓN INTERNA SE CLASIFICAN EN DOS:

- MÉTODOS DIRECTOS

Page 23: Centro uiversitario salina cruz (1)

- MÉTODOS LOGARÍTMICOS

MÉTODOS DIRECTOS

Son los más simples y fáciles de entender, son eficientes cuando se

trata de una cantidad de datos pequeña.

EJEMPLO:

(n^2)

MÉTODOS LOGARÍTMICOS

Son más complejos, difíciles de entender y son eficientes en grandes

cantidades de datos.

EJEMPLO:

(n * log n)

LOS MÉTODOS DIRECTOS MAS CONOCIDOS SON:

- Ordenación por intercambio.

- Ordenación por inserción.

- Ordenación por selección.

INTRODUCCIÓN

Como sabemos, ordenar significa reagrupar o reorganizar un

conjunto de objetos en una secuencia específica y pueden ser

Ascendentes (De menor a mayor) y Descendentes (De mayor a

menor) y se clasifica en 2 métodos de ordenación:

- INTERNOS (De arreglos)

- EXTERNOS (De archivos)

El primer procedimiento del método de la burbuja es:

1-Generar un ciclo que inicie desde uno hasta el número de

elementos del arreglo.

2-Generar un segundo ciclo dentro del anterior que inicie desde

cero hasta el número de elementos del arreglo menos dos.

Page 24: Centro uiversitario salina cruz (1)

3-Dentro del segundo ciclo debe existir una comparación que

determina el tipo de ordenamiento (ascendente o descendente)

entre el primer elemento (posición generado por el segundo ciclo) y

el segundo elemento (el que le sigue), si la respuesta a la condición

es verdadera se realiza un intercambio entre los dos elementos.

4-Para realizar el intercambio se genera un almacenamiento

temporal, el cual guarda el dato del primer elemento, el segundo

elemento toma el lugar del primero y en el lugar del segundo se

coloca lo que contiene el almacenamiento temporal.

Una vez que los ciclos terminan la estructura debe quedar ordenada

de forma ascendente o descendente, pero este procedimiento es

considerado como el pero de los casos ya que si el número de

elementos de la estructura es de 100, se tienen que realizar 9900

comparaciones entes de terminar la ejecución del método.

Un segundo procedimiento del método de la burbuja es:

1-Generar un ciclo que inicie desde cero hasta el número de

elementos menos dos.

2-Generar un segundo ciclo desde el valor del ciclo anterior mas uno

hasta el número de elementos menos uno;

3-Dentro del segundo ciclo debe existir una comparación que

Page 25: Centro uiversitario salina cruz (1)

determina el tipo de ordenamiento (ascendente o descendente)

entre el primer elemento (posición generada por el primer ciclo) y el

segundo elemento (posición generada por el segundo ciclo), si la

respuesta a la condición es verdadera se realiza un intercambio

entre los dos elementos.

4-Para realizar el intercambio se genera un almacenamiento

temporal, el cual guarda el dato del primer elemento, el segundo

elemento toma el lugar del primero y en el lugar del segundo se

coloca lo que contiene el almacenamiento temporal.

Una vez que los ciclos terminan la estructura debe quedar

ordenada, la diferencia con el procedimiento anterior radica en el

número de comparaciones y posibles intercambios que se

presentan, en este segundo procedimiento, es menor ya que cada

pasada que se le da al arreglo se realiza una comparación menos

que en la pasada anterior.

El tercer procedimiento del método de la burbuja es :

1-Generar un ciclo que inicie desde uno hasta el número de

elementos menos uno.

2-Generar un segundo ciclo que inicie desde el número de

elementos menos uno y mientras que ese valor sea mayor o igual al

del ciclo anterior (con decrementos).

3-Dentro del segundo ciclo debe existir una comparación que

determina el tipo de ordenamiento (ascendente o descendente)

entre el primer elemento (posición generada por el segundo ciclo) y

el segundo elemento (posición generada por el segundo ciclo menos

Page 26: Centro uiversitario salina cruz (1)

uno), si la respuesta a la condición es verdadera se realiza un

intercambio entre los dos elementos.

4-Para realizar el intercambio se genera un almacenamiento

temporal, el cual guarda el dato del primer elemento, el segundo

elemento toma el lugar del primero y en el lugar del segundo se

coloca lo que contiene el almacenamiento temporal

Este tercer procedimiento es muy similar al anterior con la

diferencia que el elemento que va quedando es su lugar el primero

no el último como en el caso anterior.

El método de ordenación por intercambio directo o método de la

burbuja, es el más simple y consiste en comparar dos elementos

adyacentes para determinar si se realiza un intercambio entre los

mismos, esto en caso de que el primero sea mayor que el segundo

(forma ascendente) o el caso de que el primero sea menor que el

segundo (forma descendente).

PROCEDIMIENTO DEL METODO BURBUJA

El procedimiento del algoritmo para el método de ordenamiento

quicksort es la siguiente:

1-Debe elegir uno de los elementos del arreglo al que llamaremos

pivote.

2-Debe acomodar los elementos del arreglo a cada lado del pivote,

de manera que del lado izquierdo queden todos los menores al

pivote y del lado derecho los mayores al pivote; considere que en

este momento, el pivote ocupa exactamente el lugar que le

corresponderá en el arreglo ordenado.

Page 27: Centro uiversitario salina cruz (1)

3-Colocado el pivote en su lugar, el arreglo queda separado en dos

subarreglos, uno formado por los elementos del lado izquierdo del

pivote, y otro por los elementos del lado derecho del pivote.

4-Repetir este proceso de forma recursiva para cada sub arreglo

mientras éstos contengan más de un elemento. Una vez terminado

este proceso todos los elementos estarán ordenados.

Para elegir un pivote se puede aplicar cualquiera de las siguientes

tres opciones:

1-El pivote será el primer elemento del arreglo.

2-El pivote será el elemento que está a la mitad del arreglo. O

3-Que el pivote se elija de entre tres elementos del arreglo

(cualesquiera), los cuales se deben comparar para seleccionar el

valor intermedio de los tres y considerarlo como el pivote.

La forma o técnica de reacomodo de los elementos del lado

izquierdo y derecho del pivote, aplica el siguiente procedimiento

que es muy efectivo. Se utilizan dos índices: izq, al que llamaremos

índice inicial, y der, al que llamaremos índice final. Conociendo estos

elementos el algoritmo quedaría de la siguiente manera:

1-Recorrer el arreglo simultáneamente con izq y der: por la

izquierda con izq (desde el primer elemento), y por la derecha con

der (desde el último elemento).

2-Mientras el arreglo en su posición izq. (Arreglo [izq.]) sea menor

Page 28: Centro uiversitario salina cruz (1)

que el pivote, continuamos el movimiento a la derecha.

3-Mientras el arreglo en su posición der (arreglo [der]) sea mayor

que el pivote, continuamos el movimiento a la izquierda.

4-Terminando los movimientos se comparan los índices y si izq es

menor o igual al der, se intercambian los elementos en esas

posiciones y las posiciones se cambian izq a la derecha y der a la

izquierda.

5-Repetir los pasos anteriores hasta que se crucen los índices (izq

sea menor o igual a der).

6-El punto en que se cruzan los índices es la posición adecuada para

colocar el pivote, porque sabemos que a un lado los elementos son

todos menores y al otro son todos mayores (o habrían sido

intercambiados).

PROCEDIMIENTO DEL METODO QUICKSORT

EJEMPLO:

Vector original:

25 57 48 37 12 92 86 33

Asignamos los elementos en colas basadas en el dígito menos

significativo de cada uno de ellos.

0:

1:

Page 29: Centro uiversitario salina cruz (1)

2:12 92

3:33

4:

5:25

6:86

7:57 37

8:48

9:

Después de la primera pasada, la ordenación queda:

12 92 33 25 86 57 37 48

Colas basadas en el dígito más significativo.

0:

1:12

2:25

3:33 37

4:48

5:57

6:

7:

8:86

9:92

Lista ordenada:

12 25 33 37 48 57 86 92

PROCEDIMIENTO DEL METODO SHELL SORT

El procedimiento para aplicar el algoritmo de shell sort es el

siguiente:

1-Generar un ciclo que se encargue de controlar el tamaño que

deben tener los incrementos.

Page 30: Centro uiversitario salina cruz (1)

2-Este ciclo debe iniciar con la división del tamaño del arreglo entre

dos.

3-Mientras que el incremento sea mayor a cero debe continuar.

4-El cambio de incremento se elige de entre dos opciones: un uno o

la división del incremento anterior entre dos.

5-Un segundo ciclo dentro del anterior, controla el número de

comparaciones que se deben hacer según el tamaño del

incremento.

6-El control de este ciclo debe iniciar con el incremento generado

anteriormente.

7-Mientras el control del ciclo sea menor que el tamaño del arreglo.

El control debe cambiar de uno en uno.

8-Un tercer ciclo dentro del segundo controla en qué momento se

detienen las comparaciones o se hacen los posibles intercambios

entre los elementos.

9-El control de este ciclo debe iniciar con el valor del ciclo anterior.

10-Mientras que el control sea mayor o igual al incremento del

primer ciclo y el elemento del arreglo de la posición del control de

este ciclo menos el incremento, sea mayor que el elemento del

arreglo de la posición control de este ciclo, realice los intercambios

entre estas posiciones.

11-Y el control se decremente con el valor del incremento.

Page 31: Centro uiversitario salina cruz (1)

TREE SORT O HEAP SORT

En ciencias de la computación , heapsort es una basada en la comparación algoritmo de ordenación . Heapsort puede ser pensado como una mejora de la especie de selección : al igual que el algoritmo, que divide su entrada en una región sin ordenar una basura así, y se contrae de forma iterativa la región no seleccionados mediante la extracción del elemento más grande y que se mueve a la región ordenados. La mejora consiste en el uso de

un montón estructura de datos en lugar de una búsqueda en tiempo lineal para encontrar el máximo. [2]

Aunque algo más lento en la práctica, en la mayoría de las máquinas que un bien implementado clasificación rápida , tiene la ventaja de un peor de los casos más favorables O ( n log n ) tiempo de ejecución. Heapsort es un algoritmo en el lugar , pero no es una especie estable .

Heapsort fue inventado por JWJ Williams en 1964. [3] Esto también fue el nacimiento del montón, ya presentó por Williams como una estructura de datos útiles en su propio derecho. [4] En el mismo año, RW Floyd publicó una versión mejorada que podría ordenar un arreglo en el lugar, continuando con su investigación anterior en el Treesort algoritmo.

Page 32: Centro uiversitario salina cruz (1)

En este método de ordenamiento existen dos archivos con llaves

ordenadas, los

Cuales se mezclan para formar un solo archivo.

1.-La longitud de los archivos puede ser diferente.

2.-El proceso consiste en leer un registro de cada archivo y

compararlos, el

Menor es almacenando en el archivo de resultado y el otro se

compara con el

Siguiente elemento del archivo si existe. El proceso se repite hasta

que alguno

De los archivos quede vacío y los elementos del otro archivo se

almacenan

Directamente en el archivo resultado.

ORDENACIÓN POR INTERCALACIÓN

(Mergesort) Características. • Es un algoritmo recursivo con un

número de comparaciones mínimo. El tiempo de ejecución

promedio es O(N log(N)). • Su desventaja es que trabaja sobre un

array auxiliar lo cual tiene dos consecuencias: uso de memoria extra

y trabajo extra consumido en las copias entre arreglos (aunque es

un trabajo de tiempo lineal). • Es una aplicación clásica de la

estrategia para resolución de algoritmos "divide y vencerás". Esta

estrategia plantea el hecho de que un problema puede ser dividido

en varios sub problemas y una vez resueltos estos se puede

proceder a unir las soluciones para formar la solución del problema

general. La solución de los sub problemas más pequeños se realiza

de la misma manera: es decir, se van resolviendo problemas cada

vez más pequeños (hasta encontrarnos con un caso base: problema

Page 33: Centro uiversitario salina cruz (1)

no divisible con solución tribial). En cada recursión se toma un array

de elementos desordenados. Se lo divide en dos mitades, se aplica la

recursión en cada una de estas y luego (dado que al finalizar estas

recursiones tenemos las dos mitades ordenadas) se intercalan

ambas para obtener el array ordenado. Intercalar. Es la operación

que le da el nombre a este algoritmo. La intercalación toma dos

secuencias (arrays) de elementos y a partir de estas construye una

tercera secuencia que contiene todos los elementos de estas en

orden. Implementación de la intercalación. Sean dos arrays

ordenados A y B (cuyas longitudes pueden ser distintas). Sea el array

C tal que |C|>=|A|+|B| (tiene capacidad para almacenar todos los

elementos de ambas listas A y B). Sean los contadores ap., bp y cp

con valor inicial 0 (se ponen al inicio de sus arreglos respectivos). Lo

que hace intercalar es copiar el menor de A[ap] y B[bp] en C[cp] y

avanzar los contadores apropiados. Cuando se agota cualquier lista

de entrada (A o B), los datos que quedan en la otra lista se copian en

C.

Esperamos que al leer el código, el lector entienda los detalles

menores tanto de la rutina recursiva del algoritmo de recursión

como de la rutina intercala (). void ord_intercalacion (Dato * A, Dato

* tmp, int izq, int der); /* Función recursiva! A es el array de datos.

tmp debe ser un array de tamaño mayor o igual a A. izq y der son los

extremos del sub arreglo sobre el cual trabajaremos en esta

recursión. */ void intercalar (Dato * A, Dato * tmp, int izq, int centro,

int der); /* lo que hace esta rutina es intercalar las particiones

[A[izq], ..., A[centro-1] ] y [ A[centro], ..., A[der] ] (que deberían estar

ya ordenadas) en el subarray [ tmp[izq], ..., tmp[der] ] y luego copiar

los elementos nuevamente a A, en el subarray [ A[izq], ..., A[der] ] */

void mergesort (Dato * A, int N) { Dato *tmp = crear (N); /* creamos

un array auxiliar del mismo tamaño que A */ ord_intercalacion (A,

Page 34: Centro uiversitario salina cruz (1)

tmp, 0, N - 1); } void ord_intercalacion (Dato * A, Dato * tmp, int izq,

int der) { if (izq < der) /* este if comprueba el caso base que es

cuando la partición pasada no tiene elementos. */ { /* dividimos a la

mitad el subarray [A[izq],...,A[der]] */ int centro = (izq + der) / 2; /*

aplicamos la recursión en ambas mitades */ ord_intercalacion (A,

tmp, izq, centro); ord_intercalacion (A, tmp, centro + 1, der); /* a

este punto ambas mitades deberían estar ordenadas por lo que las

intercalamos para unirlas en una sola secuencia ordenada. */ 12

Algoritmos de ordenación intercalar (A, tmp, izq, centro + 1, der); } }

void intercalar (Dato * A, Dato * tmp, int izq, int centro, int der) { /*

mis particiones serán [izq,...,centro-1] y [centro,...,der] */ /*

contadores para la primera mitad, la segunda y para la intercalación

respectivamente. */ int ap = izq, bp = centro, cp = izq.; while ((ap <

centro) && (bp <= der)) { if (A[ap] <= A[bp]) { tmp[cp] = A[ap]; ap++;

} else { tmp[cp] = A[bp]; bp++; } cp++; } /* terminamos de intercalar,

ahora metemos los elementos restantes de la lista que aún no ha

terminado de ser procesada. */ while (ap < centro) { tmp[cp] =

A[ap]; cp++; ap++; } while (bp <= der) { tmp[cp] = A[bp]; cp++; bp++;

13 Algoritmos de ordenación } /* ahora que tenemos la

intercalación finalizada en tmp, la pasamos a A */ for (ap = izq.; ap

<= der; ap++) A[ap] = tmp[ap]; } Observar como la función principal

mergesort() solamente es un manejador de la función

ord_intercalacion() en la cual se realiza todo el trabajo

recursivamente. Si bien el algoritmo puede parecer largo, es más

fácil (desde nuestro punto de vista) entenderlo que otros algoritmos

más cortos pero más complejos como por ejemplo la ordenación de

Shell. La única parte difícil es entender cómo funciona la recursión

ya que el algoritmo intercalar es bastante fácil.

Page 35: Centro uiversitario salina cruz (1)

ORDENAMIENTO POR DISTRIBUCIÓN

Los algoritmos de ordenamiento por distribución, ordenan el arreglo tomando cada número e insertándolo en la posición que toma su valor, es decir, si se tiene un cinco se coloca en la posición cinco del arreglo, algo así como: “lo que valgas en esa posición te pongo”. Esto indica que no se podrán ordenar los arreglos que tengan valores repetidos y el arreglo necesita el tamaño del número más grande que se encuentre en él.

Lo que debemos hacer cuando se repitan los datos es incrementar la capacidad de la posición (urna). Para lograrlo podemos hacer lo siguiente:

1. Definir un arreglo en el que cada posición puede ser ocupada por más de un elemento (arreglo bidimensional) puede darse la situación de ser insuficiente la cantidad de posiciones adicionales o de existir demasiado desperdicio de memoria.

2. Definir el tamaño de la urna variable a través del uso de estructuras de datos como las listas simples enlazadas.

Los algoritmos de ordenamiento por distribución se clasifican en:

- CountingSort. - RadixSort. - BucketSort.

Radix.

El método de ordenación radix es un algoritmo que ordena datos

procesando sus elementos de forma individual, según la posición que ocupan dentro del dato. Los datos numéricos los por dígitos y los datos alfabéticos por letras.

Page 36: Centro uiversitario salina cruz (1)

ORDENACIÓN EXTERNA

Los algoritmos de ordenación externa son necesarios cuando los datos que se quiere ordenar no cabe en la memoria principal (RAM) de la computadora y por tal motivo se encuentran almacenados en un dispositivo secundario externo (el disco duro, cinta, memoria usb, etc.). La mayoría de estos algoritmos utilizan la técnica de divide y vencerás y la intercalación de archivos, para aplicar el ordenamiento.

Por intercalación de archivos se entiende la unión o fusión de dos o más archivos, previamente ordenados, en un solo archivo, el cual debe quedar ordenado al hacer la intercalación.

Si se cuenta con dos archivos con datos previamente ordenados, el proceso de intercalación entre los dos archivos, consiste en extraer el primer elemento de cada archivo y determinar cuál es el menor, para colocarlo en el tercer archivo, extraer el siguiente elemento del archivo y compararlo nuevamente contra el otro elemento que ya se tenía del otro archivo, para determinar cuál ingresa al tercer archivo, este proceso se repita hasta que uno de los archivos originales l legue hasta el fin, en este caso, solo resta transcribir los números del archivo que no se ha llegado a su fin al tercer archivo.

Los algoritmos de ordenación externa más comunes son dos:

- Intercalación directa o mezcla directa y - Mezcla natural o mezcla equilibrada.

Intercalación directa.

La intercalación directa o mezcla directa es un algoritmo de ordenación externa, que permite organizar los elementos de un archivo, de forma ascendente o descendente.

Page 37: Centro uiversitario salina cruz (1)

EL TORNEO DE TENIS PARA ORDENAMIENTO EXTERNO

La técnica de dividir para vencer tiene varias aplicaciones. No sólo en el diseño de algoritmos. Si no también en el diseño de circuitos, construcción de demostraciones matemáticas y en otros campos del quehacer humano. Se brinda un ejemplo para ilustrar esto. Considérese el diseño del programa de un torneo de tenis para n =Zk jugadores. Cada jugador debe enfrentarse a todos los demás. Y debe tener un encuentro diario durante n - I días, que es el número mínimo de días necesarios para completar el torneo. El programa del torneo

es una tabla den filas por n - 1 columnas cuya posición en fila i y columna j es el jugador con quien debe contender i el j-ksimo día. El enfoque dividir para vencer construyen un programa para la mitad de los jugadores. Que está diseñado por una aplicación recursiva del algoritmo buscando un programa para una mitad de esos jugadores, y así sucesivamente. Cuando se llega hasta dos jugadores, se tiene el caso base y simplemente se emparejan. Supóngase que hay ocho jugadores. El programa para los jugadores 1 a 4 ocupa la esquina superior izquierda (4 filas por 3 columnas) del programa que se está consumiendo. La esquina inferior izquierda (4 filas por 3 columnas) debe enfrentar a los jugadores con numeración más alta (5 a 8). Este subprograma se obtiene agregando 4 a cada entrada de la esquina superior izquierda. Ahora se ha simplificado el problema, y lo único que falta es enfrentar a los jugadores de baja numeración con los de alta numeración. Esto es fácil si los jugad* res 1 a 4 contienden con los 5 a 8, respectivamente, en el día4, y se permutan cíclicamente 5 a 8 en los días siguientes. El proceso se ilustra en la figura 10.4.

Page 38: Centro uiversitario salina cruz (1)

INTERACCIÓN CON LOTES. ALGORITMO BALANCEADO

Los árboles AVL están siempre equilibrados de tal modo que para todos los nodos, la altura de la rama izquierda no difiere en más de una unidad de la altura de la rama derecha o viceversa. Gracias a esta forma de equilibrio (o balanceo), la complejidad de una búsqueda en uno de estos árboles se mantiene siempre en orden de complejidad O (log n).

EL ALGORITMO POLI FASE PARA INTERACCIÓN POR LOTE

La ordenación de datos por intercalación es un proceso muy frecuente en programación. Esta operación es también un proceso que las personas encuentran comúnmente en sus rutinas diarias. Por ejemplo, cada elemento de la colección de datos de una agenda telefónica tiene un campo nombre, dirección y un número de teléfono. Una colección de datos clasificados se puede almacenar en un archivo, un vector o tabla, una lista enlazada o un árbol. Cuando

los datos están almacenados en vectores, tablas (arrays), listas enlazadas o árboles, la ordenación se denomina ordenación interna. Cuando los datos a clasificar se encuentran almacenados en archivos, en soporte de almacenamiento masivo (cintas o discos) el proceso de ordenación se denomina ordenación externa. Es un proceso utilizado en sistema de actualización, y en casos en que es necesario varias listas ordenadas. También es la única forma que hay para el ordenamiento de archivos, debido a la imposibilidad de almacenarlos en memoria y a limitaciones en el tiempo, por la cantidad de elementos a ordenar. El método de ordenación por intercalación es utilizado por los jugadores de cartas o naipes para ordenar sus barajas. Consiste en mirar las cartas una a unay cuando se ve cada

Page 39: Centro uiversitario salina cruz (1)

nueva carta se inserta en el lugar adecuado. Para desarrollar el

algoritmo imaginemos que las cartas se encuentran situadas en una fila encima del tapete; a medida que se ve una carta nueva, ésta se compara con la fila y se debe empujar alguna de ellas a la derecha para dejar espacio e insertar la nueva. Consideremos un vector de n posiciones. Comencemos con el subíndice i en la segunda posición incrementando en 1, el elemento del subíndice del vector se elimina de la secuencia y se reinserta en el vector en la posición adecuada.

EL ALGORITMO DE CASCADA

En numerosos casos en el desarrollo de la solución de problemas, encontramos que luego de tomar una decisión y marcar el camino correspondiente a seguir, es necesario tomar otra decisión. Luego de evaluar las condiciones, se señala nuevamente la rama correspondiente a seguir y nuevamente podemos tener que tomar otra decisión. El proceso puede repetirse numerosas veces. En el siguiente ejemplo tenemos una estructura selectiva SI ENTONCES que contiene dentro de ella otra estructura selectiva SI ENTONCES / SINO.

PROGRAMACIÓN DE PLICACIONES

ES UN PROGRAMA DISEÑADO PARA CUMPLIR UNA TAREA ESPECIFICA DENTRO DE ALGUNA DE LAS TANTAS RAMAS O CATEGORIAS DE LA INFORMATICA.. POR EJEMPLOS HAY PROGRAMAS DE APLICACION ESPECIFICA PARA EDICION DE AUDIO Y VIDEO, HABRA OTROS PARA TRABAJAR CON FOTOGRAFIAS, ETC

Page 40: Centro uiversitario salina cruz (1)

La interfaz de programación de aplicaciones, abreviada

como API1 (del inglés: Application Programming Interface), es el conjunto de subrutinas, funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.

Son usadas generalmente en las bibliotecas de programación.

CARACTERÍSTICAS

Una API representa la capacidad de comunicación entre componentes de software. Se trata del conjunto de llamadas a ciertas bibliotecas que ofrecen acceso a ciertos servicios desde los procesos y representa un método para conseguir abstracción en la programación, generalmente (aunque no necesariamente) entre los niveles o capas inferiores y los superiores del software. Uno de los principales propósitos de una API consiste en proporcionar un conjunto de funciones de uso general, por ejemplo, para dibujar ventanas oiconos en la pantalla. De esta forma, los programadores se benefician de las ventajas de la API haciendo uso de su funcionalidad, evitándose el trabajo de programar todo desde el principio. Las API asimismo son abstractas: el software que proporciona una cierta API generalmente es llamado la implementación de esa API.

Por ejemplo, se puede ver la tarea de escribir "Hola Mundo" sobre la pantalla en diferentes niveles de abstracción:

1. Haciendo todo el trabajo desde el principio:

1. Traza, sobre papel milimetrado, la forma de las letras (y espacio) "H, o, l, a, M, u, n, d, o".

2. Crea una matriz de cuadrados negros y blancos que se asemeje a la sucesión de letras.

Page 41: Centro uiversitario salina cruz (1)

3. Mediante instrucciones en ensamblador, escribe la

información de la matriz en la memoria intermedia (buffer) de pantalla.

4. Mediante la instrucción adecuada, haz que la tarjeta gráfica realice el volcado de esa información sobre la pantalla.

2. Por medio de un sistema operativo para hacer parte del trabajo:

1. Carga una fuente tipográfica proporcionada por el sistema operativo.

2. Haz que el sistema operativo borre la pantalla.

3. Haz que el sistema operativo dibuje el texto "Hola Mundo" usando la fuente cargada.

3. Usando una aplicación (que a su vez usa el sistema operativo) para realizar la mayor parte del trabajo:

4. Escribe un documento HTML con las palabras "Hola Mundo" para que un navegador web como Firefox, Chrome, Opera, Safari, Midori, Iceweasel, Web o Internet Explorer pueda representarlo en el monitor.

Como se puede ver, la primera opción requiere más pasos, cada uno de los cuales es mucho más complicado que los pasos de las

opciones siguientes. Además, no resulta nada práctico usar el primer planteamiento para representar una gran cantidad de información, como un artículo enciclopédico sobre la pantalla, mientras que el segundo enfoque simplifica la tarea eliminando un paso y haciendo el resto más sencillos y la tercera forma simplemente requiere escribir "Hola Mundo". Sin embargo, las API de alto nivel generalmente pierden flexibilidad; por ejemplo, resulta mucho más difícil en un navegador web hacer girar texto alrededor de un punto con un contorno parpadeante que programarlo a bajo nivel. Al elegir usar una API se debe llegar a un cierto equilibrio entre su potencia, simplicidad y pérdida de flexibilidad.

Page 42: Centro uiversitario salina cruz (1)

DEFINICIÓN DE ALGORITMO.

"Un algoritmo se define como un método que se realiza paso a paso para solucionar un problema que termina en un número finito de pasos".

Las características fundamentales que debe cumplir todo algoritmo son:

Debe ser preciso. e indicar el orden de realización de cada paso.

Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.

Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento ; o sea debe tener un número finito de pasos.

La definición de un algoritmo debe describir tres partes : Entrada, Proceso y Salida.

Diseñar un algoritmo para cambiar una llanta a un coche.

Inicio.

Traer gato.

Levantar el coche con el gato.

Aflojar tornillos de las llantas.

Sacar los tornillos de las llantas.

Quitar la llanta.

Poner

ESTRUCTURA DE UN PROGRAMA Y REGLAS SINTÁCTICAS

Page 43: Centro uiversitario salina cruz (1)

Un lenguaje de programación es un lenguaje formal diseñado para

realizar procesos que pueden ser llevados a cabo por máquinas como las computadoras.

Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.1

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el código fuente de un programa informático se le llama programación.

También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:

El desarrollo lógico del programa para resolver un problema en particular.

Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).

Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.

Prueba y depuración del programa.

Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos

'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten estructurar el contenido de los documentos).

Page 44: Centro uiversitario salina cruz (1)

Permite especificar de manera precisa sobre qué datos debe operar

una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa.

PALABRA RESERVADA:

En los lenguajes informáticos, una palabra reservada es una palabra que tiene un significado gramatical especial para ese lenguaje y no puede ser utilizada como un identificador de objetos en códigos del mismo, como pueden ser las variables.

Por ejemplo, en SQL, un usuario no puede ser llamado "group",

porque la palabra group es usada para indicar que un identificador

se refiere a un grupo, no a un usuario. Al tratarse de una palabra clave su uso queda restringido.

Ocasionalmente la especificación de un lenguaje de programación puede tener palabras reservadas que están previstas para un posible

uso en futuras versiones. En Javaconst y goto son palabras

reservadas — no tienen significado en Java, pero tampoco pueden ser usadas como identificadores. Al reservar los términos pueden ser implementados en futuras versiones de Java, si se desea, sin que el código fuente más antiguo escrito en Java deje de funcionar.

Page 45: Centro uiversitario salina cruz (1)

VARIABLE

Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o ejecución del programa. Dependiendo del lenguaje, hay diferentes tipos de variables, tales como enteras, reales, carácter, lógicas y de cadena. Una variable que es de un cierto tipo puede tomar únicamente valores de ese tipo. Una variable de carácter, por ejemplo, puede tomar como valor sólo caracteres, mientras que una variable entera puede tomar sólo valores enteros.

Si se intenta asignar un valor de un tipo de una variable de otro tipo se producirá un error de tipo. Una variable se identifica por los siguientes atributos: nombre que lo asigna y tipo que describe el uso de la variable.

Los nombres de las variables, a veces conocidos como identificadores, suelen constar de varios caracteres alfanuméricos, de los cuales el primero normalmente es una letra. No se deben utilizar –aunque lo permita el lenguaje- como nombres de identificadores palabras reservadas del lenguaje de programación. Nombres válidos de variables son:

A510

NOMBRES

NOTAS

NOMBRE_APELLIDOS

Page 46: Centro uiversitario salina cruz (1)

Los nombres de las variables elegidas para el algoritmo o el

programa deben ser significativos y tener relación con el objeto que representan, como pueden ser los casos siguientes:

NOMBRE para representar nombres de personas

PRECIOS para representar los precios de diferentes artículos

NOTAS para representar las notas de una clase

EXPRESIONES

En programación, una variable está formada por un espacio en el sistema de almacenaje (memoria principal de un ordenador) y un nombre simbólico (un identificador) que está asociado a dicho espacio. Ese espacio contiene una cantidad o información conocida o desconocida, es decir un valor. El nombre de la variable es la forma usual de referirse al valor almacenado: esta separación entre nombre y contenido permite que el nombre sea usado independientemente de la información exacta que representa. El identificador, en el código fuente de la computadora puede estar ligado a un valor durante el tiempo de ejecución y el valor de la variable puede por lo tanto cambiar durante el curso de la ejecución del programa. El concepto de variables en computación puede no corresponder directamente al concepto de variables en matemática. El valor de una variable en computación no es

necesariamente parte de una ecuación o fórmula como en matemáticas. En computación una variable puede ser utilizada en un proceso repetitivo: puede asignársele un valor en un sitio, ser luego utilizada en otro, más adelante reasignársele un nuevo valor para

Page 47: Centro uiversitario salina cruz (1)

más tarde utilizarla de la misma manera. Procedimientos de este

tipo son conocidos con el nombre de iteración. En programación de computadoras, a las variables, frecuentemente se le asignan nombres largos para hacerlos relativamente descriptivas para su uso, mientras que las variables en matemáticas a menudo tienen nombres escuetos, formados por uno o dos caracteres para hacer breve en su transcripción y manipulación.

El espacio en el sistema de almacenaje puede ser referido por distintos identificadores diferentes. Esta situación es conocida entre los angloparlantes como "aliasing" y podría traducirse como "sobre nombramiento" para los hispanoparlantes. Asignarle un valor a una variable utilizando uno de los identificadores cambiará el valor al que se puede acceder a través de los otros identificadores.

Los compiladores deben reemplazar los nombres simbólicos de las variables con la real ubicación de los datos. Mientras que el nombre, tipo y ubicación de una variable permanecen fijos, los datos almacenados en la ubicación pueden ser cambiados durante la ejecución del programa.

Las variables pueden ser de longitud:

Fija.- Cuando el tamaño de la misma no variará a lo largo de la

ejecución del programa. Todas las variables, sean del tipo que sean tienen longitud fija, salvo algunas excepciones — como las colecciones de otras variables (arrays) o las cadenas.

Variable.- Cuando el tamaño de la misma puede variar a lo largo de la ejecución. Típicamente colecciones de datos.

Page 48: Centro uiversitario salina cruz (1)

TIPO DE DATOS

Debido a que las variables contienen o apuntan a valores de tipos

determinados, las operaciones sobre las mismas y el dominio de sus propios valores están determinadas por el tipo de datos en cuestión. Algunos tipos de datos usados:

Tipo de dato lógico.

Tipo de dato entero.

Tipo de dato de coma flotante (real, con decimales).

Tipo de dato carácter.

Tipo de dato cadena

INSTRUCCIONES ASOCIADAS A

Un programa informático o programa de computadora es una secuencia de instrucciones, escritas para realizar una tarea específica en una computadora.1 Este dispositivo requiere programas para funcionar, por lo general, ejecutando las instrucciones del programa en un procesador central.2 El programa tiene un formato ejecutable que la computadora puede utilizar directamente para ejecutar las instrucciones. El mismo programa en su formato de código fuente legible para humanos, del cual se derivan los programas ejecutables(por ejemplo, compilados), le permite a un programador estudiar y desarrollar sus algoritmos. Una colección de programas de computadora y datos relacionados se

conoce como software.

Generalmente, el código fuente lo escriben profesionales conocidos como programadores de computadora.3 Este código se escribe en un lenguaje de programación que sigue uno de los siguientes dos paradigmas: imperativo o declarativo, y que posteriormente puede ser convertido en un archivo ejecutable (usualmente llamado

Page 49: Centro uiversitario salina cruz (1)

un programa ejecutable o un binario) por un compilador y más tarde

ejecutado por una unidad central de procesamiento. Por otra parte, los programas de computadora se pueden ejecutar con la ayuda de un intérprete, o pueden ser empotrados directamente en hardware.

De acuerdo a sus funciones, los programas informáticos se clasifican en software de sistema y software de aplicación. En las computadoras de 2015, al hecho de ejecutar varios programas de forma simultánea y eficiente, se lo conoce como multitarea.

DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS

DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS El primer objetivo de toda computadora es el manejo de la información o datos. Estos datos pueden ser las cifras de ventas de un supermercado o las calificaciones de una clase. Un dato es la expresión general que describe los objetos con los cuales opera una computadora. La mayoría de las computadoras pueden trabajar con varios tipos (modos) de datos. Los algoritmos y los programas correspondientes operan sobre esos tipos de datos.

La acción de las instrucciones ejecutables de las computadoras se reflejan en cambios en los valores de las partidas de datos. Los datos de entrada se transforman por el programa, después de las etapas

intermedias, en datos de salida.

Page 50: Centro uiversitario salina cruz (1)

En el proceso de resolución de problemas el diseño de la estructura

de datos es tan importante como el diseño del algoritmo y del programa que se basa en el mismo.

Existen dos tipos de datos: simples (sin estructura) y compuestos (estructurados). Los datos estructurados son conjuntos de partidas de datos simples con relaciones definidas entre ellos.

Los distintos tipos de datos se representan en diferentes formas en la computadora. A nivel de máquina, un dato es un conjunto o secuencia de bits (dígitos 0 o 1). Los lenguajes de alto nivel permiten basarse en abstracciones e ignorar los detalles de la representación interna. Aparece el concepto de tipo de datos, así como su representación. Los tipos de datos simples son los siguientes:

Numéricos (integer, real) Lógicos (boolean) Carácter (char, string) Existen algunos lenguajes de programación que admiten otros tipos de datos; complejos, que permiten tratar los números complejos, y otros lenguajes que también permiten declarar y definir sus propios tipos de datos: enumerados (enumerated) y subrango (subrange).

ESTRUCTURAS DE CONTROL

Page 51: Centro uiversitario salina cruz (1)

OPERACIONES ARITMETICAS

Las operaciones aritméticas son: suma, resta, multiplicación, división, potenciación, división entera. +, -, *, /, ^, %/% or %%

Las operaciones aritméticas básicas.

Los números representan unidades de cosas; pero es posible utilizarlos como solamente números; y de esa forma, realizar con ellos diversas operaciones que sirven para realizar cálculos que

son muy útiles; y que se llaman operaciones aritméticas.

Esas operaciones son:

— La SUMA — (también llamada ADICIÓN), que se representa con el signo de MÁS: +

Page 52: Centro uiversitario salina cruz (1)

— La RESTA — (también llamada SUSTRACCIÓN o DIFERENCIA) que se representa con el signo de MENOS: –

— La MULTIPLICACIÓN — que se representa con el signo de POR: ×

— La DIVISIÓN — que se representa con el signo de DIVIDIDO: ÷

El resultado de las operaciones, se representa utilizando el signo de IGUAL: =

Ir al principio

La suma.

La SUMA es la operación aritmética mediante la cual, teniendo dos o más números, se acumula la cantidad de unidades que cada

uno representa, para obtener otro número que representa la cantidad de todos ellos.

Cada uno de los números que representan las unidades de uno y otro grupo, se denominan SUMANDOS.

1 2 + 1 2 = 1 2 3 4

Esa operación se representa colocando solamente el número

que representa el total de las unidades de cada sumando y también el que representa el resultado de la suma:

2 + 2 = 4

Page 53: Centro uiversitario salina cruz (1)

5 + 2 = 7

Ir al principio

La resta.

La RESTA es la operación aritmética mediante la cual, teniendo dos números, se quita de la que tiene más cantidad de unidades,

la que tiene menos cantidad de unidades, para obtener otro número que representa la diferencia de cantidad entre ellos.

El mayor de los números se denomina MINUENDO; y el menor se denomina SUSTRAENDO.

1 2 3 4 5 – 1 2 = 1 2 3

Esta operación también se representa colocando solamente el

número que representa el total de las unidades de cada término y también el que representa el resultado de la resta:

5 – 2 = 3

9 – 4 = 5

Ir al principio

Page 54: Centro uiversitario salina cruz (1)

La multiplicación.

La MULTIPLICACIÓN es la operación aritmética en la cual, se suma varias veces el mismo número. El número se

denomina MULTIPLICANDO; y el otro número, que representa la cantidad de veces que el multiplicando es sumado, se

denomina MULTIPLICADOR. El resultado de la multiplicación, se denomina PRODUCTO

1 2 + 1 2 + 1 2 + 1 2 = 1 2 3 4 5 6 7 8

Cuando se representa la multiplicación utilizando solamente el

número que representa el multiplicando y el que representa el multiplicador, se utiliza el signo de POR:

2 × 4 = 8

3 × 3 = 9

Ir al principio

La división.

La DIVISIÓN es la operación aritmética en la cual, teniendo un número mayor que UNO, se le hace con él varias partes iguales.

El número se denomina DIVIDENDO; y la cantidad de partes iguales que pueden hacerse, se denomina DIVISOR.

1 2 3 4 5 6 7 8 – 1 2 = 1 2 3 4 5 6

Page 55: Centro uiversitario salina cruz (1)

1 2 3 4 5 6 – 1 2 = 1 2 3 4

1 2 3 4 – 1 2 = 1 2

1 2 – 1 2 = 0

Esta división se representa utilizando solamente el número que representa el dividendo y el que representa el divisor, y se

utiliza el signo de DIVIDIDO:

8 ÷ 4 = 2

9 ÷ 3 = 3

La división es como una multiplicación hecha “al revés”; por lo cual se dice que es la inversa de la multiplicación. Esto permite

hacer una prueba para saber si el resultado de la división que se obtuvo es el correcto; que consiste en multiplicar ese resultado

por el divisor, y si la división estuvo bien hecha, dará como resultado el dividendo.

8 ÷ 4 = 2

4 × 2 = 8

Page 56: Centro uiversitario salina cruz (1)

FUNCIONES MATEMÁTICAS.

Casi cualquier lenguaje de programación tiene incorporadas ciertas funciones matemáticas, de modo que nos permita calcular raíces cuadradas, logaritmos, senos y cosenos, etc.

Lo mismo ocurre en muchas variantes de pseudocódigo. Por ejemplo, PseInt incluye las siguientes funciones matemáticas:

Función Significado

RC(X) o RAIZ(x) Raíz Cuadrada de X

ABS(X) Valor Absoluto de X

LN(X) Logaritmo Natural de X

EXP(X) Función Exponencial de X

SEN(X) Seno de un ángulo X (medido en radianes)

COS(X) Coseno de un ángulo X (medido en radianes)

TAN(X) Tangente de un ángulo X (medido en radianes)

ASEN(X) Arco seno de X

ACOS(X) Arco coseno de X

ATAN(X) Arco tangente de X

TRUNC(X) Parte entera de X

REDON(X) Entero más cercano a X

AZAR(X) Entero aleatorio entre 0 y x-1

(Si no sabes qué hace alguna de estas funciones, no te preocupes mucho, es señal de que hasta ahora no la has necesitado... ; -) Las más importantes de ellas las probaremos directamente como parte de los ejercicios)

Page 57: Centro uiversitario salina cruz (1)

Ejercicio de repaso propuesto 10.1: Crea un programa que genere un

número al azar entre el 1 y el 100. El usuario tendrá 7 oportunidades para adivinarlo. Tras cada intento, se le dirá si se ha pasado o se ha quedado corto.

Ejercicio de repaso propuesto 10.2: Haz un programa que calcule raíces cuadradas: el usuario introducirá un número y se le mostrará su raíz cuadrada. Se repetirá hasta que introduzca el número 0 (para el que no se deberá mostrar su raíz). Si introduce un valor negativo, se deberá mostrar un aviso en vez de intentar calcular su raíz.

Ejercicio de repaso propuesto 10.3: PseInt no incluye ninguna función para calcular raíces cúbicas ni con ningún otro índice distinto de 2, pero esto es algo fácil de solucionar: para hallar la raíz cúbica de un número basta con elevar a (1/3). Pruébalo con un programa que calcule la raíz cúbica de un número introducido por el usuario (puedes comprobar que funciona correctamente si pruebas con el número 8, cuya raíz cúbica es 2).

Ejercicio de repaso propuesto 10.4: Si has estudiado trigonometría, quizá te suene que el seno de un ángulo de 45 grados es (raíz de 2) / 2. Haz un programa que muestre los resultados de ambas operaciones, para ver si parecen iguales. Recuerda que el ángulo se ha de indicar en radianes y que puedes convertir de grados a radianes multiplicando por PI y dividiendo por 180: SEN(45*PI/180).

Ejercicio de repaso propuesto 10.5: Pide al usuario dos números y muestra la "distancia" entre ellos (el valor absoluto de su diferencia, de modo que el resultado sea siempre positivo).

Ejercicio de repaso propuesto 10.6: Pide al usuario dos pares de números x1,y2 y x2,y2, que representen dos puntos en el plano. Calcula y muestra la distancia entre ellos (raíz cuadrada de ((x1-x2)2 + (y1-y2)2).

Page 58: Centro uiversitario salina cruz (1)

Manejo de Caracteres en Java

El manejo de caracteres es un conjunto de métodos y sentencias del Lenguaje Java que nos permite operar(reconocer, transformar, verificar, comparar, etc.) con los caracteres de una cadena de texto, ciertos parámetros que señalamos, de todos, los más comunes e importantes los listo a continuación: String toLowerCase(); Nos permite transformar todos los caracteres de una cadena en Minúsculas. Ejm: String sCadena = "CADENA DE PRUEBA GL"; System.out.println(sCadena.toLowerCase()); //cadena de prueba gl String toUpperCase(); Nos permite transformar todos los caracteres de una cadena en Mayúsculas.

Ejm: String sCadena = "Cadena de Prueba GL"; System.out.println(sCadena.toUpperCase()); //CADENA DE PRUEBA GL String trim();

Page 59: Centro uiversitario salina cruz (1)

Método que elimina los espacios en blanco iniciales y finales de la

cadena de caracteres, retornando una copia de la misma. Ejm: String sCadena = " Esto Es Una Cadena" ; System.out.println(sCadena.trim()); //Devuelve "Esto Es Una Cadena" String replace(char oldChar, char newChar) Este método lo utilizamos siempre y cuando deseamos remplazar un carácter por otro. Se reemplazarán todos los caracteres encontrados. Una implementación práctica de esto se encuentra en Microsoft Office Word, que nos permite buscar cierto caracter o cadena de caracteres y reemplazarlos automáticamente con otro, incluso lo podemos dejar en blanco. Sintaxis a seguir: public String replace(char caracter_antiguo, char caracter_nuevo) public String replace(CharSequence target, CharSequence replacement) Ejm: String cadena = new String("Falta de sexo"); System.out.println(cadena.replace('x','s'); //Reemplaza todas las 'x'

por 's' //Por tanto imprime: Falta de seso String valueOf(); Este conjunto de métodos de la Clase String nos permite convertir cualquier tipo de dato básico (int, double, float,etc. ) a cadena; en el caso de que tengamos con arrary de caracteres para convertir en una cadena, podemos tener una excepción IndexOutOfBoundsException en el caso de que intentemos acceder

Page 60: Centro uiversitario salina cruz (1)

a un elemento que no exista. , a continuación los método que nos

permite utilizar valueOf : String valueOf(boolean b); String valueOf(int i); String valueOf(long l); String valueOf(float f);, String valueOf(double d); String valueOf(Object obj); Detalles de los Parámetros para valueOf: b, valor booleano a convertir en cadena. c, caracter a convertir en cadena. i, numero entero a convertir en cadena. l, long a convertir en cadena. f, decimal a convertir en cadena. d, double a convertir en cadena. data, array a convertir en cadena. offset, desplazamiento a partir va a empezar la conversión. count, número de caracteres a convertir de la cadena. obj, objeto a convertir en cadena. Excepción para ValueOf: Indica que el índice pasado como parámetro está fuera de rango (que no existe). Esto aplica a elementos como Array, Vector, String,

etc. Sintaxis a seguir: public IndexOutOfBoundsException() Constructores: IndexOutOfBoundsException() IndexOutOfBoundsException(String s)

Page 61: Centro uiversitario salina cruz (1)

Ejm:

String cadena = new String("Mi cadena");//Aquí solo hay 9 elementos char caracter = ; try{ caracter = cadena.charAt('40');//Al tratar de acceder al elemento 40 de nuestra cadena, nos da error ya que no existe. } catch (IndexOutOfBoundsException ioobe){ System.out.println("No existe un carácter en esa posición"); }

Page 62: Centro uiversitario salina cruz (1)

ESTRUCTURA DE DATOS

En programación, una estructura de datos es una forma particular de organizar datos en una computadora para que pueda ser utilizado de manera eficiente.

Diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son altamente especializados para tareas específicas.

Las estructuras de datos son un medio para manejar grandes cantidades de datos de manera eficiente para usos tales como grandesbases de datos y servicios de indización de Internet. Por lo general, las estructuras de datos eficientes son clave para diseñar algoritmoseficientes. Algunos métodos formales de diseño y lenguajes de programación destacan las estructuras de datos, en lugar de los algoritmos, como el factor clave de organización en el diseño de software.

Page 63: Centro uiversitario salina cruz (1)

OPERACIONES ESPECIALES

RESOLUCIÓN DE PROBLEMAS QUE IMPLICAN LA REALIZACIÓN DE DOS

OPERACIONES

En el algoritmo ABN surgen varias operaciones que simplifican y la

resolución de problemas que requieren varias operaciones

y que tras la realización de la primera el dato obtenido nos permita

realizar la siguiente operación. Este tipo de problemas

contienen un grado de complejidad, sobre todo de comprensión,

que desde el algoritmo ABN se simplifica sustancialmente,

además de permitir reaizarlas en un nivel inferior al que se realian

en el algoritmo tradicional. Se de una particularidad exclusiva

del método ABN que le facilita al niño resolver estas situaciones.

Estas operaciónes son: (Hacer clic en el nombre para

profundizar en la operación)

1- La "sumirresta": Problemas que implican sumar y restar. Ejemplo:

Page 64: Centro uiversitario salina cruz (1)

2- "Pedro tiene 28 cromos en una cajita y

3- 12 que acaba de comprar, si regala a un amigo, 16 que tiene

4- repetidos. ¿Con cuantos se queda?

Los pasos son múltiples, a continuación dejamos una de ellas, en la que en

el primer paso hemos retirado 10 de los cromos

que va a regalar del grupo de 12, quedando 28 y 2 cromos y aún por quitar 6.

En el segundo paso retiramos 6 cromos de los veintiocho (podríamos

hacer cualquier convinación como por ejemplo

quitar cuatro de 28 y dos del 2) quedando 24 y 2.

En el último paso, como ya hemos retirado los que ha regalado, sólo

queda sumar los que tienen 22 + 2

Page 65: Centro uiversitario salina cruz (1)

Subrutina,procedimiento y funciones

Diagrama del funcionamiento de una subrutina.

En informática, una subrutina o subprograma (también llamada procedimiento, función , rutina o método), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica. Algunos lenguajes de programación, como Visual Basic .NET o Fortran, utilizan el nombre función para referirse a subrutinas que devuelven un valor.

SUBPROGRAMAS / SUBPROCEDIMIENTOS / SUBRUTINAS ¿Por qué

los utilizamos? Estas son unas de las razones: 1. Modularización.

Cada subprograma tiene una misión muy concreta, de modo que

nunca tiene un número de líneas excesivo y siempre se mantiene

dentro de un tamaño manejable. Además, un mismo subprograma

puede ser llamado muchas veces en un mismo programa, e incluso

puede ser reutilizadp por otros programas. 2. Ahorro de memoria y

tiempo de desarrollo. En la medida en que un mismo subprograma

es utilizado muchas veces, el número total de líneas de código del

programa disminuye, y también lo hace la probabilidad de introducir

errores en el programa. 3. Independencia de datos. Existen 2 tipos

Page 66: Centro uiversitario salina cruz (1)

de Subprogramas: FUNCIONES y PROCEDIMIENTOS FUNCIONES

PROCEDIMIENTOS SINTAXIS Sintaxis: Function miFuncion ([

parámetros]) [As tipo] [ sentencias] [ miFuncion = expresion] End

Function El nombre de la función, que es el valor de retorno, actúa

como una variable dentro del cuerpo de la función. (*) Mirar teoría

Parámetros Sintaxis: Sub nombre ([parámetros]) [instrucciones] End

Sub (*) Mirar teoría Parámetros VALORES DEVUELTOS Las funciones

DEVUELVEN SIEMPRE un valor. Por eso a la hora de INVOCARLAS se

encuentran SIEMPRE a la derecha de una expresión (no pueden

aparecer “solas”): En ejecución, la llamada a la función se sustituye

por el valor que devuelve dicha función Ej:

Pagar=CalculoIVA(importe, iva) No se invocan con CALL Los

procedimientos NO DEVUELVEN NUNCA ningún valor. Por eso a la

hora de INVOCARLOS aparecen “solos”, sin estar contenidos en

ninguna expresión: Ej1: Call calcularRectangulo Ej2: Call

calcularTriangulo Ej3 Call miProcedimiento(dato1) Se invocan con

CALL Fundamentos de Informática. PARÁMETROS Admiten el paso

de PARÁMETROS, tanto por VALOR como por REFERENCIA. Admiten

el paso de PARÁMETROS, tanto por VALOR como por REFERENCIA.

EJEMPLOS PROGRAMAS Option Explicit Private Function

Factorial(ByVal X As Integer) As Long Dim i As Integer, xfact As Long

xfact =1 for i=1 to x step 1 xfact = xfact * i next i Factorial = xfact End

Function Private Sub cmdPulsame_Click() Dim A As Integer Dim B As

Integer,resultado As Single Dim A_Fact,B_Fact,A_menos_B_Fact As

Long A = InputBox(“Introduce un número:”) B = InputBox(“Introduce

un número:”) A_Fact = Factorial(A) B_Fact = Factorial(B)

A_Menos_B_Fact = Factorial(A-B) resultado = A_fact / (B_Fact *

A_Menos_B_Fact) MsgBox(“El resultado de la combinación : “ &

resultado) End Sub Option Explicit Dim opcion Private Sub

cmdCalcular_Click() If opcion = 1 Then Call calcularRectangulo Else

Page 67: Centro uiversitario salina cruz (1)

Call calcularTriangulo End If End Sub Sub calcularRectangulo()

txtArea.Text = Val(txtBase.Text)*Val(txtAltura.Text) End Sub Sub

calcularTriangulo() txtArea.Text = (Val(txtBase.Text) *

Val(txtAltura.Text) / 2) End Sub Private Sub cmdSeleccionar_Click()

opcion = InputBox("Seleccione una de estas:" + _ vbCrLf + "1.-

Rectangulo" + vbCrLf + _ "2.- Triangulo", "Introduzca una opcion")

End Sub PROCEDIMIENTOS Y FUNCIONES DE VB 2 Fundamentos de

Informática. EJEMPLOS PROGRAMAS Function Raiz (N As Double) As

Double If N < 0 Then Exit Function Else Raiz = Sqr(N) End Function

Cuadrada = Raiz(Num)

Page 68: Centro uiversitario salina cruz (1)

FUNCIONES

Desde el punto de vista matemático, una función es una operación

que toma uno

o varios operandos, y devuelve un resultado. Y desde el punto de

vista

algorítmico, es un subprograma que toma uno o varios parámetros

como entrada

y devuelve a la salida un único resultado.

Pascal: En las funciones se puede devolver más de un único resultado

mediante

parámetros.

C: Se devuelve todo por parámetros.

Este único resultado irá asociado al nombre de la función. Hay dos

tipos de

funciones:

Internas: Son las que vienen definidas por defecto en el lenguaje.

Externas: Las define el usuario y les da un nombre o identificador.

Para llamar a una función se da su nombre, y entre paréntesis van los

argumentos o parámetros que se quieren pasar.

Declaración de una función:

Page 69: Centro uiversitario salina cruz (1)

La estructura de una función es semejante a la de cualquier

subprograma. Tendrá

una cabecera (con el nombre y los parámetros) y un cuerpo (con la

declaración

de los parámetros de la función y las instrucciones).

Sintaxis:

Función &lt;nombre_funcion&gt; (n_parametro: tipo, n_parametro:

tipo): tipo función

Var &lt;variables locales función&gt;

&lt;acciones&gt;

retorno &lt;valor&gt;

fin &lt;nombre_funcion&gt;

La lista de parámetros es la información que se le tiene que pasar a la

función.

Los parámetros luego dentro de la función los podemos utilizar igual

que si

fueran variables locales definidas en la función y para cada parámetro

hay que

poner su nombre y tipo.

El nombre de la función lo da al usuario y tiene que ser significativo.

En las variables locales se declaran las variables que se pueden usar

dentro de

la función.

Page 70: Centro uiversitario salina cruz (1)

Entre las acciones tendrá que existir entre ellas una del tipo retorno

&lt;valor&gt;.

Esta sentencia pondrá fin a la ejecución de la función y devolverá el

valor de la

función, es decir, como valor asociado al nombre de mismo tipo que

el tipo de

datos que devuelve a la función, este valor por tanto tiene que ser del

mismo tipo

que el tipo de datos que devuelve la función, que es el que habremos

indicado al

declarar la función en la parte final de la cabecera.

No se permiten funciones que no devuelvan nada.

Los parámetros que aparecen en la declaración de la función se

denominan

parámetros formales, y los parámetros que yo utilizo cuando llamo a

la función se

denominan parámetros actuales o reales.

Invocación de una función:

Para llamar a una función se pone el nombre de la función, y entre

paréntesis los

parámetros reales, que podrán ser variables, expresiones,

constantes,... pero

siempre del mismo tipo que los parámetros normales asociados

&lt;nombre_funcion&gt; (parámetros reales)

Page 71: Centro uiversitario salina cruz (1)

La función puede ser llamada desde el programa principal o desde

cualquier otro

subprograma.

Para llamar a la función desde cualquier parte, implica el

conocimiento previo de

que ésta función existe.

A través de los parámetros reales de la llamada se proporciona a la

función la

información que necesita, para ello, al hacer la llamada lo que se

produce es una

asociación automática entre parámetros reales y parámetros

formales. Esta

asociación se realiza según el orden de la aparición y de izquierda y

derecha.

Si el parámetro formal y real no es del mismo tipo, en Pascal se

produce un

error, y en C se transforman los tipos si es posible.

La llamada a una función, siempre va a formar parte de una

expresión, de

cualquier expresión en la que en el punto en la que se llama a la

función, pudiera

ir colocado cualquier valor del tipo de datos que devuelve la función,

esto se

debe a que el valor que devuelve una función está asociado a su

nombre.

Page 72: Centro uiversitario salina cruz (1)

Pasos para hacer la llamada a una función:

Al hacer la llamada y ceder el control a la función, se asocia (asigna

el valor)

de cada parámetro real a cada parámetro formal asociado, siempre

por orden de

Page 73: Centro uiversitario salina cruz (1)

ESTRUCTURA DE LOS DATOS INTERNOS

Operaciones Con Arreglos

Las operaciones en arreglos pueden clasificarse de la siguiente forma:

• Lectura

• Escritura • Asignación • Actualización • Ordenación • Búsqueda

a) LECTURA Este proceso consiste en leer un dato de un arreglo y

asignar un

Valor a cada uno de sus componentes. La lectura se realiza de la

siguiente

Manera: para i desde 1 hasta N haz x&lt;-- arreglo[i]

b) ESCRITURA Consiste en asignarle un valor a cada elemento del

arreglo. La

Escritura se realiza de la siguiente manera: para i desde 1 hasta N haz

Arreglo[i]&lt;-- x

c) ASIGNACIÓN No es posible asignar directamente un valor a todo el

arreglo,

Por lo que se realiza de la manera siguiente: para i desde 1 hasta N

haz

Arreglo[i]&lt;-- algún_valor

d) ACTUALIZACIÓN Dentro de esta operación se encuentran las

operaciones de

Eliminar, insertar y modificar datos. Para realizar este tipo de

operaciones se

Debe tomar en cuenta si el arreglo está o no ordenado.

Page 74: Centro uiversitario salina cruz (1)

vectores

Page 75: Centro uiversitario salina cruz (1)

MATRICES

Page 76: Centro uiversitario salina cruz (1)

BUSQUEDA

Un algoritmo de búsqueda 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.

La variante más simple del problema es la búsqueda de un número en un vector.

Búsqueda dicotómica

Elementos necesarios en una búsqueda :

log2(n) donde n = elementos de la búsqueda

Ejemplo: log2(1.000.000) ≈ 20

Búsqueda secuencial

Se utiliza cuando el vector no está ordenado o no puede ser ordenado previamente. Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del vector hasta encontrarlo, o hasta que se llegue al final. La existencia se puede asegurar cuando el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del vector. A continuación se muestra el pseudocódigo del algoritmo:[cita requerida]

Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive. Puede representarse así: vec[0...tam) o vec[0...tam-1]. dato: elemento que se quiere buscar. Variables

Page 77: Centro uiversitario salina cruz (1)

pos: posición actual en el vector

pos = 0 while pos < tam: if vec[pos] == dato: Retorne verdadero y/o pos, else: pos = pos + 1 Fin (while) Retorne falso,

C

int busquedaSimple(int vector[n], int n, int dato) { int i; for(i=0; i<n; i++){ if(dato==vector[i]) { return i; break;

} } return -1; }

Búsqueda dicotómica (binaria)

Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado. Este

Page 78: Centro uiversitario salina cruz (1)

algoritmo reduce el tiempo de búsqueda considerablemente, ya que

disminuye exponencialmente el número de iteraciones necesarias.

Está altamente recomendado para buscar en arrays de gran tamaño. Por ejemplo, en uno conteniendo 50.000.000 elementos, realiza como máximo 26 comparaciones (en el peor de los casos).

Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de éste es mayor que el del elemento buscado se repite el procedimiento en la parte del array que va desde el inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en todo el array.

A continuación se presenta el pseudocódigo del algoritmo, tomando como elemento inicial el elemento central del array.

Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamaño del vector. Los subíndices válidos van desde 0 hasta tam-1 inclusive. dato: elemento que se quiere buscar. Variables centro: subíndice central del intervalo

inf: límite inferior del intervalo sup: límite superior del intervalo inf = 0 sup = tam-1

Page 79: Centro uiversitario salina cruz (1)

Mientras inf <= sup:

centro = ((sup - inf) / 2) + inf // División entera: se trunca la fracción Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario: Si dato < vec[centro] entonces: sup = centro - 1 En caso contrario: inf = centro + 1 Fin (Mientras) Devolver Falso

C

int busquedaBinaria(int vector[], int n, int dato) { int centro,inf=0,sup=n-1; while(inf<=sup){ centro=((sup-inf)/2)+inf; if(vector[centro]==dato) return centro; else if(dato < vector[centro]) sup=centro-1; else inf=centro+1; }

return -1; }

Implementación recursiva en C++ [cita requerida]

C++

#include <vector> bool busqueda_dicotomica(const vector<int> &v, int principio, int fin, int &x){ bool res;

Page 80: Centro uiversitario salina cruz (1)

if(principio <= fin){

int m = ((fin - principio)/2) + principio; if(x < v[m]) res = busqueda_dicotomica(v, principio, m-1, x); else if(x > v[m]) res = busqueda_dicotomica(v, m+1, fin, x); else res = true; }else res = false; return res; } /*{Post: Si se encuentra devuelve true, sino false}*/

Implementación recursiva en Python

Python

def busquedaBinaria (numeros, inicio, fin, elemento): if (inicio == fin): return numeros [inicio] == elemento centro = ((fin - inicio) // 2) + inicio if (elemento < numeros [centro]): return busquedaBinaria (numeros, inicio, centro, elemento)

elif (elemento > numeros [centro]): return busquedaBinaria (numeros, centro + 1, fin, elemento) else: return True def busqueda (numeros, elemento): if (numeros == None) or (numeros == []): return False

Page 81: Centro uiversitario salina cruz (1)

else: return busquedaBinaria (numeros, 0, len (numeros) - 1,

elemento)

Implementación recursiva en Python3

Python

def bin(a,x,low,hi): ans = -1 if low==hi: ans = -1 else: mid = (low+((hi-low)//2)) if x < a[mid]: ans = bin(a,x,low,mid) elif x > a[mid]: ans = bin(a,x,mid+1,hi) else: ans = mid return ans # Así se hace el llamado: print(binseacrh(Lista,a_buscar,0,len(Lista))) # Retorna el indice que coincide con 'numero a buscar', sino está retorna -1 # Tiempo: (log n)

Implementación iterativa en Python3

Python

def bin(a, c): ans = -1 if a[0] >= c: ans = -1 else: low, hi = 0, len(a)

Page 82: Centro uiversitario salina cruz (1)

while low+1 != hi:

mid = low + ((hi-low)//2) if a[mid] < c: low = mid else: hi = mid ans = low return ans # Así se hace el llamado: print(bin(lista(), numero_a_buscar) ) # Retorna el indice que coincide con 'numero a buscar', sino está retorna -1 # Tiempo: (log n)

SELECCIÓN

El ordenamiento por selección (Selection Sort en inglés) es

un algoritmo de ordenamiento que requiere O operaciones para

ordenar una lista de n elementos.

Page 83: Centro uiversitario salina cruz (1)
Page 84: Centro uiversitario salina cruz (1)

REEMPLAZO

En el ámbito de la programación informática, la acción de

reemplazar valores se da constantemente, en diferentes casos. En

primer lugar, cabe mencionar que para ejecutar software (lo que

incluye una aplicación, un videojuego o un sistema operativo, según

el punto

de vista)

los

procesadores necesitan almacenarlo en memoria principal; allí, le

asignan aleatoriamente espacios para cada uno de sus

componentes, siendo las variables los más pequeños.

Page 85: Centro uiversitario salina cruz (1)

MATRICES

Page 86: Centro uiversitario salina cruz (1)

POLIEDROS

ARRAYS MULTIDIFUNCIONALES

Page 87: Centro uiversitario salina cruz (1)

ÁRBOLES BALANCEADOS

Habíamos visto que se puede demostrar por inducción que en un árbol completo el número de nodos totales es

(2 ** h+1) –1. Esto nos indica que las cosas que se hacen en árboles son de orden log n pero sólo

en el caso en

que el árbol esté lleno. En el peor de los casos las cosas pueden ser lineales O(n). ¿Cómo poder garantizar,

entonces que se mantenga un balanceo? Cada vez que debido a una inserción o eliminación el árbol se

desbalancee, reubicar los nodos de modo que, manteniendo el invariante de un árbol de

búsqueda binaria,

se trate de mantener la altura del árbol. Ej:

Page 88: Centro uiversitario salina cruz (1)

El primer tipo de árboles balanceados fue el AVL (Adelson Velskii Landis). No son frecuentemente

implementados, ya que hay otros mejores, pero las ideas que hay detrás de ellos se ven en los

demás tipos de árboles balanceados. Se trata de incluir otra condición más en el invariante de

modo de asegurar que la búsqueda sea O(log n): LO más simple sería requerir que para un árbol

AVL la altura de su subárbol derecho sea igual a la de su subárbil izquierdo. Recordemos que los

árboles se definen recursivanmete, por lo tanto esto se debería cumplir para cada nodo. Esto es

sin embargo muy restrictivo ya que implicaría que todo árbol AVL debería ser completo además. La definición de árboles AVL es entonces algo más relajada:

Def: Un árbol AVL es un árbol binario con la propiedad adicional que para cualquier nodo

En el árbol la altura de su subárbol izquierdo y de su subárbol derecho difieren a lo más en

1.

Esta condición asegura que el árbol sólo tendrá altura logarítmica. Para probar esto necesitamos

mostrar que un árbol de altura H tiene por lo menos C**H nodos para alguna constante H>1. En

otras palabras, si el mínimo número de nodos en un árbol es exponencial a su altura, entonces la

máxima altura de un árbol con N elementos es dada por Log en base C de N. Esto se puede probar con los números de Fibonacci:

Sea S(H) un árbol AVL con altura H y con el mínimo de elementos para esa altura. Entonces S(0) = 1

y S(1) = 2. Ahora, por la condición de un árbol AVL sabemos que un árbol AVL mínimo de altura H

tiene como hijos uno mínimo de altura H-1 y otro mínimo de altura H-2, ya que el desbalanceo

Page 89: Centro uiversitario salina cruz (1)

puede ser a lo más de 1. Del dibujo podemos ver que la cantidad de nodos de este árbol es S(H) =

S(H-1) + S(H-2) + 1. Ahora los números de Fibonacci eran F(N) = F(N-1)+F(N-2) con F(0) = 1 y F(1) =

1. Corrigiendo: S(H) = F(H+3). Ahora, se sabe que el fibonacci de un número i es alrededor de

(K**i)/sqrt(5) con K alrededor de 1.618 (o sea > 1). Consecuentemente un árbol AVL de altura H

tiene a lo menos (gruesamente estimando) K**(H+3)/sqrt(5), por lo cual la altura para un árbol

AVL mínimo es logarítmica con respecto al número de nodos. Esto implica que las operaciones sobre un árbol AVL están acotadas logaritmicamente.

ÁRBOL AVL

Un árbol AVL es un tipo especial de árbol binario ideado por los matemáticos rusos Adelson-

Velskii y Landis. Fue el primer árbol de búsqueda binario auto-balanceable que se ideó.

ÁRBOLES-B

La idea tras los árboles-B es que los nodos internos deben tener un número variable de nodos

hijo dentro de un rango predefinido. Cuando se inserta o se elimina un dato de la estructura, la

cantidad de nodos hijo varía dentro de un nodo. Para que siga manteniéndose el número de

nodos dentro del rango predefinido, los nodos internos se juntan o se parten. Dado que se

permite un rango variable de nodos hijo, los árboles-B no necesitan rebalancearse tan

frecuentemente como los árboles binarios de búsqueda auto-balanceables. Pero, por otro

lado, pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados.

Los límites (uno superior y otro inferior) en el número de nodos hijo son definidos para cada

implementación en particular. Por ejemplo, en un árbol-B 2-3 (A menudo simplemente

llamado árbol 2-3 ), nodo sólo puede tener 2 ó 3 nodos hijo.

Un árbol-B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren

a la misma altura.

Los árboles B tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo de

acceso a los nodos excede al tiempo de acceso entre nodos. Este caso se da usualmente

cuando los nodos se encuentran en dispositivos de almacenamiento secundario como

los discos rígidos. Al maximizar el número de nodos hijo de cada nodo interno, la altura del

árbol decrece, las operaciones para balancearlo se reducen, y aumenta la eficiencia.

Usualmente este valor se coloca de forma tal que cada nodo ocupe unbloque de disco, o un

tamaño análogo en el dispositivo. Mientras que los árboles B 2-3 pueden ser útiles en la

memoria principal, y además más fáciles de explicar, si el tamaño de los nodos se ajustan

para caber en un bloque de disco, el resultado puede ser un árbol B 129-513.

Page 90: Centro uiversitario salina cruz (1)

Los creadores del árbol B, Rudolf Bayer y Ed McCreight, no han explicado el significado de la

letra B de su nombre. Se cree que la B es de balanceado, dado que todos los nodos hoja se

mantienen al mismo nivel en el árbol. La B también puede referirse a Bayer, o a Boeing,

porque sus creadores trabajaban en los Boeing Scientific Research Labspor ese entonces.

Dispersión al Azar (Hashing)

posted by Rafael Almanza at 12:07 PM | 0 comments

OBJETIVO:

Permitir agilizar la localización de un dato en un archivo determinado mediante

un método de búsqueda.

La búsqueda es el proceso de localizar un registro (elemento) con un valor de

llave particular. Esta termina exitosamente cuando se localiza el registro que

contenga la llave buscada, o termina sin éxito, cuando se determina que no

aparece ningún registro con esa llave.

posted by Rafael Almanza at 12:06 PM | 0 comments

RESUMEN:

Existen básicamente tres alternativas para implementar una búsqueda o

acceso directo:

· Archivo clasificado por búsqueda Binaria.

· Ajuste de llave a esqueleto.

· Transformación de llaves (Hashing).

Esta ultima es la que analizaremos más a detalle.

Hasta ahora las técnicas de localización de registros vistas, emplean un

proceso de búsqueda que implica cierto tiempo y esfuerzo. El siguiente método

nos permite encontrar directamente el registro buscado.

La idea básica de este método consiste en aplicar una función que traduce un

conjunto de posibles valores llave en un rango de direcciones relativas. Un

problema potencial encontrado en este proceso, es que tal función no puede

ser uno a uno; las direcciones calculadas pueden no ser todas únicas, cuando

R(k1 )= R(k2)

Page 91: Centro uiversitario salina cruz (1)

Ventaja:

Se pueden usar los valores naturales de la llave, puesto que se traducen

internamente a

direcciones fáciles de localizar

Se logra independencia lógica y física, debido a que los valores de las llaves

son independientes

del espacio de direcciones

No se requiere almacenamiento adicional para los índices.

Desventajas:

No pueden usarse registros de longitud variable

El archivo no esta clasificado

No permite llaves repetidas

Solo permite acceso por una sola llave

LAS FUNCIONES HASH MAS COMUNES SON:

Residuo de la división.

La idea de este método es la de dividir el valor de la llave entre un numero

apropiado, y después utilizar el residuo de la división como dirección relativa

para el registro (dirección = llave módulo divisor).

Medio del cuadrado.

En esta técnica, la llave es elevada al cuadrado, después algunos dígitos

específicos se extraen de la mitad del resultado para constituir la dirección

relativa. Si se desea una dirección de n dígitos, entonces los dígitos se truncan

en ambos extremos de la llave elevada al cuadrado, tomando n dígitos

intermedios. Las mismas posiciones de n dígitos deben extraerse para cada

llave.

Page 92: Centro uiversitario salina cruz (1)

ALGORITMO

En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas,

un algoritmo (del griego y latín, dixit algorithmus y éste a su vez del matemático persa Al-

Juarismi1 ) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y

finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a

quien deba realizar dicha actividad.2 Dados un estado inicial y una entrada, siguiendo los

pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el

objeto de estudio de la algoritmia.1

En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos

ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las

instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos

enmatemática son el algoritmo de multiplicación, para calcular el producto, el algoritmo de

la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener

el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver

un sistema de ecuaciones lineales.

Pliegue.

En esta técnica el valor de la llave es particionada en varias partes, cada una

de las cuales (excepto la ultima) tiene el mismo numero de dígitos que tiene la

dirección relativa objetivo. Estas particiones son después plegadas una sobre

otra y sumadas. El resultado, es la dirección relativa. Igual que para el método

del medio del cuadrado, el tamaño del espacio de direcciones relativas es una

potencia de 10.

Page 93: Centro uiversitario salina cruz (1)
Page 94: Centro uiversitario salina cruz (1)
Page 95: Centro uiversitario salina cruz (1)

Manejo del flujo de efectivo Gilberto Ortiz Vargas

Finanzas 11.06.2002 2 minutos de lectura

administración financiera

En toda empresa cuando está elaborando un reporte de las ventas realizadas, así como de los gastos que se han generado, se obtiene un diferencial que permite

conocer la utilidad obtenida y además se realiza una proyección a futuro, considerando las experiencias de periodos anteriores, logrando en esta forma prever en qué momento es posible realizar nuevos gastos o inversiones, si así lo

requiere nuestra empresa.

Lo anterior es un estado proyectado de las entradas y salidas de

efectivo en un periodo determinado o también conocido como

flujo de efectivo y se realiza con el fin de conocer la cantidad de

efectivo que requiere el negocio para operar durante un periodo

determinado, como puede ser una semana, mes, trimestre o año.

Un problema frecuente en las micro y pequeñas empresas es la

falta de liquidez para cubrir necesidades inmediatas, por lo que se

recurre frecuentemente a particulares con el fin de solicitar

préstamos a corto plazo y de muy alto costo. Una forma muy

sencilla de planear y controlar a corto y mediano plazo las

necesidades de recursos, consiste en calcular el flujo de efectivo

de cualquier negocio

Page 96: Centro uiversitario salina cruz (1)

Corrector ortográfico

Verif icar la ortografía

Este es un corrector ortográfico ideal para escribir correctamente en español, ya que cuenta con el léxico más completo de este idioma formado por más de cinco millones de palabras.

Incluye voces propias de todos los países latinoamericanos y de España además de términos

técnicos de diferentes áreas como agricultura, biología y comercio, entre otras. Reconoce todas las formas conjugadas así como diminutivos, aumentativos, sufijos y prefijos más utilizados.

Vocabulario que contiene términos locales y técnicos, una vasta capacidad morfológica

y más de 5 000 000 de palabras. Motor de sugerencias construido especialmente para la fonética española: suministra

excelentes sugerencias para errores tipográficos y ortográficos.

Listas de sugerencias cortas, precisas e inteligentes para los errores ortográficos de los

usuarios.

Gracias a su amplio vocabulario no se detiene inútilmente en palabras poco usuales,

técnicas o localismos que están bien escritos; por lo tanto, la corrección es rápida y eficiente.

Atrapa errores fáciles de cometer, algunos de los que muchas veces ni siquiera

generan dudas.

Corrige números romanos.

Nota: Recuerde que si en su teclado no están disponibles directamente la tilde y la letra ñ, usted puede obtenerlas mediante las siguientes combinaciones de teclas:

á -> Alt-160

é -> Alt-130 í -> Alt-161

ó -> Alt-162 ú -> Alt-163

ñ -> Alt-164

Page 97: Centro uiversitario salina cruz (1)

BIOGRAFIA

Rubí Alejandra Hernández trinidad

10/julio/2016

BIOGRAFIA