Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161

Добавление данных в массив объектов

28.05.2012, 15:45. Показов 3856. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
void main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    int kol;
    Group *gr=new Group[10];
    int n=0;
    
    
   do
   {
    cout<<" 1-создать список студентов \n 2-показать список \n 3-добавить студента \n 0-выход\n";
    cin>>n;
    switch(n)
    {
    case 1:
    cout<<"Введите количество студентов в группе:\n";
           cin>>kol;
 
            for(int i=0;i<kol;i++)
                {
                 gr[i].Info();
                gr[i].Info_gr ();
                }
            
            break;
 
    case 2:
        for(int i=0;i<kol;i++)
        {
        cout<<"Студент N"<<i+1<<"\n";
        gr[i].show();
        gr[i].Show_gr();
        }
        break;
    case 3:
        int dob;
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>dob;
        for (int i=kol;i<kol+dob;i++)
        {  
                gr[i].Info();
                gr[i].Info_gr ();
        }
 
    }
    }
    while(n!=0);
}
Проблема в том, что при добавлении новых объектов (case 3) все вроде как добавляется, но при показе (case 2) показываются только те объекты, которые были созданы ранее
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2012, 15:45
Ответы с готовыми решениями:

Добавление нового элемента в массив объектов
Ошибка заключается в том что, после добавления нового элемента в массив groupArray через функцию Add, если попытаться вывести их происходит...

Добавление объектов класса в массив или список
Доброго времени суток ) Очередной глупый вопрос ! Задача: Есть класс Пользователь. - поле имя (string) - поле фамилия...

Реализовать добавление/удаление элементов в массив объектов типа PhoneBook
Есть небольшая задача создать телефонную книгу с возможностью записи контакта. выводом контактов на экран. и удалением всех контактов ...

14
 Аватар для Кот Ангенс
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
28.05.2012, 15:50
Для ответа требуется знать интерфейс структуры и реализацию этих методов:
C
1
2
gr[i].Info();
gr[i].Info_gr ();
0
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
28.05.2012, 18:35  [ТС]
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<stdio.h>
#include<windows.h>
using namespace std;
struct  date
{
    int day;
    char month [10];
    int  year;
};
class Student
{
    private:
    char *fam;
    char *name;
    int contact;
    date br;
    public:
    Student()
    {
        fam=new char[20];
        name=new char[20];
        date br1={1,"Января",1980};
        contact=0;
    }
    
void Info ()
{
    cout<<"Введите фамилию:\n";
    cin>>fam;
    cout<<"Введите имя:\n";
    cin>>name;
    cout<<"Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n";
    cin>>br.day;
    cin>>br.month;
    cin>>br.year;
    cout<<"Введите номер телефона:\n";
    cin>>contact;
}
 
void show ()
{
    cout<<"фамилия:\t"<<fam<<endl;
    cout<<"имя:\t\t"<<name<<endl;
    cout<<"дата рождения:\t"<<br.day<<"/"<<br.month<<"/"<<br.year<<endl;
    cout<<"телефон:\t"<<contact<<endl;
}
~Student()
    {
        delete[]fam;
        delete[]name;
    }
};
class Group: public Student
{
private:
 char* Name;
 char* Specializ;
 Student st[30];
public:
 Group()
    {
       
        Name=new char[25];
        Specializ=new char[25];
    }
 
  void Info_gr ()
{
    cout<<"Введите имя группы:\n";
    cin>>Name;
    cout<<"Введите специальность:\n";
    cin>>Specializ;
}
 
void Show_gr ()
{
    cout<<"имя группы::\t"<<Name<<endl;
    cout<<"специальность:\t"<<Specializ<<endl;
}
~Group()
    {
        delete[]Name;
        delete[]Specializ;
    }
};
Добавлено через 40 минут
добавил класс

Добавлено через 45 минут
up////

Добавлено через 1 час 16 минут
неужто никто не знает в чем трабла?

попробовал case 3 переделать в

case 3:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    
        int TEMP;
        Group *temp=new Group[10];
        for (int i=0;i<kol;i++)
        {
        temp[i]=gr[i];
         TEMP=i;
        }
        temp[TEMP+1].Info();
        temp[TEMP+1].Info_gr();
        delete[] gr;
 
        Group *gr=new Group[10];
 
        for(int i=0;i<kol;i++)
         gr[i]=temp[i];
        
        delete[] temp;
Но тогда после добавления вылетает окно с ошибкой
0
 Аватар для Кот Ангенс
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
29.05.2012, 07:03
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
#include <iostream>
#include <clocale>
#include <string>
#include <vector>
#include <wincon.h>
 
using namespace std;
 
struct date {
    short day;
    string month;
    short year;
};
 
class Student {
    string surname, name;
    int contact;
    date br;
public:
    Student(): br( { 1, "Января", 1980 } ) {
        contact = 0;
    }
 
    void Scan() {
        cout << "Введите фамилию:\n";
        cin >> surname;
        cout << "Введите имя:\n";
        cin >> name;
        cout << "Введите дату в формате \"00{ENTER}/месяц{ENTER}/0000\":\n";
        cin >> br.day >> br.month >> br.year;
        cout << "Введите номер телефона:\n";
        cin >> contact;
    }
 
    void Print() const {
        cout << "Фамилия:\t" << surname << "\nИмя:\t\t" << name << "\nДата рождения:\t"
            << br.day << '/' << br.month << '/' << br.year << "\nТелефон:\t" << contact << endl;
    }
};
 
class Group {
    string name, special;
    vector<Student*> st;
public:
    void Scan() {
        cout << "Введите название группы:\n";
        cin >> name;
        cout << "Введите специальность:\n";
        cin >> special;
    }
 
    void Print() const {
        cout << "Название группы:\t" << name << "\nСпециальность:\t" << special << "\n\n";
        for (unsigned short i = 0; i < st.size(); i++) {
            cout << "Студент №" << i << endl;
            st[i]->Print();
            cout << endl;
        }
    }
 
    void Add(Student* s) {
        st.push_back(s);
    }
 
    int Remove(const Student* s) {
        return st.erase(s);
    }
 
    void Clear() {
        st.clear();
    }
};
 
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Group g;
    vector<Student*> allStudents;
    cout << " 1 - создать список студентов\n"
        " 2 - показать список\n 3 - добавить студента\n 0-выход\n\n";
    short i;
    char n;
    while ((n = cin.get()) != '0')
        switch (n) {
            case 1:
                g.Clear();
                g.Scan();
            case 3:
                cout << "Введите количество студентов, которых необходимо добавить:\n";
                cin >> i;
                while (i--) {
                    allStudents.push_back(new Student);
                    allStudents[allStudents.size() - 1]->Scan();
                    g.Add(allStudents[allStudents.size() - 1]);
                }
                break;
 
            case 2:
                g.Print();
        }
    for (i = 0; i < allStudents.size(); i++)
        delete allStudents[i];
}
1
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 09:43  [ТС]
спасибо...но я как бы не совсем вкурсе о векторах и не понимаю код. Так же не пойму что есть
st.size()
st.push_back(s);
st.erase(s);
st.clear();
и для чего служат три последних метода. в которых используются эти функции
0
Заблокирован
29.05.2012, 09:48
Если не ошибаюсь, при добавлении переменная kol не увеличивается и цикл вывода просто не доходит до новых введенных строк
0
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 10:00  [ТС]
Цитата Сообщение от alex_bojik Посмотреть сообщение
Если не ошибаюсь, при добавлении переменная kol не увеличивается и цикл вывода просто не доходит до новых введенных строк
угу....case 3 у меня уже выглядит следующим образом

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
case 3:
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>size;
        Group *temp=new Group[kol+size];
        for (int i=0;i<kol;i++)
        {
        temp[i]=gr[i];
        
        }
        for (int i=kol;i<kol+size;i++)
        {
        temp[i].Info();
        temp[i].Info_gr();
        }
        delete[] gr;
        kol=kol+size;
        cout<<"количество элементов "<<kol;
 
        Group *gr=new Group[kol];
 
        for(int i=0;i<kol;i++)
         gr[i]=temp[i];
        
        delete[] temp;
 
        break;
Но после добавления объектов окно все равно вылетает
0
Заблокирован
29.05.2012, 10:08
Цитата Сообщение от Alt_Shift Посмотреть сообщение
Group *gr=new Group[kol];
тут заново объявляется gr... по-моему достаточно просто gr = new...
0
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 10:16  [ТС]
Цитата Сообщение от alex_bojik Посмотреть сообщение
тут заново объявляется gr... по-моему достаточно просто gr = new...
действительно достаточно Но проблему это не решило
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
29.05.2012, 12:14
Alt_Shift,

Вы когда создаете новый объект, вы не инструктируете компилятор о том, чтобы он увеличил счетчик объектов, поэтому отображается ровно столько, сколько объектов было изначально создано. Я дам вам ваш же код, вы все наверное поймете. Только уберите ненужные setlocale (я понаписал и где не надо просто)

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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
struct  date
{
    int day;
    char month [10];
    int  year;
};
class Student
{
    private:
    char *fam;
    char *name;
    int contact;
    date br;
    public:
    Student()
    {     
        fam=new char[20];
        name=new char[20];
        date br1={1,"Января",1980};
        contact=0;
    }
    
void Info ()
{
    cout<<"\n";
    cout<<"Введите фамилию: "; cin>>fam;
    cout<<"Введите имя: ";     cin>>name;
    cout<<"Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n ";
    cin>>br.day;
    cin>>br.month;
    cin>>br.year;
    cout<<"Введите номер телефона: "; cin>>contact;
}
 
void show ()
{
    setlocale(LC_ALL, "Russian");
    cout<<"фамилия:\t"<<fam<<endl;
    cout<<"имя:\t\t"<<name<<endl;
    cout<<"дата рождения:\t"<<br.day<<"/"<<br.month<<"/"<<br.year<<endl;
    cout<<"телефон:\t"<<contact<<endl;
}
~Student()
    {
        delete[]fam;
        delete[]name;
    }
};
class Group: public Student
{
private:
 char* Name;
 char* Specializ;
 Student st[30];
public:
 Group()
    {
        
        Name=new char[25];
        Specializ=new char[25];
    }
 
  void Info_gr ()
{
    setlocale(LC_ALL, "Russian");
    cout<<"Введите имя группы: ";   cin>>Name;
    cout<<"Введите специальность: ";cin>>Specializ;
}
 
void Show_gr ()
{
    cout<<"имя группы::\t"<<Name<<endl;
    cout<<"специальность:\t"<<Specializ<<endl;
}
 
~Group()
    {
        delete[]Name;
        delete[]Specializ;
    }
};
 
void main()
{
    setlocale(LC_ALL, "Russian");
 
    int kol;
    Group *gr=new Group[10];
    int n=0;
    
    
   do
   {
    cout<<" 1-создать список студентов \n 2-показать список \n 3-добавить студента \n 0-выход\n";
    cin>>n;
    switch(n)
    {
    case 1:
    cout<<"Введите количество студентов в группе: ";
           cin>>kol;
 
            for(int i=0;i<kol;i++)
                {
                 gr[i].Info();
                 gr[i].Info_gr ();
                }
            
            break;
 
    case 2:
        for(int i=0;i<kol;i++)
        {
        cout<<"Студент N"<<i+1<<"\n";
        gr[i].show();
        gr[i].Show_gr();
        }
        break;
    case 3:
        int dob; int temp=kol;  //temp - Изначальное число объектов
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>dob; kol=kol+dob; //Вычисляете сколько объектов будет и обновляете kol
 
        for (int i=temp;i<kol;i++)  
        {  
                gr[i].Info();
                gr[i].Info_gr ();
        }
 
    }
    }
    while(n!=0);
}
1
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 13:09  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение
Alt_Shift,

Вы когда создаете новый объект....
Спасибо Все заработало.

Добавлено через 9 минут
и еще вопрос...каким образом описать case 4 для удаления объекта номер которого введен с клавиатуры?Как то так я понимаю

int del;
cin>>del;
for (int i=0;i<kol;i++)
{
if (i+1==del)

но дальше стопорюсь
0
 Аватар для Кот Ангенс
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
29.05.2012, 13:14
Если честно, я не совсем понимаю, зачем наследовать группу от студента.
0
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 14:06  [ТС]
в задании указано что бы было наследование, так то оно там лишнее, согласен.

Добавлено через 19 минут
повторюсь...
каким образом описать case 4 для удаления объекта номер которого введен с клавиатуры?Как то так я понимаю

C++
1
2
3
4
5
int del;
 cin>>del;
 for (int i=0;i<kol;i++)
 {
 if (i+1==del)
но дальше стопорюсь
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
29.05.2012, 14:08
C++
1
2
3
4
5
int kol=0;
    Group *gr=new Group[10];
    int n=0;
    int dob; int temp=kol;
    int number;
C++
1
2
3
4
5
6
7
case 4:
        cout<<"Удалить N "; cin>>number; //number - номер удаляемого объекта
        temp=kol; kol--; //как и ранее говорил, инструктируем компилятор об уменьшении объектов
        for (int i=number-1;i<temp;i++) //Отсчет массива идет с нуля, поэтому Number указан как на единицу меньше
        {
            gr[i]=gr[i+1];  //Обновление элементов       
        }
В отредактированном вам мною коде я объявлял переменные внутри case чтоб вы видели что и зачем добавляется. Но такое объявление переменных не есть хорошо. Нужно их вынести к общей группе переменных (надеюсь разберетесь).
1
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 14:31  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение
В отредактированном вам мною коде я объявлял переменные внутри case чтоб вы видели что и зачем добавляется. Но такое объявление переменных не есть хорошо. Нужно их вынести к общей группе переменных (надеюсь разберетесь).
ну это я понял сразу, как только оно начало матерится на переменную внутри case 3 при попытке ее использовать в case 4 Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2012, 14:31
Помогаю со студенческими работами здесь

Jasmine. Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив
Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив. toContain работает корректно только,...

Добавление и удаление объектов. Рисование объектов на экране
Доброго времени суток. Есть очень интересующий вопрос, как сделать добавление, обновление, удаление объектов? Допустим есть класс...

Добавление данных в массив
Нашел в интернете вот такой вариант: int Massiv = {1, 1, 2}; Array myArrayTwo = Array.CreateInstance(typeof(String), Massivv); ...

Добавление данных в массив
Помогите, пожалуйста, разобраться. Мне необходимо добавить данные в массив, а потом вывести эти данные на экран, разделяя их запятой. Вот...

Добавление данных в массив
Вообщем мне 14. Так что строго не судить) У меня такой вопрос как можно добавить в массив? Код на РНР у меня таков ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru