Команда NaN, задача «Рибне життя»

Доповідь команди NaN (Київський природничо-науковий ліцей №145) по задачі №1 «Рибне життя» (CETO-2019):

  • Презентація (pdf, 5 МБ)
  • Моделювання (JavaScript, виконується у браузері): для запуску треба клікнути по білому полю угорі сторінки.
  • Код:
<!DOCTYPE html>
<html>
<head>
    <title>Fish life</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <link rel="stylesheet" href="chartist.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.js"></script>
</head>
<style type="text/css">
    body{
        margin: 0;
        padding: 0;
        background-color: #fff;
    }
    .window{
        display: block;
        background-color: #fff;
        width: 70%;
        margin: 0 auto;
        height: 60px;
        transition: 1s;
        margin-top: 20px;
        border-radius: 15px;
        box-shadow:  0 +20px 40px 1px grey;
        margin-bottom: 50px;
        overflow: hidden;
        text-align: center;
        font-size: 50px;
        color: #262626;
    }
    #canvas{
        width:100%;
        height:50px;;
        box-shadow: 0 0px 20px 0.1px grey;
        border-radius: 15px 15px 0 0;
        display: none;
        margin: 0 auto;
        transition: 0.5s;
    }
    input{
        display: none;
        background-color: #fff;
        width: 13.5%;
        height: 30px;
        position: absolute;
        border: 2px solid rgba(0,0,0,0.5);
        color: #262626;
        text-align: left;
        font-size: 16px;
        border-radius: 20px;
        padding-left: 5px;
    }
    input {outline:none;}
    input:focus::-webkit-input-placeholder { color:transparent; }
    input:focus:-moz-placeholder { color:transparent; } 
    input:focus::-moz-placeholder { color:transparent; } 
    input:focus:-ms-input-placeholder { color:transparent; } 
    .i1{
        top:100px;
        left:32%;
    }
    .i2{
        top:100px;
        left:52%;
    }
    .i3{
        top:150px;
        left:41.6%;
    }
    .but{
        display: none;
        width: 13.5%;
        height: 30px;
        border-radius: 20px;
        position: absolute;
        top: 200px;
        left: 42%;
        background-color: #262626;
        text-align: center;
        font-size: 25px;
        color: #fff;
        cursor: pointer;
        transition: 0.5s;
    }
    .but:hover{
        background-color: rgba(0,0,0,0.7);
    }
</style>
<body>
    <div class="window" id="Win" >
    <div id="canvas"><canvas id="myChart"></canvas></div>
    <div class="but" id="buton" onclick="funk()">Play</div>
    </div>
    <input type="text" class="i1" name="Write here" placeholder="Write here time">
    <input type="text" class="i2" name="Write here" placeholder="Write here fish">
    <input type="text" class="i3" name="Write here" placeholder="Write here speed">
    <script type="text/javascript">
window.onload=function function_name() {
    var flag=1;
    document.getElementById("Win").onclick=function () {
        if(flag==1){
            document.getElementById("Win").style.height="680px";
            flag=2;
            $('#canvas').slideDown(500);
            setTimeout(function () {
                $('.i1').slideDown(200);
            },400);
            setTimeout(function () {
                $('.i2').slideDown(200);
            },600);
            setTimeout(function () {
                $('.i3').slideDown(200);
            },800);
            setTimeout(function () {
                $('.i4').slideDown(200);
            },1000);
            setTimeout(function () {
                $('.i5').slideDown(200);
            },1200);
            setTimeout(function () {
                $('.but').slideDown(200);
            },1400);
        }
    }
}
var count=1;
function funk() {
    if(count%2==1){
        for(var i=1;i<=3;i++){
            $('.i'+i).slideUp(300);
        }
        setTimeout(function() {
            $('#canvas').css('height',"530px");
        },400)
        setTimeout(function() {
            $('.but').css('top',"580px");
        },400)
        setTimeout(function () {
                $('.but').html("Back");
        },500);
        setTimeout(function(){
            const year=document.getElementsByClassName('i1')[0].value;
            var fish=document.getElementsByClassName('i2')[0].value;
            var speed=document.getElementsByClassName('i3')[0].value;
            var label = [];
            var serie = [];
            label[0]=2;
            for (var i=1; i<=48; i++) {
                label[i] = label[i-1]+2;
            } 
            for(var i=0; i<=48; i++){
                var o=fish;
                for(var j=1; j<=year; j++){
                    o =(1-label[i]/100)*o*Math.pow(speed,1-o);
                }
                serie[i]=o;
            }
            for (var i=0; i<=48; i++) {
                label[i] = label[i]+"%";
            }           
var ctx = document.getElementById('myChart').getContext('2d');
window.chart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: label,
        datasets: [{
            label: "fish",
            borderColor: 'red',
            data: serie,
        }]
    },
    options: {}
});
        },1000)
        count++;
    }
    else{   
        window.chart.destroy();
        setTimeout(function () {
            $('#canvas').css('height',"50px");
        },0);
        setTimeout(function () {
            for(var i=1;i<=5;i++){
                $('.i'+i).slideDown(300);
            }
        },500);
        setTimeout(function() {
            $('.but').css('top',"200px");
        },100)
        setTimeout(function () {
                $('.but').html("Play");
        },300);
        for(var i=1;i<=5;i++){
            $('.i'+i).val("");
        }
        count++;    
    }
}
    </script>
</body>
</html>

 

2 коментар

  1. Здесь выводы были – хотя и без точных параметров, но не было конкретной хоть какой-то связи с параметрами a, g (гамма) и начальной популяцией.

    Хотя, казалось бы, аналогия с методом решения уравнения x = f(x) методом простых итераций просто напрашивалась сама собой (так что, в принципе, можно было даже обойтись без программы :)).

    Мне кажется, что математические решения и демонстрация их устойчивости/неустойчивости в зависимости от начального приближения были бы отличным тортом, на который можно было бы положить вишенку в виде программы, подтверждающей проработанную математическую модель происходящего (даже такую простую, как модель метода простых итераций, хотя, безусловно, применение дифференциальных уравнений могло бы дать еще более интересные результаты – но это, конечно, уже выходит за рамки школьной олимпиады).

    1. Мы сегодня начнем публиковать заметки жюри и авторов (кто найдет время написать, кончно) про ожидания и увиденное на защите. А оставаться в рамках школьной программы действительно непросто, могу сказать, что много интересных задач было отброшено как более похожие на курсачи студентам. Нам же в первую очередь хотелось предложить попробовать применить знания программирования на практике, как это происходит с практическим применением знания физики на олимпиаде по физическому эксперименту.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *