Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция сравнения двух чисел https://www.cyberforum.ru/ cpp-beginners/ thread688273.html
Проверьте кто-нибудь код пожалуйста. Задача : Написать программу, выводящую на экран результат сравнения двух чисел в виде: A=10 B=5: A>B. Основная программа запрашивает два числа, передает их в функцию и в зависимости от возвращенного значения выводит сообщение. Функция возвращает 1 если A больше B, 0 если A равно B, -1 если A меньше B. #include <iostream> using namespace std; int...
C++ Простая прога на использование конструкторов и деструкторов в с++ не работает ( не пойму почему (
Вот и дошла я до конструкторов/деструкторов. Но возникла проблема . Первая простая прога- и не работает . Нужно , чтобы просто сначала задавалось имя, номер группы и бал студента используя конструктор, а потом всё это уничтожалось используя деструктор . Но не получается что-то у меня ничего ( Помогите пожалуйста найти ошибку . Заранее спасибо. #include "stdafx.h" #include <iostream> #include...
C++ работа с записью числа в шестнадцатеричной сс https://www.cyberforum.ru/ cpp-beginners/ thread688265.html
Доброго времени суток. Помогите, пожалуйста, с лабораторкой. На ввод даётся целое число. Необходимо проверить, является ли запись этого числа в шестнадцатеричной системе счисления палиндромом(палиндром - число, которое имеет одинаковое чтение слева направо и справа налево). Каким образом можно это реализовать? Банальное представление это числа в 16-ричной СС (cout << hex << n;), как я...
C++ Как можно узнать состояние процессора? как можно узнать состояние процессора можете подробно описать я новичок https://www.cyberforum.ru/ cpp-beginners/ thread688258.html
C++ Сортировка одномерного массива
Написать программу сортировки массива методом:Камнем, сортировка Шелла, пирамильная сортировка, сортировка слиянием. (массив из случайных чисел от 0 до 100; длина массива 20 )
C++ Работа с файлами: Построить график функции y=A*sqrt(B*X) и внести в файл Построить график функции y=A*sqrt(B*X) и записать его в файл. A, B – любые. не могу понять что делать) просто решить функцию и ответ в файл вывести? https://www.cyberforum.ru/ cpp-beginners/ thread688242.html
C++ Выписать четные биты https://www.cyberforum.ru/ cpp-beginners/ thread688235.html
Рассматривая исходный файл как последовательность битов, записать в новый файл только четные биты (должна получиться последовательность из нулей и единиц). Вот здесь код записи в файл, и перевода в двоичную систему, вот только не знаю, как выписать четные биты: #include "stdafx.h" #include "file.h" using namespace std; FILE *f1,*f2; Chetnie::Chetnie()//инициализация переменных {
Организовать новый список из различных элементов заданного, включив в информационную часть узла количество его вхождения в первоначальный список C++
Организовать новый список из различных элементов заданного, включив в информационную часть узла количество его вхождения в первоначальный список.
C++ Разработать класс для понятия "Генератор шума" Разработать класс для понятия "Генератор шума" для генерации дискретных значений белого шума вида y(t)=yc+A*E(t)),ult E(ti) - случайная величина с равномерным определением на интервале .Регулируемыми параметрами являются: А - амплитуда, yc - среднее значение вылечены шума, а также делта(t) - интервал дискретизации. При этом yn = y(n*дельта(t)). Работа с генератором состоит в задании... https://www.cyberforum.ru/ cpp-beginners/ thread688222.html C++ Примитивное меню https://www.cyberforum.ru/ cpp-beginners/ thread688221.html
Как добавить сюда еще один уровень? Например чтобы я нажимал Enter на namber 1 и что-то на экран выводится или чтобы какое-то действие выполнялась! #include <iostream> #include <Windows.h> #include <conio.h> using namespace std; int main()
Упорядочить заданный список целых методом шейкера C++
1. Упорядочить заданный список целых методом шейкера. *2. Дан массив записей, каждый из которых содержит информацию: ФИО работника, год * рождения, должность, стаж работы. Используя благоустройства методом выбора * минимального элемента, упорядочить список рабочих по году рождения.
C++ Массивы. Положительные элементы заменит на 1, а отрицательные заменить на -1 Ввести массив с клавиатуры. Выбрать строку где а-итое > 0, нужно все элементы , расположенные в отмеченных строках матрицы , преобразовать по правилу: отрицательные элементы заменить на –1, положительные – на 1 , а нулевые оставить без изменения. программу нужно сделать на С++. https://www.cyberforum.ru/ cpp-beginners/ thread688206.html
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 26
0

"Оптимизация" бинарного файла - C++ - Ответ 3650842

04.11.2012, 15:16. Показов 1650. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день, и заранее спасибо за помощь тем, кто сможет это сделать или хотя бы попытается
Сначала текст задания:

Для хранения данных о планшетных сканерах описать структуру вида, описанного
в варианте 1.
Написать функцию, которая записывает данные о сканере из приведенной структуры
в требуемую позицию в бинарном файле. Структура файла: в первых двух
байтах размещается значение типа int, определяющее количество сделанных в
файл записей; далее без пропусков размещаются записи о сканерах. Запись может
осуществляться в любую позицию, причем если между вводимой записью и
последней (или началом файла) имеются пропуски, они заполняются нулями.
Написать функцию, которая «уплотняет» описанный выше бинарный файл путем
удаления из него записей, содержащих все пули.

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

А вот и проблема: эта самая функция "уплотнения" отказывается работать, хоть убей. Гугл и поиск по форуму не спасли.

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <memory.h>
 
struct scan_info {
    char model[25]; // наименование модели
    int price; // цена
    double x_size; // горизонтальный размер области сканирования
    double y__size; // вертикальный размер области сканирования
    int optr; // оптическое разрешение
    int grey; // число градаций серого
} scan;
 
int ShowMenu();
void CreateFile(); 
void PrintFromFile();
void OptimizeFile(); 
 
int ShowMenu() {
    char ch = '\0';
    puts("1 : Create a file"); 
    puts("2 : View a file");
    puts("3 : Optimize a file");
    puts("4 : Exit");
    ch = _getch(); 
    return atoi(&ch); 
}
 
int main() {
    while (1) {  
        switch( ShowMenu() ) {  
            case 1: CreateFile(); break;
            case 2: PrintFromFile(); break; 
            case 3: OptimizeFile(); break; 
            case 4: return 0; 
            default: break;
        }
    }
}
const int min_records = 6; //минимальное число записей для ввода (нулевые учитываются)
 
void PrintArray (scan_info* si, int count) //вывод записей на экран из массива
{
    for (int i = 0; i < count; i++)
        printf ("\n%i. %s price: %i grey: %i", i+1, si[i].model, si[i].price, si[i].grey);
}
 
void PrintFromFile () //вывод записей на экран из файла
{
    FILE* data;
    char* db = "file.bin";
    data = fopen (db, "rb"); //открываем файл
    if (!data) { //ошибка, если не открылся
        printf ("Error");
        return;
    }
    short count; //читаем количество записей
    int k = fread (&count, sizeof(short), 1, data);
    if (k != 1) { //ошибка, если считалось неверное количество данных
        printf ("Error");
        return;
    }
    scan_info* si = new scan_info[count]; //выделяем место под массив
    k = fread (si, sizeof(scan_info), count, data); //считываем массив
    if (k != count) {
        printf ("Error");
        return;
    }
    for (int i = 0; i < count; i++) //выводим на экран
        printf ("\n%i. %s price: %i grey: %i", i+1, si[i].model, si[i].price, si[i].grey);
    fclose (data);
}
 
 
void OptimizeFile () //сжатие записей из файла
{ 
    FILE* data;
    char* db = "file.bin";
    data = fopen (db, "r+b"); //открываем файл
    if (!data) { //ошибка, если не открылся
        printf ("Error");
        return;
    }
    short count; //читаем количество записей
    int k = fread (&count, sizeof(short), 1, data);
    if (k != 1) { //ошибка, если считалось неверное количество данных
        printf ("Error");
        return;
    }
    scan_info* si = new scan_info[count]; //выделяем место под массив
    k = fread (si, sizeof(scan_info), count, data); //считываем массив
    if (k != count) {
        printf ("Error");
        return;
    }
 
    PrintArray (si, count); //выводим на экран для контроля
    fseek (data, sizeof(short), SEEK_SET); //переходим в начало файла, пропуская число записей
 
    short newcount = 0; //число реальных записей
    scan_info nul; //нулевая запись для сравнения
    memset (&nul, 0, sizeof(nul)); //заполняем нулями
 
    for (int i = 0; i < count; i++) { //просмотриваем массив
        if (memcmp (&nul, &si[i], sizeof(scan_info)) != 0) { //Если запись не идентична нулевой
            k = fwrite (&si[i], sizeof(scan_info), 1, data); //пишем запись в файл
            if (k != 1)  {
                printf ("Error");
                return;
            }
            newcount++; //наращиваем реальное количество
        }
    }
 
    fseek (data, 0, SEEK_SET); //переходим в начало файла
    k = fwrite (&newcount, sizeof(short), 1, data); //пишем реальное количество записей
    if (k != 1)  {
        printf ("Error");
        return;
    }
    fclose (data); //закрываем файл
}
 
void CreateFile () //создание файла
{
    short n = 0; //количество записей
    int pos;
    scan_info si, nul;
    memset (&nul, 0, sizeof(nul)); //нулевая запись для пропусков заполняется нулями
    FILE* data;
    char* db = "file.bin";
    data = fopen (db, "wb");
    if (!data) {
        printf ("Error");
        return;
    }
    int k = fwrite (&n, sizeof(short), 1, data); //пока пишем 0 в файл
    if (k != 1) {
        printf ("Error");
        return;
    }
    char c = 'y'; //признак выхода из цикла
    while (c=='y') { //вводим записи
        printf ("\nInput new record.\nInput model:\n");
        scanf ("%s", &si.model);
        printf ("\nInput price:\n");
        scanf ("%d", &si.price);
        printf ("\nInput horizontal size:\n");
        scanf ("%f", &si.x_size);
        printf ("\nInput vertical size:\n");
        scanf ("%f", &si.y__size);
        printf ("\nInput optical resolution:\n");
        scanf ("%d", &si.optr);
        printf ("\nInput shade of grey:\n");
        scanf ("%d", &si.grey);
        printf ("\nInput position to save (-1 for write to the end):\n");
        scanf ("%d", &pos); //дополнительно спрашиваем позицию для сохранения
 
        n++; //наращиваем количество
        if (pos < 0) pos = n; //если ввели отрицательную позицию, пишем в конец файла
        if (pos > n) { //если позиция дальше текущей
            fseek (data, (n-1)* sizeof(si) + sizeof(short), SEEK_SET);
//переставляем указатель в файле на текущее место
            while (pos > n) { //пишем столько нулевых записей, сколько позиций надо пропустить
                fwrite (&nul, sizeof(nul), 1, data);
                n++;
            }
        } else if (pos < n) { //если позиция раньше текущей
            n--; //не считаем эту запись - она займёт имеющееся место
            fseek (data, (pos-1)* sizeof(si) + sizeof(short), SEEK_SET);
//ставим указатель на нужное место
        } else //пишем на текущую позицию, ставим на неё указатель
            fseek (data, (n-1)* sizeof(si) + sizeof(short), SEEK_SET);
        
 
        k = fwrite (&si, sizeof(si), 1, data); //пишем запись в файл
        if (k != 1) {
            printf ("Error");
            return;
        }
        if (n >= min_records) { //если 6 записей уже введено, то предлагаем прервать ввод
            printf ("\nPress 'y', if you want to continue, or any other key, if you don't\n");
            c = getch(); //если будет введён не у, то выйдем из цикла
        }
    }
 
    fseek (data, 0, SEEK_SET); //идём в начало файла
    k = fwrite (&n, sizeof(short), 1, data); //пишем реальное количество записей
    if (k != 1) {
        printf ("Error");
        return;
    }
    fclose (data); //закрываем файл
}


Вернуться к обсуждению:
"Оптимизация" бинарного файла C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2012, 15:16
Готовые ответы и решения:

Создание бинарного дерева из бинарного файла
struct Bin { string name; string city; int players; int score; }; void...

Создание бинарного дерево из бинарного файла
struct Bin { string name; string city; int players; int score; }; void...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении,...

Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного текстового файла
(а)Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного...

0
04.11.2012, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2012, 15:16
Помогаю со студенческими работами здесь

Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного текстового файла
а)Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был...

Компоненты бинарного файла – целые числа. Добавить в начало файла значение -1, а в конец файла – значение, на 1 больше
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include&lt;time.h&gt; int main() {...

Получение хеша бинарного файла сборки для выполняемого apk-файла
Cкажите, пожалуйста, как можно обратиться, получить доступ и рассчитать хеш бинарного файла одной...

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

Можно ли отсортировать элементы бинарного файла без использования дополнительного файла
Если да, то можно пример пожалуйста

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru