Pascal/Turbo Pascal - Conteo de caracteres repetidos

   
Vista:

Conteo de caracteres repetidos

Publicado por Edd (3 intervenciones) el 17/09/2013 04:03:40
Saludos a todos, estoy necesitando ayuda con un programa que tengo que entregar en unos días pero la verdad no me sale, a partir de caracteres cualquiera y que terminan en un punto, determine que caracteres se repitieron y cuantas veces.
Por ejemplo: CCCpruebadecadEEEna.

Vi un post que pedían lo mismo, pero en mi caso al menos solo se pueden usar instrucciones que existan en pascal estandar, es decir que no se pueden usar: crlscr, gotoxy, crt, readkey, longint, string, break, arrays.

La forma (simplificada) de ingresar el texto la pensé de esta manera:

a:char;
count:integer;

BEGIN

repeat
read (a);
count:=count+1; (para saber el largo de la cadena)

until (a='.');


Así, la cadena se ingresa caracter a caracter y descarta lo que está despues del punto.

No se como manejar los caracteres que se van ingresando de a 1 en el repeat, para poder compararlos y ver si son iguales o no.

Saludos y desde ya muchas gracias por la atención.
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

Conteo de caracteres repetidos

Publicado por ramon (2072 intervenciones) el 18/09/2013 12:13:49
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
{Mira como mínimo se tiene que temer o un string o un array de char para poder después contar
 la letras o caracteres que hay iguales en un testo te paso esto a ver si te ayuda a entenderlo.}
 
  program letras;
   type
      let = array['A'..'Z'] of integer;
      letra = array[1..255] of char;
   var
     texto : letra;
     cuenta : let;
     i, t : integer;
     le : char;
 
   begin
     i := 1;
     write(' Entre texto : ');
     while le <> '.' do
     begin
     read(le);
     if le = '.' then
   else
     begin
     texto[i] := le;
     cuenta[upcase(le)] := cuenta[upcase(le)] + 1;
     i := i + 1;
     end;
   end;
     for le := 'A' to 'Z' do
     if cuenta[le] > 0 then
     writeln('   ',le,'    ',cuenta[le]);
     readln;
     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

Conteo de caracteres repetidos

Publicado por carlos (13 intervenciones) el 18/09/2013 20:00:32
lo que pasa que ese programa te cuenta todas las repetidas juntas,por ejemplo si vos ingresas "eeeadee." te cuenta 5 e y no t3 e y luego 2 e,si pudiera hacer eso funcionaria mejor con las especificaciones que tiene Edd. comopuede ser el codigo para que funcione de esta manera?saludos
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

Conteo de caracteres repetidos

Publicado por horacio (6 intervenciones) el 18/09/2013 22:31:36
Estimado Ramón, para especificar bien lo que necesitamos es un programa con las caracteristicas que te dio edd

Con el formato de salida este:

I=<INICIO_1>,L=<LARGO_1>,C=<CARACTER_1>
I=<INICIO_2>,L=<LARGO_2>,C=<CARACTER_2>
...
I=<INICIO_i>,L=<LARGO_i>,C=<CARACTER_i>
...
I=<INICIO_n>,L=<LARGO_n>,C=<CARACTER_n>
I=<INICIO_MAX>,L=<LARGO_MAX>,C=<CARACTER_MAX>

donde:

<INICIO_i>, <LARGO_i> y <CARACTER_i> son los valores correspondientes al inicio (o posición inicial), el largo y el carácter de la i-esima cadena de caracteres que cumple con las condiciones especificadas anteriormente.
<INICIO_MAX>, <LARGO_MAX> y <CARACTER_MAX> son los valores correspondientes a la cadena más larga.

ejemplo:

Entrada:
AlgunasAAAmasBBBByMenosCC.

Salida:

I=8,L=3,C=A
I=14,L=4,C=B
I=24,L=2,C=C
I=14,L=4,C=B

Desde ya MUchas gracias!!!!
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 02:07:39
gente que se quiera juntar para hacerlo?seria en la facultad.avisen!!!
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

Conteo de caracteres repetidos

Publicado por horacio (6 intervenciones) el 19/09/2013 02:50:03
yo soy del interior. y no asisto a clases pero gracias por la invitacion.. esto esta dificil. sino lo puedo solucionar asi.. desisto!!
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 03:22:06
bueno entonces hagamos algo por acá..

ami se me ocurre algo asi

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
caracter,largo,anterior : integer;
repetidos : boolean;
 
begin
 
ReadLn(caracter);
repetidos:= false;
largo:= 0;
 
while not repetidos and (caracter <> .) do
begin
 
	(* aca tendria que comparar los caracteres y si son iguales suma 1 al contadro largo *)
	(* tiene que ser caracter a caracter tendria que comparar la variable caracter con la variable anterior*)
 
	largo:= largo + 1;
	(* aca le diria que la variable anterior es igual a la variable caracter para que despues la compare*)
	anterior:= caracter;
 
	repetidos:= caracter = anterior;
	(*vuelve a leer*)
 
	ReadLn(caracter);
end;
wtriteln ( 'L=<',largo'> C=<',caracter'>');
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

Conteo de caracteres repetidos

Publicado por horacio horacioandres0206@hotmail.com (6 intervenciones) el 19/09/2013 04:01:58
yo le agregue dos bobadas pero asi mismo me sigue dando errores.. da dos errores y no se donde esta :(

viste que dice que lo de readln esta mal.. ahora la verdad que no entiendo porq...
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 04:17:07
ese codigo no funciona, es como creo yo que deberia ser falta agregarle la parte donde compara los dos caracteres que no se cmo se hace!
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

Conteo de caracteres repetidos

Publicado por horacio (6 intervenciones) el 19/09/2013 05:11:28
poniendo tus variables claro....
en gral seria

read(a);
read(b);
if (a=b) then ...
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 20:17:01
no nos abandones ramon!!
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

Conteo de caracteres repetidos

Publicado por Patricia (5 intervenciones) el 19/09/2013 21:11:56
Buenas!! Estoy intentando hacer la misma tarea, mi pregunta es, se puede utilizar la funcion repeat-until dentro de while??
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 21:15:55
creo que a dentro no, todo repeat se puede escribir usando un while

Relación con while

La instrucción:
repeat
S
until C

es equivalente a:

S;
while not C do
begin
S
end

lo saque de la clase 5 que hablan del repeat (pagina 6)
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

Conteo de caracteres repetidos

Publicado por Patricia (5 intervenciones) el 19/09/2013 21:25:32
Ah demas gracias, lograste hacer el programa y que funcione? A mi no me queda!! Crei que iba a ser mas facil y deje todo a ultimo momento!!!
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 21:32:24
no todavia no :( , tengo problemas a la hora de comparar los caracteres, no se como hacerlo
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

Conteo de caracteres repetidos

Publicado por Patricia (5 intervenciones) el 19/09/2013 21:39:36
Yo estoy intentando hacer eso, me queda algo asi
Repeat
read(a)
inicio;= inicio + 1
read(b)
inicio:= inicio + 1
Until (a OR b) <> '.'

y despues un

If (a=b) then
largo:= largo+1
else
y eso tambien deberia ir dentro de un repeat creo, pero no se como asociar los datos, tampoco se como poner el numero correcto del inicio de la repeticion
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

Conteo de caracteres repetidos

Publicado por sebastian (13 intervenciones) el 19/09/2013 21:54:49
creo que tenes un error cuando lees los caracteres , fijate que cuando lees a y b les sumas 1 a los dos y de esa forma me parece que te quedan parados en el mismo caracter
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

Conteo de caracteres repetidos

Publicado por Patricia (5 intervenciones) el 19/09/2013 21:59:50
y no se lee el inicio de la suma anterior? o sea, cuando lee el caracter (a) es inicio+1=1 (porque inicio es 0) despues lee el caracter (b) y es inicio + 1=2 porque inicio ahora vale 1
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

Conteo de caracteres repetidos

Publicado por Patricia (5 intervenciones) el 19/09/2013 22:41:43
capaz que hay que poner un read(inicio) en el medio
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

Conteo de caracteres repetidos

Publicado por ramon (2072 intervenciones) el 20/09/2013 22:00:17
A ver según tu ejemplo me dices.
Que entras esta cadena de caracteres:

AlgunasAAAmasBBBByMenosCC.

Salida:

I=8,L=3,C=A [aqui error puesto que la primera A esta en posicion 1 no 8 y tienes 4 no 3]
I=14,L=4,C=B
I=24,L=2,C=C
I=14,L=4,C=B

eso por un lado por otro la pregunta dice:

a partir de caracteres cualquiera y que terminan en un punto, determine que caracteres se repitieron y cuantas veces.

lo cual nos deja que son todos los entrados asta el punto lo cual cuenta los caracteres sean
minúsculas o mayúsculas siempre sera el carácter [a] o [A] no marca distinción,
Ni posición final y el texto puede ser :

Ramiroramaremorio.

Por lo tanto como contarías estas.

Intentare ayudaros pero no veo el planteamiento correcto.
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

Conteo de caracteres repetidos

Publicado por ramon (2072 intervenciones) el 21/09/2013 00:00:11
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{Esta es una forma pero podéis apreciar la cantidad de variables que tiene}
 
program cuentalt;
  var
    A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,
                          R1,S1,T1,U1,V1,W1,X1,Y1,Z1 : integer;
    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z : integer;
    entrada, texto : char;
    l2 : integer;
 
 
  begin
      for l2 := 1 to 26 do
      begin
        for t := 1 to 80 do
        begin
        write(' ');
        end;
        writeln;
      end;
      l2 := 1;
      write('Entre Los Caracteres : ');
      repeat
      read(texto);
      if texto <> '.' then
      begin
   case texto of
 'A','a' : begin A := A + 1; if A1 = 0 then A1 := l2; end;
 'B','b' : begin B := B + 1; if B1 = 0 then B1 := l2; end;
 'C','c' : begin C := C + 1; if C1 = 0 then C1 := l2; end;
 'D','d' : begin D := D + 1; if D1 = 0 then D1 := l2; end;
 'E','e' : begin E := E + 1; if E1 = 0 then E1 := l2; end;
 'F','f' : begin F := F + 1; if F1 = 0 then F1 := l2; end;
 'G','g' : begin G := G + 1; if G1 = 0 then G1 := l2; end;
 'H','h' : begin H := H + 1; if H1 = 0 then H1 := l2; end;
 'I','i' : begin I := I + 1; if I1 = 0 then I1 := l2; end;
 'J','j' : begin J := J + 1; if J1 = 0 then J1 := l2; end;
 'K','k' : begin K := K + 1; if K1 = 0 then K1 := l2; end;
 'L','l' : begin L := L + 1; if L1 = 0 then L1 := l2; end;
 'M','m' : begin M := M + 1; if M1 = 0 then M1 := l2; end;
 'N','n' : begin N := N + 1; if N1 = 0 then N1 := l2; end;
 'O','o' : begin O := O + 1; if O1 = 0 then O1 := l2; end;
 'P','p' : begin P := P + 1; if P1 = 0 then P1 := l2; end;
 'Q','q' : begin Q := Q + 1; if Q1 = 0 then Q1 := l2; end;
 'R','r' : begin R := R + 1; if R1 = 0 then R1 := l2; end;
 'S','s' : begin S := S + 1; if S1 = 0 then S1 := l2; end;
 'T','t' : begin T := T + 1; if T1 = 0 then T1 := l2; end;
 'U','u' : begin U := U + 1; if U1 = 0 then U1 := l2; end;
 'V','v' : begin V := V + 1; if V1 = 0 then V1 := l2; end;
 'W','w' : begin W := W + 1; if W1 = 0 then W1 := l2; end;
 'Y','y' : begin Y := Y + 1; if Y1 = 0 then Y1 := l2; end;
 'Z','z' : begin Z := Z + 1; if Z1 = 0 then Z1 := l2; end;
   end;
      end;
      l2 := l2 + 1;
      until texto = '.';
   for entrada := 'A' to 'Z' do
   begin
  case entrada of
 'A' : begin if A1 > 0 then writeln('Inicio : ',A1,'   Caracters : ',A,'   Letra : A'); end;
 'B' : begin if B1 > 0 then writeln('Inicio : ',B1,'   Caracters : ',B,'   Letra : B'); end;
 'C' : begin if C1 > 0 then writeln('Inicio : ',C1,'   Caracters : ',C,'   Letra : C'); end;
 'D' : begin if D1 > 0 then writeln('Inicio : ',D1,'   Caracters : ',D,'   Letra : D'); end;
 'E' : begin if E1 > 0 then writeln('Inicio : ',E1,'   Caracters : ',E,'   Letra : E'); end;
 'F' : begin if F1 > 0 then writeln('Inicio : ',F1,'   Caracters : ',F,'   Letra : F'); end;
 'G' : begin if G1 > 0 then writeln('Inicio : ',G1,'   Caracters : ',G,'   Letra : G'); end;
 'H' : begin if H1 > 0 then writeln('Inicio : ',H1,'   Caracters : ',H,'   Letra : H'); end;
 'I' : begin if I1 > 0 then writeln('Inicio : ',I1,'   Caracters : ',I,'   Letra : I'); end;
 'J' : begin if J1 > 0 then writeln('Inicio : ',J1,'   Caracters : ',J,'   Letra : J'); end;
 'K' : begin if K1 > 0 then writeln('Inicio : ',K1,'   Caracters : ',K,'   Letra : K'); end;
 'L' : begin if L1 > 0 then writeln('Inicio : ',L1,'   Caracters : ',L,'   Letra : L'); end;
 'M' : begin if M1 > 0 then writeln('Inicio : ',M1,'   Caracters : ',M,'   Letra : M'); end;
 'N' : begin if N1 > 0 then writeln('Inicio : ',N1,'   Caracters : ',N,'   Letra : N'); end;
 'O' : begin if O1 > 0 then writeln('Inicio : ',O1,'   Caracters : ',O,'   Letra : O'); end;
 'P' : begin if P1 > 0 then writeln('Inicio : ',P1,'   Caracters : ',P,'   Letra : P'); end;
 'Q' : begin if Q1 > 0 then writeln('Inicio : ',Q1,'   Caracters : ',Q,'   Letra : Q'); end;
 'R' : begin if R1 > 0 then writeln('Inicio : ',R1,'   Caracters : ',R,'   Letra : R'); end;
 'S' : begin if S1 > 0 then writeln('Inicio : ',S1,'   Caracters : ',S,'   Letra : S'); end;
 'T' : begin if T1 > 0 then writeln('Inicio : ',T1,'   Caracters : ',T,'   Letra : T'); end;
 'U' : begin if U1 > 0 then writeln('Inicio : ',U1,'   Caracters : ',U,'   Letra : U'); end;
 'V' : begin if V1 > 0 then writeln('Inicio : ',V1,'   Caracters : ',V,'   Letra : V'); end;
 'W' : begin if W1 > 0 then writeln('Inicio : ',W1,'   Caracters : ',W,'   Letra : W'); end;
 'Y' : begin if Y1 > 0 then writeln('Inicio : ',Y1,'   Caracters : ',Y,'   Letra : Y'); end;
 'Z' : begin if Z1 > 0 then writeln('Inicio : ',Z1,'   Caracters : ',Z,'   Letra : Z'); end;
   end;
  end;
  writeln;
  writeln(' Pulse Enter ');
   repeat
      readln(texto);
   until texto = #13;
 
  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