БлогNot. Все треугольники Герона на Javascript :)

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Все треугольники Герона на Javascript :)

Ещё одна мини-программка, на этот раз мы ищем возможные героновы треугольники, то есть, такие, у которых и стороны, и периметр, и площадь - целые числа. Один геронов треугольник со сторонами 3, 4 и 5, обычно знают все :)

Если ограничить проверяемый верхний размер стороны значением 500, будет найдено более 2000 треугольников Герона:

 Выполнить скрипт онлайн (может понадобиться несколько секунд, если комп медленный)

Памятки этого кода такие:

Исходник скрипта в момент написания (без HTML-обрамления):

<div id="hres"></div>
<script type="text/javascript">

var maxN = 500; //максимальный проверяемый размер стороны

function getGeronianTriangles(n) {
 var list = [];
 var a,b,c,i;	
 for (c=1; c<=n; c++)
 for (b=1; b<=c; b++)
 for (a=1; a<=b; a++) {
  if( nod(nod(a,b),c)==1 && isInt(heronArea(a, b, c)))							
   list.push (new Array(a, b, c, a + b + c, heronArea(a, b, c)));
 }
 sort (list);

 var len = list.length;
 var string = 
  '<p>Количество треугольников Герона со стороной до ' + n + ' включительно: ' + len + '</p>' + "\n" +
  '<table border="1" cellpadding="8" cellspacing="0"><tr><td>Стороны</td><td>Периметр</td><td>Площадь</td></tr>' + "\n";
 for (i = 0; i<len; i++) {
  string += '<tr><td>' + list[i][0] + ' x ' + list[i][1] + ' x ' + list[i][2] + 
   '</td><td>' + list[i][3] + '</td><td>' + list[i][4] + '</td></tr>' + "\n";
 }
 string += '</table>' + "\n";
 document.getElementById('hres').innerHTML = string;

 function heronArea(a, b, c){
  var s = (a + b + c)/ 2;
  return Math.sqrt(s *(s -a)*(s - b)*(s - c));		
 }

 function isInt (a) {
  return a%1 == 0 && a>0;
 }

 function nod (a, b){
  var mod = 1, max = a > b ? a : b, min = a > b ? b : a;		
  while (mod != 0) {
   mod = max % min;
   if (mod > 0){
    max = min;
    min = mod;
   }
  }		
  return min;
 }

 function sort (list){
  var swapped = true;
  var temp = [];
  while (swapped) {
   swapped = false;
   var i, len = list.length;
   for (var i = 1; i < len; i++){
    if (list[i][4]<list[i-1][4] || list[i][4]==list[i-1][4] && list[i][3]<list[i-1][3]) {
     temp = list[i];
     list[i] = list[i-1];
     list[i-1] = temp;
     swapped = true;
    }				
   }			
  }
 }
}

window.onload = getGeronianTriangles(maxN);
</script>
<noscript><p>Извините, для работы приложения нужен включённый Javascript</p></noscript>

теги: javascript числа

комментарии (0)

18.04.2016, 15:45; рейтинг: 3159

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход