Faça um programa que recebe um vetor de 10 números, converta cada um desses números para binário e grave a sequência de 0 s e 1 s em um arquivo texto. Cada número deve ser gravado em uma linha.
Passo 1
O enunciado pede um programa que leia um vetor de 10 números inteiros, converta cada um deles para a representação em binário e grave essa sequência de bits em um arquivo texto, colocando cada número convertido em uma linha diferente. O conteúdo principal envolve três pontos: ler e armazenar um vetor de tamanho fixo, converter um valor inteiro para sua forma binária (usando divisões sucessivas por 2) e operar com arquivos texto em C.
Passo 2
Primeiro, vamos definir uma função auxiliar que receba um inteiro e devolva uma string com sua representação binária. A técnica clássica é dividir o número por 2 repetidamente, armazenar os restos e depois inverter a sequência de restos.
Em seguida, no programa principal, vamos ler os 10 valores via
Em seguida, no programa principal, vamos ler os 10 valores via
scanf
, armazená-los num vetor.Passo 3
Depois, abrimos (com
Por fim, fechamos o arquivo com
fopen
) um arquivo em modo escrita. Iteramos sobre o vetor, chamamos a função de conversão para cada elemento e usamos fprintf
para gravar no arquivo, seguido de \n
para pular de linha.Por fim, fechamos o arquivo com
fclose
e encerramos o programa retornando zero.Passo 4
Esse passo a passo garante que cada número seja convertido corretamente e escrito numa linha própria do arquivo texto.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
// Função que converte um inteiro >= 0 em string binária
char* to_binary(int num) {
// Alocamos espaço para até 32 bits + ‘\0’
char* bin = malloc(33);
if (!bin) {
perror(“malloc”);
exit(1);
}
bin[32] = ‘\0’;
int pos = 31;
// Tratamos o caso num == 0 explicitamente
if (num == 0) {
bin[pos] = ‘0’;
pos–;
} else {
while (num > 0 && pos >= 0) {
bin[pos] = (num % 2) ? ‘1’ : ‘0’;
num /= 2;
pos–;
}
}
// Movemos a parte significativa para o início da string
char* result = strdup(&bin[pos+1]);
free(bin);
return result;
}
char* to_binary(int num) {
// Alocamos espaço para até 32 bits + ‘\0’
char* bin = malloc(33);
if (!bin) {
perror(“malloc”);
exit(1);
}
bin[32] = ‘\0’;
int pos = 31;
// Tratamos o caso num == 0 explicitamente
if (num == 0) {
bin[pos] = ‘0’;
pos–;
} else {
while (num > 0 && pos >= 0) {
bin[pos] = (num % 2) ? ‘1’ : ‘0’;
num /= 2;
pos–;
}
}
// Movemos a parte significativa para o início da string
char* result = strdup(&bin[pos+1]);
free(bin);
return result;
}
int main() {
int vet[10];
// Leitura dos 10 números
printf(“Digite 10 números inteiros:\n”);
for (int i = 0; i < 10; i++) {
scanf("%d", &vet[i]);
}
int vet[10];
// Leitura dos 10 números
printf(“Digite 10 números inteiros:\n”);
for (int i = 0; i < 10; i++) {
scanf("%d", &vet[i]);
}
// Abre arquivo para escrita
FILE *fp = fopen("saida.txt", "w");
if (!fp) {
perror("fopen");
return 1;
}
// Converte e grava cada número em uma linha
for (int i = 0; i < 10; i++) {
char *bin_str = to_binary(vet[i]);
fprintf(fp, "%s\n", bin_str);
free(bin_str);
}
fclose(fp);
printf("Conversão concluída. Dados gravados em saida.txt\n");
return 0;
}