Você está na página 1de 10

1

Divide and Conquer Example Assume you want to print a hollow square of *s with the length of each side read into the variable s. The square might look like ***** * * * * * * ***** In pseudo code this might be Print a line of stars Print the middle lines Print a line of stars One may want a mainline program that looks like int main() { int s; cout << " enter the length of a side "; cin >>s; //Read in length of side printstars(s); //do top line printmiddle(s); //call function printstars(s); //do bottom line return 0; } Writing subroutines with no return value:

Begin with function header: void printstars(int s) Continue with body: { // this subroutine prints a rows of *s for (int j = 1; j <=s; j++) cout << "*"; cout << endl; } Similarly for the printmiddle function: void printmiddle(int s) { for( int i=2; i <=s-1; i ++) { //print row i cout << "*"; //print left hand * for ( int j=1; j <=s-2; j++) cout << " "; //print middle blanks cout << "*" << endl; //print right hand * } }

Before int main() we need to tell the compiler what are the input and outputs of our function, we need a function prototype void printstars(int s); void printmiddle(int s); //function prototype

The structure of the program would then be: void printstars(int s); //function prototypes void printmiddle(int s); int main() { int s; cout << " enter the length of a side "; cin >>s; printstars(s); //do top line printmiddle(s); printstars(s); // do bottom line; return 0; } void printstars(int s) { for (int j=1;j <=s; j++) cout << "*"; cout << endl; } void printmiddle(int s) { for(int i=2; i <=s-1; i ++) { cout << "*"; for (int j=1; j <=s-2; j++) cout << " "; cout << "*" << endl; } }

//print left hand * //print middle blanks //print right hand *

The inner loop of printmiddle looks like printstars with a rather than a *. Could we make another subroutine that makes whatever character one wishes as in void printchar(int s, char c) { for (int j=1;j <=s; j++) cout << c; } The printmiddle would then be void printmiddle(int s) { for(int i=2; i <=s-1;i ++) { cout << "*"; printchar(s-2,' '); cout << "*" << endl; } }

//print a line of whatever is //in c

//print left hand * //print blanks //print right hand *

and prinstars would not be needed and the mainline would be int main() { int s; cout << " enter the length of a side "; cin >>s; printchar(s,'*'); //do top line cout <<endl; printmiddle(s); printchar(s,'*'); // do bottom line; cout <<endl; return 0; } Exercises in interpreting and writing functions

For the following function headers, what is the type of the return value, and the number and types of the parameters 1. double average(double a, double b, double c) 2. double mpg(double miles, double gas) 3. float getcelcius(float fahrenheit) 4. int factorial(int n) 5. void factorialprint(int n) 6. void oddeven(int n) What are the function prototypes for the above headers? Sample bodies: 1. double average(double a, double b, double c) double average(double a, double b, double c) { return (a+b+c)/3.0; }

2. double mpg(double miles, double gas)

double mpg(double miles, double gas) { if (gas!=0.0) return miles/gas; else return 0; } 3. double getcelcius(float fahrenheit) double getcelcius(float fahrenheit) { return 5.0/9.0*(fahrenheit-32); } 4. int factorial(int n); int factorial(int n) {int prod=1; for (int i =1; i<=n); i++) prod=prod*i; return prod; } 5. void factorialprint(int n); void factorialprint(int n) {int prod=1; for (int i =1; i<=n; i++) prod=prod*i; cout << " the factorial is " <<prod;} 6. void oddeven(int n) void oddeven(int n) {

if(n%2 ==0) cout << n << " is even" << endl; else cout << n << " is odd" << endl;

How these might be used: main() { cout << "average of 10 20 and 30 is "<< average(10.0,20.0,30.0); oddeven(23); cout << " 10 factorial is "<< factorial(n); factorialprint(9); cout << "miles per gallon is " <<mpg(250.0,10.4); return 0; }

Write function headers for 1. Findabs that accepts a double precision number and returns the numbers absolute value. 2. mult that accepts two floating point numbers and returns their product.

3. powfun that raises an integer passed to it to the power passed to it and returns the result 4. table that produces a table of the squares and cubes of the numbers from 1 to 10. 5. Sigma that returns the sum of the numbers from 1 to n, where n is passed to it. 6. Totalamount that has four parameters: quarters, dimes, nickles, and pennies and returns the total amount of money in a piggy bank. 7. max that computes the maximum of two numbers.

max can be used to find the maximum of n values that are read in as follows: int a, maxn; cin >> maxn; //the first value is put into max for (int I=2, I<=n, I++) { cin >>a; maxn=max(a,maxn) } Exercises for call by value and call by reference 1.Consider the code: void swap(int &a, int & b) { int temp; temp =a; a=b; b=temp; }

what does the following print ? a=2; b=4; swap(a, b); cout <<a<<b; What does this code do? cin >>a>>b>>c; if (a>b) swap(a,b); if(b>c) swap(b,c); if (a>b) swap(a,b); 2.Consider the code: void sum(int a, int & b) { a=a+b; b=a+b; } what does the following print?: a=2; b=4; sum(a,b); cout <<a <<b; 3. Consider the code: void sum(int &a, int & b) { a=a+b; b=a+b; } what does the following print?: a=2; b=4; sum(a,b); cout <<a <<b;

10

4. Consider the code: void sum(int &a, int b) { a=a+b; b=a+b; } what does the following print?: a=2; b=4; sum(a,b); cout <<a <<b; 5. Consider the code: int sum(int &a, int b) { a=a+b; return a+b; } what does the following print?: a=2; b=4; cout <<sum(a,b)<<a<<b;

Você também pode gostar