კვირის მასალა:
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();
}
}
}