Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91

Не выполняется сортировка

02.12.2011, 08:14. Показов 708. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот часть моей программы
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
#include <iostream>
#include <conio.h>
#include <fstream>
#include <vector>
#include <iomanip>
#include <cstdlib>
#include <algorithm>
#include <windows.h>
using namespace std;
 
 
// Структура описывающая запись в Записной книжке
struct _notebook
{
  char name[100],
       last_name[100],
       date[50],
       city[50];
  unsigned long int number;
  // перегруженый опертор "меньше"
  bool operator <(const _notebook &_2) const
  {
    return strcmp(name, _2.name) < 0;
  }
};
 
// Предикат для сортировки по имени
bool cmp_1(_notebook &_1, _notebook &_2)
{
  return tolower(_1.name[0]) < tolower(_2.name[0]);
}
 
// Предикат для сортировки по фамилии
bool cmp_2(_notebook &_1, _notebook &_2)
{
  return tolower(_1.last_name[0]) < tolower(_2.last_name[0]);
}
 
// Предикат для сортировки по дате рождения
bool cmp_3(_notebook &_1, _notebook &_2)
{
  char tokens_1[3][5], tokens_2[3][5];
  char tok_1[50], tok_2[50];
  int i = 0;
  strcpy(tok_1, _1.date); strcpy(tok_2, _2.date);
  for(char *p = strtok(tok_1, "."); p;  p = strtok(NULL, "."))
    strcpy(tokens_1[i++], p);
  i = 0;
  for(char *_p = strtok(tok_2, "."); _p;  _p = strtok(NULL, "."))
    strcpy(tokens_2[i++], _p);
  if(atoi(tokens_1[2]) != atoi(tokens_2[2]))
    return atoi(tokens_1[2]) < atoi(tokens_2[2]);
  else if(atoi(tokens_1[1]) != atoi(tokens_2[1]))
    return atoi(tokens_1[1]) < atoi(tokens_2[1]);
  return atoi(tokens_1[0]) < atoi(tokens_2[0]);
}
 
// Основной класс
class Notebook
{
private:
  _notebook data;
  void print_node(_notebook &n)
  {
    cout << "\nIm`9 - " << n.name << "\nFamiliya - " << n.last_name <<
    "\nData rowdenia - " << n.date << "\nNomer telefona - " << n.number <<
    "\nGorod - " << n.city;
  }
public:
  // Метод сортировки записей за именем
  void sort_by_name()
  {
    ifstream ifs("base", ios::in | ios::binary);
    vector<_notebook> vec;
    while(ifs.read((char *)&data, sizeof(_notebook)))
      vec.push_back(data);
    sort(vec.begin(), vec.end(), cmp_1);
    ifs.close();
    ofstream ofs("base", ios::out | ios::binary);
    for(int i = 0; i < vec.size(); ++i)
      ofs.write((char *)&vec[i], sizeof(_notebook));
  }
  // Метод сортировки записей за фамимлией
  void sort_by_last_name()
  {
    ifstream ifs("base", ios::in | ios::binary);
    vector<_notebook> vec;
    while(ifs.read((char *)&data, sizeof(_notebook)))
      vec.push_back(data);
    sort(vec.begin(), vec.end(), cmp_2);
    ifs.close();
    ofstream ofs("base", ios::out | ios::binary);
    for(int i = 0; i < vec.size(); ++i)
      ofs.write((char *)&vec[i], sizeof(_notebook));
  }
  // Метод сортировки записей за датой рождения
  void sort_by_date()
  {
    ifstream ifs("base", ios::in | ios::binary);
    vector<_notebook> vec;
    while(ifs.read((char *)&data, sizeof(_notebook)))
      vec.push_back(data);
    sort(vec.begin(), vec.end(), cmp_3);
    ifs.close();
    ofstream ofs("base", ios::out | ios::binary);
    for(int i = 0; i < vec.size(); ++i)
      ofs.write((char *)&vec[i], sizeof(_notebook));
  }
вот часть программы, проверяю Cout'ом,вставляю в функцию void sort_by_name()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void sort_by_name()
  {
    ifstream ifs("base", ios::in | ios::binary);
    vector<_notebook> vec;
    while(ifs.read((char *)&data, sizeof(_notebook)))
      vec.push_back(data);
    sort(vec.begin(), vec.end(), cmp_1);
    ifs.close();
    ofstream ofs("base", ios::out | ios::binary);
    for(int i = 0; i < vec.size(); ++i)
        cout << "SORTIR" << endl;   
       /* именно здесь ошибка, i - необъявленная переменная, а когда объявляю, то программа вынужденно завершается*/
      ofs.write((char *)&vec[i], sizeof(_notebook));
  }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2011, 08:14
Ответы с готовыми решениями:

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Не выполняется сортировка
Добрый вечер. В программе надо вводить данные, сделать их вывод, предварительно сделав сортировку по фамилии. Взяла 3 человека для пробы....

Сортировка выполняется неправильно
Не выполняет сортировку верно. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;locale.h&gt; int main(void) ...

2
 Аватар для KATbIK
86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
02.12.2011, 08:45
C++
1
2
3
4
 for(int i = 0; i < vec.size(); ++i) {
        cout << "SORTIR" << endl;   
       /* именно здесь ошибка, i - необъявленная переменная, а когда объявляю, то программа вынужденно завершается*/
      ofs.write((char *)&vec[i], sizeof(_notebook)); }
Вроде ты скобки забыла. а может и нет))
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
02.12.2011, 16:03  [ТС]
неа, скобки {} не помогают(((

Добавлено через 3 минуты
кстати, на строку
C++
1
2
 
for(int i = 0; i < vec.size(); ++i)
VS ругается так "1>: warning C4018: <: несоответствие типов со знаком и без знака"

Добавлено через 50 минут
с warning C4018 разобралась,
Это – предупреждение компилятора, которое говорит о том, что мы пытаемся сравнить (==, и т.д.) целочисленное выражение (может принимать положительные, отрицательные значения и 0) и беззнаковое целочисленное выражение (может быть только положительным, либо 0).
а с сортировкой нет((

Добавлено через 51 минуту
????????????

Добавлено через 5 часов 2 минуты
Спасибо всем большое, все работает)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2011, 16:03
Помогаю со студенческими работами здесь

Сортировка по четности не выполняется
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int n, i; int UMN=1; int NOM_MAX=0; int MAX=0; ...

Не выполняется сортировка массива
Здравствуйте , вот код, но сортировка в нем не применяется а просто выводиться массив чисел без применения сортировки. Подскажите в чем...

Быстрая сортировка на js не выполняется
Привет! Использую код: var numbers = ; $('.before-sort').html(numbers); function QuickSort(A) { if (A.length == 0)...

Не выполняется сортировка для динамического массива
Добрый день. Ломаю голову над задачей уже трети день. Не могу никак понять, почему не выполняется сортировка для динамического массива....

Каким с GetTime можно узнать за какое время выполняется сортировка массива. Код программы:
Program SortMas; var i, j, k: integer; mas: array of integer; Begin randomize; for i := 1 to 20 do mas :=...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru