Guga98 Posted May 11, 2021 at 02:10 PM Report Share #622285 Posted May 11, 2021 at 02:10 PM (edited) 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 May 20, 2021 at 03:26 PM by Guga98 GeSHi Link to comment Share on other sites More sharing options...
passarito Posted May 11, 2021 at 02:56 PM Report Share #622286 Posted May 11, 2021 at 02:56 PM 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 1 Report Link to comment Share on other sites More sharing options...
thoga31 Posted May 11, 2021 at 05:25 PM Report Share #622290 Posted May 11, 2021 at 05:25 PM 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: Se o caracter é um espaço e: Se estamos em "palavra", marcar como "não palavra" e incrementar o contador em 1; Se estamos em "não palavra", seguir para o caracter seguinte. 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. 2 Report Knowledge is free! Link to comment Share on other sites More sharing options...
passarito Posted May 11, 2021 at 11:06 PM Report Share #622293 Posted May 11, 2021 at 11:06 PM 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. 1 Report Link to comment Share on other sites More sharing options...
Guga98 Posted May 12, 2021 at 01:26 PM Author Report Share #622303 Posted May 12, 2021 at 01:26 PM 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 Link to comment Share on other sites More sharing options...
Guga98 Posted May 20, 2021 at 11:28 AM Author Report Share #622366 Posted May 20, 2021 at 11:28 AM (edited) 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 May 20, 2021 at 03:11 PM by Guga98 Link to comment Share on other sites More sharing options...
passarito Posted May 22, 2021 at 07:40 PM Report Share #622391 Posted May 22, 2021 at 07:40 PM Boas Assim à primeira vista, quando estás a escrever a frase se carregares na tecla "Backspace" o programa vai falhar Link to comment Share on other sites More sharing options...
Guga98 Posted May 27, 2021 at 08:26 AM Author Report Share #622438 Posted May 27, 2021 at 08:26 AM Como assim um 'backspace' ? Eu testei e ele conta certinho de acordo com os espaços não estou a conseguir entender o que vc quer dizer desculpe... Link to comment Share on other sites More sharing options...
thoga31 Posted May 27, 2021 at 09:41 AM Report Share #622441 Posted May 27, 2021 at 09:41 AM 1 hora atrás, Guga98 disse: Como assim um 'backspace' ? A tecla de retrocesso, a qual apaga um caracter e coloca o cursor uma posição atrás. Experimenta escrever e apagar alguns caracteres antes de passar à análise da frase lida. O programa poderá ter um comportamento que não desejes. Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now