Загрузка данных


#include <stdio.h>
#include <string.h>
#include <locale.h>

#define SIZE 10

/* Определение структуры сотрудника */
struct Employee {
    char name[50];          /* Ф.И.О. */
    double salary;          /* Оклад */
    int department;         /* Номер отдела */
    char phone[20];         /* Номер телефона */
};

int main() {
    int i, j;
    int current_dept;
    int already_processed;
    int max_idx;
    int processed_depts[SIZE];
    int num_processed = 0;

    /* Инициализация массива из 10 сотрудников */
    struct Employee staff[SIZE] = {
        {"Иванов И.И.", 45000.0, 1, "+7(901)123-45-67"},
        {"Петров П.П.", 72000.0, 1, "+7(902)234-56-78"},
        {"Сидоров С.С.", 48000.0, 1, "+7(903)345-67-89"},
        {"Смирнова А.А.", 60000.0, 2, "+7(904)456-78-90"},
        {"Кузнецов В.В.", 58000.0, 2, "+7(905)567-89-01"},
        {"Попова Е.Е.", 85000.0, 2, "+7(906)678-90-12"},
        {"Соколов М.М.", 40000.0, 3, "+7(907)789-01-23"},
        {"Лебедев А.Н.", 92000.0, 3, "+7(908)890-12-34"},
        {"Козлов Д.Д.", 39000.0, 3, "+7(909)901-23-45"},
        {"Новикова О.О.", 70000.0, 1, "+7(910)012-34-56"}
    };

    setlocale(LC_ALL, "");

    /* Вывод исходных данных */
    printf("--- ИСХОДНЫЕ ДАННЫЕ О СОТРУДНИКАХ ---\n");
    printf("%-20s | %-6s | %-15s | %-10s\n", 
           "Ф.И.О.", "Отдел", "Телефон", "Оклад (руб)");
    printf("-------------------------------------------------------------------\n");

    for (i = 0; i < SIZE; i++) {
        printf("%-20s | %-6d | %-15s | %-10.2f\n", 
               staff[i].name, 
               staff[i].department, 
               staff[i].phone, 
               staff[i].salary);
    }

    printf("\n--- СОТРУДНИКИ С МАКСИМАЛЬНЫМ ОКЛАДОМ ПО ОТДЕЛАМ ---\n\n");

    /* Проходим по всем сотрудникам */
    for (i = 0; i < SIZE; i++) {
        current_dept = staff[i].department;
        already_processed = 0;

        /* Проверяем, искали ли мы уже максимум для этого отдела */
        for (j = 0; j < num_processed; j++) {
            if (processed_depts[j] == current_dept) {
                already_processed = 1;
                break;
            }
        }

        /* Если этот отдел еще не проверяли */
        if (!already_processed) {
            max_idx = i;

            /* Ищем по всему массиву других сотрудников этого же отдела */
            for (j = i + 1; j < SIZE; j++) {
                if (staff[j].department == current_dept && 
                    staff[j].salary > staff[max_idx].salary) {
                    max_idx = j;
                }
            }

            /* Выводим победителя в данном отделе */
            printf("Отдел %d: %-15s (Оклад: %.2f руб, Тел: %s)\n",
                   current_dept, 
                   staff[max_idx].name, 
                   staff[max_idx].salary,
                   staff[max_idx].phone);

            /* Запоминаем, что этот отдел мы обработали */
            processed_depts[num_processed] = current_dept;
            num_processed++;
        }
    }

    return 0;
}