Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila de Programação Estruturada , Notas de estudo de Análise de Sistemas de Engenharia

ALGORITMO

Tipologia: Notas de estudo

2011

Compartilhado em 21/09/2011

regina-e-fernando-5
regina-e-fernando-5 🇧🇷

5

(2)

4 documentos

1 / 27

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1. MODULARIZANDO ALGORITMOS
1.1 Introdução
A iden�ficação de problemas mais complexos resultará no desenvolvimento de algoritmos também mais complexos para serem
resolvidos.
Divida as diculdades que tenhas de examinar em tantas partes quantas for possível, para uma melhor solução” René
Descartes
Uma abordagem eciente para este po de problema é a divio do problema mais complexo em problemas mais simples de serem
resolvidos.
Estetodo é conhecido como modularização, onde um grande problema é divido em problemas menores e a solução destes problemas
menores resultará na solução do problema maior (mais complexo). Estes programas menoreso denominados sub-ronas,
subprogramas ou sub-algoritmos.
Um subprograma
é um trecho de
um algoritmo
(futuro programa) maior (mais complexo) que realiza qualquer operação computacional estudada até agora (entrada, processamento, saída). Ele
efetua parte de uma tarefa que um algoritmo maior deverá executar. O algoritmo que aciona um subprograma é chamado de algoritmo principal
daquele subprograma.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b

Pré-visualização parcial do texto

Baixe Apostila de Programação Estruturada e outras Notas de estudo em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

MODULARIZANDO ALGORITMOS

1.1 Introdução

A iden�ficação de problemas mais complexos resultará no desenvolvimento de algoritmos também mais complexos para serem

resolvidos.

Divida as dificuldades que tenhas de examinar em tantas partes quantas for possível, para uma melhor solução ” René Descartes

Uma abordagem eficiente para este �po de problema é a divisão do problema mais complexo em problemas mais simples de serem

resolvidos.

Este método é conhecido como modularização , onde um grande problema é divido em problemas menores e a solução destes problemas

menores resultará na solução do problema maior (mais complexo). Estes programas menores são denominados sub-ro�nas,

subprogramas ou sub-algoritmos.

Um subprograma é um trecho de um algoritmo ( futuro programa ) maior ( mais complexo ) que realiza qualquer operação computacional estudada até agora ( entrada, processamento, saída ). Ele efetua parte de uma tarefa que um algoritmo maior deverá executar. O algoritmo que aciona um subprograma é chamado de algoritmo principal daquele subprograma.

Exemplo de um código fonte com procedimento.

onde: nome é o iden�ficador associado ao procedimento.

Sobre procedimentos:

• Você pode declarar quantos procedimentos quiser;

• Procedimentos podem ter variáveis internas (locais), que, como os parâmetros, só existem enquanto o procedimento está ativo.

Também podem ter suas próprias constantes e types.

• Um procedimento pode chamar outro procedimento;

• Procedimentos podem ter nomes de parâmetros iguais aos de outros procedimentos ou a variáveis globais;

Program CALCULA_MÉDIA; {sem procedimento} var nota1,nota2,media : real; begin write ('Digite a primeira nota: '); readln (nota1); write ('Digite a segunda nota: '); readln (nota2); media := (nota1 + nota2) / 2; {calcula a media} Writeln ('Media = ',media,4:1) end.

Mostraremos agora o mesmo programa, u�lizando um procedimento.

Program CALCULA_MÉDIA; {usando procedimento} var NOTA1,NOTA2,MEDIA : real;

{declaração do procedimento} PROCEDURE Ler_Notas; begin write ('Digite a primeira nota: '); readln (NOTA1); write ('Digite a segunda nota: '); readln (NOTA2); end;

{Programa Principal} begin

LER_NOTAS; { a�vação do procedimento LER_NOTAS} MEDIA := (NOTA1 + NOTA2) / 2; {calcula a media} Writeln ('Media = ',MEDIA,4:1) {escreve o resultado} end.

1.3 FUNÇÃO

As funções, embora bastante semelhantes aos procedimentos, têm a caracterís�ca especial de retornar ao programa que as chamou um valor associado ao nome da função. Esta caracterís�ca permite uma analogia com o conceito de função da Matemá�ca.

FUNÇÕES PRÉ DEFINIDAS : funções que já estão prontas e já está no compilador da linguagem. Abs (-2.3) = 2. Frac (123.45) = 0. Sqr (5) = 25 Sqrt (25) = 5

Declaração:

FUNCTION nome : �po; Declaração dos objetos locais à função (var, const, types..) BEGIN Comandos da função .... END;

onde: nome é o iden�ficador associado à função. �po é o �po da função, ou seja, o �po do valor de retorno.

Assim como procedimentos, podemos criar funções, segundo uma estrutura similar.

Funções definidas pelo programador são semelhantes aos procedimentos nos seguintes aspectos:

Cons�tuem-se em um bloco de instruções com um nome que as iden�fica;

Podem possuir seção local de dados;

Podem receber parâmetros por valor ou por referência;

São executadas somente quando chamadas.

As diferenças:

Retornam um valor ou resultado, cujo �po deve ser especificado na declaração da função;

No bloco de código da função, devemos atribuir um valor a ser retornado;

Somente podem ser chamadas em expressões.

Mostraremos agora o mesmo programa, u�lizando um procedimento para ler os valores e uma função para efetuar o cálculo da média.

Program CALCULA_MÉDIA; {usando procedimento e função} var NOTA1,NOTA2 : real; { Não existe mais a variável média }

{declaração do procedimento} PROCEDURE Ler_Notas; begin write ('Digite a primeira nota: '); readln (NOTA1); write ('Digite a segunda nota: '); readln (NOTA2); end;

{declaração da função} FUNCTION Media :real ; Var X : real; begin X := (NOTA1 + NOTA2) / 2; sem a variable X { MEDIA := (NOTA1 + NOTA2) / 2; } MEDIA := X; end;

{Programa Principal} Begin {a�vação do procedimento LER_NOTAS} LER_NOTAS ; Writeln('Media = ',MEDIA :4:1) end.

Program Parametro;

Var a ,b : real;

Procedure SOMA ( x, y: real ); { Parâmetros Formais }

Var tot: real;

Begin Tot := x + y; Writeln (´O valor total é ´,Tot); End;

Begin a := 5; b := 6;

SOMA (a, b); { Parâmetros Real }.

Writeln (‘Valor de A = ‘,a:2:2, ‘ de B = ‘,b:2:2); End.

1.6 PASSAGEM DE PARÂMETROS

Os parâmetros são um canal de comunicação entre uma ro�na chamadora e uma chamada.

Dentre os modos de passagem de parâmetros, podemos destacar:

VALOR e REFERÊNCIA.

PASSAGEM POR VALOR

Na passagem de parâmetros por valor , as alterações feitas nos parâmetros formais, dentro do subprograma, não se refletem nos parâmetros reais. O valor do parâmetro real é copiado no parâmetro formal, na chamada do subprograma. Assim, quando a passagem é por valor, isto significa que o parâmetro é de entrada.

PASSAGEM POR REFERÊNCIA

Na passagem de parâmetros por referência , a toda alteração feita num parâmetro formal corresponde a mesma alteração feita no seu parâmetro real associado. Assim, quando a passagem é por referência, isto significa que o parâmetro é de entrada-saída.

Na linguagem Pascal, a declaração dos procedimentos e funções com parâmetros se diferencia da forma já apresentada apenas pela inclusão da lista de parâmetros formais no cabeçalho. Esta deve vir entre parênteses e cada parâmetro deve ter o seu �po especificado. A forma geral é:

PROCEDURE nome ( lista de parâmetros formais )

FUNCTION nome ( lista de parâmetros formais ) : �po

A lista de parâmetros formais tem a seguinte forma:

Iden�ficador ( parâmetro1 : �po; parâmetro2 : �po; ...; parâmetro n : �po )

Exemplos da lista de parâmetros:

procedure PROC ( X,Y,Z :integer ; K : real )

func�on FUNC ( A,B: real; C: string ) : integer

Na forma apresentada, a passagem dos parâmetros será por valor. Para se u�lizar a passagem por referência , deve-se acrescentar a palavra VAR antes do nome do parâmetro.

EXEMPLO:

Procedure PROC( A : integer ; var B , C : integer )

Na chamada de procedimentos ou funções u�lizando parâmetros, devemos acrescentar após o nome do procedimento ou função uma lista de parâmetros reais (de chamada), os quais devem ser do mesmo �po e quan�dade dos parâmetros formais declarados.

O exemplo a seguir demonstra a diferença entre a passagem de parâmetros por referência e a passagem de parâmetros por valor:

Program EXEMPLO_PASSAGEM_PARÂMETROS;

var

N1,N2 : integer;

Procedure PROC_Val_Ref ( N1 : integer ; VAR N2 : integer);

begin N1 := 2 * N1; N2 := 2 * N2; end;

begin N1:= 5 ; N2 := 5; PROC_Val_Ref ( N1 , N2 ); writeln(N1); {será exibido o valor 5} writeln(N2); (será exibido o valor 10} end.

2. UTILIZANDO ARRAYS COMO PARÂMETROS

Nem sempre os �pos de dado disponíveis na linguagem atendem perfeitamente às necessidades do programa. Uma caracterís�ca que dis�ngue o Pascal de outras linguagens é a possibilidade que o programador tem de declarar seus próprios �pos de dado. Uma vez que declarou o novo �po, pode declarar quantas variáveis quiser daquele �po.

Declaramos um �po de dado através da palavra reservada type , normalmente antes da seção var , embora possa vir também depois.

O Turbo Pascal não permite a declaração normal de um array como parâmetro formal em uma função ou procedimento. Porém, podemos u�lizar o recurso da criação de novos �pos de dados disponível na linguagem Pascal. Veja o exemplo a seguir:

type

Vetor = array [1..20] of integer;

Nome = string [30];

(* A par�r deste instante, além dos �pos de dados pré-definidos, podemos também u�lizar os novos �pos definidos vetor, nome*)

Após essas declarações, caso você necessite declarar uma variável do �po array com 20 elementos inteiros e uma string de 30 posições, basta fazer o seguinte:

var Vet_int : Vetor ; Nome 0 0 1 F _p : Nome

Desta forma, para u�lizar um array como parâmetro formal em uma função ou procedimento, você deve declará-lo na lista de parâmetros com o nome do �po criado na declaração type.

Exemplos:

Type

Cor = (azul, vermelho, branco, verde, amarelo); Dia_u�l = (segunda, terça, quarta, quinta, sexta); Linha = string[80]; Idade = 1..99;

EXERCÍCIO RESOLVIDO

Escrever um programa para ler um vetor de 50 elementos inteiros e determinar o valor médio dos seus elementos (u�lizando um procedimento para ler um vetor e uma função para calcular a soma dos elementos do vetor).

Program CALCULA_MÉDIA; type

Vetor = array[1..50] of integer;

var VET : Vetor ; MEDIA : integer;

Procedure LEIA_VETOR (var V:VETOR); var I : integer; begin for I:=1 to 50 do readln(V[I]); end;

Func�on SOMA_VETOR (V:VETOR) : integer; var I,S : integer; begin S := 0; for I:=1 to 50 do S := S + V[I]; SOMA_VETOR := S; end;

{ Programa principal}

Begin {leitura do vetor} LEIA_VETOR(VET); {cálculo da média} MEDIA := SOMA_VETOR(VET) div 50; {exibição do resultado} writeln(MEDIA); End.

Exercícios

1) Escreva um procedimento chamado SINAL que receba como parâmetro um valor N inteiro e escreva a palavra POSITIVO se N for um número maior que zero, NEGATIVO se N for menor que zero, ou ZERO se N for igual a zero. Escreva um programa que leia um número inteiro e, usando o procedimento SINAL, mostre se ele é maior, menor ou igual a zero.

2) Escreva uma função que receba um vetor V de 30 elementos inteiros, e retorne o maior elemento do vetor V. E um procedimento para carregar o vetor. Faça um programa que chame o procedimento e carregue o vetor e depois u�lize a função para achar o maior elemento, que deverá ser mostrado no programa principal.

3) Suponha que uma indústria produza quatro ar�gos diferentes. Para cada ar�go se tem as quan�dades produzidas em cada dia da semana conforme a tabela abaixo:

Semana

Ar�go

Segunda Terça Quarta Quinta Sexta Sábado

Chupeta 301 690 345 823 467 132

Fralda 503 540 920 470 555 645

Xampu 678 732 250 140 289 667

Talco 566 454 589 667 612 789

Faça um algoritmo que:

  • Crie e carregue uma matriz com estes dados (procedimento);
  • Mostre o ar�go mais produzido na terça feira ; (função)
  • Calcule e mostre média do ar�go 3 no período. (função)

4) Faça um algoritmo que carregue uma matriz A4x4 (através de um procedimento ) e calcule e imprima:

  • o somatório de todos os elementos da matriz (função);
  • qual o maior elemento da diagonal principal e sua localização (procedimento) ;
  • o menor elemento da terceira coluna (função);

5) Escreva uma função que receba um valor X do �po inteiro e um vetor V de 80 elementos inteiros, e retorne o número de ocorrências de X dentro do vetor V.

6) Escreva um procedimento chamado PAR_IMPAR que receba um vetor de 100 elementos inteiros e retorne a quan�dade de números pares e de números ímpares con�das no mesmo. Faça um programa que leia 100 valores inteiros (armazenando em um vetor) e, usando o procedimento PAR_IMPAR, determine e exiba a quan�dade de números pares e de números ímpares.

Begin clrscr; Writeln (' Digite os dados da pessoa (nome e idade) ' ); Readln (cadastro.nome); Readln (cadastro.idade);

Writeln('---------------');

Writeln (cadastro.nome); Writeln (cadastro.idade); Readln; End.

2) Program reg2; { exemplo de uso de registros }

Uses crt;

Var i : integer;

cadastro : record nome : string[30]; endereco : string[30]; cep : string[10]; bairro : string[20]; fone : string[20]; end;

Begin i:= 1; While i <= 5 do begin clrscr; Writeln('Digite o (nome): ' ); Readln(cadastro.nome); Writeln('Digite o (endereco): ' ); Readln(cadastro.endereco); Writeln('Digite o (cep): ' ); Readln(cadastro.cep); Writeln('Digite o (bairro): ' ); Readln(cadastro.bairro); Writeln('Digite o (fone): ' ); Readln(cadastro.fone); Writeln('-----------------------'); Writeln(cadastro.nome); Writeln(cadastro.endereco); Writeln(cadastro.cep); Writeln(cadastro.bairro); Writeln(cadastro.fone);

Writeln('-----------------------');

i:= i + 1; Readln;

end; End.

3.2 Tipos

Os “�pos” são �pos de dados criados pelo programador. Os �pos podem ser do �po registro e podem, ainda, serem u�lizados dentro de outros �pos. Para isso deve-se declarar e u�lizar hierarquicamente, fazendo menção aos mais externos. Por exemplo:

Tipo End = registro Rua : cadeia; Numero : inteiro; Bairro : cadeia; Cidade : cadeia; Cep : cadeia; fim;

FichaCadastral : registro

RG : cadeia;

Nome : cadeia;

Idade : inteiro;

Salario : real;

Endereco : End;

fim;

Var

Ficha : FichaCadastral; ...

As variáveis declaradas com �pos de dados registro são chamadas de variáveis compostas heterogênias.

Exemplo de Uso de Tipos Registro (Types):

Program Tipo; {exemplo de definicao e u�lizacao de �pos - registros }

Uses crt;

Type endereco = record rua : string[30]; num : integer; bairro: string[20]; cep : string[10]; end;

Var

i : integer; cadastro : record nome : string[30]; ender : endereco; fone : string[20]; end; Begin

i:= 1; While i <= 5 do begin clrscr; Writeln('Digite o (nome): ' ); Readln(cadastro.nome); Writeln('Digite a (rua): ' ); Readln(cadastro.ender.rua); Writeln('Digite o (numero): ' ); Readln(cadastro.ender.num); Writeln('Digite o (bairro): ' ); Readln(cadastro.ender.bairro); Writeln('Digite o (cep): ' ); Readln(cadastro.ender.cep); Writeln('Digite o (fone): ' ); Readln(cadastro.fone);

Writeln('-----------------------');

Writeln(cadastro.nome); Writeln(cadastro.ender.rua); Writeln(cadastro.ender.num); Writeln(cadastro.ender.bairro); Writeln(cadastro.ender.cep); Writeln(cadastro.fone);

Writeln('-----------------------');

i:= i + 1; Readln; end; End.

end;

Readln; End.

Exercícios

1) Dado um conjunto de 20 registros armazenados em um vetor, cada um contendo o nome e a idade de uma pessoa, faça um algoritmo que imprima o nome das pessoas que �verem idade maior que a idade média das pessoas.

2) Considerando o registro de uma mercadoria de uma loja contendo as seguintes informações: código, nome, preço e estoque, fazer um programa que, dado o registro de 50 mercadorias, leia um código exiba o nome, preço e estoque da respec�va mercadoria.

3) Escreva um programa que armazene um cadastro de 50 pessoas com os seguintes dados: nome, telefone e data de nascimento (dia, mês, ano) e realize consultas da seguinte forma:

  • Leia o número de um determinado mês (1 a 12). Obs: a leitura do mês 0 encerra as consultas.
  • Exiba o nome, o telefone e o dia do aniversário das pessoas daquele respec�vo mês.

Obs: Como uma pessoa pode possuir mais de um telefone, a sugestão é criar um vetor para o campo telefone.

4) Escrever um algoritmo para ler 10 profissionais (código, nome, data de nascimento (dia, mês e ano), idade e altura). Uma vez cadastrados, este algoritmo devera, encontrar e imprimir o profissional mais idoso e o mais novo, o mais alto e o mais baixo e a data de nascimento deles. Usar �pos. Usar técnicas de modularização.

5) Uma indústria faz a folha mensal de pagamentos dos seus 80 empregados baseada no seguinte:

  • Existe uma tabela com os dados de cada funcionário (matrícula, nome e salário bruto);
  • Escreva um programa que leia e processe a tabela e emita, para cada funcionário, seu contracheque, cujo formato é dado a seguir:

Matrícula: Nome: Salário Bruto: Dedução INSS: Salário Liquido:

  • (^) Calcular o desconto do INSS

SALÁRIO-DE-CONTRIBUIÇÃO (R$) ALÍQUOTA (%)

Até 1.040,22 8 De 1.040,23 até 1.733,70 9 De 1.733,71 até 3.467,40 11 Acima de 3.467,41 R$ 381,

  • O salário líquido é a diferença entre o salário bruto e a dedução do INSS.

7) Em certo município, vários proprietários de imóveis estão em atraso com o pagamento do IPTU. Escrever um programa que calcule e escreva o valor da multa a ser paga por estes proprietários, considerando que:

  • Os dados de cada imóvel (iden�ficação, valor do imposto e número de meses em atraso) estão à disposição para leitura;
  • As multas devem ser calculadas no valor de 1% por mês de atraso.
  • O úl�mo registro lido, que não deve ser considerado, contém iden�ficação do imóvel igual a XXX;
  • O programa deve exibir: a iden�ficação do imóvel, valor do imposto, número de meses em atraso e multa a ser paga.

4. ARQUIVOS

Arquivos são estruturas de dados armazenadas fora da memória principal do computador, geralmente em meios magné�cos como fitas, discos ou disquetes.

Os arquivos são usados principalmente em dois casos. Primeiro, quando as informações são muito numerosas para caber na memória principal do computador. Segundo, quando há necessidade de armazenamento permanente de informações, pois o conteúdo da memória principal do computador geralmente se perde, quando se executa outro programa ou quando se desliga o computador. Entende-se por arquivo uma coleção de dados , onde os mesmos possuem alguma relação entre si. Por exemplo, o conjunto de dados sobre os alunos do Curso de Análise. Dentre estes dados sobre os alunos, temos:

  • MATRÍCULA (string,5);
  • NOME (string,30);
  • ENDEREÇO (string,30);
  • MEDIA_ANUAL (real,5,2).

Cada conjunto de dados sobre um determinado aluno recebe o nome de registro. Note-se que um registro é composto por �pos de dados diferentes. Cada dado que compõe o registro (MATRÍCULA, NOME etc) é dito ser um campo.

A figura a seguir, ilustra a relação existente entre campo, registro e arquivo:

Arquivo

C 1 C 2 ... C (^) n

C 1 C 2 ... C (^) n

.

.

C 1 C 2 ... C (^) n

.

.

.

C 1 C 2 ... C (^) n

Um arquivo necessita de um meio de armazenamento que sirva de depósito (suporte) para seus dados. Os suportes mais comuns para os arquivos são os discos flexíveis, os discos rígidos (winchesters) e as fitas magné�cas. Esses arquivos podem ser de 3 �pos: seqüencial , indexado e rela�vo. Essa diferenciação em �pos, está associada a algumas restrições quanto ao acesso aos dados guardados nesses arquivos. Em nosso caso, trataremos apenas com arquivos de organização seqüencial. O arquivo seqüencial é aquele cujo acesso aos seus dados só pode ser feito de forma seqüencial, isto é, um registro de ordem N está localizado após um outro de ordem N-1 e antecede um de ordem N+1.

A linguagem Pascal permite usar dois �pos de arquivos:

4.1 Binário

Usam o sistema binário de numeração para armazenar tanto as informações numéricas quanto as informações literais (através de códigos numéricos dos seus caracteres.

Por exemplo, 65 é armazenado como o byte 01000001. Esta mesma representação pode ser u�lizada tanto para o valor numérico 65 como para o caractere 'A', cujo código ASCII é 65.

Um arquivo binário é formado por uma seqüência de registros , todos do mesmo �po, que por sua vez são formados por campos.

4.2 Texto

Armazenam todas as informações, numéricas ou literais, através de códigos de seus caracteres (ASCII).

Por exemplo, o valor numérico 65 é armazenado através dos caracteres '6' e '5', cujos códigos ASCII são 54 e 53., representados com os bytes 00110110 e 00110101.

Os caracteres de um arquivo �po texto são agrupados em linhas , que por sua vez são agrupadas em páginas. O caractere de código 13 indica o fim de linha, o de código 12 o fim da página e o de código 26 o fim de arquivo.

A organização dos arquivos do �po texto é sempre seqüencial , isto é, os caracteres são colocados um após o outro.

REWRITE(ALUNOS);

CLOSE - Este procedimento permite que se feche um arquivo anteriormente aberto, só sendo permi�do o fechamento de um arquivo por vez. Sua sintaxe:

CLOSE (VAR arquivo : FILE);

Exemplo:

CLOSE(ALUNOS);

EXERCÍCIO RESOLVIDO

Escreva um programa crie um novo arquivo chamado ARQ_ALUNOS.DAT contendo os campos Nome e Idade, e grave no mesmo 5 registros lidos pelo teclado.

Program Grava_registro;

uses crt;

type registro_alunos = record nome :string[10]; idade :integer; end; var arq_alunos : file of registro_alunos; { arquivo �sico } alunos :registro_alunos; { registro de alunos } i:integer;

begin assign (arq_alunos,'c:\binha\alunos.dat'); rewrite (arq_alunos); { cria um arquivo novo } clrscr; for i := 1 to 5 do begin write (' Digite o nome do aluno '); readln(alunos.nome); write (' Digite o idade do aluno '); readln(alunos.idade); write (arq_alunos,alunos); { grava registro} end; close (arq_alunos); end.

Nos comandos apresentados, vemos uma deficiência: enquanto o RESET apenas nos permite a abertura de arquivos já existentes, o REWRITE apenas abre arquivos novos ou destrói um possível conteúdo anterior. Como poderemos então resolver essa situação? Bem, existe um modo rela�vamente simples, que consiste no uso de uma dire�va de compilação para checagem de erros de entrada e/ou saída, {$I}. Esta dire�va retorna um código de erro em uma função do Turbo chamada IORESULT. Vejamos um exemplo prá�co da u�lização da dire�va $I:

Program TESTA_ABERTURA;

Uses crt;

Type REG = record COD : string[6]; DESC : string[20]; end; Var ARQ : file of REG; NOMEARQ : string;

Begin clrscr; write('Entre com o nome do arquivo'); readln(NOMEARQ); assign(ARQ,NOMEARQ); {$I-} reset(ARQ); {$I+} if ioresult = 0 then

writeln('Arquivo aberto sem problemas') else begin rewrite(ARQ); writeln('Arquivo inexistente. Novo arquivo criado'); end; close(ARQ); writeln('Arquivo fechado'); readkey; End.

Porém, para manipularmos um arquivo não basta apenas abri-lo e fechá-lo. Temos, na maioria das vezes, que ler uma informação con�da nele, outras vezes registrar informações novas, ou ainda fazer alterações nas informações já existentes. Vejamos então os comandos que nos permitem tais tarefas:

WRITE - Este procedimento, além de ser usado para exibir dados no vídeo, pode ser usado para gravar informações em um arquivo. Após a execução deste procedimento, o ponteiro de registros do arquivo será deslocado um registro para a frente. Sua sintaxe:

WRITE (arquivo : FILE; registro : RECORD);

Exemplo:

WRITE(ARQ,REG);

EOF - Esta função nos retorna o valor TRUE quando for encontrada a marca de fim de arquivo. Sua sintaxe:

EOF (VAR arquivo : FILE) : boolean;

Exemplo:

FIM := EOF(CADASTRO);

READ - Como já vimos anteriormente, este procedimento permite que atribuamos a uma variável um valor ob�do por um disposi�vo de entrada. Esse disposi�vo pode ser também um arquivo. Após a execução deste procedimento, o ponteiro de registros do arquivo será deslocado um registro para a frente. Sua sintaxe:

READ (arquivo : FILE; registro : RECORD);

Exemplo:

READ(CADASTRO,REGISTRO);