SoloCodigo

Programación General => Pascal => Mensaje iniciado por: Mr. Pascal en Viernes 2 de Febrero de 2007, 19:31

Título: Pequeña Ayudadita (recursividad)
Publicado por: Mr. Pascal en Viernes 2 de Febrero de 2007, 19:31
:hola: hola mis estimados colegas de solocodigo, tengo una dudita, acerca de como acceder a un arreglo de string... pues mi problema es quiero hacer un problemilla recursivo que me imprama todas las cadenas contenidas que su ultimo caracter sea un punto.

esto es lo que he hecho, pero no se porque solo me imprime la ultima cadena que esta en la ultima posicion del arreglo.
aqui esta el cod para que lo chequen  :comp:
Código: Text
  1.  
  2. procedure impcad(i:integer);
  3. var x:integer;
  4. begin
  5.     x:=length(fr[i]);
  6.     if (i=max) and (fr[i][x] = '.') then
  7.          writeln(fr[i])
  8.     else
  9.           if  fr[i][x] = '.' then
  10.              begin
  11.                 writeln(fr[i])
  12.                 impcad(i+1);
  13.              end
  14.           else
  15.                   impcad(i+1);
  16. end;
  17.  

¿Esta bien la manera en que accedo a al ultimo caracter de la frase que esta en el arreglo?  :smartass:
si hay una mejor manera de acceder me gustaria que me ilustren... :D
agradezco de antemano cualquier ayudita.-
 :hola: adiosito hasta otro capitulo
Título: Re: Pequeña Ayudadita (recursividad)
Publicado por: mamex en Viernes 2 de Febrero de 2007, 20:18
Pues no se usar pascal, pero mi lógica me indica que debe ser así
Me imagino k max es la longitud del arreglo de strings.

Código: Text
  1.  
  2. procedure impcad(i:integer);
  3. var x:integer;
  4. begin
  5.    x:=length(fr[i]);
  6.    if i<=max then
  7.    begin
  8.          if  fr[i][x] = '.' then
  9.             begin
  10.                writeln(fr[i])
  11.                impcad(i+1);
  12.             end
  13.          else
  14.                impcad(i+1);  
  15.   end        
  16. end;
  17.  
  18.  

Espero poder ayudarte.
Título: Re: Pequeña Ayudadita (recursividad)
Publicado por: Mr. Pascal en Sábado 3 de Febrero de 2007, 16:32
Citar
Pues no se usar pascal, pero Espero poder ayudarte.

:smartass:
gracias por la ayudita me sirvio bastante.... ahora le estoy tomando mas interes a esto de la recursividad :P  B)

 :hola: hasta otro capitulo
Título: Re: Pequeña Ayudadita (recursividad)
Publicado por: Alpha_ en Miércoles 7 de Marzo de 2007, 03:34
Ambos están muy bien, quizás la única mejora que podría hacerle es el de quitar la llamada recursiva del segundo nivel de if anidados, puesto que siempre se estará ejecutando.

Código: Text
  1. procedure impcad(i:integer);
  2. var x:integer;
  3. begin
  4.   x:=length(fr[i]);
  5.   if i<=max then
  6.   begin
  7.         if  fr[i][x] = '.' then
  8.               writeln(fr[i]);
  9.         impcad(i+1);  
  10.   end        
  11. end;
  12.  

Como habrás visto, Mr. Pascal, lo de la recursividad es una cuestión muy interesante, pero en ejemplos como este no es en donde se ve su verdadero potencial. Si ahora te gusta, en el futuro te va a encantar. =^_^=

PD: Yo siempre terminaba resolviendo algoritmos de manera recursiva, me he comido varios regaños por eso. xD (No son lo más eficientes)
Título: Re: Pequeña Ayudadita (recursividad)
Publicado por: ushedipe en Miércoles 2 de Mayo de 2007, 20:29
:comp: pues no se si ésto solucione de alguna manera lo que pretenden hacer... tampoco creo que sea muy recursivo, pero en ocasiones las cosas simples se deben hacer simples.

Código: Text
  1. procedure impcad(i:integer);
  2. var
  3.   i:integer;
  4. begin
  5.   i:=0;
  6.   while i<=Length(fr) do
  7.     begin
  8.       if length(fr[i])='.' then
  9.          writeln(fr[i]);
  10.        i:=i+1;  
  11.     end        
  12. end;
  13.  

...espero que sea útil! :ph34r: