UP | HOME

Convertisseur de base
Activités #3

Table des matières

Le but de cette activité est de développer une application web qui convertit un nombre d’une base vers une autre. Les bases doivent être comprises entre 2 et 36.

1. Application web shiny

1.1. Installer les extensions

Installez d’abord l’extension requise.

install.packages("shiny") ## pour l'application web

N’hésitez pas à parcourir l’introduction à shiny.

1.2. Obtenir le code de l’application

Ensuite, téléchargez le fichier app-base-converter.R contenant le code de l’application, et exécutez le.

app <- source('app-base-converter.R') ## construire l'application web
app ## lancer l'application web dans un navigateur

Pour l’instant, l’application fonctionne mais n’affiche rien d’intéressant.

1.3. Compléter le code de l’application

Votre mission consiste compléter le code de l’application. La spécification des fonctions est précisée dans les sections suivantes.

Nous allons suivre certains préceptes des méthodes agiles. L’application est développé en plusieurs étapes. Chaque étape ajoute une ou plusieurs fonctionnalités à l’application. À la fin de chaque étape, notre application est opérationnelle.

2. Conversion depuis une base comprise entre 2 et 36

Écrire la fonction DecodeNumber, une version simplifiée de la fonction prédéfinie strtoi.

#' Décode une chaîne de caractère word représentant un nombre n écrit dans une base comprise entre 2 et 36.
#'
#' @param word la chaîne de caractère représentant le nombre ne contenant que des caractères alphanumériques.
#' @param base la base dans laquelle est écrite le nombre
#' @return le nombre n ou NA si le format de la chaîne est invalide.
DecodeNumber <- function(word, base) {
  return(NA)
}

Voici le résultat de la fonction avec des nombres correctement formatés.

DecodeNumber("121", 10);
DecodeNumber("1010", 2);
DecodeNumber("1A", 16);
DecodeNumber("1Az", 36);
[1] 121
[1] 10
[1] 26
[1] 1691

Le format du nombre est incorrect lorsqu’au moins un chiffre est supérieur ou égal à la base.

DecodeNumber("121A", 10);
[1] NA

Pour vous aider, la fonction DecodeDigit prend en paramètre une chaîne de caractères et renvoie le vecteur des chiffres du nombre.

alphabet <- c(0:9, LETTERS)
alphabet
DecodeDigits(alphabet);
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "G" "H" "I"
[20] "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
 [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[26] 25 26 27 28 29 30 31 32 33 34 35

3. Conversion vers une base entre 2 et 36

Écrire la fonction réciproque EncodeNumber.

#' Écrit le nombre n dans une chaîne de caractères en utilisant une base comprise entre 2 et 36
#' @param n le nombre à encoder
#' @param base la base dans laquelle écrire le nombre
#' @return la chaîne de caractère contenant le nombre n écrit dans la base
EncodeNumber <- function(n, base) {
  return(NA)
}

Quelques exemples d’appels.

EncodeNumber(60, 10);
EncodeNumber(60, 2);
EncodeNumber(60, 16);
EncodeNumber(61, 36);
[1] "60"
[1] "111100"
[1] "3C"
[1] "1P"

4. Conversion vers bibi-binaire

Écrire la fonction réciproque EncodeBibi qui prend en paramètre un nombre n et renvoie une chaîne de caractère, le nombre n écrit avec le système bibi-binaire.

#' Écrit un nombre n dans une chaîne de caractère avec le système bibi-binaire
#' @param n le nombre à encoder
#' @return la chaîne de caractère contenant le nombre n écrit en bibi-binaire
EncodeBibi <- function(n) {
  return(NA)
}

Quelques exemples d’appels.

EncodeBibi(60);
EncodeBibi(2018);
[1] "HIDO"
[1] "BIDEHE"

Created: 2023-11-23 jeu. 10:12