Форум программистов, компьютерный форум CyberForum.ru

Бинарный режим открытия файла; Битовые вхождения в файл - C++

Восстановить пароль Регистрация
 
Smiler_
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 4
05.06.2013, 07:59     Бинарный режим открытия файла; Битовые вхождения в файл #1
Доброго времени суток! Нужна помощь, не могу разобраться как с заданием, так и с написанием программы.

Задание такое: Написать программу подсчитывающую количество вхождений одинаковых битовых последовательностей в файл.

Как я понял задание: Открываем файл в бинарном режиме, считываем данные из файла(в виде байтов), далее необходимо байты разбить на биты(применяя битовую маску), посчитать кол-во одинаковых битовых последовательностей...(Так мне объяснили)

Что у меня вышло:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
setlocale(0, "rus");
string d,e,f,g;
int i, j, k=0,length;
char b[15]="Hello world!!!";
char rd[15];
unsigned char mask=0x1;
FILE* fp = fopen("my_file.bin","wb+");
if(fp != NULL)
{
fwrite( b, sizeof(char), 14, fp );
fseek(fp,0L,SEEK_END);
length = ftell(fp);
fseek(fp,0L,SEEK_SET);
    for (i=1; i<=length ;i++)
    {
fread(rd,sizeof(char), 1,fp);
fseek(fp,i,SEEK_SET);
for (j=1;j<14;j++)
{
d=rd[i]*mask;
e.append(d);
rd[i]>>1;
}
    }
    for (i=1; i<=(e.length()/8);i++)
    {
        f=e.substr(0,8*i);
        g=e.substr(8*i, e.length());
        length--;
        for (j=1; j<length+1;j++)
        {
                if(g.substr(8*j, f.length()) == f)
                k++;
        }
    }
cout << "Число одинаковых битовых вхождений:"<<k<<endl;
}
else
{
cout << "Файл не открыт\n";}
if(fclose(fp))
{
    cout << "Файл не закрыт\n";
}
system("pause");
return 0;
}
И соответственно вопрос...где тут, что не так) И что считывает функция fread...байт в виде 0 и 1 ? или просто символ?
Не отрицаю, что код корявый)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 07:59     Бинарный режим открытия файла; Битовые вхождения в файл
Посмотрите здесь:

C++ на основе данных входного файла составить список вкладчиков(ФИО,№ счёта,сумма,год открытия счёта)Вывести в new файл инфу об открывших счёт в этом году
C++ Занести в бинарный файл h из текстового файла t целые числа, упорядоченные по возрастанию
Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой C++
Данные из текстового файла записать в бинарный файл C++
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
05.06.2013, 12:47     Бинарный режим открытия файла; Битовые вхождения в файл #2
Нужно определиться, что считать битовой последовательностью.
номер *****0 1 2 3 4 5
числа***** 4 2 2 1 1 0
байты(hex) 34 32 32 31 31 30

а. Предел одного и того же байта. В данном случае байты под номером 1 и 2 равны.
б. Любая комбинация. Тогда 0-й байт hi == 1-му байту hi == 2-му байте hi и т.д.
Smiler_
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 4
05.06.2013, 14:41  [ТС]     Бинарный режим открытия файла; Битовые вхождения в файл #3
Хм..Однако, ничего не понял(( Вероятно байты... Мы считываем байты - выходит последовательность из байтов..преобразуем ее в битовую...Далее смотрим сколько раз встречается 1-й бит, затем сколько 1-й и 2-й...как-то так. Я не понимаю, что записывается в строку при вызове этой функции:
C++
1
fread(rd,sizeof(char), 1,fp);
Раз это бинарный режим, и допустим мы считываем символ "3" - то должен считаться двоичный код в виде 00000011 ? Тогда - это байт и нужно применить битовую маску... т.е. умножить на 00000001, и затем сдвинуть на один бит...??
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
05.06.2013, 14:57     Бинарный режим открытия файла; Битовые вхождения в файл #4
C++
1
fread(rd,sizeof(char), 1,fp);
Считать из файла fp 1 элемент размером char в буфер rd.

Добавлено через 6 минут
Наводящий вопрос. Если в файле припустим только число 2(00000010). Сколько по Вашему тут должно быть повторений?
Smiler_
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 4
05.06.2013, 15:05  [ТС]     Бинарный режим открытия файла; Битовые вхождения в файл #5
Шесть, по-моему.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
05.06.2013, 16:09     Бинарный режим открытия файла; Битовые вхождения в файл #6
Чтобы помочь Вам решить, нужно понять, что решать. Давайте посчитаем вместе:

01234567
00000010

1. Берем 0 бит, проходимся от 0 к 7. Имеем еще 6 совпадений.
2. Берем 0 и 1 биты, проходимся от 1 к 7. Еще 2.
3. Берем 012 биты, проходимся от 2 к 7. Еще 1.
----------
Итого 9.

Этого требует условие?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 06:21     Бинарный режим открытия файла; Битовые вхождения в файл
Еще ссылки по теме:

C++ Записать в файл g, компоненты файла f, исключив повторное вхождения чисел
Из текстового файла считать матрицу и записать ее в бинарный файл C++
C++ Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Smiler_
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 4
06.06.2013, 06:21  [ТС]     Бинарный режим открытия файла; Битовые вхождения в файл #7
Можно и так, но я считал с конца.

Добавлено через 4 часа 24 минуты
Спасибо, разобрался!
Yandex
Объявления
06.06.2013, 06:21     Бинарный режим открытия файла; Битовые вхождения в файл
Ответ Создать тему
Опции темы

Текущее время: 21:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru