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