490 likes | 633 Views
06 – Conditional Execution. Admin: Test (next week). In class test teaching week 6 50 minutes short answer (5 - 6 words max) 25% of coursework mark. Questions: Data Types. What is the result of: String ( "George Boole").subStr(4, 4 )
E N D
Admin: Test (next week) • In class test • teaching week 6 • 50 minutes • short answer (5 - 6 words max) • 25% of coursework mark
Questions: Data Types • What is the result of:String("George Boole").subStr(4, 4) • What is put in lblRes?txtPetName.value = "George"lblRes.innerText = String(txtPetName.value).slice(3, 6) • What is put in lblRes?txtPetName.value = "George"lblRes.innerText = String("txtPetName").subStr(0, 3) ge B rge txt
Session Aims & Objectives • Aims • to introduce the main concepts involved in getting the computer to act differently under different circumstances • Objectives,by end of this week’s sessions, you should be able to: • evaluate and generate conditional expressions • use conditional statements to make your code more adaptable
Example: Drinks • SPECIFICATION • User Requirements • Students wish to decide which supermarket sells drinks at the best price • Software Requirements • Functional: • user enters offer details (bottle size, number of bottles, and price) • computer calculates bottle price and price per pint • Non-functionalshould be easy to use
Debugging • key skill: • locate the cause of a bug • using testing methods • first step • narrow it down as much as possible • typical pattern in early tutorials: • student: it doesn't work • lecturer: what doesn't work • student: my code • lecturer: yes, but which bit exactly • student: ???? • lecturer: run your program, take me through it, which bits work, and where exactly does it go wrong • student: when I click this, nothing happens • lecturer: which bit of code is responsible for doing that? • student: this bit
Example: Drinks • What happens when run? • Nothing? • think of murder investigationwho-done-it? • input boxes, button, and text displaystherefore: html works! • button click causes errortherefore: prime suspect is button code
Example: Drinks (with ERRORS) <html> <head><title></title></head> <body> Bottle Size: <input id="txtBottleSize" type="text" />ml<br /> Quantity: <input id="txtQty" type="text" /><br /> Price (£): <input id="txtPrice" type="text" /><br /> <input id="btnCalc" type="button" value="Calc" onclick="btnCalc_onClick()" /><br /> £<span id="lblBottlePrice"></span> per bottle<br /> £<span id="lblPintPrice"></span> per pint<br /> </body> </html> <script language="javascript"> function Calc_onClick(){ lblBottlePrice.innerText = txtQty.valu / txtPrice.value; lblPintPrice.innerText = lblBottlePrice.innerText * (568 / txtBottleSize.value); } </script>
Debugging • Examine code line by line • can help, but time consuming • Breakpoint (press F9 on keyboard):
Debugging • Breakpoint: like DVD pause, when line hit • Logic: • if breakpoint hit, code will pause,therefore event handler is OK, must be code • if nothing happens, breakpoint not hit,therefore event handler not working (this is what happens – check name)
Example: Drinks (with ERRORS) <html> <head><title></title></head> <body> Bottle Size: <input id="txtBottleSize" type="text" />ml<br /> Quantity: <input id="txtQty" type="text" /><br /> Price (£): <input id="txtPrice" type="text" /><br /> <input id="btnCalc" type="button" value="Calc" onclick="btnCalc_onClick()" /><br /> £<span id="lblBottlePrice"></span> per bottle<br /> £<span id="lblPintPrice"></span> per pint<br /> </body> </html> <script language="javascript"> function Calc_onClick(){ lblBottlePrice.innerText = txtQty.valu / txtPrice.value; lblPintPrice.innerText = lblBottlePrice.innerText * (568 / txtBottleSize.value); } </script>
Debugging: Breakpoint hit • After event-handler fixed • breakpoint hit, code paused
Debugging • Can run 1 line – press F8 on keyboard Always read message Always click Break(this means pause)
Debugging – Stop Button • Click Stop button, to edit code
Debugging: Check output • Is this right? • if each bottle is 0.8,then 0.8 * quantity should be same as price • 0.8 * 4 = 3.2 • this is wrong
Debugging: Immediate Window • Can now ask questions • what is in txtPrice.value
Adaptive Behaviour • So far • every statement always executed in sequence • Often necessary for software to • change behaviour under different circumstances
Example: Multiplication Test • SPECIFICATION • User Requirements • A primary school teacher wants to test the multiplication skills of her children. • Software Requirements • Functional: • display a multiplication question • allow the user to type a response • check the response and provide feedback • Non-functionalshould be interesting, colourful, and easy to use
Example: Multiplication Test v1 <html> <head><title>Multiply</title></head> <body> <p>What is 5 times 3?</p> <input id="txtAns" type="text" /><br /> <input id="btnAns" type="button" value="Check" onclick="btnAns_onClick()" /> <p id="lblComment"></p> </body> </html> <script language="javascript"> function btnAns_onClick(){ if (txtAns.value == 15){ document.bgColor = "yellow"; lblComment.innerText = "Correct, well done!"; }else{ document.bgColor = "cyan"; lblComment.innerText = "Sorry, try again"; } } </script>
if statements • Use the following syntax (pattern):if(condition){statementblock} • For example:if (txtAge.value < 18){ document.bgColor = "Red"; }
if else statements • Use the following syntax (pattern):if(condition){statementblock-1}else{statementblock-2} • For example:if (txtAge.value < 18){ document.bgColor = "Red";}else{ document.bgColor = "Blue";}
George Boole • 1815 (Lincoln, UK) – 1864 • Invented Boolean algebra • key concept in computing • boolean datatype: • 0 false • 1 true • Condition – expression, evaluates to: • true(stored as –1) • false(stored as 0)
Conditions: Relational Operators • conditions contain relationaloperators:== is equal to> is greater than< is less than>= is greater thanor equal to<= is less thanor equal to!= is not equal to
Conditions: Examples (literal) • Using literals:34 == 3434 == 1234 > 418 <= 18 "hello" > "zoo" true false true true false
Conditions: Examples (symbolic) • Using symbols (controls' properties):Assume that:picMain.style.posLeft is 2300picMain.style.posLeft == 2300picMain.style.posLeft == 2309picMain.style.posLeft != 189picMain.style.posLeft > 1900 true false true true
Conditions: Errors • Are the following valid: • 23 > 30 • 66 15 • 23 < • picBat.style.posLeft > 1000 • < picBat.style.posTop missing (relational) operator missing data missing data
Questions: Conditions • What is the result of (picMain.style.posLeft is 5589): picMain.style.posLeft > 4400 • What is the result (txtAge.value is 19, txtSalary.value is 10787):txtAge.value < 21 && txtSalary.value < 10787 • Write an expression to check if:the posLeft of picMain is larger than 167 • Write an expression to check if:picMain posTop is more than picBall posTop true false picMain.style.posLeft > 167 picMain.style.posTop > picBall.style.posTop
Example: Student Loan <html> <head><title>Student Loan Repayment Calculator</title></head> <body> <center><font size="+2"><b>Student Loan Repayment Calculator</b></font></center> <input id="txtIncome" type="text" /> <input id="btnCalc" type="button" value="Calculate" onclick="btnCalc_onClick()" /> <p id="lblPayment"></p> </body> </html> <script language="javascript"> function btnCalc_onClick(){ lblPayment.innerText = (txtIncome.value - 15000) * 0.09; } </script>
Example: Student Loan (v2) <html> <head><title>Student Loan Repayment Calculator</title></head> <body> <center><font size="+2"><b>Student Loan Repayment Calculator</b></font></center> <input id="txtIncome" type="text" /> <input id="btnCalc" type="button" value="Calculate" onclick="btnCalc_onClick()" /> <p id="lblPayment"></p> </body> </html> <script language="javascript"> function btnCalc_onClick(){ if (txtIncome.value > 15000){ lblPayment.innerText = "£" +((txtIncome.value - 15000) * 0.09); }else{ lblPayment.innerText = "You pay nothing (£0.00)!"; } } </script>
Example: Ball Char • Functional Decomposition • Incremental Development • Get ball char to bounce horizontally: • get ball char to appear on left of page • get ball char to move right on page (user click) • get ball char to move right on page automatically • get ball char to stop at end • get ball char to change direction
Example: Ball Char (v2) <html> <head><title>Ball Char</title></head> <body style="background-color: Lime;" onload="window_onLoad()"> <img id="picBall" src="BallChar.gif" style="position: absolute;" /> </body> </html> <script language="javascript"> function window_onLoad(){ window.setInterval("MoveBallRight()", 50); } function MoveBallRight(){ picBall.style.posLeft = picBall.style.posLeft + 5; } </script>
Example: Ball Char (v2.1) <html> <head><title>Ball Char</title></head> <body style="background-color: Lime;"onload="window_onLoad()"> <img id="picBall" src="BallChar.gif" style="position: absolute;" /> </body> </html> <script language="javascript"> function window_onLoad(){ window.setInterval("MoveBallRight()", 50); } function MoveBallRight(){ if (picBall.style.posLeft < document.body.clientWidth){ picBall.style.posLeft = picBall.style.posLeft + 5; } } </script>
Example: Ball Char (v2.2) <html> <head><title>Ball Char</title></head> <body style="background-color: Lime;"onload="window_onLoad()"> <img id="picBall" src="BallChar.gif" style="position: absolute;" /> </body> </html> <script language="javascript"> function window_onLoad(){ window.setInterval("MoveBallRight()", 50); } function MoveBallRight(){ If ((picBall.style.posLeft + picBall.width) < document.body.clientWidth){ picBall.style.posLeft = picBall.style.posLeft + 5; } } </script>
Example: Ball Char (v2.3) <html> <head><title>Ball Char</title></head> <body style="background-color: Lime;"onload="window_onLoad()"> <img id="picBall" src="BallChar.gif" style="position: absolute;" /> </body> </html> <script language="javascript"> function window_onLoad(){ window.setInterval("MoveBallRight()", 50); } function MoveBallRight(){ If ((picBall.style.posLeft + picBall.width + 5) < document.body.clientWidth){ picBall.style.posLeft = picBall.style.posLeft + 5; } } </script>
Example: Ball Char (v2.4) <html> <head><title>Ball Char</title></head> <body style="background-color: Lime;"onload="window_onLoad()"> <img id="picBall" src="BallChar.gif" style="position: absolute;" /> </body> </html> <script language="javascript"> function window_onLoad(){ window.setInterval("MoveBallRight()", 50); } function MoveBallRight(){ if ((picBall.style.posLeft + picBall.width + 5) < document.body.clientWidth){ picBall.style.posLeft = picBall.style.posLeft + 5; }else{ window.setInterval("MoveBallLeft()", 50); } } function MoveBallLeft(){ picBall.style.posLeft = picBall.style.posLeft – 5; } </script>
Example: Ball Char (v2.5) • Bounce from side to side, with sound:
Example: Pizza Delivery A Pizza shop provides a delivery service. If the delivery is within five miles of the shop, then no delivery fee is charged. If the cost of the goods is less than £10 then a £3 delivery fee is charged, otherwise a £1.50 delivery fee is charged.
Decision Trees • Natural language • ambiguous & difficult to follow • Decision trees • express same information clearly Free Y £1.50 distance <= 5 miles Y N value >= £10 N £3.00
Example: Pizza Delivery <html> <head><title>Delivery</title></head> <body> <p>Distance: <input type="text" id="txtDist" /><br /> Cost: <input type="text" id="txtCost" /><br /> <input type="button" id="btnCalc" value="Calc" onclick="btnCalc_onClick()" /> </p> <p id="lblCharge"></p> </body> </html> <script language="javascript"> function btnCalc_onClick(){ if (txtDist.value <= 5){ lblCharge.innerText = "Delivery Charge: £0.00"; }else{ if (txtCost.value >= 10){ lblCharge.innerText = "Delivery Charge: £1.50"; }else{ lblCharge.innerText = "Delivery Charge: £3.00"; } } } </script> • Nested If statements • one ifinside another if
If statements: Errors if (txtNum.value > 5){ if (txtNum.value == 4){ document.bgColor = "green"; } missing } if (picMan.width > 5) document.bgColor = "red"; } missing }
Logical Operators Use to join conditions (picMain.vSpace is 23): • And True when both itemsare TruepicMain.vSpace > 5 && picMain.vSpace < 35 truepicMain.vSpace < 10 && picMain.vSpace > 55 falsepicMain.vSpace > 6 && picMain.vSpace < 23 falsepicMain.vSpace >= 6 && picMain.vSpace <= 23 true • Or True when either itemis TruepicMain.vSpace == 23 || picMain.vSpace == 11 truepicMain.vSpace < 10 || picMain.vSpace > 55 false • Not True whenitemis False! (picMain.vSpace == 23) false
Logical Operators: Errors if (picMan.width > 5 && < 10){ document.bgColor = "red"; } missing data if (picMan.width > 5 && picMan.width < 10){ document.bgColor = "red"; }
Tutorial Exercises: Drinks • LEARNING OBJECTIVE:use interactive debugger to identify and correct errors • Task 1: Create a new project, and type in the code for the drinks example. Running it should display the html, but the calc button does nothing. • Task 2: Use the interactive debugger to identify and correct the errors in the code.
Tutorial Exercises: Multiplication • LEARNING OBJECTIVE:use if statement to perform conditional execution • Task 1: Get the Multiplication v1 examples (from the lecture) working. • Task 2: Modify your program so that the text box is disabled after the answer is checked • Task 3: Modify your program so that it makes a suitable sound when the user gets the answer right/wrong. Sound files are in the resources section of the web-site
Tutorial Exercises: Student Loan • LEARNING OBJECTIVE:use if statement to perform conditional execution • Task 1: Get the Student Loan v1 and v2 examples (from the lecture) working. • Task 2: Modify your program so that it calculates and displays monthly income and repayment amounts (as well an annual).
Tutorial Exercises: BallChar • LEARNING OBJECTIVE:use if statement to perform conditional execution • Task 1: Get the BallChar example (from the lecture) working.You will need to work out the code for v2.5 – use the previous code for inspiration. • Task 2: Modify your program so that the Ball Character blinks when the mouse moves over it • Task 3: Modify your program to play a sound when the ball character is clicked
Tutorial Exercises: Pizza Delivery • LEARNING OBJECTIVE:use nested if statements to perform conditional execution • Task 1: Get the Pizza Delivery example (from the lecture) working.