Ficheiros binários
1
Ficheiros binários
1. Considere que dispõe de ficheiros binários cujo conteúdo é constituído por uma ou mais
estruturas como a indicada a seguir
struct registo {
int
ref;
float var;
int
tm;
};
A informação constante dos ficheiros representa medições de uma dada experiência de
laboratório. O campo ref representa o número de referência da medição e var e tm os
valores medidos em duas variáveis da experiência.
Pretende-se fazer um programa que:
a) aceite um parâmetro na linha de comando que representa o nome do ficheiro de
entrada com o formato descrito;
b) determine a média dos valores de cada uma das variáveis da experiência;
c) determine a medição com o melhor (menor) coeficiente de aproximação, sendo este
dado pela expressão:
1
var −mvar
tm−mtm

mvar
mtm
∣
∣∣
∣
em que mvar e mtm representam as médias calculadas anteriormente e que se assume
serem diferentes de zero;
d) imprima as médias calculadas e os dados da medição com o melhor coeficiente de
aproximação.
2. Implementar:
a) Uma função que permita copiar um ficheiro para um outro.
b) Uma função que anexe um ficheiro ao final de outro.
3. Suponha que as linhas de um ficheiro contêm a designação de uma tarefa realizada durante
um mês, seguida de quantos trabalhadores estiveram envolvidos nessa tarefa em cada um
dos dias úteis do mês. Um valor negativo significa que a tarefa foi terminada. Exemplo:
Polimento 0 1 2 2 1 3 2 -1
significa que a tarefa Polimento envolveu 0 trabalhadores no 1º dia útil do mês, 1 no 2ª dia
útil, etc., e terminou no 8º dia útil. Escrever e testar um programa que leia o ficheiro e
calcule: qual o dia em que se trabalharam mais tarefas; qual o dia em que se terminaram
mais tarefas; qual a tarefa que ocupou mais trabalhadores.
Programação e Algoritmos / Programação II
Ficheiros binários
2
4. Uma revista musical organiza, semanalmente, uma pesquisa de opinião sobre a popularidade
de discos. Os resultados da pesquisa são guardados num ficheiro “discos.dat”, com a
seguinte informação por linha: nome do disco, nome do autor, discos vendidos. Escrever um
programa que leia esta informação para um vetor de registos e escreva os discos que têm
vendas superiores a um certo valor.
5. Uma empresa possui representantes em várias cidades e pretende implantar a sua sede
numa delas, de acordo com o critério: o custo anual das deslocações dos representantes das
várias cidades à cidade sede deverá ser o menor possível.
a) Escrever um programa que crie um ficheiro contendo a seguinte informação: nome da
cidade; coordenadas da cidade (x, y); número de deslocações por ano dos
representantes da cidade.
b) Completar o programa por forma a ler o ficheiro e determinar a cidade a ser escolhida
como sede.
6. Implementar um programa que:
a) Se se chamar ordem devolve a maior palavra (usando a ordem alfabética “rato” é
maior que “elefante”) dos argumentos fornecidos. Tome esta opção como sendo a
opção por omissão;
b) Se se chamar conta devolve o número de argumentos com que foi invocado;
c) Se se chamar lista manda para a saída standard os seus argumentos.
7. Escreva um programa que permita construir uma lista de todas as palavras contidas num
ficheiro, assim como o número de ocorrências de cada uma delas.
8. Escreva um programa que solicite um valor inteiro ao utilizador e apresente os múltiplos desse valor que
estiverem presentes no ficheiro “dados1.dat”.
9. Implementar um programa que simule o funcionamento do comando wc do sistema Unix com
a restrição que as opções aceites são -l, -w e -c para respetivamente “linhas”, “palavras” e
“caracteres”. Assume-se que a entrada é a entrada standard se nenhum ficheiro for indicado
na linha de comando.
10. Considere um programa de gestão de stocks em que cada componente do stock é
identificado pelo nome, número de ordem e preço.
a) Defina um tipo de registo, tstock, adequado à representação de um componente do
stock e implemente uma rotina que leia um elemento deste tipo (passado por
parâmetro).
b) Implemente um procedimento que escreva componentes do stock num ficheiro
“stock.dat” até o utilizador especificar um número de ordem igual a zero.
11. Considere o ficheiro binário dados2.dat (uma sua cópia pode ser encontrada na página Web da
disciplina). Os dados guardados neste ficheiro sãao estruturas do seguinte tipo:
Programação e Algoritmos / Programação II
Ficheiros binários
3
struct
{
int BI;
char nome[100];
float peso, altura;
};
Utilizando funções implemente um programa que:
a) Liste o conteúdo do ficheiro.
b) Solicite ao utilizador uma letra e copie todos os registos cujo campo nome comece por
essa letra para o ficheiro $_inicial.dat (onde $ representa a letra escolhida pelo
utilizador).
c) Apresente o campo nome para o registo com o valor de peso mais elevado.
d) Acrescente um novo registo (campos introduzidos pelo utilizador) ao ficheiro dados2.dat.
12. Altere o programa anterior de forma a que o programa permaneça em ciclo e, através dum
menu, o utilizador possa escolher qual a tarefa a realizar.
13. Implementar um programa que use uma estrutura que permita guardar o nome, a morada e
o número de telefone duma pessoa. Deve permitir, através de um menu, ler dados para uma
estrutura desse tipo que sejam automaticamente guardados num ficheiro. O programa deve
permitir mostrar o conteúdo do ficheiro da seguinte forma:
**********
Registo 1
Nome :
Morada :
Telefone :
**********
Registo 2
Nome :
Morada :
Telefone :
...
Assim, o menu deve ter as seguintes opções: inserir dados, mostrar dados, terminar. O
menu, a inserção de dados e a exibição dos dados devem ser implementados usando
funções.
14. Altere o programa anterior de forma a que seja possível:
a) Alterar dados dum registo, indicando o número do registo a alterar;
b) Apagar um registo, indicando o número do registo a apagar (tem de acrescentar um
campo à estrutura original que lhe indique se o registo é válido ou foi apagado);
Programação e Algoritmos / Programação II
Ficheiros binários
4
c) Ver apenas um registo do ficheiro, indicando o seu número. Implemente estas
funcionalidades sob a forma de funções. Devem estar disponíveis através do menu do
programa.
15. Para se representar as medições de uma dada experiência de laboratório, usa-se a estrutura
“registo” definida da seguinte forma:
struct registo {
int ref;
double var;
int tm;
};
em que o campo ref representa o número de referência da medição e, var e tm os valores
medidos em duas variáveis da experiência. Considere que dispõe de ficheiros binários cujo
conteúdo é constituído por uma ou mais estruturas “registo”. A informação existente nos
ficheiros representa medições de uma dada experiência de laboratório.
Implementar um programa que:
➔ aceite um parâmetro na linha de comando que representa o nome do ficheiro de entrada
com o formato descrito;
➔ determine a média dos valores de cada uma das variáveis da experiência;
➔ determine a medição com o melhor (menor) coeficiente de aproximação, sendo este
dado pela expressão:
var −mvar tm−mtm

,
mvar
mtm
∣
1
∣∣
∣
em que mvar e mtm representam as médias calculadas anteriormente e que se assume
serem diferentes de zero;
➔ imprima as médias calculadas e os dados da medição com o melhor coeficiente de
aproximação.
16. Considere que o ficheiro “estrut.dat” possui informação representada por uma ou mais
estruturas do tipo “registo” (exercício 13.). Implementar um programa que:
➔ aceite um parâmetro na linha de comando que represente o nome de um ficheiro de
entrada com o formato acima descrito;
➔ imprima no ecrã os registos constantes nesse ficheiro, em modo textual, na forma de
uma tabela e de acordo com o formato apresentado no ficheiro fbin.txt.
17. Considere que o ficheiro “estrut.dat” possui informação representada por uma ou mais
estruturas do tipo “registo” (exercício 13.). Implementar um programa que:
➔ dois ou mais parâmetros na linha de comando, sendo que o primeiro representa o nome
do ficheiro de entrada, com o formato acima descrito, e o segundo e restantes números
de ordem de registos (o primeiro registo tem o número de ordem 1);
➔ imprima no ecrã os registos pretendidos.
Programação e Algoritmos / Programação II
Ficheiros binários
5
Nota: o programa não deve ler a totalidade dos registos, mas limitar-se a ler os registos
pretendidos. Para isso use a função fseek.
18. Considere que o ficheiro “estrut.dat” possui informação representada por uma ou mais
estruturas do tipo “registo” (exercício 13.). Implementar um programa que:
➔ aceite dois parâmetros na linha de comando, representando o primeiro o nome de um
ficheiro de entrada com o formato acima descrito e o segundo o nome de um ficheiro de
saída;
➔ realize as tarefas especificadas no ficheiro “filt.txt”, que são as seguintes:
a) determinar a média dos valores da variável var
b) selecionar os registos constantes no ficheiro de entrada que satisfaçam a condição de
estarem na vizinhança de 1% da média e
i) imprimi-los no ecrã;
ii) escrevê-los no ficheiro de saída, em modo binário e num formato igual ao do
ficheiro de entrada.
19. Escreva um programa que lê a seguinte informação sobre alunos de Programação e
Algoritmos: nome, código, classificação à disciplina e idade. A informação relativa a cada
aluno é guardada numa estrutura apropriada e a informação de todos os alunos é mantida
num vetor de estruturas. No início do programa a informação existente sobre alunos é lida de
um ficheiro binário para o vetor de estruturas (caso o ficheiro não exista, o programa deve
criar o ficheiro vazio, ficando o vetor por preencher) e o ficheiro é atualizado quando o
programa termina. Deve disponibilizar as operações de inserir novos alunos, listar os alunos
existentes, remover alunos e alterar informação sobre os alunos existentes.
Programação e Algoritmos / Programação II
Download

Ficheiros binários