This shows you the differences between two versions of the page.
saiot:laboratoare:01 [2020/10/07 14:00] 127.0.0.1 external edit |
saiot:laboratoare:01 [2020/10/21 23:31] (current) alexandru.radovici |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 01. ===== | + | ===== Lab 1- Introduction to Rust ===== |
+ | ===== Workpoint 1 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let name = "Ruster"; | ||
+ | println! ("Hello Rusters, I am {} and Rust is awseome", name); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 2 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let a = 10; | ||
+ | let b = 20; | ||
+ | // print debug information for the a + b expression | ||
+ | dbg! (a+b); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 3 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let a = 10; | ||
+ | let b = 100; | ||
+ | let max = if a > b { a } else { b }; | ||
+ | | ||
+ | println! ("The maximum {}", max); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 4 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let n = 10; | ||
+ | | ||
+ | let t = match n % 2 { | ||
+ | 0 => "even", | ||
+ | _ => "odd" | ||
+ | }; | ||
+ | | ||
+ | println! ("{} is {}", n, t); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 5 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn factorial (n: i32) -> u32 { | ||
+ | match n { | ||
+ | 0 | 1 => 1, | ||
+ | n if n > 0 => n as u32 * factorial (n-1), | ||
+ | _ => panic! ("not possible") | ||
+ | } | ||
+ | } | ||
+ | |||
+ | fn main () { | ||
+ | println! ("10!: {} 0!: {} -10: {}", factorial(10), factorial(0), factorial(-10)); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 6 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let v = [1,2,4,5,23,54,6,7,34,6,6,3]; | ||
+ | let mut max = v[0]; | ||
+ | | ||
+ | for x in &v { | ||
+ | if *x > max { | ||
+ | max = *x; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | println! ("The maximum {}", max); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 7 ===== | ||
+ | ==== Workpoint 7.1 ==== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | |||
+ | fn maximum (a: u32, b: u32) -> u32 { | ||
+ | if a > b { | ||
+ | a | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | b | ||
+ | } | ||
+ | } | ||
+ | |||
+ | fn main() { | ||
+ | let a = 10; | ||
+ | let b = 100; | ||
+ | let max = maximum (a, b); | ||
+ | | ||
+ | println! ("The maximum {}", max); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== Workpoint 7.2 ==== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | |||
+ | fn maximum (v: &[u32]) -> u32 { | ||
+ | let mut max = v[0]; | ||
+ | for x in v { | ||
+ | if *x > max { | ||
+ | max = *x; | ||
+ | } | ||
+ | } | ||
+ | max | ||
+ | } | ||
+ | |||
+ | fn main() { | ||
+ | let v = [1,2,4,5,23,54,6,7,34,6,6,3]; | ||
+ | let max = maximum (&v); | ||
+ | | ||
+ | println! ("The maximum {}", max); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 8 ===== | ||
+ | <code rust> | ||
+ | #![allow(dead_code)] | ||
+ | fn main() { | ||
+ | let v = [1,2,4,5,23,54,6,7,34,6,6,3]; | ||
+ | let max = v.iter().fold (v[0], |max, x| { | ||
+ | if *x > max | ||
+ | { | ||
+ | *x | ||
+ | | ||
+ | } else { | ||
+ | max | ||
+ | } | ||
+ | }); | ||
+ | | ||
+ | println! ("The maximum {}", max); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Workpoint 9 ===== | ||
+ | |||
+ | Solution: Catalin Gheorghe | ||
+ | |||
+ | <code rust> | ||
+ | fn factorial (n: i32) -> Option<u32> { | ||
+ | if n < 0 { | ||
+ | return None | ||
+ | } | ||
+ | match factorial(n-1) { | ||
+ | Some(value) => Some(value * (n as u32)), | ||
+ | None => Some(1) | ||
+ | } | ||
+ | } | ||
+ | fn map(option: Option<u32>) -> String { | ||
+ | match option { | ||
+ | Some(value) => value.to_string(), | ||
+ | None => "not possible".to_string() | ||
+ | } | ||
+ | } | ||
+ | fn main () { | ||
+ | println! ("10!: {}, 0!: {}, -10!: {}", map(factorial(10)), map(factorial(0)), map(factorial(-10))); | ||
+ | // prints 10!: 3628800, 0!: 0, 10!: not possible | ||
+ | } | ||
+ | </code> | ||