Загрузка данных
#define _CRT_SECURE_NO_WARNINGS
#define size 100
#include <stdio.h>
#include <string.h>
struct Transaction {
char group[5];
int kt;
int points;
};
int read(struct Transaction transactions[]) {
FILE* in_file = fopen("in.txt", "r");
int count = 0;
while (3 == fscanf(in_file, "%*d %*s %s %d %d", transactions[count].group, &transactions[count].kt,
&transactions[count].points)) {
count++;
}
fclose(in_file);
return count;
}
void calculate(struct Transaction transactions[], int count) {
char groups[size][5];
int unique = 0;
int found = 0;
// 2.1 поиск уникальных групп
for (int i = 0; i < count; i++) {
for (int j = 0; j < unique; j++) {
if (strcmp(transactions[i].group, groups[j]) == 0) {
found++;
}
}
if (!found) {
strcpy(groups[unique], transactions[i].group);
unique++;
}
found = 0;
}
// 2.2 расчет по группам
int counts[size] = { 0 };
int kts[size] = { 0 };
int maxs[size] = { 0 };
int mins[size];
for (int i = 0; i < unique; i++) {
mins[i] = 100;
}
for (int i = 0; i < count; i++) {
for (int j = 0; j < unique; j++) {
if (strcmp(transactions[i].group, groups[j]) == 0) {
counts[j]++;
kts[j] = kts[j] + transactions[i].kt;
if (maxs[j] < transactions[i].kt) {
maxs[j] = transactions[i].kt;
}
if (mins[j] > transactions[i].kt) {
mins[j] = transactions[i].kt;
}
}
}
}
float avgs[size];
for (int i = 0; i < unique; i++) {
avgs[i] = (float)kts[i] / (float)counts[i];
}
// 2.3 сортировка данных по буквам группы
for (int i = 0; i < unique; i++) {
for (int j = 0; j < unique - 1 - i; j++) {
if (strcmp(groups[j], groups[j + 1]) > 0) {
char temp_s[5];
int temp_i;
float temp_f;
// группы
strcpy(temp_s, groups[j]);
strcpy(groups[j], groups[j + 1]);
strcpy(groups[j + 1], temp_s);
// maxs, mins, counts, kts, avgs
temp_i = maxs[j];
maxs[j] = maxs[j + 1];
maxs[j + 1] = temp_i;
temp_i = mins[j];
mins[j] = mins[j + 1];
mins[j + 1] = temp_i;
temp_i = counts[j];
counts[j] = counts[j + 1];
counts[j + 1] = temp_i;
temp_i = kts[j];
kts[j] = kts[j + 1];
kts[j + 1] = temp_i;
temp_f = avgs[j];
avgs[j] = avgs[j + 1];
avgs[j + 1] = temp_f;
}
}
}
// вывод
FILE* out_file = fopen("out.txt", "a");
for (int i = 0; i < unique; i++) {
fprintf(out_file, "%d. %s %d %d %d %.1f\n", (i + 1), groups[i], counts[i],
maxs[i],
mins[i], avgs[i]);
}
fclose(out_file);
}
int main() {
// 0. инициализация
struct Transaction transactions[size];
int menu;
// 1. меню-программа консольная
printf("Выберите действие:\n0 - ввести значения из файла в массив и вывести в файл;\n1 - закрыть программу;\n");
while (1 == 1) {
scanf("%d", &menu);
if (menu == 0) {
// 1.1. чтение
int count = read(transactions);
// 1.2. расчеты
calculate(transactions, count);
}
else if (menu == 1) {
break;
}
else {
printf("Выберите действие:\n0 - ввести значения из файла в массив и вывести в файл;\n1 - закрыть программу;\n");
}
}
return 0;
}