Top Banner
BIM313 – Advanced Programming Techniques Strings and Functions 1
66
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: BIM313 – Advanced Programming Techniques Strings and Functions 1.

BIM313 – Advanced Programming Techniques

Strings and Functions

1

Page 2: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Contents

• More on Variables– Type Conversions– Enumerations– Structs– Arrays– String Operations

• Functions and Delegates

2

Page 3: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Type Conversion

• Examples– string to int or int to string– double to int (rounding operations)

• Implicit Conversions– No data loss– Trust in the compiler

• Explicit Conversions– Data may be lost– Approve the compiler

3

Page 4: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Implicit Conversions

• Implicit conversion requires no work on your part and no additional code.

• ushort and char types are effectively interchangeable, because both store a number between 0 and 65535.

4

Page 5: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Implicit Conversion Example

char ch = ‘a’;ushort num;num = ch;Console.WriteLine(“ch = {0}, num = {1}”, ch, num);

5

ch = a, num = 97

Page 6: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Implicit Type ConversionsType Can Safely Be Converted Tochar ushort, int, uint, long, ulong, float, double, decimalbyte short, ushort, int, uint, long, ulong, float, double, decimalsbyte short, int, long, float, double, decimalshort int, long, float, double, decimalushort int, uint, long, ulong, float, double, decimalint long, float, double, decimaluint long, ulong, float, double, decimallong float, double, decimalulong float, double, decimalfloat doubledouble -decimal -

6

Page 7: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Explicit Conversions

• Wide types can’t be converted to narrow types (e.g. conversion from short to byte)

• In such cases, compiler gives error:– Cannot implicitly convert type ‘short’ to ‘byte’. An explicit conversion

exists (are you missing a cast?)

• If you are sure that you really want to make the conversion, use the explicit conversion:– OK, I know you’ve warned me about doing this, but I’ll take

responsibility for what happens.

7

Page 8: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Example

byte b;short s = 7;b = s;Console.WriteLine(“b = {0}, s = {1}”, b, s);

8

Cannot implicitly convert type ‘short’ to ‘byte’. An explicit conversion exists(are you missing a cast?)

Page 9: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Solution

byte b;short s = 7;b = (byte) s;Console.WriteLine(“b = {0}, s = {1}”, b, s);

9

b = 7, s = 7

Page 10: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Range Problem

byte b;short s = 281;b = (byte) s;Console.WriteLine(“b = {0}, s = {1}”, b, s);

10

b = 25, s = 281

281 doesn’t fit into the byte range!

Amount of overflow from 256!

Page 11: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Explicit Conversions by “Convert”

• Another method to make explicit conversion is using the “Convert” methods:– int i = Convert.ToInt32(val)– float f = Convert.ToSingle(val)– double d = Convert.ToDouble(val)– string s = Convert.ToString(val)

• Here, val can be most types of variable.

11

Page 12: BIM313 – Advanced Programming Techniques Strings and Functions 1.

A Note on Explicit Conversions

• If the explicit conversion is impossible, then your program is not compiled.– string s = “12.34”;– double d = (double)s;

• If the explicit conversion is possible but an error occurs in runtime, then an Exception occurs (i.e. your program crashes )– string s = “abcd”;– double d = Convert.ToDouble(s);

12

Page 13: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Complex Variable Types

• Enumerations (enum)• Structures (struct)• Arrays

13

Page 14: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Enumerations (enum)

• The type double is used to store fractional numbers• bool type is used to store true or false• In real life, there are other existences:– Orientation: North, South, East, West– Week Days: Monday, Tuesday, Wednesday, Thursday,

Friday, Saturday, Sunday– Months: January, February, …, December

• These types can be implemented by enumerations in C#.

14

Page 15: BIM313 – Advanced Programming Techniques Strings and Functions 1.

enum Syntax

• Definition:enum <typeName>{ <value1>, <value2>, … <valueN>}

15

Page 16: BIM313 – Advanced Programming Techniques Strings and Functions 1.

enum Syntax

• Declaring variables:<typeName> <varName>;

• Assigning values:<varName> = <typeName>.<value>;

16

Page 17: BIM313 – Advanced Programming Techniques Strings and Functions 1.

enum Examplenamespace Ch05Ex02 { enum Orientation { North, South, East, West } class Program { static void Main(string[] args) { Orientation myDirection = Orientation.North; Console.WriteLine("myDirection = {0}", myDirection); } }}

17

Page 18: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Advanced Topics on enum (1)

• Each values in an enumeration are stored as integers, starting from 0 and incremented by 1– Console.WriteLine("{0} = {1}, {2} = {3}",

Orientation.North, (int)Orientation.North, Orientation.South, (int)Orientation.South);

18

North = 0, South = 1

Page 19: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Advanced Topics on enum (2)

• You can change underlying integer values of some enumerations

• Unspecified values are automatically generated by incrementing last valueenum Orientation {North=1, South, East=4, West=8}

19

North = 1, South = 2,East = 4, West = 8

Page 20: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Advanced Topics on enum (3)

• You can change the underlying type from the default type (int) to byte, short, and long (and their signed and unsigned versions)enum Orientation : byte {North, South, East, West}Console.WriteLine((byte)Orientation.North)

20

Page 21: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Structs

• Structs are data structures that are composed of several pieces of data, possibly of different types.– Student records (name, age, birth year, etc.)– Route (orientation, distance, etc.)

21

Page 22: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Defining Structs

struct <structName>{ <accessibility1> <type1> <name1>; <accessibility2> <type2> <name2>; …}

22

Page 23: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Example

struct Route{ public Orientation Direction; public double Distance;}

23

Page 24: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Declaring a struct variable

Syntax:<structName> <varName>;

Example:Route myRoute;myRoute.Orientation = Orientation.North;myRoute.Distance = 2.5;

24

Page 25: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Exampleroute myRoute;int myDirection = -1;double myDistance;Console.WriteLine("1) North\n2) South\n3) East\n4) West");do{ Console.WriteLine("Select a direction:"); myDirection = Convert.ToInt32(Console.ReadLine());} while (myDirection < 1 || myDirection > 4);Console.WriteLine("Input a distance:");myDistance = Convert.ToDouble(Console.ReadLine());myRoute.direction = (orientation)myDirection;myRoute.distance = myDistance;Console.WriteLine("myRoute specifies a direction of {0} and a " +"distance of {1}", myRoute.direction, myRoute.distance);

25

Page 26: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Arrays

• Use arrays to store large number of data of same type– int grade1, grade2, grade3, …;– int[] grades;

• Arrays make some operations simple– Think of the case where you want to initialize all

values to zero.

26

Page 27: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Declaring Arrays

• Syntax:<type>[] <name>;

• Example:– int[] myIntArray;– string[] myStringArray;

• In this declaration, only a reference without any elements is created

27

Page 28: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Initialization

• int[] arr = new int[5];– an array of 5 elements with default values (0 for

numbers)• int[] arr = {5, 9, 10, 2, 99};– an array of 5 elements with initial values

• int[] arr = new int[5] {5, 9, 10, 2, 99};– an array of 5 elements with initial values

• int[] arr = new int[10] {5, 9, 10, 2, 99};– an array of 10 elements but only first five of them are

initialized (the rest are initialized to the default value)28

Page 29: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Accessing Array Elements

arr[5] = 10;– 10 is assigned to the 6th element of the array– Indexing starts from 0 (not 1)

int num = arr[5];– 6th element of the array is assigned to a variable

for (int i = 0; i < arr.Length; i++){ Console.WriteLine(arr[i]);}– All array elements are displayed on the screen.

29

Page 30: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Example

string[] friendNames = { "Robert Barwell", "Mike Parry", "Jeremy Beacock" };Console.WriteLine("Here are {0} of my friends:",friendNames.Length);for (int i = 0; i < friendNames.Length; i++){ Console.WriteLine(friendNames[i]);}

30

Page 31: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Same example with foreach

string[] friendNames = { "Robert Barwell", "Mike Parry", "Jeremy Beacock" };Console.WriteLine("Here are {0} of my friends:",friendNames.Length);foreach (string friendName in friendNames){ Console.WriteLine(friendName);}

31

Page 32: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Multidimensional Arrays

• int[,] mat = new int[5, 8];– Access as mat[i, j]

• int[,,] cube = new int[3, 5, 8];• int[,] mat = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};– Two-dimensional array of size 3x4 (3 rows, 4

columns)

32

Page 33: BIM313 – Advanced Programming Techniques Strings and Functions 1.

String Operations (1)

• Concatenation– str = str1 + str2;

• Accessing a char at specified location– char ch = str[3]; // 4th element is assigned to ch

• Getting the length– int size = str.Length;

• Getting all chars into a char array– char[] chars = str.ToCharArray();

33

Page 34: BIM313 – Advanced Programming Techniques Strings and Functions 1.

String Operations (2)

• Changing to upper or lower cases– str2 = str1.ToUpper();– str2 = str1.ToLower();• These methods doesn’t change str1!• If you want to change str1 itself, use this:

– str1 = str1.ToLower();

• Remove white spaces (space, tab, new line) at the beginning and at the end:– str2 = str1.Trim();

34

Page 35: BIM313 – Advanced Programming Techniques Strings and Functions 1.

String Operations (3)

• Remove white spaces only at the beginning:– str2 = str1.TrimStart();

• Remove white spaces only at the end:– str2 = str1.TrimEnd();

• Substrings:– string str1 = “advanced”;– string str2 = str1.SubString(2, 3); // “van”– str2 = str1.SubString(2); // “vanced”

35

Page 36: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Split()

• You can split a string using the Split() method• The Split() method returns a string array• It takes separator chars as a char array• If no parameters are supplied, it splits the string

according to the white spacesstring str = “This is a pencil”;string[] arr = str.Split();foreach (string s in arr){ Console.WriteLine(s);}

36

Thisisapencil

Page 37: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Using separators in Split()

string str = “1,2,3,4,5”;char[] separator = {‘,’};string[] arr = str.Split(separator);foreach (string s in arr){ Console.WriteLine(s);}

37

12345

Page 38: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Other String Operations

• Examine the following string methods by yourself:– CompareTo, Equals– Contains– StartsWith, EndsWith– IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny– PadLeft, PadRight– Remove– Replace

38

Page 39: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Functions

• Some tasks may need to be performed at several points in a program– e.g. finding the highest number in an array

• Solution: Write the code in a function and call it several times

• In object-oriented programming languages, functions of objects are named as methods

39

Page 40: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Function Exampleclass Program{ static void DrawBorder() { Console.WriteLine(“+--------+”); } static void Main(string[] args) { DrawBorder(); Console.WriteLine(“| Hello! |”); DrawBorder(); }}

40

+--------+| Hello! |+--------+

Don’t forget to use the word ‘static’!

Page 41: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Functions that return a value

static int ReadAge(){ Console.Write(“Enter your age: ”); int age = int.Parse(Console.ReadLine()); if (age < 1) return 1; else if (age > 120) return 120; else return age;}

41

Page 42: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Functions that take parameters

static double Product(double a, double b){ return a * b;}

42

Page 43: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Functions that take array as parameter

class Program { static int MaxValue(int[] intArray) { int maxVal = intArray[0]; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) maxVal = intArray[i]; } return maxVal; } static void Main(string[] args) { int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int maxVal = MaxValue(myArray); Console.WriteLine("The maximum value in myArray is {0}", maxVal); }}

43

Page 44: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Parameter Arrays

• If your function may take variable amount of parameters, then you can use the parameter arrays– Think of Console.WriteLine(format, params)– You can use any amount of parameters after the format

string• Parameter arrays can be declared with the

keyword params• Parameter array should be the last parameter in

the parameter list of the function44

Page 45: BIM313 – Advanced Programming Techniques Strings and Functions 1.

params Exampleclass Program { static int SumVals(params int[] vals) { int sum = 0; foreach (int val in vals) { sum += val; } return sum; } static void Main(string[] args) { int sum = SumVals(1, 5, 2, 9, 8); Console.WriteLine("Summed Values = {0}", sum); }}

45

Page 46: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Call By Value and Call By Reference

• If you change a value-type parameter in the function, it doesn’t affect the value in the main function– because, only the value is transferred

• However, if you change a reference-type parameter’s elements, then the argument in the main function is also changed– because the object itself is transferred

• You can think arrays as reference-types46

Page 47: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Call By Value

static void ShowDouble(int val) { val *= 2; Console.WriteLine(“val doubled = {0}”, val);}static void Main(string[] args){ int myNumber = 5; ShowDouble(myNumber); Console.WriteLine(“myNumber in main: ” + myNumber);}

47

val doubled = 10myNumber in main: 5

Page 48: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Call By Reference

static void ChangeFirst(int[] arr){ arr[0] = 99;}static void Main(string[] args){ int[] myArr = {1, 2, 3, 4, 5}; DisplayArray(myArr); ChangeFirst(myArr); DisplayArray(myArr);}

48

1 2 3 4 599 2 3 4 5

Page 49: BIM313 – Advanced Programming Techniques Strings and Functions 1.

ref and out

• You can change the value of argument in the Main function via a function using the ref keyword

• You can declare a parameter as the output of a function with the out keyword– out parameters does not have to be initialized

before the function call (their values are set by the function)

49

Page 50: BIM313 – Advanced Programming Techniques Strings and Functions 1.

ref Example

static void ShowDouble(ref int val) { val *= 2; Console.WriteLine(“val doubled = {0}”, val);}static void Main(string[] args){ int myNumber = 5; ShowDouble(ref myNumber); Console.WriteLine(“myNumber in main: ” + myNumber);}

50

val doubled = 10myNumber in main: 10

Page 51: BIM313 – Advanced Programming Techniques Strings and Functions 1.

out Examplestatic void FindAvgAndSum(int[] arr, out double avg, out int sum) { sum = 0; foreach (int num in arr) { sum += num; } avg = (double) sum / arr.Lenght;}static void Main(string[] args) { int sum; double avg; int[] myArray = {3, 4 , 8, 2, 7}; FindAvgAndSum(myArray, out avg, out sum);}

51

Page 52: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Another Example for outstatic int MaxValue(int[] intArray, out int maxIndex){ int maxVal = intArray[0]; maxIndex = 0; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) { maxVal = intArray[i]; maxIndex = i; } } return maxVal;}

52

Page 53: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Variable Scope

• Variables in a functions are not accessible by other functions– they are called local variables

• The variables declared in the class definition are accessible by all functions in the class– they are called global variables– they should be static so that static functions can access

them• Variables declared in a block (for, while, {}, etc.) are

only accessible in that block53

Page 54: BIM313 – Advanced Programming Techniques Strings and Functions 1.

The Main Function

• The Main function is the entry point in a C# program

• It takes a string array parameter, whose elements are called command-line parameters

• The following declarations of Main are all valid:– static void Main()– static void Main(string[] args)– static int Main()– static int Main(string[] args)

54

Page 55: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Command-Line Parameters

class Program{ static void Main(string[] args) { Console.WriteLine("{0} command line arguments were specified:", args.Length); foreach (string arg in args) { Console.WriteLine(arg); } }}

55

Page 56: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Specifying Command-Line Arguments in Visual Studio

• Right-click on the project name in the Solution Explorer window and select Properties

• Select the Debug pane• Write command-line arguments into the box• Run the application

56

Page 57: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Specifying Command-Line Arguments in Command Prompt• Open a command prompt• Go to the folder of the executable output of

the program• Write the name of the executable followed by

the command-line arguments– prog.exe 256 myfile.txt “a longer argument”

57

Page 58: BIM313 – Advanced Programming Techniques Strings and Functions 1.

struct Functions

struct CustomerName{ public string firstName, lastName; public string Name() { return firstName + " " + lastName; }}

58

Page 59: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Calling struct Function

CustomerName myCustomer;myCustomer.firstName = "John";myCustomer.lastName = "Franklin";Console.WriteLine(myCustomer.Name());

59

Page 60: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Overloading Functions

• A function may have several signatures– i.e. same function name but different parameters– e.g. Console.WriteLine()

• Intellisense feature of the Visual Studio helps us to select the correct function

60

Page 61: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Example 1

static int MaxValue(int[] intArray) {…}static double MaxValue(double[] doubleArray) {…}static void Main(string[] args) { int[] arr1 = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; double[] arr2 = { 0.1, 0.8, 0.3, 1.6, 0.2}; int maxVal1 = MaxValue(arr1); double maxVal2 = MaxValue(arr2);}

61

Page 62: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Example 2

static void func(ref int val) { … }static void func(int val) { … }

func(ref val);func(val);

62

Signatures are different, so

usage is valid!

The ref keyword differentiates the

functions!

Page 63: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Delegates

• References to functions– “Function Pointers” in C and C++

• Declaration: Specify a return type and parameter list

• Assignment: Convert function reference to a delegate

• Calling: Just use the delegate’s name

63

Page 64: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Delegate Example

delegate double MyDelegate(double num1, double num2);

static double Multiply(double param1, double param2) { return param1 * param2;}

static double Divide(double param1, double param2) { return param1 / param2;}

64

Declaration

Page 65: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Delegate Example (continued)

static void Main(string[] args){ MyDelegate process; double param1 = 5; double param2 = 3, process = new MyDelegate(Multiply); Console.WriteLine("Result: {0}", process(param1, param2)); process = new MyDelegate(Divide); Console.WriteLine("Result: {0}", process(param1, param2));}

65

Page 66: BIM313 – Advanced Programming Techniques Strings and Functions 1.

Easier Way

static void Main(string[] args){ MyDelegate process; double param1 = 5; double param2 = 3, process = Multiply; Console.WriteLine("Result: {0}", process(param1, param2)); process = Divide; Console.WriteLine("Result: {0}", process(param1, param2));}

66