Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8466
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2716
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2636
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1684
Дата выхода:14.09.2011, 16:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:292 / 169
Вопросов / ответов:1 / 1

Консультация # 183994: Здравствуйте! У меня возникли сложности с таким вопросом: Для хранения данных о планшетных сканерах описать структуру вида struct scan_info{ char model[25]; // наименование модели int price: // цена double x_s1ze: // горизонтальный размер области сканирования double y__s1ze: // вертикальный размер области сканирования 1nt optr:...


Консультация # 183994:

Здравствуйте! У меня возникли сложности с таким вопросом:
Для хранения данных о планшетных сканерах описать структуру вида
struct scan_info{
char model[25]; // наименование модели
int price: // цена
double x_s1ze: // горизонтальный размер области сканирования
double y__s1ze: // вертикальный размер области сканирования
1nt optr: // оптическое разрешение
int grey: // число градаций серого
}:
Написать функцию, которая записывает данные о сканере из приведенной структуры
в требуемую позицию в бинарном файле. Структура файла: в первых двух
байтах размещается значение типа int, определяющее количество сделанных в
файл записей; далее без пропусков размещаются записи о сканерах. Запись может
осуществляться в любую позицию, причем если между вводимой записью и
последней (или началом файла) имеются пропуски, они заполняются нулями.
Написать функцию, которая «уплотняет» описанный выше бинарный файл путем
удаления из него записей, содержащих все пули.
Привести пример программы, создающей файл с данными о сканерах (данные
вводятся с клавиатуры) из не менее шести записей и осуществляющий его уплотнение.
Все необходимые данные для функций должны передаваться им в качестве параметров.
Использование глобальных переменных в функциях не допускается.
(желательно использовать потоковые классы)

Дата отправки: 09.09.2011, 10:06
Вопрос задал: Посетитель - 380644 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Посетитель - 380644!
Код в приложении. Записи будем просто считывать в массив (для реально большого количества записей этот метод может оказаться недопустимым из-за объёма памяти). Поскольку ничего по этому поводу не сказано, скомпилировано в Visual Studio 2005.
Во-первых, о количестве записей. В VS тип int имеет размерность 4 байта, поскольку у Вас в задаче требуется использовать два первых байта, то для размерности используется тип short, который имеет размерность 2 байта в этой среде.
Во-вторых, о работе с файлами. Поскольку в задаче предполагается ввод записи в произвольную позицию, то последовательный доступ к файлу при записи нам не помощник. Необходимо всё время вручную следить за позицией в файле при помощи функции fseek (файл, на_сколько_сдвинуть, откуда_начинать). Размер одной пустой позиции в файле равен размеру одной записи, только всё её содержимое - нули. Создаётся нулевая запись при помощи функции memset (куда, чем_заполнить , сколько_байт), которая заполняет память по заданному адресу заданным значением (в данном случае - 0). Сравнение записи с нулём производится с помощью фунции memcmp (адрес1, адрес2, число_байт), которая возвращает 0 в случае, если переменные заполнены одинаковыми данными.
Остальное должно быть ясно из комментариев.
Удачи!

Приложение:

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 13.09.2011, 15:19

5
нет комментария
-----
Дата оценки: 14.09.2011, 09:51

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное