Algoritmos e Estruturas de Dados II

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Programação em Java Prof. Maurício Braga
Linguagem de Programação I
Prof.: Sergio Pacheco Linguagem PHP Prof.: Sergio Pacheco 1.
Estruturas de Repetição
Prof. Heloise Manica Paris Teixeira
Prof. Luis Otavio Alvares
Linguagem de Programação 1
Prof.: Sergio Pacheco Linguagem PHP Prof.: Sergio Pacheco 1.
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
{Exemplo de um programa PASCAL} uses CRT; var
Sincronização e Comunicação entre Processos
Robson Godoi / Sandra Siebra
Tratamento de Ficheiros
Algoritmos e Programação Thyago Maia Tavares de Farias Aula 25.
O Portal do Estudante de Computação
O Portal do Estudante de Computação
O Portal do Estudante de Computação
GAUSS COM PIVOTEAMENTO
Paradigmas de programação
João Lucas de Oliveira Torres
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
O Portal do Estudante de Computação
LISTAS DUPLAMENTE ENCADEADAS
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula 4 Prof. Naércio Filho Técnico em Informática
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
PROGRAMAÇÃO ESTRUTURADA II
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Introdução a Programação COM 100
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Introdução ao uso de vatores na linguagem PASCAL.
DAVID ANDERSON CARDOSO DANTAS
Aula Prática 12 Operações com Arquivos Monitoria
Computação Eletrônica
Lógica de Programação/ Algoritmos Engenharia Produção 2014
C APÍTULO II Armazenando e recuperando dados. A RMAZENANDO E RECUPERANDO DADOS Agenda Salvar dados Abrir um arquivo Criar e gravar Fechar Ler Bloquear.
Aula 13 - Armazenamento de Dados em Arquivos
23/08/2004 Centro de Informática - UFPE Projeto 2 de PLP Equipe: Daniel Leitão (dal) Dante Torres (dgt) Pablo Sampaio (pas) Linguagem Imperativa 2 com.
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Arquivo.
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Ponteiros
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Linguagem Pascal Prof. Sérgio Rodrigues.
Linguagem PASCAL1 Módulo 3 Estrutura de Dados.. Linguagem PASCAL2 Arrays (“Variáveis compostas homogêneas”) n Arrays unidimensionais: identificador: array.
Lógica Estruturada Aplicada
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
ARQUIVOS.
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
Aula 11 – 24/05/2014 Arquivos textos. Manipulação de arquivos texto O armazenamento de dados em arquivos é muito utilizado em aplicações pois os dados.
Aula Prática 11 Operações com Arquivos Monitoria
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Algoritmos e Estruturas de Dados
Operações com Arquivos Monitoria A estrutura FILE  É como um tipo de dado, mas não é um tipo propriamente dito  Definido no arquivo cabeçalho.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Capítulo 10: Interface de Sistemas de Arquivos.
Aula Prática 11 Operações com Arquivos Monitoria
Estruturas de Dados + Algoritmos = Programas
Técnicas de Programação I
Arquivos. Motivação Imagine dar entrada (digitar), a cada execução do programa, em todos os dados de um sistema. por exemplo, todos os registro de livros.
Salvando em Arquivos. Arquivos Um arquivo pode estar associado a qualquer dispositivo de entrada e saída, como por exemplo: teclado, video, impressora,
Programação de Computadores - 1
Introdução à Programação
© Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Adriana Libório Fernandes Lins Arthur Cavalcanti.
Felipe Nunes Flores – Programa de Educação Tutorial.
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Arquivos textos (text)
Transcrição da apresentação:

Algoritmos e Estruturas de Dados II ARQUIVOS Rodney Carneiro

Arquivos Permitem o armazenamento permanente dos dados, ao contrário das variáveis, que eram armazenadas em memória principal; Exemplos: informações bancárias, dados de uma companhia telefônica, um simples cadastro de clientes; Um arquivo é uma estrutura criada em disco, ou em uma unidade de armazenamento permanente;

Arquivos Um arquivo é uma estrutura de dados formada por um conjunto de registros, que por sua vez, são possuem campos de informação; Um registro não ocupa uma posição fixa dentro de um arquivo, pois este não possui tamanho pré-estabelecido (tamanho variável) Arquivo Registros Campos ... Disco

Arquivos Então podemos enxergar um arquivo como uma coleção de registros, que por sua vez armazenam um conjunto de campos relacionados à um mesmo item de dado; Um mesmo arquivo pode ser manipulado por algoritmos diferentes. Desta forma, um arquivo pode ser aberto por diferentes programas, desde que os mesmos estejam preparados para isto;

Estrutura Física de um Arquivo Quando um arquivo FILE é criado, o mesmo possui a seguinte estrutura: A posição física corresponde a um número que é gerado automaticamente no instante que uma informação qualquer é incluída no arquivo. Este número corresponde ao “Endereço” da informação no arquivo, sendo que é através deste Endereço que é possível recuperar qualquer informação, sem precisar percorrer todo o arquivo em busca da mesma, ao invés disto basta fornecer o número da posição física da informação no arquivo.

Arquivos A primeira coisa que deve ser feita para se criar um arquivo, é declará-lo. E para isto, é preciso definir de que tipo são os registros que ele armazenará; Exemplo: Criação de um arquivo para armazenar informações de clientes (nome, telefone, endereço e cidade); Type cliente = record codigo : integer; nome : string[20]; telefone : string[14]; endereco : string[30]; cidade : string[20]; end; Var aux: cliente; arq_nome: file of cliente;

Achar posição da inserção Arquivos Depois da criação de um arquivo, ele pode ser utilizado de duas formas: O arquivo pode ser consultado, fornecendo informações previamente gravadas nele (leitura); O arquivo pode ser acrescido de novas informações (escrita ou gravação); Os algoritmos básicos envolvidos nestas duas circunstâncias são: Consultar arquivo Acrescentar arquivo Abrir arquivo Achar item procurado Achar posição da inserção Copiar informações Gravar informações Fechar arquivo 1 2 3 4

assign(arq_nome,‘C:\dados.dat'); Arquivos Antes de realizar qualquer operação sobre um arquivo, é necessário criar um identificador para o mesmo; Isto feito, as ações passarão a ser direcionadas ao arquivo a partir deste identificador; Na linguagem Pascal, o comando que associa um identificador à um arquivo físico é o assign, e ele pode ser usado da seguinte forma: assign(arq_nome,‘C:\dados.dat'); Onde arq_nome é o identificador, e o segundo parâmetro é o nome físico do arquivo que será manipulado.

Rotina : ASSIGN( ) Função : Serve para associar um determinado Nome de arquivo, no disco ou disquete com o arquivo definido pelo programador. Sintaxe : ASSIGN(Meu_Arquivo, STRING_Com_Nome_Arquivo_DOS). Exemplo: PROGRAM TESTE; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; BEGIN ASSIGN (Arq_nome, ’c:\dados.dat’); END. Onde: Arq_nome Nome Lógico do arquivo (aquele que será referenciado pelo programador na construção do seu código fonte C:\ Diretório, ou caminho onde será armazenado o arquivo no disco dados.dat Nome físico do arquivo que será manipulado

Arquivos Abrindo um arquivo: é sempre necessário abrir um arquivo para que se possa adicionar ou ler informações no/do mesmo; Existem três formas de se abrir um arquivo: rewrite; reset; append; (somente p/ texto) Sintaxe: Abrir um arquivo novo (inicializar); Na linguagem Pascal, o comando rewrite é utilizado para abrir um arquivo inicializando-o. Com o uso deste comando, se o arquivo não existir, o Turbo Pascal irá criá-lo. Se existir, seu conteúdo será destruído. Procedure Abrir; Begin assign(arq_nome,‘c:\dados.dat'); rewrite (arq_nome); End;

Rotina : REWRITE( ) Função : Cria e abre para E\S um arquivo. Caso o arquivo não exista, o mesmo será criado. Caso o arquivo já exista, todos os dados existentes nele serão apagados. Sintaxe : REWRITE(Meu_Arquivo); Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; BEGIN ASSIGN (Arq_nome, ’c:\dados.dat’); REWRITE (Arq_nome); END.

Arquivos Abrir um arquivo já existente, sem destruir seu conteúdo; Na linguagem Pascal, o comando reset é utilizado para abrir um arquivo preservando seu conteúdo pré-existente. Este comando é utilizado, principalmente, para abrir um arquivo para a leitura, pois ele posiciona o ponteiro do arquivo no primeiro registro gravado no mesmo. Uma tentativa de abrir um arquivo não existente com reset pode provocar um erro de E/S. Para solucionar isto, deve-se desativar a diretiva I do compilador com o comando {$I-}. Procedure Abrir; Begin assign(arq_nome,‘c:\dados.dat'); reset (arq_nome); End;

Rotina : RESET( ) Função : Abre para E/S um arquivo que já exista. Caso o arquivo não exista ocorrerá um erro de execução e o programa será abortado. Sintaxe : RESET(Meu_Arquivo); Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; BEGIN ASSIGN (Arq_nome, ’c:\dados.dat’); RESET (Arq_nome); END.

Arquivos Abrir um arquivo texto já existente, sem destruir seu conteúdo, preparando-o para gravar informações; Na linguagem Pascal, o comando append é utilizado para abrir um arquivo preservando seu conteúdo pré-existente. Este comando é utilizado, principalmente, para abrir um arquivo para a gravação de dados, pois ele posiciona o ponteiro no final do arquivo. Procedure Abrir; Begin assign(arq_nome,‘c:\dados.dat'); append (arq_nome); End;

Arquivos Fechando um arquivo: é sempre necessário fechar um arquivo após o seu uso, para não deixar o seu conteúdo exposto e nem comprometer a sua integridade; Depois de fechado um arquivo, para utilizá-lo novamente basta abrí-lo (com rewrite, reset, ou append). Não é necessário associá-lo novamente a um arquivo físico com o comando assign; Sintaxe: Fechar um arquivo; Procedure Fechar; Begin close (arq_nome); End;

Rotina : CLOSE( ) Função : Fecha um arquivo que tenha sido aberto com RESET\REWRITE. Sintaxe : CLSE(Meu_Arquivo); Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; BEGIN ASSIGN (Arq_nome, ’c:\dados.dat’); RESET (Arq_nome); CLOSE(Arq_nome) END.

Rotina : WRITE( ) Função : A Rotina WRITE tem a mesma Função de saída de informações como até agora já tínhamos trabalhado, somente que ao invés da informação ser apresentada no vídeo, a mesma será armazenada em um arquivo. Sintaxe : WRITE (Meu_Arquivo, Registro) Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_Nome : FILE OF Registro; Reg : Registro; BEGIN ASSIGN (Arq_nome ‘C:\Dados.Dat’); REWRITE (Arq_nome); CLRSCR; WRITE (‘Digite o Codigo: ‘); READLN (Reg.Codigo); WRITE (‘Digite o Nome: ‘); READLN (Reg.Nome); WRITE (‘Digite o Salario: ‘); READ LN(Reg.Salario); WRITE (Arq_nome, Reg); CLOSE (Arq_nome); END.

Rotina : READ( ) Função : A Rotina READ tem a mesma Função de entrada de informações como até agora já tínhamos trabalhado, somente que ao invés da leitura ser feita pelo teclado, a mesma será feita de um arquivo. Sintaxe : READ (Meu_Arquivo, Registro) Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; Reg : Registro; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); READ (Arq_nome, Reg); CLRSCR; WRITELN (‘Codigo = ‘, Reg.Codigo); WRITE LN(‘Nome = ‘, Reg.Nome); WRITELN(‘Salario = ‘,Reg.Salario:0:2); CLOSE (Arq_nome); END.   Observação: Após cada operação READ/WRITE no arquivo, o endereço do registro corrente no arquivo é incrementado em uma unidade. Assim por Exemplo, se o endereço do registro corrente é igual a 10, após uma operação de READ/WRITE, o registro corrente passará a ser o número 11.

Rotina : FILEPOS( ) Função : Retorna um número inteiro indicando qual o registro corrente em um arquivo. Sintaxe : Registro_Corrente : = FILEPOS (Meu_Arquivo) Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; Corrente : INTEGER; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); Corrente : = FILEPOS(Arq_nome); CLRSCR; WRITELN(Corrente); CLOSE (Arq_nome); END.

Rotina : FILESIZE( ) Função : Retorna quantos registro existem armazenados no arquivo. Sintaxe : Tamanho_Arquivo : = FILESIZE (Meu_Arquivo) Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; Total_reg : INTEGER; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); Total_reg : = FILESIZE (Arq_nome); CLRSCR; WRITELN (Total_reg); CLOSE (Arq_nome); END.

Arquivos Outros comandos para a manipulação de arquivo: Seek(F,P); Move o ponteiro do arquivo F para o início do número de registro P; EOF(F); Retorna verdadeiro se o ponteiro do arquivo F estiver posicionado no final (último registro);

Rotina : SEEK( ) Função : Posiciona o ponteiro do arquivo em um registro determinado, para que o mesmo possa ser processado. Sintaxe : SEEK(Meu_Arquivo, Endereço_Registro) Exemplo: PROGRAM Teste; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; Reg : Registro; BEGIN ASSIGN (Arq_nome, ‘c:\Dados.Dat’); RESET (Arq_nome); SEEK (Arq_nome, 10); READ (Arq_nome Reg); CLRSCR; WRITELN(‘Codigo = ‘, Reg.Codigo); WRITELN (‘Nome = ‘, Reg.Nome); WRITELN (‘Salario = ‘, Reg.Salario:0:2); CLOSE (Arq_nome); END. Observação: O Comando SEEK, posicionará o cursor (Indicador de Registro) no registro fisico número 10;

Rotina : EOF( ) Função : Esta é uma função Booleana, que Retorna TRUE caso se alcance o final do arquivo, FALSE caso contrário. Sintaxe : Chegou_Final : = EOF (Meu_Arquivo) Exemplo: PROGRAM Teste; USES CRT; TYPE Registro = RECORD Codigo : INTEGER; Nome : STRING; Salario : REAL; END; VAR Arq_nome : FILE OF Registro; Reg : Registro; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); WHILE NOT EOF(Arq_nome) DO READ (Arq_nome, Reg); CLRSCR; WRITELN(‘Codigo = ‘,Reg.Codigo); WRITELN(‘Nome = ‘, Reg.Nome); WRITE LN(‘Salario = ‘, Reg.Salario:0:2); READKEY; CLOSE (Arq_nome); END. Observação: Neste exemplo será realizado a leitura do primeiro registro do arquivo até o final do arquivo, apresentando cada registro na tela; A instrução WHILE NOT EOF(Arq_nome) DO quer dizer, Faça enquanto NAO FOR O FINAL DO ARQUIVO.

Diretivas de Erros Pascal O Turbo Pascal possui diretivas de compilação para ativação/desativação da verificação automática de erros, permitindo que o código do erro possa ser identificado com a função IOResult. {$I-} Desativa a verificação automática de erros {$I+} Ativa a verificação automática de erros   Quando for utilizada a diretiva {$I-}, o programa não será abortado quando uma operação de Entrada/Saída não for bem sucedida. Se a operação for bem sucedida a função IOResult retorna 0, do contrário retorna o código do erro (Ver exemplo a seguir).

Controlar a Abertura de um Arquivo Rotina para abertura de arquivo: Procedure abre_arq (nome: string); Begin Assign (arq_nome, ‘c:\dados.dat’); {$I-} Reset (arq_nome); {$I+} If Ioresult <>0 then begin Rewrite (arq_nome); end; End; OBSERVAÇAO: A variável IORESULT é uma variável de ambiente, ela armazena o código do erro, após uma operação em um Arquivo Pascal; Se IORESULT for igual a Zero quer dizer que nao deu erro, qualquer valor Diferente de Zero, representa um erro que deve ser consultada na tabela de erros do PASCAL

Algoritmos e Estruturas de Dados II ARQUIVOS Rodney Carneiro