CSE123 - Lecture 4 Structured ProgrammingLoops Sequential and Structured Programming Common mistakes, Do not use turkish letters in variable names Do not use turkish letters and blanks in m-file names Do not use two relational operators in one expression, divide the expression and then combine it using logical operators such as and, or or xor etc… 0<x<10 incorrect x>0 & x<10 correct Sequential and Structured Programming Initialization Initialization Initialization Input Initialization Input Repeat the operation 3 times… Calculation 1 Calculation 2 Calculation 1 Calculation 3 Results Results The FOR loop for loop_variable= start:step:finish …. Statements …. end Basic rules for “for” loop • Default value for step: 1 • The step can be negative • If start = finish, the loop is executed once. • Usually NOT a good idea to change the loop_variable inside the loop. INCREMENT for loop_variable loop_variable= loop_variable>finish start:step:finish loop_variable<=finish Statements The FOR loop Example: testloop.m % program to test a for loop % program to test a for loop % program to test a for loop for i=1:10 disp(i) end for i=1:10 disp(i*0.2) end for i=1:0.1:2 disp(i*5) end >> testloop 1 2 3 . . 10 >> testloop 0.2 0.4 0.6 … 2.0 >> testloop 5 5.5 6 .. 9.5 10 >> disp(i) >> disp(i) 10 10 >> disp(i) 2 The FOR loop Example : Assume we have series of natural numbers up to 100 and want to find the summation of these numbers. •Use a for loop, using the loop variable as the index Loop variable: i •At every step of the loop, we want to add the value corresponding to the index. Result variable: % program to test a for loop sum=0; for i=1:100 sum=sum+i; end sum Summation is done by addition of 1st elements, obtain partial result, add 2nd element, obtain partial result, etc…. sum=sum + next value disp(sum) disp([‘result=‘,num2str(sum)]) The FOR loop Applications and uses of “for” loops Use loop_variable as a counter Example : . …… . We want to calculate the 100 times •Use a for loop, using the loop variable as the index of the vector. Loop variable: j •At every step of the loop, we want to add the value corresponding to the index. Result variable: S S=pi; for j=1:100 S=sqrt(S) S •Operation done by taking the square root of the preceding result, 100 times S= % program to test a for loop end Initialization The FOR loop Background tests and operations Add step to INCREMENT loop_variable for loop_variable= start:step:finish IF loop_variable<=finish Statements IF loop_variable>finish Assume 1000 values We want to stop the loop when we obtain enough preicison in the calculation What will happen if the precision is obtained after 10 calculations? The FOR loop will not stop until the 1000 . The WHILE loop while logical_expression Statements end While logical_expression IF logical_expression Basic rules for “while” loop Statements • Usually necessary to create your loop_ variable or counter. • NECESSARY to change the loop_variable inside the loop. IF logical_expression TRUE FALSE The WHILE loop Example: exloop1.m % program test % program to test while loop i=0; for i=1:10 disp(i) end while i<10 Had to create a counter i=i+1; disp(i) end >> exloop1 1 2 3 4 5 6 7 8 9 10 >> disp(i) 10 The WHILE loop Example: exloop2.m % program to test while loop x=10; while x>1 x=x-0.5; y=log(x); disp([x,y]) end >> exloop2 9.5000 9.0000 8.5000 8.0000 7.5000 7.0000 6.5000 6.0000 5.5000 5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1 2.2513 2.1972 2.1401 2.0794 2.0149 1.9459 1.8718 1.7918 1.7047 1.6094 1.5041 1.3863 1.2528 1.0986 0.9163 0.6931 0.4055 0 The WHILE loop Example: exloop3.m >> exloop3 % BAD while loop x=1; while x>=0 x=x+0.5; y=sin(x); This is an Infinite loop !!!! Need to stop the script manually !!! CTRL C end >> disp(‘END of program’) The WHILE loop Use while loop when the number of operation is unknown Example : exloop4.m Calculate the sum of manually entered numbers. Entering 0 or a negative number stops the loop and display the average. •Need input statement: variable: A •Use the length of A in the logical_expression A>0 i=i+1 •Inside the loop: •Increment a counter to count how many value we entered •Add the value A to the sum S S=S+A % program to test a while loop A=pi; S=0; i=0; while A>0 A=input('Value for A:'); i=i+1; S=S+A; end N=i-1 disp(S/N) >> testloop >> testloop Value for A:1 Value for A:5 Value for A:8 Value for A:0 4.6667 Value for A:2 Value for A:2 Value for A:2 Value for A:2 Value for A:0 2 The WHILE loop Use logical_expression for convergence limit Example 5: Series convergence: N i 1 1 i2 π2/6 Want to see how many terms you need to obtain an error of 3x10-6. •Need to define and use an error variable. err •Need to be part of the logical expression •Need to be updated during loop % Convergence script S=0; i=0; err=10; while err>3e-6 i=i+1; S=S+ 1/i^2; err=abs(S-pi^2/6); end •At every step of the loop, we want to •Verify if test is true (err>3e-6) •Increment counter i=i+1 •Add the new term to the sum S=S+ 1/i^2 disp(['N=',num2str(i)]) >> Testloop N=333333 The WHILE loop Use logical_expression for convergence limit % Convergence script S=0; i=0; err=10; while err>3e-6 i=i+1; S=S+ 1/i^2; err=abs(S-pi^2/6); A(i)=err; end disp(['N=',num2str(i)]) >> Testloop N=333333 Nested loops and combination Using nested loops % program to test nested loops Example: exloop6.m Calculate the sum of factorials up to 20 1! 2! 3! 4! .... 20! •Need a for loop for sums i •Need a for loop for factorials j •Calculate the factorial of element j •Do the sum on all elements F=F*j S=S+F S=0; for i=1:20 F=1; for j=1:i F=F*j; end S=S+F end disp(S) The “BREAK” statement BREAK % BAD while loop •Break terminates the execution of a for or while loop. Statements in the loop that appear after the break statement, are not executed. x=1; •In nested loops, break exits only from the loop in which it occurs. Control passes to the statement that follows the end of that loop. while x>=0 x=x+0.5; y=sin(x); if x>10000 break end end The “CONTINUE” statement CONTINUE • Continue passes control to the next iteration of the for or while loop in which it appears, skipping any remaining statements in the body of the loop. % Problem of division by 0 x=1; for i= -10:10 if x==0 continue end y=1/x; end The FOR loop Example : Write a Matlab script tp calculate following expression for an enetered x value 1 1 1 1 1 1 1 1 x The FOR loop Example : Write a Matlab script tp calculate mean and standard deviation of an input data set containing an arbitrary number of input values. Check to see if there is enough input data (N>1) to eliminate division by zero. 1 x N N x i 1 N s i N N x ( x i ) 2 i 1 2 i i 1 N ( N 1) Break Example : Run the following loops and report the result for ii=1:3 1 * 1 = 1 for jj=1:3 if jj==3 break; end Product=ii*jj; fprintf(‘%d * %d = %d \n’,ii,jj,product); end fprintf(‘end of inner loop\n’); end fprintf(‘end of outer loop\n’); 1 * 2 = 2 end of inner loop 2 * 1 = 2 2 * 2 = 4 end of inner loop 3 * 1 = 3 3 * 2 = 6 end of inner loop end of outer loop