GBlog -Everything is possible

Dimanche 29 Février 2004

[C] - Debuts en C.

Debuts en C.

Je me suis enfin mit au C et c'est vraiment un language chiant d'un point de vue rigueur de la synthaxe, comparer a mon php habituel, mais cela reste un truc vraiment fascinant.

Bref, j'ai passer la nuit a faire un script de generation de sapin de noel, qui ressemble à ceci :

#include <stdio.h>
void sapin(int row){

// Declaration des variables.
int i,lines,c,stars,a,max,d,decal,mode;

// Boucle 1 = compte les etoile tout en bas du sapin,
// Boucle 2 = Dessine le sapin.
for( mode = 1; mode <= 2 ; mode++){

 // Réglages de valeurs par defauts
 // decal -> decalage a chaque nouvelle branche
 // lines -> nombre de ligne pour la premiere branche
 // stars -> etoile sur la premiere ligne de la premiere branche

 decal = 1; lines = 4; stars = 1;

 // Boucle sur les branches
 for(i = 1;i <= row;i++){

  // Boucles sur les lignes
  for(c = 1;c <= lines ; c++){

   // Si mode sapin, afficher la ligne concernée
   if(mode == 2){

    // Affichage des espace ainsi que des etoiles
    for(d = 1; d <= max/2 - stars/2;d++, putchar(' '));
    for(a = 1;a <= stars; a += 1, putchar('*'));
    putchar('\n');
   }

   // Ajout d'etoiles pour la ligne inferieur
   stars = stars + 2;
  }

  // Incrementation du nombre de lignes
  lines ++;

  // Si on a depasser 3 branches, ajouter un decalage toutes les 2 branches
  if(i >= 3 && i % 2 == 1) decal++;

  // Supression des etoiles pour faire la nouvelle branche
  stars = stars - (2 * decal) - 2;
 }

 // Calcul du nombre d'etoile en bas du sapin
 max = stars + 2*decal;
}

// Pour faire le pied du sapin, pair ou impair
a = row;
if(row % 2 == 0) a = row + 1;

// Generation du pied
for(c = 1;c <= row;c++){

 // Affichage des espace ainsi que des bout d'ecorce
 for(d = 1; d <= max/2 - a/2;d++ , putchar(' '));
 for(d = 1;d <= a;d++ , putchar('|'));
 putchar('\n');
}
}

// Fonction de conversion de type, pompée.. Thanks google.
int entier(char * chaine){
int signe=1;
int x=0;

while (isspace(*chaine))
 chaine++;

if(*chaine == '-'){
 signe = -1;
 chaine++;
}
else if (*chaine == '+')
 chaine++;

while (isdigit(*chaine))
 x=x*10 + *chaine++ - '0';

return signe * x;
}
int main(int argc, char **argv){
sapin(entier(argv[1]));
}

Et voici le resultat :

bash-2.05b$ ./sapin 5
                  *
                 ***
                *****
               *******
                *****
               *******
              *********
             ***********
            *************
             ***********
            *************
           ***************
          *****************
         *******************
        *********************
          *****************
         *******************
        *********************
       ***********************
      *************************
     ***************************
    *****************************
      *************************
     ***************************
    *****************************
   *******************************
  *********************************
 ***********************************
*************************************
***************************************
                |||||
                |||||
                |||||
                |||||
                |||||

Esperont que je fasse des trucs plus interessant sous peu ;o)

Commentaires

Vendredi 05 Mars 2004 09:17:03 - mat

un peu déformé ton sapin :)

Vendredi 05 Mars 2004 21:03:53 - Guillaume

J'ai mal décalé une ligne, :)
Mais le code genere un sapin droit.

Réagissez

En fait non ! Trop de smap