Прата. Глава 8. Дополнительные сведения о функция. Практика.
Самоконтроль 4. (Основная мысль задачи сохранена, но переформулирована)
Имеется некая структура, необходимо написать функция, которая бы отображала данные каждого члена структуры. Также, добавьте функцию, которая бы делала перерасчет зарплаты (salary) в зависимости от стажа (возьмём с потолка коэффициент K (допустим 5%), который будет перемножаться на стаж работы (experience_years), в итоге получим salary = salary * (1 + K * experience_years) ).
Исходная структура:
struct employee{
std::string name;
int id;
int experience_years;
double salary;
};
Мое решение.
Здесь я использую в аргументе функции show_employee const & (передается константная ссылка структуры, а через "." обращается к её членам), чтобы функция не могла изменить данные в структуре. Также (не по заданию), решил сделать массив указателей *ptr[3] на структуры person, чтобы их вызвать через цикл (просто повторяю указатели..).
Изменение кода, добавляется функция перерасчитывающая зарплату:
Здесь мы просто через ссылку обращаемся к переменной структуры salary, производим вычисление и в самой структуре person1 и далее происходят изменения.
Без указателей будет такой вид:
salary_exp_years(person1, K);
show_employee(person1);
salary_exp_years(person2, K);
show_employee(person2);
salary_exp_years(person3, K);
show_employee(person3);
Самоконтроль 4. (Основная мысль задачи сохранена, но переформулирована)
Имеется некая структура, необходимо написать функция, которая бы отображала данные каждого члена структуры. Также, добавьте функцию, которая бы делала перерасчет зарплаты (salary) в зависимости от стажа (возьмём с потолка коэффициент K (допустим 5%), который будет перемножаться на стаж работы (experience_years), в итоге получим salary = salary * (1 + K * experience_years) ).
Исходная структура:
struct employee{
std::string name;
int id;
int experience_years;
double salary;
};
Мое решение.
#include <iostream>
#include <string>
struct employee{
std::string name;
int id;
int experience_years;
double salary;
};
void show_employee(const employee &item);
int main() {
employee person1 = {"Lily", 100, 5, 10000.0};
employee person2 = {"Vova", 101, 1, 10000.0};
employee person3 = {"Peter", 99, 15, 10000.0};
employee *ptr[3] = {&person1, &person2, &person3};
std::cout << "Name\tId\tExp\tSalary"<< std::endl;
for(int i = 0; i < 3; ++i){
show_employee(*ptr[i]);
}
return 0;
}
void show_employee(const employee &item){
std::cout << item.name << "\t"
<< item.id << "\t"
<< item.experience_years << "\t"
<< item.salary << std::endl;
}
Здесь я использую в аргументе функции show_employee const & (передается константная ссылка структуры, а через "." обращается к её членам), чтобы функция не могла изменить данные в структуре. Также (не по заданию), решил сделать массив указателей *ptr[3] на структуры person, чтобы их вызвать через цикл (просто повторяю указатели..).
Изменение кода, добавляется функция перерасчитывающая зарплату:
#include <iostream>
#include <string>
struct employee{
std::string name;
int id;
int experience_years;
double salary;
};
const double K = 0.05;
void show_employee(const employee &item);
void salary_exp_years(employee &item, const double K);
int main() {
employee person1 = {"Lily", 100, 5, 10000.0};
employee person2 = {"Vova", 101, 1, 10000.0};
employee person3 = {"Peter", 99, 15, 10000.0};
employee *ptr[3] = {&person1, &person2, &person3};
std::cout << "Name\tId\tExp\tSalary"<< std::endl;
for(int i = 0; i < 3; ++i){
salary_exp_years(*ptr[i], K);
show_employee(*ptr[i]);
}
return 0;
}
void show_employee(const employee &item){
std::cout << item.name << "\t"
<< item.id << "\t"
<< item.experience_years << "\t"
<< item.salary << std::endl;
}
void salary_exp_years(employee &item, const double K){
item.salary = item.salary * (1 + K * item.experience_years);
}
Здесь мы просто через ссылку обращаемся к переменной структуры salary, производим вычисление и в самой структуре person1 и далее происходят изменения.
Без указателей будет такой вид:
salary_exp_years(person1, K);
show_employee(person1);
salary_exp_years(person2, K);
show_employee(person2);
salary_exp_years(person3, K);
show_employee(person3);