CONTENIDO DE LA LECCIÓN 18

CONTENIDO DE LA LECCIÓN 18 CONTENIDO DE LA LECCIÓN 18

azul2.bnct.ipn.mx
from azul2.bnct.ipn.mx More from this publisher
06.05.2013 Views

MIGUEL Á. TOLEDO MARTÍNEZ PLANEACIÓN DE LA SOLUCIÓN ¿Qué quiere decir exactamente búsqueda secuencial? Rastreo en el arreglo en forma secuencial, de un elemento al siguiente, empezando en la primera posición del arreglo y deteniéndose al encontrar el elemento o al llegar al final del arreglo. De esta manera, el algoritmo deberá verificar el elemento almacenado en la primera posición del arreglo, después en la segunda posición del arreglo, enseguida en la tercera y así sucesivamente, hasta que encuentre el elemento o hasta que se agoten los elementos del arreglo. Desde luego, ésta es una tarea repetitiva de verificación de un elemento en el arreglo, luego moverse al siguiente elemento y verificar otra vez y así sucesivamente. Considere el siguiente algoritmo que emplea un ciclo while para realizar la operación de verificación repetitiva: Algoritmo busquedaSec() busquedaSec() INICIO encuentra = falso. indice = primer índice del arreglo. while(elemento no se Encuentra) AND (Indice

MIGUEL Á. TOLEDO MARTÍNEZ // Busca en el arreglo hasta encontrar o alcanzar el final del arreglo while((!encuentra) && (i < MAX)) { if (a[i] == elemento) // Verifica el elemento del arreglo encuentra = Verdadero; // Si es igual, establece else // encuentra a Verdadero ++i; } // Fin del while // Si se encuentra el elemento, regresa la posición del elemento en el arreglo // Si no regresa –1 if(encuentra) return i; else return –1; } // Fin de busquedaSec() No debe haber sorpresas en este código. En la parte superior de la función, verá el encabezado que es idéntico a la interfaz de la función desarrollada anteriormente. Después verá una clase de datos enumerada creada para definir Falso y Verdadero. Recuerde que los valores predeterminados para elementos de datos enumerados son enteros, empezando con 0. De esta manera, Falso se define con el valor 0 y Verdadero se define con el de 1. Esto permite la utilización de los identificadores Falso y Verdadero dentro del programa para representar los valores enteros 0 y 1 respectivamente. Además, las verificaciones booleanas se pueden hacer contra estos valores, porque C++ interpreta un 0 como un Falso lógico y 1 como un Verdadero lógico. La variable encuentra se define como un objeto de clases de datos booleanos enumerados y se establece a Falso. Utilizaremos la variable i como variable índice del arreglo. Esta variable se define como un entero y establece a 0 el primer índice del arreglo. Recuerde que los arreglos en C++ siempre empiezan con el índice 0. El ciclo while emplea el operador AND (&&) para verificar los valores de encuentra e i. El ciclo se repetirá hasta que se encuentre el elemento (encuentra) y el valor de i sea menor que el tamaño MAX del arreglo. Recuerde que cuando el tamaño del arreglo es MAX, el último índice del arreglo es MAX – 1. Por lo tanto, cuando i excede el índice máximo del arreglo, MAX – 1, el ciclo se rompe. Cuando el ciclo se rompe, el valor de encuentra se verifica. Si encuentra es Verdadero, se regresa el valor de i; si encuentra es Falso, el valor –1 se regresa para indicar que el elemento no se encontró en el arreglo. SOLUCIÓN DE PROBLEMAS EN ACCIÓN: Como ordenar un arreglo con iteración (Ordenación por inserción) PROBLEMA Ordenar un arreglo significa colocar los elementos del arreglo en orden ascendente o descendente desde el principio al final del arreglo. Hay muchos algoritmos comunes utilizados para ordenación. Hay clasificación por inserción, clasificación por burbuja, clasificación por selección, clasificación rápida, clasificación combinada y clasificación apilada, sólo por mencionar algunas. En un curso de estructura de datos, es muy probable que aprenda y analice todos estos algoritmos de ordenación. En este problema se desarrollará el algoritmo de clasificación por inserción y se codificará como una función en C++. Desarrolle una función que se pueda llamar para ordenar un arreglo de caracteres en orden ascendente utilizando el algoritmo clasificación por inserción. DEFINICIÓN DEL PROBLEMA De nuevo, codificaremos el algoritmo como una función C++, así la definición del problema se enfocará en la interfaz de la función, guiándonos a la función prototipo. Llamaremos a la función clasifPorInser() Piense que necesita clasifPorInser() para hacer un trabajo. Bueno, deberá recibir un arreglo de caracteres no clasificados y regresar el mismo arreglo como un arreglo clasificado, ¿correcto? ¿Necesita algo más? No, la función no requiere datos adicionales, porque lo único que se opera es el arreglo mismo. ARREGLOS, APUNTADORES Y ESTRUCTURAS – LECCIÓN 18 18-47

MIGUEL Á. TOLEDO MARTÍNEZ<br />

// Busca en el arreglo hasta encontrar o alcanzar el final del arreglo<br />

while((!encuentra) && (i < MAX))<br />

{<br />

if (a[i] == elemento) // Verifica el elemento del arreglo<br />

encuentra = Verdadero; // Si es igual, establece<br />

else // encuentra a Verdadero<br />

++i;<br />

} // Fin del while<br />

// Si se encuentra el elemento, regresa la posición del elemento en el arreglo<br />

// Si no regresa –1<br />

if(encuentra)<br />

return i;<br />

else<br />

return –1;<br />

} // Fin de busquedaSec()<br />

No debe haber sorpresas en este código. En la parte superior de la función, verá el encabezado que es<br />

idéntico a la interfaz de la función desarrollada anteriormente. Después verá una clase de datos enumerada<br />

creada para definir Falso y Verdadero. Recuerde que los valores predeterminados para elementos de datos<br />

enumerados son enteros, empezando con 0. De esta manera, Falso se define con el valor 0 y Verdadero se<br />

define con el de 1. Esto permite la utilización de los identificadores Falso y Verdadero dentro del programa<br />

para representar los valores enteros 0 y 1 respectivamente. Además, las verificaciones booleanas se pueden<br />

hacer contra estos valores, porque C++ interpreta un 0 como un Falso lógico y 1 como un Verdadero<br />

lógico.<br />

La variable encuentra se define como un objeto de clases de datos booleanos enumerados y se establece a<br />

Falso. Utilizaremos la variable i como variable índice del arreglo. Esta variable se define como un entero y<br />

establece a 0 el primer índice del arreglo. Recuerde que los arreglos en C++ siempre empiezan con el índice<br />

0. El ciclo while emplea el operador AND (&&) para verificar los valores de encuentra e i. El ciclo se<br />

repetirá hasta que se encuentre el elemento (encuentra) y el valor de i sea menor que el tamaño MAX del<br />

arreglo. Recuerde que cuando el tamaño del arreglo es MAX, el último índice del arreglo es MAX – 1. Por<br />

lo tanto, cuando i excede el índice máximo del arreglo, MAX – 1, el ciclo se rompe. Cuando el ciclo se<br />

rompe, el valor de encuentra se verifica. Si encuentra es Verdadero, se regresa el valor de i; si encuentra<br />

es Falso, el valor –1 se regresa para indicar que el elemento no se encontró en el arreglo.<br />

SOLUCIÓN <strong>DE</strong> PROBLEMAS EN ACCIÓN: Como ordenar un arreglo con iteración<br />

(Ordenación por inserción)<br />

PROBLEMA<br />

Ordenar un arreglo significa colocar los elementos del arreglo en orden ascendente o descendente desde el<br />

principio al final del arreglo. Hay muchos algoritmos comunes utilizados para ordenación. Hay<br />

clasificación por inserción, clasificación por burbuja, clasificación por selección, clasificación rápida,<br />

clasificación combinada y clasificación apilada, sólo por mencionar algunas. En un curso de estructura de<br />

datos, es muy probable que aprenda y analice todos estos algoritmos de ordenación. En este problema se<br />

desarrollará el algoritmo de clasificación por inserción y se codificará como una función en C++.<br />

Desarrolle una función que se pueda llamar para ordenar un arreglo de caracteres en orden ascendente<br />

utilizando el algoritmo clasificación por inserción.<br />

<strong>DE</strong>FINICIÓN <strong>DE</strong>L PROBLEMA<br />

De nuevo, codificaremos el algoritmo como una función C++, así la definición del problema se enfocará en<br />

la interfaz de la función, guiándonos a la función prototipo. Llamaremos a la función clasifPorInser()<br />

Piense que necesita clasifPorInser() para hacer un trabajo. Bueno, deberá recibir un arreglo de caracteres<br />

no clasificados y regresar el mismo arreglo como un arreglo clasificado, ¿correcto? ¿Necesita algo más?<br />

No, la función no requiere datos adicionales, porque lo único que se opera es el arreglo mismo.<br />

ARREGLOS, APUNTADORES Y ESTRUCTURAS – <strong>LECCIÓN</strong> <strong>18</strong> <strong>18</strong>-47

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!