Pascal/Turbo Pascal - contar caracteres

 
Vista:
sin imagen de perfil

contar caracteres

Publicado por Elena (15 intervenciones) el 03/12/2012 10:38:57
Buenos dias tengo un problemilla con un ejercicio en el que tengo que contar cuantas veces a parece cada letra, mejor os dejo el enunciado:
2.- Se introduce un texto y se tiene que decir el número de veces que aparece cada letra del
alfabeto inglés (se termina de leer cuando se encuentra el carácter # y no se distingue entre
mayúsculas y minúsculas).
En el codigo de mi programa no da fallos de compilación pero a la hora de aumentar el contador de cada letra no funciona correctamente espero que podais echar una manilla si no muchas gracias de todas formas.
PROGRAM ejercicio2;
CONST
max=100;
TYPE
tcar=ARRAY[1..max] OF CHAR;
tcont=ARRAY['A'..'Z'] OF INTEGER;
VAR
cont:tcont;
car:tcar;
i,caracter:char;
PROCEDURE pideTexto( VAR car);
BEGIN
WRITELN('Introduce un texto : ');
END;
PROCEDURE compruebaCar(VAR caracter:char;cont:tcont;car:tcar);
VAR
numCar,j:integer;
BEGIN
numCar:=2;
pideTexto(car);
FOR i:='A' TO 'Z' DO
cont[i]:=0;
WHILE caracter<>'#'DO
BEGIN
READ(caracter);
UPCASE(caracter);
car[j]:=caracter;
WRITELN('CAR ',car[j]);
FOR j:=1 TO (numCar-1) DO

BEGIN
CASE car[j] OF
'A':cont['A']:=cont['A']+1;
'B':cont['B']:=cont['B']+1;
'C':cont['C']:=cont['C']+1;
'D':cont['D']:=cont['D']+1;
'E':cont['E']:=cont['E']+1;
'F':cont['F']:=cont['F']+1;
'G':cont['G']:=cont['G']+1;
'H':cont['H']:=cont['H']+1;
'I':cont['I']:=cont['I']+1;
'J':cont['J']:=cont['J']+1;
'K':cont['K']:=cont['K']+1;
'L':cont['L']:=cont['L']+1;
'M':cont['M']:=cont['M']+1;
'N':cont['N']:=cont['N']+1;
'O':cont['O']:=cont['O']+1;
'P':cont['P']:=cont['P']+1;
'Q':cont['Q']:=cont['Q']+1;
'R':cont['R']:=cont['R']+1;
'S':cont['S']:=cont['S']+1;
'T':cont['T']:=cont['T']+1;
'U':cont['U']:=cont['U']+1;
'V':cont['V']:=cont['V']+1;
'W':cont['W']:=cont['W']+1;
'X':cont['X']:=cont['X']+1;
'Y':cont['Y']:=cont['Y']+1;
'Z':cont['Z']:=cont['Z']+1;
END;

END;
numCar:=numCar+1;
WRITELN('NUM',numCar);
END;

END;

BEGIN
compruebaCar(caracter,cont,car);
FOR i:='A' TO 'Z' DO
WRITELN('Letra ',i,' aparece ',cont[i],' veces');
READLN;
READLN;
END.
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

contar caracteres

Publicado por juan (44 intervenciones) el 03/12/2012 13:47:13
respecto al enunciado , interpreto que dice que introduzcas un texto ( un String ) y contabilizas sus letras,.Tendrias que usar un string del tecxto que lo podes leer en el programa principal por teclado o lo seteas ( inicializas poniendo algun valor) de prueba, usar manejo de String preguntando si la letra que tengo es igual a alguna letra del abecedario y eso lo haces con su indice y ir comparandolo con el del vector y sumar el vector de enteros de acuerdo al indice con el que ingresa. Podrias usar ASCII tb para comparar de la A a la Z . Te recomiendo usar variables locales. Sino entendes algo decime y lo vemos
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
sin imagen de perfil

contar caracteres

Publicado por M2 (15 intervenciones) el 03/12/2012 15:22:21
no es por no usar string pero el ejercicio tiene que ser resuelto mediante vectores, muchas gracias de todas formas.
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

contar caracteres

Publicado por juan (44 intervenciones) el 03/12/2012 16:52:08
según por lo que me comentas es mas sensillo, si solamente tenes que leer caracteres por teclado hasta formar una palabra y contabilizar el vector , te muestro una posible solucion

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
PROGRAM ejercicio2;
uses crt;
TYPE
    tcont=ARRAY['A'..'Z'] OF INTEGER;
VAR
   cont:tcont;
   caracter:char;
 
PROCEDURE pideTexto( var car:char);
BEGIN
     WRITELN('Introduce un caracter : ');
     readln(car);
END;
 
PROCEDURE inicializarVector();
BEGIN
   FOR caracter:='A' TO 'Z' DO
      cont[caracter]:=0;
END;
 
PROCEDURE compruebaCar();
BEGIN
     inicializarVector();
     pideTexto(caracter);
     while(caracter <> '#') do begin
     caracter := UpCase(caracter);
           CASE (caracter) OF
                    'A':cont['A']:=cont['A']+1;
                    'B':cont['B']:=cont['B']+1;
                    'C':cont['C']:=cont['C']+1;
                    'D':cont['D']:=cont['D']+1;
                    'E':cont['E']:=cont['E']+1;
                    'F':cont['F']:=cont['F']+1;
                    'G':cont['G']:=cont['G']+1;
                    'H':cont['H']:=cont['H']+1;
                    'I':cont['I']:=cont['I']+1;
                    'J':cont['J']:=cont['J']+1;
                    'K':cont['K']:=cont['K']+1;
                    'L':cont['L']:=cont['L']+1;
                    'M':cont['M']:=cont['M']+1;
                    'N':cont['N']:=cont['N']+1;
                    'O':cont['O']:=cont['O']+1;
                    'P':cont['P']:=cont['P']+1;
                    'Q':cont['Q']:=cont['Q']+1;
                    'R':cont['R']:=cont['R']+1;
                    'S':cont['S']:=cont['S']+1;
                    'T':cont['T']:=cont['T']+1;
                    'U':cont['U']:=cont['U']+1;
                    'V':cont['V']:=cont['V']+1;
                    'W':cont['W']:=cont['W']+1;
                    'X':cont['X']:=cont['X']+1;
                    'Y':cont['Y']:=cont['Y']+1;
                    'Z':cont['Z']:=cont['Z']+1;
                    END;
     pideTexto(caracter);
 
     END;
END;
 
BEGIN
     compruebaCar();
     FOR caracter:='A' TO 'Z' DO
         WRITELN('Letra ',caracter,' aparece ',cont[caracter],' veces');
     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
sin imagen de perfil

contar caracteres

Publicado por M2 (15 intervenciones) el 03/12/2012 16:57:19
muchisimas gracias Juan era una tonteria.
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

contar caracteres

Publicado por asdasd (1 intervención) el 09/12/2012 01:00:24
En realidad no hace falta realizar todos esos cases

-Inicializas todos los arrays en 0
-sacas el caracter

-y contas en el array directamente, sin hacer todos los cases

cont[car]:=cont[car]+1; {no me acuerdo si se le ponia comillas a car}
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

contar caracteres

Publicado por ramon (2158 intervenciones) el 10/12/2012 21:38:04
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
{A ver si esto os resuelve  el tema}
 
program letras;
 uses
    crt;
  var
   letra : array['A'..'Z'] of integer;
   texto : string;
   cuent : integer;
   t : char;
 
   function entrada : string;
   var
      d : string;
      i : integer;
   begin
      write('   Entre Texto : ');
      readln(d);
      for i := 1 to length(d) do
      begin
      if d[i] <> '#' then
      begin
      entrada[i] := upcase(d[i]);
      entrada[0] := chr(i);
      end
    else
      break;
     end;
   end;
 
 
   begin
      clrscr;
      texto := entrada;
      for cuent := 1 to length(texto) do
      begin
      letra[texto[cuent]] := letra[texto[cuent]] + 1;
      end;
      for t := 'A' to 'Z' do
      if letra[t] <> 0 then
      writeln('  ',t,' : ',letra[t]);
      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