fork download
  1. {+--------------------------------------------------------------------------+}
  2. {| The Textbook in Data Structure, Algorithms and Programming |}
  3. {| http://w...content-available-to-author-only...c.jp/~hoangle/DSAPTextbook/ |}
  4. {| |}
  5. {| Program: Finding_the_Minimum_Spanning_Tree_using_Kruskal_Algorithm |}
  6. {| Written by Le Minh Hoang |}
  7. {| Email: dsaptextbook@gmail.com |}
  8. {+--------------------------------------------------------------------------+}
  9.  
  10. program KursovayaPOA_Variant28; // (объявляет имя консольной программы по варианту 28)
  11. {$APPTYPE CONSOLE} // (указывает компилятору Delphi, что приложение является консольным)
  12. uses // (начинает раздел подключения стандартных модулей)
  13. SysUtils, Math; // (подключает служебные средства и математические функции, включая ArcTan2)
  14. const // (начинает раздел постоянных величин)
  15. PiGrad = 180 / Pi; // (задает коэффициент перевода радиан в градусы)
  16. procedure PrintLine; // (объявляет процедуру вывода разделительной линии)
  17. begin // (начинает тело процедуры PrintLine)
  18. Writeln('------------------------------------------------------------'); // (выводит на экран строку-разделитель)
  19. end; // (завершает процедуру PrintLine)
  20. procedure PrintMenu; // (объявляет процедуру вывода главного меню)
  21. begin // (начинает тело процедуры PrintMenu)
  22. PrintLine; // (вызывает вывод разделительной линии перед меню)
  23. Writeln('КУРСОВАЯ РАБОТА. Вариант 28'); // (выводит название работы и номер варианта)
  24. Writeln('1 - Задача 1: сумма цифр введенного числа'); // (выводит пункт меню для запуска первой задачи)
  25. Writeln('2 - Задача 2: сравнение углов AO и BO с осью OX'); // (выводит пункт меню для запуска второй задачи)
  26. Writeln('0 - Выход'); // (выводит пункт меню для завершения программы)
  27. PrintLine; // (выводит разделительную линию после списка пунктов)
  28. Write('Выберите пункт меню: '); // (приглашает пользователя ввести номер пункта меню)
  29. end; // (завершает процедуру PrintMenu)
  30. procedure Task1; // (объявляет процедуру решения первой задачи)
  31. var // (начинает раздел локальных переменных первой задачи)
  32. N, Temp, Sum, Digit: Integer; // (объявляет исходное число, рабочую копию, сумму цифр и текущую цифру)
  33. begin // (начинает тело процедуры Task1)
  34. Writeln; // (выводит пустую строку для отделения результата от меню)
  35. Writeln('Задача 1. Нахождение суммы цифр введенного числа.'); // (выводит пояснение о выполняемой задаче)
  36. Write('Введите целое число N: '); // (просит пользователя ввести целое число)
  37. Readln(N); // (считывает введенное число в переменную N)
  38. Temp := Abs(N); // (получает модуль числа, чтобы корректно обработать отрицательный ввод)
  39. Sum := 0; // (обнуляет накопитель суммы цифр)
  40. while Temp > 0 do // (организует цикл обработки цифр, пока рабочее число больше нуля)
  41. begin // (начинает тело цикла while)
  42. Digit := Temp mod 10; // (получает последнюю цифру числа)
  43. Sum := Sum + Digit; // (добавляет найденную цифру к общей сумме)
  44. Temp := Temp div 10; // (удаляет последнюю цифру из рабочего числа)
  45. end; // (завершает тело цикла while)
  46. Writeln('Сумма цифр числа ', N, ' = ', Sum); // (выводит исходное число и найденную сумму цифр)
  47. Writeln; // (выводит пустую строку после результата)
  48. end; // (завершает процедуру Task1)
  49. procedure CalculateAngle(X, Y: Real; var AngleRad, AngleDeg: Real); // (объявляет вспомогательную процедуру вычисления угла точки с осью OX)
  50. begin // (начинает тело процедуры CalculateAngle)
  51. if (X = 0) and (Y = 0) then // (проверяет, совпадает ли точка с началом координат)
  52. AngleRad := 0 // (при совпадении с началом координат принимает угол равным нулю)
  53. else // (задает ветвь для обычной точки, не совпадающей с началом координат)
  54. AngleRad := ArcTan2(Abs(Y), Abs(X)); // (вычисляет острый угол отрезка с осью OX в радианах)
  55. AngleDeg := AngleRad * PiGrad; // (переводит угол из радиан в градусы)
  56. end; // (завершает процедуру CalculateAngle)
  57. procedure Task2; // (объявляет процедуру решения второй задачи)
  58. var // (начинает раздел локальных переменных второй задачи)
  59. X1, Y1, X2, Y2: Real; // (объявляет координаты точек A и B)
  60. AngleA, AngleB, DegA, DegB: Real; // (объявляет углы в радианах и градусах для отрезков AO и BO)
  61. begin // (начинает тело процедуры Task2)
  62. Writeln; // (выводит пустую строку для отделения задачи от меню)
  63. Writeln('Задача 2. Сравнение углов отрезков AO и BO с осью OX.'); // (выводит пояснение о выполняемой задаче)
  64. Write('Введите x1 для точки A: '); // (просит ввести координату x1 точки A)
  65. Readln(X1); // (считывает координату x1)
  66. Write('Введите y1 для точки A: '); // (просит ввести координату y1 точки A)
  67. Readln(Y1); // (считывает координату y1)
  68. Write('Введите x2 для точки B: '); // (просит ввести координату x2 точки B)
  69. Readln(X2); // (считывает координату x2)
  70. Write('Введите y2 для точки B: '); // (просит ввести координату y2 точки B)
  71. Readln(Y2); // (считывает координату y2)
  72. CalculateAngle(X1, Y1, AngleA, DegA); // (вычисляет угол отрезка AO с осью OX)
  73. CalculateAngle(X2, Y2, AngleB, DegB); // (вычисляет угол отрезка BO с осью OX)
  74. Writeln('Угол AO с осью OX = ', DegA:0:2, ' град.'); // (выводит угол отрезка AO в градусах)
  75. Writeln('Угол BO с осью OX = ', DegB:0:2, ' град.'); // (выводит угол отрезка BO в градусах)
  76. if Abs(AngleA - AngleB) < 1E-10 then // (проверяет равенство углов с учетом погрешности вещественных вычислений)
  77. Writeln('Отрезки AO и BO образуют равные углы с осью OX.') // (выводит сообщение, если углы равны)
  78. else // (задает ветвь для случая, когда углы различаются)
  79. if AngleA > AngleB then // (проверяет, больше ли угол отрезка AO)
  80. Writeln('Больший угол с осью OX образует отрезок AO.') // (выводит результат, если больше угол AO)
  81. else // (задает ветвь для случая, когда больше угол BO)
  82. Writeln('Больший угол с осью OX образует отрезок BO.'); // (выводит результат, если больше угол BO)
  83. Writeln; // (выводит пустую строку после результата)
  84. end; // (завершает процедуру Task2)
  85. var // (начинает раздел глобальных переменных главной программы)
  86. Choice: Integer; // (объявляет переменную для хранения выбранного пункта меню)
  87. begin // (начинает главную часть программы)
  88. repeat // (начинает цикл повторного показа меню)
  89. PrintMenu; // (выводит главное меню)
  90. Readln(Choice); // (считывает выбранный пользователем пункт меню)
  91. case Choice of // (начинает оператор выбора действия по введенному пункту)
  92. 1: Task1; // (запускает первую задачу при выборе пункта 1)
  93. 2: Task2; // (запускает вторую задачу при выборе пункта 2)
  94. 0: Writeln('Работа программы завершена.'); // (выводит сообщение о завершении при выборе пункта 0)
  95. else // (задает действие при неверном пункте меню)
  96. Writeln('Ошибка: выбран неверный пункт меню. Повторите ввод.'); // (сообщает пользователю об ошибочном выборе)
  97. end; // (завершает оператор case)
  98. until Choice = 0; // (повторяет меню до тех пор, пока пользователь не выберет выход)
  99. Writeln('Нажмите Enter для выхода...'); // (выводит финальное приглашение перед закрытием окна)
  100. Readln; // (ожидает нажатия Enter)
  101. end. // (завершает исходный текст программы)
  102.  
Success #stdin #stdout 0s 5324KB
stdin
7 21
1 2 547152
1 3 509157
1 4 539282
1 5 541645         
1 6 458433
1 7 385173

2 3 131528
2 4 92735
2 5 150511
2 6 94440
2 7 194542
3 4 216600
3 5 272401
3 6 157176
3 7 124077
4 5 57785
4 6 97323
4 7 242232
5 6 136663
5 7 283862
6 7 147426
stdout
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: 
Задача 1. Нахождение суммы цифр введенного числа.
Введите целое число N: Сумма цифр числа 1 = 1

------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: 
Задача 1. Нахождение суммы цифр введенного числа.
Введите целое число N: Сумма цифр числа 1 = 1

------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: 
Задача 1. Нахождение суммы цифр введенного числа.
Введите целое число N: Сумма цифр числа 1 = 1

------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: 
Задача 2. Сравнение углов отрезков AO и BO с осью OX.
Введите x1 для точки A: Введите y1 для точки A: Введите x2 для точки B: Введите y2 для точки B: Угол AO с осью OX = 45.00 град.
Угол BO с осью OX = 45.00 град.
Отрезки AO и BO образуют равные углы с осью OX.

------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Ошибка: выбран неверный пункт меню. Повторите ввод.
------------------------------------------------------------
КУРСОВАЯ РАБОТА. Вариант 28
1 - Задача 1: сумма цифр введенного числа
2 - Задача 2: сравнение углов AO и BO с осью OX
0 - Выход
------------------------------------------------------------
Выберите пункт меню: Работа программы завершена.
Нажмите Enter для выхода...