• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

visk0nde

[PASCAL] contar numero de letras.

5 mensagens neste tópico

Crie uma aplicação em PASCAL que conte o número de ocorrências de letras do alfabeto num ficheiro de texto.

no final, o programa terá de dar os dados estatisticos relativamente ao número de a(s), b(s), c(s),

ok o programa no final, deve receber o nome dum ficheiro de texto, e dizer separadamente o numero de A's o numero de B's etc.

e pa fazer isso em um procedimento ou funcao numa unidade a parte, mas nao queria tar a usar 26 variaveis nem  26 IF's ou assim..

sabem s da pa simplifcar isso usando vectores ou assim?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Antes de mais, bem vindo ao fórum.

Podes fazer algo do tipo:

Lês o conteúdo de uma linha do ficheiro para uma string:

while not eof(ficheiro) do begin
     readln(ficheiro,string); {Para fazer a leitura da linha do ficheiro para uma string}
     ilen:=length(string); {Tens uma variavel do tipo inteiro com o tamanho da string}
     for i:=1 to ilen do begin
          stemp:=string[i];
          case stemp of
          'a','A': iA:=iA+1; {Faz a contagem do número de letras deste tipo}
          'b','B': iB:=iB+1;
          ...
          'z','Z': iZ:=iZ+1;
          end;
     end;

Acho que não tem qualquer problema em fazeres isto com um array, mas depois vais ter de fazer algo do género:

writeln('A - ',array[1]);
writeln('B',array[2]);

[EDIT]Lembrei-me de uma cena que é capaz de te dar jeito, se utilizares o array, em vez de estares a escrever as letras todas do abecedário podes fazer tipo isto:

var c:char;
i:=1;
for c:='A' to 'Z' do begin
    writeln(c,array[i]);
    i:=i+1;
end;

[/EDIT]

Espero ter ajudado.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desde ja obrigado :P

quanto a primeira opcao, eu tava mesmo era a perguntar s nao havia um metodo para evitar ter d fazer um CASE com 26 opcoes... mas s nao conseguir de outro metodo la vai ser assim :P

quanto ao FOR eu tinha pensado nisso, mas pensava q o for so dava para limites numericos tipo 1 ate 9, e nao reconhecia letras...:o

dps amanha vou tentar dessa forma :)

cumpts e obrigado ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja agora

podiam dar uma solução para fazer um programa que use esta função e diga entao as letras listadamente?

Obg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi,

vou deixar aki a minha proposta sem ter k usar 26 cases ou 26 indeces de array:

procedure contagem;
var i,j,cont:byte;
begin
     for i:='A' to 'Z' do
     begin
             cont:=0;
             for j:=1 to length(frase) do
             begin                    
                    if (upcase(frase[j])=i) then
                    cont:=cont+1;
             end;         
             append(fich);
             writeln(fich,i,': ',cont);
             close(fich);
     end;
end;

NOTA: frase - variável string / fich - identificador do ficheiro de texto

Isto é apenas o procedimento para a contagem das letras e sua listagem no ficheiro de texto, o resto e fácil.

Digo já k não acabei o programa todo, por isso não sei se o procedimento funciona correctamente e tbm não sei se a instrução append está feita correctamente. Depois digam cm correu. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora