J'essaye de faire un exo avec des contrainte que vous allez comprendre en lisant mon code (boucle while seulement, pas de printf etc ..)
j'ai vraiment du mal que sa soit avec les consigne ou la mise en place de ma penser algorithmique mais j'essaye et en essayant voila ce que j'ai pu produire
#include <unistd.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_print_comb2(void)
{
int a;
a = 0;
int b;
b = 0;
int c;
c = 0;
int d = 1;
while (a < b && c < d)
{
d++;
if (d == 9)
{
c++;
}
else if (c == 9)
{
d = 2;
c = 0;
b++;
}
else if (b == 8)
{
ft_putchar('0' + a);
ft_putchar('0' + b);
ft_putchar('0' + c);
ft_putchar('0' + d);
a++;
}
}
}
int main()
{
ft_print_comb2();
}
Le programme compile mais sur la sortie j'ai rien
est ce que la façon dont j'ai abordé le problème est logique ?
EDIT : je dois affiché toutes différentes combinaison de deux nombres entre 0 et 99 dans l'ordre croissante
Tu te rends compte que ce qu'on te demande c'est simplement de parcourir les entiers de 0 à 99 inclus et de les afficher sur deux caractères avec un 0 préfixe pour les entiers plus petits que 10 ?
quelque chose comme :
for(int i=0; i<100; i++) {
int dizaine = i/10 ;
int unite = i % 10 ;
printf("%c%c\n", '0'+dizaine, '0'+unite);
}
Pour le débogeur ça m'intéresse fort parce que a un moment sur papier je m'en mêle avec les boucle et tout je perd vite le fil
Sauriez vous comment l'utiliser sur Vscode car j'ai la console de débogage mais je peut rien y faire et les tuto sur Yt ne parle que des version windows alors que je suis sur mac
- Edité par leprincefou 2 mars 2022 à 1:17:50
Notre mesure du possible rend possible l'impossible
savoir debuguer est indispensable (comme profiler ton code pour les fuites mémoires, tester ton code, indenter, …) mais le plus important est de pouvoir pondre un code correct …
Chose que je n'ai pas réussie à faire car tu veux les combinaisons de deux nombres … ce qui serait plutôt :
pour i de 0 à 98
pour j de i+1 à 99
afficher i,j
un algo que je te laisse exprimer en mode 42 (avec des fonctions c'est mieux).
Je suppose que leprincefou sait qu'on peut ramener une boucle for à un while ... Tant qu'a avoir 4 variables, pourquoi ne pas avoir implémenté 2 compteurs à 2 digits? Avec une jolie fonction pour les incrémenter.
On s'arrête quand la fonction retourne 1. (et avec un while svp) - int increment(int compteur[2]) { int i = 1; int carry = 1; while(carry && i >= 0) { carry += compteur[i]; compteur[i]=carry % 10; carry /= 10; if(carry) i--; } return carry; }
- Edité par PierrotLeFou 2 mars 2022 à 5:21:19
Le Tout est souvent plus grand que la somme de ses parties.
#include <unistd.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_print_comb2(void)
{
int i;
int j;
i = 0;
j = 0;
while (i < 98)
{
j = i + 1; // j = 0 passe a 1
while (j < 99) // tant que j (1) est plus petit que 99 on imprime
{
ft_putchar(i); // on imprime 0
ft_putchar(i); // on imprime 0
ft_putchar(' ');
ft_putchar(i); // on imprime 0
ft_putchar(j); // on imprime 1
ft_putchar(',');
j++;
}
}
i++;
}
int main()
{
ft_print_comb2();
ft_putchar('\n');
}
Voila ce que j'ai produit, il y a beaucoup de monde a qui je pourrait posé la question autour de moi, mais la plus part bosse sur des gros exo (re faire printf, re faire un mini shell ) j'ai pas envie de passé pour un idiot c'est pour ca que je vous inondes avec mes question ici (et encore je me retiens)
Un grand merci pour toutes vos précision vraiment !
du coup pour revenir au code, regarder les commentaire pour comprendre ce que je pensait au moment de le produire
Sauf que sur la sortie ca part dans tout les sens.
- Edité par leprincefou 2 mars 2022 à 15:53:28
Notre mesure du possible rend possible l'impossible
Sauf que sur la sortie ca part dans tout les sens.
Forcement, tu affiches les caractères correspondant au valeur numérique passée en paramètre a ta fonction, sans savoir à quel caractère il correspondent ! De ce coté la c'était mieux dans ton premier code !
Essais déjà d'utiliser ta fonction ft_putchar correctement avant d'aller plus loin ! Essais déjà d'afficher un simple nombre avec !
int main(void)
{
int x = 57;
if (x != 0)
{
ft_putchar(x / 10 + '0'); // merci je comprend un mieux l'affichage du putchar la
ft_putchar(x % 10 + '0'); // division ainsi que le modulo c'est la formule
}
return 0;
}
- Edité par leprincefou 2 mars 2022 à 21:52:49
Notre mesure du possible rend possible l'impossible
Afficher différente combinaison
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
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 Tout est souvent plus grand que la somme de ses parties.
Affiché un nombre ok je l'appel 2 fois dans ce cas
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent