Outils pour utilisateurs

Outils du site


nsi:tds:systeme_affichage

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
nsi:tds:systeme_affichage [2021/12/05 17:46] – créée goupillwikinsi:tds:systeme_affichage [2024/01/25 14:03] (Version actuelle) goupillwiki
Ligne 15: Ligne 15:
 </code> </code>
  
-On écrira donc l'affichage du ''A'' dans un fichier texte. Mais on ne souhaite pas utiliser plusieur 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.+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.
  
 <code lang-none> <code lang-none>
Ligne 49: Ligne 49:
  
 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. 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 ===== ===== Affichage =====
Ligne 57: Ligne 59:
  
 <code lang-none> <code lang-none>
-■■■■   ■■■  ■■■■■  ■■■  ■   ■ ■■■■  +■■■■   ■■■  ■   ■ ■■■■■  ■■■  ■   ■ ■■■■  
-■   ■ ■   ■    ■  ■   ■ ■   ■ ■   ■ +■   ■ ■   ■ ■■  ■    ■  ■   ■ ■   ■ ■   ■ 
-■■■■  ■   ■    ■  ■   ■ ■   ■ ■■■■  +■■■■  ■   ■ ■ ■ ■    ■  ■   ■ ■   ■ ■■■■  
-■   ■ ■   ■ ■  ■  ■   ■ ■   ■ ■   ■ +■   ■ ■   ■ ■  ■■ ■  ■  ■   ■ ■   ■ ■   ■ 
-■■■■   ■■■   ■■    ■■■   ■■■  ■   ■+■■■■   ■■■  ■   ■  ■■    ■■■   ■■■  ■   ■
 </code> </code>
  
Ligne 75: Ligne 77:
 La fonction lit l'alphabet à utiliser, écrit le message en utilisant cet alphabet, écrit le résultat dans le fichier ''dest''. 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 l'alphabet+Pour vos essais, vous pourrez utiliser le fichier {{ :nsi:tds:alphabet.txt |}} mais pensez à en créer d'autres ! 
 + 
 +===== Un peu d'aide ===== 
 + 
 +=== Ouvrir le fichier === 
 + 
 +<code python> 
 +f = open(filename, 'r', encoding='utf8'
 +content = f.read() 
 +f.close() 
 +lines = content.split('\n'
 +</code> 
 + 
 +Suite à ce code, ''lines'' contient un tableau où chaque item est une ligne du fichier. 
 + 
 +<code> 
 +[' ■■■ ', '■   ■', '■■■■■', '■   ■', '■   ■', '■■■■ ', '■   ■', ..., ''
 +</code> 
 + 
 +Vous remarquez que la dernière ligne est vide. Cela peut arriver mais n'est pas certain. Cela dépend de comment à été écrit le fichier. On peut s'assurer que la dernière ligne n'est pas vide en supprimant toute dernière ligne qui serait vide : 
 + 
 +<code python> 
 +while lines[-1] == '': 
 +    lines.pop() 
 +</code> 
 + 
 +La fonction `pop`a pour effet d'enlever le dernier élément. 
 + 
 +=== Accéder à une ligne === 
 + 
 +Maintenant que nous disposons de ''lines'', nous pouvons facilement consulter le contenu d'une ligne. 
 + 
 +<code python> 
 +>>> lines[2] 
 +'■■■■■' 
 +</code> 
 + 
 +=== Parcours caractères / lignes === 
 + 
 +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 : 
 + 
 +<code python> 
 +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 
 +    ''' 
 +</code> 
 + 
 +Quelques remarques : 
 +  * Dans l'exemple, ''alphabet'' aurait la forme :\\ <code python> 
 +alphabet = [ 
 +  ' ■■■ ', 
 +  '■   ■', 
 +  '■■■■■', 
 +  '■   ■', 
 +  '■   ■', 
 +  '■■■■ ', 
 +  '■   ■', 
 +  '■■■■ ', 
 +  '■   ■', 
 +  '■■■■ ', 
 +  ... 
 +]</code> 
 +  * 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 ? 
 + 
 +=== Fichier de sortie === 
 + 
 +Supposons que vous ayez obtenu un résultat formé des 5 lignes de pixels pour écrire BONJOUR, dans une variable ''result''.
  
 +Il faut encore mettre les lignes ensemble et écrire dans un fichier :
  
 +<code python>
 +content = '\n'.join(result) # recolle les lignes
 +f = open(filename, 'w', encoding='utf8')
 +f.write(content)
 +f.close()
nsi/tds/systeme_affichage.1638722806.txt.gz · Dernière modification : de goupillwiki