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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

lamed
Статус: Практикант
Рейтинг: 2151
∙ повысить рейтинг »
Гаряка Асмик
Статус: Бакалавр
Рейтинг: 1972
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1756
∙ повысить рейтинг »

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

Номер выпуска:1487
Дата выхода:13.02.2010, 22:00
Администратор рассылки:Товарищ Бородин, Модератор
Подписчиков / экспертов:640 / 187
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 176579: Для хранения данных о планшетных сканерах описать структуру вида: struct scan_info{ char model[25]; // наименование модели int price: // цена double x_s1ze: // горизонтальный размер области сканирования double y__s1ze: // вертикальный ...



Вопрос № 176579:

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

Отправлен: 08.02.2010, 21:31
Вопрос задал: nasya, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Verena, Профессионал :
Здравствуйте, nasya.
Ну, приведу один из вариантов решения задачи, записи будем просто считывать в массив (для реально большого количества записей этот метод может оказаться недопустимым из-за объёма памяти). Поскольку ничего по этому поводу не сказано, скомпилировано в Visual Studio 2005.
Во-первых, о количестве записей. В VS тип int имеет размерность 4 байта, поскольку у Вас в задаче требуется использовать два первых байта, то для размерности используется тип short, который имеет размерность 2 байта в этой среде.
Во-вторых, о сортировке. О необходимом методе сортировки в вашей задаче ничего не сказано, в моём примере используется функция из стандартной библиотеки stdlib.h qsort, осуществляющая "быструю сортировку" массива с использованием заданной функции сравнения. Она имеет такой вид:
Код:
void qsort(
void *base, //массив
size_t num, //размер массива
size_t width, //размер одного элемента в массиве
int (__cdecl *compare )(const void *, const void *) //функция сравнения элементов массива
);

Функции сортировки используются две - для сортировки по цене и по градациям серого. Подробнее о самой функции можете почитать в MSDN.
Для выбора направления сортировки создан enum. Для контроля сортировки сделана функция, выводящая часть данных записей.
В остальном можно разобраться по комментариям.
Удачи!

Приложение:

-----
Эта история - не для истории, понимаешь?

Ответ отправил: Verena, Профессионал
Ответ отправлен: 08.02.2010, 23:58
Номер ответа: 259323

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259323 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.02.2010

    В избранное