Ir ao conteúdo
  • Cadastre-se

Programa em Pascal que conte quantidade de letras em um determinada frase .


Posts recomendados

Eu estava tentando resolver essa questão:

Escreva um programa que leia um texto digitado pelo usuário até ler o caractere enter, que não deve ser processado. O programa deve imprimir quantas vezes cada letra foi digitada. (lembre-se, os caracteres „a. e „A.) representam uma única letra.

 

eu fiz o seguinte codigo:

program Alfabeto;
var
	texto: string;
  alf : array[1..52] of string;
 		tamanho, k, i, cont: integer;
	
{Procedure contarLetras(texto: string);
	var
 		alf : array[1..52] of string;
 		tamanho, k, i, cont: integer;
 		
	begin
	 alf[1] := 'a';  alf[27] := 'A';
	 alf[2] := 'b';  alf[28] := 'B';
	 alf[3] := 'c';  alf[29] := 'C';
	 alf[4] := 'd';  alf[30] := 'D';
	 alf[5] := 'e';  alf[31] := 'E';
	 alf[6] := 'f';  alf[32] := 'F';
	 alf[7] := 'g';  alf[33] := 'G';
	 alf[8] := 'h';  alf[34] := 'H';
	 alf[9] := 'i';  alf[35] := 'I';
	 alf[10] := 'j'; alf[36] := 'J';
	 alf[11] := 'k'; alf[37] := 'K';
	 alf[12] := 'l'; alf[38] := 'L';
	 alf[13] := 'm'; alf[39] := 'M';
	 alf[14] := 'n'; alf[40] := 'N';
	 alf[15] := 'o'; alf[41] := 'O';
	 alf[16] := 'p'; alf[42] := 'P';
	 alf[17] := 'q'; alf[43] := 'Q';
	 alf[18] := 'r'; alf[44] := 'R';
	 alf[19] := 's'; alf[45] := 'S';
	 alf[20] := 't'; alf[46] := 'T';
	 alf[21] := 'u'; alf[47] := 'U';
	 alf[22] := 'v'; alf[48] := 'V';
	 alf[23] := 'x'; alf[49] := 'X';
	 alf[24] := 'w'; alf[50] := 'W';
	 alf[25] := 'y'; alf[51] := 'Y';
	 alf[26] := 'z'; alf[52] := 'Z';
	 tamanho:=length(texto);
	 for k:=1 to 52 do
	 cont:=0;
	 	for i:=1 to tamanho do
	 		if texto[i]=alf[k] then begin
	 															cont:=cont +1;
	 															if i= tamanho then writeln(alf[k],' tem ',cont,' vezes no texto.');
	 														end;
	 			
	end;}
begin
 write('Digite um texto ');
 readln(texto);
  alf[1] := 'a';  alf[27] := 'A';
	 alf[2] := 'b';  alf[28] := 'B';
	 alf[3] := 'c';  alf[29] := 'C';
	 alf[4] := 'd';  alf[30] := 'D';
	 alf[5] := 'e';  alf[31] := 'E';
	 alf[6] := 'f';  alf[32] := 'F';
	 alf[7] := 'g';  alf[33] := 'G';
	 alf[8] := 'h';  alf[34] := 'H';
	 alf[9] := 'i';  alf[35] := 'I';
	 alf[10] := 'j'; alf[36] := 'J';
	 alf[11] := 'k'; alf[37] := 'K';
	 alf[12] := 'l'; alf[38] := 'L';
	 alf[13] := 'm'; alf[39] := 'M';
	 alf[14] := 'n'; alf[40] := 'N';
	 alf[15] := 'o'; alf[41] := 'O';
	 alf[16] := 'p'; alf[42] := 'P';
	 alf[17] := 'q'; alf[43] := 'Q';
	 alf[18] := 'r'; alf[44] := 'R';
	 alf[19] := 's'; alf[45] := 'S';
	 alf[20] := 't'; alf[46] := 'T';
	 alf[21] := 'u'; alf[47] := 'U';
	 alf[22] := 'v'; alf[48] := 'V';
	 alf[23] := 'x'; alf[49] := 'X';
	 alf[24] := 'w'; alf[50] := 'W';
	 alf[25] := 'y'; alf[51] := 'Y';
	 alf[26] := 'z'; alf[52] := 'Z';
	 tamanho:=length(texto);
	 for k:=1 to 52 do
	 cont:=0;
	 	for i:=1 to tamanho do
	 		if texto[i]=alf[k] then begin
	 															cont:=cont +1;
	 															if i= tamanho+1 then writeln(alf[k],' tem ',cont,' vezes no texto.');
	 														end;
	writeln(tamanho);
 {contarLetras(texto);}
 readln;
end.

Poderiam me ajudar?

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@rugier732    esse seu código começou bem, você pensou do jeito certo, e usando

um vetor para colocar as letras para comparar com as do texto foi uma boa ideia por

que assim pode se usar um loop para fazer as comparações.         Só ficou faltando

fazer essas comparações e imprimir o resultado na tela, então aqui está o restante

do código :

program Alfabeto_conta_letras;
Uses crt;
var
  texto       : string;
  alf         : array[1..52] of string;
  alf2        : array[1..52] of integer;
  tamanho,i,k : integer;
//**************************   inicio   **************************
begin
  clrscr();
  write('Digite um texto --> ');
  readln(texto);
  alf[ 1] := 'a'; alf[27] := 'A';
  alf[ 2] := 'b'; alf[28] := 'B';
  alf[ 3] := 'c'; alf[29] := 'C';
  alf[ 4] := 'd'; alf[30] := 'D';
  alf[ 5] := 'e'; alf[31] := 'E';
  alf[ 6] := 'f'; alf[32] := 'F';
  alf[ 7] := 'g'; alf[33] := 'G';
  alf[ 8] := 'h'; alf[34] := 'H';
  alf[ 9] := 'i'; alf[35] := 'I';
  alf[10] := 'j'; alf[36] := 'J';
  alf[11] := 'k'; alf[37] := 'K';
  alf[12] := 'l'; alf[38] := 'L';
  alf[13] := 'm'; alf[39] := 'M';
  alf[14] := 'n'; alf[40] := 'N';
  alf[15] := 'o'; alf[41] := 'O';
  alf[16] := 'p'; alf[42] := 'P';
  alf[17] := 'q'; alf[43] := 'Q';
  alf[18] := 'r'; alf[44] := 'R';
  alf[19] := 's'; alf[45] := 'S';
  alf[20] := 't'; alf[46] := 'T';
  alf[21] := 'u'; alf[47] := 'U';
  alf[22] := 'v'; alf[48] := 'V';
  alf[23] := 'w'; alf[49] := 'W';
  alf[24] := 'x'; alf[50] := 'X';
  alf[25] := 'y'; alf[51] := 'Y';
  alf[26] := 'z'; alf[52] := 'Z';
  tamanho:=length(texto);
  for k:=0 to tamanho do    //testar todas as letras do texto
  begin
    for i:=1 to 52 do
    begin
      if texto[k]=alf[i] then//ver qual letra é essa
      begin
        alf2[i]:=alf2[i]+1;  //soma quat de vezes a letra saiu
      End;
    End;
  End;
  clrscr();                 //limpando a tela
  writeln('Tamanho Do Texto --> ',tamanho,' Letras');//mostra o tam do texto
  writeln('Nesse Texto-> ',texto);      //mostra o texto
  writeln;                              //pula uma linha
  for k:=1 to 26 do
  begin
    if alf2[k] + alf2[k+26] <> 0 then    //se tal letra estiver no texto
    begin
      sound(1000);  //liga o som com frequencia de 1000 hz
      delay(300);   //durante 3 decimos de segundos
      nosound;      //desliga o som
      writeln('A Letra ',alf[k],' Ou ',alf[k+26],' Saiu ',alf2[k]+alf2[k+26],' vezes no texto.');
    End;     //escreve a letra
  End;
  readln;    //espera apertar enter
end.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá a todos

 

@rugier732, algumas sugestões:

 

1) IDENTAÇÃO DO CÓDIGO

Evite o uso do "tabulação" (tecla tab), prefira usar espaços. Veja como o código fica todo "bagunçado".

 

Obs.: a depender do editor, é possível configurar para que o tab insira espaço, em vez de tabulação .

Obs.2: pode até usar tabulação, mas todo o código tem que está tabulado... e mesmo assim dá mais trabalho... sugiro usar espaço mesmo (2 ou 3 espaços para cada dente da identação).

 

 

2) REORGANIZAÇÃO DO CÓDIGO

Apenas peguei o seu código e dei uma reorganizada, veja:
 

PROGRAM Alfabeto;
var
  texto   :string;
  alf     :array[1..52] of string;
  tamanho,
  k, i,
  cont    :integer;

BEGIN
//inicia o vetor alfabético
alf[01]:='a'; alf[27]:='A';
alf[02]:='b'; alf[28]:='B';
alf[03]:='c'; alf[29]:='C';
alf[04]:='d'; alf[30]:='D';
alf[05]:='e'; alf[31]:='E';
alf[06]:='f'; alf[32]:='F';
alf[07]:='g'; alf[33]:='G';
alf[08]:='h'; alf[34]:='H';
alf[09]:='i'; alf[35]:='I';
alf[10]:='j'; alf[36]:='J';
alf[11]:='k'; alf[37]:='K';
alf[12]:='l'; alf[38]:='L';
alf[13]:='m'; alf[39]:='M';
alf[14]:='n'; alf[40]:='N';
alf[15]:='o'; alf[41]:='O';
alf[16]:='p'; alf[42]:='P';
alf[17]:='q'; alf[43]:='Q';
alf[18]:='r'; alf[44]:='R';
alf[19]:='s'; alf[45]:='S';
alf[20]:='t'; alf[46]:='T';
alf[21]:='u'; alf[47]:='U';
alf[22]:='v'; alf[48]:='V';
alf[23]:='x'; alf[49]:='X';
alf[24]:='w'; alf[50]:='W';
alf[25]:='y'; alf[51]:='Y';
alf[26]:='z'; alf[52]:='Z';

//leitura do texto a ser analisado
write('Digite um texto ');
readln(texto);

//calcular quantas vezes cada letra foi digitada
tamanho:=Length(texto);
for k:=1 to 52 do
  cont:=0;
for i:=1 to tamanho do
  if texto[i]=alf[k] then
    begin
    cont:=cont +1;
    if i= tamanho+1 then
      writeln(alf[k],' tem ',cont,' vezes no texto.');
    end;
writeln(tamanho);
END.

Obs.: identei apenas de acordo com a SINTAXE DO PASCAL...  abaixo comentado algo relacionado ao que quero dizer...

 

3) SINTAXE DO PASCAL E REDEFINIÇÃO DO ALGORITMO

Veja o trecho abaixo:

//calcular quantas vezes cada letra foi digitada
tamanho:=Length(texto);
for k:=1 to 52 do
  cont:=0;
for i:=1 to tamanho do
  if texto[i]=alf[k] then
    begin
    cont:=cont +1;
    if i= tamanho+1 then
      writeln(alf[k],' tem ',cont,' vezes no texto.');
    end;
writeln(tamanho);
END.

Creio eu que no primeiro for seria necessário inserir um begin/end dele... pois do jeito que está, ele está apenas "zerando o cont 52 vezes!!!! (não faz sentido). Perceba que ao deixar o código identando, fica exporto visualmente que algo está errado. A identação tem que ser de acordo com a sintaxe, e não com o que "você deseja", ou seja, apesar de você ter inserido o segundo for mais para dentro, ele não está dentro do primeiro, entende?

 

Como não sei onde seria o end; desse primeiro for, da forma que você imaginou o seu algoritmo, peço que corrija e tente dar continuidade ao código... faça testes e poste onde está com dúvidas.

 

 

4) APRIMORAMENTOS

Sugiro que tente inicialmente fazer o código do seu jeito... veja até onde vai... ao mesmo tempo ir analisando as novas perspectivas, como as ditas na postagem, assim como  também nas sugestões de @devair1010. Mas o importante que sempre use algo que você está entendendo... Vá analisando, codificando e testando... analisando, codificando e testando......

 

***

 

No aguardo.

 

 

 

***

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@rugier732    veja esse código com algumas modificações para diminuir o número

de linhas :

program Alfabeto_conta_letras;
Uses crt;
var
  texto       : string;
  alf         : array[1..52] of string;
  alf2        : array[1..52] of integer;
  tamanho,i,k : integer;
//**************************   inicio   **************************
begin
  clrscr();
  for k:=1 to 26 do      //aqui coloca as letras no array
  begin
    alf[k   ] := char(k+96);    //letras minúsculas
    alf[k+26] := char(k+64);    //letras maiúsculas
  end;
  write('Digite um texto --> ');
  readln(texto);
  tamanho:=length(texto);
  for k:=0 to tamanho do    //testar todas as letras do texto
  begin
    for i:=1 to 52 do
    begin
      if texto[k]=alf[i] then//ver qual letra é essa
      begin
        alf2[i]:=alf2[i]+1;  //soma quat de vezes a letra saiu
      End;
    End;
  End;
  clrscr();                 //limpando a tela
  writeln('Tamanho Do Texto --> ',tamanho,' Letras');//mostra o tam do texto
  writeln('Nesse Texto-> ',texto);      //mostra o texto
  writeln;                              //pula uma linha
  for k:=1 to 26 do
  begin
    if alf2[k] + alf2[k+26] <> 0 then    //se tal letra estiver no texto
    begin
      sound(1000); //liga o som com frequencia 1000 hz
      delay(300);  //durante 3 decimos de segundo
      nosound;     //para o som
      writeln('A Letra ',alf[k],' Ou ',alf[k+26],' Saiu ',alf2[k]+alf2[k+26],' vezes no texto.');
    End;     //escreve a letra
  End;
  readln;    //espera apertar enter
end.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!