diff --git a/day3/README.md b/day3/README.md new file mode 100644 index 0000000..3decb93 --- /dev/null +++ b/day3/README.md @@ -0,0 +1,90 @@ +# Day 3 + +## Functions + +Mathematically speaking, functions are able to take in a set of inputs and +return a specific output. C++ gives you an interface by which you can create +your own custom functions for purposes of modularity or recursion (where +functions are necessary). + +The general structure of a function is as follows: + +```cpp +(type that the function returns) (function name) (parameters) { + // body +} +``` + +We will now more closely analyze each of the parts of this function. + +### Parameters + +The parameters that you put into your function are a template for how the +function will work when it is actually called. + +The format of the parameters must be `(type) (name)`, with the parameters +separated by commas. + +For instance, if you had a function to add two numbers, it would look something +like this: + +```cpp +int add (int a, int b) { + return a+b; +} +``` + +Note that the variables `a` and `b` are simply aliases that you use to represent +the actual values that you place into the function when you make a call. + +When you make the following function call, + +```cpp +cout << add(3, 2); +``` + +`a` will represent 3 and `b` will represent 2, and thus this code block will +print `5`. However, note that we cannot make the following call, as the +arguments are not in the types that the compiler expects them to be in: + +```cpp +cout << add(3, "string"); +``` + +The function expects two integers, but received a string, which cannot be +automatically converted to an integer for very obvious reasons. + +Note that c++ will conduct automatic type conversion whenever possible to allow +the function to execute, so you can pass in a `long long` or `bool` and the +function should still be able to convert them into `int`s. + +### Type + +Sometimes, you want your functions to return back a value for your convenience. +For instance, if you have a simple function to add two numbers, you would want +to get the sum of the numbers back. In this case, you place the return type at +the front of the function signature as shown above + +Note that if you do wish to return a type in your function, you **must** return +the value of that type in **all possible cases**, or else your compiler will +throw a warning. + +The `void` keyword is special, as it is used for a function that does not return +any value and only has side effects. + +For instance, if I were doing a floodfill traversal of a graph (where we are +simply trying to find the number of disjoint regions), I would probably do the +following: + +```cpp +void dfs(int x, int y) { + // mark as visited + // propagate +} +``` + +Note that the DFS does not actually return any real value, we simply use it for +the fact that it is able to fill out the visited array. + +When you use a function that returns `void`, you will not actually have to +provide an explicit `return` statement. diff --git a/lab/Main.cpp b/lab/Main.cpp index af3d16e..a77ae6a 100644 --- a/lab/Main.cpp +++ b/lab/Main.cpp @@ -3,4 +3,5 @@ using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); + }