Удалить из списка информацию о спортсмене с наименьшим количеством очков - C (СИ) (69729)

Узнай цену своей работы

Формулировка задачи:

Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков.
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>*
  3. #include <locale.h>
  4. struct sportsmen{
  5. char FirstName[32];
  6. int number[10], points[128];
  7. };
  8. void read(struct sportsmen *sportsmen, int i)
  9. {
  10. for (int j = 0; j < i; j++){
  11. printf("enter FirstName \n");
  12. scanf("%s", &sportsmen[j].FirstName);
  13. printf("enter number \n");
  14. scanf("%i", &sportsmen[j].number);
  15. printf("enter points \n");
  16. scanf("%i", &sportsmen[j].points);
  17. }
  18. }
  19. int main()
  20. {
  21. setlocale(LC_ALL, "ukr");
  22. struct sportsmen sportsmen[5];
  23. read(sportsmen, 5);
  24. FILE *f, *fdell;
  25. if ((f = fopen("f.txt ", "wb")) == NULL)
  26. {
  27. printf("Помилка при відкритті файлу");
  28. return 1;
  29. }
  30.  
  31. }
Нашел в интернете код
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <windows.h>
  6. char c;
  7. struct sports { char fam[20]; int number, score; } spr;
  8. void inputdata(FILE *);
  9. void updatedata(FILE *);
  10. void printdata(FILE *);
  11. void deletedata(FILE *);
  12. void inputdata(FILE *st)
  13. {
  14. char ch;
  15. st = fopen("file1.dat", "wb");
  16. do
  17. {
  18. printf("\nВведите данные спортсмена через пробел - фамилия, номер, количество набранных очков.\n");
  19. scanf("%s%d%d", spr.fam, &spr.number, &spr.score);
  20. fwrite(&spr, sizeof(spr), 1, st);
  21. printf("\nЗакончить ввод данных?\n");
  22. ch = getch();
  23. } while (ch != 'y');
  24. fclose(st);
  25. system("cls");
  26. printf("Данные о спортсменах записаны!\n");
  27. }
  28. void printdata(FILE *st)
  29. {
  30. system("cls");
  31. int i;
  32. st = fopen("file1.dat", "rb");
  33. i = 1;
  34. fread(&spr, sizeof(spr), 1, st);
  35. while (!feof(st))
  36. {
  37. printf("\n%d. Фамилия спортсмена: %s, номер: %d, количество очков: %d", i, spr.fam, spr.number, spr.score);
  38. fread(&spr, sizeof(spr), 1, st);
  39. i++;
  40. }
  41. printf("\n\nНажмите любую клавишу для выхода в меню.\n");
  42. getch();
  43. system("cls");
  44. }
  45. void updatedata(FILE *st)
  46. {
  47. char ch;
  48. st = fopen("file1.dat", "ab");
  49. do
  50. {
  51. printf("\nВведите данные о спортсмене через пробел - фамилия, номер, количество набранных очков.\n");
  52. scanf("%s%d%d", spr.fam, &spr.number, &spr.score);
  53. fwrite(&spr, sizeof(spr), 1, st);
  54. printf("\nЗакончить добавление данных? y/n\n");
  55. ch = getch();
  56. } while (ch != 'y');
  57. fclose(st);
  58. system("cls");
  59. }
  60. void deletedata(FILE *st)
  61. {
  62. system("cls");
  63. char ch;
  64. int i, n, min;
  65. sports *p, temp;
  66. st = fopen("file1.dat", "rb");
  67. n = 0;
  68. fseek(st, 0, 2);
  69. n = ftell(st) / sizeof(sports);
  70. fseek(st, 0, 0);
  71. p = (sports *)malloc(n*sizeof(sports));
  72. for (i = 0; i<n; ++i)
  73. {
  74. fread(&spr, sizeof(spr), 1, st);
  75. p[i] = spr;
  76. }
  77. fclose(st);
  78. st = fopen("file1.dat", "wb");
  79. min = 0;
  80. for (i = 1; i<n; ++i)
  81. if (p[i].score<p[min].score)
  82. min = i;
  83. for (i = 0; i<n; ++i)
  84. if (i != min)
  85. fwrite(&p[i], sizeof(spr), 1, st);
  86. getch();
  87. free(p);
  88. fclose(st);
  89. }
  90.  
  91. main()
  92. {
  93. FILE *st;
  94. system("cls");
  95. while (1)
  96. {
  97. printf("\n1. Ввести данные о спортсменах.\n");
  98. printf("2. Вывести список спортсменов.\n");
  99. printf("3. Добавить данные о новом спортсмене.\n");
  100. printf("4. Удалить данные о спортсмене с минимальным количеством очков.\n");
  101. printf("5. Выход.\n");
  102. c = getch();
  103. switch (c)
  104. {
  105. case '1':inputdata(st); break;
  106. case '2':printdata(st); break;
  107. case '3':updatedata(st); break;
  108. case '4':deletedata(st); break;
  109. case '5':return 0; break;
  110. default:system("cls"); printf("\nНеверно выбран пункт меню!\n\n");
  111. }
  112. }
  113. }
Но выдаёт ошибки следующие : Помогите разобраться в чём проблема.

Решение задачи: «Удалить из списка информацию о спортсмене с наименьшим количеством очков»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUMBER_OF_ATHLETES 10
  5.  
  6. struct Athlete
  7. {
  8.   char name[16];
  9.   unsigned int number, points;
  10. };
  11.  
  12. int compFunc(const void *a, const void *b);
  13.  
  14. int main()
  15. {
  16.   struct Athlete athlete[NUMBER_OF_ATHLETES];
  17.  
  18.   for (size_t i = 0; i < NUMBER_OF_ATHLETES; ++i) {
  19.     printf("Name, number, points: ");  
  20.     scanf("%s%u%u", &athlete[i].name, &athlete[i].number, &athlete[i].points);
  21.   }
  22.  
  23.   qsort(athlete, NUMBER_OF_ATHLETES, sizeof(struct Athlete), compFunc);
  24.    
  25.   for (size_t i = 0; i < NUMBER_OF_ATHLETES - 1; ++i) {
  26.     printf("Name, number, points: %s, %u, %u \n", athlete[i].name, athlete[i].number, athlete[i].points);
  27.   }
  28. }
  29.  
  30. int compFunc(const void *a, const void *b)
  31. {
  32.   struct Athlete *ath1 = (struct Athlete *)a;
  33.   struct Athlete *ath2 = (struct Athlete *)b;
  34.  
  35.   return ath1->points < ath2->points;
  36. }

Объяснение кода листинга программы

В представленном коде реализована задача по удалению из списка информации о спортсмене с наименьшим количеством очков. Описание переменных и функций:

  1. NUMBER_OF_ATHLETES - определяет количество спортсменов, для которых будет вестись учет результатов.
  2. struct Athlete - структура, представляющая одного спортсмена. Содержит поля: имя ( name ), номер ( number ), очки ( points ).
  3. compFunc - функция сравнения, используемая в функции qsort для сортировки списка спортсменов по убыванию количества очков.
  4. main - основная функция программы, в которой происходит ввод данных о спортсменах с помощью функции scanf и вывод на экран результатов с помощью функции printf .
  5. qsort - функция сортировки, применяемая к массиву структур athlete с использованием функции сравнения compFunc.
  6. athlete - массив структур, представляющий список спортсменов. В основной функции программы после ввода данных о спортсменах происходит их сортировка по убыванию количества очков с помощью функции qsort и функции сравнения compFunc. Затем в цикле выводятся на экран результаты (имя, номер, очки) каждого спортсмена, кроме последнего, так как последний спортсмен будет удален из списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы