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 scanf, armazená-los num vetor.

Passo 3

Depois, abrimos (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>
// 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;
}
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]);
}
// 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;
}

Exercícios relacionados