Outils pour utilisateurs

Outils du site


nsi:tds:systeme_affichage

Ceci est une ancienne révision du document !



Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Système d'affichage

Fichier alphabet

Vous connaissez les grands afficheurs de gare ou d'aéroport qui affichent les lettres avec de gros pixels. Nous voulons automatiser ce principe.

Par exemple, on voudrait afficher le A de cette façon :

 ■■■ 
■   ■
■■■■■
■   ■
■   ■

On écrira donc l'affichage du A dans un fichier texte. Mais on ne souhaite pas utiliser plusieurs fichiers pour tout l'alphabet, alors on place toutes les lettres A-Z dans le même fichier texte, à la suite, en ajoutant un caractère joker.

 ■■■ 
■   ■
■■■■■
■   ■
■   ■
■■■■ 
■   ■
■■■■
■   ■
■■■■
 ■■■■
■    
■    
■    
 ■■■■

etc.

■■■■■
   ■ 
  ■  
 ■   
■■■■■
 ■■■ 
■   ■
   ■
  ■ 
  ■  

On sait qu'il y aura toujours exactement 27 caractères (lettres plus joker) et que toutes les lettres utilisent le même nombre de pixels horizontalement et verticalement.

Le joker est utilisé chaque fois que l'on rencontre un caractère non prévu.

Affichage

On se donne un message composé de majuscules sans accent et d'espaces. On souhaite afficher le message en utilisant l'alphabet donné dans le fichier.

Par exemple, le message "BONJOUR" donnerait la réponse :

■■■■   ■■■  ■   ■ ■■■■■  ■■■  ■   ■ ■■■■ 
■   ■ ■   ■ ■■  ■    ■  ■   ■ ■   ■ ■   ■
■■■■  ■   ■ ■ ■ ■    ■  ■   ■ ■   ■ ■■■■ 
■   ■ ■   ■ ■  ■■ ■  ■  ■   ■ ■   ■ ■   ■
■■■■   ■■■  ■   ■  ■■    ■■■   ■■■  ■   ■

On souhaite écrire ce message dans un fichier texte.

À faire

Écrire une fonction affichage(alphabet:str, message:str, dest:str) qui reçoit les arguments

  • alphabet, nom du fichier texte contenant l'alphabet
  • message, chaîne à représenter
  • dest, nom du fichier texte à créer

La fonction lit l'alphabet à utiliser, écrit le message en utilisant cet alphabet, écrit le résultat dans le fichier dest.

Pour vos essais, vous pourrez utiliser le fichier alphabet.txt mais pensez à en créer d'autres !

Un peu d'aide

Supposons que l'on veuille afficher "BONJOUR". On va devoir à un moment où à un autre récupérer l'affichage pour "B", pour "O", etc.

L'affichage de "B" (et des autres) se compose de n = 5 lignes – C'est un exemple, cela pourrait être autre chose que 5 !.

Donc première question : comment obtenir les lignes de l'affichage de "B" (par exemple) ? Et même mieux : comment obtenir chaque ligne de l'affichage de tel caractère (par exemple, la ligne 2 de B) ?

Quand vous aurez réglé cette question, il ne restera plus grand chose à faire. Vous devez donc réaliser cette fonction :

def get_car_line(car:str, line:int, alphabet:list) -> str:
    '''
    car: caractère demandé.
    line: indice de la ligne d'affichage demandée
    alphabet: tableau contenant l'alphabet
    renvoie le contenu de alphabet correspondant au caractère demandé et à ligne d'affichage demandée
    '''

Quelques remarques :

  • Dans l'exemple, alphabet aurait la forme :
    alphabet = [
      ' ■■■ ',
      '■   ■',
      '■■■■■',
      '■   ■',
      '■   ■',
      '■■■■ ',
      '■   ■',
      '■■■■ ',
      '■   ■',
      '■■■■ ',
      ...
    ]
  • Le caractère doit être un caractère dans A–Z. S'il n'y est pas on considère que l'on demande le joker. Il sera utile d'associer un indice à chaque caractère : A → 0, B → 1, … Z → 25 et pour les autres → 26 (joker)
  • Chaque caractère compte n lignes et l'alphabet a 27 caractères. alphabet compte donc exactement 27 * n lignes et il est donc possible de déterminer n connaissant alphabet.
  • Évidemment, line devrait toujours vérifier 0 <= line < n
  • Pour faire la fonction il faut raisonner ainsi : je demande la ligne 2 (line == 2) pour le caractère "B" (donc associé à un indice 1) et dans mon exemple je peux déterminer que n = 5. quel est le numéro de la ligne demandée dans alphabet ? C'est la ligne 7, la fonction devrait renvoyer alphabet[7] dans ce cas.
    Par quel calcul trouver ce 7 ?

Dernière chose, pour afficher le message (par exemple "BONJOUR", il faut énumérer les caractères du message et les lignes d'affichage (par exemple ici 5 lignes puisque chaque caractère a 5 pixels de haut). Comment articuler ces deux énumérations ?

nsi/tds/systeme_affichage.1672952766.txt.gz · Dernière modification : de goupillwiki