Gabriela Alemán García Daniela Aguilar Guerra Salomon Karr Hector Tinajero
En la verificacion de palindromos usando la iteración tenemos la opcion de verificar mas de un palindromo. En cambio con la recursión se llama asi misma la funcion para leer el primer texto y compararlo con su lectura  al reves y asi define si es o no un palindromo. Los primeros palindromos se le atribuyen al filosofo griego Socrates (III a.c).
En la verificación de palindromos. La relación del tamaño del problema y su tiempo de ejecución es polinomica por tal motivo nuestro problema es del tipo P,  la maquina determinista lo puede resolver en tiempo real y razonable. 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 polinómico, lo que corresponde intuitivamente a problemas que pueden ser resueltos aún en el peor de sus casos. Existe una solución en tiempo P para  todos  los problemas de NP-completo, SOLO si se llega a encontrar una solucion en tiempo P para algun miembro del conjunto (cualquiera de los problemas de Np-HArd)
La declaracion f(x)=O(g(x)) donde  se relaciona el tiempo de ejecucion con el espacio de memoria utilizado, de alli se le dan los valores en segundos, pero como se extiende, tendemos a utilizar la funcion logaritmica para determinar el comportamiento conresecto al tiempo y espacio en la solucion de nuestro problema.
#include <stdio.h>  //incluimos librerias #include <string.h> char inverso(char *arreglo);  //declaramos funcion que va a realizar la inversa int main() {  //iniciamos funcion principal int opcion; char arreglo[255]; //declaramos el arreglo de 255 caracteres, el arreglo es una cadena de caracteres. printf(&quot;\n\n\t\tPROGRAMA VERIFICADOR DE PALINDROMOS\n\n&quot;); do{ printf(&quot;Ingresa el texto que deseas verificar &quot;); //imprime mensaje al usuario gets(arreglo); //utilizamos funcion gets para que pueda leer toda la cadena inverso(arreglo); //manda llamar a la funcion del inverso y se lleva lo que escribimos en arreglo do{ printf(&quot;\t\n\nDesea verificar otro texto\n\t\n1.-Si\n2.-No\n&quot;);   scanf(&quot;%d&quot;,opcion);   }while(opcion<1 || opcion>2);   }while(opcion==1);   return 0;   } char inverso(char *arreglo) { // inicia funcion inverso int conta, longitud; //declaramos contadores y la variable que tendra el numero de caracteres   longitud=strlen(arreglo); //ulilizamos la funcion strlen para saber la longitud de la cadena   conta=longitud;  //contador que va a hacer igual a longitud de la cadena   while(conta >= 0){ //mientras contador sea mayor o igual que 0   printf(&quot;%c&quot;, arreglo[conta]); //imprima el caracter del ultimo al primero   conta--; //va a ir en decremento   } return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h>   int palindromo(char * principio, char * final){   if ((final - principio) < 2) return 1; else if( (*principio) != (*final) ) return 0; else return palindromo(++principio, --final); } main() { char cadena[20]; char * final; int cuenta;   system(&quot;cls&quot;);   printf(&quot;¿Cual es tu Cadena de caracteres? &quot;); gets(cadena);   final=cadena + strlen(cadena) - 1;   if (palindromo(cadena, final)) printf(&quot;Es palindroma \n&quot;); else printf(&quot;No es palindroma \n&quot;);   system(&quot;pause&quot;); printf (&quot;Fin de la ejecucion.\n&quot;); return 0; }
ITERATIVO RECURSIVO
RECURSIVIDAD ITERATIVIDAD Se debe usar cuando realmente se necesite y cuando el problema  no se puede resolver facilmente con la iteracion.   Se usan cuando no se conoce un metodo para encontrar la solucion  de forma exacta. Cuando el numero de iteraciones es poco.
VENTAJAS DESVENTAJAS Soluciones simples y claras. Eficientes Soluciones a problemas complejos. Sobrecarga relacionadas con las llamadas a los subalgoritmos, (una simple llamada puede generar un gran numero de llamadas recursivas). La claridad no recompensa la sobrecarga.
VENTAJAS DESVENTAJAS La programacion es simple. Es facilmente  aplicable cuando los coeficientes  son no lineales. No se puede aplicar  a cada sistema.
Nosotros  como equipo concluimos en que antes buscar una solucion para cierto problema, primero se tiene que analizar todas las posibles vias hacia esta solucion, buscando la manera mas eficiente y descartando las que nos compliquen llegar exitosamente a nuestro destino.
www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf Fundamentos de la programación. Joyanes Aguilar, Mc Graw Hill, 1988. www.mty.itesm.mx/etie/deptos/m/ma95-843/.../l843-13.pdf  http://students.kennesaw.edu/~kjj6794/class/math3261/Iteration%20Methods.ppt

PROY 3: VERIFICACION DE PALINDROMOS

  • 1.
    Gabriela Alemán GarcíaDaniela Aguilar Guerra Salomon Karr Hector Tinajero
  • 2.
    En la verificacionde palindromos usando la iteración tenemos la opcion de verificar mas de un palindromo. En cambio con la recursión se llama asi misma la funcion para leer el primer texto y compararlo con su lectura al reves y asi define si es o no un palindromo. Los primeros palindromos se le atribuyen al filosofo griego Socrates (III a.c).
  • 3.
    En la verificaciónde palindromos. La relación del tamaño del problema y su tiempo de ejecución es polinomica por tal motivo nuestro problema es del tipo P, la maquina determinista lo puede resolver en tiempo real y razonable. 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 polinómico, lo que corresponde intuitivamente a problemas que pueden ser resueltos aún en el peor de sus casos. Existe una solución en tiempo P para todos los problemas de NP-completo, SOLO si se llega a encontrar una solucion en tiempo P para algun miembro del conjunto (cualquiera de los problemas de Np-HArd)
  • 4.
    La declaracion f(x)=O(g(x))donde se relaciona el tiempo de ejecucion con el espacio de memoria utilizado, de alli se le dan los valores en segundos, pero como se extiende, tendemos a utilizar la funcion logaritmica para determinar el comportamiento conresecto al tiempo y espacio en la solucion de nuestro problema.
  • 5.
    #include <stdio.h> //incluimos librerias #include <string.h> char inverso(char *arreglo); //declaramos funcion que va a realizar la inversa int main() { //iniciamos funcion principal int opcion; char arreglo[255]; //declaramos el arreglo de 255 caracteres, el arreglo es una cadena de caracteres. printf(&quot;\n\n\t\tPROGRAMA VERIFICADOR DE PALINDROMOS\n\n&quot;); do{ printf(&quot;Ingresa el texto que deseas verificar &quot;); //imprime mensaje al usuario gets(arreglo); //utilizamos funcion gets para que pueda leer toda la cadena inverso(arreglo); //manda llamar a la funcion del inverso y se lleva lo que escribimos en arreglo do{ printf(&quot;\t\n\nDesea verificar otro texto\n\t\n1.-Si\n2.-No\n&quot;); scanf(&quot;%d&quot;,opcion); }while(opcion<1 || opcion>2); }while(opcion==1); return 0; } char inverso(char *arreglo) { // inicia funcion inverso int conta, longitud; //declaramos contadores y la variable que tendra el numero de caracteres longitud=strlen(arreglo); //ulilizamos la funcion strlen para saber la longitud de la cadena conta=longitud; //contador que va a hacer igual a longitud de la cadena while(conta >= 0){ //mientras contador sea mayor o igual que 0 printf(&quot;%c&quot;, arreglo[conta]); //imprima el caracter del ultimo al primero conta--; //va a ir en decremento } return 0; }
  • 6.
    #include <stdio.h> #include<stdlib.h> #include <string.h>   int palindromo(char * principio, char * final){   if ((final - principio) < 2) return 1; else if( (*principio) != (*final) ) return 0; else return palindromo(++principio, --final); } main() { char cadena[20]; char * final; int cuenta;   system(&quot;cls&quot;);   printf(&quot;¿Cual es tu Cadena de caracteres? &quot;); gets(cadena);   final=cadena + strlen(cadena) - 1;   if (palindromo(cadena, final)) printf(&quot;Es palindroma \n&quot;); else printf(&quot;No es palindroma \n&quot;);   system(&quot;pause&quot;); printf (&quot;Fin de la ejecucion.\n&quot;); return 0; }
  • 7.
  • 8.
    RECURSIVIDAD ITERATIVIDAD Sedebe usar cuando realmente se necesite y cuando el problema no se puede resolver facilmente con la iteracion.   Se usan cuando no se conoce un metodo para encontrar la solucion de forma exacta. Cuando el numero de iteraciones es poco.
  • 9.
    VENTAJAS DESVENTAJAS Solucionessimples y claras. Eficientes Soluciones a problemas complejos. Sobrecarga relacionadas con las llamadas a los subalgoritmos, (una simple llamada puede generar un gran numero de llamadas recursivas). La claridad no recompensa la sobrecarga.
  • 10.
    VENTAJAS DESVENTAJAS Laprogramacion es simple. Es facilmente aplicable cuando los coeficientes son no lineales. No se puede aplicar a cada sistema.
  • 11.
    Nosotros comoequipo concluimos en que antes buscar una solucion para cierto problema, primero se tiene que analizar todas las posibles vias hacia esta solucion, buscando la manera mas eficiente y descartando las que nos compliquen llegar exitosamente a nuestro destino.
  • 12.
    www.lcc.uma.es/~lopez/modular/recursion/transp_recursion.pdf Fundamentos dela programación. Joyanes Aguilar, Mc Graw Hill, 1988. www.mty.itesm.mx/etie/deptos/m/ma95-843/.../l843-13.pdf http://students.kennesaw.edu/~kjj6794/class/math3261/Iteration%20Methods.ppt