CONTENIDO DE LA LECCIÓN 18
CONTENIDO DE LA LECCIÓN 18 CONTENIDO DE LA LECCIÓN 18
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
- Page 1 and 2: MIGUEL Á. TOLEDO MARTÍNEZ CONTENI
- Page 3 and 4: MIGUEL Á. TOLEDO MARTÍNEZ LECCIÓ
- Page 5 and 6: MIGUEL Á. TOLEDO MARTÍNEZ ELEMENT
- Page 7 and 8: MIGUEL Á. TOLEDO MARTÍNEZ Con las
- Page 9 and 10: MIGUEL Á. TOLEDO MARTÍNEZ del arr
- Page 11 and 12: MIGUEL Á. TOLEDO MARTÍNEZ // MUES
- Page 13 and 14: MIGUEL Á. TOLEDO MARTÍNEZ que exp
- Page 15 and 16: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 17 and 18: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 19 and 20: MIGUEL Á. TOLEDO MARTÍNEZ void ma
- Page 21 and 22: MIGUEL Á. TOLEDO MARTÍNEZ PASO DE
- Page 23 and 24: MIGUEL Á. TOLEDO MARTÍNEZ void pa
- Page 25 and 26: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 27 and 28: MIGUEL Á. TOLEDO MARTÍNEZ int bus
- Page 29 and 30: MIGUEL Á. TOLEDO MARTÍNEZ El cuer
- Page 31 and 32: MIGUEL Á. TOLEDO MARTÍNEZ /******
- Page 33 and 34: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 35 and 36: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 37 and 38: MIGUEL Á. TOLEDO MARTÍNEZ /* El s
- Page 39 and 40: MIGUEL Á. TOLEDO MARTÍNEZ escribi
- Page 41 and 42: MIGUEL Á. TOLEDO MARTÍNEZ /* El s
- Page 43 and 44: MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo
- Page 45: MIGUEL Á. TOLEDO MARTÍNEZ SOLUCI
- Page 49 and 50: MIGUEL Á. TOLEDO MARTÍNEZ Paso 1
- Page 51 and 52: MIGUEL Á. TOLEDO MARTÍNEZ { j = i
- Page 53 and 54: MIGUEL Á. TOLEDO MARTÍNEZ un tama
- Page 55 and 56: MIGUEL Á. TOLEDO MARTÍNEZ necesit
- Page 57 and 58: MIGUEL Á. TOLEDO MARTÍNEZ { for (
- Page 59 and 60: MIGUEL Á. TOLEDO MARTÍNEZ // Comp
- Page 61 and 62: MIGUEL Á. TOLEDO MARTÍNEZ INICIAC
- Page 63 and 64: MIGUEL Á. TOLEDO MARTÍNEZ Esta ve
- Page 65 and 66: MIGUEL Á. TOLEDO MARTÍNEZ • Los
- Page 67 and 68: MIGUEL Á. TOLEDO MARTÍNEZ Es posi
- Page 69 and 70: MIGUEL Á. TOLEDO MARTÍNEZ p[100];
- Page 71 and 72: MIGUEL Á. TOLEDO MARTÍNEZ a) Cree
- Page 73 and 74: MIGUEL Á. TOLEDO MARTÍNEZ d) ¿cu
- Page 75 and 76: MIGUEL Á. TOLEDO MARTÍNEZ medio d
- Page 77 and 78: MIGUEL Á. TOLEDO MARTÍNEZ EXAMEN
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