Je suis super contente je viens de prendre des cours de code et le monde de la programmation est encore tout nouveau j'ai encore l'euphorie des débuts mais je vous avoue que le language C me donne du fil à retorde 😅.
Alors voilà j'ai créer un code le voilà:
int main(void)
{
int n;
do
{
n = get_int("Height: ");
}
while (n < 1 || n > 8 );
do{
for (int i = 0; i < 8 - n; i++)
{
printf(" ");
}
for (int i = 0; i < n; i++)
{
printf("#");
}
printf(" ");
for (int i = 0; i < n; i++)
{
printf("#");
}
printf("\n");
} while ( n-- ); }
Seulement le résultat que je veux avoir c'est plutôt ça (pour n'importe quel n entre 1 et 8 mais ça normalement j'ai réussie à régler le paramètre) :
Et ce j'ai c'est ça (haha je sens que je tiens un truc mais vu que ça fait seulement 3 mois que j'ai commencé je vois pas comment inverser le truc en ma faveur 😂) :
Je vous remercie en tout cas d'avoir lu mon message jusque là 😅 et hésitez pas à dire ce que vous pensez de mon programme ou de la programmation en générale et si vous avez des petites astuces ou infos qui me serrait utile pour la suite de mon aventure dans la programmation. Toute info est bonne à prendre 😇
Tu arrive a obtenir quelque chose ? Car chez moi ton code ne compile pas ! Notamment la ligne 33. Le while n'aime pas le point virgule dans sa condition !
EDIT : J'édite, car mon message n'a plus de sens vu que tinapow3 à modifié son code sans en faire mention !
Oui de mon coté le programme s'exécute bien sans problème... c'est possible qu'un programme fonctionne bien dans une sandbox mais pas dans une autre ?
rouloude a écrit:
Tu arrive a obtenir quelque chose ? Car chez moi ton code ne compile pas ! Notamment la ligne 33. Le while n'aime pas le point virgule dans sa condition !
Pourquoi changer de SandBox si dans la mienne ça fonctionne bien ? Et pour être honnête ça m'avance pas beaucoup dans mon problème 😂
Je pense que tu aurais intérêt à utiliser une boucle 'for' plutôt que 'while'. En particulier ça permettrait d'éviter le point-virgule signalé par rouloude.
En fait, en regardant le programme, je trouve normal qu'il dessine la pyramide à l'envers. Je me suis dit : corriger ça va être simple, il suffit d'inverser l'ordre de parcours de la boucle. Sauf que c'est un 'while' et non un 'for', et surtout un 'while' bizarre...
Je pense que tu ne devrais pas utiliser comme indice de boucle, dans le 'while', la variable 'n'. Cette variable représente la taille de la pyramide, elle ne devrait pas varier. En tout cas, la voir comme variable de boucle m'a embrouillé : je ne sais pas comment inverser le sens de parcours avec ce 'while'. J'ai l'impression qu'on mélange plusieurs choses.
Si c'était moi, je définirais deux variables :
- 'nbdieses' : le nombre de dièses à afficher à gauche (ou à droite) ;
- 'nbblancs' : le nombre de blancs à afficher à gauche (ou à droite) (ah non, pas besoin à droite).
On bouclerait sur le nombre de dièses (de 1 à n), et à l'intérieur de la boucle, on calculerait 'nbblancs'.
Pour information: si on connait printf(), voici ce qu'on peut écrire (ici basé sur le fait qu'il n'y aura que 8 # au plus (ça fonctionne aussi si ligne 7 on met len à une valeur >0 et <=8))
#include <stdio.h>
#define NBRSPACE 2
int main(void) {
char card[]="########";
int len=sizeof(card)-1; // attention à ça, mais pas besoin de strlen()
for(int i=0;i<len;i++)
printf("%*s%.*s%*s%.*s\n",len-i," ",i+1,card,NBRSPACE," ",i+1,card);
return(0);
}
Défaut de ce code: il affiche toujours un espace avant d'afficher les #. Mais c'est facilement évitable.
- Edité par edgarjacobs 9 août 2020 à 20:09:42
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Ce que j'aimerais c'est de respecter la structure de mon code et changer que le fond. Parce que au fond ce que je veux c'est garder mes variables et changer la disposition du programme.
Ce que j'aimerais c'est de respecter la structure de mon code et changer que le fond. Parce que au fond ce que je veux c'est garder mes variables et changer la disposition du programme.
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int ci = n;
do
{
for (int i=0; i<ci; i++)
{
putchar(' ');
}
for (int i = 0; i<n-ci; i++)
{
putchar('#');
}
printf(" ");
for (int i=0; i<n-ci; i++)
{
putchar('#');
}
puts("");
}
while(ci--);
return 0;
}
Si tu pouvais m'expliquer la ligne 6&7 stp ça serait gentil 😇
rouloude a écrit:
tinapow3 a écrit:
Ce que j'aimerais c'est de respecter la structure de mon code et changer que le fond. Parce que au fond ce que je veux c'est garder mes variables et changer la disposition du programme.
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int ci = n;
do
{
for (int i=0; i<ci; i++)
{
putchar(' ');
}
for (int i = 0; i<n-ci; i++)
{
putchar('#');
}
printf(" ");
for (int i=0; i<n-ci; i++)
{
putchar('#');
}
puts("");
}
while(ci--);
return 0;
}
On t'avais recommandé de remplacer le printf par soit le puts("") que tu donnes, soit un putchar('\n') Est-ce que ton code fait ce que tu souhaites? Je ne crois pas.
Le Tout est souvent plus grand que la somme de ses parties.
Il est difficile de définir le moment qui fait que le «trop de fonctions» tue les fonctions 😇
C'est aussi pour cela que quelles que soient les conventions il y en aura toujours qui seront pour les uns des «absurdités» et pour les autres des «évidences».
Mais l'important dans tout ça c'est surtout tout ce qui se passe avant : comprendre le problème et avoir les outils pour le résoudre pour pouvoir en implémenter une solution.
Mais c'est clair que la version joel avec des noms plus évocateurs est plus pédagogique.
La fonction, il faut qu'elle retourne la chaîne, il faut donc l'allouer dans la fonction, il ne faudra pas oublier de la libérer. Ça va faire un truc compliqué pour un simple exercice d'affichage. Après, c'est mon point de vue, je suis plutôt terre à terre, je fais au plus simple en fonction du but à obtenir et non pas en fonction de styles de codage.
Il n'y a aucune raison de construire un objet intermédiaire pour représenter une ligne (et pourquoi pas tout le sapin ???). Surtout que ça ne simplifie absolument pas les choses (*)
Ce qu'on demande, c'est d'écrire du code qui affiche un sapin. Si on veut découper, on peut faire
int main()
{
int hauteur = demander_entier("hauteur du sapin");
afficher_sapin(hauteur);
return 0;
}
Au moins, ce sont deux actions clairement identifiées, et le première sera réutilisable.
int demander_entier(char message[])
{
printf("%s : ", message);
int reponse;
scanf("%d", &reponse);
return reponse;
}
(*) et si on programme en C, c'est dans l'optique (espoir souvent futile) d'exploiter au mieux les ressources de la machine. Allouer et libérer des chaines de caractères quand ce n'est pas nécessaire, ça ne va pas dans ce sens.
- Edité par michelbillaud 3 décembre 2020 à 12:04:48
Mais ça serait plus un exemple sur la manipulation des spécifications de format, qu'un exercice classique pour apprendre à faire des boucles sur un intervalle.
- Edité par michelbillaud 3 décembre 2020 à 12:37:05
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !