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

Сортировка в файле,доделать прогу - C++

Восстановить пароль Регистрация
 
dager228
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 3
03.12.2011, 10:13     Сортировка в файле,доделать прогу #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
#include <vcl.h>
#include <stdio.h>
#include <stdlib.h>
 
#pragma pack(1)
 
typedef unsigned short THeadCounter;
 
typedef struct//58
{
   char model[25];// наименование модели
   int price;     // цена
   double x_size; // горизонтальный размер области сканирования
   double y_size; // вертикальный размер области сканирования
   int optr;      // оптическое разрешение
   int grey;      // число градаций серого
}  scan_info;
 
//----------------------------------------------//
long int GetSize(FILE* f)
{
   fseek(f, 0, SEEK_END);
   long int size = ftell(f);
   fseek(f, 0, SEEK_SET);
 
   return size;
}
//----------------------------------------------//
void Print(scan_info* array, unsigned count)
{
   unsigned i;
   for (i = 0; i < count; ++i)
   {
      printf("%4d | %15s | %8d | %3.3f | %3.3f | %8d | %8d\n",
             i+1, array[i].model, array[i].price, array[i].x_size,
             array[i].y_size, array[i].optr, array[i].grey);
   }
}
//----------------------------------------------//
THeadCounter FileToDisplay(FILE* f)
{
   THeadCounter count = 0;
 
   fseek(f, 0, SEEK_SET);
 
   fread(&count, sizeof(count), 1, f);
 
   fseek(f, sizeof(THeadCounter), SEEK_SET);
 
   if (count)
   {
      scan_info* buff = (scan_info*) malloc(sizeof(scan_info) * count);
 
      fread(buff, sizeof(scan_info), count, f);
 
      // ...
      // Тут нужно использовать функцию сортировки по заданному полю
      // ...
 
      Print(buff, count);
 
      free(buff);
   }
   else
   {
      printf("info: file is empty ...\n");
   }
 
   return count;
}
//----------------------------------------------//
bool AskAppendNewRecord()
{
   char answer = 0;
   printf("\nadd new record? [yes / no=default]: ");
   scanf("%c", &answer);
   fflush(stdin);
 
   return (answer == 'y');
}
//----------------------------------------------//
scan_info GetNewRecord()
{
   scan_info info;
 
   printf("model: ");
   scanf("%s", info.model);
   fflush(stdin);
 
   printf("price: ");
   scanf("%d", &info.price);
   fflush(stdin);
 
   printf("x_size: ");
   scanf("%lf", &info.x_size);
   fflush(stdin);
 
   printf("y_size: ");
   scanf("%lf", &info.y_size);
   fflush(stdin);
 
   printf("optr: ");
   scanf("%d", &info.optr);
   fflush(stdin);
 
   printf("grey: ");
   scanf("%d", &info.grey);
   fflush(stdin);
 
   return info;
}
//----------------------------------------------//
 
int main(int argc, char** argv)
{
   if (argc != 2)
   {
      printf("Usage: %s FILE.DAT\n", argv[0]);
      return 0;
   }
 
   FILE* f = fopen(argv[1], "rb+");
 
   if (!f)
   {
      f = fopen(argv[1], "wb+");
   }
 
   THeadCounter count = 0;
 
   if (GetSize(f) == 0)
   {
      fwrite(&count, sizeof(count), 1, f);
   }
 
   count = FileToDisplay(f);
 
   while (AskAppendNewRecord())
   {
      scan_info info = GetNewRecord();
      fseek(f, 0, SEEK_END);
      fwrite(&info, sizeof(scan_info), 1, f);
      fseek(f, 0, SEEK_SET);
      count++;
      fwrite(&count, sizeof(count), 1, f);
   }
 
   fclose(f);
 
   return 0;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2011, 10:13     Сортировка в файле,доделать прогу
Посмотрите здесь:

Помогите доделать прогу телефонного справочника C++
C++ Сортировка строк в файле
Сортировка символов в файле C++
C++ Сортировка строк в файле
Сортировка в бинарном файле C++
C++ Подскажите как доделать прогу
C++ Подправьте прогу( сортировка массивов)
C++ Сортировка в файле

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.12.2011, 16:16     Сортировка в файле,доделать прогу #2
fflush(stdin) - неправильно см здесь
в C++ не надо делать typedef для структуры, потому что метка уже может использоваться без слова struct
у бинарных потоков нельзя выполнять fseek() с SEEK_END, это может дать неправильный результат
для определения размера читай его побайтово, пока не встретится конец потока

после загрузки записей сортируй их массив
признак, задающий критерий сортировки, - это функция, которая передаётся в функцию сортировки
у тебя там должен быть ввод типа сортировки, в зависимости от которого функция сортировки будет вызываться с определённым аргументом-критерием
Yandex
Объявления
03.12.2011, 16:16     Сортировка в файле,доделать прогу
Ответ Создать тему
Опции темы

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