Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
kbox

Pascal

Posts recomendados

como salvo os registros de entrada em um arquivo de texto (*.txt).

E como pesquisar dentro dele depois.

"isso tudo" em PASCAL!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também tenho essa dúvida! Alguém ai sabe?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha...

tô com preguiça de ler o código pra te responder hiueahieuah

eu tenho aqui no meu pc um CAÇA-PALAVRAS q eu fiz ano passado...

ele lê o caça palavras de um arquivo .txt e acha as palavras pré-definidas...

ele usa vááárias dessa funçõeszinhas de navegação em arquivos...

espero q sirvam =)


PROGRAM CacaPalavras (input,output,arq);
{* Programa desenvolvido por Zohlhos do fórum do Clube do Hardware Qualquer dúvida, e-mail-me!. *}
{* Nessa versão, mesmo depois que o programa já tenha achado alguma palavra, ele continua
  a procurando (não a partir da mesma letra)...
  Isso gera mais comparações, porém pode detectar palavras duplicadas... *}
CONST
maxTam = 100; {* Tamanho máximo do lado do tabuleiro. *}
maxPals = 50; {* Número máximo de palavras a serem encontradas *}
maxString = 50; {* Tamanho máximo das palavras a serem encontradas *}
TYPE
arrLetras = ARRAY[0..maxTam +1 ,0..maxTam + 1] OF CHAR;
arrPals = ARRAY[1..maxPals] OF STRING[maxString];
regTab = RECORD
m, n: INTEGER;
ltrs : arrLetras;
END;
regPals = RECORD
p : INTEGER;
pals : arrPals;
END;
VAR
tab : regTab;
palavras : regPals;
arq : TEXT;
i, j, k : INTEGER;

PROCEDURE leTudo(VAR tab : regTab; VAR palavras : regPals);
VAR
i, j : INTEGER;
BEGIN
READLN(arq,palavras.p,tab.m,tab.n);

FOR i := 1 TO palavras.p DO
 READLN(arq,palavras.pals[i]);

{* É colocado tab.m + 1 pois ele lê a troca de linha como um caracter *}
FOR i := 1 TO tab.m + 1  DO
BEGIN
 FOR j := 1 TO tab.n + 1  DO
  READ(arq,tab.ltrs[i,j]);
END;
END;

PROCEDURE zeraCantos(VAR tab : regTab);
VAR
i: INTEGER;
BEGIN
FOR i := 0 TO tab.m + 1 DO
BEGIN
 tab.ltrs[i,0] := '#';
 tab.ltrs[i,tab.n + 1] := '#';
END;
FOR i:= 0 TO tab.n + 1 DO
BEGIN
 tab.ltrs[0,i] := '#';
 tab.ltrs[tab.m + 1,i] := '#';
END;
END;

PROCEDURE ordenaPalavras(VAR palavras : regPals);
{* Método da seleção que ordena as palavras da MAIOR pra MENOR. *}
VAR
i, j, maior : INTEGER;
aux : STRING[maxString];
BEGIN
FOR i := 1 TO palavras.p - 1 DO
BEGIN
 maior := i;
 FOR j := i + 1 TO palavras.p DO
  IF length(palavras.pals[maior]) < length(palavras.pals[j]) THEN
   maior := j;
 aux := palavras.pals[i];
 palavras.pals[i] := palavras.pals[maior];
 palavras.pals[maior] := aux;
END;

END;

PROCEDURE achaPalavra(VAR tab : regTab; VAR palavras : regPals; i,j,k : INTEGER);
VAR
l, ltrsIguais : INTEGER;
achou : BOOLEAN;
BEGIN
achou := FALSE;
{* Diagonal cima/esquerda *}
l := 0; ltrsIguais := 0;
WHILE (tab.ltrs[i-l,j-l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k]))  DO
BEGIN
 ltrsIguais := ltrsIguais + 1;
 l := l + 1;
END;

IF ltrsIguais = length(palavras.pals[k]) THEN
BEGIN
 WRITELN('Achou a palavra ',palavras.pals[k],'!');
 WRITELN('Vai da posição [',i,',',j,'] até a posição [',i-l,',',j-l,'].');
 achou := TRUE;
END;
{* Cima *}
IF not achou THEN
BEGIN
 l := 0; ltrsIguais := 0;
 WHILE (tab.ltrs[i-l,j] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
 BEGIN
  ltrsIguais := ltrsIguais + 1;
  l := l + 1;
 END;

 IF ltrsIguais = length(palavras.pals[k]) THEN
 BEGIN
  WRITELN('Achou a palavra ',palavras.pals[k],'!');
  WRITELN('Vai da posição [',i,',',j,'] até a posição [',i-l,',',j,'].');
  achou := TRUE;
 END;
END;
{* Diagonal cima/direita *}
IF not achou THEN
BEGIN
 l := 0; ltrsIguais := 0;
 WHILE (tab.ltrs[i-l,j+l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
 BEGIN
  ltrsIguais := ltrsIguais + 1;
  l := l + 1;
 END;

 IF ltrsIguais = length(palavras.pals[k]) THEN
 BEGIN
  WRITELN('Achou a palavra ',palavras.pals[k],'!');
  WRITELN('Vai da posição [',i,',',j,'] até a posição [',i-l,',',j+l,'].');
  achou := TRUE;
 END;
END;
{* Direita *}
       IF not achou THEN
       BEGIN
               l := 0; ltrsIguais := 0;
               WHILE (tab.ltrs[i,j+l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
               BEGIN
                       ltrsIguais := ltrsIguais + 1;
                       l := l + 1;
               END;

               IF ltrsIguais = length(palavras.pals[k]) THEN
               BEGIN
                       WRITELN('Achou a palavra ',palavras.pals[k],'!');
                       WRITELN('Vai da posição [',i,',',j,'] até a posição [',i,',',j+l,'].');
                       achou := TRUE;
               END;
       END;
{* Diagonal baixo/direita *}
       IF not achou THEN
       BEGIN
               l := 0; ltrsIguais := 0;
               WHILE (tab.ltrs[i+l,j+l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
               BEGIN
                       ltrsIguais := ltrsIguais + 1;
                       l := l + 1;
               END;

               IF ltrsIguais = length(palavras.pals[k]) THEN
               BEGIN
                       WRITELN('Achou a palavra ',palavras.pals[k],'!');
                       WRITELN('Vai da posição [',i,',',j,'] até a posição [',i+l,',',j+l,'].');
                       achou := TRUE;
               END;
       END;
{* Baixo *}
       IF not achou THEN
       BEGIN
               l := 0; ltrsIguais := 0;
               WHILE (tab.ltrs[i+l,j] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
               BEGIN
                       ltrsIguais := ltrsIguais + 1;
                       l := l + 1;
               END;

               IF ltrsIguais = length(palavras.pals[k]) THEN
               BEGIN
                       WRITELN('Achou a palavra ',palavras.pals[k],'!');
                       WRITELN('Vai da posição [',i,',',j,'] até a posição [',i+l,',',j,'].');
                       achou := TRUE;
               END;
       END;
{* Diagonal baixo/esquerda *}
       IF not achou THEN
       BEGIN
               l := 0; ltrsIguais := 0;
               WHILE (tab.ltrs[i+l,j-l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
               BEGIN
                       ltrsIguais := ltrsIguais + 1;
                       l := l + 1;
               END;

               IF ltrsIguais = length(palavras.pals[k]) THEN
               BEGIN
                       WRITELN('Achou a palavra ',palavras.pals[k],'!');
                       WRITELN('Vai da posição [',i,',',j,'] até a posição [',i+l,',',j-l,'].');
                       achou := TRUE;
               END;
       END;
{* Esquerda *}
       IF not achou THEN
       BEGIN
               l := 0; ltrsIguais := 0;
               WHILE (tab.ltrs[i,j-l] = palavras.pals[k][l+1]) AND (l < length(palavras.pals[k])) DO
               BEGIN
                       ltrsIguais := ltrsIguais + 1;
                       l := l + 1;
               END;

               IF ltrsIguais = length(palavras.pals[k]) THEN
               BEGIN
                       WRITELN('Achou a palavra ',palavras.pals[k],'!');
                       WRITELN('Vai da posição [',i,',',j,'] até a posição [',i,',',j-l,'].');
                       achou := TRUE;
               END;
       END;

END;

BEGIN
ASSIGN(arq,'CacaPalavras.txt');
RESET(arq);
leTudo(tab,palavras);
zeraCantos(tab);
ordenaPalavras(palavras);
FOR i := 1 TO tab.m DO
 FOR j := 1 TO tab.n DO
  FOR k := 1 TO palavras.p DO
   achaPalavra(tab,palavras,i,j,k);

CLOSE(arq);
END.

e aqui vai o arquivo CacaPalavras.txt que é necessário:


16 19 19
modalidade
adeptos
trekking
caminhada
regras
rali
motocicletas
automoveis
normas
percurso
cidades
tensões
terreno
planilha
distancias
velocidade
eselwçgbnfsedadicxr
aedyhçsmatztfnenyth
hkaimhbaasaicnatsid
lgddlnyymmeuesgidhç
imiisaltcrmbãamdaon
ngcleorgrlocosoauzg
aeoçõeaoxornalshtne
ltlssxnasnohlfrroik
puehneõçamaeqbufmse
levreagmtbdarlciola
adeptosderaewnrnvre
natzkoztlnhqdneqedg
adeecibiclnmtapeicn
vijardjsihiogftjsdi
olixariacemlsobaaak
rarnemeiosargerlnek
çdcoflrntgcramycofe
motjdkibodxdetbtçdr
tmçnwekbmynmicwleft

espero q sejam úteis as funçõezinhas q estão aí =)

desculpem se estiver mal-escrito o código

é porque eu escrevi quando eu ainda era um programador iniciante heiuhaiuehai

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom...

andei analisando o código ehiuaheiua

basicamente você vai usar aquelas funções q tão no "main" (o final do meu código) pra abrir os arquivos

daí quando tiver q ler:

READ(arq,argumentos);

quando tiver q escrever:

WRITE(arq,argumetos);

acho q era isso =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

uhmm,... valeu gente! vô tenta faze aqui também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

BEGIN
ASSIGN(arq,'CacaPalavras.txt');
RESET(arq); (AQUIII - ESTÁ DANDO "FILE NOT FOUND")
leTudo(tab,palavras);
zeraCantos(tab);
ordenaPalavras(palavras);
FOR i := 1 TO tab.m DO
FOR j := 1 TO tab.n DO
 FOR k := 1 TO palavras.p DO
  achaPalavra(tab,palavras,i,j,k);

CLOSE(arq);
END.

Eu copiei seu código e tentei rodá-lo no pascal, mas dá esse erro ai nessa linha, ai em cima no código. Porque?

Onde que eu tenho que colocar o arquivo "CacaPalavra.txt"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

njr, da esse erro quando o arquivo que você tenta abrir não existe (no caso o arquivo é 'CacaPalavras.txt').

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas eu criei esse arquivo e coloquei ele dentro da pasta TP, onde tá o arquivo.pas! Copiei ele também pra raiz do disco C:.

E mesmo assim num quer dar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente trocar o 'CacaPalavras.txt' por 'c:\CacaPalavras.txt'

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz isso ai de colocar o "C:\" e continuou não dando certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho como testar aqui, mas lembrei de um detalhe importante, Turbo Pascal, DOS, limite de 8 chars no nome do arquivo:

'c:\CacaPa~1.txt'

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu!! Deu certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema já foi resolvido, mas vale lembrar q esse código foi compilado em FREE PASCAL do LINUX

(e, além disso, no linux os nomes de arquivos são CASE SENSITIVE)

acredito q no windows não sejam...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim "CASE SENSITIVE"?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

CASE SENSITIVE: O compilador diferencia letras maiusculas de minusculas em um codigo.

O pascal não é CASE SENSITIVE, pois não diferencia letras maiusculas de minusculas em seu editor.

Ex: NOME é o mesmo q nome

Já em outras linguagens, como C/C++, são case sensitive, pois diferenciam letras maiusculas d minusculas..

Ex: Nome é diferente de nome, que é diferente de nomE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!