mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-11-08 11:20:46 -05:00
Added Ex 11-14: while loops
This commit is contained in:
parent
0bb89e3e41
commit
483fb97dfc
6 changed files with 129 additions and 1 deletions
33
11_while.zig
Normal file
33
11_while.zig
Normal file
|
@ -0,0 +1,33 @@
|
|||
//
|
||||
// Zig 'while' statements create a loop that runs while the
|
||||
// condition is true:
|
||||
//
|
||||
// while (condition) {
|
||||
// condition = false;
|
||||
// }
|
||||
//
|
||||
// Remember that the condition must be a boolean value and
|
||||
// that we can get a boolean value from conditional operators
|
||||
// such as:
|
||||
//
|
||||
// a == b a equals b
|
||||
// a < b a is less than b
|
||||
// a > b a is greater than b
|
||||
// a !=b a does not equal b
|
||||
//
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() void {
|
||||
var n: u32 = 2;
|
||||
|
||||
while ( ??? ){
|
||||
// Print the current number
|
||||
std.debug.print("{} ", .{n});
|
||||
|
||||
// Set n to n multiplied by 2
|
||||
n *= 2;
|
||||
}
|
||||
|
||||
// Make this print n=1024
|
||||
std.debug.print("n={}\n", .{n});
|
||||
}
|
33
12_while2.zig
Normal file
33
12_while2.zig
Normal file
|
@ -0,0 +1,33 @@
|
|||
//
|
||||
// Zig 'while' statements can have an optional 'continue expression'
|
||||
// which runs every time the while loop continues (either at the
|
||||
// end of the loop or when an explicit 'continue' is invoked (we'll
|
||||
// try those out next):
|
||||
//
|
||||
// while (condition) : (continue expression)
|
||||
// ...
|
||||
// }
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// var foo = 2;
|
||||
// while (foo<10) : (foo+=2)
|
||||
// // Do something with even numbers less than 10...
|
||||
// }
|
||||
//
|
||||
// See if you can re-write the last exercise using a continue
|
||||
// expression:
|
||||
//
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() void {
|
||||
var n: u32 = 2;
|
||||
|
||||
while (n < 1000) : ??? {
|
||||
// Print the current number
|
||||
std.debug.print("{} ", .{n});
|
||||
}
|
||||
|
||||
// Make this print n=1024
|
||||
std.debug.print("n={}\n", .{n});
|
||||
}
|
30
13_while3.zig
Normal file
30
13_while3.zig
Normal file
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// The last two exercises were functionally identical. Continue
|
||||
// expressions really show their utility when used with 'continue'
|
||||
// statements!
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// while (condition) : (continue expression){
|
||||
// if(other condition) continue;
|
||||
// ...
|
||||
// }
|
||||
//
|
||||
// The continue expression executes even when 'other condition'
|
||||
// is true and the loop is restarted by the 'continue' statement.
|
||||
//
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() void {
|
||||
var n: u32 = 1;
|
||||
|
||||
// I want to print every number between 1 and 20 that is NOT
|
||||
// divisible by 3 or 5.
|
||||
while (n <= 20) : (n+=1) {
|
||||
if(n % 3 == 0) ???;
|
||||
if(n % 5 == 0) ???;
|
||||
std.debug.print("{} ", .{n});
|
||||
}
|
||||
|
||||
std.debug.print("\n", .{});
|
||||
}
|
24
14_while4.zig
Normal file
24
14_while4.zig
Normal file
|
@ -0,0 +1,24 @@
|
|||
//
|
||||
// Continue expressions do NOT execute when a while loop stops
|
||||
// because of a 'break' statement.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// while (condition) : (continue expression){
|
||||
// if(other condition) break;
|
||||
// ...
|
||||
// }
|
||||
//
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() void {
|
||||
var n: u32 = 1;
|
||||
|
||||
// Oh dear! This while loop will go forever!?
|
||||
while (true) : (n+=1) {
|
||||
if(???) ???;
|
||||
}
|
||||
|
||||
// Result: we want n=4
|
||||
std.debug.print("n={}\n", .{n});
|
||||
}
|
|
@ -63,7 +63,7 @@ Planned exercises:
|
|||
* [x] Arrays
|
||||
* [x] Strings
|
||||
* [x] If
|
||||
* [ ] While
|
||||
* [x] While
|
||||
* [ ] For
|
||||
* [ ] Functions
|
||||
* [ ] Defer
|
||||
|
|
8
ziglings
8
ziglings
|
@ -59,6 +59,10 @@ function check_it {
|
|||
printf "${fmt_yay}** PASSED **${fmt_off}\n"
|
||||
else
|
||||
printf "${fmt_err}It seems to compile, but I wanted to see '$correct_output'.${fmt_off}\n"
|
||||
if [[ ! -z "$hint" ]]
|
||||
then
|
||||
echo "$hint"
|
||||
fi
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
@ -75,6 +79,10 @@ check_it 07_strings2.zig "Ziggy" "Please fix the lyrics!"
|
|||
check_it 08_quiz.zig "Program in Zig" "See if you can fix the program!"
|
||||
check_it 09_if.zig "Foo is 1!"
|
||||
check_it 10_if2.zig "price is \$17"
|
||||
check_it 11_while.zig "n=1024" "You probably want a 'less than' condition."
|
||||
check_it 12_while2.zig "n=1024" "It might help to look back at the previous exercise."
|
||||
check_it 13_while3.zig "1 2 4 7 8 11 13 14 16 17 19"
|
||||
check_it 14_while4.zig "n=4"
|
||||
|
||||
echo
|
||||
echo " __ __ _ "
|
||||
|
|
Loading…
Reference in a new issue