Un programme

Fermé
zack - Modifié le 13 déc. 2020 à 17:15
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 14 déc. 2020 à 21:10
Bonjour,

Bonjour, je ne suis encore qu'un débutant dans la programmation en langage C. Mais je voudrais créer un programme permettant de convertir un message ou une lettre a des étoile , exemple la A va etre comme ca


*


    *
   **
  ***
 *    *


merci
Configuration: Windows / Chrome 87.0.4280.88

7 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 14 déc. 2020 à 15:11
Salut zack,

Sous Linux, il y a un petit utilitaire qui fait cela et permet d'afficher des bannières de texte passé en ligne de commande.

Cela s'appelle "banner" ou "sysvbanner".

Tu as le code source d'origine disponible là, par exemple dans le fichier sysvbanner_1.0.orig.tar.gz

https://packages.debian.org/buster/sysvbanner

(le code original date de 1988 et est remarquable d'efficacité)

En regardant le source, tu vois comment le concepteur a créé une seule chaîne de caractères C, stockant les glyphes des lettres de l'alphabet sous la forme de blocs de 7x7 caractères #, en majuscules et minuscules, et de la ponctuation, dans l'ordre des codes ASCII des caractères correspondants, dans une chaîne du type :

char * glyphs[] = 
{   
    "#     #  #*#        ##    # #      #     ##     ########",    
    "#     #   #         ##   #  #      ##   ####    ##     #",
    "#     #   #         ##  #   #      # # # ## #   ##     #",
    "#######   #         ####    #      #  #  ##  #  ##     #",
    "#     #   #   #     ##  #   #      #     ##   # ##     #",
    "#     #   #   #     ##   #  #      #     ##    ###     #",
    "#     #  ###   ##### #    # ########     ##     ########"
};


Tu devrais procéder de façon similaire : séparer les données représentant les lettres (glyphes) du code.

Ensuite, le code calcule, en fonction du code ASCII, le début de chaque lettre, affiche la première ligne de 7 caractères, et calcule l'emplacement de chacune des 6 autres lignes sachant que les caractères ont une largeur de 7 et sont stockés par rangées de 8. Si des caractères avec des codes ASCII non présents dans les glyphes sont saisis, ils sont remplacés par un bloc vide.

Avec ce procédé, le code lui même tient en 30 lignes.

Dal
1
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
13 déc. 2020 à 17:15
Bonjour,

C'est pour quand ?
0
2,3 jours enfin comme vous voulez merci
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
13 déc. 2020 à 17:46
0
int n;
char mes;
 printf("veuilleztaper votre message\n");
 scanf("%c",&mes);
if(mes='A' ) {
printf("1\n"); if(n=1){

  printf(" * \n");
  printf("***\n");
  printf("* *\n");} 
else { printf("error");
  }  
}

 
 else { printf(" error");
}

bnj c est mon essaye ya plein des faute mais j arrive pas a fixée ,la dernière session était ma 6 ème session, c'est pourquoi j'ai besoin d'aide ,j ai essayer de le faire , j ai fait des recherches sur intrnet pendant 3 jours mais pour rien, si vous pouvez m'aider à faire l'algorithme ou me donnez certaines techniques pour le faire ou pour minimiser les lignes, merci beaucoup(mon idée etait de transformer les lettres en chiffre aprés en étoile mais cest trops et un peux compliquer et je sais pas comment faire pour un mot ou un message )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
14 déc. 2020 à 16:30
Bonjour,

Pour faire ce genre de code, cela n'est pas si simple. Il faut connaître les tableaux et les fonctions sinon ça devient trop lourd.
En lisant ton code, tu as une double erreur ligne 5 et ligne 6 où tu effectues des assignations dans un
if
au lieu de faire des comparaisons (en utilisant le double
==
). Est-ce une faute d'inattention ou sinon c'est qu'il te manque les bases pour effectuer ce type de code?
0
Bonjour
merci pour l'aide , c'est une faute d'inattention et de base ( je suis un débutant) et en plus c'est ma première fois que je utilise les char dans un exercice . de quelles tableaux et les fonctions tu parle ( j'ai pas compris)
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
14 déc. 2020 à 21:10
Il te faut créer des fonctions intermédiaires pour gérer des morceaux de ton code. Et j'envisageai que tu utilises des tableaux qui seraient indexés par le code ASCII de tes char. Si tu connais à peine les char, ton exercice est un effort important à faire.

Un exemple, avec des lettres de 5x5:
          "**** "            " *** "            " ****"
          "*   *"            "  *  "            "*    "
Lettre B  "**** "  Lettre I  "  *  "  Lettre G  "* ***"
          "*   *"            "  *  "            "*   *"
          "**** "            " *** "            " *** "


On doit écrire les caractères une ligne après l'autre, la première ligne est:
****    ***    ****

Vois tu pourquoi? Puis les quatre autres :
*   *    *    *    
****     *    * ***
*   *    *    *   *
****    ***    *** 
Je te propose d'écrire 2 fonctions. Une qui s'appelle
void ecrireLaIemeLigneDuChar(int i, char car);
. Vois-tu ce qu'il faut faire pour déjà écrire la première ligne en utilisant cette fonction? Tu peux alors écrire la fonction qui écrit tout le mot :
void ecrireMot(char* mot);
.
0