Pascal/Turbo Pascal - Problema con recursividad

   
Vista:

Problema con recursividad

Publicado por Juan Ignacio (8 intervenciones) el 06/03/2014 23:43:19
Hola! tengo un problema con recursividad, me pide que escriba una frase que termine en "." y me diga si la misma tiene letras repetidas o no. Yo hice esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
program sign;
uses Crt;
   var respuesta :boolean;
function verificador(letra1 :char):boolean;
   var letra2 :char;
begin
  write(letra1);
  if not (letra1 = '.') then
     begin
      letra2:=letra1;
      letra1:= ReadKey;
      if (letra1=letra2) then
         verificador := TRUE;
      verificador (letra1);
     end
end;
begin
   Writeln ('Ingrese una frase terminada en . :');
   respuesta := verificador(ReadKey);
   writeln;
   if respuesta then
      writeln('Si')
   else
      writeln('No');
   readln();
end.


Funciona solamente cuando la cantidad de letras es par, cosa que sinceramente no se me ocurre por qué, lo reviso varias veces y para mí está bien. Espero puedan ayudarme, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con recursividad

Publicado por ramon (2072 intervenciones) el 08/03/2014 11:55:35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{Mira esto tu empleas un char como entrada y tienes que emplear un string mira como te digo}
 
program texto;
 uses
    crt;
  type
     string80 = string[80];
  var
    tex : string80;
    tecla : char;
    repes : array['A'..'Z'] of integer;
    i : char;
 
  procedure entrada(var t : string80);
  var
    n : integer;
  begin
     clrscr;
     gotoxy(1,3);write('Entre Texto Terminado En [.] : ');
     gotoxy(32,3);
     n := 1;
   repeat
      tecla := readkey;
      if tecla in[#32..#126,#164,#165] then
      begin
         t[n] := tecla;
         t[0] := chr(n);
         gotoxy(31 + n,3);write(t[n]);
         n := n + 1;
         if n > 80 then
         n := 80;
      end;
      if tecla = #8 then
      begin
          n := n - 1;
          if n < 1 then
          n := 1;
          t[n] := ' ';
          t[0] := chr(n);
          gotoxy(31 + n,3);write(' ');
      end;
   until tecla = '.';
  end;
 
  function repetidos(t : string80) : boolean;
  var
    b, g : integer;
  begin
      fillchar(repes,sizeof(repes),0);
      repetidos := false;
      for b := 1 to length(t) do
      begin
        for g := b + 1 to length(t) do
        begin
        if upcase(t[b]) = upcase(t[g]) then
        begin
            repes[upcase(t[b])] := repes[upcase(t[b])] + 1;
            repetidos := true;
        end;
      end;
    end;
     for i := 'A' to 'Z' do
     if repes[i] = 1 then
     repes[i]  := repes[i] + 1;
  end;
 
  begin
      entrada(tex);
      writeln;
      writeln(repetidos(tex));
      writeln;
      for i := 'A' to 'Z' do
      if repes[i] > 0 then
      writeln('  Letra = ',i,' Repes = ',repes[i]);
      writeln('   Pulse Una Tecla ');
      readkey;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con recursividad

Publicado por Juan Ignacio (8 intervenciones) el 09/03/2014 08:13:18
Gracias por la respuesta. Pero no entendiste lo que tengo que hacer. Es con recursividad y tiene que solamente decirte true si tiene letras repetidas. Pero juntas. O sea, "como" sería FALSE, "coomo" sería TRUE, por las dos "o". Se entiende?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con recursividad

Publicado por Juan Ignacio (8 intervenciones) el 09/03/2014 08:30:30
Ya lo hice. Tenía que utilizar un boolean como variable global. Lo dejo para el que quiera verlo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
program sign;
uses Crt;
var resp :boolean;
  function verificador(letra1 :char):boolean;
  var letra2 :char;
  begin write(letra1);
    if not (letra1 = '.') then
    begin letra2:=letra1;
      letra1:= ReadKey;
      if (letra1=letra2) then
        resp := TRUE;
    verificador (letra1);
    end;
    verificador := resp;
  end;
begin
  Writeln ('Ingrese una frase terminada en . :');
  resp := verificador(ReadKey);
  writeln;
  if resp then
    writeln('Si')
  else
    writeln('No');
  readln();
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar