update ch 2 exercises
This commit is contained in:
parent
ae41462776
commit
38398729ce
@ -16,10 +16,32 @@ y[1] = 10
|
||||
```
|
||||
What is the value of `x[1]` and why?
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
`x[1]` will be `10` because `y = x` is not copying data but it binds
|
||||
the same value both to variable `x` and `y`.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
### Exercise 2
|
||||
|
||||
How can you type `⚡ = 1`. Check if this operation succeeds and what is its result.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
In help mode (activated by `?`) copy-paste `⚡` to get:
|
||||
```
|
||||
help?> ⚡
|
||||
"⚡" can be typed by \:zap:<tab>
|
||||
```
|
||||
After the `⚡ = 1` operation a new variable `⚡` is defined and it is bound
|
||||
to value `1`.
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 3
|
||||
|
||||
What will be the value of variable `x` after running of the following code and why?
|
||||
@ -31,62 +53,8 @@ end
|
||||
x /= 1_000_000
|
||||
```
|
||||
|
||||
### Exercise 4
|
||||
|
||||
Express the type `Matrix{Bool}` using `Array` type.
|
||||
|
||||
### Exercise 5
|
||||
|
||||
Let `x` be a vector. Write code that prints an error if `x` is empty
|
||||
(has zero elements)
|
||||
|
||||
### Exercise 6
|
||||
|
||||
Write a function called `exec` that takes two values `x` and `y` and a function
|
||||
accepting two arguments, call it `op` and returns `op(x, y)`. Make `+` to be
|
||||
the default value of `op`.
|
||||
|
||||
### Exercise 7
|
||||
|
||||
Write a function that calculates a sum of absolute values of values stored in
|
||||
a collection passed to it.
|
||||
|
||||
### Exercise 8
|
||||
|
||||
Write a function that swaps first and last element in an array in place.
|
||||
|
||||
### Exercise 9
|
||||
|
||||
Write a loop in global scope that calculates the sum of cubes of numbers from
|
||||
`1` to `10^6`. Next use the `sum` function to perform the same computation.
|
||||
What is the difference in timing of these operations?
|
||||
|
||||
### Exercise 10
|
||||
|
||||
Explain the value of the result of summation obtained in exercise 9.
|
||||
|
||||
# Solutions
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Show!</summary>
|
||||
|
||||
### Exercise 1
|
||||
|
||||
`x[1]` will be `10` because `y = x` is not copying data but it binds
|
||||
the same value both to variable `x` and `y`.
|
||||
|
||||
### Exercise 2
|
||||
|
||||
In help mode (activated by `?`) copy-paste `⚡` to get:
|
||||
```
|
||||
help?> ⚡
|
||||
"⚡" can be typed by \:zap:<tab>
|
||||
```
|
||||
After the `⚡ = 1` operation a new variable `⚡` is defined and it is bound
|
||||
to value `1`.
|
||||
|
||||
### Exercise 3
|
||||
<summary>Solution</summary>
|
||||
|
||||
`x` will have value `0.9999999999242748`. This value is below `1.0` because
|
||||
representation of `1/7` using `Float64` type is less than rational number 1/7,
|
||||
@ -105,16 +73,31 @@ julia> 1/big(7) # construct high-precision float directly
|
||||
As you can see there is a difference at 17th place after decimal dot where we
|
||||
have `4` vs `5`.
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 4
|
||||
|
||||
Express the type `Matrix{Bool}` using `Array` type.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
It is `Array{Bool, 2}`. You immediately get this information in REPL:
|
||||
```
|
||||
julia> Matrix{Bool}
|
||||
Matrix{Bool} (alias for Array{Bool, 2})
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 5
|
||||
|
||||
Let `x` be a vector. Write code that prints an error if `x` is empty
|
||||
(has zero elements)
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
You can do it like this:
|
||||
```
|
||||
length(x) == 0 && println("x is empty")
|
||||
@ -127,8 +110,17 @@ passed as an argument to the function):
|
||||
isempty(x) && throw(ArgumentError("x is not allowed to be empty"))
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 6
|
||||
|
||||
Write a function called `exec` that takes two values `x` and `y` and a function
|
||||
accepting two arguments, call it `op` and returns `op(x, y)`. Make `+` to be
|
||||
the default value of `op`.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
Here are two ways to define the `exec` function:
|
||||
```
|
||||
exec1(x, y, op=+) = op(x, y)
|
||||
@ -144,15 +136,30 @@ julia> exec2(2, 3; op=*)
|
||||
6
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 7
|
||||
|
||||
Write a function that calculates a sum of absolute values of values stored in
|
||||
a collection passed to it.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
Such a function can be written as:
|
||||
```
|
||||
sumabs(x) = sum(abs, x)
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 8
|
||||
|
||||
Write a function that swaps first and last element in an array in place.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
This can be written for example as:
|
||||
```
|
||||
function swap!(x)
|
||||
@ -184,8 +191,17 @@ Note the differences in the code:
|
||||
is technically called tuple destructuring; we discuss it in later chapters of
|
||||
the book)
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 9
|
||||
|
||||
Write a loop in global scope that calculates the sum of cubes of numbers from
|
||||
`1` to `10^6`. Next use the `sum` function to perform the same computation.
|
||||
What is the difference in timing of these operations?
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
We used `@time` macro in chapter 1.
|
||||
|
||||
Version in global scope:
|
||||
@ -246,8 +262,15 @@ julia> @time sum3loop(10^6)
|
||||
```
|
||||
This is also much faster than a loop in global scope.
|
||||
|
||||
</details>
|
||||
|
||||
### Exercise 10
|
||||
|
||||
Explain the value of the result of summation obtained in exercise 9.
|
||||
|
||||
<details>
|
||||
<summary>Solution</summary>
|
||||
|
||||
In exercise 9 we note that the result is `-8222430735553051648` which is a
|
||||
negative value, although we are adding cubes of positive values. The
|
||||
reason of the problem is that operations on integers overflow. If you
|
||||
|
Loading…
Reference in New Issue
Block a user