Presentation is loading. Please wait.

Presentation is loading. Please wait.

The Art of Design Ying Wu Electrical & Computer Engineering Northwestern University ECE230 Lectures Series.

Similar presentations


Presentation on theme: "The Art of Design Ying Wu Electrical & Computer Engineering Northwestern University ECE230 Lectures Series."— Presentation transcript:

1 The Art of Design Ying Wu Electrical & Computer Engineering Northwestern University yingwu@ece.northwestern.edu ECE230 Lectures Series

2 Outline Data flow Top-down vs. bottom-up Coarse to fine Two examples –MP#1 –MP#2

3 Data Flow Data –data representation  describe your inputs/outputs E.g. 1: a segment of command line? E.g. 2: the set of operators? Inputs and outputs of the building blocks –what are given? –what are expected? Data flow –blocks are connected through data flow

4 Flow chart Coding is a very very small part of programming –design  40% –coding  10% –debugging  50% When you start to work –always draw flow charts –organize your thoughts by flow charts –use testing cases to validate your flow charts

5 Top-down “Incremental” programming –Divide-and-conquer Task decomposition –No matter how small a task is, you can always divide it into a set of small sequential subtasks –You need to understand your tasks Focus –Make the structure clear and neat –Always use the basic controls Sequential Selection repetitive

6 Coarse to Fine Coarse  Fine Coarse design –determines the structure of the program –tells the basic idea –details are all ignored –concentrate on data flow –Organize it by subtasks Refinement –A rough “block” can always by replaced by a refined flowchart –It is much easier, because the tasks are simpler

7 Bottom-up “Brain-storming” programming Bottom design –creating a set of small “tools” –thinking based on “basic operations” Bottom  Up –putting tools together –this needs more experiences

8 “Tools” Extracting those basic operations –E.g. 1: bypass all “white spaces” –E.g. 2: check digits Forming functions –inputs –outputs –error checking

9 Before you start … Data representation? –How do you represent a “segment”? st/ed Your objectives? –Find a segment  determine st/ed

10 A Coarse Design Command line  buffer[500] Find the first element of a seg. Find the last element of the seg. Copy the segment to piece[100] piece  screen End of the string? Start the next segment Y N done

11 Code it int main() { cout << “Welcome bla bla bla” << endl; char buffer[500]; cout << "\nInput a command line: "; cin.getline(buffer, 500); char piece[500]; int st = 0, ed = 0; while( buffer[st]!=0 ){ st = _find_the_first_element( ); ed = _find_the_last_element( st ); _copy_segment(piece, st, ed); _display_segment(piece); st = ed + 1; } return 0; }

12 Checking after actions Command line  buffer[500] Find the first element of a seg. Successful? Find the last element of the seg. Successful? Copy the segment to piece[100] piece  screen End of the string? Start the next segment Error Y N N Y Y N

13 Code it int main() { cout << “Welcome bla bla bla” << endl; char buffer[500]; cout << "\nInput a command line: "; cin.getline(buffer, 500); char piece[500]; int st = 0, ed = 0, err_code = 1; while( buffer[st]!=0 ){ st = _find_the_first_element( ); if (buffer[st] == 0) err_code = 0; ed = _find_the_last_element( st ); // err_code can be set inside if (err_code == 0) break; else { _copy_segment(piece, st, ed); _display_segment(piece); st = ed + 1; } return err_code; }

14 Coarse-to-fine Find the first element of a seg. st ‘ ‘v ‘‘ a‘‘ r‘‘ _‘‘ 1‘‘ ‘ a‘‘ ‘ +‘‘ ‘3‘‘.‘‘ 1‘‘ 4‘‘ 0 buffer[0] buffer[st] == ‘ ‘ && buffer[st] != 0 st ++ Y N st

15 Coarse-to-fine Find the first element of a seg. sted Scan to find ed init ed = st Is buffer[st] a letter? Is buffer[st] a digit? Is buffer[st] an operator? Scan to find ed err_code = 0 YN Y N Y N Scan to find ed Is buffer[st] a ‘:’? Is buffer[st] a ‘[‘? Scan to find ed Y Y ed and err_code

16 Go even finer Scan to find ed buffer[st] = ‘[‘ ed init ed = st+1 Conditions for buffer[ed] ed ++ err_code = 0 break buffer[ed] != ‘]’

17 Put things together From coarse-to-fine –always draw flowcharts –keep all your flowchart Adding things little by little –don’t put together all at once Validate the new components –whenever you refine a block, always debug it and make sure the whole thing is correct –keep the structure of the program clear

18 Data Representation (MP#2) Attention, we only check 4 types of valid grammars. 1.assignment: "operand_1 = operand_2", e.g., a = 1 2.binary operation: "operand_1 operator operand_2", e.g., a + b 3.unary operation: "operand_1 operator", e.g., a++ 4.assignment and binary operation: "result = operand_1 operator operand_2", e.g., a = b + c According to that, we can define –Operations, (e.g., +, -, *, /, ++, --) –Operation types. (e.g., assignment, unary, binary) So, enum OP {ASN, ADD, MIN, MUL, DIV, INC, DEC}; enum OP_TYPE {asn, unary, binary};

19 A Coarse Design Print version/welcome Command line  buffer[500] Resolve a statement “understand” a statement Quit ? Y N done Successful? Y error

20 Data Flow Resolve a statement ( ) Understand a statement ( ) result_name # of pieces operator_name operator_type operand_1 operand_2 err_code CL_buffer[]

21 Tools Read_a_Piece( ) start_from buffer[ ] piece[ ] err_code Is_Char_a_Letter( ) c T/F Is_Char_a_Digit( ) c T/F Is_Char_a_Operator( ) c T/F Use MP#1

22 Coarse-to-fine Resolve_a_Statement –T1: scanning to determine the # of pieces –T2: finding operators –T3: grammar check –T4: finding two operands (based on T1/T2) Understand_a_Statement –Switch/case based on op type –Simply translate and print them out


Download ppt "The Art of Design Ying Wu Electrical & Computer Engineering Northwestern University ECE230 Lectures Series."

Similar presentations


Ads by Google