Школоло / Говнокод #13023 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
uses crt;
type point=record{точки}
           x,y:real;
           end;
     okr=record{окружности}
         x,y,r:real;
         end;
const nmax=20;
function Peres(a,b:point;c:okr):boolean;{пересекаются или нет}
var s,ab,h:real;
begin
s:=abs(a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y));{удвоенная площадь треугольника
вершины которого центр окружности и 2 точки}
ab:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));{сторона, противоположная центру окружности}
h:=s/ab;{высота на нее=расстояние от центра до прямой}
Peres:=h<c.r;{если лно меньше радиуса, пересекаются}
end;
var a:array[1..nmax] of point;
    b:array[1..nmax] of okr;
    n,m,i,j,k,p,mx,imx,jmx:integer;
begin
clrscr;
randomize;
repeat
write('Количество точек до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество окружностей до ',nmax,' m=');
readln(m);
until m in [1..nmax];
for i:=1 to n do
 begin
  a[i].x:=-10+random*21;
  a[i].y:=-10+random*21;
 end;
for i:=1 to m do
 begin
  b[i].x:=-5+11*random;
  b[i].y:=-5+11*random;
  b[i].r:=5*random;
 end;
writeln('Координаты точек:');
write('X:');
for i:=1 to n do
write(a[i].x:6:2);
writeln;
write('Y:');
for i:=1 to n do
write(a[i].y:6:2);
writeln;
writeln;
writeln('Параметры окружностей:');
write('X:');
for i:=1 to m do
write(b[i].x:6:2);
writeln;
write('Y:');
for i:=1 to m do
write(b[i].y:6:2);
writeln;
write('R:');
for i:=1 to m do
write(b[i].r:6:2);
writeln;
writeln;
mx:=0;
imx:=0;
jmx:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
 begin
  k:=0;
  for p:=1 to m do
  if Peres(a[i],a[j],b[p]) then k:=k+1;
  if k>mx then
   begin
    mx:=k;
    imx:=i;
    jmx:=j;
   end;
 end;
if mx=0 then write('Нет пересекающихся прямых и окружностей')
else
 begin
  writeln('Максимальное число пересечений прямой с окружностями=',mx);
  write('Эта прямая проходит через точки (',a[imx].x:0:2,';',a[imx].y:0:2,') и (',a[jmx].x:0:2,';',a[jmx].y:0:2,')');
 end;
readln
end.

Рекурсивная функций с циклами тройной вложенности

Запостил: Psilon Psilon, (Updated )

Комментарии (13) RSS

    • В строке 75.

      P.S. Хм, стоп. А нет тут рекурсии. Это из-за ебанутого форматирования в одну колонку и без пустых строк кажется, что она есть... В 21 строке начинается паскалий main, и из него просто в цикле вызывают Peres.
      Ответить
        • Так ругаетесь, будто ваш код. Энивей уже разобрались, что к чему.
          Ответить
          • Давно не общался с паскальщиками, растерялся, был взволнован 😉
            Ответить
    • Мне кажется лабам не место на этом сайте. Их много, они почти все говнокод, но говнокод однообразный и неинтересный (хотя креатив бывает, да). Люди, которые их выполняют еще только учатся и делают первые шаги в этой области. Возможно, и шаги последние. Сделали для галочки, закончили вуз и пошли помидорой торговать на рынке, зачем им программирование в жизни?
      Ответить
  • Паскаль, как много в этом звуке давно это было.
    Ответить
  • Типичная студенческая паскалепортянка. Плавали - знаем.
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8