CS 201 Lecture No 8



  Lecture Handout
  Introduction to Programming
  Lecture No. 8
  Reading Material
  Deitel & Deitel – C++ How to Program    Chapter 2 
  2.16, 2.18
  Summary
  o  Switch Statement
Break Statement



Continue Statement
Guide Lines 
Rules for structured Programming/Flow Charting
Sample Program 
Tips 

  Switch Statement
  Sometimes, we have multiple conditions and take some action according to each
  condition. For example, in the payroll of a company, there are many conditions to deduct
  tax from the salary of an employee. If the salary is less than Rs. 10000, there is no
  deduction. But if it falls in the slab Rs. 10000 - 20000, then the income tax is deducted. If
  it exceeds the limit of Rs. 20000, some additional tax will be deducted. So the appropriate
  deduction is made according to the category or slab of the salary.
  We can also understand this from the example of grades secured by the students of a
  class. Suppose we want to print description of the grade of a student. If the student has
  grade ‘A’ we print ‘Excellent’ and  'Very good', 'good', 'poor' and 'fail' for grades B, C, D,
  and F respectively. Now we have to see how this multi-condition situation can be applied
  in a program. We have a tool for decision making i.e. 'if statement'. We can use 'if
  statement' to decide what description for a grade should be displayed. So we check the
  grade in if statement and display the appropriate description. We have five categories of
  grades-- A, B, C, D, and F. We have to write five   if statements to check all the five
  possibilities (probabilities) of grade. So we write this in our program as under-
  if ( grade == ‘A’ )
      cout << “Excellent” ;
  if ( grade == ‘B’ )
      cout << “Very Good” ;
  if ( grade == ‘C’ )
      cout << “Good” ;
  if ( grade == ‘D’ )
      cout << “Poor” ;
  if ( grade == ‘F’ )
      cout << “Fail” ;
  These statements are correct and perform the required task. But the 'if statement' is
  computationally one of the most expensive statements in a program. We call it expensive
  due to the fact that the processor has to go through many cycles to execute an if statement
  to evaluate a single decision. So to make a program more efficient, try to use the
  minimum number of if statements. This will make the performance of the program better.
  So if we have different conditions in which only one will be true as seen in the example
  of student’s grades, the use of   if statement is very expensive. To avoid this
  expensiveness, an alternate of multiple if statements can be used that is if/else  statements.
  We can write an if statement in the body of an if statement which is  known as nested if.
  We can write the previous code of if statements in the following nested if/else form.
  If ( grade == ‘A’ )
        cout << “Excellent” ;
  else if ( grade == ‘B’ )
        cout << “Very Good” ;
  else if ( grade == ‘C’ )
        cout << “Good” ;
  else if ( grade == ‘D’ )
        cout << “Poor” ;
  else if ( grade == ‘F’ )
        cout << “Fail” ; 
  In the code, there is single statement with each if statement. If there are more statements
  with an   if statement, then don’t forget the use of braces and make sure that they match
  (i.e. there is a corresponding closing brace for an opening brace). Proper indentation of
  the blocks should also be made. 
  In the above example, we see that there are two approaches for a multi way decision. In
  the first approach, we use as many   if statements as needed. This is an expensive
  approach. The second is the use of nested if statements. The second is little more efficient
  than the first one. In the 'nested  if statements' the nested else is not executed if the first if
  condition is true and the control goes out of the if block. 
  The C language provides us a stand-alone construct to handle these instances. This
  construct is switch structure. The switch structure is a multiple-selection construct that is
  used in such cases (multi way decisions) to make the code more efficient and easy to read
  and understand. 
  The syntax of switch statement is as follows.
  switch ( variable/expression ) 
  {
  case constant1 : statementLlist1 ;
  case constant2 : statementLlist2 ;
   : 
                           :
  case constantN : statementListN ;
  default : statementList ;
  }
  In the   switch statement, there should be an integer variable (also include   char) or an
  expression which must evaluate an integer type (whole numbers only, the decimal
  numbers 2.5, 14.3 etc are not allowed). We can’t use compound conditions (i.e. the
  conditions that use logical operators && or ||) in switch statement and in case statements.
  The   constants also must be integer constants (which include   char). We can’t use a
  variable name with the case key word. The   default statement is optional. If there is no
  case which matches the value of the switch statement, then the statements of default are
  executed.
  The   switch statement takes the value of the   variable, if there is an   expression   then it
  evaluates the expression and after that looks for its value among the case  constants. If the
  value is found among the   constants listed in cases, the statements in that   statementList
  are executed. Otherwise, it does nothing. However if there is a default (which is
  optional), the statements of default are executed.
  Thus our previous grade example will be written in switch statement as below.
  switch ( grade )
  {
  case ‘A’ : cout << “Excellent” ;
  case ‘B’ : cout << “Very Good” ;
  case ‘C’ : cout << “Good” ;
  case ‘D’ : cout << “Poor” ;
  case ‘F’ : cout << “Fail” ;
  }
  We know that C language is 'case sensitive'. In this language,  ‘A’ is different from ‘a’.
  Every character has a numeric value which is stored by the computer.. The numeric value
  of a character is known as ASCII code of the character. The ASCII code of small letters
  (a, b, c etc ) are different from ASCII code of capital letters (A, B, C etc). We can use
  characters in switch statement as the characters are represented as whole numbers inside
  the computers.
  Now we will see how the use of ' the letter a' instead of  'A' can affect our program. We
  want our program to be user- friendly. We don’t want to restrict the user to enter the
  grade in capital letters only. So we have to handle both small and capital letters in our
  program. Here comes the limitations of switch statement. We can’t say in our statement
  like  
  case ‘A’ or ‘a’ : statements ;
  We have to make two separate cases so we write   
  case ‘A” :
  case ‘a’ :
  statements;
  In the switch statement, the cases fall through the case which is true. All the statements
  after that case will be executed right down to the end of the switch statement. This is very
  important to understand it. Let's suppose that the user enters grade ‘B’. Now the case ‘A’
  is skipped. Next case ‘B’ matches and statement   cout << “Very Good” ; is executed.
  After that, all the statements will be executed. So   cout << “Good”   ;   cout << “Poor”
  ;and cout << “Fail” ; will be executed after one another. We don’t want this to happen.
  We want that when a case matches, then after executing its statement, the control should
  jump out of the switch statement leaving the other cases. For this purpose we use a key
  word break.  
  Break Statement
  The break statement interrupts the flow of control. We have seen in switch statement that
  when a true case is found, the flow of control goes through every statement down ward.
  We want that only the statements of true case should be executed and the remaining
  should be skipped. For this purpose, we use the   break statement. We write the break
  statement after the statements of a case. Thus, when a true case is found and its
  statements are executed then the break statement interrupts the flow of control and the
  control jumps out of the switch statement. If we want to do the same task for two cases,
  like in previous example for ‘A’ and ‘a’, then we don't put break statement after the first
  case. We write both the cases (or the cases may be more than two) line by line then write
  the common statements to be executed for these cases. We write the break statement after
  these common statements. We should use the   break statement necessarily after the
  statements of each case. The break statement is necessary in switch structure, without it
  the switch structure becomes illogic. As without it all the statement will execute after first
  match case is found. 
  The above code does nothing if the grade is other than these five categories (i.e. A, B, C,
  D and F). To handle all the possibilities of grade input, we write a default statement after
  the last case. The statement in this default case is executed if  no case matches  the grade.
  So in our program, we can write the default statement after the last case as under.
  default : cout << “Please enter grade from A to D or F ” ;
  The break statement is also used in decision structures other than switch structure. We
  have seen that in   while, do-while and   for loops, we have to violate some condition
  explicitly to terminate the loop before its complete repetitions. As in a program of
  guessing a character, we make a variable   tryNum greater than 5 to violate the   while
  condition and exit the loop if the correct character is guessed before five tries. In these
  loops, we can use the   break statement to exit a loop. When a   break statement is
  encountered in a loop, the loop terminates immediately. The control exits the inner most
  loop if there are nested loops. The control passes to the statement after the loop. In the
  guessing character example, we want that if the character is guessed in first or second
  attempt,. then we print the message ‘Congratulations, You guess is correct’ and exit the
  loop. We can do this by using a break statement with an if statement. If the character is
  guessed, we print the message. Afterwards, the break statement is executed and the loop
  terminates. So we can write this as follows.
  if ( c == ‘z’ )  // c is input from user
  {
  cout << “Great, Your guess is correct” ;
  break;
  }
  Thus, break statement can be used to jump out of a loop very quickly.
 The code of the program is given below.
  //This program gets a grade from user and displays a description accordingly
  # include <iostream.h>
  main ( )
  {
  char grade ;
  cout << “Please enter the student’s grade :    ” ;
  cin >> grade ;
  switch ( grade )
         {
  case ‘A’ :   // grade was upper case A
  case ‘a’ :       // grade was lower case a
  cout << “Excellent” ;
  break :      // necessary to exit switch
  case ‘B’ :   // grade was upper case B
  case ‘b’ :   // grade was lower case b
  cout << “Very Good” ;
  break : // necessary to exit switch
  case ‘C’ :   // grade was upper case C
  case ‘c’ :   // grade was lower case c
  cout << “Good” ;
  break : // necessary to exit switch
  case ‘D’ :   // grade was upper case D
  case ‘d’ :   // grade was lower case d
  cout << “Poor” ;
  break : // necessary to exit switch
  case ‘F’ :    // grade was upper case F
  case ‘f’ :   // grade was lower case f
  cout << “Fail” ;
  break : // necessary to exit switch
  default :
  cout << “Please enter grade from A to D or F ” ; 
  }
  } 
  A sample out put of the program is shown here.
  Please enter the student’s grade :    b
  Very Good
  continue Statement
  There is another statement relating to loops. This is the   continue statement. Sometimes
  we have a lot of code in the body of a loop. The early part of this code is common that is

  to be executed every time (i.e. in every  iteration  of loop) and the remaining portion is to
  be executed in certain cases and may not be executed in other cases. But the loop should
  be continuous. For this purpose, we  use the continue statement. Like the break statement,
  the continue statement is written in a single line. We write it as 
  continue ;
  The   continue   forces the immediate next iteration of the loop. So the statements of the
  loop body after continue are not executed. The loop starts from the next iteration when a
  continue statement is encountered in the body of a loop. One can witness very subtle
  things while using  continue.
  Consider the   while loop. In   while loop, we change the value of the variable of   while
  condition so that it could make the condition false to exit the loop. Otherwise, the loop
  will become an infinite one. We should be very careful about the logic of the program
  while using continue in a loop. Before the   continue statement, it is necessary to change
  (increment/decrement) the value of the variable on which the   while condition depends.
  Similarly it is same with the do-while loop. Be careful to increment or decrement the
  conditional variable before the continue statement.  
  In   for loop, there is a difference. In a   while loop when   continue is encountered, the
  control goes to the while statement and the condition is checked.  If condition is true the
  loop is executed again else the loop exits. In a for loop, the three things i.e. initialization,
  condition and increment/decrement are enclosed together as we write  for ( counter = 0 ;
  counter <= 5 ; counter ++) . In the for loop when a continue is encountered, the counter
  (i.e. loop variable) is incremented at first before the execution of the loop condition.
  Thus, in 'for loop' the increment to the loop variable is built in and after continue the next
  iteration of the loop is executed by incrementing the loop variable. The condition is
  checked with the incremented value of the loop variable. In while and do-while loop, it is
  our responsibility to increment the value of the loop variable to test the condition. In a for
  loop, the continue automatically forces this increment of value before going to check the
  condition.
  goto  Statement
  Up to now we have covered the basic programming constructs. These include sequences,
  decisions and repetition structures (i.e. loops). In sequences, we use the simple statements
  in a sequence i.e. one after the other. In decisions construct we use the if statement, if/else
  statement, the multi way decision construct (i.e. the switch statement). And in repetition
  structures, we use the while, do-while and for loops.
  Sometime ago, two computer scientists Gome and Jacopi proved that any program can be
  written with the help of these three constructs (i.e. sequences, decisions and loops). 
  There is a statement in the computer languages COBOL, FORTRON and C. This
  statement is goto statement. The goto is an unconditional branch of execution. The goto
  statement is used to jump the control anywhere (back and forth) in a program. In legacy
  programming, the programs written in COBOL and FORTRAN languages have many
  unconditional branches of execution. To understand and decode such programs that
  contain unconditional branches is almost impossible. In such programs, it is very  
  difficult, for a programmer, to keep the track of execution as the control jumps from one
  place to the other and from there to anywhere else. We call this kind of traditional code as
  spagatti code. It is very difficult to trace out the way of execution and figure out what the
  program is doing. And debugging and modifying such programs is very difficult.    
  When structured programming was started, it was urged not to use the   goto statement.
  Though goto is there in C language but we will not use it in our programs. We will adopt
  the structured approach. All of our programs will consist of sequences, decisions and
  loops.
  Guide Lines
  In general, we should minimize the use of break statement in loops. The switch statement
  is an exception in this regard where it is necessary to use the break statement after every
  case. Otherwise, there may be a logical error. While writing loops, we should try to
  execute the loops with the condition test and should try to avoid the break statement. The
  same applies to the continue statement. The continue statement executes some statements
  of the loop and then exits the loop without executing some statements after it. We can use
  the if statement for this purpose instead of continue. So never use the goto statement and
  minimize the usage of break and continue statements in loops. This will make the code
  easy to understand for you and for others. Moreover the additions and modifications to
  such code will be easy, as the path of execution will be easy to trace. 
  Make a program modular. This means that divide a large program into small parts. It will
  be easy to manage these small parts rather than a larger program. There should be single
  entry and single exit in every module or construct. The use of   break statement in a
  construct violates this rule as a loop having a   break statement can exit through   break
  statement or can terminate when the loop condition violates. As there are two exit points,
  this should be avoided. The single entry- single exit approach makes the execution flow
  simple. 
  Here is an example from daily life, which shows that single entry and single exit makes
  things easy. You would have often seen at a bus stop, especially in rush hours, that when
  a bus reaches the stop, everyone tries to jump into the bus without caring for others.  The
  passengers inside the bus try to get down from the vehicle. So you see there a wrestling
  like situation at the door of the bus. Separate doors for entering or exiting the bus can be
  the solution. In this way, the passengers will easily enter or exit the bus. 
  We have applied this single entry and single exit rule in drawing our flow charts. In the
  flow charts, we draw a vertical line from top to down. The point where the line starts is
  our entry point and downward at the same line at the end is our exit point. Our all other
  processes and loops are along or within these two points. Thus our flow charts resemble
  with the code.
  Rules for Structured Programming/Flow Charting
  There are few simple rules for drawing structured flow charts of programs. One should be
  familiar with these.
  Rule No:1-Start with the simple flow chart. This means that draw a start symbol, draw a
  rectangle and write in it whatsoever you want to do and then draw a stop symbol. This is
  the simplest flow chart. 
  Rule No:2- Any rectangle ( a rectangle represents a process which could be input, output
  or any other process) can be replaced by two rectangles. 
  This concept is the same as taking a complex problem and splitting it up into two simpler
  problems. So we have ‘split it up’ method to move towards a modular approach. So start
  with a block (rectangle) and then any rectangle can be replaced by two rectangles
  (blocks). 
  Rule No:3- Any rectangle can be replaced with a structured flow charting construct.
  These construct include decisions, loops or multi- way decision. This means that we can
  put a structure of an if construct or switch construct in the place of a rectangle. Here we
  come to know the advantage of single entry and single exit concept. This single entry and
  single exit block can be replaced with a rectangle. 
  Rule No: 4- This rule states that rule number 2 and 3 can be repeated as many times as
  you want.
  By using these rules we are splitting a problem into simpler units so that each part can be
  handled either by sequences (one rectangle, second rectangle and so on) or by a decision
  (if, if/else, switch or by a loop). Through this approach, a large problem can be solved
  easily. 
  The flow charts drawn with these rules and indented to the left side will have one to one
  correspondence with our code. Thus it becomes very easy to identify the code that is
  written for a specific part of the flow chart. In this way the code can easily be debugged. 
  Sample Program
  Let’s consider a problem. In a company, there are deductions from the salary of the
  employees for a fund. The deductions rules are as follows:
  i)  If salary is less than 10,000 then no deduction
  ii)  If salary is more than 10,000 and less than 20,000 then deduct Rs. 1,000 as
  fund
  iii)  If salary is equal to or more than 20,000 then deduct 7 % of the salary for fund
  Take salary input from user and after appropriate deduction show the net payable amount. 
  Solution 
  As we see that there is multi way decision in this problem, so we use switch statement.
  The salary is the switch variable upon which the different decisions depend. We can use
  only a single constant in case statement. So we divide the salary by 10000 to convert it
  into a single case constant. As we know that in integer division we get the whole number
  as the answer. Thus if answer is 0 the salary is less than 10000, if answer is 1 then it is in
  range 10000 to 19999 ( as any amount between 10000 – 19999 divided by 10000 will
  result 1). If the answer is greater than 1, it means the salary is equal to or more than
  20000.
  Following is the complete code of our program.
  // This program gets salary input from user and calculates and displays the net payable
  // amount after deduction according the conditions
  # include <iostream.h>
  main ( ) 
  {
  int salary ;
  float deduction, netPayable ;
  cout << “Please enter the salary :    “ ;
  cin >> salary ;
  // here begins the switch statement
  switch ( salary / 10000 ) // this will produce a single value 
  {
  case 0 :   // this means salary is less than 10,000
  deduction = 0; // as deduction is zero in this case
  netPayable = salary ;  
  cout << “Net Payable (salary – deduction)  =  “ ;
  cout << salary << “ - ” << deduction << “ = “ << netPayable;  
  break;    //necessary to exit switch
  case 1 :   // this means salary is in range 10,000 – 19,999
  deduction =  1000 ;
  netPayable = salary – deduction ;
  cout << “Net Payable (salary – deduction)  =  “ ;
  cout << salary << “ - ” << deduction << “ = “ << netPayable;  
  break;    //necessary to exit switch
  default :   // this means the salary is 20,000 or more 
  deduction =  salary * 7 /100 ;
  netPayable = salary – deduction ;
  cout << “Net Payable (salary – deduction)  =  “ ;
  cout << salary << “ - ” << deduction << “ = “ << netPayable;
  }
  }
  Here is the out put of the program.
  Please enter the salary :    15000
  Net Payable (salary – deduction) = 15000 – 1000 = 14000
  Tips
    Try to use the switch statement instead of multiple if statements
    Missing a break statement in a switch statement may cause a logical error
    Always provide a default case in switch statements
    Never use goto statement in your programs
    Minimize the use of break and continue statements

Post a Comment

Don't Forget To Join My FB Group VU Vicky
THANK YOU :)

Previous Post Next Post