Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Фаер
792 / 398 / 260
Регистрация: 09.12.2011
Сообщений: 786
Записей в блоге: 53

Задача про файлы и "вагоны" битов

17.11.2013, 21:30. Показов 943. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо срочно решить другану задачу, а я в C++ вообще мёртвый. Будьте добры, помогите! В общем, такая задача:

На вход подается файл, в котором "паровозиком" друг за другом идут биты информации, в виде: объем(количество байт одного "вагончика"), для объема отводится 2 ячейки, дальше столько бит, сколько указано в объёме, дальше еще такой же вагончик(2 ячейки под объем и после него биты), таких вагончиков много, идут они все в одну строку. Необходимо прочитать этот файл, и рассортировать вагоны по объему в файлы. Типа, все вагоны, что по 32 бит, в один файл, те, что по 64 бита, в другой и так далее.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2013, 21:30
Ответы с готовыми решениями:

Задача про вагоны и включение в них света
помогите решить

Задача про вагоны: Определить вероятность накопления за час более 3 составов
В сортировочном парке накапливаются вагоны 10 назначений(а) В среднем за час накапливается 2 состава(\lambda ). Определить вероятность...

про вагоны [prolog]
Помогите плиз, сижу на экзамене, нада сделать программу для пролога. Прогу вижу раз 2й =) условие след: Составить правило расчета...

3
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
17.11.2013, 21:55
Цитата Сообщение от Фаер Посмотреть сообщение
для объема отводится 2 ячейки
Это как? Может быть 2 байта?
0
 Аватар для Фаер
792 / 398 / 260
Регистрация: 09.12.2011
Сообщений: 786
Записей в блоге: 53
17.11.2013, 22:24  [ТС]
Цитата Сообщение от stima Посмотреть сообщение
Это как? Может быть 2 байта?
Не, там двузначное десятеричное число. То есть, если число меньше десяти, то первым будет ноль, типа: "05" - пять байт. Вот, а за этим числом идут пять байт, что равно 40 бит. Таким образом, весь вагон это:

051001111010110011...до 40 бит
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
18.11.2013, 00:59
Да не совсем)) Если файл бинарный, то там не будет 05 иначе череда "010101" это всеголишь набор байт, а не бит.

А по вашем словам это имено смесь, что не имеет особого смысла. Вот Вам вариант где 2 ячейки это 2 байта.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <cmath>
#include <ctime>
#include <vector>
#include <climits>
#include <cstdlib>
#include <fstream>
#include <iostream>
 
typedef unsigned char       uint8_t;
 
typedef short int           int16_t;
typedef unsigned short int  uint16_t; 
 
typedef int                 int32_t;
typedef unsigned int        uint32_t;
 
int main()
{
    std::string file_name("data.txt");
 
    std::ofstream out(file_name.c_str(), std::ios_base::out | std::ios_base::binary);
    if (!out.is_open())
    {
        std::cout << "Can not open out file " << file_name << std::endl;
        return 1;
    }
 
    srand(time(0));
    uint8_t len = rand() % UCHAR_MAX;
    for (uint8_t i = 0; i < len; ++i)
    {
        uint16_t size = rand() % USHRT_MAX;
 
        std::vector<uint8_t> data(size, 0);
        for (uint16_t j = 0; j < size; ++j)
        {
            data[j] = rand() % UCHAR_MAX;
        }
    
        out.write(reinterpret_cast<const char*>(&size), sizeof(uint16_t));
        out.write(reinterpret_cast<const char*>(&data[0]), size * sizeof(uint8_t));
        out.flush();
    }
    out.close();
 
    std::ifstream in(file_name.c_str(), std::ios_base::in | std::ios_base::binary);
    if (!in.is_open())
    {
        std::cout << "Can not open in file " << file_name << std::endl;
        return 2;
    }
    
    in.seekg (0, in.end);
    uint32_t length = in.tellg();
    in.seekg (0, in.beg);
 
    std::cout << "length left : " << length << std::endl;
 
    std::vector<uint8_t> ram_cpy;
    for ( ; length; )
    {
        uint16_t size = 0;        
        in.read(reinterpret_cast<char*>(&size), sizeof(uint16_t));
 
        int cur_index = ram_cpy.size();
        ram_cpy.resize(cur_index + size);
        in.read(reinterpret_cast<char*>(&ram_cpy[cur_index]), size * sizeof(uint8_t));
 
        length -= sizeof(uint16_t) + size;
 
        std::cout << "length left : " << length << std::endl;
    }
 
    return 0;
}
Немгоно попохже сделаю "коректный вариант".

Добавлено через 1 час 53 минуты
У меня немного не стыковка. Обясню в чем.

Если файл бинарный, то 2 ячейки это 2 бита и запись выглядит так (| -условный разделитель):
00|01|1|10|00|11|000

Есди 2 ячейки это 2 символа, то запись выглядит так:
05|1ac45|01|a

но 1ac45 - это не 5 бит, тогда запись должна выглядеть как-то так(где (1) - это условное представление 5 бит в байте).
05|(1)|01|(1)

Первый вариант еще имеет виды на жизнь, но 2 ... Переспросите, что имелось ввиду под ячейкой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2013, 00:59
Помогаю со студенческими работами здесь

Здача про вагоны ( МасСивы )
Даны сведения о массах 15 вагонов состава M 1)Определить число порожних вагонов (масса вагона меньше или равна 10 г) в массиве M, их...

Задача про файлы Паскаль
Дан файл f, компоненты которого являются целыми числами. Получить в файле g положительные четные компоненты файла f. Помогите сделать...

Вагоны в поезде пронумерованы натуральными числами, начиная с 1 ( при этом иногда вагоны нумеруются от "головы" поезда,
Вагоны в поезде пронумерованы натуральными числами, начиная с 1 ( при этом иногда вагоны нумеруются от &quot;головы&quot; поезда, а иногда...

Задача на файлы, записи (про пассажиров и багаж)
Привет,форумчане)Помогите,пожалуйста с задачкой. В файле хранится информация о пассажирах: фамилия пассажира, багаж пассажира: список...

Задача про ГАИ и файлы (где накосячил в коде?)
Добрый день! Задача звучит так: Вдоль шоссе в точках X1,X2,...,XN расположены посты ГАИ. В точке X произошло мелкое ДТП...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru