Arquivos

Arquivos de texto

  1. Faça um programa que leia um arquivo texto contendo números inteiros, um número por linha, ordene os inteiros e escreva o resultado da ordenação em um arquivo texto novo, um número por linha.

  2. Escreva um programa que leia um arquivo chamado palavras.txt e escreva as palavras que terminam com "s" em um arquivo chamado plurais.txt e as demais em um arquivo chamado singulares.txt.

  3. Escreva um programa que leia um arquivo que contém uma sequência de números naturais. O arquivo deverá fazer contagem de cada número e gerar um arquivo de saída como no exemplo.

    Entrada:

    10
    1 2 1 3 2 2 6 2 1 6
    

    Saída

    Número de vezes 1: 3
    Número de vezes 2: 4
    Número de vezes 3: 1
    Número de vezes 6: 2
    
  4. Escreva um programa que leia dois arquivos de inteiros ordenados e escreva um novo arquivo com todos os inteiros ordenados. Depois responda.

    a) Vale a pena colocar o conteúdo dos arquivos de entrada em duas listas?

    b) O que você faria se tivesse quatro arquivos de inteiros ordenados.

Exercícios criativos

  1. A cifra de César é um esquema de criptografia, em que cada letra de uma mensagem é trocada pela letra a sucede em $k$ posições. A correspondência entre as letras é determinada utilizando duas rodas como da figura.

    Para encriptar uma mensagem, primeiro alinhamos as letras da roda interna com a roda externa, de depois giramos a roda interna em $k$ posições para a direita. Finalmente, substituímos cada letra da roda interna pela letra correspondente na roda externa. Somente quem conhece o segredo, o número $k$, poderá recuperar a mensagem original.

    Nessa foto, temos $k = 13$, assim a palavra "AJUDA" seria transformada em "NETKN".

    a) Escreva uma função cifrar_cesar(arquivo_mensagem, arquivo_cifrado, k) que leia um arquivo texto e escreva a cifra de César correspondente em um outro arquivo texto.

    b) Escreva uma função decifrar_cesar(arquivo_cifrado, arquivo_mensagem, k) que realize a operação inversa.

    c) Um problema desse esquema é que como só há $26$ valores possíveis para $k$, não parece muito difícil decifrar uma mensagem. Como você faria isso?

  2. Um arquivo do tipo CSV (comma separated values) é um formato não padronizado para armazenar uma tabela em um arquivo de texto. Cada linha da tabela é uma linha do arquivo e os elementos de uma linha são separados por um caractere especial. Dependendo da aplicação, a especificação do formato muda, mas muitas vezes a primeira linha contém os títulos das colunas e o separador utilizado é uma vírgula.

    a) Suponha que nos é dado um arquivo lista_compras.csv

    Item,Categoria,Quantidade,Valor unitário
    banana,alimentação,1,3.5
    carne,alimentação,0.5,25.7
    sabão em pó,limpeza,1,10.0
    álcool em gel,limpeza,2,5.0
    sandálias,vestuário,1,15.0
    

    Crie um programa que leia um arquivo CSV como acima e calcule o valor total por categoria. Enquanto nessa questão você irá interpretar o arquivo CSV diretamente, normalmente utilizamos um módulo especializado já pronto, como o módulo csv.

    b) Analise o arquivo csv de casos do novo Coronavírus. Você pode abrir esse arquivo usando um editor de texto ou um editor de planilhas. Depois crie um programa que descubra todos os países que têm mais casos por habitante do que o Brasil até determinada data. Se desejar, utilize o módulos csv para ler o arquivo e o módulo datetime para tratar e comparar datas.

Arquivos binários

Atenção: as questões abaixo tratam de conteúdos que não discutimos em sala e estão disponíveis apenas para referência.

  1. Suponha que um arquivo binário tem exatamente 1001 inteiros ordenados. Escreva um programa para ler o arquivo e mostrar a mediana. É necessário percorrer todo o arquivo? E se fosse um arquivo de texto?

  2. Neste exercício, use um arquivo binário para armazenar as informações nome, salário e número de identificação. Estas informações são usadas para controlar os empregados de uma empresa. Para cada empregado, use a estrutura a seguir:

    struct empregado {
        int id;
        char nome[50];
        double salario;
    };
    

    O formato do arquivo é simplesmente uma sequência de registros como esse. Implemente as seguintes funções:

    a) adicionar_registro(arquivo, id, nome, salario) que acrescenta um empregados no final do arquivo binário

    b) aumenta_salario(arquivo, percentual) que aumenta o salário de todos os empregados pelo percentual dado

    c) buscar_empregado(arquivo, nome) que devolve um registro com todas as informações contidas no arquivo