Functions.

Slides:



Advertisements
Similar presentations
BBS514 Structured Programming (Yapısal Programlama)1 Functions and Structured Programming.
Advertisements

CMPE 150: Introduction to Computing Arrays. TT - Spring'08CMPE150: Introduction to Computing1 Motivation You may need to define many variables of the.
C Lecture Notes 1 Program Control (Cont...). C Lecture Notes 2 4.8The do / while Repetition Structure The do / while repetition structure –Similar to.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 5 - Functions Outline 5.1Introduction 5.2Program.
ספטמבר 04Copyright Meir Kalech1 C programming Language Chapter 3: Functions.
1 Introduction to Computers and Programming Quick Review What is a Function? A module of code that performs a specific job.
1 Lecture 6  Functions  C Standard Libraries  Invocation  Definition  Call-by-value  Prototype  Multi-file program  Macros  Readings: Chapter.
Chapter 6. 2 Objectives You should be able to describe: Function and Parameter Declarations Returning a Single Value Pass by Reference Variable Scope.
1 Functions and Structured Programming. 2 Structured Programming Structured programming is a problem-solving strategy and a programming methodology. –The.
Miscellaneous topicsCS-2301 B-term Miscellaneous Topics CS-2301, System Programming for Non-majors (Slides include materials from The C Programming.
FunctionsFunctions Systems Programming Concepts. Functions   Simple Function Example   Function Prototype and Declaration   Math Library Functions.
Functions in C. Function Terminology Identifier scope Function declaration, definition, and use Parameters and arguments Parameter order, number, and.
 Introduction Introduction  Types of Function Types of Function  Library function Library function  User defined function User defined function 
Computer Science 210 Computer Organization Introduction to C.
Chapter 4:Functions| SCP1103 Programming Technique C | Jumail, FSKSM, UTM, 2005 | Last Updated: September 2005 Slide 1 Functions Lecture 4 by Jumail Bin.
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
C Functions Programmer-defined functions – Functions written by the programmer to define specific tasks. Functions are invoked by a function call. The.
A First Book of C++: From Here To There, Third Edition2 Objectives You should be able to describe: Function and Parameter Declarations Returning a Single.
MAHENDRAN CHAPTER 6. Session Objectives Explain Type of Functions Discuss category of Functions Declaration & Prototypes Explain User Defined Functions.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. C How To Program - 4th edition Deitels Class 05 University.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 2.
Chapter 06 (Part I) Functions and an Introduction to Recursion.
C++ function call by value The call by value method of passing arguments to a function copies the actual value of an argument into the formal parameter.
Chapter 6: User-Defined Functions
CSCI 130 Chapter 5 Functions. Functions are named uniquely Performs a specific task Is independent –should not interfere with other parts of program May.
C Programming Lecture 8-2 : Function (advanced). Recursive Function (recursion) A function that calls itself (in its definition) Classic example : factorial.
CMPE 150: Introduction to Computing Functions. A function groups a set of related statements under a single title. You can "call" the function using its.
Functions Top-down design Breaking a complex problem into smaller parts that we can understand is a common practice. The process of subdividing a problem.
C Functions Three major differences between C and Java functions: –Functions are stand-alone entities, not part of objects they can be defined in a file.
C++ Programming Lecture 9 Functions – Part I By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department.
Function. Outline Intro. Functions Examples of Functions Prototypes of a Functions Local and Global Variables.
Lecture 05 Functions II, Storage Class, Scope, rand() METU Dept. of Computer Eng. Summer 2002 Ceng230 - Section 01 Introduction To C Programming by Ahmet.
#include using namespace std; // Declare a function. void check(int, double, double); int main() { check(1, 2.3, 4.56); check(7, 8.9, 10.11); } void check(int.
Functions A function groups a set of related statements under a single title. You can "call" the function using its name. You may also provide parameters.
Functions Math library functions Function definition Function invocation Argument passing Scope of an variable Programming 1 DCT 1033.
Functions. Why use functions? They can break your problem down into smaller sub-tasks (modularity).  easier to solve complex problems They make a program.
Functions Structured Programming. Topics to be covered Introduction to Functions Defining a function Calling a function Arguments, local variables and.
Building Programs from Existing Information Solutions for programs often can be developed from previously solved problems. Data requirements and solution.
BIL 104E Introduction to Scientific and Engineering Computing Lecture 4.
Recursion CSE 2320 – Algorithms and Data Structures
User-Written Functions
ESC101: Introduction to Computing
Computer Science 210 Computer Organization
Lesson #6 Modular Programming and Functions.
INC 161 , CPE 100 Computer Programming
Lesson #6 Modular Programming and Functions.
Functions and Structured Programming
Principles of programming languages 4: Parameter passing, Scope rules
CS1010 Programming Methodology
Week 4 – Repetition Structures / Loops
Functions Department of Computer Science-BGU יום רביעי 12 ספטמבר 2018.
Recursion CSE 2320 – Algorithms and Data Structures
Programmazione I a.a. 2017/2018.
©2016 Pearson Education, Inc., Hoboken, NJ. All rights reserved.
User-Defined Functions
Formatted and Unformatted Input/Output Functions
Chapter 5 - Functions Outline 5.1 Introduction
Lesson #6 Modular Programming and Functions.
Looping.
Arrays.
A function with one argument
C Storage classes.
Simulating Reference Parameters in C
Lesson #6 Modular Programming and Functions.
Function.
In C Programming Language
Functions Department of Computer Science-BGU יום שישי 26 אפריל 2019.
ETE 132 Lecture 6 By Munirul Haque.
Function.
Presentation transcript:

Functions

CMPE 150 – Introduction to Computing Functions A function groups a set of related statements under a single title. You can "call" the function using its name. You may also provide parameters to the function during the call. A function performs the actions defined by its statements and returns a result. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Motivation Programming-in-the-large is feasible using functions: Divide and conquer. Easier to develop Easier to read and understand Easier to maintain Easier to reuse Provides abstraction You can call a function several times (instead of repeating the same group of statements over and over). You may also provide different parameters to the function during each call. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Functions Syntax: return_type function_name (parameter_list) { local_variable_definitions statement(s) } Functions operate on their parameters and produce results. The result is returned via the return value. The parameters may or may not be altered by the function. If return_type is missing, it means int. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example Consider the polynomial P(x)=8x5+5x4+6x3+3x2+4x+2 Read a value for x and display the result. CMPE 150 – Introduction to Computing

Example: Solution without functions #include <stdio.h> int main() { float P_x, x, t; int i; P_x=0; scanf("%f", &x); /* Calculate term x^5 */ for (t=1, i=0; i<5; i++) t *= x; P_x += 8*t; /* Calculate term x^4 */ for (t=1, i=0; i<4; i++) P_x += 5*t; /* Calculate term x^3 */ for (t=1, i=0; i<3; i++) P_x += 6*t; /* Calculate term x^2 */ for (t=1, i=0; i<2; i++) P_x += 3*t; /* Calculate term x^1 and x^0 */ P_x += 4*x+2; printf("Result=%f\n", P_x); return 0; } CMPE 150 – Introduction to Computing

Example: Solution with functions #include <stdio.h> /* Calculate a^b */ float power(float a, int b) { float result=1; int i; for (i=0; i<b; i++) result *= a; return result; } int main() float P_x, x; scanf("%f", &x); P_x = 8 * power(x,5) + 5 * power(x,4) + 6 * power(x,3) + 3 * power(x,2) + 4 * x + 2; printf("Result=%f\n", P_x); return 0; We will visit this example again. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Functions A function that is being called is named callee. The function from which the call is made is named caller. In the previous slide, main() is the caller, power() is the callee. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Functions We will cover functions in the following order: Void functions Functions without parameters Functions with parameters Functions that return a value Functions that alter their parameters CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Void functions A function that is not supposed to return a value has a return type of void. Note that skipping the return type makes it an integer function, not a void function. If callee has nothing to send back to the caller, make callee a void function. CMPE 150 – Introduction to Computing

Example: Void functions #include <stdio.h> void isosceles_triangle(){ int line, i, j; scanf("%d", &line); for (i = 1; i<=line; i++){ for (j = 0; j<line - i; j++) printf(" "); for (j = 0; j<i*2-1; j++) printf("*"); printf("\n"); } int main(){ int i, n; scanf("%d", &n); for (i=0; i<n; i++) isosceles_triangle(); return 0; Note that isosceles_triangle() makes I/O, but it does not take any parameters or return any value. CMPE 150 – Introduction to Computing

Functions with parameters You can direct how a function operates "within the program" if you use parameters. CMPE 150 – Introduction to Computing

Example: power() function without parameters float power() { float result=1, a ; int b; scanf("%f %d",&a,&b); for (; b>0; b--) result *= a; return result; } power() finds result based on the values read from the input. You cannot specify a and b from the main() function. CMPE 150 – Introduction to Computing

Example: power() function with parameters float power(float a, int b) { float result=1; for (; b>0; b--) result *= a; return result; } Now, power() finds result based on the parameters specified by the caller. So, you can direct it within the program CMPE 150 – Introduction to Computing

Changes in parameters are not reflected Note that in the previous example, the changes made on the parameters are not reflected to the caller. This rule applies as long as you use value parameters. CMPE 150 – Introduction to Computing

Changes in parameters are not reflected #include <stdio.h> void f(int a) { a+=5; printf("in function f(): a=%d\n", a); } int main() { int a=10; printf("in main(), before calling f(): a=%d\n",a); f(a); printf("in main(), after calling f(): a=%d\n",a); Stack f() a 10 15 OUTPUT main() a 10 in main(), before calling f(): a=10 in function f(): a=15 in main(), after calling f(): a=10 CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Return value A function performs a task and finds a result. The result replaces the function call. Eg: For the function call below y = 3*power(2,5)+4; the function power() calculates 25 and the function call is replaced by 32. So the statement becomes y = 3*32+4; CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Return value Note that the return value has got nothing to do with input/output. Eg: int func() { int i=10; printf("%d", i); return i/2; } int main() { int n; n = func(); printf("%d", n); return 0; func() outputs 10, but returns 5. CMPE 150 – Introduction to Computing

Example: Functions with return type and parameters #include <stdio.h> /* Calculate a^b */ float power(float a, int b) { float result=1; for (; b>0; b--) result *= a; return result; } int main() float P_x, x; scanf("%f", &x); P_x = 8 * power(x,5) + 5 * power(x,4) + 6 * power(x,3) + 3 * power(x,2) + 4 * x + 2; printf("Result=%f\n", P_x); return 0; CMPE 150 – Introduction to Computing

Example: Functions with return type and parameters What is the output of the following program? #include <stdio.h> float half(int a) { return a/2; } int main() { float r; r=half(10)/3; printf("Result=%f", r); CMPE 150 – Introduction to Computing

Global vs. local variables #include <stdio.h> #define PI 3.14 int count; int func() { int i, j; scanf("%d %d", &i, &j); count += i+j; return 0; } int main() int i; func(); for (i=0; i<count; i++) printf("%d",i); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 20

CMPE 150 – Introduction to Computing Scope of variables A local variable can be used only in the function where it is defined i.e., the scope of a local variable is the current function. A global variable can be used in all functions below its definition i.e., the scope of a global variable is the range from the variable definition to the end of the file. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Lifetime of variables The lifetime of a variable depends on its scope. A local variable is alive as long as the function where it is defined is active. When the function terminates, all of the local variables (and their values) are lost. When the function is called again, all variables start from scratch; they don’t continue with their values from the previous call (except for local static variables which are not discussed). The lifetime of a global variable is equivalent to the lifetime of the program. CMPE 150 – Introduction to Computing

Scope and lifetime of variables #include <stdio.h> #define PI 3.14 int count; int func() { int i, j; scanf("%d %d", &i, &j); count += i+j; return 0; } int main() int i; func(); for (i=0; i<count; i++) printf("%d",i); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 23

Global vs. local variables Global variables Local variables Visible in all functions Visible only within the function they are defined Zero by default Uninitialized A change made by a function is visible everywhere in the program Any changes made on the value are lost when the function terminates (since the variable is also removed) Scope extends till the end of the file Scope covers only the function Lifetime spans the lifetime of the program Lifetime ends with the function CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 24

Changing local variables Any change made on local variables is lost after the function terminates. void f() { int a=10; a++; printf("in f(): a=%d\n",a); } int main() { int a=5; f(); printf("After first call to f(): a=%d\n",a); printf("After second call to f(): a=%d\n",a); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 25

Changing global variables Any change made on global variables remains after the function terminates. int b; void f() { b++; printf("in f(): b=%d\n",b); } int main() f(); printf("After first call to f(): b=%d\n",b); printf("After second call to f(): b=%d\n",b); This is called side effect. Avoid side effects. CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 26

Changing value parameters Any change made on value parameters is lost after the function terminates. void f(int c) { c++; printf("in f(): c=%d\n",c); } int main() { int c=5; f(c); printf("After f(): c=%d\n",c); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 27

Local definition veils global definition A local variable with the same name as the global variable veils the global definition. int d=10; void f() { d++; printf("in f(): d=%d\n",d); } int main() { int d=30; f(); printf("After first call to f(): d=%d\n",d); printf("After second call to f(): d=%d\n",d); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 28

Parameter definition veils global definition Similar to local variables, parameter definition with the same name as the global variable also veils the global definition. int e=10; void f(int e) { e++; printf("in f(): d=%d\n",e); } int main() { int g=30; f(g); printf("After first call to f(): g=%d\n",g); CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 29

Example Write a function that calculates the factorial of its parameter. n! = n(n-1)(n-2)...1 long factorial(int n) { int i; long res = 1; if (n == 0) return 1; for (i = 1; i <= n; i++) res *= i; return res; } CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 30

Example Write a function that calculates the permutation P(n, k) = n!/(n−k)! long perm(int n, int k) { long result; if ((n<0)||(k<0)||(n<k)) return 0; else { result = factorial(n)/factorial(n-k); return result; } CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 31

Example Write a function that calculates the combination C(n, k) = n!/[(n − k)! ∙ k!] long comb(int n, int k) { long result; if (n < 0 || k < 0 || n < k) return 0; else return(factorial(n)/(factorial(n-k)*factorial(k))); } CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 32

Macro Substitution Remember #define PI 3.14 It is also possible to write macros with parameters. #define square(x) x*x The name of the macro is square. Its parameter is x. It is replaced with x*x (with paramater x substituted.) CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 33

Macro Substitution Note that when the macro is called as square(a+1) the substituted form will be a+1*a+1 which is not correct. The macro should have been defined as #define square(x) (x)*(x) so that its substituted form would be (a+1)*(a+1) CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 34

CMPE 150 – Introduction to Computing Macro Substitution A macro is NOT a function. A macro is implemented as a substitution.  The code segment that implements the macro substitutes the macro call. + Code executes faster. - Code becomes larger. + It is possible to do things that you cannot do with functions. - Limited syntax check (Remember the "square(a+1)" example). CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Macro Substitution A function is implemented by performing a jump to a code segment.  Stack operations are performed for function call. - Code executes slower. + Code is smaller. + More structured programming. + Better syntax check. CMPE 150 – Introduction to Computing

Example: Macro substitution Define a macro for finding the maximum of two values. #define max(A,B) (((A)>(B))?(A):(B)) CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 37

Example: Macro substitution Define a macro for finding the absolute value. #define abs(A) ((A)>0)?(A):-(A)) CMPE 150 – Introduction to Computing CMPE 150 – Introduction to Computing 38

CMPE 150 – Introduction to Computing Variable Parameters CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Value parameters We used "value parameters" up to now. We did not pass the variable in the argument; we passed the value of the expression in the argument. That is why the changes made on the parameter were not reflected to the variable in the function call. CMPE 150 – Introduction to Computing

Changes in parameters are not reflected #include <stdio.h> void f(int a) { a+=5; printf("in function f(): a=%d\n", a); } int main() { int a=10; printf("in main(), before calling f(): a=%d\n",a); f(a); printf("in main(), after calling f(): a=%d\n",a); Stack f() a 10 15 OUTPUT main() a 10 in main(), before calling f(): a=10 in function f(): a=15 in main(), after calling f(): a=10 CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Variable parameters Converting a value parameter to a variable parameter is easy. void func(int num) { num = 5; } int main() { int count=10; func( count); Define the parameter as pointer * Use '*' before the parameter name so that you access the value at the mentioned address * Send the address of the argument & CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Call by reference The idea is very simple actually: When a function terminates, everything inside the stack entry for that function is erased. Therefore, if you want the changes to remain after the function call, you should make the change outside the function's stack entry. Here is what you do: At the caller instead of sending the value, send the reference (address), i.e. a pointer. At the callee, receive the address (i.e., define the parameter as a pointer). Inside the callee, use a de-referencer ('*') with the parameter name since the parameter contains the address, not the value. CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Call by reference This is why: "using value parameters" is also called "call by value" "using variable parameters" is also called "call by reference" CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Variable parameters #include <stdio.h> void f(int *a) { *a+=5; printf("in function f(): a=%d\n", *a); } int main() { int a=10; printf("in main(), before calling f(): a=%d\n",a); f(&a); printf("in main(), after calling f(): a=%d\n",a); Stack f() a OUTPUT main() a 10 15 in main(), before calling f(): a=10 in function f(): a=15 in main(), after calling f(): a=15 CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example Write a function that exchanges its parameters. Solution 1: void swap(int a, int b) { a=b; b=a; } WRONG! CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example Solution 2: void swap(int *a, int *b) { *a=*b; *b=*a; } STILL WRONG! CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example Solution 3: void swap(int *a, int *b) { int temp; temp = *a; *a=*b; *b=temp; } CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example What is the output? #include <stdio.h> int i=10, j=20, k=30, m=40; float func(int i, int *j) { int k=25; i++; (*j)++; k++; m++; printf("in func: i=%d j=%d k=%d m=%d \n", i, *j, k, m); return k/5; } int main() float n; n=func(j,&m)/3; printf("in main: i=%d j=%d k=%d m=%d n=%f \n", i, j, k, m, n); return 0; CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Example What is the output of this one? #include <stdio.h> int f(int x, int y) { printf("in f(): x=%d y=%d \n", x, y); return x+y; } int g(int x, int y) printf("in g(): x=%d y=%d \n", x, y); return y-x; int h(int x, int y) printf("in h(): x=%d y=%d \n", x, y); return x/y; int main() int a=10, b=20, c=30, d=40; printf("in main(): %d\n", h(f(a,b),g(c,d))); return 0; CMPE 150 – Introduction to Computing

Order of evaluation of arguments Read last paragraph of Section A7.3.2 of Kernighan & Ritchie: "Order of evaluation of arguments is unspecified; take note that various compilers differ." CMPE 150 – Introduction to Computing

CMPE 150 – Introduction to Computing Recursive functions Just a simple example of recursive functions. #include <stdio.h> long factorial(int n) { if (n>0) return n*factorial(n-1); else if (n==0) return 1; return 0; } int main() int n; printf("Enter an integer: "); scanf("%d", &n); printf("%d! = %ld\n", n, factorial(n)); As we said before, avoid recursive functions. CMPE 150 – Introduction to Computing