Cartouche

Champ Valeur
Auteur·e Élise
Édition 2024-06-25
Durée 2 séances (un jour)
Taille des équipes 1 personne
Rendu via git, dépôt $YEAR_rust_c1, droits en lecture à delivery_collector

Règlement

Prenez connaissance du règlement ici

L’intégralité de la bibliothèque standard est autorisée. Vous êtes encouragés à vous servir des outils qu’elle vous propose s’ils résolvent un de vos problèmes. Votre objectif c’est d’éviter de ré-inventer la roue quand ça n’est pas nécessaire.

Introduction

Notre premier objectif, ça va être de configurer votre environnement de travail de sorte à pouvoir travailler avec le Rust.

Les notions propre au langages que l’on va voir sont :

  • écrire un programme
  • écrire une fonction
  • écrire un test unitaire
  • utiliser les structures de contrôle
  • utiliser les références
  • utiliser les tableaux et les slices
  • lire un fichier
  • split une chaîne
  • parser un nombre
  • algorithmes d’analyse simples

Notation

  • Vérification Manuelle
    • Installation de la toolchain 2
    • Configuration de l’IDE 2
    • Configuration debuggeur 2
  • Sur dépôt
    • E1 : print b 2
    • E2 : exit 189 2
    • E3 : my swap int 2
    • E4 : plus grand nombre 2
    • E5 : avg, med, std deviation 3
    • E6 : analyse 3
    • Malus par ligne en faute de norme -0.5
    • Malus pour dépôt sale -5

Installation

Rustup

Sur windows :

  • Installez les composants suivants de Visual Studio Community 2022 :
    • MSVC version actuelle x64/x86 build tools (latest)
    • Windows 11 SDK (latest)
    • C++ Clang Compiler for Windows (latest)
  • téléchargez rustup-ini.exe ici Install Rust - Rust Programming Language (rust-lang.org)
  • faites rustup update

Sur Linux :

Éditeur de Code

VS Code:

Neovim:

  • LSP rust-analyzer dans Mason
  • DAP codelldb dans Mason
  • neovim rustaceanvim pour davantage d’outils

Dans le terminal, pour debugger, installez lldb.

Testez votre installation

Dans un terminal, créez un projet dans un dossier vide en utilisant cargo init --name d1. Une fois l’initialisation terminée, faites cargo run.

Ouvrez le dossier dans votre éditeur de code, testez auto-complétion et debug en écrivant un petit peu de code.

Exercice 1 : print b

Fichier à rendre : src/bin/printb.rs Bibliothèques autorisées : std

Écrivez un programme qui affiche la lettre b minuscule, suivi d’un retour à la ligne.

Exercice 2 : exit 189

Fichier à rendre : src/bin/exit189.rs Bibliothèques autorisées : std

Écrivez un programme qui s’arrête avec le code de sortie 189.

Exercice 3 : my swap int

Fichier à rendre : src/lib.rs (ajouts) Bibliothèques autorisées : std

Écrivez la fonction my_swap_int. Elle prend deux références sur i32, intervertit les valeurs qu’ils contiennent et ne renvoie rien.

Exemple de test

#[cfg(test)]
mod test {
	use super::my_swap_int;

	#[test]
	fn my_swap_1() {
		let mut a = 12;
		let mut b = 113;
		my_swap_int(&mut a, &mut b);
		assert_eq!(a, 113);
		assert_eq!(b, 12);
	}

	#[test]
	fn my_swap_2() {
		// votre second test
	}
}

Exercice 4 : plus grand nombre

Fichier à rendre : src/lib.rs (ajouts) Bibliothèques autorisées : std

Écrivez la fonction biggest_in_slice, qui prend en paramètre une slice de tableau d’i32. Elle doit renvoyer la valeur la plus haute contenue dans le tableau.

Écrivez le ou les tests de cette fonction.

Exercice 5 : moyenne, médiane et écart-type

Fichier à rendre : src/lib.rs (ajouts) Bibliothèques autorisées : std

Écrivez une fonction avg_med_std_dev qui prend en paramètre une slice de f64 et renvoie grâce à une structure, la moyenne, médiane et l’écart-type de toutes ces valeurs.

Écrivez les tests de cette fonction.

Exemple de tri de nombres flottants :

fn main() {
    let mut example_array = [1.0, 3.14, 8.5, 2.5];
    sort_f64_array(&mut example_array);
    dbg!(example_array);
}

fn sort_f64_array(arr: &mut [f64]) {
    if arr.contains(&f64::NAN) {
        return;
    }
    arr.sort_by(|a, b| a.partial_cmp(b).unwrap());
}

Exercice 6 : parsing

Fichier à rendre : src/bin/parsing.rs Bibliothèques autorisées : std

Écrivez un programme qui prend en argument un ou plusieurs noms de fichiers. Ces fichier doivent contenir des nombres, séparés par des espaces ou des retours à la ligne. Après avoir lu et parsé tous les nombres, envoyez-les à votre fonction d1::avg_med_std_dev. Rajoutez le mot clé pub devant la déclaration de cette fonction pour qu’elle soit utilisable dans src/bin/parsing.rs.

Affichez moyenne, médiane et écart-type avec ce format :

avg: 12.14
median: 4.4
std deviation: 6.8