Elabore um programa que leia dois arquivos binários (salbruto.bin e desc.bin) contendo, respectivamente, os salários brutos e os descontos de até 100 funcionários. Para cada registro, deve-se calcular o salário líquido (sal. bruto - descontos) e gravá-lo no arquivo texto salliq.txt.

Passo 1

A questão pede um programa que leia dois arquivos binários, um com salários brutos e outro com descontos, e para cada funcionário calcule o salário líquido e grave em um arquivo texto. Vamos precisar de:
• Funções de I/O em C: fopen, fread, fprintf, fclose.
• Um loop que percorra até 100 registros ou até atingir EOF em um dos arquivos.
• Variáveis para armazenar temporariamente o salário bruto e o desconto.

Passo 2

Abrimos os dois arquivos binários em modo leitura e o arquivo texto em modo escrita. É importante sempre testar se fopen retornou ponteiro não nulo, para garantir que o arquivo abriu corretamente.

Passo 3

Usamos um loop for (ou while) para ler simultaneamente um double de cada arquivo com fread. O retorno de fread indica quantos itens foram lidos; quando devolver menos de 1, paramos o loop. Em cada iteração, calculamos o salário líquido fazendo
salarioliquido = salariobruto - desconto;
e escrevemos esse valor formatado no arquivo texto usando fprintf, por exemplo com duas casas decimais.

Passo 4

Ao final do loop fechamos todos os arquivos com fclose para liberar os recursos.

Passo 5

A seguir está o código completo em C que implementa a solução.

Resposta

#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fSalBr, *fDesc, *fOut;
double salario_bruto, desconto, salario_liquido;
size_t n1, n2;
fSalBr = fopen("salbruto.bin", "rb");
if (!fSalBr) {
    perror("Erro ao abrir salbruto.bin");
    return 1;
}
fDesc = fopen("desc.bin", "rb");
if (!fDesc) {
    perror("Erro ao abrir desc.bin");
    fclose(fSalBr);
    return 1;
}
fOut = fopen("salliq.txt", "w");
if (!fOut) {
    perror("Erro ao criar salliq.txt");
    fclose(fSalBr);
    fclose(fDesc);
    return 1;
}

while (1) {
    n1 = fread(&salario_bruto, sizeof(double), 1, fSalBr);
    n2 = fread(&desconto, sizeof(double), 1, fDesc);
    if (n1 < 1 || n2 < 1) break;
    salario_liquido = salario_bruto - desconto;
    fprintf(fOut, "%.2f\n", salario_liquido);
}

fclose(fSalBr);
fclose(fDesc);
fclose(fOut);

return 0;
}

Exercícios relacionados