0
<ul><li>Gabriela Alemán García Daniela Aguilar Guerra Salomon Karr Hector Tinajero </li></ul>
<ul><li>En la verificación de palíndromos usando la iteración tenemos la opción de verificar mas de un palíndromo. </li></...
<ul><li>En la verificación de palíndromos. La relación del tamaño del problema y su tiempo de ejecución es polinómica por ...
<ul><li>La declaración f(x)=O(g(x)) donde  se relaciona el tiempo de ejecución con el espacio de memoria utilizado, de all...
<ul><li>#include <stdio.h>  //incluimos librerias </li></ul><ul><li>#include <string.h> </li></ul><ul><li>char inverso(cha...
<ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>#include <string.h> </li></ul><ul><li> ...
<ul><li>ITERATIVO </li></ul>Palabra “abba” int i = 0, j = 0;  //  Se declaran las variables &quot;i&quot; y &quot;j&quot; ...
<ul><li>RECURSIVO </li></ul>‘ ANITA LAVA LA TINA’ Verificar si la palabra ( anita lava la tina ) es palíndromo //el progra...
<ul><li>RECURSIVIDAD </li></ul><ul><li>Se debe usar cuando realmente se necesite y cuando el problema  no se puede resolve...
<ul><li>VENTAJAS </li></ul><ul><li>DESVENTAJAS </li></ul><ul><li>Soluciones simples y claras. </li></ul><ul><li>Eficientes...
<ul><li>VENTAJAS </li></ul><ul><li>DESVENTAJAS </li></ul><ul><li>La programación es simple. </li></ul><ul><li>Es fácilment...
<ul><li>Nosotros  como equipo concluimos en que antes buscar una solución para cierto problema, primero se tiene que anali...
<ul><li>www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf </li></ul><ul><li>Fundamentos de la programación. Joy...
Upcoming SlideShare
Loading in...5
×

Palindromos

11,365

Published on

Published in: Education, Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
11,365
On Slideshare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
80
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Palindromos"

  1. 1. <ul><li>Gabriela Alemán García Daniela Aguilar Guerra Salomon Karr Hector Tinajero </li></ul>
  2. 2. <ul><li>En la verificación de palíndromos usando la iteración tenemos la opción de verificar mas de un palíndromo. </li></ul><ul><li>En cambio con la recursión se llama así misma la función para leer el primer texto y compararlo con su lectura al revés y así define si es o no un palíndromo. </li></ul><ul><li>Los primeros palíndromos se le atribuyen al filosofo griego Sócrates (III a.c). </li></ul>
  3. 3. <ul><li>En la verificación de palíndromos. La relación del tamaño del problema y su tiempo de ejecución es polinómica por tal motivo nuestro problema es del tipo P, la maquina determinista lo puede resolver en tiempo real y razonable. </li></ul><ul><li>La clase de complejidad P es el conjunto de los problemas de decisión que pueden ser resueltos en una máquina determinista en tiempo poli nómico, lo que corresponde intuitivamente a problemas que pueden ser resueltos aún en el peor de sus casos. </li></ul><ul><li>Existe una solución en tiempo P para todos los problemas de NP-completo, SOLO si se llega a encontrar una solución en tiempo P para algún miembro del conjunto (cualquiera de los problemas de Np-Hard) </li></ul>
  4. 4. <ul><li>La declaración f(x)=O(g(x)) donde se relaciona el tiempo de ejecución con el espacio de memoria utilizado, de allí se le dan los valores en segundos, pero como se extiende, tendemos a utilizar la función logarítmica para determinar el comportamiento congresito al tiempo y espacio en la solución de nuestro problema. </li></ul>
  5. 5. <ul><li>#include <stdio.h> //incluimos librerias </li></ul><ul><li>#include <string.h> </li></ul><ul><li>char inverso(char *arreglo); //declaramos funcion que va a realizar la inversa </li></ul><ul><li>int main() { //iniciamos funcion principal </li></ul><ul><li>int opcion; </li></ul><ul><li>char arreglo[255]; //declaramos el arreglo de 255 caracteres, el arreglo es una cadena de caracteres. </li></ul><ul><li>printf(&quot; PROGRAMA VERIFICADOR DE PALINDROMOS &quot;); </li></ul><ul><li>do{ </li></ul><ul><li>printf(&quot;Ingresa el texto que deseas verificar &quot;); //imprime mensaje al usuario </li></ul><ul><li>gets(arreglo); //utilizamos funcion gets para que pueda leer toda la cadena </li></ul><ul><li>inverso(arreglo); //manda llamar a la funcion del inverso y se lleva lo que escribimos en arreglo </li></ul><ul><li>do{ </li></ul><ul><li>printf(&quot; Desea verificar otro texto 1.-Si 2.-No &quot;); </li></ul><ul><li> scanf(&quot;%d&quot;,opcion); </li></ul><ul><li> }while(opcion<1 || opcion>2); </li></ul><ul><li> }while(opcion==1); </li></ul><ul><li> return 0; </li></ul><ul><li> } </li></ul><ul><li>char inverso(char *arreglo) { // inicia funcion inverso </li></ul><ul><li>int conta, longitud; //declaramos contadores y la variable que tendra el numero de caracteres </li></ul><ul><li> longitud=strlen(arreglo); //ulilizamos la funcion strlen para saber la longitud de la cadena </li></ul><ul><li> conta=longitud; //contador que va a hacer igual a longitud de la cadena </li></ul><ul><li> while(conta >= 0){ //mientras contador sea mayor o igual que 0 </li></ul><ul><li> printf(&quot;%c&quot;, arreglo[conta]); //imprima el caracter del ultimo al primero </li></ul><ul><li> conta--; //va a ir en decremento </li></ul><ul><li> } </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>INICIO Texto1 Inverso Texto1 Texto 2 Texto 1 = Texto 2 Es palíndromo No es palíndromo Analizar otro texto? FIN
  6. 6. <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>#include <string.h> </li></ul><ul><li>  int palindromo(char * principio, char * final){ </li></ul><ul><li>  if ((final - principio) < 2) </li></ul><ul><li>return 1; </li></ul><ul><li>else </li></ul><ul><li>if( (*principio) != (*final) ) </li></ul><ul><li>return 0; </li></ul><ul><li>else </li></ul><ul><li>return palindromo(++principio, --final); </li></ul><ul><li>} </li></ul><ul><li>main() </li></ul><ul><li>{ </li></ul><ul><li>char cadena[20]; </li></ul><ul><li>char * final; </li></ul><ul><li>int cuenta; </li></ul><ul><li>  </li></ul><ul><li>system(&quot;cls&quot;); </li></ul><ul><li>  </li></ul><ul><li>printf(&quot;¿Cual es tu Cadena de caracteres? &quot;); </li></ul><ul><li>gets(cadena); </li></ul><ul><li>  </li></ul><ul><li>final=cadena + strlen(cadena) - 1; </li></ul><ul><li>  </li></ul><ul><li>if (palindromo(cadena, final)) </li></ul><ul><li>printf(&quot;Es palindroma &quot;); </li></ul><ul><li>else </li></ul><ul><li>printf(&quot;No es palindroma &quot;); </li></ul><ul><li>  </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>printf (&quot;Fin de la ejecucion. &quot;); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  7. 7. <ul><li>ITERATIVO </li></ul>Palabra “abba” int i = 0, j = 0; // Se declaran las variables &quot;i&quot; y &quot;j&quot; con valor de 0 char cadena[50], cadena_inversa[50]; // Se declaran las variables &quot;cadena&quot; y &quot;cadena_inversa&quot; con una dimension de 50 espacios gets(cadena); // Se obtiene una palabra por parte del usuario // Mientras el valor de cadena no sea igual a 0 se sumará un valor a la variable &quot;i&quot;, el valor &quot;0&quot; es devuelto cuando se llega // a una posición de la variable no declarada, pues esta es una forma de saber el número de carácteres de una variable sin // necesidad de utilizar la libreria string.h ni la función &quot;strlen()&quot; while(cadena[i] != 0) {i = i + 1;} i = i - 1; // Se resta un valor a la variable i, pues con el método anterior queda con 1 valor más del número de carácteres // Mientras la variable &quot;i&quot; no sea igual a 0 (El valor tiene que ser positivo por el bucle anterior) se estará asignando un char // a la variable &quot;cadena_inversa&quot;, un ejemplo, tomamos la palabra &quot;abba&quot;, i = 4 y j = 0 al principio, entonces se asigna el char // de la posicion 4 de &quot;cadena&quot; a &quot;cadena_inversa&quot;, seguidamente se suma un valor a &quot;j&quot; y se resta un valor a &quot;i&quot;, con lo que // queda j = 1 e i = 3, con este método se estan copiando los carácteres de &quot;cadena&quot; a &quot;cadena_inversa&quot; de manera &quot;inversa&quot; // el bucle se deja de ejecutar cuando i es igual a 0, osea cuando se han recorrido todos los carácteres de la variable &quot;cadena&quot; while(i != 0) {cadena_inversa[j] = cadena[i]; j = j + 1; i = i - 1;} // Se asigna el valor 0 a cadena_inversa en la posición &quot;j&quot; que viendo el ejemplo anterior quedaría en la posición 5, el valor // 0 se asigna solamente para definir el final de la cadena cadena_inversa[j] = 0; // Si el valor original de &quot;cadena&quot; es igual a &quot;cadena_inversa&quot; se imprime mensaje de &quot;Es palindromo&quot;, sino se imprime // el mensaje contrario if (*cadena == *cadena_inversa) {printf(&quot;Es palindromo &quot;);} else {printf(&quot;No es palindromo &quot;);}
  8. 8. <ul><li>RECURSIVO </li></ul>‘ ANITA LAVA LA TINA’ Verificar si la palabra ( anita lava la tina ) es palíndromo //el programa le pide el texto al usuario _anita lava la tina después el programa le da al usuario el texto invertido (al revés) * anit al aval atina _ //luego se hace la pregunta que si la salida del programa, es igual a la que el usuario le dio al principio If anita lava la tina = anit al aval atina printf(‘Es palíndromo’) else printf(‘No es palíndromo’) Fin
  9. 9. <ul><li>RECURSIVIDAD </li></ul><ul><li>Se debe usar cuando realmente se necesite y cuando el problema no se puede resolver fácilmente con la iteración. </li></ul><ul><li>  </li></ul><ul><li>Se usan cuando no se conoce un método para encontrar la solución de forma exacta. </li></ul><ul><li>Cuando el numero de iteraciones es poco. </li></ul><ul><li>ITERATIVIDAD </li></ul>
  10. 10. <ul><li>VENTAJAS </li></ul><ul><li>DESVENTAJAS </li></ul><ul><li>Soluciones simples y claras. </li></ul><ul><li>Eficientes </li></ul><ul><li>Soluciones a problemas complejos. </li></ul><ul><li>Sobrecarga relacionadas con las llamadas a los subalgoritmos, (una simple llamada puede generar un gran numero de llamadas recursivas). </li></ul><ul><li>La claridad no recompensa la sobrecarga. </li></ul>
  11. 11. <ul><li>VENTAJAS </li></ul><ul><li>DESVENTAJAS </li></ul><ul><li>La programación es simple. </li></ul><ul><li>Es fácilmente aplicable cuando los coeficientes son no lineales. </li></ul><ul><li>No se puede aplicar a cada sistema . </li></ul>
  12. 12. <ul><li>Nosotros como equipo concluimos en que antes buscar una solución para cierto problema, primero se tiene que analizar todas las posibles vías hacia esta solución, buscando la manera mas eficiente y descartando las que nos compliquen llegar exitosamente a nuestro destino. </li></ul>
  13. 13. <ul><li>www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf </li></ul><ul><li>Fundamentos de la programación. Joyanes Aguilar, Mc Graw Hill, 1988. </li></ul><ul><li>www.mty.itesm.mx/etie/deptos/m/ma95-843/.../l843-13.pdf </li></ul><ul><li>http://students.kennesaw.edu/~kjj6794/class/math3261/Iteration%20Methods.ppt </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×