# Classwork 8: Functions

## Objectives

To practice using functions in the math library and to write a simple function of your own.

## The Assignment

### Version 1

Write a program that calculates the cube root of a number that the user types in. A sample run of your program might look like this:

PT[193]% ./a.out This program calculates the cube root. x = ? 27 The cube root of 27.000000 is 3.000000 PT[194]% PT[194]% ./a.out This program calculates the cube root. x = ? 64 The cube root of 64.000000 is 4.000000 PT[195]% PT[195]% ./a.out This program calculates the cube root. x = ? 100 The cube root of 100.000000 is 4.641589 PT[196]% PT[196]% ./a.out This program calculates the cube root. x = ? 125 The cube root of 125.000000 is 5.000000 PT[197]%

To calculate the cube root, use the `pow()` function from
the math library. To do so, you must have the following preprocessor
directive at the top of your program:

#include <math.h>

The `pow()` function has the following prototype:

double pow(double x, double y) ;

**DO NOT ADD THIS PROTOTYPE TO YOUR PROGRAM.**

This means that when you call `pow()` you must supply it
with two double values for input (a.k.a. the actual parameters) and
it will produce a double value as output (a.k.a. the return value).
(Note: you should *not* have the function prototype of `pow()`
in your program. It is already declared in the `math.h` header
file.)
For example, the following assignment should store the value
8.0 in the variable `r`.

r = pow(2.0, 3.0) ;

**Note: the expression 1/3 evaluates to 0 because
it is an integer divided by an integer, so the division is integer
division. Use 1.0/3.0 or 0.3333333333333.**

Name your program `cuberoot1.c`, compile it using the `-Wall` and
`-lm` options:

gcc -Wall cuberoot1.c -lm

You need the `-lm` flag to tell `gcc` to use the math library.
Make sure your `main()` program has return type `int` and has
as its last statement:

return 0 ;

Then, `gcc -Wall` should give you no warnings. (If it does, then you
have an actual error in your program.)

Use the Unix `script` command to record the compilation of your
program with the `-Wall` option and several sample runs of your
program. Then submit both your program and the `typescript` file.
(Remember to exit from `script`, first.)

submit cs104_chang cw08 cuberoot1.c submit cs104_chang cw08 typescript

### Version 2

Make a copy of your `cuberoot1.c` file
and call the new file `cuberoot2.c`.

For version 2 of your assignment, create a *function* that
computes the cuberoot of a number. Call this function `cbrt``cuberoot`.
Your `cuberoot` function should not print anything to the screen
or ask the user for input. (See example functions from class notes.)
It should take one `double` value for input (its "formal
parameter") and return the cube root of that value.

Modify your main program so it uses your own `cuberoot()` function
instead of calling `pow()` from the math library.
The sample runs of your program should look the same as before.

Use the `script` command to record yourself compiling
and running the second version of your program, except use
the option `-a typescript2` so you don't overwrite
your previous sample runs:

script -a typescript2

submit cs104_chang cw08 cuberoot2.c submit cs104_chang cw08 typescript2

*Be sure to logout completely when you have finished!*