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

Структуры и файлы. Ввод структурированных данных и их запись в файл - C++

Восстановить пароль Регистрация
 
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 13:19     Структуры и файлы. Ввод структурированных данных и их запись в файл #1
Составить программу, которая с использованием библиотеки классов языка С++ для работы с файлами выполняет следующие действия:
– ввод структурированных данных и их запись в файл;
– чтение данных из файла и их вывод в виде заданной таблицы;
– обработка файла ( выбор и сортировка записей по заданному полю структуры ).
– вывод результата преобразования

Начал только писать, но столкнуля с проблемой, задаю число записей N, а дальше компилятор начинает ругаться.
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
#include <iostream>
 
using namespace std;
 
 
int main()
{ 
      int N;
      cout << "Zadayte kolichestvo zapisey:";
      cin  >> N;
 
    struct STUDENT
    {char familia[15]; char name[10]; int vozrast; int rayting; char pol;} person[N];
 
int i;
cout << "Vvedite dannie\n";
for (i=0;i<N;i++)
{
    cout << "STUDENT" << i+1 << "\n";
 
    cout << "familia:";
    cin  >> person[i].familia;
 
    cout << "name:";
    cin  >> person[i].name;
 
    cout << "pol:";
    cin  >> person[i].pol;
 
    cout << "vozrast:";
    cin  >> person[i].vozrast;
 
    cout << "rayting:";
    cin  >> person[i].rayting;
}
    cout << "familia\tname\tpol\tvozrast\trayting\n";
 
    for(i=0;i<N;i++)
    cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 13:26     Структуры и файлы. Ввод структурированных данных и их запись в файл #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
tibeg, На почти вчерашние грабли наступаете:
C++
1
2
3
4
5
6
    struct STUDENT
    {char familia[15]; char name[10]; int vozrast; int rayting; char pol;} *person;
person=new STUDENT[N];
......
 
delete [] person;
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 13:40  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #3
C++
1
2
3
struct STUDENT
{char familia[15]; char name[10]; int vozrast; int rayting; char pol;} *person;
person=new STUDENT[N];
Извините я вот здесь не совсем понимаю принцип действия. Тоесть после объявления структуры STUDENT. Происходит присваивание person, диапазона из N .
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 13:47     Структуры и файлы. Ввод структурированных данных и их запись в файл #4
Нет не в этом дело. Запись типа:
C++
1
int x[N];
выделяет память на стеке и допустима лишь если N заранее известная константа и размер выделяемой памяти на x[N] не превышает допустимого значения. Во остальных случаях память должна выделяться на куче (динамически):
C++
1
2
3
4
int *x;
x=new int[N];
.....
delete [] N;
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 13:57  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #5
А можно совет еще? У меня будет меню по выбору пункта.

1-Кол. записей
2-Вывод таблицы
3-Выбор сортировки
4-Сортировка
5-Обработка(вывод нов. таблицы)
6-Выход

В выборе сортировке планирую сделать по выбору поля. А дальше в зависимости от выбора поля(по убыванию (если поле возраст,рейтинг) либо по алфавиту (если поле фамилия имя). Такое возможно?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 14:01     Структуры и файлы. Ввод структурированных данных и их запись в файл #6
Возможно, рекомендую обратить свой взор на стандартную библиотеку шаблон STL и на контейнер Vector. Можно самому конечно в своем коде реализовать задуманное, а можно и воспользоваться готовым инструментарием.
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 14:55  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #7
Решил написать сам. Только без выбора по какому полю. Но ошибка в выборе студентов м пола. И не получается алгоритм сортировки по убыванию поля рейтинг.
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
#include <iostream>
 
using namespace std;
 
 
int main()
{ 
      int N;
      int vibor;
 
      cout << "Zadayte kolichestvo zapisey:";
      cin  >> N;
 
    struct STUDENT
    {char familia[15]; char name[10]; int vozrast; int rayting; char pol;} *person;
    person = new STUDENT[N];
 
int i;
cout << "Vvedite dannie\n";
for (i=0;i<N;i++)
{
    cout << "STUDENT" << i+1 << "\n";
 
    cout << "familia:";
    cin  >> person[i].familia;
 
    cout << "name:";
    cin  >> person[i].name;
 
    cout << "pol:";
    cin  >> person[i].pol;
 
    cout << "vozrast:";
    cin  >> person[i].vozrast;
 
    cout << "rayting:";
    cin  >> person[i].rayting;
}
    cout << "familia\tname\tpol\tvozrast\trayting\n";
 
    for(i=0;i<N;i++)
    cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
 
 
    cout <<"Viberite sortirovku:"; 
    cout <<"1-po vibory " " 2-sortirovka po ybivaniu";
    cin >> vibor;
    if (vibor==1)     //Вывод студентов м пола;
    {
        for(i=0;i<N;i++)
        {
            if (person[i].pol == "m")
                cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
        }
    }
 
    else      // Вывод по убыванию рейтинга;
 
        for(i=1;i<N;i++)
        {
            for(k=0;k<N;k++)
            { 
                if (person[k].rayting>=person[i].rayting)
                    person[i]=max
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 15:37     Структуры и файлы. Ввод структурированных данных и их запись в файл #8
Вы упорно меня не слышите, хотя я понимаю что вы новичок. Посмотрите вот этот код:
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 struct STUDENT
    {char familia[15]; char name[10]; int vozrast; int rayting; char pol;} ; 
 
bool sortfunction_rat (STUDENT i,STUDENT j) { return (i.rayting  <j.rayting); }
bool sortfunction_vozrast (STUDENT i,STUDENT j) { return (i.vozrast <j.vozrast); }
bool sortfunction_pol (STUDENT i,STUDENT j) 
{ 
    int i_p, j_p;
    i_p = (i.pol='m')? 1:0;  
    j_p = (j.pol='m')? 1:0;  
    return (i_p <j_p);
}
int main()
{ 
      int N;
      int vibor;
      cout << "Zadayte kolichestvo zapisey:";
      cin  >> N;
      STUDENT per;
      vector <STUDENT> person;
      int i;
      cout << "Vvedite dannie\n";
      for (i=0;i<N;i++)
      {
          cout << "STUDENT" << i+1 << "\n";
          cout << "familia:";
          cin  >> per.familia;
          cout << "name:";
          cin  >> per.name;
          cout << "pol:";
          cin  >> per.pol;
          cout << "vozrast:";
          cin  >> per.vozrast;
          cout << "rayting:";
          cin  >> per.rayting;
          person.push_back(per);  
      }
      sort(person.begin(),person.end(),sortfunction_rat);
      cout << "sortirovka po ratingu \n";
      for (i=0;i<N;i++)
      {
          cout << "familia: "<< person[i].familia<<endl;
          cout << "name: "<< person[i].name<<endl;;
          cout << "pol:"<<person[i].pol<<endl;;
          cout << "vozrast:"<< person[i].vozrast<<endl;;
          cout << "rayting:"<<  person[i].rayting<<endl;
      }
      sort(person.begin(),person.end(),sortfunction_vozrast);
      cout << "sortirovka po vozrastu \n";
      for (i=0;i<N;i++)
      {
          cout << "familia: "<< person[i].familia<<endl;
          cout << "name: "<< person[i].name<<endl;;
          cout << "pol:"<<person[i].pol<<endl;;
          cout << "vozrast:"<< person[i].vozrast<<endl;;
          cout << "rayting:"<<  person[i].rayting<<endl;
      }
      sort(person.begin(),person.end(),sortfunction_pol);
      cout << "sortirovka po polu \n";
      for (i=0;i<N;i++)
      {
          cout << "familia: "<< person[i].familia<<endl;
          cout << "name: "<< person[i].name<<endl;;
          cout << "pol:"<<person[i].pol<<endl;;
          cout << "vozrast:"<< person[i].vozrast<<endl;;
          cout << "rayting:"<<  person[i].rayting<<endl;
      }
      system ("pause");
}
Добавлено через 12 минут
А у Вас проблема не с синтаксисом,а алгоритмом
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 15:42  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #9
Конечно трудновато, но вроде понял. Только как теперь все это сделать чтобы в таблице выводилось?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 16:01     Структуры и файлы. Ввод структурированных данных и их запись в файл #10
Вот ваш вариант
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
#include <iostream>
 
using namespace std;
 
 
int main()
{ 
      int N;
      int vibor;
 
      cout << "Zadayte kolichestvo zapisey:";
      cin  >> N;
 
    struct STUDENT
    {char familia[15]; char name[10]; int vozrast; int rayting; char pol;} *person;
    person = new STUDENT[N];
 STUDENT max1;
int i,k;
cout << "Vvedite dannie\n";
for (i=0;i<N;i++)
{
    cout << "STUDENT" << i+1 << "\n";
 
    cout << "familia:";
    cin  >> person[i].familia;
 
    cout << "name:";
    cin  >> person[i].name;
 
    cout << "pol:";
    cin  >> person[i].pol;
 
    cout << "vozrast:";
    cin  >> person[i].vozrast;
 
    cout << "rayting:";
    cin  >> person[i].rayting;
}
    cout << "familia\tname\tpol\tvozrast\trayting\n";
 
    for(i=0;i<N;i++)
    cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
 
 
    cout <<"Viberite sortirovku:"; 
    cout <<"1-po vibory " " 2-sortirovka po ybivaniu";
    cin >> vibor;
    if (vibor==1)     //Вывод студентов м пола;
    {
        for(i=0;i<N;i++)
        {
            if (person[i].pol == 'm')
                cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
        }
        for(i=0;i<N;i++)
        {
            if (person[i].pol != 'm')
                cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
        }
    }
 
    else      // Вывод по убыванию рейтинга;
 
        for(i=0;i<N-2;i++)
        {
            for(k=i;k<N-1;k++)
            { 
                if (person[k].rayting>person[k+1].rayting)
                {
                    max1=person[k+1];
                    person[k+1]=person[k];
                    person[k]=max1;
                }
                else break;
            }
        }
             for(i=0;i<N;i++)
             cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
      system ("pause");
}
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 16:22  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #11
Спасибо большое только почемуто, при сортировке по полу выводит повторно. Например введли 2 поля, а выведет 4 поля.
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 16:31  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #12
Структуры и файлы. Ввод структурированных данных и их запись в файл
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 20:08     Структуры и файлы. Ввод структурированных данных и их запись в файл #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
else      // Вывод по убыванию рейтинга;
{ 
        for(i=0;i<N-2;i++)
        {
            for(k=i;k<N-1;k++)
            { 
                if (person[k].rayting>person[k+1].rayting)
                {
                    max1=person[k+1];
                    person[k+1]=person[k];
                    person[k]=max1;
                }
                else break;
            }
        }
             for(i=0;i<N;i++)
             cout << person[i].familia << "\t" << person[i].name << "\t" << person[i].pol << "\t" << person[i].vozrast << "\t" << person[i].rayting << "\n";
}
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 97
19.03.2014, 20:15  [ТС]     Структуры и файлы. Ввод структурированных данных и их запись в файл #14
Хм а теперь не сортирует по рейтингу.
Миниатюры
Структуры и файлы. Ввод структурированных данных и их запись в файл  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2014, 20:24     Структуры и файлы. Ввод структурированных данных и их запись в файл
Еще ссылки по теме:

Запись структуры в файл C++
Ввод динамической структуры и занесение её в двоичный файл C++
C++ Запись структуры данных в файл. Динамический список

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 20:24     Структуры и файлы. Ввод структурированных данных и их запись в файл #15
Цитата Сообщение от tibeg Посмотреть сообщение
Хм а теперь не сортирует по рейтингу.
Надо посмотреть подробно, я алгоритм подправил и так на скорую руку без компилятора. Разберите саму идею, и освой контейнеры Vector, list и др. мощный инструмент
Yandex
Объявления
19.03.2014, 20:24     Структуры и файлы. Ввод структурированных данных и их запись в файл
Ответ Создать тему
Опции темы

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