Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <string.h>
- #include <malloc.h>
- /* формат файла:
- 13
- 251001 Арефин Владислав 19
- 251001 Асепков Данила 18
- 251002 Барановский Артём 19
- 251001 Демидовец Степан 20
- 251002 Елькин Матвей 19
- 251003 Заяц Александра 19
- 251003 Иванникова Анна 18
- 251004 Иванов Андрей 18
- 251004 Калитько Дмитрий 19
- 251003 Карась Андрей 19
- 251002 Кирлица Дарья 20
- 251004 Кротюк Иван 18
- 251005 Крутько Андрей 19
- */
- /* student struct start */
- typedef struct {
- int group;
- char surname[20];
- char name[20];
- int age;
- } student;
- student* getStudentList(char* filePath) {
- FILE* file;
- file = fopen(filePath, "r");
- int size;
- fscanf(file, "%d", &size);
- student* list = (student*)malloc(size * sizeof(student));
- for (int i = 0; i < size; i++)
- {
- fscanf(file, "%d", &list[i].group);
- fscanf(file, "%s", &list[i].surname);
- fscanf(file, "%s", &list[i].name);
- fscanf(file, "%d", &list[i].age);
- }
- fclose(file);
- return list;
- }
- student* findOldestStudents(int size, student* list) {
- const int groupNumbers[4] = {251001, 251002, 251003, 251004};
- const int numOfGroups = 4;
- student* oldestStudents = (student*)malloc(numOfGroups * sizeof(student));
- int tempMaxAge;
- for (int i = 0; i < numOfGroups; i++)
- {
- tempMaxAge = -1;
- for (int j = 0; j < size; j++)
- {
- if (list[j].group == groupNumbers[i] && list[j].age > tempMaxAge)
- {
- oldestStudents[i].group = list[j].group;
- strcpy(oldestStudents[i].surname, list[j].surname);
- strcpy(oldestStudents[i].name, list[j].name);
- oldestStudents[i].age = list[j].age;
- }
- }
- }
- return oldestStudents;
- }
- /* student struct end */
- /* file funcs/procs start */
- char* getPathToFile() {
- static char filePath[20];
- printf("\nВведите путь к файлу: ");
- gets_s(filePath, 20);
- return filePath;
- }
- int getSize(char filePath[20]) {
- FILE* file;
- file = fopen(filePath, "r");
- int temp;
- fscanf(file, "%d", &temp);
- fclose(file);
- return temp;
- }
- void endWork(char* filePath, int size, student* list) {
- FILE* file = fopen(filePath, "w");
- fprintf(file, "Кол-во групп: %d\n", size);
- for (int i = 0; i < size; i++)
- {
- fprintf(file, "%d ", list[i].group);
- fprintf(file, "%s ", &list[i].surname);
- fprintf(file, "%s ", &list[i].name);
- fprintf(file, "%d\n", list[i].age);
- }
- fclose(file);
- printf("\n\t\t\t\t\t\tРабота с файлом успешно закончена.\n");
- }
- /* file funcs/procs end */
- /* print procs start */
- void printTaskInfo() {
- printf("\tЗадание 23: Данная программа получает файл, содержащий списки групп студентов.\n");
- printf("\t\tИз списков формируется новый список, содержащий данные студентов, имеющих наибольший возраст.");
- }
- void printStudnetList(int size, student* list) {
- printf("\n\tКоличество студентов: %d\n", size);
- printf("\tВывод списка всех студентов:\n");
- for (int i = 0; i < size; i++)
- {
- printf("%d. Группа %d - %s %s - %d лет;\n", i + 1, list[i].group, list[i].surname, list[i].name, list[i].age);
- }
- }
- void printOldestList(int size, student* oldestList) {
- printf("\n\tВывод списка студентов, \n имеющих наибольший возраст(по группам):\n");
- for (int i = 0; i < size; i++)
- {
- printf("%d. Группа %d - %s %s - %d лет;\n", i + 1, oldestList[i].group, oldestList[i].surname, oldestList[i].name, oldestList[i].age);
- }
- }
- /* print procs end */
- int main()
- {
- setlocale(LC_ALL, "Rus");
- printTaskInfo();
- printf("\n\n\t\t\t\t\tНеобходим файл ввода для считывания информации...\n");
- char* inputPath = getPathToFile();
- int size = getSize(inputPath);
- student* list = getStudentList(inputPath);
- printStudnetList(size, list);
- const int numOfGroups = 4;
- student* oldestList = findOldestStudents(size, list);
- printOldestList(numOfGroups, oldestList);
- printf("\n\n\t\t\t\t\tНеобходим файл вывода для записи информации...\n");
- char* outputPath = getPathToFile();
- endWork(outputPath, numOfGroups, oldestList);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement