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.
• 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
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>
#include <stdlib.h>
int main() {
FILE *fSalBr, *fDesc, *fOut;
double salario_bruto, desconto, salario_liquido;
size_t n1, n2;
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;
}