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

mykos

Contar o número de palavras e de espaços

6 mensagens neste tópico

boas pessoal!!!

é o seguinte, tenho que entregar um programa para avaliaçao, mas xeguei a uma parte k nao consigo encontrar maneira de resolver. o exercicio é o seguinte:

Escreva uma função que, dado um texto, determine o número de palavras e de espaços contidos nesse texto.

Deve ainda contar o número de vezes que uma determinada palavra ocorre no texto.

aki está a parte do programa que ja consegui fazer:

PROGRAM exercicio2;

uses
crt;

VAR
texto:STRING;
comp,i:integer;
espaco, palavras:integer;



BEGIN
WRITE('Escreva um texto: ');
READLN(texto);

     espaco:=0 ;
     palavras:=0;
     comp:=length(texto) ;
     
                         {contar espaços}
                         for i:=1 to comp do
                         begin
                              if (texto[i])=' ' then
                              espaco:=espaco+1
                         end;
     
                         {contar palavras}
                         IF (texto[1]<>' ') THEN palavras:=1;
                         FOR i:=2 TO comp DO
                         begin
                              IF (texto[i]=' ') AND (texto[i+1]<>' ') THEN palavras:=palavras+1;
                         end;
writeln('O texto contem:');
writeln(espaco, ' espacos');
writeln(palavras,' palavras');
readkey;

end. 

A 1ª parte consegui fazer, mas a segunda está um bocado dificil, ainda comecei ha pouco com pascal e nao sei como resolver a segunda parte do exercicio. alguem me pode ajudar???

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No Contar Palavras, o texto[i+1]<>' ' vai rebentar quando chegares á ultima palavra.

Estás quase lá. Podes usar um só ciclo para fazer a contagem.

Basta incrementar a variável palavras sempre que encontrares uma letra no início do texto ou após um espaço.

Se recorreres a uma variável de controlo para saber se o último character foi um espaço ou algo diferente já sabes o que deves incrementar de seguida.

Exemplo:

ultimoFoiEspaco:=false;
espaco:=0 ;
palavras:=0;
comp:=length(texto) ;

for i:=1 to comp do
begin

if ultimoFoiEspaco and texto[i]<>' ' then
begin
   {A seguir a um espaço há um character que não um espaço, ou seja, está no inicio de uma palavra}
   palavras:=palavras+1;
   ultimoFoiEspaco = false;
end;

if (texto)=' ' then 
begin  
   {Detectou um espaço, a seguir poderá vir outro espaço ou o inicio de uma palava}
   espaco:=espaco+1;
   ultimoFoiEspaco = true;
end;
end;

Tens de ter em atenção de que o exemplo acima não contempla o facto do texto começar por uma palavra, tens de fazer os ajustes necessários para colocar o exemplo a funcionar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado pela ajuda M6, no me tinha apercebido que o programa não estava a funcionar correctamente em algumas situações.

Segui o teu conselho e acho que agora já está sem erros.

aqui esta o código do programa:

PROGRAM exercicio2;

uses
crt;

VAR
texto:STRING;
comp,i:integer;
espaco, palavras:integer;
ultimoFoiEspaco:boolean;


BEGIN
WRITE('Escreva um texto: ');
READLN(texto);


ultimoFoiEspaco:=false;
espaco:=0 ;
palavras:=0;
comp:=length(texto) ;


if texto[1]<>' ' then
   begin
   palavras:=palavras+1
   end;
   
for i:=1 to comp-1 do
begin



  if (texto[i])=' ' then
     begin
        espaco:=espaco+1;
        ultimoFoiEspaco:=true;
     end
   else
     begin
          ultimoFoiEspaco:=false;
     end;

   if (ultimoFoiEspaco=true) and (texto[i+1]<>' ') then
     begin
   palavras:=palavras+1
     end;


end;

writeln('O texto contem:');
writeln(espaco, ' espacos');
writeln(palavras,' palavras');
readkey;

end.

Mas ainda falta uma parte do exercicio, e essa parte não tenho nenhuma ideia de como fazer, se alguém me puder ajudar fico muito agradecido!!

Escreva uma função que, dado um texto, determine o número de palavras e de espaços contidos nesse texto.

Deve ainda contar o número de vezes que uma determinada palavra ocorre no texto.

A parte que falta é a que esta a vermelho.

obrigado a todos :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vi, o programa está OK, mas não o testei, nem sequer tenho um compilador de Pascal...

Quanto à função, com o que já tens, se seguires a seguinte lógica vais conseguir fazê-lo de forma simples:

1. crias uma variável do tipo string onde juntas todos os caracteres que estão entre espaços (do exercício anterior já sabes quando começa e acaba uma palavra)

2. quando tens uma palavra nessa variável, guarda-la numa posição de um array de palavras

3. quanto tiveres todas as palavras, fazes um loop pelo array de palavras para detectar a primeira palavra, depois fazes outro loop pelo mesmo array de palavras e sempre que detectares uma palavra igual, somas mais 1.

Atenção que se queres ser mesmo "picuinhas", deves ter em atenção à pontuação gramatical que serve também de separador entre palavras: . , ! ; : etc..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

M6 podes dar um exemplo sff.

eu percebi +/- a ideia mas como comecei a ter programação há pouco tempo ainda é um bocado difícil passar a ideia para código.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

M6 podes dar um exemplo sff.

eu percebi +/- a ideia mas como comecei a ter programação há pouco tempo ainda é um bocado difícil passar a ideia para código.

obrigado

Antes de mais, é necessário saber se já te ensinaram o que é um array.

Se não te ensinaram, então esquece a minha ideia, pois de certo essa estrutura não faz parte da solução desse problema.

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