Удалить из файла все числа, число бит установленных в единицу, в которых более трех - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Народ нужна помощь, у меня есть задание: Файл содержит целые числа. Удалить из файла все числа, число бит установленных в единицу, в которых более трех. Я попытался сделать это следующим способом при преобразовании числа в двоичную форму сразу осуществляется проверка на то сколько раз 1 входит в это число и в случае если оно больше 3 возвращает 0, иначе записывает число. Но что то пошло не так и я никак не могу привести эту программу в полностью рабочее состояние, помогите пожалуйста. Я прикрепил файл с исходными числами.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
#include <conio.h>   
#include <math.h>

int dvoich(int x1)  
{  
    int i, b,l=0;

   char p[7];  
    long c = 0;  
     for(i=0;x1 > 0;i++)  
    {
        b = x1 % 2; 
         x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
    sprintf(p,"%d",c);
    
    for(i=1;i<=6;i++){
                if (strcmp(p[i],"1")==0){
                        l++;
                        if (l==3){return 0;}
                }
        }

// printf("\nDvoichnoe chislo: %d",c);
    return c;  
} 
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "RU");
    FILE *f;
    FILE *f1;
    int c;
    int bal;
    f = fopen("some_file.txt", "r");
    printf("Наш файл:\n");
    while ((c = getc(f)) != EOF){
        putc(c, stdout);
    }
    fclose(f);
    f = fopen("some_file.txt", "r");
    f1= fopen("dvoich.txt", "w");
     while ((c = getc(f)) != EOF){
    if(isdigit(c)){
    
    fprintf(f1,"%d ",dvoich(c));
 
    }
    }
    fclose(f1);
    fclose(f);
    printf("\n");
    printf("Двоичная форма:\n");
    f1= fopen("dvoich.txt", "r");
     if (f1 == NULL)
        printf ("Ошибка при открытии файла");
     else {
        while (!feof(f1)){
        fread(&bal, sizeof(char),1, f1);
        printf ("%c", bal);
        }
     }
    printf("\n");
    fclose(f);
    fclose(f1);
    return 0;
}

Решение задачи: «Удалить из файла все числа, число бит установленных в единицу, в которых более трех»

textual
Листинг программы
int CountBit(int n)
{ int count = 0;
  while(n) {
    if (n&1) count++;
    n = (n>>1);
  }
  return count;
}

Объяснение кода листинга программы

В данном коде представлена функция с именем CountBit, которая принимает целочисленный аргумент n и возвращает количество установленных бит в этом числе. Для этого используется цикл while, который выполняется до тех пор, пока число n не станет равным нулю. Внутри цикла проверяется, установлен ли в числе n бит, и если да, то увеличивается счетчик count. После выполнения цикла возвращается значение счетчика count. Код не содержит операций по удалению чисел из файла, поэтому задача, описанная в вопросе, не решается этим кодом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы