quarta-feira, 26 de outubro de 2011

Escrevendo um trabalho cientifico

Escrevendo um trabalho cientifico


A escrita do projeto de pesquisa é a parte mais gostosa da pesquisa. O autor põe no papel os seus sonhos, ou seja, aquilo que ele gostaria de fazer.
O que você quer fazer?
O que você gostaria de investigar?
Você precisa responder as seguintes perguntas:
O que vou fazer?
Porque vou fazer?
A importância da pesquisa que irei desenvolver?
A inovação associada (contribuição científica e tecnológica)?
Como eu vou desenvolver?
Quando eu vou desenvolver?
Qual o resultado esperado?
Como vou avaliar os resultados?
O que é necessário para o desenvolvimento da pesquisa (Quais e quanto de recurso é necessário)?
A qualificação das pessoas envolvidas no projeto?
Um overview relacionado com o que eu pretendo desenvolver (estado da arte - o que já foi feito por outros pesquisadores).

Dicas de como estruturar um artigo ou tese
(Obs: uma seção/capítulo podem conter 1+ partes)

Para organizar o conteúdo de cada capítulo:
a) Qual é a pergunta? Introdução
b) Como vc procura resposta para pergunta? Material e métodos
c) Quais foram seus achados? Resultados
d) O quensignifica seus achados ? Discursao
e) Revisão da literatura? Estado da arte
f) Conclusões ?

Você achou um problema (introdução), leu muito sobre ele (estado da arte), mostrou como se usa toda parafernália paar resolve-ló (materiais e métodos), mais e só em (resultados) que vc mostra o que conseguiu.


INTRODUCAO
Deve dar ao leitor a informação necessária para entender de que assunto trata a sua tese, sem precisar recorrer a outras fontes.
a) De que assunto trata sua tese?
b) Porque é importante tratar esse assunto ?
c) Como você tratou o assunto?
d) Qual é o seu objetivo ?

Faça uma breve introdução a área de estudos e argumente sobre a sua relevância
Caracterize o problema específico sendo tratado (e sua relevância) na area de estudos
Resuma a abordagem adotada para resolver o problema
Se for uma tese, voce pode resumir as principais contribuições (científicas e tecnológicas) do trabalho
Quando não existir um sumário (como em artigos), inclua um parágrafo sobre a estrutura do texto que se segue

.: Ninguém pode se interessar por um assunto - por mais interessante que seja - se não souber qual e o assunto. Então venda o peixe no inicio.
.: premissas:
O assunto é pouco conhecido ? Melhora a qualidade de vida ? É desconhecido no brasil ? É Polemico ? Existe duvidas específicas ?
.: encare as leituras como invetimento na sua formação.
.:anote o que pensa quando lê
.: seja mais descritivo que critico, porém mostre as contradições e de sua opinião.
.: as razoes que levaram você a determinado método de ser apontadas quando você apresenta o método.
.: se vc desenhou gráficos cite o que fez.
.:

Cenário Motivador
Descreva um cenário realista que evidencie bem o problema sendo abordado e mostre a relevância da pesquisa
(Cuidado para não criar falsas expectativas: não apresente um cenário que vai muito além do problema tratado pelo su trabalho)
No final, resuma as principais hipóteses sobre o ambiente, os atores e o sistema computacional

Fundamentação Teórica
Defina os conceitos e apresente os métodos (possivelmente também tecnologias) que são fundamentais ao entendimento da solução sendo proposta
Quando há várias definições ou métodos alternativos, explique quais irá adotar, e por que?

Trabalhos Relacionados (Estado da Arte)
Mencione outros trabalhos que tratam de problemas similares
Apresente outros trabalhos que tratam do mesmo problema específico e discuta as suas limitações ou, como a solução deles difere da proposta em seu trabalho
Se for possível, apresente os trabalhos relacionados em uma taxonomia (classificação)
Sugiro terminar a seção com um resumo das abordagens ou uma tabela comparativa (trabalhos X características/critérios de comparação).

A solução sendo proposta (naturalmente, com um título adequado)
· Se achar oportuno, começe discutindo os principais requisitos que uma solução deve atender
· Apresente a solução sendo proposta de forma geral
· Discuta os pontos fortes da solução e também as limitações (restrições), e talvez compare-a rapidamente com as abordagens vistas na seção anterior


Implementação (também aqui, com um título adequado)
Descreva como a solução foi (ou será) implementada
Qual é o ambiente de desenvolvimento, e quais foram os motivos para a sua escolha?
Descreva a arquitetura do sistema, seus componentes e interfaces com certo detalhe, possivelmente também os protocolos ou algoritmos mais interessantes. Atenção: a escolha do nível de detalhe é uma questão de bom senso: sugiro somente apresentar o suficiente para garantir o bom entendimento - e apreciação - da complexidade do seu trabalho
Discuta as decisões de projeto e o grau de completude com relação a solução proposta. Por exemplo, quais funcionalidades foram deixadas de lado no protótipo.


DISCURSAO
a) Que significa seus dados e suas estatísticas.
b) Ate que ponto seus resultados estão de acordo com resultados apresentados em trabalhos publicados?
c) Que razão tem você para acreditar que seus resultados comprovam determinada teoria?
d) Que razoes vc tem para acreditar que seus dados Contradizem idéias prevalecentes ou permitem refutar determinada teoria?
e) Que nova hipótese ou teoria vc pode propor para explicar o que foi observado.
f) Que solução mais simples ou que solução mais barata para o problema ?
g) Qual a importância dessa solução ?


Validação (ou Testes)
Lembre-se: faz parte do método científico sempre testar e avaliar a solução proposta, e se possível compara-la com outras soluções (o que no caso de trabalhos de implementação geralmente não é possível). Uma validação pode ser feita através de simulação, desenvolvimento de outros sistemas usando a sua ferramenta, testes de desempenho, testes de usabilidade, ou uma combinação destes.
De qualquer forma, voce deveria apresentar e discutir a adequação do método utilizado para validar ou testar a sua solução, e dizer o que exatamente será avaliado
Apresente as métricas (ou critérios) relevantes que foram/serão medidas
Descreva a metodologia de avaliação e/ou os cenários dos testes executados. Exemplos: configuração de equipamentos/rede, ou parâmetros de simulação
Apresente, (geralmente na forma de gráficos) de forma clara e uniforme os resultados obtidos, e interprete cada um dos resultados, sobretudo resultados inesperados
Argumente de como os resultados obtidos validam a sua solução

Conclusão
· Resuma novamente o problema que foi tratado, a sua solução, e como voce mostrou que a solução é adequada (ou quais vantagens ela tem sobre os outros trabalhos relacionados)
· Se for uma tese, enumere as principais contribuições do seu trabalho, e apresente a lista dos artigos publicados/submetidos relacionados à tese

Futuros Trabalhos
· Discuta as principais extensões, os aprimoramentos necessários, ou os desdobramentos do seu trabalho, tentando ressaltar a relevância detes trabalhos futuros

Lista de Referências
· Relacione somente os trabalhos citados em seu texto
· Cite somente trabalhos relacionados ao seu trabalho
· Cite sempre o artigo original do autor
· Garanta que a maioria das referências é mais recente (onde a definição de recente varia de area para area)
· Garanta que todas as referências estão com os dados completes, e se possível uniformes. Em caso de páginas web, inclua a data do ultimo acesso.

E finalmente…
Revise várias vezes o seu texto, e coloque-se na posição do leitor entendido na area de pesquisa
Garanta que o seu texto apresenta uma forte coesão lógica e uniformidade

quinta-feira, 6 de outubro de 2011

Sites e Programas que ajudam o aprendizado de Algoritmo

Segue abaixo alguns sites que podem auxiliar o aprendizado.

O Site abaixo oferece um curso Online de Algoritmo com direito a certificado de conclusão.

http://www.softblue.com.br/site/curso/id/6/CURSO+LOGICA+DE+PROGRAMACAO+BASICO+ON+LINE+LO06


Os Links Abaixo estão relacionados a programas que auxiliam o aprendizado, através de simuladores.


Webportugol  http://www.univali.br/webportugol

Visualg http://www.apoioinformatica.inf.br/download.htm

AMBAP - Ambiente de Aprendizado de Programação http://www.ufal.br/tci/ambap/

ASA - Ambiente de Simulação e Animação de Algoritmos http://mybloop.com/go/rEJV0D

sexta-feira, 30 de setembro de 2011

5. SISTEMA DE CADASTRO DE CLIENTES USANDO PASCAL

5            SISTEMA DE CADASTRO DE CLIENTES USANDO PASCAL 

Criar um cadastro de Cliente em que este cadastro deve realizar a inclusão, alteração e deve conter também uma forma que eu possa visualizar um cliente já cadastrado, uma maneira de restaurar que foi excluído por acidente, e nesse cadastro não deve ter duplicação de cliente, isto é, se um cliente já foi cadastrado ele não deve ser novamente cadastrado. Usando arquivo binario.
Os arquivos a serem excluídos devem apenas conter um campo que indique se estes foram ou não excluídos, se estão ativos ou inativos.  A marcação deve ser feita com o simbolo “ * “ .
No caso de ter cliente marcado para a exclusão, este deve ser sobreposto por um cliente que necessita ser incluído, sendo no caso do arquivo, não conter nenhum campo marcado, o novo cliente deve ser cadastrado no final do arquivo.

Resolução:
Como característica funcional não deve haver dois clientes com o mesmo código, ou nome. A determinação do código do cliente é realizado pelo programa que  irá capturar o código do ultimo cliente cadastrado e soma um a este valor valor um, de forma que este contenha o valor do código anterior mais  um, o processo de exclusão será feito atraves de uma marca que será colocada em um dos campos do registro, o campo terá o nome de marca, e quando for encontrado nele caracter `*´ é autorizado ao programa o seu  preenchido com um novo cliente. O programa cliente é um programa baseado em procedures de forma que o programa mestre é pequeno e funcional. As operações basica do programa cliente é realizada pelos procedures e funções  devidamente explicados de forma resumida logo abaixo.

FUNÇÃO
testa_arquivo(escolha:integer):boolean;
Realiza testes no arquivo

PROCEDURES
CamposCli
Realiza o processo de captura dos dados do clienet
MostraCli
Realiza a mostragem  dos dado de um determinado registro
SimNao
Realiza a verificação da digitação da letra S ou N na escolha
ExisteCliente
Realiza  a verificação da existência de um cliente especifico
IncluirCli
Realiza as operações necessárias para a inclusão de um novo registro
AlterarCli
Realiza as operações necessárias para a alteração de registro
ExcluiCli
Realiza as operações necessárias para a exclusão de  registro
RestauraCli
Realiza as operações necessárias para restauração de um registro marcado
FinalCli
Realiza a  finalização do programa
IniciaCli
Realiza a abertura dos arquivos
MenuCli
Realiza a escolha  do  item
  
5.1       O PROGRAMA

Programa usa a expressão CRT para  indicar que ele irá usar funçõe  pré-determinadas.
Program Joshua;
Uses
   Crt;
O programa usa ArqCliente, como constante no programa . O  valor constante é aquele que nunca é alterado na execução do programa , ao contrário das variáveis. Esta constante será  usada para determinar o nome do arquivo externo que será usado como nossa base de dados principais o arquivo que será referenciado a um arquivo do tipo  binário, este tipo de arquivo é muito importante pois usando esta idéia podemos usar em qualquer linguagem.
Const
   ArqCliente='Cliente.dat';
O tipo cliente é declarado neste local, e logo abaixo existe um descrição dizendo que será usado um tipo cadeia de caracteres com o nome opção.
type
   Cliente= record
        CodCli:integer;
        NomeCli:String[10];
        EndCli:String[10];
        CepCli:string[12];
        FoneCli:String[12];
        CidCli:String[10];
        EstCli:string[2];
        Civil:string[10];
        NoEspCli:string[10];
        Marca:String[2];
   end;
   Opcao = Set of Char;
Neste módulo chamamos assim será declarada as diversas variáveis usada no decorrer do programa. As características funcionais bem como o papel que ela desempenha no decorre do programa será especificado em cada procedure.
var
   CadCli: File of Cliente;
   Cli1:Cliente;
   Cli2:Cliente;
   FimCli:Boolean;
   ExisteCli:Boolean;

   Oque:Char;
   Oque1:Char;
   Deseja:Opcao;
   Aux:String;
   T:Integer;
   ind:byte;
   Marcado:byte;
   sai:integer;


5.2       FUNCTION testa_arquivo(escolha:integer):boolean;

Objetivo

O objetivo desta função é verificar a existencia do arquivo para posteriormente sabermos se é melhor abrir ou criar.

Solução

Esta função realiza operações de baixo nível, verificando a existência do arquivo, e verificando se este contem erros característico que podem prejudicar a utilização do mesmo

Programa

function testa_arquivo(escolha:integer):boolean;
begin
   if (escolha=1) then
     begin
       {$I-}
       assign(CadCli,ArqCliente);
       filemode := 2;
       Reset(CadCli);
       close(CadCli);
       {$I+}
       testa_arquivo := (IOResult = 0);
   end;
end;


5.3       PROCEDURE CamposCli;

Objetivo
 Para diminuir o tamanho do programa usamos procedures que serão referenciados toda vez que este for necessário
CamposCli deve ter como objetivo informar ao usuario o que está sendo solicitado, usando uma frase para isso. E logo depois capturar  o dado pedido e posto no registro rascunha para ser usado conforme o programa.

Solução

A partícula usada para mostragem é o write, pois através dele enviamos para a tela uma mensagem. Como exemplo podemos escrever usando esta forma logo abaixo, que esta contida no procedure  CamposCli.

Write(´Nome´)

A próxima partícula é o read que será responsável pela leitura do teclado e o seu armazenamento temporário conforme especificado. Podendo ser escrito em nosso exemplo desta forma:

ReadLn(Cli.NomeCLI)

Que significa que será lido o que foi digitado e o conteúdo será armazenado temporariamente no Registro Cli, sendo armazenado na parte NomeCli que é considerado uma variável comum conforme explicações anteriores.

  
Programa

procedure CamposCli;
   begin
     WRITE('Nome: ');
     ReadLn(Cli1.NomeCli);
     WRITE('End:');
     ReadLn(Cli1.EndCli);
     WRITE('Cep:');
     ReadLn(Cli1.CepCli);
     WRITE('Telefone:');
     ReadLn(Cli1.FoneCli);
     WRITE('Cidade:');
     ReadLn(Cli1.CidCli);
     WRITE('Estado:');
     ReadLn(Cli1.EstCli);
     WRITE('Estado Civil:');
     ReadLn(Cli1.Civil);
   end;

  
5.4       PROCEDURE MostraCli;

Objetivo

o objetivo de MostraCli é apresentar na tela o conteudo de um registro de um arquivo, conforme a vontado do usuario.

Solução

A forma encontrada para realizar esta tarefa foi colocar o conteudo de um registro que  fora lido anteriormente em um registro rascunho que em nosso caso é o Cli1, declarado  acima como do tipo cliente, Cli1:Cliente, o processo de mostragem é feito usando o write da sequinte forma.
WRITE('Nome: ');                   Apresenta na tela Nome:
WRITELn(Cli1.NomeCli);      Apresenta na tela o conteudo de Cli1.NomeCli

Programa

procedure MostraCli;
   begin
     WRITE('Nome: ');
     WRITELn(Cli1.NomeCli);
     WRITE('End:');
     WRITEln(Cli1.EndCli);
     WRITE('Cep:');
     WRITEln(Cli1.CepCli);
     WRITE('Telefone:');
     WRITEln(Cli1.FoneCli);
     WRITE('Cidade:');
     WRITEln(Cli1.CidCli);
     WRITE('Estado:');
     WRITEln(Cli1.EstCli);
     WRITE('Estado Civil:');
     WRITEln(Cli1.Civil);
   end;


5.5       PROCEDURE SimNao;

Objetivo

O objetivo que se deseja alcançar com este procedure, é simplificar a  escolha de algo, o tradicional  Sim ou Não em uma pergunta.

Solução

A solução encontrada foi criar um procedure que iria testar uma variável a ser digitada pelo usuário, neste nosso a variável que vai dizer se foi pressionado S ou N  será  a variável T de teste, o procedure é iniciado e a variável T é atribuida o valor 1, apos este fato entramos em uma condição de repetição onde só será permitida a saida desta se o caracter digitado for S ou N  a captura bem como a condição de ser S ou N é especificado na linha

Oque1:=Upcase(ReadKey)

Que se lê Oque1 é atribuido o valor capturado pela leitura do teclado

Until Oque1 in ['S','N'];
Enquanto o valor da variável Oque1 for diferente da cadeia de caracter S ou N repita o processo.

IF Oque1='N'then
Se o valor contido na variável Oque1 for igual a N então atribua o valor de T como sendo 2, senão , isto é no caso de ter sido pressionado S o valor atribuido será 1.

Obs: A variável T é uma variável Global portanto a alteração dela em qualquer parte do programa, altera o seu valor em todo programa. Por esse fator é que podemos usá-la para retornar um valor  de forma global.

Programa

Procedure SimNao;
   begin
     T:=1;
     repeat
       Oque1:=Upcase(ReadKey)
      Until Oque1 in ['S','N'];
         Write(Oque1);
         IF Oque1='N'then
            begin
              T:=2;
            end
          else
            begin
              T:=1;
            end;
   end;


5.6       PROCEDURE ExisteCliente;

Objetivo

O objetivo que se deseja alcançar com a utilização deste, é encontrar a existência  de um cliente igual ao nome especificado por nós contido em uma variável.
Este procedure irá procurar por todo arquivo um registro que contenha o nome especificado, se encontrar dira que existe, senão informará que o cliente não existe no arquivo.

Solução

Como solução a este problema devemos nos lembra da utilização de alguns comando do pascal essencial para o bom entendimento do processo como um todo. Os  comandos são.


seek(CadCLI,0)

Este comando que é encontrado em nosso procedure diz que posicione no arquivo CadCli na primeira posição.

Eof(CadCLI)
Está função testa se a posição atual está no final do arquivo ou em ingles End Of File


Nome do
Arquivo:
CadCli






Indice
Registros




Seek(CadCli,0)
1º posição
0
Dados


1
Dados


2
Dados
EOF(CadCli)

3
Dados
FileSize(CadCli)

4
Em branco

Este procedure usa estes comandos mostrados acima para executar a sua função de busca de um dado do registro igual da variável.
Analizando o código de programa deste procedure encontramos logo no inicio:

ExisteCli:=False


A intenção desta variável ser falsa é pelo fato de se não for encontrado algo na procura ela irá manter esse valor, atribuído a ela, se no decorrer da busca for encontrado algo, esta variável ira ser re atribuida com o valor verdadeiro.

seek(CadCLI,0);
Esta linha simplesmente irá posicionar o ponteiro no primeiro registro do arquivo, que se encontra o indice 0 por assim dizer.
Esta operação é realizada afim de iniciar abusca apartir do primeiro item.

While not Eof(CadCLI)  do
Esta linha é a principal responsável pela busca, Enquanto não for final de arquivo do arquivo CadCli faça.
Toda vez que se fizer uma leitura e esta leitura não representar o final de arquivo esta condição se manterá em um loop até que o último registro do arquivo seja encontrado.

Read(CadCli,Cli2);
Neste instante é feita a leitura do registro conforme a sua posição e o conteúdo que está ativo, isto é apontado é colocado em uma variável rascunho para posteriores verificação.

IF Cli1.NomeCLI = Cli2.NomeCli then
Nesta linha é realizada a verificação  se o conteúdo da variável rascunho Cli1.nomeCli especificado antes da chamada deste procedure for igual a variável rascunho que contem os dados atuais  do registro apontado Cli2.NomeCli.
Se em alguma comparação for encontrado valores iquais na comparação é atribuido a  ExisteCli:=True , desta forma, indicando que existe o cliente.

Programa

Procedure ExisteCliente;
   begin
     ExisteCli:=False;
     seek(CadCLI,0);
     While not Eof(CadCLI)  do
       begin
         Read(CadCli,Cli2);
         IF Cli1.NomeCLI = Cli2.NomeCli then
            Begin
              ExisteCli:=True;
            End;
        end;
    end;

5.7       PROCEDURE IncluirCli

Objetivo

O objetivo a ser alcançado por este procedure é incluir um novo registro no arquivo, sendo que caso haja algum registro marcado para exclusão este novo registro deve ser colocado na posição do registro marcado.

Solução

A solução para este problema pode ser resumido nas partes marcados do programa que de forma simplificada e grosseira mostramos logo abaixo.
repeat
             While not Eof(CadCLI) and (sai<>1) do
                 if Cli1.Marca= '*'then
       
             if marcado >=1 then
                   Seek(CadCli,Marcado);
                   Write(CadCli,Cli1);
              else
                  Seek(CadCli,FileSize(CadCli));
                  Write(CadCli,Cli1);
 Until T<>1;

Em primeiro lugar devemos entender oque desejamos fazer.

Em primeiro devemos saber  se existe registros marcados.
Depois, se existir devemos colocar o novo registro em sua posição, senão colocar no final do registro.

Analisando as partes:

While not Eof(CadCLI) and (sai<>1) do
                 if Cli1.Marca= '*'then
Podemos ler da sequinte forma, enquanto não for final de arquivo e a variável que sair for diferente de 1 faça.
Se No registro rascunha em uma devida posição encontrar Cli1.Marca= ' *', significa que existe registros marcados, no corpo do programa tera recursos que capturarão a posição do marcado.

if marcado >=1 then
                   Seek(CadCli,Marcado);
                   Write(CadCli,Cli1);
              else
                  Seek(CadCli,FileSize(CadCli));
                  Write(CadCli,Cli1);
Se foi encontrado algum registro marcado um contador será acrescido de forma a indicar que existe arquivo marcado quando a variável marcado estiver contendo valores maiores ou igual a 1.
Se existir arquivo marcado a gravação do registro será posicionado na posição do marcado Seek(CadCli,Marcado).
Senão existir nenhum marcado a gravação do registro será feito na última posição de registro do arquivo é será posicionado para Seek(CadCli,FileSize(CadCli)),;
Em ambas as operações, após ser posicionado o registro rascunho será gravado no registro CadCli  Write(CadCli,Cli1).

repeat
.................
................
Until T<>1;
A condição de repetição testa se deseja alterar um novo cliente e enquanto T for diferente de 1 ele continua, a especificação de T  é uma variável global que é alterada pelo procedure SimNão.


O procedure em si se baseia nesta estrutura sendo as implementações para o bom funcionamento mostrado logo abaixo.
Após ser detectado se existe marcados ou não antes de incluir qualquer cliente, executa-se uma rotina para verificar se existe o cliente ou não. Caso exista o cliente, a operação de inclusão é abortada.

ind:=1
Indica que ind é um índice e inicializo ele como sendo 1, indicando ser o primeiro.

seek(CadCLI,0)
Faço com o programa, aponte para o primeiro registro do arquivo, desta forma, tornando valido o valor determinado em Ind:=1;

Marcado:=0
Determino a variável marcado que o valor é zero, essa variável irá realizar atraves de comparação em um loop até final de arquivo em busca de registros marcados para exclusão.

sai:=2
Atribui a variável Sai o valor 2, esta variável é um teste que será feito em cada passagem do enquanto, sendo que para forçar uma saída do programa, eu coloco o valor  1 em sai, pois o programa so fica  em loop Enquanto Sai<>1.


Programa
Procedure IncluirCli;
   begin
     writeln;
     Writeln ('Incluindo');

     repeat
       ind:=1;
       seek(CadCLI,0);
        Marcado:=0;
        sai:=2;
        While not Eof(CadCLI) and (sai<>1) do
          begin
            Read(CadCli,Cli1);
             if Cli1.Marca= '*'then
               begin
                 Marcado:=ind;
                 sai:=1;
               end;
            ind:=ind+1
           end;
           writeln;
           if marcado >=1 then
              begin
                CamposCli;
                Cli1.CodCli:=Marcado;
                Cli1.Marca:=' ';
                ExisteCliente;
                If ExisteCli=False then
                  begin
                   Seek(CadCli,Marcado);
                   Write(CadCli,Cli1);
                  end
                else
                  Begin
                   WriteLn('Cliente j  Cadastrado, Anulada a operacao');
                  end;
              end
            else
              begin
                CamposCli;
                Cli1.CodCli:=FileSize(CadCli);
                Cli1.Marca:=' ';
                ExisteCliente;
                if ExisteCli=False then
                 begin
                   Seek(CadCli,FileSize(CadCli));
                  Write(CadCli,Cli1);
                 end
                else
                  Begin
                   WriteLn('Cliente j  Cadastrado, Anulada a operacao');
                  end;
              end;
            Write ('Deseja Incluir mais Cliente (S/N)');
               SimNao;
            Until T<>1;
   end;

5.8       PROCEDURE AlteraCli;

Objetivo

O objetivo deste é a alteração de um dado regitro mediante pedido de busca.  O cliente existindo e sendo encontrando deve ser mostrado na tela o conteúdo do registro referente a ele e logo após é pedido que se faça as devidas alterações a critério do usuario.

Solução

A solução para este problema pode ser resumido nas partes marcados do programa que de forma simplificada é grosseira, mostramos logo abaixo.

Repeat
    ReadLn(Aux);
    While not Eof(CadCLI) and (t = 1) do
         If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
             seek(CadCLI,IND);
             Write(CadCli,Cli1);
Until T<>1;
A idéia desta estrutura é capturar um valor que o usuario deseja,  atribuindo  este a uma variável auxiliar
Para encontrar o registro certo e não se perder, usamos um ponteiro chamado Ind, e posicionamos este no primeiro registro do arquivo. Realiza-se uma busca até o final do arquivo e se for encontrado este cliente coloca o valor de sua posição no apontador. de forma que a alteração e´ feita da sequinte forma: aponte o arquivo CadCli para a posição que IND contem, seek(CadCLI,IND) logo após, gravamos a variável rascunho que é semehante a uma ficha cadastral de rascunho no  fichário, em nosso programa em nosso arquivo Write(CadCli,Cli1) como no fichário normal. Esta ficha tem que estar no lugar de onde foi tirada.  Em nosso programa forçamos para que isso aconteça usando IND.


Programa
Procedure AlteraCli;
   begin
     Repeat
       WriteLn('Digite o nome do Cliente');
       ClrEol;
       ReadLn(Aux);
       ind:=0;
       seek(CadCLI,0);
       t:=1;
       While not Eof(CadCLI) and (t = 1) do
         begin
           Read(CadCli,Cli1);
           If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
              BEGIN
                WriteLn('Cliente Encontrado');
                MostraCli;
                WriteLN;
                CamposCli;
                ExisteCliente;
                if ExisteCli=False then
                  begin
                    WriteLN('Finalizou');
                    seek(CadCLI,IND);
                    Write(CadCli,Cli1);
                    t:=2;
                 end
                else
                  Begin
                   WriteLn('Cliente j  Cadastrado, Anulada a operacao');
                  end;
              END;
           ind:=ind+1;
         end;
         Write('Deseja Alterar mais arquivos (S/N)');
          SimNão;
    Until T<>1;
   end;


5.9       PROCEDURE ExcluiCli;

Objetivo

Marcar registros para exclusão.

Solução

O procedure ExcluirCli é análogo ao Alteracliente, mais iremos alterar apenas um campo que é de uso interno e o usuário não terá acesso. Este procedure encontrando o cliente a ser excluido,  grava o conteúdo anterior, só que desta vez coloca o caracter ´*´ no campo Marca do registro. Como se pode ver os comandos logo abaixo:
Cli1.Marca:= '*';
seek(CadCLI,IND);
Write(CadCli,Cli1);

Programa

Procedure ExcluiCli;
   begin
     Repeat
       writeln;
       WriteLn('Digite o nome do Cliente a ser excluido');
       ClrEol;
       ReadLn(Aux);
       ind:=1;
       seek(CadCLI,0);
       t:=1;
       While not Eof(CadCLI) and (t = 1) do
          begin
             Read(CadCli,Cli1);
             If (Aux=Cli1.NomeCLI) and (Cli1.Marca <> '*') then
                BEGIN
                  WriteLn('Cliente Encontrado');
                  MostraCli;
                  Cli1.Marca:= '*';
                  WriteLN('Finalizada a exclusao');
                  seek(CadCLI,IND);
                  Write(CadCli,Cli1);
                  t:=2;
                END;
              Ind:=ind+1;
           end;
           Write('Deseja Excluir mais arquivos (S/N)');
           SimNao;
        Until T<>1;
    end;
  
5.10      Procedure MostrarCli;

Objetivo

O objetivo deste é mostrar  os dados de um cliente existente na tela.

Solução

          ReadLn(Aux);
          ind:=1;
          seek(CadCLI,0);
          t:=1;
          While not Eof(CadCLI) and (t = 1) do
               If Aux=Cli1.NomeCLI  then
               MostraCli;

Este procedure é util na consulta de algum cliente em que apenas queremos dar uma olhada em seus dados. Quando pedimos  o nome a ser procurado, é realizada a busca, e ao encontrar o cliente é mostrado o seu conteúdo na  tela usando o procedure MostraCli. O método de busca consiste em pedir a variável auxiliar a ser procurada, definir o índice, colocar o ponteiro no registro número 0 do arquivo, atribuir a variável de teste um valor que permite este entrar no While, e dentro do while, é realizada a busca até que não seja final de arquivo, e a variável teste seja igual a 1.

Programa

Procedure MostrarCli;
   begin
   Repeat
          writeln;
          WriteLn('Digite o nome do Cliente a ser Consultado');
          ClrEol;
          ReadLn(Aux);
          ind:=1;
          seek(CadCLI,0);
          t:=1;
          While not Eof(CadCLI) and (t = 1) do
            begin
              Read(CadCli,Cli1);
              If Aux=Cli1.NomeCLI  then
                 BEGIN
                   WriteLn('Cliente Encontrado');
                   MostraCli;
                   Write('Marca:');
                   WriteLN(Cli1.Marca);
                   WriteLN;
                   WriteLN('Finalizada a Mostragem');
                   t:=2;
                  END;
                Ind:=ind+1;
              end;
              Write('Deseja Consultar mais registros (S/N)');
              SimNao;
       Until T<>1;
   end;

  
5.11      PROCEDURE FinalCli;

Objetivo

O objetivo deste procedure é finalizar o programa.

Solução

A solução deste compreende em fornecer a variável necessária para a saida do loop do menu, bem como realizar o fechamento do arquivo aberto no inicio do programa para ser utilizado.
Programa

Procedure FinalCli;
   begin
          FimCli:=True;
          ClrScr;
          Close(CadCLI);
   end;

5.12      PROCEDURE IniciaCli;

Objetivo.

O objetivo deste procedure é  realizar a abertura dos arquivos necessários no programa, e iniciar a variável que será responsavel em manter o menu em loop até que se deseje sair dele.

Solução.

ok:=testa_arquivo(1);
If ok then
     Assign (CadCli,ArqCliente);
     Reset(CadCLI);
else
     Assign (CadCli,ArqCliente);
     Rewrite(CadCLI);
FimCli:=False;
Logo no inicio é atribuido o valor da função Testa_arquivo. Com o valor capturado é testado, se o arquivo existe isto é, o valor for verdadeiro, o arquivo é aberto com reset que fará com que o arquivo começe a incluir no final do arquivo, se for falso o arquivo é aberto com rewrite, isto é o arquivo será criado, e lógicamente os registros começarão a ser colocados apartir do início do registro.
Logo abaixo atribuimos o valor falso a fim cliente, esta variável será testada pelo Until do Repeat.e enquanto ele for falso ele continuará em loop, isto é não sairá do programa.

Programa
Procedure IniciaCli;
   begin
    ok:=testa_arquivo(1);
    If ok then
       begin
         Assign (CadCli,ArqCliente);
         Reset(CadCLI);
       end
    else
       Begin
        Assign (CadCli,ArqCliente);
        Rewrite(CadCLI);
       end;
FimCli:=False;
end;

5.13      PROCEDURE MenuCli;

Objetivo

O objetivo desta é criar um menu de escolha, onde o usuario definira qual o caminho que ele irá tomar.

Solução

      Deseja:=['I','A','E','F','M'];
       Repeat
       Oque:=Upcase(ReadKey);
       If Not (Oque in Deseja) then
           Write (#7);
     Until Oque in Deseja;
    
      if Oque ='I' then
         IncluirCli;

Este procedure deve nos auxiliar na esolha que devemos fazer, quando realizamos a escolha e ira canalizar a nossa decisão para as rotinas necessárias para isso.
Logo no inicio encontramos, Deseja:=['I','A','E','F','M']; que é uma cadeia de caracter representado pelas letras entre aspas, essa cadeia de caracter, que podemos dizer ser semelhante a um vetor, sua utilidade será explicada logo a frente. Logo após ser definido  esta cadeia de caracter, é solicitado ao usuário digitar a escolha sendo que será aceito apenas as letras contidas nesta cadeia de caracter. Se for digitado um caracter que não consta nesta cadeia, este será ignorado é a indicação de erro será com a emissão de um som.
A escolha se repete ate que o usuário faça a escolha conforme os valores contidos na cadeia de caracter. Quando se sai da escolha, a variável que estará contendo a letra escolhida e o rumo que esta deve tomar é feito mediante condição if Oque ='I' then onde neste caso ela irá chamar o procedure  IncluirCli;.

 Programa

Procedure MenuCli;
   begin
   Deseja:=['I','A','E','F','M'];
     ClrScr;
     WriteLN('Menu de OPcoes');
     WriteLN('(I) - Incluir Cliente');
     WriteLN('(A) - Altera  Cliente');
     WriteLN('(E) - Exclui  Cliente');
     WriteLN('(M) - Mostra  Cliente');
     WriteLN('(F) - Fim');
     WriteLN('Entre com a sua opcao');
     Repeat
       Oque:=Upcase(ReadKey);
       If Not (Oque in Deseja) then
          Write (#7);
     Until Oque in Deseja;
     if Oque ='I' then
        IncluirCli;
     if Oque='A'then
        AlteraCli;
     if Oque='E'then
        ExcluiCLI;
     if Oque='M'then
        MostrarCli;
     if Oque='F'then
        FimCli:=true;
   end;
 5.14      PROGRAMA PRINCIPAL

Objetivo

Este bloco logo abaixo é o programa central em si, pois ele é o primeiro a ser executado, sendo as chamadas dos outros procedures subordinada a ela, desta forma, torna-se o corpo principal do programa.

Solução

A solução encontrada  neste é chamar os procedures responsável pela abertura dos arquivos e manter o menu na tela sempre que necessário, sendo da escolha do usuário a sua saída, e quando se realizar a saída  é necessário fechar os arquivos. Que foram abertos no início.

Programa

Begin
  iniciaCli;
  Repeat;
    MenuCli;
  Until FimCli;
  FinalCli;
end.