Besoin d'aide dans mon code - C - Programmation
Marsh Posté le 09-10-2011 à 20:01:40
Je doute que quequ'un accèpte de faire ton devoirà ta place sur ce forum.
Cf § [0D] de http://forum.hardware.fr/hfr/Progr [...] 4544_1.htm
Aussi je ne donnerai qu'une piste : As-tu le droit à le récusivité ?
A+
Marsh Posté le 09-10-2011 à 20:06:56
Salut, merci pour ta réponse.
Je ne demande pas à ce qu'on me fasse le code, juste un exemple pour comment remplacer un for par un while dans un premier temps.
et me dire comment changer les isdigit et isspace.
J'ai le droit à la récursivité biensur.
Marsh Posté le 09-10-2011 à 20:12:01
Dans ce cas, pas besoin de boucle.
Je ne vois pas non plus l'utilité de isspace ou isdigit pour ce problème.
Marsh Posté le 09-10-2011 à 20:13:28
Tu peux m'en dire plus ?
Parce que les boucles je maitrise pas mal mais la récursivité pas trop, je débute
si tu peux me donner un exemple j'essayerai de l'appliquer dans mon code et tester;
Merci.
Marsh Posté le 09-10-2011 à 20:24:45
Exemple typique de la récursivité : la fonction factoriel :
fac( 5 ) = 5 * 4 * 3 * 2 * 1 = 120
Tu peux écrire la fonction fac avec une boucle de 1 à n.
Ou bien tu dis que
fac( 1 ) = 1 et fac( n ) = n * fac( n -1 )
Dans ce cas :
int fac( int n )
{
if( n == 1 )
{
return 1;
}
else
{
return n * fac( n - 1 );
}
Pour le reste, je ne comprends pas bien ton code.
Je croyais que ton programme prenait un seul paramètre numérique !
A+
Marsh Posté le 09-10-2011 à 20:45:28
J'ai mofidié tout mes for en boucle while comme ceci ;
void aff_etoile(int d, int a, int max, int stars)
{
d = 1;
while (d <= max/2 - stars/2)
d++, my_putchar(' ');
a = 1;
while (a <= stars)
a++, my_putchar('*');
my_putchar('\n');
}
mais maintenant je n'affiche que le tronc...
Marsh Posté le 09-10-2011 à 20:57:54
Question :
A quoi te servent a et d dans les paramètres de la fonction puisque tu n'utilises pas les valeurs qui te sont passées ?
Remarque 1 :
Mets des parenthèses dans tes expressions c'est plus clair
while( d <= max/2 - stars/2 )
devient
while( d <= ( max/2 - stars/2 ) )
Remarque 2 :
Ensuite les accolades :
while (d <= max/2 - stars/2)
d++, my_putchar(' ');
devient :
while( d <= ( max/2 - stars/2 ) )
{
d++;
my_putchar(' ');
}
Ou alors:
while( d++ <= ( max/2 - stars/2 ) )
my_putchar(' ');
Mais les accolades c'est quand même plus clair !
while( d++ <= ( max/2 - stars/2 ) )
{
my_putchar(' ');
}
Dès fois que t'ais envie d'ajouter un truc dans la boucle plus tard
Parce-que je me demande si tes boucles ne font pas que d++ et a++...
A+
Marsh Posté le 09-10-2011 à 21:01:35
a et d me permettent de naviguer dans les lignes et les colonnes.
a vrai dire j'ai recommencer mon code à zéro en faisant mon algo sur papier, je vais voir ou je recontre un problème.
A tout de suite.
Marsh Posté le 09-10-2011 à 21:05:11
Je comprends l'utilité de a et d.
Je ne comprends pas ce qu'elles font dans les paramètres :
Version for() :
void aff_etoile( int max, int stars )
{
for ( int d = 1 ; d <= ( max/2 - stars/2 ); d++ )
{
my_putchar(' ');
}
for( int a = 1 ; a <= stars ; a++ )
{
my_putchar('*');
}
my_putchar('\n');
}
Marsh Posté le 09-10-2011 à 21:15:52
Elle me permette d'afficher dans la fonction aff_etoile par exemple à gérer la "pyramide" d'étoiles du sapin.
Je galère vraiment à modifier mon code avec des while.
Et je ne vois pas comment je pourrai le simplifier, car je suis sure que j'ai chercher trop compliqué.
Marsh Posté le 09-10-2011 à 21:18:39
OK, ce sont donc des variables locales à la fonction, pas des paramètres.
M'enfin tu as l'air d'avoir des problèmes plus graves.
A+
Marsh Posté le 09-10-2011 à 21:19:33
De plus je voulais etre sur
ma fonction avec for :
# for (d = 1 ; d <= max/2 - stars/2 ; d++, my_putchar(' '));
# for (a = 1 ; a <= stars ; a += 1, my_putchar('*'));
# my_putchar('\n');
est-elle correcte avec les while ici ? :
d = 1;
while (d <= max/2 - stars/2)
d++, my_putchar(' ');
a = 1;
while (a <= stars)
a++, my_putchar('*');
my_putchar('\n');
Marsh Posté le 09-10-2011 à 21:20:40
Je ne pense pas, et je pense aussi avoir déjà répondu : parenthèses et accolades...
Marsh Posté le 09-10-2011 à 21:22:46
A priori, ce que tu veux savoir, c'est ceci:
Code :
|
ça se transforme en:
Code :
|
A+,
Marsh Posté le 09-10-2011 à 21:32:48
Ok, merci.
Maintenant j'ai trouvé la fonction suivante sur internet qui utilise isdigit et isspace.
Je me suis renseigén sur ces fonctions mais je ne sais pas comment procéder pour ne pas les employer.
Code :
|
Marsh Posté le 09-10-2011 à 21:35:05
Au hasard je dirais sscanf : http://www.cplusplus.com/reference [...] io/sscanf/
Marsh Posté le 09-10-2011 à 21:38:41
Soit un truc du genre :
Code :
|
Marsh Posté le 09-10-2011 à 22:07:01
S'il n'as pas le droit aux fonctions de base du C je doute qu'il ait droit a sscanf
Perso je tenterais plus le coup avec un switch (code non testé):
Code :
|
bon il y a peut être des modifs a faire mais l'idée est là.
Marsh Posté le 09-10-2011 à 19:54:58
Bonsoir à tous,
Je suis actuellement en école d'informatique et je débute en langage C.
Mon exercice est d'afficher un sapin en fonction de l'entier entré par l'utilisateur, comme ceci :
(pblm d'affichage sur le site)
Mon problème c'est que j'ai appris que je n'avais pas le droit à la boucle for et à isdigit et isspace.
Etant pressé niveau timing je vous demande de l'aide pour m'aider à remplacer ces boucle for par while et isdigit et isspace.
Merci d'avance.
Message édité par caddicted le 09-10-2011 à 19:58:23