Page 127

2 Estructuras de datos en C: vectores est´aticos y registros

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

?

/* Est´ an todas las palabras en el diccionario? */ for (i=0; i<palabras; i++) { encontrada = 0; for (j=0; j<DICCPALS; j++) { comparacion = strcmp(palabra[i], diccionario[j]) ; if ( comparacion == 0 ) { // Es palabra[i] igual que diccionario[j]? encontrada = 1; break; } else if ( comparacion < 0 ) // Es palabra[i] menor que diccionario[j]? break; } if (!encontrada) printf ("palabra no encontrada: %s\n", palabra[i]); } return 0;

49 50 51 52 53

?

54 55 56

?

57 58 59 60 61 62 63 64

}

(Recuerda declarar comparacion como variable de tipo entero.) El diccionario tiene 45378 palabras. En promedio efectuamos, pues, 22689 comparaciones por cada palabra de la frase. Mmmm. A´ un podemos hacerlo mejor. Si la lista est´a ordenada, podemos efectuar una b´ usqueda dicot´ omica. La b´ usqueda dicot´omica efect´ ua un n´ umero de comparaciones reducid´ısimo: ¡bastan 16 comparaciones para decidir si una palabra cualquiera est´a o no en el diccionario! corrector.c . . . 97

?

/* Est´ an todas las palabras en el diccionario? */ for (i=0; i<palabras; i++) { encontrada = 0; izquierda = 0; derecha = DICCPALS;

98 99 100 101 102 103

while (izquierda < derecha) { j = (izquierda + derecha) / 2; comparacion = strcmp(palabra[i], diccionario[j]); if (comparacion < 0) derecha = j; else if (comparacion > 0) izquierda = j+1; else { encontrada = 1; break; } }

104 105 106 107 108 109 110 111 112 113 114 115 116

if (!encontrada) printf ("palabra no encontrada: %s\n", palabra[i]);

117 118

}

119 120

return 0;

121 122

}

(Debes declarar derecha e izquierda como enteros.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 136 Escribe un programa C que lea un texto (de longitud menor que 1000) y obtenga un vector de cadenas en el que cada elemento es una palabra distinta del texto (con un m´aximo de 500 palabras). Muestra el contenido del vector por pantalla. · 137 Modifica el programa del ejercicio anterior para que el vector de palabras se muestre en pantalla ordenado alfab´eticamente. Deber´as utilizar el m´etodo de la burbuja para ordenar el vector. Introducci´ on a la Programaci´ on con C

121

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement