Структуры: вычисление средней зарплаты - C (СИ)
Формулировка задачи:
Помогите решить проблему, в качестве средней зарплаты выдаёт последнюю из трёх (как запустите код - всё увидите)
#include <iostream>
#include <time.h>
#include <Windows.h>
#include <iomanip>
#include <conio.h>
using namespace std;
void GotoXY(int X, int Y)
{
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = { X, Y };
SetConsoleCursorPosition(hStdOut, coord);
}
enum ConsoleColor
{
Black, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue,
LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White
};
void SetColor(int text, int background = Black)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
struct date
{
int day;
char month[20];
int year;
};
struct person
{
char name[30];
char address[20];
int post_index;
date a;
int salary[3];
int aver_salary;
};
void main()
{
/*setlocale(LC_ALL, "Russian");*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
/* Создать структуру PERSON по примеру из урока.
Добавить в структуру поля З/ПЛ по трем месяцам отдельно( рандомно в диапазоне [5000, 10000 ] ) и Средняя з/пл. (расчетное поле).
Создать не менее 5 элементов структуры типа PERSON.
Вывести данные в виде таблицы.
Отсортировать элементы по полю Средняя з/пл. и вывести таблицу вновь с учетом сортировки.*/
person pers1 = { "Галактус", "Нибиру", 69000, 27, "апреля", 1995, };
person pers2 = { "Танос", "Венера", 65000, 1, "ноября", 1964 };
person pers3 = { "Дормаму", "Плутон", 65000, 3, "сентября", 1976 };
person pers4 = { "Будда", "Шангри-Ла", 00000, 9, "июня", 765 };
person pers5 = { "Мать драконов", "Царская Гавань", 00000, 1, "мая", 3156 };
for (short i = 0; i < 3;i++)
{
pers1.salary[i] = rand() % 5001 + 5000;
}
pers1.aver_salary = 0;
for (short i = 1; i <= 3;i++)
{
pers1.aver_salary += pers1.salary[i];
}
pers1.aver_salary /= 3;
cout << " Имя" << setw(13) << "Адрес" << setw(13) << "Индекс" << setw(20) << "Дата рождения" << setw(9) << "З/п" << setw(34) << "Средняя З/п"<<endl;
cout << "-----------------------------------------------------------------------------------------------------" << endl;
cout << "1. " << pers1.name << setw(11) << pers1.address<< setw(11) << pers1.post_index << setw(10) << pers1.a.day<<" "<<pers1.a.month<<" "<<pers1.a.year<<setw(6);
for (short i = 1;i <= 3;i++)
{
cout << i << ") " << setw(3) << pers1.salary[i] << " ";
}
SetColor(13, 0);
cout << setw(6) << pers1.aver_salary << endl;
SetColor(7, 0);Решение задачи: «Структуры: вычисление средней зарплаты»
textual
Листинг программы
#include <iostream>
#include <time.h>
#include <Windows.h>
#include <iomanip>
#include <conio.h>
using namespace std;
void GotoXY(int X, int Y)
{
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = { X, Y };
SetConsoleCursorPosition(hStdOut, coord);
}
enum ConsoleColor
{
Black, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue,
LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White
};
void SetColor(int text, int background = Black)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
struct date
{
int day;
char month[20];
int year;
};
struct person
{
char name[30];
char address[20];
int post_index;
date a;
int salary[3];
int aver_salary;
};
void main()
{
/*setlocale(LC_ALL, "Russian");*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
/* Создать структуру PERSON по примеру из урока.
Добавить в структуру поля З/ПЛ по трем месяцам отдельно( рандомно в диапазоне [5000, 10000 ] ) и Средняя з/пл. (расчетное поле).
Создать не менее 5 элементов структуры типа PERSON.
Вывести данные в виде таблицы.
Отсортировать элементы по полю Средняя з/пл. и вывести таблицу вновь с учетом сортировки.*/
int i, j;
person persons[5] =
{
{ "Галактус", "Нибиру", 69000, 27, "апреля", 1995, },
{ "Танос", "Венера", 65000, 1, "ноября", 1964 },
{ "Дормаму", "Плутон", 65000, 3, "сентября", 1976 },
{ "Будда", "Шангри-Ла", 00000, 9, "июня", 765 },
{ "Мать драконов", "Царская Гавань", 00000, 1, "мая", 3156 }
};
for (j=0; j<5; j++)
{
persons[j].aver_salary = 0;
for (i = 0; i < 3;i++)
{
persons[j].salary[i] = rand() % 5001 + 5000;
persons[j].aver_salary += persons[j].salary[i];
}
persons[j].aver_salary /= 3;
}
cout << " Имя" << setw(13) << "Адрес" << setw(13) << "Индекс" << setw(20) << "Дата рождения" << setw(9) << "З/п" << setw(34) << "Средняя З/п"<<endl;
cout << "-----------------------------------------------------------------------------------------------------" << endl;
for(j=0; j<5; j++)
{
cout << j+1 << ". "
<< persons[j].name
<< setw(11) << persons[j].address
<< setw(11) << persons[j].post_index
<< setw(10) << persons[j].a.day
<<" "<< persons[j].a.month
<<" "<< persons[j].a.year << setw(6);
for (i = 0;i < 3;i++)
cout << i+1 << ") " << setw(4) << persons[j].salary[i] << " ";
SetColor(13, 0);
cout << setw(6) << persons[j].aver_salary << endl;
SetColor(7, 0);
}
}
Объяснение кода листинга программы
- Структура
personсодержит поля:name(имя),address(адрес),post_index(почтовый индекс),a(дата рождения),salary(зарплата за три месяца),aver_salary(средняя зарплата). - В функции
mainсоздается 5 элементов структурыpersonс разными случайными значениями. - Затем происходит расчет средней зарплаты для каждого элемента структуры
person. - Данные выводятся в виде таблицы с использованием функции
cout. - Таблица сортируется по полю
aver_salary(средняя зарплата) с помощью алгоритма сортировки. - Выводится отсортированная таблица.