Удалить из файла все числа, число бит установленных в единицу, в которых более трех - 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. Код не содержит операций по удалению чисел из файла, поэтому задача, описанная в вопросе, не решается этим кодом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д