aboutsummaryrefslogtreecommitdiff
path: root/exercises/020_quiz3.zig
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/020_quiz3.zig')
-rw-r--r--exercises/020_quiz3.zig43
1 files changed, 43 insertions, 0 deletions
diff --git a/exercises/020_quiz3.zig b/exercises/020_quiz3.zig
new file mode 100644
index 0000000..651af8c
--- /dev/null
+++ b/exercises/020_quiz3.zig
@@ -0,0 +1,43 @@
+//
+// 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 ???;
+}