Link Search Menu Expand Document

კვირის მასალა:

https://codehs.com/lms/assignment/43749489

ვიდეოები ნახეთ ყველამ და ვიდეოს სავარჯიშოებიც (example რასაც აწერია) გააკეთეთ დამოუკიდებლად

ამ გვერდზე მოცემულია სავარჯიშოების კოდი და ამოხსნის სხვადასხვა ვარიანტები და პირობების მოდიფიკაციები. აუცილებლად მიყევი სავარჯიშოებს ამ გვერდით, რომ ყველა მნიშვნელოვანი დეტალი გაიარო. დააკვირდი, რომ კოდში ფუნქცია start()-ს არ ვიყენებ და შენ უნდა გამოიძახო მთავარი ფუნქცია (პირველი რომელიც წერია ხოლმე) სტარტში. ფუნქციების რამდენიმე ვერსიები მარტივად რომ შეადარო ერთმანეთს, ამოცანის ამოხსნის ვარიანტები დანომრილია.

2.1.4 Pancakes

კარელმა უნდა დადოს 3 ბურთი ყოველ მე-3 უჯრაზე

“მარტივი” კოდი

function pancakes1() {
    move();
    putBall();
    putBall();
    putBall();
    move();
    move();
    putBall();
    putBall();
    putBall();
    move();
    move();
    putBall();
    putBall();
    putBall();
    move();
    move();
}

რა მოხდება, თუ გვთხოვენ სამის მაგივრად ოთხი ბურთი დავდოთ თითოეულ უჯრაზე?

ფუნქციის გამოყენება

function pancakesWithFunction() {
    makePancake();
    makePancake();
    makePancake();
}

function makePancake() {
    move();
    putBall();
    putBall();
    putBall();
    move();
}

დეკომპოზიცია

function pancakesDecomposed() {
    makePancake();
    makePancake();
    makePancake();
}

function makePancake() {
    move();
    putBalls();
    move();
}

function putBalls() {
    putBall();
    putBall();
    putBall();
}

2.1.5: Backflip

function start() {
    moveAndBackFlip();
    moveAndBackFlip();
}

function moveAndBackFlip() {
    move();
    move();
    backFlip();
}
function backFlip() {
    turnLeft();
    turnLeft();
    turnLeft();
    turnLeft();
}

3.3.6: Dizzy Karel

მარტივი ამოხსნა

თუ დავაკვირდებით, რომ 8-ჯერ დატრიალება 32-ჯერ მარცხნივ შეტრიალებას ნიშნავს, ამოცანა ძალიან მარტივად ამოხსნება.


function dizzySimple() {
    for (var i = 0; i < 32; i++) {
        turnLeft();
    }
    move();
}

nesting

ყოველთვის ამის საშუალებას არ მოგვცემს პირობა, ამიტომ

function dizzyNested() {
    for (var i = 0; i < 8; i++) {
        for (var i = 0; i < 4; i++) {
            turnLeft();
        }
    }
}

დეკომპოზიცია

“მუშა” კოდის დაწერის შემდეგ გავაკეთოთ კიდევ ერთი გადახედვა და დავფიქრდეთ, ხომ არ შეგვიძლია კოდის ხარისხი გავაუმჯობესოთ?

function dizzyDecomposed() {
    for (var i = 0; i < 8; i++) {
        backFlip();
    }
}

function backFlip() {
    for (var i = 0; i < 4; i++) {
        turnLeft();
    }
}

4.1.5: Is There a Ball?

ეს ამოცანა პატარაა, მაგრამ მაინც top down დიზაინით გავაკეთოთ. ამისთვის უბრალოდ პირობა “გადავწეროთ კოდში”.

5.1.3: Move to Wall

5.1.5: Lay Row of Tennis Balls

Off by one bug

function fillLineBuggy(){
    while(frontIsClear()) {
        putBall();
        move();
    }
}

ორნაირი ამოხსნა

function fillLine1() {
    putBall();
    while(noBallsPresent()) {
        move();
        putBall();
    }
}

function fillLine2() {
    while(noBallsPresent()) {
        putBall();
        move();
    }
    putBall();
}

ალტერნატიული ამოხსნა

function fillLine3() {
    while(noBallsPresent()) {
        putBall();
        if (frontIsClear()) {
            move();
        }
    }
}