C: How to Program. Week /Apr/23

Similar documents
C: How to Program. Week /Apr/16

C Arrays Pearson Education, Inc. All rights reserved.

C Arrays. Group of consecutive memory locations Same name and type. Array name + position number. Array elements are like normal variables

Chapter 6. Arrays. Copyright 2007 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

Chapter 4 - Arrays. 4.1 Introduction. Arrays Structures of related data items Static entity (same size throughout program)

Chapter 4 - Arrays. 4.1 Introduction. Arrays Structures of related data items Static entity (same size throughout program) A few types

Lecture 04 FUNCTIONS AND ARRAYS

Content. In this chapter, you will learn:

Array. Arrays. Declaring Arrays. Using Arrays

C++ PROGRAMMING SKILLS Part 4: Arrays

CSE101-Lec#17. Arrays. (Arrays and Functions) Created By: Amanpreet Kaur & Sanjeev Kumar SME (CSE) LPU. LPU CSE101 C Programming

Outline Introduction Arrays Declaring Arrays Examples Using Arrays Passing Arrays to Functions Sorting Arrays

C Arrays. O b j e c t i v e s In this chapter, you ll:

Kingdom of Saudi Arabia Princes Nora bint Abdul Rahman University College of Computer Since and Information System CS242 ARRAYS

Arrays. Systems Programming Concepts

Arrays and Applications

C How to Program, 7/e by Pearson Education, Inc. All Rights Reserved.

C How to Program, 6/e by Pearson Education, Inc. All Rights Reserved.

CHAPTER 3 ARRAYS. Dr. Shady Yehia Elmashad

Yacoub Sabatin Muntaser Abulafi Omar Qaraeen

Two Dimensional Array - An array with a multiple indexs.

Outline Arrays Examples of array usage Passing arrays to functions 2D arrays Strings Searching arrays Next Time. C Arrays.

Computer Programming Lecture 14 Arrays (Part 2)

Programming for Engineers Arrays

Functions. Computer System and programming in C Prentice Hall, Inc. All rights reserved.

Two Dimensional Array - An array with a multiple indexs.

Fundamentals of Programming Session 14

Fundamentals of Programming Session 15

ONE DIMENSIONAL ARRAYS

Functions. Angela Chih-Wei Tang ( 唐之瑋 ) Department of Communication Engineering National Central University JhongLi, Taiwan.

Outline. Introduction. Arrays declarations and initialization. Const variables. Character arrays. Static arrays. Examples.

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

C Functions. 5.2 Program Modules in C

Arrays. Week 4. Assylbek Jumagaliyev

Chapter 5 - Functions

Dr M Kasim A Jalil. Faculty of Mechanical Engineering UTM (source: Deitel Associates & Pearson)

Pointers. Chih-Wei Tang ( 唐之瑋 ) Department of Communication Engineering National Central University JhongLi, Taiwan

C Functions. CS 2060 Week 4. Prof. Jonathan Ventura

AN OVERVIEW OF C, PART 3. CSE 130: Introduction to Programming in C Stony Brook University

Function Call Stack and Activation Records

Introduction to C Final Review Chapters 1-6 & 13

Chapter 7 Array. Array. C++, How to Program

C Pointers. sizeof Returns size of operand in bytes For arrays: size of 1 element * number of elements if sizeof( int ) equals 4 bytes, then

Chapter 6 - Pointers

CSE123. Program Design and Modular Programming Functions 1-1

C Programming Language

by Pearson Education, Inc. All Rights Reserved. 2

C Pointers Pearson Education, Inc. All rights reserved.

Lecture 3. Review. CS 141 Lecture 3 By Ziad Kobti -Control Structures Examples -Built-in functions. Conditions: Loops: if( ) / else switch

To declare an array in C, a programmer specifies the type of the elements and the number of elements required by an array as follows

BIL 104E Introduction to Scientific and Engineering Computing. Lecture 4

Technical Questions. Q 1) What are the key features in C programming language?

Fundamental of Programming (C)

C: How to Program. Week /Mar/05

Chapter 7. Pointers. Copyright 2007 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

Chapter 3 - Functions

Introduction to C Programming

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

ECET 264 C Programming Language with Applications. C Program Control

IS 0020 Program Design and Software Tools

The C language. Introductory course #1

6-1 (Function). (Function) !*+!"#!, Function Description Example. natural logarithm of x (base e) rounds x to smallest integer not less than x

IECD Institute for Entrepreneurship and Career Development Bharathidasan University, Tiruchirappalli 23.

B.V. Patel Institute of Business Management, Computer & Information Technology, Uka Tarsadia University

KOM3191 Object Oriented Programming Dr Muharrem Mercimek ARRAYS ~ VECTORS. KOM3191 Object-Oriented Computer Programming

C-LANGUAGE CURRICULAM

C Functions Pearson Education, Inc. All rights reserved.

Chapter 14 - Advanced C Topics

Chapter 2 - Introduction to C Programming


Chapter 3 Structured Program Development

Writing an ANSI C Program Getting Ready to Program A First Program Variables, Expressions, and Assignments Initialization The Use of #define and

Variation of Pointers

C Pointers. 7.2 Pointer Variable Definitions and Initialization

Unit 3 Decision making, Looping and Arrays

Instructor: Eng.Omar Al-Nahal

Functions and Recursion

Objectivities. Experiment 1. Lab6 Array I. Description of the Problem. Problem-Solving Tips

C Pointers. Indirection Indirection = referencing a value through a pointer. Creating Pointers. Pointer Declarations. Pointer Declarations

C Functions. Object created and destroyed within its block auto: default for local variables

Outline. Computer Memory Structure Addressing Concept Introduction to Pointer Pointer Manipulation Summary

CSE 2421: Systems I Low-Level Programming and Computer Organization. Functions. Presentation C. Predefined Functions

Introduction to C. Systems Programming Concepts

Computer Science & Information Technology (CS) Rank under AIR 100. Examination Oriented Theory, Practice Set Key concepts, Analysis & Summary

15 FUNCTIONS IN C 15.1 INTRODUCTION

Programming for Engineers Functions

Functions. Functions are everywhere in C. Pallab Dasgupta Professor, Dept. of Computer Sc & Engg INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR

Principles of Programming. Chapter 6: Arrays

BSM540 Basics of C Language

Structured Programming. Dr. Mohamed Khedr Lecture 9

Why Pointers. Pointers. Pointer Declaration. Two Pointer Operators. What Are Pointers? Memory address POINTERVariable Contents ...

Arrays (Deitel chapter 7)

Preview from Notesale.co.uk Page 2 of 79

Variables Data types Variable I/O. C introduction. Variables. Variables 1 / 14

Computer Science & Engineering 150A Problem Solving Using Computers

Dynamic memory allocation

Note: unless otherwise stated, the questions are with reference to the C Programming Language. You may use extra sheets if need be.

Multiple-Subscripted Arrays

Functions. Systems Programming Concepts

Functions in C++ Problem-Solving Procedure With Modular Design C ++ Function Definition: a single

Transcription:

C: How to Program Week 9 2007/Apr/23 1

Review of Chapters 1~5 Chapter 1: Basic Concepts on Computer and Programming Chapter 2: printf and scanf (Relational Operators) keywords Chapter 3: if (if else ) while Assignment(=) and incremental operator (++,--) Chapter 4: for switch do while break and continue Logic Operators 2

Review of Chapters 1~5 Chapter 5: functions function stdio.h, math.h, stdlib.h, time.h rand() and srand() storage class and scope rules recursion Key point: syntax introduced by textbook syntax error logic error 3

Chapter 6 - Arrays Outline 6.1 Introduction 6.2 Arrays 6.3 Declaring Arrays 6.4 Examples Using Arrays 6.5 Passing Arrays to Functions 6.6 Sorting Arrays 6.7 Case Study: Computing Mean, Median and Mode Using Arrays 6.8 Searching Arrays 6.9 Multiple-Subscripted Arrays 4

6.1 Introduction Arrays Structures of related data items Static entity same size throughout program Dynamic data structures discussed in Chapter 12 5

Array 6.2 Arrays Group of consecutive memory locations Same name and type To refer to an element, specify Array name Position number Format: arrayname[ position number ] First element at position 0 nelement array named c: c[ 0 ], c[ 1 ]...c[ n 1 ] Name of array (Note that all elements of this array have the same name, c) c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10] c[11] -45 6 0 72 1543-89 0 62-3 1 6453 78 Position number of the element within array c 6

6.2 Arrays Array elements are like normal variables c[ 0 ] = 3; printf( "%d", c[ 0 ] ); Perform operations in subscript. If x equals 3 c[ 5-2 ] == c[ 3 ] == c[ x ] 7

6.2 Arrays Operators Associativity Type [] () left to right highest ++ --! (type) right to left unary * / % left to right multiplicative + - left to right additive < <= > >= left to right relational ==!= left to right equality && left to right logical and left to right logical or?: right to left conditional = += -= *= /= %= right to left assignment, left to right comma Fig. 6.2 Operator precedence. 8

6.3 Defining Arrays When defining arrays, specify Name Type of array Number of elements arraytype arrayname[ numberofelements ]; Examples: int c[ 10 ]; float myarray[ 3284 ]; Defining multiple arrays of same type Format similar to regular variables Example: int b[ 100 ], x[ 27 ]; 9

6.4 Examples Using Arrays Initializers int n[ 5 ] = { 1, 2, 3, 4, 5 }; If not enough initializers, rightmost elements become 0 int n[ 5 ] = { 0 } All elements 0 If too many a syntax error is produced syntax error C arrays have no bounds checking If size omitted, initializers determine it int n[ ] = { 1, 2, 3, 4, 5 }; 5 initializers, therefore 5 element array 10

/* Fig. 6.3: fig06_03.c initializing an array */ #include <stdio.h> /* function main begins program execution */ int main() { int n[ 10 ]; /* n is an array of 10 integers */ int i; /* counter */ /* initialize elements of array n to 0 */ for ( i = 0; i < 10; i++ ) { n[ i ] = 0; /* set element at location i to 0 */ } /* end for */ printf( "%s%13s\n", "Element", "Value" ); /* output contents of array n in tabular format */ for ( i = 0; i < 10; i++ ) { printf( "%7d%13d\n", i, n[ i ] ); } /* end for */ return 0; /* indicates successful termination */ } /* end main */ 11

Element Value 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 12

6.4 Examples Using Arrays Character arrays String first is really a static array of characters Character arrays can be initialized using string literals char string1[] = "first"; Null character '\0' terminates strings string1 actually has 6 elements It is equivalent to char string1[] = { 'f', 'i', 'r', 's', 't', '\0' }; Can access individual characters string1[ 3 ] is character s Array name is address of array, so & not needed for scanf scanf( "%s", string2 ); Reads characters until whitespace encountered Can write beyond end of array, be careful 13

/* Fig. 6.4: fig06_04.c initializing an array with a initializer list */ #include <stdio.h> /* function main begins program execution */ int main() { /* use initializer list to initialize array n */ int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 }; int i; /* counter */ printf( "%s%13s\n", "Element", "Value" ); /* output contents of array n in tabular format */ for ( i = 0; i < 10; i++ ) { printf( "%7d%13d\n", i, n[ i ] ); } /* end for */ return 0; /* indicates successful termination */ } /* end main */ 14

Element Value 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37 15

/* Fig. 6.5: fig06_05.c Initialize the elements of array s to the even integers from 2 to 20 */ #include <stdio.h> #define SIZE 10 /* function main begins program execution */ int main() { /* symbolic constant SIZE can be used to specify array size */ int s[size ]; /* array s has 10 elements */ int j; /* counter */ for ( j = 0; j < SIZE; j++ ) { /* set the values */ s[ j ] = 2 + 2 * j; } /* end for */ printf( "%s%13s\n", "Element", "Value" ); /* output contents of array n in tabular format */ for ( j = 0; j < SIZE; j++ ) { printf( "%7d%13d\n", j, s[ j ] ); } /* end for */ return 0; /* indicates successful termination */ } /* end main */ 16

Element Value 0 2 1 4 2 6 3 8 4 10 5 12 6 14 7 16 8 18 9 20 17

/* Fig. 6.6: fig06_06.c Compute the sum of the elements of the array */ #include <stdio.h> #define SIZE 12 /* function main begins program execution */ int main() { /* use initializer list to initialize array */ int a[ SIZE ] = { 1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45 }; int i; /* counter */ int total = 0; /* sum of array */ /* sum contents of array a */ for (i = 0; i < SIZE; i++ ) { total += a[ i ]; } /* end for */ printf( "Total of array element values is %d\n", total ); return 0; /* indicates successful termination */ } /* end main */ Total of array element values is 383 18

/* Fig. 6.7: fig06_07.c Student poll program */ #include <stdio.h> #define RESPONSE_SIZE 40 /* define array sizes */ #define FREQUENCY_SIZE 11 /* function main begins program execution */ int main() { int answer; /* counter to loop through 40 responses */ int rating; /* counter to loop through frequencies 1-10 */ /* initialize frequency counters to 0 */ int frequency[ FREQUENCY_SIZE ] = { 0 }; /* place the survey responses in the responses array */ int responses[ RESPONSE_SIZE ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 }; /* for each answer, select value of an element of array responses and use that value as subscript in array frequency to determine element to increment */ for (answer = 0; answer < RESPONSE_SIZE; answer++ ) { ++frequency[ responses [ answer ] ]; 19

} /* end for */ /* display results */ printf( "%s%17s\n", "Rating", "Frequency" ); /* output the frequencies in a tabular format */ for ( rating = 1; rating < FREQUENCY_SIZE; rating++ ) { printf( "%6d%17d\n", rating, frequency[ rating ] ); } /* end for */ return 0; /* indicates successful termination */ } /* end main */ Rating Frequency 1 2 2 2 3 2 4 2 5 5 6 11 7 5 8 7 9 1 10 3 20

/* Fig. 6.8: fig06_08.c Histogram printing program */ #include <stdio.h> #define SIZE 10 /* function main begins program execution */ int main() { /* use initializer list to initialize array n */ int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; int i; /* outer for counter for array elements */ int j; /* inner for counter counts *s in each histogram bar */ printf( "%s%13s%17s\n", "Element", "Value", "Histogram" ); /* for each element of array n, output a bar of the histogram */ for ( i = 0; i < SIZE; i++ ) { printf( "%7d%13d ", i, n[ i ]) ; for ( j = 1; j <= n[ i ]; j++ ) { /* print one bar */ printf( "%c", * ); } /* end inner for */ 21

printf( "\n" ); /* end a histogram bar */ } /* end outer for */ return 0; /* indicates successful termination */ } /* end main */ Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * 22

/* Fig. 6.9: fig06_09.c Roll a six-sided die 6000 times */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE 7 /* function main begins program execution */ int main() { int face; /* random die value 1-6 */ int roll; /* roll counter */ int frequency [ SIZE ] = { 0 }; /* clear counts */ srand( time( NULL ) ); /* seed random-number generator */ /* roll die 6000 times */ for ( roll = 1; roll <= 6000; roll++ ) { face = 1 + rand() % 6; ++frequency[ face ]; /* replaces 26-line switch of Fig. 5.8 */ } /* end for */ printf( "%s%17s\n", "Face", "Frequency" ); 23

/* output frequency elements 1-6 in tabular format */ for ( face = 1; face < SIZE; face++ ) { printf( "%4d%17d\n", face, frequency[ face ] ); } /* end for */ return 0; /* indicates successful termination */ } /* end main */ Face Frequency 1 1029 2 951 3 987 4 1033 5 1010 6 990 24

/* Fig. 6.10: fig06_10.c Treating character arrays as strings */ #include <stdio.h> /* function main begins program execution */ int main() { char string1[ 20 ]; /* reserves 20 characters */ char string2[] = "string literal"; /* reserves 15 characters */ int i; /* counter */ /* read string from user into array string1 */ printf( "Enter a string: " ); scanf( "%s", string1 ); /* input ended by whitespace character */ /* output strings */ printf( "string1 is: %s\nstring2 is: %s\n" "string1 with spaces between characters is:\n", string1, string2 ); /* output characters until null character is reached */ for ( i = 0; string1[ i ]!= '\0'; i++ ) { printf( "%c ", string1[ i ] ); } /* end for */ 25

printf( "\n" ); return 0; /* indicates successful termination */ } /* end main */ Enter a string: Hello there string1 is: Hello string2 is: string literal string1 with spaces between characters is: H e l l o 26

/* Fig. 6.11: fig06_11.c Static arrays are initialized to zero */ #include <stdio.h> void staticarrayinit( void ); /* function prototype */ void automaticarrayinit( void ); /* function prototype */ /* function main begins program execution */ int main() { printf( "First call to each function:\n" ); staticarrayinit(); automaticarrayinit(); printf( "\n\nsecond call to each function:\n" ); staticarrayinit(); automaticarrayinit(); return 0; /* indicates successful termination */ } /* end main */ 27

/* function to demonstrate a static local array */ void staticarrayinit( void ) { /* initializes elements to 0 first time function is called */ static int array1[ 3 ]={0}; int i; /* counter */ printf( "\nvalues on entering staticarrayinit:\n" ); /* output contents of array1 */ for ( i = 0; i <= 2; i++ ) { printf( "array1[ %d ] = %d ", i, array1[ i ] ); } /* end for */ printf( "\nvalues on exiting staticarrayinit:\n" ); /* modify and output contents of array1 */ for ( i = 0; i <= 2; i++ ) { printf( "array1[ %d ] = %d ", i, array1[ i ] += 5 ); } /* end for */ } /* end function staticarrayinit */ 28

/* function to demonstrate an automatic local array */ void automaticarrayinit ( void ) { /* initializes elements each time function is called */ int array2[ 3 ] = { 1, 2, 3 }; int i; /* counter */ printf( "\n\nvalues on entering automaticarrayinit:\n ); /* output contents of array2 */ for ( i = 0; i <= 2; i++ ) { printf( "array2[ %d ] = %d ", i, array2[ i ] ); } /* end for */ printf("\nvalues on exiting automaticarrayinit:\n" ); /* modify and output contents of array2 */ for ( i = 0; i <= 2; i++ ) { printf( "array2[ %d ] = %d ", i, array2[ i ] += 5 ); } /* end for */ } /* end function automaticarrayinit */ 29

First call to each function: Values on entering staticarrayinit: array1[ 0 ] = 0 array1[ 1 ] = 0 array1[ 2 ] = 0 Values on exiting staticarrayinit: array1[ 0 ] = 5 array1[ 1 ] = 5 array1[ 2 ] = 5 Values on entering automaticarrayinit: array2[ 0 ] = 1 array2[ 1 ] = 2 array2[ 2 ] = 3 Values on exiting automaticarrayinit: array2[ 0 ] = 6 array2[ 1 ] = 7 array2[ 2 ] = 8 Second call to each function: Values on entering staticarrayinit: array1[ 0 ] = 5 array1[ 1 ] = 5 array1[ 2 ] = 5 Values on exiting staticarrayinit: array1[ 0 ] = 10 array1[ 1 ] = 10 array1[ 2 ] = 10 Values on entering automaticarrayinit: array2[ 0 ] = 1 array2[ 1 ] = 2 array2[ 2 ] = 3 Values on exiting automaticarrayinit: array2[ 0 ] = 6 array2[ 1 ] = 7 array2[ 2 ] = 8 30

6.5 Passing Arrays to Functions Passing arrays To pass an array argument to a function, specify the name of the array without any brackets int myarray[ 24 ]; myfunction( myarray, 24 ); Array size usually passed to function Arrays passed call-by-reference Name of array is address of first element Function knows where the array is stored Modifies original memory locations Passing array elements Passed by call-by-value Pass subscripted name (i.e., myarray[ 3 ]) to function 31

6.5 Passing Arrays to Functions Function prototype void modifyarray( int b[], int arraysize ); Parameter names optional in prototype int b[] could be written int [] int arraysize could be simply int 32

/* Fig. 6.12: fig06_12.c The name of an array is the same as &array[ 0 ] */ #include <stdio.h> /* function main begins program execution */ int main() { char array[ 5 ]; /* define an array of size 5 */ printf( " array = %p\n&array[0] = %p\n" " &array = %p\n", array, &array[ 0 ], &array ); return 0; /* indicates successful termination */ } /* end main */ array = 0012FF78 &array[0] = 0012FF78 &array = 0012FF78 33

/* Fig. 6.13: fig06_13.c Passing arrays and individual array elements to functions */ #include <stdio.h> #define SIZE 5 /* function prototypes */ void modifyarray( int b[ ], int size ); void modifyelement( int e ); /* function main begins program execution */ int main() { int a[ SIZE ] = { 0, 1, 2, 3, 4 }; /* initialize a */ int i; /* counter */ printf( "Effects of passing entire array by reference:\n\nthe " "values of the original array are:\n" ); /* output original array */ for ( i = 0; i < SIZE; i++ ) { printf( "%3d", a[ i ] ); } /* end for */ printf( "\n" ); 34

/* pass array a to modifyarray by reference */ modifyarray( a, SIZE ); printf( "The values of the modified array are:\n" ); /* output modified array */ for ( i = 0; i < SIZE; i++ ) { printf( "%3d", a[ i ] ); } /* end for */ /* output value of a[ 3 ] */ printf( "\n\n\neffects of passing array element " "by value:\n\nthe value of a[3] is %d\n", a[ 3 ] ); modifyelement( a[ 3 ] ); /* pass array element a[ 3 ] by value */ /* output value of a[ 3 ] */ printf( "The value of a[ 3 ] is %d\n", a[ 3 ] ); return 0; /* indicates successful termination */ } /* end main */ 35

/* in function modifyarray, "b" points to the original array "a" in memory */ void modifyarray( int b[ ], int size ) { int j; /* counter */ /* multiply each array element by 2 */ for ( j = 0; j < size; j++ ) { b[ j ] *= 2; } /* end for */ } /* end function modifyarray */ /* in function modifyelement, "e" is a local copy of array element a[ 3 ] passed from main */ void modifyelement( int e ) { /* multiply parameter by 2 */ printf( "Value in modifyelement is %d\n", e *= 2 ); } /* end function modifyelement */ 36

Effects of passing entire array by reference: The values of the original array are: 0 1 2 3 4 The values of the modified array are: 0 2 4 6 8 Effects of passing array element by value: The value of a[3] is 6 Value in modifyelement is 12 The value of a[ 3 ] is 6 37

/* Fig. 6.14: fig06_14.c Demonstrating the const type qualifier with arrays */ #include <stdio.h> void trytomodifyarray( const int b[ ] ); /* function prototype */ /* function main begins program execution */ int main() { int a[ ] = { 10, 20, 30 }; /* initialize a */ trytomodifyarray( a ); printf("%d %d %d\n", a[ 0 ], a[ 1 ], a[ 2 ] ); return 0; /* indicates successful termination */ } /* end main */ 38

/* in function trytomodifyarray, array b is const, so it cannot be used to modify the original array a in main. */ void trytomodifyarray( const int b[ ] ) { b[ 0 ] /= 2; /* error */ b[ 1 ] /= 2; /* error */ b[ 2 ] /= 2; /* error */ } /* end function trytomodifyarray */ Compiling... FIG06_14.C fig06_14.c(24) : error C2166: l-value specifies const object fig06_14.c(25) : error C2166: l-value specifies const object fig06_14.c(26) : error C2166: l-value specifies const object 39

Class Practice * X, X. -1. 2 ( X )., :, ( -1): : X ( -1): 3 * * * * * * * * * X ( -1): 0, ( -1): 2 * * * * * X ( -1): 0, ( -1): -1 40