Salut !
Bon voilà je viens de faire cet exercice :
Il est au final pas très difficile, mais en fait j'ai énormément galéré, je savais pas par où commencer, j'ai tenté des trucs chelou, essayé d'aller beaucoup trop loin... Bref je me suis retourné le cerveau un grand nombre de fois
J'ai quand même passé 2h sur l'exercice n°1 d'un TP qui doit durer 1h30 au total (oui je m'avance, et alors ? )
J'en suis arrivé à la fin à un code qui fonctionne correctement et qui répond à la question, seulement j'arrive pas à avoir assez de recul pour savoir si mon code n'est pas "trop compliqué" et si on aurait pas pu faire plus simple, étant donné qu'il reste peut-être des traces de mes raisonnements chelou
Sachant que mon objectif, en plus d'avoir un programme qui fonctionne, est d'avoir un code le plus clair et le plus simple possible, avec mes petites connaissance de L1 info.
Le code :
http://pastebin.com/2nVU5Xg6
Je pense pas que tu ais besoin de deux fonctions (pour la partie inférieur et supérieur du X), avec 2 for imbriqué tu peux directement créer ton X. , il suffit de compter le nombre d'espace à mettre et de rajouter une conidtion (if)
Le 23 novembre 2015 à 22:58:29 GroinDePorc a écrit :
Je pense pas que tu ais besoin de deux fonctions (pour la partie inférieur et supérieur du X), avec 2 for imbriqué tu peux directement créer ton X. , il suffit de compter le nombre d'espace à mettre et de rajouter une conidtion (if)
C'est surtout une question de lisibilité je pense
Après c'est clair que déjà sans rien modifier j'aurais pu rassembler les 2 for dans une même fonction
Par contre j'ai pas compris quelle condition rajouter.
J'ai bien aimé ton exo donc j'ai essayé de le refaire sans avoir vu ce que t'as proposé, en 20 minutes je suis arrivé à ça:
http://pastebin.com/AvKEtF5n
J'ai fais que le "affichageHaut" mais une fois qu'on a compris le principe du haut c'est facile de faire le bas
Dans le genre bonne pratique, j'aurais tendance à dire que le "h - (k * 2 + 2)" (et ses consœurs) dans la boucle for est pas top, parce que ce calcul est réalisé à chaque ré-exécution de ta boucle alors que le résultat pourrait être conservé dans une variable. Mais c'est pas grand chose
Le 23 novembre 2015 à 23:17:56 Chocolate a écrit :
Dans le genre bonne pratique, j'aurais tendance à dire que le "h - (k * 2 + 2)" (et ses consœurs) dans la boucle for est pas top, parce que ce calcul est réalisé à chaque ré-exécution de ta boucle alors que le résultat pourrait être conservé dans une variable. Mais c'est pas grand chose
Bonne remarque
EDIT : Pas vraiment en fait, à chaque tour de boucle le résultat est différent puisqu'il y a un nombre différent d'espaces à chaque fois
Pas pour h - (k * 2 + 2)
surtout. Dans la boucle, h et k ne sont jamais modifiés puisque tu ne fais que des printf. ^^
Le temps d'écrire mon 2eme edit, le temps est dépassé :
EDIT2 : Ah ouais j'aurais pu faire une variable dans le 1er for, ça calculera quand même moins souvent
ça a vraiment un intérêt ?
Pour le coup je me dis que ça fera encore une variable de plus et potentiellement plus de fouillis ?
Par ailleurs, dans ce cas précis on s'en fiche mais, si on met plein de variables, ça va bouffer plus de RAM, mais si à la place on fait pus de calculs ça bouffe plus de CPU, qu'est-ce qui est mieux côté optimisation ?
Le 23 novembre 2015 à 23:28:20 Chocolate a écrit :
Pas pourh - (k * 2 + 2)
surtout. Dans la boucle, h et k ne sont jamais modifiés puisque tu ne fais que des printf. ^^
Oui en effet, là où k est modifié c'est à chaque tour de la 1ere boucle.
Donc c'est au début de cette boucle "répétition de l'affichage d'une ligne" que tu je devrais ajouter une variable ?
ça a vraiment un intérêt ?
Je ne sais pas.
Dans ton script, clairement pas, on s'en fout en terme de performances vu le nombre de tours et la puissance des PCs actuels. Mais il peut y avoir des situations où des boucles réalisent des millions d'itérations et ce genre de détail peut (je pense) devenir important, surtout si le matériel est peu puissant (vu que c'est du C, ça peut être de l'embarqué).
Bref, il en reste que ma remarque ne casse pas trois pattes à un canard. Toutefois, moi je trouve ça plus lisible. Tu peux même te passer du commentaire, avec une variable correctement nommée.
int nb_spaces = h - (k * 2 + 2);
for (int p = 0; p < nb_spaces; ++p) {
printf(" ");
}
Le 23 novembre 2015 à 23:35:23 Chocolate a écrit :
ça a vraiment un intérêt ?
Je ne sais pas.
Dans ton script, clairement pas, on s'en fout en terme de performances vu le nombre de tours et la puissance des PCs actuels. Mais il peut y avoir des situations où des boucles réalisent des millions d'itérations et ce genre de détail peut (je pense) devenir important, surtout si le matériel est peu puissant (vu que c'est du C, ça peut être de l'embarqué).Bref, il en reste que ma remarque ne casse pas trois pattes à un canard. Toutefois, moi je trouve ça plus lisible. Tu peux même te passer du commentaire, avec une variable correctement nommée.
int nb_spaces = h - (k * 2 + 2); for (int p = 0; p < nb_spaces; ++p) { printf(" "); }
OK merci, c'est clair
Bah dans:
Do
{
blabla;
} while (Condition d'arrêt);
la condition d'arrêt c'est ce qui vient après le while dans ce cas
Le 23 novembre 2015 à 23:49:03 Jordi132 a écrit :
Bah dans:Do
{
blabla;
} while (Condition d'arrêt);la condition d'arrêt c'est ce qui vient après le while dans ce cas
Bah ouais donc il fonctionne comment ton Do ?
La boucle
Do
{
// instructions
}while(condition);
Sert à effectuer au moins une fois l'instruction, et puis si la condition n'est pas respectée il sort de la boucle
Le 23 novembre 2015 à 23:58:29 [SOD]Keisuke a écrit :
La boucle
Do
{
// instructions
}while(condition);Sert à effectuer au moins une fois l'instruction, et puis si la condition n'est pas respectée il sort de la boucle
OK merci
En gros,
int i = 0;
do
{
printf("Je ne m'affiche qu'une fois");
}while(i > 0);
Affichera "Je ne m'affiche qu'une fois" à l'écran alors que la condition de boucle n'est pas respectée
Le 24 novembre 2015 à 00:08:25 [SOD]Keisuke a écrit :
En gros,int i = 0; do { printf("Je ne m'affiche qu'une fois"); }while(i > 0);
Affichera "Je ne m'affiche qu'une fois" à l'écran alors que la condition de boucle n'est pas respectée
OK merci je comprends
Je dis peut-être des conneries et je connais pas le C, mais pourquoi ne pas considérer les 2 barres du X comme des équations d'une droite?
Donc tu te créer un tableau de char de taille h par h. Et ensuite tu traverse le tableau avec un x et un y. Si: (y égal x) ou (y égal -x + h) tu mets une étoile.
Le 24 novembre 2015 à 00:46:17 ZelteHonor a écrit :
Je dis peut-être des conneries et je connais pas le C, mais pourquoi ne pas considérer les 2 barres du X comme des équations d'une droite?Donc tu te créer un tableau de char de taille h par h. Et ensuite tu traverse le tableau avec un x et un y. Si: (y égal x) ou (y égal -x + h) tu mets une étoile.
Heu je sais pas comment tu veux faire ça
Tu ne peux pas faire un tableau en dimension en C et le parcourir?