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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dager228
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 3
#1

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

03.12.2011, 10:13. Просмотров 786. Ответов 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++
Доброго времени суток) Помогите довести до ума программу, чтобы она работала в рамках одной проги 1) Находила наибольшую нечетную цифру....

Помогите доделать прогу телефонного справочника - C++
Вот написал с трудом прогу телефонного справочника. Но там нет редактирования записей и поиска по базе. Подскажите пожалуйста как лучше...

Подправьте прогу( сортировка массивов) - C++
Подправьте прогу пожалуйста, проверьте на ошибки и добавьте нужные cout, cin, чтоб выводило результаты на консоль.(Задание: Дан массив...

Сортировка в файле - C++
Сформировать файлы f1 и f2, компоненты которых - целые числа, упорядоченные по возрастанию. Получить в файле f3 все числа из файлов f1 и f2...

Сортировка в бинарном файле - C++
Люди подскажи те как мне сделать то что от меня требует препад, он говорит сделать отсортировку информации в самом бинарном файле. я не...

Сортировка символов в файле - C++
Люди добрые! Помогите с решение задачи :sigh: У меня что-то даже и идеи нет, как ее реализовать :( Помогите кто, пожалуйста :) ...

Сортировка записей в файле - C++
Нужно написать программу сортировки Работа обязательно с файлами. В файле содержатся данные о сотрудниках предприятия: фамилия,...

Сортировка строк в файле - C++
Имеется текстовый файл со списком студентов, их курсом и оценками. Petrov P.P. 2 4.7 Sidorov S.S. 1 3.9 Smirnova A.A. 3 5.0 ...

Сортировка строк в файле - C++
Добрый день.Сейчас возникли огромные проблемы с написанием программы на Си. Можете пожалуйста, помочь? На компьютере создан файл, в...

Сортировка чисел в файле - C++
В последовательном текстовом файле построчно занесены до 50 целых положительных чисел (каждое число &lt;10000). Каждое новое число – в новой...

Сортировка структуры в файле - C++
Нужно сортировать структуру клиентов по их имени вот код программы , и переписать этот файл как новый. В функции void sort_client();...

Сортировка строк в файле - C++
Дана строка вида: Имя Фамилия номер_телефона дата_рождения. Нужно выполнить сортировку строк в файле по первым двум цифрам номера...


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

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru