В двоичный файл записать Фамилию, Имя, Занимаемое место, упорядоченные по убыванию и вывести этот файл на экран - C (СИ)
Формулировка задачи:
// Sportsmens.cpp: определяет точку входа для консольного приложения. //даны количество спортсменов, количество видов спорта и записи (с консоли или текстового файла) //Фамилия Имя баллы(по каждому виду спорта) //в двоичный файл записать Фамилию Имя Занимаемое место, упорядоченные по убыванию и вывести этот файл на //экран #include "stdafx.h" #include <iostream> #include <string.h> struct sport { char sname[20]; char name[20]; int sum=0; }; void swap(char* n, char* k); int sportsmen(sport* arr); void swap2(int& n, int& k); void sort(sport* arr, int numb); void vyvod_bin(sport* arr, char*name_out, int numb); int _tmain(int argc, _TCHAR* argv[]) { const int n = 5; sport arr[n]; int z = sportsmen(arr); } int sportsmen(sport* arr) { char name_in[20], name_out[20]; int ball,numb,vid; scanf("%s %s", &name_in, &name_out); FILE*in; in = fopen(name_in, "rt"); if (in == 0) { printf("Error!"); return 1; } fscanf(in,"%d %d", &numb, &vid); for (int k = 0; k < numb; k++) { fscanf(in,"%s %s", &arr[k].sname, &arr[k].name); for (int i = 0; i < vid; i++) { fscanf(in,"%d", &ball); arr[k].sum += ball; } } fclose(in); sort(arr, numb); vyvod_bin(arr, name_out, numb); return 0; } void swap(char* n, char* k) { char tmp[20]; strcpy(tmp, n); strcpy(n, k); strcpy(k, tmp); } void swap2(int& n, int& k) { int tmp = n; n = k; k = tmp; } void sort(sport* arr, int numb) { for (int i = 0; i < numb; i++) for (int j = 0; j < numb - 1; j++) if (arr[j].sum<arr[j + 1].sum) { swap(arr[j].sname, arr[j + 1].sname); swap(arr[j].name, arr[j + 1].name); swap2(arr[j].sum, arr[j + 1].sum); } } void vyvod_bin(sport* arr, char*name_out,int numb) { FILE* out; out = fopen(name_out, "w+b"); char name1[20], sname1[20]; int pos; for (int i = 0; i < numb; i++) { fwrite(&arr[i].sname, sizeof(struct sport), 1, out); fwrite(&arr[i].name, sizeof(struct sport), 1, out); fwrite(&arr[i].sum, sizeof(struct sport), 1, out); } for (int i = 0; i < numb; i++) { fread(&name1, sizeof(struct sport), 1, out); fread(&sname1, sizeof(struct sport), 1, out); printf("%s %s %d\n", name1, sname1, i + 1); } fclose(out); }
for (int i = 0; i < numb; i++) { fread(&name1, sizeof(struct sport), 1, out); fread(&sname1, sizeof(struct sport), 1, out); printf("%s %s %d\n", name1, sname1, i + 1); }
5 3
1vanya vanyafam 5 5 5
2petya petyafam 0 0 0
3grisha grishafam 3 3 3
4katya katyafam 1 1 1
5vova vovafam 4 4 4
Это лежит во входном файле. (На всякий случай для тестирования). Должно получиться
1vanya vanyafam 1
5vova vovafam 2
3grisha grishafam 3
4katya katyafam 4
2petya petyafam 5
Решение задачи: «В двоичный файл записать Фамилию, Имя, Занимаемое место, упорядоченные по убыванию и вывести этот файл на экран»
textual
Листинг программы
for (int i = 0; i < numb; i++) { fwrite(&arr[i].sname, sizeof(struct sport), 1, out); fwrite(&arr[i].name, sizeof(struct sport), 1, out); fwrite(&arr[i].sum, sizeof(struct sport), 1, out); }
Объяснение кода листинга программы
В данном коде используется оператор for
для прохода по массиву структур arr
определённое количество раз, указанное в переменной numb
.
В каждой итерации цикла выполняются следующие действия:
- fwrite(&arr[i].sname, sizeof(struct sport), 1, out) — информация из поля
sname
структурыarr[i]
записывается в файлout
, указанный в функцииfwrite
. Параметрsizeof(struct sport)
указывает размер структурыsport
, а параметр1
указывает, что нужно записать 1 элемент. - fwrite(&arr[i].name, sizeof(struct sport), 1, out) — информация из поля
name
структурыarr[i]
записывается в файлout
, указанный в функцииfwrite
. Параметрsizeof(struct sport)
указывает размер структурыsport
, а параметр1
указывает, что нужно записать 1 элемент. - fwrite(&arr[i].sum, sizeof(struct sport), 1, out) — информация из поля
sum
структурыarr[i]
записывается в файлout
, указанный в функцииfwrite
. Параметрsizeof(struct sport)
указывает размер структурыsport
, а параметр1
указывает, что нужно записать 1 элемент. После выполнения всех итераций цикла, файлout
будет содержать информацию о фамилии, имени и занимаемом месте, упорядоченных по убыванию.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д