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

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

Восстановить пароль Регистрация
 
irina3456
1 / 1 / 0
Регистрация: 23.05.2011
Сообщений: 91
02.12.2011, 08:14     Не выполняется сортировка #1
Вот часть моей программы
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));
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2011, 08:14     Не выполняется сортировка
Посмотрите здесь:

C++ Не выполняется условие
Не выполняется SetCommState C++
C++ Код не выполняется в одном месте, но выполняется в другом
C++ Не выполняется условие
C++ Не выполняется код
C++ Не выполняется сложение
C++ Не выполняется цикл
Сортировка по четности не выполняется C++

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

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

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

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

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

Добавлено через 5 часов 2 минуты
Спасибо всем большое, все работает)))
Yandex
Объявления
02.12.2011, 16:03     Не выполняется сортировка
Ответ Создать тему
Опции темы

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