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

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

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

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

19.03.2014, 13:19. Просмотров 841. Ответов 14
Метки нет (Все метки)

Составить программу, которая с использованием библиотеки классов языка С++ для работы с файлами выполняет следующие действия:
– ввод структурированных данных и их запись в файл;
– чтение данных из файла и их вывод в виде заданной таблицы;
– обработка файла ( выбор и сортировка записей по заданному полю структуры ).
– вывод результата преобразования

Начал только писать, но столкнуля с проблемой, задаю число записей 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";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 13:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры и файлы. Ввод структурированных данных и их запись в файл (C++):

ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хра-нилище данных в файле). - C++
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и вывод данных из этого файла на экран...

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод) - C++
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в файле. Также не помешала бы помощь в...

Запись структуры данных в файл. Динамический список - C++
Первый вопрос. Программа вроде бы пишет в файл. Читает из файла тоже корректно, однако, при чтении в список добавляется еще один...

Ввод структуры в текстовый файл столбиком и вывод данных из файла в структуру - C++
Имеется база данных в виде структуры, которая будет постепенно дописываться приблизительно до 1000 элементов. В каждом элементе структуры...

Запись структуры (в ней есть поля типа данных char*) в бинарный файл - C++
Всем привет! Есть такая структура: struct Telem { int key; char *mark; float engine; char *color; }; В функции main()...

Функции и файлы. Чтение и запись данных в файл. Структура "Ноутбук" - C++
Приветствую. Помогите, пожалуйста, с программой. Для хранения данных о ноутбуках описать структуру вида: struct NOTEBOOK{ struct...

14
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;
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
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 .
0
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;
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
19.03.2014, 13:57  [ТС] #5
А можно совет еще? У меня будет меню по выбору пункта.

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

В выборе сортировке планирую сделать по выбору поля. А дальше в зависимости от выбора поля(по убыванию (если поле возраст,рейтинг) либо по алфавиту (если поле фамилия имя). Такое возможно?
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 14:01 #6
Возможно, рекомендую обратить свой взор на стандартную библиотеку шаблон STL и на контейнер Vector. Можно самому конечно в своем коде реализовать задуманное, а можно и воспользоваться готовым инструментарием.
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
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
0
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 минут
А у Вас проблема не с синтаксисом,а алгоритмом
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
19.03.2014, 15:42  [ТС] #9
Конечно трудновато, но вроде понял. Только как теперь все это сделать чтобы в таблице выводилось?
0
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");
}
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
19.03.2014, 16:22  [ТС] #11
Спасибо большое только почемуто, при сортировке по полу выводит повторно. Например введли 2 поля, а выведет 4 поля.
0
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
19.03.2014, 16:31  [ТС] #12
Структуры и файлы. Ввод структурированных данных и их запись в файл
0
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";
}
1
tibeg
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 103
19.03.2014, 20:15  [ТС] #14
Хм а теперь не сортирует по рейтингу.
0
Миниатюры
Структуры и файлы. Ввод структурированных данных и их запись в файл  
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.03.2014, 20:24 #15
Цитата Сообщение от tibeg Посмотреть сообщение
Хм а теперь не сортирует по рейтингу.
Надо посмотреть подробно, я алгоритм подправил и так на скорую руку без компилятора. Разберите саму идею, и освой контейнеры Vector, list и др. мощный инструмент
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2014, 20:24
Привет! Вот еще темы с ответами:

Структуры и ввод данных - C++
const int len_name=20; //длинна ФИО const int b=8; struct NOTE{ char name; //ФИО int phone; //номер телефона char...

Ввод/вывод структуры в текстовый и бинарный файл - C++
есть код #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; ...

Ввод динамической структуры и занесение её в двоичный файл - C++
Здравствуйте, товарищи-кодеры! Я попытался написать программу, отвечающую за ввод структуры с клавиатуры(память выделяется динамически) и...

Запись структуры в файл. - C++
Структура следующая: struct TRAIN{ char punkt; int nomb; float time; }; Массив из структур нужно записать в файл. ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
19.03.2014, 20:24
Ответ Создать тему
Опции темы

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