Partage
  • Partager sur Facebook
  • Partager sur Twitter

zLCD

zSolutions

    5 mars 2010 à 19:52:11

    Citation : Pouet_forever

    @GurneyH : Quand j'ai posté c'était pas ces fonctions qui étaient affichées. :-°


    Oui je m'était trompé j'avais mis `p` à la place de position et `n` à la place de nb. Et j'ai édité pendant qu'il postait :-°
    Et pour la deuxième j'ai corrigé. (Problème de signe (ce n'est pas -1 mais +1 et pas +nb mais -nb))
    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2010 à 19:54:31

      Bonsoir à tous,

      Me revoilà avec un petit code qui tourne :

      Fichier main.c :
      /*******************************************************************
      *                                                                  *
      *                  Affichage 7 ségments sur console                *
      *                                                                  *
      ********************************************************************/
      
                /* ------- Ecrit par UKNOW-------- */
      
      #include "header.h"
      
      //------------------------MAIN---------------------------------------
      int main()
      {
      
          long n ,i,j;
          char DisplayMap[LIGNES][COLONNES];
      
          do{
              printf("Entrez n : ");
              scanf("%ld",&n);              //Saisi du nombre en question
      
              if(n == 0) break;            //condition de fin du programme
      
              InitDM(DisplayMap);          //Effacer la table d'affichage
      
              RefreshDM(DisplayMap,n);     //Mise à jour de la table d'affichage en fonction de la saisie
      
              ShowDM(DisplayMap);          //Affichage de la table d'affichage
      
          }while(n>0);
      
          return 0;
      }
      //-------------------------------------------------------------------
      


      Fichier header.h :
      #ifndef _HEADER_H_
      #define _HEADER_H_
      
      #include <stdio.h>
      #include <stdlib.h>
      
      #define TAILLE 10
      #define LIGNES 5
      #define COLONNES 30
      
      void InitDM(char DisplayMap[LIGNES][COLONNES]);
      void DecomposeNombre(long n, int tab[]);
      void RefreshDM(char DisplayMap[LIGNES][COLONNES],long n);
      void AffichChiffre(char DisplayMap[LIGNES][COLONNES],int tab, int pos);
      
      
      #endif
      


      Fichier functions.c :
      #include "header.h"
      
      //----Initialisation de la table d'affichage (avec des espaces)------
      void InitDM(char DisplayMap[LIGNES][COLONNES]){
          int i,j;
          for(i=0;i<LIGNES;i++){
              for(j=0;j<COLONNES;j++)
                  DisplayMap[i][j] = ' ';
          }
      }
      //-------------------------------------------------------------------
      
      //-------------------------------------------------------------------
      void ShowDM(char DisplayMap[LIGNES][COLONNES]){
          int i,j;
          for(i=0;i<LIGNES;i++){
              for(j=0;j<COLONNES;j++){
                  printf("%c",DisplayMap[i][j]);
                  if(j%3 == 2) printf("  ");
              }
              printf("\n");
          }
      }
      //-------------------------------------------------------------------
      
      
      //--------------Mise à jour de l'affichage---------------------------
      void RefreshDM(char DisplayMap[LIGNES][COLONNES],long n){
          int i = 0, j = 0, ligne;
          int tab[TAILLE] = {0};
      
          DecomposeNombre(n,tab);
      
          while(tab[i] == 0) i++;
      
          for(j=i ; j < TAILLE; j++){
              AffichChiffre(DisplayMap,tab[j],j);
          }
      
      }
      //-------------------------------------------------------------------
      
      
      //--------------Décomposition du nombre en chiffres------------------
      void DecomposeNombre(long n, int tab[]){
          int i = 0 , j = 0;
          int tamp[TAILLE];
          while(n > 0 && i < TAILLE){
              tamp[i++] = n%10;
              n /= 10;
              j++;
          }
          for(i=0;i<j;i++){
              tab[TAILLE-i-1] = tamp[i];
          }
      }
      //-------------------------------------------------------------------
      
      
      //-----------------Affectation de la table d'affichage---------------
      void AffichChiffre(char DisplayMap[LIGNES][COLONNES],int tab, int pos){
          switch(tab){
              case 0 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  DisplayMap[3][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 1 :
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 2 :
                  //-------Colonne1----------
                  DisplayMap[3][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  break;
              case 3 :
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 4 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[2][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 5 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 6 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  DisplayMap[3][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 7 :
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 8 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  DisplayMap[3][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
              case 9 :
                  //-------Colonne1----------
                  DisplayMap[1][3*pos]   = '|';
                  //-------Colonne2----------
                  DisplayMap[0][3*pos+1] = '-';
                  DisplayMap[2][3*pos+1] = '-';
                  DisplayMap[4][3*pos+1] = '-';
                  //-------Colonne3----------
                  DisplayMap[1][3*pos+2] = '|';
                  DisplayMap[3][3*pos+2] = '|';
                  break;
          }
      }
      //-------------------------------------------------------------------
      


      Désolé si le code n'est pas assai commenté :) .

      Edit : Voici le résultat.
      Image utilisateur
      • Partager sur Facebook
      • Partager sur Twitter
        5 mars 2010 à 20:36:41

        Merci uknow. :)

        Tu t'es bridé un peu, non?... :p

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
          5 mars 2010 à 20:39:14

          Voilà ma solution pour le moment :) :

          #include <stdio.h>
          #include <string.h>
          
          const char *ref = " __      __  __      __  __  __  __  __ "
                            "|  |   | __| __||__||__ |__    ||__||__|"
                            "|__|   ||__  __|   | __||__|   ||__| __|";
          
          void zLCD(unsigned int n)
          {
              int i = 0;
              char str_n[10] = "";
              char line1[40] = "", line2[40] = "", line3[40] = "";
          
          
              sprintf(str_n, "%u", n);
              for (i = 0 ; str_n[i] != '\0' ; i++)
              {
                  strncat(line1, ref+((str_n[i]-'0')*4), 4);
                  strncat(line2, ref+40+((str_n[i]-'0')*4), 4);
                  strncat(line3, ref+80+((str_n[i]-'0')*4), 4);
              }
              puts(line1);
              puts(line2);
              puts(line3);
          }
          
          int main(void)
          {
              zLCD(21365);
          
              return 0;
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            5 mars 2010 à 20:41:17

            Citation : GurneyH

            Merci uknow. :)

            Tu t'es bridé un peu, non?... :p



            Au total 15 minutes de réflexion et 1h15 de (codage + debug) donc ça va ^^. Qu'en penses tu ?
            • Partager sur Facebook
            • Partager sur Twitter
              5 mars 2010 à 21:12:30

              Citation : uknow


              Au total 15 minutes de réflexion et 1h15 de (codage + debug) donc ça va ^^. Qu'en penses tu ?


              Il faut que je regarde plus en profondeur...
              Ce qui me surprend, c'est qu'il me semble que tu es bien orienté "électronique", et tu proposes un code assez "lambda"... Mais, ce n'est pas une critique! :p

              @hightam: Je regarde demain, mais ton code est très concis!

              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                5 mars 2010 à 22:03:23

                Citation : GurneyH


                Ce qui me surprend, c'est qu'il me semble que tu es bien orienté "électronique"



                J'avoue. C'est un concept comme un autre mais bon il suffit de regarder mon avatar :D après tout un microprocesseur n'est qu'un circuit électronique ;)

                Citation : GurneyH

                et tu proposes un code assez "lambda"... Mais, ce n'est pas une critique! :p



                Je ne sais pas ce que tu veux dire par un code assez "lambda" Mais bon j'avoue que pour une application "aussi simple" mon code est assai compliqué à comprendre par n'importe qui sans documentation :) .
                • Partager sur Facebook
                • Partager sur Twitter
                  5 mars 2010 à 22:19:01

                  Citation : uknow

                  assai


                  assez (pas assai) ! (désolé mais ça me choque trop là :lol: )

                  Bon aller juste pour délirer xD

                  #include <stdio.h>
                  #include <stdlib.h>
                  
                  #define DEF_BIT(nb) BIT_ ## nb
                  #define DEF_SEG(nb) SEG_ ## nb
                  #define DEF_NB(nb) N_ ## nb
                  
                  #define SEG_1 putchar('_');
                  #define SEG_4 SEG_1
                  #define SEG_7 SEG_1
                  
                  #define SEG_2 putchar('|');
                  #define SEG_3 SEG_2
                  #define SEG_5 SEG_2
                  #define SEG_6 SEG_2
                  
                  #define SPACE putchar(' ');
                  #define ENTER puts("");
                  
                  /* Pour plus de facilité pour les correspondances bits <-> segments
                   * le bit 0 est le bit 1. */
                  
                  #define BIT_1 0x0001
                  #define BIT_2 0x0002
                  #define BIT_3 0x0004
                  #define BIT_4 0x0008
                  #define BIT_5 0x0010
                  #define BIT_6 0x0020
                  #define BIT_7 0x0040
                  
                  #define N_0 (BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6)
                  #define N_1 (BIT_2 | BIT_3)
                  #define N_2 (BIT_1 | BIT_6 | BIT_7 | BIT_3 | BIT_4)
                  #define N_3 (BIT_1 | BIT_7 | BIT_4 | BIT_5 | BIT_6)
                  #define N_4 (BIT_2 | BIT_7 | BIT_6 | BIT_5)
                  #define N_5 (BIT_1 | BIT_2 | BIT_7 | BIT_5 | BIT_4)
                  #define N_6 (BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_7)
                  #define N_7 (BIT_1 | BIT_6 | BIT_5)
                  #define N_8 (BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7)
                  #define N_9 (BIT_1 | BIT_2 | BIT_7 | BIT_6 | BIT_5 | BIT_4)
                  
                  /* 
                   * Segments :
                   * 
                   *     1
                   *    ---
                   * 2 | 7 | 6
                   *    ---
                   * 3 |   | 5
                   *    ---
                   *     4
                   * 
                   * Les bits sont ordonées en fonction des numéros de segments.
                   * 
                   */
                  
                  void affiche_nb(unsigned char nb) {
                  	
                  #define MACRO_IF(x) \
                  	if (nb & DEF_BIT(x)) { DEF_SEG(x) } \
                  	else { SPACE }
                  	
                  	SPACE
                  	MACRO_IF(1)
                  	ENTER
                  	
                  	MACRO_IF(2)
                  	MACRO_IF(7)
                  	MACRO_IF(6)
                  	ENTER
                  	
                  	MACRO_IF(3)
                  	MACRO_IF(4)
                  	MACRO_IF(5)
                  	
                  #undef MACRO_IF
                  }
                  
                  void zLCD(unsigned int x) {
                  	unsigned char bit = 0x0;
                  	
                  	if (x > 9)
                  		return;
                  	
                  #define X_MACRO \
                  	X(0)	\
                  	X(1)	\
                  	X(2)	\
                  	X(3)	\
                  	X(4)	\
                  	X(5)	\
                  	X(6)	\
                  	X(7)	\
                  	X(8)	\
                  	X(9)
                  
                  #define X(nb) \
                  	case nb:	\
                  		bit = DEF_NB(nb); \
                  	break;
                  	
                  	switch (x) {
                  		X_MACRO
                  		default:
                  			break;
                  	}
                  	
                  #undef X
                  #undef X_MACRO
                  	
                  	affiche_nb(bit);
                  }
                  
                  int main(void) {
                  	unsigned int x = 5;
                  	zLCD(x);
                  	return EXIT_SUCCESS;
                  }
                  

                  Si vous me cherchez je suis déjà dehors -------->[]
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 mars 2010 à 22:25:13

                    Citation : Pouet_forever

                    Citation : uknow

                    assai


                    assez (pas assai) ! (désolé mais ça me choque trop là :lol: )



                    c'est noté :euh:
                    :lol:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 mars 2010 à 9:08:02

                      @highTam: Ca fonctionne impec.
                      Tu peux faire encore plus court, en utilisant un tableau à 2 dimensions
                      char line[3][40] = {"", "", ""};
                      
                      avec un boucle.

                      Peut-être un peu trop de nombre magique (10, 40, 4) dans ton code, mais sinon, c'est exactement ce qu'il fallait faire. :)

                      @uknow: par "lambda", je voulais dire que ta solution pour cet exercice, était plus ou moins ce qu'on fait sans utiliser les opérateurs bitwise.
                      En gros, je m'attendais à ce que tu les utilises. ;)
                      sdz\zLCD\uknow\main.c||In function `RefreshDM':|
                      sdz\zLCD\uknow\main.c|33|warning: unused variable `ligne'|
                      sdz\zLCD\uknow\main.c||In function `AffichChiffre':|
                      sdz\zLCD\uknow\main.c|156|warning: switch missing default case|
                      sdz\zLCD\uknow\main.c||In function `main':|
                      sdz\zLCD\uknow\main.c|163|warning: unused variable `i'|
                      sdz\zLCD\uknow\main.c|163|warning: unused variable `j'|
                      ||=== Build finished: 0 errors, 4 warnings ===|

                      Tu t'es assez compliqué la vie en fait, et je trouve dommage l'alignement à droite.

                      @Pouet-forever: :-°
                      if (x > 9)
                          return;
                      

                      Ton code ne peut afficher qu'un seul chiffre? o_O


                      • Partager sur Facebook
                      • Partager sur Twitter
                      Zeste de Savoir, le site qui en a dans le citron !
                        6 mars 2010 à 10:24:35

                        Citation : GurneyH

                        Ton code ne peut afficher qu'un seul chiffre? o_O


                        Merde grillé. xD :diable:

                        #include <stdio.h>
                        #include <stdlib.h>
                        
                        #define DEF_BIT(nb) BIT_ ## nb
                        #define DEF_SEG(nb) SEG_ ## nb
                        #define DEF_NB(nb) N_ ## nb
                        
                        #define SEG_1 putchar('_');
                        #define SEG_4 SEG_1
                        #define SEG_7 SEG_1
                        
                        #define SEG_2 putchar('|');
                        #define SEG_3 SEG_2
                        #define SEG_5 SEG_2
                        #define SEG_6 SEG_2
                        
                        #define SPACE putchar(' ');
                        #define ENTER puts("");
                        
                        /* Pour plus de facilité pour les correspondances bits <-> segments
                         * le bit 0 est le bit 1. */
                        
                        #define BIT_1 0x0001
                        #define BIT_2 0x0002
                        #define BIT_3 0x0004
                        #define BIT_4 0x0008
                        #define BIT_5 0x0010
                        #define BIT_6 0x0020
                        #define BIT_7 0x0040
                        
                        #define N_0 (BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6)
                        #define N_1 (BIT_2 | BIT_3)
                        #define N_2 (BIT_1 | BIT_6 | BIT_7 | BIT_3 | BIT_4)
                        #define N_3 (BIT_1 | BIT_7 | BIT_4 | BIT_5 | BIT_6)
                        #define N_4 (BIT_2 | BIT_7 | BIT_6 | BIT_5)
                        #define N_5 (BIT_1 | BIT_2 | BIT_7 | BIT_5 | BIT_4)
                        #define N_6 (BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_7)
                        #define N_7 (BIT_1 | BIT_6 | BIT_5)
                        #define N_8 (BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7)
                        #define N_9 (BIT_1 | BIT_2 | BIT_7 | BIT_6 | BIT_5 | BIT_4)
                        
                        /* 
                         * Segments :
                         * 
                         *     1
                         *    ---
                         * 2 | 7 | 6
                         *    ---
                         * 3 |   | 5
                         *    ---
                         *     4
                         * 
                         * Les bits sont ordonées en fonction des numéros de segments.
                         * 
                         */
                        
                        void affiche_nb(char * str, int len) {
                        	int i, j;
                        	
                        #define MACRO_IF(x) \
                        	if (str[i] & DEF_BIT(x)) { DEF_SEG(x) } \
                        	else { SPACE }
                        	
                        	for (j = 0; j < 3; j++) {
                        		for (i = 0; i < len; i++) {
                        			
                        			if (j == 0) {
                        				SPACE
                        				MACRO_IF(1)
                        				SPACE
                        			}
                        			else if (j == 1) {
                        				MACRO_IF(2)
                        				MACRO_IF(7)
                        				MACRO_IF(6)
                        			}
                        			else {
                        				MACRO_IF(3)
                        				MACRO_IF(4)
                        				MACRO_IF(5)
                        			}
                        			SPACE
                        		}
                        		ENTER
                        	}
                        	
                        #undef MACRO_IF
                        }
                        
                        void zLCD(unsigned int x) {
                        	char str[20] = "";
                        	int i, len;
                        	
                        	len = sprintf(str, "%d", x);
                        	
                        	for (i = 0; i < len; i++) {
                        		str[i] -= '0';
                        		
                        #define X_MACRO \
                        	X(0)	\
                        	X(1)	\
                        	X(2)	\
                        	X(3)	\
                        	X(4)	\
                        	X(5)	\
                        	X(6)	\
                        	X(7)	\
                        	X(8)	\
                        	X(9)
                        
                        #define X(nb) \
                        	case nb:	\
                        		str[i] = DEF_NB(nb); \
                        	break;
                        	
                        	switch (str[i]) {
                        		X_MACRO
                        		default:
                        			break;
                        	}
                        	
                        #undef X
                        #undef X_MACRO
                        	
                        	}
                        		
                        	affiche_nb(str, len);
                        }
                        
                        int main(void) {
                        	unsigned int x = 1234567890;
                        	zLCD(x);
                        	return EXIT_SUCCESS;
                        }
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 mars 2010 à 21:25:48

                          Citation : GurneyH

                          Tu peux faire encore plus court, en utilisant un tableau à 2 dimensions

                          char line[3][40] = {"", "", ""};
                          

                          avec un boucle.


                          Effectivement :)

                          Citation : GurneyH

                          Peut-être un peu trop de nombre magique (10, 40, 4) dans ton code, mais sinon, c'est exactement ce qu'il fallait faire. :)


                          Ouais, j'ai déjà constaté ça ! On peut bien faire :

                          #include <stdio.h>
                          #include <string.h>
                          
                          #define N_CHAR_PER_NUM 4 // Nombre de caractères dans chiffre en affichage LCD
                          #define U_INT_MAX_NUM 10 // Nombre maximal de chiffres dans un unsigned int
                          
                          const char *ref = " __      __  __      __  __  __  __  __ "
                                            "|  |   | __| __||__||__ |__    ||__||__|"
                                            "|__|   ||__  __|   | __||__|   ||__| __|";
                          
                          void zLCD(unsigned int n)
                          {
                              int i = 0;
                              char str_n[U_INT_MAX_NUM] = "";
                              char line1[U_INT_MAX_NUM*N_CHAR_PER_NUM] = "", line2[U_INT_MAX_NUM*N_CHAR_PER_NUM] = "", line3[U_INT_MAX_NUM*N_CHAR_PER_NUM] = "";
                          
                          
                              sprintf(str_n, "%u", n);
                              for (i = 0 ; str_n[i] != '\0' ; i++)
                              {
                                  strncat(line1, ref+((str_n[i]-'0')*N_CHAR_PER_NUM), N_CHAR_PER_NUM);
                                  strncat(line2, ref+N_CHAR_PER_NUM*10+((str_n[i]-'0')*N_CHAR_PER_NUM), N_CHAR_PER_NUM);
                                  strncat(line3, ref+N_CHAR_PER_NUM*10*2+((str_n[i]-'0')*N_CHAR_PER_NUM), N_CHAR_PER_NUM);
                              }
                              puts(line1);
                              puts(line2);
                              puts(line3);
                          }
                          
                          int main(void)
                          {
                              zLCD(21365);
                          
                              return 0;
                          }
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 mars 2010 à 21:29:46

                            Je Up...

                            Une dernière fois, après STOP...

                            C'est trop dur?
                            C'est trop facile?

                            Pourquoi il n'y a personne?

                            Si vous pouviez expliquer ce que vous souhaitez trouver dans les exercices...
                            Je suis vraiment ouvert à toutes les demandes!...

                            Une chose est certaine, je ne continue pas un an, à ce rythme!

                            C'est probablement moi, qui suis à coté de la plaque, mais exprimés vos désirs, svp!

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Zeste de Savoir, le site qui en a dans le citron !
                              9 mars 2010 à 22:01:06

                              Le dernier exercice était un poil trop dur je pense, mais celui-là est accessible à tous à partir du moment où on réfléchi un peu. :euh:

                              Dans ton post pour demander ce que veulent les débutants il n'y a eu (pratiquement) que les gens avec un niveau acceptable (non débutant s'entend) qui ont répondus. Si les débutants ne disent pas clairement ce qu'ils veulent (ou ne font pas les exos) je pense que (et c'est bien dommage) ce n'est pas la peine de continuer.

                              Pas assez de temps ? -> Je ne pense pas.
                              Trop compliqué ? -> Je ne pense pas.
                              Quelle est la raison alors ? -> Place aux demandeurs d'exos ...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 mars 2010 à 22:25:51

                                Comme l'a dit Pouet_forever l'exercice précédant sur les grands entiers était assez dur pour des débutants bien qu'en passant un peu de temps dessus on pouvait réussir à avoir quelque chose de potable.
                                Encore une fois Pouet l'a dit avant moi, très peu de vrai débutants s'essaye à tes execices (plus surprenants encore des débutants demandent des fois des exercices adaptés pour eux sur le forum or ce topic est fait pour eux mais on ne les voit pas).

                                Ensuite, pour en venir à l'exercice de cette quinzaine, il n'y a pas vraiment de difficultés pour parvenir à un algorithme naïf tel que celui de uknow. De plus cet exercice a l'avantage de pouvoir être abordé de différentes façons :
                                • comme en électronique on on analyse l'état des (4) entrées pour agir en conséquences grâce aux expressions des segments.
                                • En testant pour quel chiffre on doir allumer tel segment (uknow)
                                • Ou encore utiliser une chaîne modèle et "piochée" dedans comme l'a fait HighTam


                                Ensuite il faut voir avec les vrais débutants (qui passent malheureusement trop souvent) pour savoir les exercices qu'ils voudraient. Bien que la, ils ont tout les exercices qu'il faut et surtout il ont une personne compétente qui supervise le tout.

                                En conclusion, si les débutants viennent tant mieux pour eux il ont tout à gagner, dans le cas contraire il n'y aura plus rien à faire.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 mars 2010 à 23:19:47

                                  char str[20] = "";
                                  	int i, len;
                                  	
                                  	len = sprintf(str, "%d", x);
                                  	
                                  	for (i = 0; i < len; i++) {
                                  		str[i] -= '0';
                                  

                                  Jolie astuce, de laisser sprintf trouver les chiffres de x :-°
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 mars 2010 à 15:46:26

                                    Citation : GurneyH

                                    Je Up...

                                    Une dernière fois, après STOP...

                                    C'est trop dur?
                                    C'est trop facile?

                                    Pourquoi il n'y a personne?

                                    Si vous pouviez expliquer ce que vous souhaitez trouver dans les exercices...
                                    Je suis vraiment ouvert à toutes les demandes!...

                                    Une chose est certaine, je ne continue pas un an, à ce rythme!

                                    C'est probablement moi, qui suis à coté de la plaque, mais exprimés vos désirs, svp!

                                    :(
                                    c'est dommage qu'effectivement pas beaucoup exprime leur talent !
                                    personnellement je trouves les exos ardus, mais ça me fait progresser et j'essaye de participer comme je peux.... :-°
                                    Je crois que le problème vient du fait de trouver un noyau qui a le même niveau et qui n'as pas peur de montrer ce qu'il sait faire..

                                    Et qu'aussi les débutants pensent fabriquer des jeux en cliquant des doigts...... et qu'ils s'apercoivent peut être qu'il faut beaucoup de travail personnel pour aboutir à un petit truc.....

                                    Autrement le principe j'adhère à 800% : l'enonce est clair, la correction est magistrale, excellente....je trouves pas de qualificatif à la hauteur du travail accompli.... :-°

                                    (c'est combien le bonet d'âne il m'en faudrait au moins un) :lol:
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      10 mars 2010 à 16:40:57

                                      J'ai essayé avec les opérateurs bitwise, mais bug à l'affichage...
                                      #include <stdio.h>
                                      #include <stdlib.h>
                                      #define T 3
                                      #define L 3
                                      
                                      void affiche(int p[T][L])
                                      {
                                              int i = 0, j = 0;
                                              for(; i < T; ++i) {
                                                      for(; j < L; ++j)
                                                              printf("%c", p[i][j]);
                                                      putchar('\n');
                                              }
                                      }
                                      void z_lcd(int i_1, int i_2, int i_3, int i_4, int p[T][L])
                                      {
                                              if(!i_1 & i_3 | i_1 & !i_4 | i_2 & i_3 | !i_2 & !i_4 | i_1 & !i_2 | !i_1 & i_2 & i_4)// A
                                                      p[0][1] = '_';
                                      
                                              if(i_1 & !i_2 | !(i_3 | i_4) | !i_3 & (i_1 ^ i_2) | i_1 & i_3 | i_2 & !i_4)// F
                                                      p[1][0] = '|';
                                      
                                              if(i_3 & (i_1 | !i_2 | !i_4) | i_1 & i_4 | !i_3 & (i_1 ^ i_2))// G
                                                      p[1][1] = '_';
                                      
                                              if(!i_1 & !i_2 | !i_2 & !i_3 | !i_2 & !i_4 | !i_1 & !(i_3 ^i_4) | i_1 & !i_3 & i_4)// B
                                                      p[1][2] = '|';
                                      
                                              if(!i_2 & !i_4 | i_3 & !i_4 | i_1 & i_2 | i_1 & i_3)// E
                                                      p[2][0] = '|';
                                      
                                              if(i_1 & !i_3 | !(i_1 | i_2 | i_4) | i_2 & (i_3 ^i_4) | !i_2 & i_3 & i_4)// D
                                                      p[2][1] = '_';
                                      
                                              if(i_1 ^i_2 | !i_1 & !i_2 & !i_4 | i_2 & (i_3 ^i_4) | !i_2)// C
                                                      p[2][2] = '|';
                                      
                                              p[0][0] = ' ';
                                      }
                                      
                                      int main(void)
                                      {
                                              int p[T][L];
                                              z_lcd(1,0,0,0,p);
                                              affiche(p);
                                              return 0;
                                      }
                                      

                                      Merci d'avance,
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 mars 2010 à 16:41:53

                                        Moi je l'ai fait mais j'avoue que les autres je n'ai pas forcément eu le courage de les faire car c'était trop compliqué pour mon niveau. Mais celui-ci me paraissait à ma portée et d'ailleurs j'ai réussi avec un peu (beaucoup) d'aide de votre part j'avoue mais j'ai réussi ^^
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          10 mars 2010 à 17:09:41

                                          Bonjour,
                                          Voici ma version:
                                          #include <stdio.h>
                                          
                                          int zLCD(int nb)
                                          {
                                              char chaine[1000],haut[1000]="",milieu[1000]="",bas[1000]="";
                                              int taille=0,i=0;
                                              taille=sprintf(chaine,"%d",nb);
                                              for(i=0;i<taille;i++)
                                              {
                                                  switch (chaine[i])
                                                  {
                                                  case '0':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s | |",milieu);
                                                  sprintf(bas,   "%s |_|",bas);
                                                  break;
                                                  case '1':
                                                  sprintf(haut,  "%s    ",haut);
                                                  sprintf(milieu,"%s   |",milieu);
                                                  sprintf(bas,   "%s   |",bas);
                                                  break;
                                                  case '2':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s  _|",milieu);
                                                  sprintf(bas,   "%s |_ ",bas);
                                                  break;
                                                  case '3':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s  _|",milieu);
                                                  sprintf(bas,   "%s  _|",bas);
                                                  break;
                                                  case '4':
                                                  sprintf(haut,  "%s    ",haut);
                                                  sprintf(milieu,"%s |_|",milieu);
                                                  sprintf(bas,   "%s   |",bas);
                                                  break;
                                                  case '5':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s |_ ",milieu);
                                                  sprintf(bas,   "%s  _|",bas);
                                                  break;
                                                  case '6':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s |_ ",milieu);
                                                  sprintf(bas,   "%s |_|",bas);
                                                  break;
                                                  case '7':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s   |",milieu);
                                                  sprintf(bas,   "%s   |",bas);
                                                  break;
                                                  case '8':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s |_|",milieu);
                                                  sprintf(bas,   "%s |_|",bas);
                                                  break;
                                                  case '9':
                                                  sprintf(haut,  "%s  _ ",haut);
                                                  sprintf(milieu,"%s |_|",milieu);
                                                  sprintf(bas,   "%s  _|",bas);
                                                  break;
                                                  }
                                              }
                                              printf("%s\n%s\n%s",haut,milieu,bas);
                                              return 0;
                                          }
                                          int main()
                                          {
                                              zLCD(1234567890);
                                              return 0;
                                          }
                                          

                                          Elle est simple et n'utilise pas les opérateurs bitwise (d'ailleurs je ne sait pas ce que c'est).
                                          Emmflo

                                          EDIT:
                                          Elle affiche ça:
                                          zLCD
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            10 mars 2010 à 17:10:39

                                            @Colb Seton, je n'arrive pas à utiliser ton code. :-°

                                            Je n'obtiens que
                                            _ 
                                            
                                            
                                            
                                            Process returned 0 (0x0)   execution time : 0.015 s
                                            Press any key to continue.
                                            
                                            o_O

                                            Elles font peur, tes lignes de if. :-° brrrr.

                                            @Emmflo: Merci, je regarde. :)

                                            J'ai regardé.
                                            Ca fonctionne bien, mais tu peux maintenant essayer de factoriser ton code(tu as les mêmes lignes pour chaque chiffre) ;) .
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Zeste de Savoir, le site qui en a dans le citron !
                                              10 mars 2010 à 17:21:28

                                              Citation : GurneyH

                                              @Colb Seton, je n'arrive pas à utiliser ton code. :-°

                                              Je n'obtiens que

                                              _ 
                                              
                                              
                                              
                                              Process returned 0 (0x0)   execution time : 0.015 s
                                              Press any key to continue.
                                              

                                              o_O

                                              Elles font peur, tes lignes de if. :-° brrrr.


                                              Bah oué...
                                              J'aimerais bien savoir pourquoi ^^ .
                                              Merci d'avance,
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                10 mars 2010 à 17:24:21

                                                Désolé, je n'avais pas vu

                                                Citation : Colb Seton


                                                J'ai essayé avec les opérateurs bitwise, mais bug à l'affichage...

                                                :-°

                                                Dans ta fonction d'affichage
                                                int i = 0, j = 0;
                                                        for(; i < T; ++i) {
                                                                for(; j < L; ++j)
                                                

                                                Ce n'est pas la première fois que tu fais cette erreur. Tu devrais écouter les personnes qui te disent d'écrire
                                                int i, j;
                                                for(i = 0; i < T; ++i) {
                                                    for(j = 0; j < L; ++j)
                                                

                                                Il y a une raison. ;)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Zeste de Savoir, le site qui en a dans le citron !
                                                  10 mars 2010 à 18:50:15

                                                  Ah oui, surtout dans la deuxième boucle.

                                                  Code final :
                                                  #include <stdio.h>
                                                  #include <stdlib.h>
                                                  #define T 3
                                                  #define L 3
                                                  
                                                  void affiche(char p[T][L])
                                                  {
                                                          int i = 0, j = 0;
                                                          for(; i < T; ++i) {
                                                                  for(j = 0; j < L; ++j)
                                                                          printf("%c", p[i][j]);
                                                                  putchar('\n');
                                                          }
                                                  }
                                                  void z_lcd(int i_1, int i_2, int i_3, int i_4, char p[T][L])
                                                  {
                                                          if(!i_1 & i_3 | i_1 & !i_4 | i_2 & i_3 | !i_2 & !i_4 | i_1 & !i_2 | !i_1 & i_2 & i_4)// A
                                                                  p[0][1] = '_';
                                                  
                                                          if(i_1 & !i_2 | !(i_3 | i_4) | !i_3 & (i_1 ^ i_2) | i_1 & i_3 | i_2 & !i_4)// F
                                                                  p[1][0] = '|';
                                                  
                                                          if(i_3 & (i_1 | !i_2 | !i_4) | i_1 & i_4 | !i_3 & (i_1 ^ i_2))// G
                                                                  p[1][1] = '_';
                                                  
                                                          if(!i_1 & !i_2 | !i_2 & !i_3 | !i_2 & !i_4 | !i_1 & !(i_3 ^i_4) | i_1 & !i_3 & i_4)// B
                                                                  p[1][2] = '|';
                                                  
                                                          if(!i_2 & !i_4 | i_3 & !i_4 | i_1 & i_2 | i_1 & i_3)// E
                                                                  p[2][0] = '|';
                                                  
                                                          if(i_1 & !i_3 | !(i_1 | i_2 | i_4) | i_2 & (i_3 ^i_4) | !i_2 & i_3 & i_4)// D
                                                                  p[2][1] = '_';
                                                  
                                                          if(i_1 ^ i_2 | !i_3 & i_4 | !(i_3 ^ i_4) & !i_2)// C
                                                                  p[2][2] = '|';
                                                  
                                                          p[0][0] = ' ';
                                                          p[0][2] = ' ';
                                                  }
                                                  
                                                  int main(void)
                                                  {
                                                          char p[T][L] = {0};
                                                          z_lcd(1,1,1,1,p);
                                                          affiche(p);
                                                          return 0;
                                                  }
                                                  
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    10 mars 2010 à 19:17:25

                                                    Rebonjour ou plutôt bonsoir.
                                                    Voici la version factorisé de ma solution:
                                                    #include <stdio.h>
                                                    
                                                    int ligne(char* ligne,int choix)
                                                    {
                                                        if(choix==1)
                                                        sprintf(ligne,  "%s  _ ",ligne);
                                                        else if(choix==2)
                                                        sprintf(ligne,  "%s | |",ligne);
                                                        else if(choix==3)
                                                        sprintf(ligne,  "%s |_|",ligne);
                                                        else if(choix==5)
                                                        sprintf(ligne,  "%s   |",ligne);
                                                        else if(choix==6)
                                                        sprintf(ligne,  "%s |_ ",ligne);
                                                        else if(choix==7)
                                                        sprintf(ligne,  "%s  _|",ligne);
                                                        else
                                                        sprintf(ligne,  "%s    ",ligne);
                                                        return 0;
                                                    }
                                                    int zLCD(int nb)
                                                    {
                                                        char chaine[1000],haut[1000]="",milieu[1000]="",bas[1000]="";
                                                        int taille=0,i=0;
                                                        taille=sprintf(chaine,"%d",nb);
                                                        for(i=0;i<taille;i++)
                                                        {
                                                            switch (chaine[i])
                                                            {
                                                            case '0':
                                                            ligne(haut,1);
                                                            ligne(milieu,2);
                                                            ligne(bas,3);
                                                            break;
                                                            case '1':
                                                            ligne(haut,0);
                                                            ligne(milieu,5);
                                                            ligne(bas,5);
                                                            break;
                                                            case '2':
                                                            ligne(haut,1);
                                                            ligne(milieu,7);
                                                            ligne(bas,6);
                                                            break;
                                                            case '3':
                                                            ligne(haut,1);
                                                            ligne(milieu,7);
                                                            ligne(bas,7);
                                                            break;
                                                            case '4':
                                                            ligne(haut,0);
                                                            ligne(milieu,3);
                                                            ligne(bas,5);
                                                            break;
                                                            case '5':
                                                            ligne(haut,1);
                                                            ligne(milieu,6);
                                                            ligne(bas,7);
                                                            break;
                                                            case '6':
                                                            ligne(haut,1);
                                                            ligne(milieu,6);
                                                            ligne(bas,3);
                                                            break;
                                                            case '7':
                                                            ligne(haut,1);
                                                            ligne(milieu,5);
                                                            ligne(bas,5);
                                                            break;
                                                            case '8':
                                                            ligne(haut,1);
                                                            ligne(milieu,3);
                                                            ligne(bas,3);
                                                            break;
                                                            case '9':
                                                            ligne(haut,1);
                                                            ligne(milieu,3);
                                                            ligne(bas,7);
                                                            break;
                                                            default: return 1;
                                                            }
                                                        }
                                                        printf("%s\n%s\n%s",haut,milieu,bas);
                                                        return 0;
                                                    }
                                                    void viderBuffer()
                                                    {
                                                        int c = 0;
                                                        while (c != '\n' && c != EOF)
                                                        {
                                                            c = getchar();
                                                        }
                                                    }
                                                    int main()
                                                    {
                                                        int nb=0,continuer=1;
                                                        char choix;
                                                        while(continuer)
                                                        {
                                                        printf("Entrez un nombre a afficher : ");
                                                        scanf("%d",&nb);
                                                        zLCD(nb);
                                                        printf("\n\nVoulez vous quitter?(o=oui,n=non) : ");
                                                        viderBuffer();
                                                        scanf("%c",&choix);
                                                        viderBuffer();
                                                        printf("\n");
                                                        if(choix=='o')
                                                        continuer=0;
                                                        nb=0;
                                                        }
                                                        return 0;
                                                    }
                                                    


                                                    Je ne sait pas si c'est vraiment mieux.
                                                    Emmflo
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      10 mars 2010 à 19:19:43

                                                      Citation : GurneyH

                                                      Tu devrais écouter les personnes qui te disent d'écrire

                                                      int i, j;
                                                      for(i = 0; i < T; ++i) {
                                                          for(j = 0; j < L; ++j)
                                                      


                                                      Il y a une raison. ;)


                                                      Même en te faisant la remarque 50.000 fois, en te plantant dans chaque code où tu utilises des boucles imbriquées tu ne veux pas mettre i=0 et j=0 dans tes for, là franchement je bloque. :-°
                                                      Ya une raison particulière ? Si tu veux pas utiliser le for comme il se doit t'as qu'a utiliser les boucles while ou do...while. :-°

                                                      Je pense que tu devrais écouter ton compilo aussi. :) (ce n'est que des suggestions mais en général elles sont de bonne augure ;) )

                                                      main.c: In function ‘z_lcd’:
                                                      main.c:17: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:17: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:17: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:17: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:17: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:17:87: warning: C++ style comments are not allowed in ISO C90
                                                      main.c:17:87: warning: (this will be reported only once per input file)
                                                      main.c:20: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:20: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:20: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:20: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:23: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:23: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:26: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:26: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:26: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:26: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:29: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:29: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:29: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:32: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:32: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:32: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:35: warning: suggest parentheses around arithmetic in operand of |
                                                      main.c:35: warning: suggest parentheses around arithmetic in operand of |
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        10 mars 2010 à 19:32:34

                                                        Je n'en ai pas, mon compilo est pas très sévère sous windows.
                                                        De toute façon, le "|" n'est pas prioritaire sur le "&". C'est le même principe que la multiplication et l'addition si je me trompe pas (et si j'ai compris les warnings).
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 mars 2010 à 20:21:34

                                                          Citation : Colb-Seton

                                                          Je n'en ai pas, mon compilo est pas très sévère sous windows.
                                                          De toute façon, le "|" n'est pas prioritaire sur le "&". C'est le même principe que la multiplication et l'addition si je me trompe pas (et si j'ai compris les warnings).


                                                          Les parenthèses te permettent d'être sur de toi. Ici ça passe, mais tu aura des surprises...

                                                          En passant, le but d'utiliser les opérateurs bitwise ici, c'est d'utiliser 4 bits.
                                                          Tu utilises 4 int soit 4 * la taille d'un int sur ta plateforme!

                                                          Pour le coup, ça sert juste à rendre le code confu...
                                                          Et, le but ce n'était pas de transposer ça

                                                          Citation : wikipédia


                                                          En notant les Entrée 1, 2, 3, 4 du tableau ci-dessus respectivement i1, i2, i3 et i4, les équations des segments(pour afficher les nombres de 0 à F) sont:

                                                          * a = (not(i1) and i3) or (i1 and not(i4)) or (i2 and i3) or not(i2 or i4) or (i1 and not(i2) and not(i3))or (not(i1) and i2 and i4)
                                                          * b = not(i1 or i2) or not(i2 or i3) or not(i2 or i4) or (not(i1) and not(i3 xor i4)) or (i1 and not(i3) and i4)
                                                          * c = (i1 xor i2) or (not(i3) and i4) or (not(i3 xor i4) and not(i2))
                                                          * d = (i1 and not(i3)) or not(i1 or i2 or i4) or (i2 and (i3 xor i4)) or (not(i2) and i3 and i4)
                                                          * e = not(i2 or i4) or (i3 and not(i4)) or (i1 and i2) or (i1 and i3)
                                                          * f = (i1 and not(i2)) or not(i3 or i4) or (not(i3) and (i1 xor i2)) or (i1 and i3) or (i2 and not(i4))
                                                          * g = (i3 and (i1 or not(i2) or not(i4))) or (i1 and i4) or (not(i3) and (i1 xor i2))

                                                          On peut retrouver ces équations en établissant la table de Karnaugh de chaque segment ; il existe d'autres possibilités de formules.


                                                          à la lettre.

                                                          Personnellement, la version qui stocke les chiffres sur 7 bits, me semble bien plus intéressante. ;)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Zeste de Savoir, le site qui en a dans le citron !
                                                            11 mars 2010 à 0:28:37

                                                            Affiche les nombres passés en ligne de commande, dans les deux formats proposés (le format est passé en paramètre à la fonction zLCD) :
                                                            $ ./a.out 0 1234567890
                                                             _  
                                                            | | 
                                                            |_| 
                                                             -  
                                                            | | 
                                                                
                                                            | | 
                                                             -  
                                                                 _   _       _   _   _   _   _   _  
                                                              |  _|  _| |_| |_  |_    | |_| |_| | | 
                                                              | |_   _|   |  _| |_|   | |_|  _| |_| 
                                                                 -   -       -   -   -   -   -   -  
                                                              |   |   | | | |   |     | | | | | | | 
                                                                 -   -   -   -   -       -   -      
                                                              | |     |   |   | | |   | | |   | | | 
                                                                 -   -       -   -       -   -   -  
                                                            $

                                                            Un peu inspiré du code de HighTam, mais sans sprintf.
                                                            #include <stdio.h>
                                                            #include <stdlib.h>
                                                            #include <string.h>
                                                            
                                                            #define COLS_PER_DIGIT 4
                                                            #define MAX_LINES_PER_DIGIT 5
                                                            #define U_INT_MAX_NUM 10
                                                            
                                                            static const char *const glyphs3[] = {
                                                            	" _       _   _       _   _   _   _   _  ",
                                                            	"| |   |  _|  _| |_| |_  |_    | |_| |_| ",
                                                            	"|_|   | |_   _|   |  _| |_|   | |_|  _| ",
                                                            	0
                                                            };
                                                            
                                                            static const char *const glyphs5[] = {
                                                            	" -       -   -       -   -   -   -   -  ",
                                                            	"| |   |   |   | | | |   |     | | | | | ",
                                                            	"         -   -   -   -   -       -   -  ",
                                                            	"| |   | |     |   |   | | |   | | |   | ",
                                                            	" -       -   -       -   -       -   -  ",
                                                            	0
                                                            };
                                                            
                                                            void zLCD(unsigned int n, const char *const *glyphs) {
                                                            	char screen[MAX_LINES_PER_DIGIT][COLS_PER_DIGIT * U_INT_MAX_NUM + 1] = { 0 };
                                                            	int i, ncols = 0;
                                                            
                                                            	do {
                                                            		ncols += COLS_PER_DIGIT;
                                                            		for (i = 0; glyphs[i]; ++i) {
                                                            			memcpy(&screen[i][COLS_PER_DIGIT * U_INT_MAX_NUM - ncols],
                                                            			       &glyphs[i][(n % 10) * COLS_PER_DIGIT],
                                                            			       COLS_PER_DIGIT);
                                                            		}
                                                            	} while ((n /= 10) > 0);
                                                            	for (i = 0; glyphs[i]; ++i) {
                                                            		puts(&screen[i][COLS_PER_DIGIT * U_INT_MAX_NUM - ncols]);
                                                            	}
                                                            }
                                                            
                                                            int main(int argc, char **argv) {
                                                            	int i;
                                                            
                                                            	for (i = 1; i < argc; ++i) {
                                                            		const int n = atoi(argv[i]);
                                                            		if (n >= 0) {
                                                            			zLCD(n, glyphs3);
                                                            			zLCD(n, glyphs5);
                                                            		}
                                                            	}
                                                            
                                                            	return 0;
                                                            }
                                                            
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              11 mars 2010 à 1:03:53

                                                              Citation : Marc Mongenet


                                                              Affiche les nombres passés en ligne de commande, dans les deux formats proposés (le format est passé en paramètre à la fonction zLCD) :



                                                              Top, merci! :)

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Zeste de Savoir, le site qui en a dans le citron !

                                                              zLCD

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown