Jump to content

Programa que lê frase e conta palavras


Guga98

Recommended Posts

Elabora um programa em pascal que peça ao utilizador uma frase com um max de 70 caracteres... faz com que o programa responda dizendo o numero de palavras introduzinas na frase sendo que não pode ultrapassar os 70 caracteres... Boa sorte...   (PS: até agora fiz isto e professor já corrigiu e disse que estava certo desta forma);

Program Contador_com_70_caracteres ;
const ct= 70;
type
arr=array [1..ct] of char;
var p: arr;
	  n:integer;

Procedure ler_caracteres (var frase:arr; var k:integer);
Begin
writeln ('introduza uma frase com um max de 70 caracteres');
k:=1;
Repeat 
k:=k+1;  
read (frase [k]);
until (k=70) or (frase[k] = '#');              
End; 

Procedure analizar (frase:arr; j:integer; var palavras:integer);
var i: integer;
begin
palavras:=0;
for i:=1 to j do
if (frase[i]=' ') and (frase[i-1] <> ' ') or ( frase[i] = '#') then    
palavras:=palavras+1;  
End;   
                                                            
Procedure escrever (f:arr; h:integer); 
var i: integer;
Begin
For i:=1 to h do
write (f[i]);
writeln (' o numero de caracteres é ',h);  
end;
Begin
ler_caracteres(p,n);
analizar(p,n,n);
escrever(p,n);
End.  

 

Edited by Guga98
GeSHi
Link to comment
Share on other sites

Boas,

Para fazer exactamente o que o teu professor pede (ler uma frase com um máximo de 70 caracteres) é mais complicado do que pode parecer à primeira vista. Vais ter de controlar algumas teclas especiais do teclado e agir em conformidade. Por exemplo se carregares do backspace tens de apagar o caracter imediatamente atrás do cursor e reduzir o contador.

Por outro lado, se ele quizer algo mais simples será algo do tipo

Var
  frase:string[70];

Tudo o que seja inserido além do caracter 70 será ignorado.

 

Não uses um array, usa uma string. Uma string pode ser tratada mais ou menos como um array.

Vamos a exemplos:

Frase:="Isto é um teste";

Ord(Frase[0]) devolve-te o tamanho máximo da string, neste caso 15

Frase[8] devolve-te o caracter na posição 8, neste caso "u"

mas há uma enorme varidade de procedimento e funções para tratar strings

  • Vote 1
Link to comment
Share on other sites

Só uma breve correcção ao que o @passarito disse: a sintaxe é string[70] e não string(70). Nada de grave, claro, é só um muito breve reparo de um erro que acontece a todos 😉

Posto isto, segundo o enunciado não me parece que seja preciso acompanhar em tempo real o que o utilizador escreve. Se assim for, a figura muda completamente de figura. Vou assumir, portanto, que o utilizador insere uma frase e a análise é feita à posteriori.

Para este caso, bastará uma estrutura de repetição (ciclos for, repeat ou while) na qual se analisa caracter a caracter e um algoritmo simples é executado:

  1. Se o caracter é um espaço e:
    1. Se estamos em "palavra", marcar como "não palavra" e incrementar o contador em 1;
    2. Se estamos em "não palavra", seguir para o caracter seguinte.
  2. Se o caracter não é um espaço, marcar como "é palavra" se ainda não estiver assim marcado.

Ora, isto pressupõe uma variável que indique se estamos actualmente a analisar uma palavra ou não (por exemplo, um boolean), colocando em prática a marcação do estado "palavra" e "não palavra".

Cumprimentos.

 

 

  • Vote 2

Knowledge is free!

Link to comment
Share on other sites

Boas @thoga31 , tudo bem? Há quanto tempo...

Obrigado pela correcção. Realmente, é um erro de palmatória derivado aos anos que não mexo no Pascal.

Quanto ao controlo em tempo real da string, lembrei-me que depois de umas breves aulas de Pascal, uma das primeiras coisas que fizemos foi uma livraria (unit) em que fizemos um procedimento para controlar a introdução de strings. Controlava as setas do cursor, backspace, delete, insert/overwrite, home, end, e até as teclas dos F's para ações especificas.

Como não sei o conhecimento do @Guga98dei-lhe as 2 opções.

 

  • Vote 1
Link to comment
Share on other sites

Em 12/05/2021 às 14:26, Guga98 disse:

Obrigado mas a gente ainda só aprendeu até este ponto e o professor insiste em usarmos um array... e eu não estou a conseguir fazer... mas agradeço bastante a ajuda, vou ver o que consigo fazer com os vossos conselhos... obrigado

Olá gente... editei o programa acima já CERTO;

 

Edited by Guga98
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.