Added ex 19,20 functions and pop quiz

This commit is contained in:
Dave Gauer 2021-01-22 17:42:03 -05:00
parent a361b90a75
commit 08ec029f20
5 changed files with 82 additions and 4 deletions

View File

@ -12,7 +12,11 @@ pub fn main() void {
//
// We're just missing a couple things here. One thing we're NOT missing is the
// keyword 'pub', which is not needed here. Can you guess why?
// keyword "pub", which is not needed here. Can you guess why?
//
// Functions need to specify the type of value they return. The main() function
// above has a special return type "void", which means it returns nothing. This
// function returns something. What might that be?
//
??? deepThought() ??? {
return 42; // Number courtesy Douglas Adams

28
19_functions2.zig Normal file
View File

@ -0,0 +1,28 @@
//
// Now let's use a function that takes a parameter.
//
const std = @import( "std" );
pub fn main() void {
std.debug.print("Powers of two: {} {} {} {}\n", .{
twoToThe(1),
twoToThe(2),
twoToThe(3),
twoToThe(4),
});
}
//
// Oops! We seem to have forgotten something here. Function
// parameters look like this:
//
// fn myFunction( number: u8, is_lucky: bool ) {
// ...
// }
//
// As you can see, we declare the type of the parameter, just
// like we declare the types of variables, with a colon ":".
//
fn twoToThe(???) u32 {
return std.math.pow(u32, 2, my_number);
}

45
20_quiz3.zig Normal file
View File

@ -0,0 +1,45 @@
//
// Let's see if we can make use of some of things we've learned so far.
// We'll create two functions: one that contains a "for" loop and one
// that contains a "while" loop.
//
// Both of these are simply labeled "loop" below.
//
const std = @import( "std" );
pub fn main() void {
const my_numbers = [4]u16{ 5,6,7,8 };
printPowersOfTwo(my_numbers);
std.debug.print("\n", .{});
}
//
// You won't see this every day: a function that takes an array with
// exactly four u16 numbers. This is not how you would normally pass
// an array to a function. We'll learn about slices and pointers in
// a little while. For now, we're using what we know.
//
// This function prints, but does not return anything.
//
fn printPowersOfTwo(numbers: [4]u16) ??? {
loop (numbers) |n| {
std.debug.print("{} ", .{twoToThe(n)});
}
}
//
// This function bears a striking resemblance to twoToThe() in the last
// exercise. But don't be fooled! This one does the math without the aid
// of the standard library!
//
fn twoToThe(number: u16) ??? {
var n: u16 = 0;
var total: u16 = 1;
loop (n < number) : (n += 1) {
total *= 2;
}
return ???;
}

View File

@ -65,9 +65,9 @@ Planned exercises:
* [x] If
* [x] While
* [x] For
* [ ] Functions
* [ ] Defer
* [x] Functions
* [ ] Errors
* [ ] Defer
* [ ] Switch
* [ ] Runtime safety
* [ ] Unreachable

View File

@ -68,7 +68,6 @@ function check_it {
fi
}
check_it 01_hello.zig "Hello world" "Note the error: the source file has a hint for fixing 'main'."
check_it 02_std.zig "Standard Library"
check_it 03_assignment.zig "55 314159 -11" "There are three mistakes in this one!"
@ -87,6 +86,8 @@ check_it 15_for.zig "A Dramatic Story: :-) :-) :-( :-| :-) The End."
check_it 16_for2.zig "13"
check_it 17_quiz2.zig "8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16" "This is a famous game!"
check_it 18_functions.zig "Question: 42" "Can you help write the function?"
check_it 19_functions2.zig "2 4 8 16"
check_it 20_quiz3.zig "32 64 128 256" "Unexpected pop quiz! Help!"
echo
echo " __ __ _ "