Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 15.04.2021
Сообщений: 57
1

Вывести элементы массива указателей на обьект

11.12.2021, 22:09. Показов 520. Ответов 8

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужна помощь с такими пунктами:

1. Как правильно вывести элементы массива указателей на обьект?
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
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
#include <iostream>
#include <string>
 
using namespace std;
 
class Human
{
protected: 
    string name;
    string surname;
    int year;
    string passport;
    string workplace;
    double salary;
 
public:
    Human();
    Human(string name, string surname, int year, string passport, string workplace);
    void setName(string n);
    string getName();
    void setSurname(string sur);
    string getSurname();
    void setYear(int y);
    int getYear();
    void setPassport(string p);
    string getPassport();
    void setWorkplace(string w);
    string getWorkplace();
    
    void show_info();
    
    int age();
    virtual void setSalary() = 0;
    double getSalary();
 
    virtual ~Human();
 
    friend ostream& operator << (ostream& out, const Human& object)
    {
        out << object.name;
        out << object.surname;
        out << object.year;
        out << object.salary;
        return out;
    }
 
    friend istream& operator >> (istream& in, Human& object)
    {
        in >> object.name;
        in >> object.surname;
        in >> object.year;
        in >> object.passport;
        in >> object.name;
        in >> object.name;
        return in ;
    }
 
};
 
#include <ctime>
 
double Human::getSalary()
{
    return salary;
}
 
Human::~Human()
{
}
 
 
Human::Human()
{
    year = 1;
    salary = 1.20;
}
 
Human::Human(string name, string surname, int year, string passport, string workplace)
{
    this->name = name;
    this->surname = surname;
    this->year = year;
    this->passport = passport;
    this->workplace = workplace;
 
}
 
void Human::setName(string n)
{
    n = name;
}
 
string Human::getName()
{
    return name;
}
 
void Human::setSurname(string sur)
{
    sur = surname;
}
 
string Human::getSurname()
{
    return surname;
}
 
void Human::setYear(int y)
{
    y = year;
}
 
int Human::getYear()
{
    return year;
}
 
void Human::setPassport(string p)
{
    p = passport;
}
 
string Human::getPassport()
{
    return passport;
}
 
void Human::setWorkplace(string w)
{
    w = workplace;
}
 
string Human::getWorkplace()
{
    return workplace;
}
 
int Human::age()
{
    time_t t;
    tm* tk;
    time(&t);
    tk = localtime(&t);
    return 1900+tk->tm_year-year;
    
}
 
void Human::show_info()
{
    cout << name;
    cout << surname;
    cout << year;
    cout << salary;
}
 
void Human::setSalary()
{
}
 
class Diller:public Human
{
protected:
    int cCount;
 
public:
 
    Diller();
    Diller(string name, string surname, int year, string passport, string workplace, int cCount);
    void setcCount(int c);
    int getcCount();
    void setSalary();
};
 
Diller:: Diller()
{
    year = 1;
    salary = 1.20;
    cCount = 5;
}
 
Diller::Diller(string name, string surname, int year, string passport, string workplace, int cCount):Human( name,  surname,  year,  passport,  workplace)
{
    
    this->cCount = cCount;
}
 
void Diller::setcCount(int c)
{
    c = cCount;
}
 
int Diller::getcCount()
{
    return cCount;
}
 
void Diller::setSalary()
{
    salary = 3.4 * cCount;
}
 
class Student :public Human
{
protected:
    int grade[5];
    float avg;
public:
    int getGrade();
    void setGrade(int ocinka[5]);
    Student();
    Student(string name, string surname, int year, string passport, string workplace, int *k, float avg);
    float sBal();
    void setSalary();
 
};
int Student::getGrade()
{
     for (int i = 0; i < 5; i++) 
      
         return grade[i];
     return 0;
}
 
void Student::setGrade(int ocinka[5])
{
    for (int i = 0; i < 5; i++)
    {
        this->grade[i]=ocinka[i];
    } 
}
 
Student::Student(string name, string surname, int year, string passport, string workplace, int * k, float avg):Human(name, surname, year, passport, workplace)
{
    
    this->avg = avg;
    for (int i = 0; i < 5; i++)
    {
        grade[i] = k[i];
    }
}
 
 
Student::Student()
{
    for (int i = 0; i < 5; i++)
    {
        grade[i]=0;
    }
    avg = 0;
    salary = 1.20;
}
 
 
float Student::sBal()
{
    int i;
    float sum = 0, avg;
    for (i = 0; i < 5; i++){
        sum = sum + grade[i];
    avg = sum / 5;
    }
    return avg;
}
 
void Student::setSalary()
{
    salary = avg * 500;
}
 
class Doctor:public Human
{
protected:
    int pCount;
 
public:
 
    Doctor();
    Doctor(string name, string surname, int year, string passport, string workplace, int pCount);
    void setpCount(int p);
    int getpCount();
    void setSalary();
 
};
Doctor::Doctor()
{
    year = 1;
    salary = 1.20;
    pCount = 10;
}
 
Doctor::Doctor(string name, string surname, int year, string passport, string workplace, int pCount):Human(name, surname, year, passport, workplace)
{
 
    this->pCount = pCount;
}
 
void Doctor::setpCount(int p)
{
    p = pCount;
}
 
int Doctor::getpCount()
{
    return pCount;
}
 
void Doctor::setSalary()
{
    salary = pCount * 20;
}
 
 
int main() {
    setlocale(LC_ALL, "rus");
 
    string name, surname, passport, workplace;
    int year, cCount, grade[5], pCount, summ=0, summ1=0;
    float avg;
    Human* humans [3];
    for (int i = 0; i < 3; ++i)
    {
        cout << "Item number " << i + 1 << " is a (1. Doctor/ 2. Student/ 3. Diller): ";
        char choice;
        cin >> choice;
        switch (choice)
        {
        case '1': 
            cout << "Введите имя доктора: ";
            cin >> name;
            cout << "Введите фамилию доктора: ";
            cin >> surname;
            cout << "Введите год рождения доктора: ";
            cin >> year;
            cout << "Введите пасспорт доктора: ";
            cin >> passport;
            cout << "Введите место работы доктора: ";
            cin >> workplace;
            cout << "Введите количество пациентов доктора: ";
            cin >> pCount;
            humans[i] = new Doctor(name,  surname,  year,  passport,  workplace, pCount);
            break;
        case '2': 
            cout << "Введите имя студента: ";
            cin >> name;
            cout << "Введите фамилию студента: ";
            cin >> surname;
            cout << "Введите год рождения студента: ";
            cin >> year;
            cout << "Введите пасспорт студента: ";
            cin >> passport;
            cout << "Введите место работы студента: ";
            cin >> workplace;
            cout << "Введите 5 оценок студента: ";
            for (int i = 0; i < 5; i++) {
                cin >> grade[i];
                summ+=grade[i];
                }
            avg = summ / 5.;
            humans[i] = new Student (name, surname,  year,  passport,  workplace, grade, avg); 
            break;
        case '3': 
            cout << "Введите имя продавца: ";
            cin >> name;
            cout << "Введите фамилию продавца: ";
            cin >> surname;
            cout << "Введите год рождения продавца: ";
            cin >> year;
            cout << "Введите пасспорт продавца: ";
            cin >> passport;
            cout << "Введите место работы продавца: ";
            cin >> workplace;
            cout << "Введите количество проданных авто продавца: ";
            cin >> cCount;
            humans[i] = new Diller(name, surname, year, passport, workplace, cCount); 
            break;
        default:
            --i;
            cout << "Invalid choise!" << std::endl;
            break;
        }
    }
    cout << endl;
    
    for (int i = 0; i < 3; ++i)
    {
        summ1+=humans[i]->setSalary();
    }
    cout << summ1/3.;
    
    for (int i = 0; i < 5; ++i)
    {
        humans[i]->show_info();
    }
 
    delete[] humans;
 
    system("pause");
    return 0;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2021, 22:09
Ответы с готовыми решениями:

Вывести адреса указателей на больший и меньший элементы массива
Составить программу, только по проще, и если можно, то с комментариями :) Задача:составить...

При помощи указателей вывести на экран исходный массив, в котором все отрицательные элементы заменились бы на значение наибольшего элемента массива
изменить программу так, чтобы при помощи указателей вывести на экран исходный массив, в котором...

Для случайного целочисленного массива сформировать массив указателей на нулевые элементы массива
Не могу разобраться в задании

Надо вывести массив указателей, почти всё готово, но я не знаю как именно вывести массив указателей
Вот как звучит задание: Создать динамическую вещественную матрицу NxM (N и M ввести с...

При помощи указателей найти и поменять местами элементы массива
Использование указателей на массивы, работа со строками. Вариант № 11 1.В массиве М(45) лежат...

8
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
12.12.2021, 11:17 2
Цикл.
0
1 / 1 / 0
Регистрация: 15.04.2021
Сообщений: 57
12.12.2021, 16:43  [ТС] 3
nmcf, вот я создала циклы для этих заданий, но проблема в том, что оно ничего не выводит, не можете подсказать, в чём может быть проблема?

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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
#include <iostream>
#include <string>
 
using namespace std;
 
class Human
{
protected: 
    string name;
    string surname;
    int year;
    string passport;
    string workplace;
    double salary;
 
public:
    Human();
    Human(string name, string surname, int year, string passport, string workplace);
    void setName(string n);
    string getName();
    void setSurname(string sur);
    string getSurname();
    void setYear(int y);
    int getYear();
    void setPassport(string p);
    string getPassport();
    void setWorkplace(string w);
    string getWorkplace();
    
    void show_info();
    
    int age();
    virtual void setSalary() = 0;
    double getSalary();
 
    virtual ~Human();
 
    friend ostream& operator << (ostream& out, const Human& object)
    {
        out << object.name;
        out << object.surname;
        out << object.year;
        out << object.salary;
        return out;
    }
 
    friend istream& operator >> (istream& in, Human& object)
    {
        in >> object.name;
        in >> object.surname;
        in >> object.year;
        in >> object.passport;
        in >> object.name;
        in >> object.name;
        return in ;
    }
 
};
 
#include <ctime>
 
double Human::getSalary()
{
    return salary;
}
 
Human::~Human()
{
}
 
 
Human::Human()
{
    year = 1;
    salary = 1.20;
}
 
Human::Human(string name, string surname, int year, string passport, string workplace)
{
    this->name = name;
    this->surname = surname;
    this->year = year;
    this->passport = passport;
    this->workplace = workplace;
 
}
 
void Human::setName(string n)
{
    n = name;
}
 
string Human::getName()
{
    return name;
}
 
void Human::setSurname(string sur)
{
    sur = surname;
}
 
string Human::getSurname()
{
    return surname;
}
 
void Human::setYear(int y)
{
    y = year;
}
 
int Human::getYear()
{
    return year;
}
 
void Human::setPassport(string p)
{
    p = passport;
}
 
string Human::getPassport()
{
    return passport;
}
 
void Human::setWorkplace(string w)
{
    w = workplace;
}
 
string Human::getWorkplace()
{
    return workplace;
}
 
int Human::age()
{
    time_t t;
    tm* tk;
    time(&t);
    tk = localtime(&t);
    return 1900+tk->tm_year-year;
    
}
 
void Human::show_info()
{
    cout << name;
    cout << surname;
    cout << year;
    cout << salary;
}
 
void Human::setSalary()
{
}
 
class Diller:public Human
{
protected:
    int cCount;
 
public:
 
    Diller();
    Diller(string name, string surname, int year, string passport, string workplace, int cCount);
    void setcCount(int c);
    int getcCount();
    void setSalary();
};
 
Diller:: Diller()
{
    year = 1;
    salary = 1.20;
    cCount = 5;
}
 
Diller::Diller(string name, string surname, int year, string passport, string workplace, int cCount):Human( name,  surname,  year,  passport,  workplace)
{
    
    this->cCount = cCount;
}
 
void Diller::setcCount(int c)
{
    c = cCount;
}
 
int Diller::getcCount()
{
    return cCount;
}
 
void Diller::setSalary()
{
    salary = 3.4 * cCount;
}
 
class Student :public Human
{
protected:
    int grade[5];
    float avg;
public:
    int getGrade();
    void setGrade(int ocinka[5]);
    Student();
    Student(string name, string surname, int year, string passport, string workplace, int *k, float avg);
    float sBal();
    void setSalary();
 
};
int Student::getGrade()
{
     for (int i = 0; i < 5; i++) 
      
         return grade[i];
     return 0;
}
 
void Student::setGrade(int ocinka[5])
{
    for (int i = 0; i < 5; i++)
    {
        this->grade[i]=ocinka[i];
    } 
}
 
Student::Student(string name, string surname, int year, string passport, string workplace, int * k, float avg):Human(name, surname, year, passport, workplace)
{
    
    this->avg = avg;
    for (int i = 0; i < 5; i++)
    {
        grade[i] = k[i];
    }
}
 
 
Student::Student()
{
    for (int i = 0; i < 5; i++)
    {
        grade[i]=0;
    }
    avg = 0;
    salary = 1.20;
}
 
 
float Student::sBal()
{
    int i;
    float sum = 0, avg;
    for (i = 0; i < 5; i++){
        sum = sum + grade[i];
    avg = sum / 5;
    }
    return avg;
}
 
void Student::setSalary()
{
    salary = avg * 500;
}
 
class Doctor:public Human
{
protected:
    int pCount;
 
public:
 
    Doctor();
    Doctor(string name, string surname, int year, string passport, string workplace, int pCount);
    void setpCount(int p);
    int getpCount();
    void setSalary();
 
};
Doctor::Doctor()
{
    year = 1;
    salary = 1.20;
    pCount = 10;
}
 
Doctor::Doctor(string name, string surname, int year, string passport, string workplace, int pCount):Human(name, surname, year, passport, workplace)
{
 
    this->pCount = pCount;
}
 
void Doctor::setpCount(int p)
{
    p = pCount;
}
 
int Doctor::getpCount()
{
    return pCount;
}
 
void Doctor::setSalary()
{
    salary = pCount * 20;
}
 
 
int main() {
    setlocale(LC_ALL, "rus");
 
    string name, surname, passport, workplace;
    int year, cCount, grades[5], pCount;
        double summ=0, summ1=0;
    float avg;
    Human* humans [3];
    for (int i = 0; i < 3; ++i)
    {
        cout << "Item number " << i + 1 << " is a (1. Doctor/ 2. Student/ 3. Diller): ";
        char choice;
        cin >> choice;
        switch (choice)
        {
        case '1': 
            cout << "Введите имя доктора: ";
            cin >> name;
            cout << "Введите фамилию доктора: ";
            cin >> surname;
            cout << "Введите год рождения доктора: ";
            cin >> year;
            cout << "Введите пасспорт доктора: ";
            cin >> passport;
            cout << "Введите место работы доктора: ";
            cin >> workplace;
            cout << "Введите количество пациентов доктора: ";
            cin >> pCount;
            humans[i] = new Doctor(name,  surname,  year,  passport,  workplace, pCount);
            break;
        case '2': 
            cout << "Введите имя студента: ";
            cin >> name;
            cout << "Введите фамилию студента: ";
            cin >> surname;
            cout << "Введите год рождения студента: ";
            cin >> year;
            cout << "Введите пасспорт студента: ";
            cin >> passport;
            cout << "Введите место работы студента: ";
            cin >> workplace;
            cout << "Введите 5 оценок студента: ";
            for (int i = 0; i < 5; i++) {
                cin >> grades[i];
                summ++;
            }
            avg = summ / 5.;
            humans[i] = new Student (name, surname,  year,  passport,  workplace, grades, avg); 
            break;
        case '3': 
            cout << "Введите имя продавца: ";
            cin >> name;
            cout << "Введите фамилию продавца: ";
            cin >> surname;
            cout << "Введите год рождения продавца: ";
            cin >> year;
            cout << "Введите пасспорт продавца: ";
            cin >> passport;
            cout << "Введите место работы продавца: ";
            cin >> workplace;
            cout << "Введите количество проданных авто продавца: ";
            cin >> cCount;
            humans[i] = new Diller(name, surname, year, passport, workplace, cCount); 
            break;
        default:
            --i;
            cout << "Invalid choise!" << std::endl;
            break;
        }
    }
    cout << endl;
 
    for (int i = 0; i < 3; ++i)//сумма зарплат
    {
        summ1 =summ1+ humans[i]->getSalary();
    }
    cout << summ1 / 3.;
 
    for (int i = 0; i < 3; i++)//вывод всех элементов
    {
        cout << humans[i];
    }
 
    
 
    system("pause");
    return 0;
 
}
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
12.12.2021, 17:03 4
Что конкретно выводить хочешь? У тебя же там функции предусмотрены. Типа такого:
C++
1
cout << humans[i].getName();
0
515 / 407 / 188
Регистрация: 08.04.2013
Сообщений: 1,739
12.12.2021, 17:10 5
таких ляпов полно
C++
1
2
3
4
5
void Human::setName(string n)
{
   // n = name;
 name  = n;
}
0
1 / 1 / 0
Регистрация: 15.04.2021
Сообщений: 57
12.12.2021, 17:11  [ТС] 6
nmcf, вывести хочу зарплату каждого элемента массива и возраст. Я же перегрузила оператор вывода, думала получится тогда вывести всю информацию. Не понимаю, что я не так делаю
0
515 / 407 / 188
Регистрация: 08.04.2013
Сообщений: 1,739
12.12.2021, 17:13 7
а так сразу нельзя ?
C++
1
2
3
4
5
6
void Diller::setcCount(int c)
{
   // c = cCount;
   cCount = c;
   this->setSalary();
}
0
1 / 1 / 0
Регистрация: 15.04.2021
Сообщений: 57
12.12.2021, 17:28  [ТС] 8
marat_miaki, я исправила все эти ляпы, спасибо что обратили внимание. Но всё равно я не могу вывести ни зарплату, ни возраст, может Вы можете помочь?
0
515 / 407 / 188
Регистрация: 08.04.2013
Сообщений: 1,739
12.12.2021, 18:02 9
на конструкторах объектов тоже добавьте
C++
1
this->setSalary();
я тоже в классах новичок
C++
1
2
3
4
5
6
int Student::getGrade()
{
     for (int i = 0; i < 5; i++)
         return grade[i];
     return 0;
}
еще куча ляпов

Добавлено через 25 минут
Scientific girl, Почему вы class Human не сделали нормальным абстрактным, а прилепили кучу ненужных функции, все же это может делать нормальный конструктор
0
12.12.2021, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2021, 18:02
Помогаю со студенческими работами здесь

Найти наибольшее из чисел,на которые ссылаются элементы массива указателей
используя ссылочные переменные написать следующие программы: Найти наибольшее из чисел,на которые...

Обращение к элементам линейного списка через элементы массива указателей
Вот полная версия программы. Компилятор не выдаёт ошибок, но при выполнении, судя по всему, на...

Вывести адрес двумерного массива арифметикой указателей
Двумерный массив располагается в памяти в виде непрерывной цепочки. В программе сначала я вывожу...

Элементы массива задаются с помощью датчика случайных чисел. Вывести элементы массива на экран в обратном порядке.
решите пожалуйста Дан одномерный массив a1,...,an, состоящий из 17 целых чисел. Элементы...

Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей
Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru