Вывести список фамилий участников в порядке убывания набранных ими очков - QBasic (27353)

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

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

Всем привет! Имеется таблица результатов шахматного турнира с N участниками.(Выигрыш-1 очко,ничья -0.5 очка,проигрыш - 0 очков )Вывести список фамилий участников в порядке убывания набранных ими очков,сопроводив его указанием для каждого участника суммы очков,занятого места и числа побед.Исходная информация вводится с клавиатуры . Есть также программа.
Листинг программы
  1. CLS
  2. TYPE ChessTable 'Создем тип для таблицы:
  3. Uchastnik AS STRING * 10 'Фамилия участника
  4. Ochki AS SINGLE 'Число очков
  5. Pobed AS SINGLE 'Число побед
  6. END TYPE
  7. INPUT "Vvedite chislo uchastnikov: ", n 'Ввод числа участников
  8. DIM Table(n) AS ChessTable 'Наша таблица
  9. FOR i = 1 TO n
  10. INPUT "Vvedite familiyu uchastnika: ", Table(i).Uchastnik 'Ввод фамилий участников
  11. NEXT i
  12. 'Цикл для ввода набранных очков
  13. FOR i = 1 TO n - 1 'i - первый участник в партии,
  14. FOR j = i + 1 TO n 'j - второй
  15. flag = 0 'Обнуляем флаг
  16. DO
  17. IF flag = 1 THEN COLOR 4: PRINT "Nevernij vvod": COLOR 7 'Если цикл повторяется не в перый раз, сообщаем о неверном вводе
  18. PRINT "Skolko ochkov nabral uchastnik "; RTRIM$(Table(i).Uchastnik); " v partii s uchastnikom "; RTRIM$(Table(j).Uchastnik);
  19. INPUT Ochki 'Собственно, ввод числа очков
  20. flag = 1
  21. LOOP UNTIL Ochki = 0 OR Ochki = .5 OR Ochki = 1 'Проверка валидности введенных очков
  22. Table(i).Ochki = Table(i).Ochki + Ochki 'Присуждаем первому участнику его очки
  23. Table(j).Ochki = Table(j).Ochki + (1 - Ochki) 'А второму - разность между единицей и очками первого
  24. IF Ochki = 1 THEN Table(i).Pobed = Table(i).Pobed + 1 'Если у первого 1 очко, присуждаем ему победу
  25. IF Ochki = 0 THEN Table(j).Pobed = Table(j).Pobed + 1 'А если 0 - значит победил второй, и победу присуждаем ему
  26. NEXT j
  27. NEXT i
  28. 'Цикл для упорядочения участников по очкам
  29. FOR i = 1 TO n - 1
  30. max = 0: jmax = 0 'Обнуляем максимальное число очков
  31. FOR j = i TO n 'Начиная с i-ого участника ищем участника с максимальным числом очков
  32. IF Table(j).Ochki > max THEN max = Table(j).Ochki: jmax = j
  33. IF Table(j).Ochki = max AND Table(j).Pobed > Table(jmax).Pobed THEN jmax = j 'Если у участников равное число очков, присуждаем
  34. 'преимущество тому, у кого больше побед
  35. NEXT j
  36. SWAP Table(i), Table(jmax) 'Меняем i-ого участника с тем, у кого максимальное число очков
  37. NEXT i 'Увеличиваем i на единицу и повторяем цикл, пока не дойдем до последнего участника
  38. 'Вывод упорядоченной таблицы на экран
  39. CLS
  40. PRINT "Mesto", "Uchastnik", "Ochki", "Chislo pobed"
  41. FOR i = 1 TO n
  42. IF i <= 3 THEN COLOR 2 ELSE COLOR 7 'Первую тройку выделим зеленым цветом
  43. PRINT i, Table(i).Uchastnik, Table(i).Ochki, Table(i).Pobed
  44. NEXT i
  45. PRINT
  46. PRINT "Press any key to continue..."
  47. DO
  48. LOOP WHILE INKEY$ = ""
Если есть возможность ,то можете описать ход решения для того,чтобы проще ориентироваться и читать программу ?

Решение задачи: «Вывести список фамилий участников в порядке убывания набранных ими очков»

textual
Листинг программы
  1. CLS
  2.  
  3. TYPE ChessT
  4.    Uchas AS STRING * 10  ' имена участников
  5.    Ochki AS SINGLE           ' число очков
  6.    Pobed AS SINGLE           ' число побед
  7. END TYPE
  8.  
  9. INPUT "N = "; n         ' Ввод числа участников  
  10.  
  11. DIM Table(n) AS ChessT    ' Наша таблица
  12. DIM Turn(n, n)             ' Турнирная таблица
  13.  
  14. FOR i = 1 TO n
  15.    INPUT "NAME = "; Table(i).Uchas  ' Ввод имён участников
  16. NEXT i
  17.  
  18. REM  Заполнение турнирной таблицы
  19. REM ---------------------------------------------
  20.  
  21. FOR i = 1 TO n        ' i - первый участник в партии
  22. FOR j = i TO n        ' j - второй
  23.    IF i >= j THEN 100
  24.  
  25.    PRINT "CHISLO Ochkov Uchastnika"; i; "s"; j;
  26.    INPUT Ochki          '
  27.    IF Ochki = .5 THEN
  28.       Turn(i, j) = Ochki
  29.       Turn(j, i) = Ochki
  30.    ELSE
  31.       Turn(i, j) = Ochki
  32.       Turn(j, i) = 1 - Ochki
  33.    END IF
  34. 100
  35. NEXT j, i
  36.  
  37. REM  Подсчет очков и побед
  38.  
  39. FOR i = 1 TO n
  40. FOR j = 1 TO n
  41.    Table(i).Ochki = Table(i).Ochki + Turn(i, j)      ' подсчет очков
  42.    IF Turn(i, j) = 1 THEN                            '  подсчет побед
  43.       Table(i).Pobed = Table(i).Pobed + Turn(i, j)
  44.    END IF
  45. NEXT j, i
  46.  
  47. REM  Сортировка участников по количеству очков
  48. REM  -------------------------------------------
  49.  
  50. FOR i = 1 TO n - 1
  51. FOR j = i + 1 TO n
  52.    IF Table(i).Ochki < Table(j).Ochki THEN
  53.       SWAP Table(i), Table(j)
  54.    END IF
  55. NEXT j, i
  56.  
  57. REM  Вывод на экран
  58. CLS
  59.  
  60. FOR i = 1 TO n
  61.    IF i <= 3 THEN COLOR 11 ELSE COLOR 13
  62.    PRINT Table(i).Uchas; USING "#.#    #"; Table(i).Ochki; Table(i).Pobed
  63. NEXT i
  64. END

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

  1. Объявление переменных и типа данных:
    • n - количество участников (целое число)
    • Table - массив структур типа ChessT (имена участников и их очки)
    • Turn - матрица для турнирной таблицы
  2. Ввод данных:
    • Задается количество участников (n)
    • Вводятся имена участников и их очки
  3. Заполнение турнирной таблицы:
    • Происходит расчет значений для матрицы Turn на основе введенных очков
  4. Подсчет очков и побед:
    • Происходит подсчет общего количества очков и побед для каждого участника
  5. Сортировка участников по количеству очков:
    • Применяется алгоритм сортировки пузырьком для сортировки участников по убыванию очков
  6. Вывод на экран:
    • Выводится список участников, отсортированный по убыванию очков
    • Для каждого участника выводится его имя, количество очков и побед, разделенные символом #

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


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

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

14   голосов , оценка 4.071 из 5

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

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

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