Ficheiros de texto 1 Ficheiros de texto 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro. 2. Implementar um programa que procure num ficheiro uma palavra lida do teclado. Deve mostrar o número de vezes que a palavra existe no ficheiro. Nota: use o ficheiro de texto “texto.txt” que se encontra na página web da disciplina. 3. Implementar um programa que conte o número de linhas de um ficheiro, usando a) fgetc, b) fgets. 4. 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. 5. Considere que o ecrã tem 25 linhas. Implementar um programa que leia um ficheiro de texto (nome passado via linha de comandos) usando fgets e o escreva no terminal de forma a que o texto do ficheiro seja visto um um ecrã de cada vez. O programa deve esperar que o utilizador prima <enter> para mostrar o ecrã seguinte. Esta funcionalidade deve ser implementada sob a forma de função. 6. 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 envolveram mais trabalhadores nas tarefas; qual o dia em que se terminaram mais tarefas; qual a tarefa que ocupou mais trabalhadores. Nota: usar o ficheiro “tarefas.txt” que se encontra na página web da disciplina. 7. Pretende-se obter estatísticas de ocorrências de letras em textos na língua portuguesa. Para tal, criar um programa que leia o ficheiro de texto “texto.txt” (encontra-se na página web da disciplina) e obtenha médias de ocorrências de todas as letras do alfabeto. Ter em conta que todas as letras devem ser convertidas para o mesmo caso (maiúscula ou minúscula), todas as vogais acentuadas devem ser convertidas para não acentuadas e todas as cedilhas devem ser retiradas dos “cês” com cedilha. 8. Uma revista musical organiza, semanalmente, uma pesquisa de opinião sobre a popularidade de discos. Os resultados da pesquisa estão guardados no ficheiro “discos.txt” (encontra-se na página web da disciplina), com a seguinte informação por linha: nome do autor, nome do Programação / Programação I Ficheiros de texto 2 disco, 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. 9. 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. 10. 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. 11. 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. 12. Escreva um programa que solicite um valor inteiro ao utilizador e apresente os múltiplos desse valor que estiverem presentes no ficheiro de texto “multiplos.txt”. 13. 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 respectivamente “linhas”, “palavras” e “caracteres”. Assume-se que a entrada é a entrada standard se nenhum ficheiro for indicado na linha de comando. 14. Considere o ficheiro de texto “dados1.txt” (encontra-se na página web da disciplina) que deverá conter uma pauta com a seguinte informação (em 4 linhas seguidas): número do aluno, nome do aluno, classificação da frequência, classificação do exame. Escreva um programa que crie outro ficheiro, contendo o nome do aluno e a classificação final, correspondente à melhor das duas notas. Deve ainda filtrar os alunos com classificação final igual ou superior a 10. 15. 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 função que leia um elemento deste tipo (passado por parâmetro). b) Implemente uma função que escreva componentes do stock num ficheiro “stock.txt” até o utilizador especificar um número de ordem igual a zero. Programação / Programação I Ficheiros de texto 3 16. Considere o ficheiro de texto “dados2.txt” (encontra-se na página Web da disciplina). Os dados guardados neste ficheiro são estruturas do seguinte tipo: 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 de texto “$_inicial.txt” (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 de texto “dados2.txt”. 17. 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. 18. 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. Programação / Programação I Ficheiros de texto 4 19. 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); 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. 20. 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, var e tm representam os valores medidos em duas variáveis da experiência, respetivamente. Considere que dispõe de ficheiros de texto (disponíveis na página web da disciplina) 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: 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: 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; d) imprima as médias calculadas e os dados da medição com o melhor coeficiente de aproximação. 21. Considere que o ficheiro de texto “medicoes01.txt” possui informação representada por uma ou mais estruturas do tipo “registo” (exercício 20). Implementar um programa que: a) aceite um parâmetro na linha de comando que represente o nome de um ficheiro de entrada com o formato acima descrito; b) 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”. Programação / Programação I Ficheiros de texto 5 22. Considere que o ficheiro de texto “medicoes02.txt” possui informação representada por uma ou mais estruturas do tipo “registo” (exercício 20). Implementar um programa que: a) forneça dois ou mais valores pela linha de comando, sendo que o primeiro representa o nome do ficheiro de entrada, com o formato acima descrito, e os restantes são números de ordem de registos (o primeiro registo tem o número de ordem 1); b) imprima no ecrã os registos pretendidos. 23. As notas dos alunos da disciplina de Programação estão guardadas no ficheiro de texto "dados3.txt". Cada linha deste ficheiro contém a seguinte informação: número de aluno e nota final obtida (por esta ordem). Implementar um programa em C para determinar a nota média obtida na disciplina. Para tal, construir e usar as seguintes funções: a) função para ler do ficheiro um vetor de inteiros com as notas dos alunos. void LerVetor (int V[], int *N); b) função para calcular a soma das notas obtidas pelos alunos (usar o vetor). int SomaNotas (int V[], int N); 24. As notas dos alunos da disciplina de Programação estão guardadas no ficheiro de texto "dados3.txt". Cada linha deste ficheiro contém a seguinte informação: número de aluno e nota final obtida (por esta ordem). Implementar um programa em C para determinar a nota média obtida na disciplina pelos alunos aprovados. Para tal, construir e usar as seguintes funções: a) função para ler do ficheiro um vetor de inteiros com as notas obtidas pelos alunos. void LerVetor (int V[], int *N); b) função para calcular a soma das notas dos alunos aprovados (usar o vetor). int SomaNotasAprovados (int V[], int N); 25. As notas dos alunos da disciplina de Programação estão guardadas no ficheiro de texto "dados4.txt". Cada linha deste ficheiro contém a seguinte informação: número de aluno, nota dos trabalhos práticos (TP) e nota do teste escrito (T) (por esta ordem). Implementar um programa em C para determinar o número de alunos aprovados na disciplina. Para tal, construir e usar as seguintes funções: a) função para ler do ficheiro um vetor de inteiros com as notas finais (TP+T) dos alunos. void LerVetor (int V[], int *N); b) função para calcular o número de alunos aprovados (usar o vetor). int CalcularAprovados (int V[], int N); Programação / Programação I