В двоичный файл записать Фамилию, Имя, Занимаемое место, упорядоченные по убыванию и вывести этот файл на экран - 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
будет содержать информацию о фамилии, имени и занимаемом месте, упорядоченных по убыванию.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д