Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2126 Le 05/10/2012, à 15:42

nathéo

Re : /* Topic des codeurs [7] */

Voici le code de l'algo :

void	my_put_nbr(int nb)
{
  
  int nb1;

  while (nb > 0)
    {

      while (nb1 > 0)
	{
	  nb1 = nb/10; 
	}
      
        if (10 > nb1 > 0)
	    {
	      nb1 = nb1 + 48;
	      
	      my_putchar(nb1);
	    }
	
	
	nb = nb%10;
	
    }
  return;
}

Mais je ne comprends pas vraiment pourquoi ça m'affiche des zéros...


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2127 Le 05/10/2012, à 16:25

Mindiell

Re : /* Topic des codeurs [7] */

As-tu, seulement, essayé de poser ton algorithme sur papier ???
Franchement, là tu nous prends pour des c....s yikes (crétins, hein, pas autre chose de plus mal poli tongue)

Que comprends-tu de cette partie :

 while (nb1 > 0)
	{
	  nb1 = nb/10; 
	}

Si ce n'est "tant que nb1 plus grand que 0" ??? Si tu sors de la boucle, nb1 vaut 0 ou moins (à priori 0 puisque nb est positif) !
Je ne lis même pas la suite, tu n'as même pas essayé, je ne vois pas l'intérêt de continuer à essayer de t'aider.

Et puis une dernière citation :
"Aide-toi, la communauté t'aidera" (Moi tongue)

Hors ligne

#2128 Le 05/10/2012, à 16:32

nathéo

Re : /* Topic des codeurs [7] */

Mindiell a écrit :

As-tu, seulement, essayé de poser ton algorithme sur papier ???
Franchement, là tu nous prends pour des c....s yikes (crétins, hein, pas autre chose de plus mal poli tongue)

Que comprends-tu de cette partie :

 while (nb1 > 0)
	{
	  nb1 = nb/10; 
	}

Si ce n'est "tant que nb1 plus grand que 0" ??? Si tu sors de la boucle, nb1 vaut 0 ou moins (à priori 0 puisque nb est positif) !
Je ne lis même pas la suite, tu n'as même pas essayé, je ne vois pas l'intérêt de continuer à essayer de t'aider.

C'est, je crois que je viens de comprendre là où tu veux précisément en venir, en fait il faudrait remplacer 0 par 1, c'est ça ? tongue

EDIT : Je viens de me rendre compte que j'avais mal compris la fonction du modulo, et le pour quoi de l'échec de mon code du coup... tongue (en fait il faut bien que pour utiliser le modulo, il faut une puissance de 10 égal au nombre de fois moins 1 par lequel le nb initial a été divisé par 10, ce qui inclu l'utilisation d'une troisième variable pour avoir le nombre de fois d'utilisation de diviser par 10; c'est bien ça ? big_smile)

Dernière modification par nathéo (Le 05/10/2012, à 16:51)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2129 Le 05/10/2012, à 17:17

Mindiell

Re : /* Topic des codeurs [7] */

nathéo a écrit :

il faut une puissance de 10 égal au nombre de fois moins 1 par lequel le nb initial a été divisé par 10, ce qui inclu l'utilisation d'une troisième variable pour avoir le nombre de fois d'utilisation de diviser par 10; c'est bien ça ? big_smile)

Bon, j'ai le cerveau qui coule par les oreilles, je pars en week-end....

Hors ligne

#2130 Le 05/10/2012, à 17:35

nathéo

Re : /* Topic des codeurs [7] */

Mais qu'est-ce que je n'ai pas compris ? neutral


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2131 Le 05/10/2012, à 18:13

Jules Petibidon

Re : /* Topic des codeurs [7] */

tu vas chercher midi à quatorze heures, du coup ton code part en sucettes smile
le plus simple est de partir sur une base très bête.

prenons 7531
comment tu obtiens le 7 ?
comment tu obtiens le 5 ?
comment tu obtiens le 3 ?
comment tu obtiens le 1 ?

Hors ligne

#2132 Le 06/10/2012, à 15:30

nathéo

Re : /* Topic des codeurs [7] */

D'accord, j'essaie donc de raisonner de manière la plus simple possible. big_smile

Donc pour obtenir le 7, le mieux à faire est de diviser le 7531 par 10, jusqu'à arriver au 7.

Pour arriver jusqu'au 7, il faut donc indiquer à la machine qu'il faut arrêter de diviser par 10, quand le résultat obtenu est inférieur à 10.

(je saute le détail technique pour poursuivre avec 7531)

Je récupère 7531, et pour passer récupérer le 5, il faut que le 7 soit enlever.

Pour l'enlever je fais un modulo de 7531 par une puissance de 10, il faut que cette puissance de 10 soit égale au nombre de fois par lequel 7531 a été divisé pour obtenir 7.

Puis, je ré-applique la méthode pour obtenir 7, afin de cette fois-ci obtenir 5.

Et continuer ainsi de suite jusqu’à ce que le résultat final soit inférieur à 10.

Es-ce que là j'ai opéré de la bonne manière ? tongue

Dernière modification par nathéo (Le 06/10/2012, à 17:11)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2133 Le 06/10/2012, à 17:06

Jules Petibidon

Re : /* Topic des codeurs [7] */

Pas encore assez simple tongue

Faut oublier que tu as un ordinateur dans un premier temps.

pour obtenir le 7 :
7531 / 1000

pour obtenir le 5 :
(7531 modulo 1000) / 100

pour obtenir le 3 :
((7531 modulo 1000) modulo 100) / 10

pour obtenir le 1 :
(((7531 modulo 1000) modulo 100) modulo 10)

Et là tu peux revenir à la programmation.
Tu commence à la voir la boucle à faire là ?

Hors ligne

#2134 Le 06/10/2012, à 17:20

nathéo

Re : /* Topic des codeurs [7] */

Oui, mais il me semble que c'est ce que mon code fait (avant de poster tout à l'heure il avait déjà pas mal évolué, d'ailleurs, dans mon poste précédant j'ai également remplacé la petite erreur que j'avais faite, 7 à la place de 7531 tongue)

Enfin, il reste à voir si les méthode que j'utilise pour y parvenir sont les bonnes donc :

- pour diviser par mille, diviser par dix jusqu'à ce que le nombre final soit inférieur à 10, ça le fait, non ?

- ensuite, pour obtenir 5, faire un modulo de 7531 par une puissance de 10 égale au nombre de fois de division qu'il y a eu pour obtenir 531, puis diviser par dix, jusqu'à ce que l'on arrive à un nombre inférieur à 10 aussi, non ? tongue




ÉDIT : Tant que j'y suis je poste également mon code, histoire de voir si ce que j'y ai mis, correspond avec l'algo prononcé, enfin si c'est utile big_smile

void	my_put_nbr(int nb)
{
  
  int nb1;
  int exp;
  
  exp  = 1;
  
  if (nb > 0)
    {
      
      while (nb1 >= 10)
	{
	  nb1 = nb/10;
	  
	  while (nb/10)
	    {
	      exp = exp + 1;
	    }
	  
	  if (10 > nb1 >= 1)
	    {
	      nb1 = nb1 + 48;
	     }	  
	  
	  else 
	    {   
	      nb1 = 48;
	     }	
	  
	  my_putchar(nb1);
	  nb = nb%(10^exp);
	}
    }  
  

Dernière modification par nathéo (Le 06/10/2012, à 17:47)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2135 Le 06/10/2012, à 17:36

Jules Petibidon

Re : /* Topic des codeurs [7] */

Bah déroule ta méthode sur papier, met toi à la place de ton ordinateur, détaille toutes les opérations que tu fais.
Si tu arrives à obtenir un résultat logique avec le papier, tu peux le traduire en code smile

Edit : Vu ton code après. Difficile à lire. Un truc, évite de sauter des lignes inutilement, ça aide pas la lecture du code (au contraire). Tu peux en sauter de temps en temps pour séparer les blocs, mais pas plus.

Il fonctionne ?

Dernière modification par Jules Petibidon (Le 06/10/2012, à 17:43)

Hors ligne

#2136 Le 06/10/2012, à 17:53

nathéo

Re : /* Topic des codeurs [7] */

Je vais encore essayer, en essayant d'appliquer les opérations aussi cette fois. tongue

Sinon non le code ne fonctionne pas, là j'ai retiré la partie pour les nombres négatifs et 0, mais il me semble que ça me donne soit un overflow, soit une suite de zéro...


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2137 Le 06/10/2012, à 19:22

Jules Petibidon

Re : /* Topic des codeurs [7] */

Juste un truc aussi, tu devrais revoir ta fonction my_putchar() pour te débarrasser de ce +48 qui n'a rien à faire dans ton algo. Ça fera un peu de pollution en moins déjà.

Hors ligne

#2138 Le 06/10/2012, à 19:33

grim7reaper

Re : /* Topic des codeurs [7] */

Bon l’approche me semble contre-intuitive, mais ça vient peut-être du code imbitable.
Sérieusement, tu indentes à la truelle et tu codes des trucs au pif’, mais ça ça doit venir de la « pédagogie » d’Epitech où on code en C en violant les bonnes pratiques et sans commentaire.
Réponds moi franchement, tu as eu un cours de C avant de faire ça ?
J’ai de gros doute quand je vois ça :

if (10 > nb1 >= 1)

Là tu as du bol, tu es dans un cas particulier et ça fonctionne, mais si tu continues de faire des comparaisons comme ça, ça va te péter à la gueule rapidement…
et ça

nb = nb%(10^exp);

En C, l’operateur ^ c’est le XOR, pas la mise à la puissance hein.

Bon, sinon moi je ferais ça :

#include <unistd.h>

/* For a 64-bit integer, the maximal value is 9 223 372 036 854 775 807 (19
 * digits) */
#define MAX_DIGIT 19

void my_putchar(char a);
void my_put_nbr(int nb);

int main(void)
{
    my_put_nbr(1020);
    my_putchar('\n');
    my_put_nbr(42);
    my_putchar('\n');
    my_put_nbr(0);
    my_putchar('\n');
    my_put_nbr(-42);
    my_putchar('\n');
    return 0;
}

void my_putchar(char a)
{
    write(STDOUT_FILENO, &a, 1);
}

void my_put_nbr(int nb)
{
    char buff[MAX_DIGIT];
    size_t i = MAX_DIGIT - 1;

    if(nb < 0)
    {
        my_putchar('-');
        nb = -nb;
    }

    do
    {
        buff[i] = (char)(nb % 10 + '0');
        nb /= 10;
        --i;
    } while(nb != 0);

    for(i = i + 1 ; i < MAX_DIGIT; ++i)
        my_putchar(buff[i]);
}

Mais bon, peut-être qu’a Epitech on interdit l’utilisation des tableaux (plus rien ne m’étonne venant d’eux…).

Hors ligne

#2139 Le 06/10/2012, à 20:00

tshirtman

Re : /* Topic des codeurs [7] */

Sans vouloir être méchant avec nathéo, mon avis est qu'Epitech n'est pas responsable de l'ensemble du désastre…

Hors ligne

#2140 Le 06/10/2012, à 20:08

Jules Petibidon

Re : /* Topic des codeurs [7] */

Boaf, lorsqu'on débute l'algo on fait facilement n'importe quoi n'importe comment. C'est un mode de réflexion auquel il faut s'habituer.

Et débuter l'algo avec l'application en C, c'est peut-être pas ce qui simplifie le plus la vie smile

Hors ligne

#2141 Le 06/10/2012, à 20:21

Mindiell

Re : /* Topic des codeurs [7] */

Jules Petibidon a écrit :

Et débuter l'algo avec l'application en C, c'est peut-être pas ce qui simplifie le plus la vie smile

Ah, désolé, mais l'algo c'est du français pur et simple. S'il arrive pas à faire ça, il faut aller voir un docteur.

Quand je vois son code, je vomis purement et simplement. Je suis le seul a être choqué par de telles cochonneires

while (nb/10)
	    {
	      exp = exp + 1;
	    }

Franchement, nathéo, tu n'écoutes rien de ce qu'on te conseille, comment veux-tu que ça fonctionne ?
Pourquoi ne pas utiliser le modulo depuis le début 7531%10, ça fait 1, puis 753%10, ca fait 3, etc...

Raaaaaahhhhhhhhhh, mais sérieux, on peut pas le ban tout simplement ? hmm

Hors ligne

#2142 Le 06/10/2012, à 20:24

Dr Le Rouge

Re : /* Topic des codeurs [7] */

(Je comprends pourquoi il ne voulait pas faire une vraie école d'ingé, i.e. une gratuite où on fait des maths avant d'apprendre à coder tongue)


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#2143 Le 06/10/2012, à 20:46

nathéo

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Bon l’approche me semble contre-intuitive, mais ça vient peut-être du code imbitable.
Sérieusement, tu indentes à la truelle et tu codes des trucs au pif’, mais ça ça doit venir de la « pédagogie » d’Epitech où on code en C en violant les bonnes pratiques et sans commentaire.
Réponds moi franchement, tu as eu un cours de C avant de faire ça ?
J’ai de gros doute quand je vois ça :

if (10 > nb1 >= 1)

Là tu as du bol, tu es dans un cas particulier et ça fonctionne, mais si tu continues de faire des comparaisons comme ça, ça va te péter à la gueule rapidement…
et ça

nb = nb%(10^exp);

En C, l’operateur ^ c’est le XOR, pas la mise à la puissance hein.

Bon, sinon moi je ferais ça :

#include <unistd.h>

/* For a 64-bit integer, the maximal value is 9 223 372 036 854 775 807 (19
 * digits) */
#define MAX_DIGIT 19

void my_putchar(char a);
void my_put_nbr(int nb);

int main(void)
{
    my_put_nbr(1020);
    my_putchar('\n');
    my_put_nbr(42);
    my_putchar('\n');
    my_put_nbr(0);
    my_putchar('\n');
    my_put_nbr(-42);
    my_putchar('\n');
    return 0;
}

void my_putchar(char a)
{
    write(STDOUT_FILENO, &a, 1);
}

void my_put_nbr(int nb)
{
    char buff[MAX_DIGIT];
    size_t i = MAX_DIGIT - 1;

    if(nb < 0)
    {
        my_putchar('-');
        nb = -nb;
    }

    do
    {
        buff[i] = (char)(nb % 10 + '0');
        nb /= 10;
        --i;
    } while(nb != 0);

    for(i = i + 1 ; i < MAX_DIGIT; ++i)
        my_putchar(buff[i]);
}

Mais bon, peut-être qu’a Epitech on interdit l’utilisation des tableaux (plus rien ne m’étonne venant d’eux…).

C'est exact pour les tableaux, de même que tout doit se faire dans une fonction sans faire appel à une autre que my_putchar. Au fait, quel est l'opérateur pour indiquer une puissance alors ? big_smile (enfin si j'ai pas mal compris l'indication sur le XOR)

tshirtman a écrit :

Sans vouloir être méchant avec nathéo, mon avis est qu'Epitech n'est pas responsable de l'ensemble du désastre…

Je n'ai jamais dit le contraire tongue

Mindiell a écrit :
Jules Petibidon a écrit :

Et débuter l'algo avec l'application en C, c'est peut-être pas ce qui simplifie le plus la vie smile

Ah, désolé, mais l'algo c'est du français pur et simple. S'il arrive pas à faire ça, il faut aller voir un docteur.

Quand je vois son code, je vomis purement et simplement. Je suis le seul a être choqué par de telles cochonneires

while (nb/10)
	    {
	      exp = exp + 1;
	    }

Franchement, nathéo, tu n'écoutes rien de ce qu'on te conseille, comment veux-tu que ça fonctionne ?
Pourquoi ne pas utiliser le modulo depuis le début 7531%10, ça fait 1, puis 753%10, ca fait 3, etc...

Raaaaaahhhhhhhhhh, mais sérieux, on peut pas le ban tout simplement ? hmm

Peut-être parce que les nombres s'affiche les un à la suite des autres et que s'il faut pour un tel nombre nombre que ses chiffres soit affichés dans l'odre, il faut que le plus à gauche soit à chaque fois affiché en premier ? big_smile

(Quoique, ça serait peut-être faisable si j'arrivais à me débrouiller pour qu'il n'y est que l'odre de la fonction my_putchar qui fonctionne et ainsi l'inverser...)

Le Rouge a écrit :

(Je comprends pourquoi il ne voulait pas faire une vraie école d'ingé, i.e. une gratuite où on fait des maths avant d'apprendre à coder tongue)


Très franchement je ne trouve pas que l'algo ressemble tant à des maths de que ça, par contre à de la logique, ça oui. big_smile (enfin, c'est surtout que je trouve ça plus passionnant, mais voilà...)

Dernière modification par nathéo (Le 06/10/2012, à 20:51)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2144 Le 06/10/2012, à 20:55

Dr Le Rouge

Re : /* Topic des codeurs [7] */

nathéo a écrit :
grim7reaper a écrit :

Mais bon, peut-être qu’a Epitech on interdit l’utilisation des tableaux (plus rien ne m’étonne venant d’eux…).

C'est exact pour les tableaux, de même que tout doit se faire dans une fonction sans faire appel à une autre que my_putchar.

facepalm.png

Au fait, quel est l'opérateur pour indiquer une puissance alors ? big_smile

Y'en a pas, le C est un langage de bas niveau. Après, il y a très certainement des fonctions qui le font dans les librairies qui vont bien.


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#2145 Le 06/10/2012, à 20:59

nathéo

Re : /* Topic des codeurs [7] */

Enfin, maintenant je comprends mieux pourquoi ça coince, mon algo fonctionne donc bien (enfin peut-être pas tout à fait) faut juste que j'arrive à reproduire un truc qui permette de reproduire une puissance. Merci beaucoup pour ces éclaircissements. smile

EDIT : Reproduire la même chose n'était pas compliqué finalement, il suffit juste de partir sur la base que la variable exp vale 10, puis la faire se mutiplier par elle-même (ou 10, c'est la même chose) à chaque fois que nb1 est divisé. Il ne reste plus qu'à tester ça maintenant. big_smile

EDIT 2 :

Le Rouge a écrit :
nathéo a écrit :

Au fait, quel est l'opérateur pour indiquer une puissance alors ? big_smile

Y'en a pas, le C est un langage de bas niveau. Après, il y a très certainement des fonctions qui le font dans les librairies qui vont bien.

Dans les cours vidéos qu'on a, on nous explique que le C serait plutôt de haut niveau, il n'y a que l'assembleur et le langage machine qui sont considérés comme vraiment bas si j'ai bien compris...

Dernière modification par nathéo (Le 06/10/2012, à 21:07)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2146 Le 06/10/2012, à 21:09

Dr Le Rouge

Re : /* Topic des codeurs [7] */

La notion de haut/bas niveau est relative. Moi j'utilise tous les jours un langage qui est construit au-dessus de Python (à savoir SAGE), donc pour moi le C est un des langages de plus bas niveau.

Par contre, j'imagine que pour ceux qui codent le kernel, le C et ses librairies forment un langage de haut niveau ^^

edit : des cours vidéos ? Sérieux ? -_____-

Dernière modification par Dr Le Rouge (Le 06/10/2012, à 21:10)


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#2147 Le 06/10/2012, à 21:14

nathéo

Re : /* Topic des codeurs [7] */

Au moins les cours vidéos on peut se les regarder en boucle, bon même si le fait qu'ils soient en anglais ne rend pas les choses faciles au début, on s'y fait assez vite...


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2148 Le 06/10/2012, à 21:50

Shanx

Re : /* Topic des codeurs [7] */

5000€ pour avoir des vidéos…

Dernière modification par Shanx (Le 06/10/2012, à 21:51)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2149 Le 06/10/2012, à 22:03

Mindiell

Re : /* Topic des codeurs [7] */

...en anglais !
En fait Epitehc c'est une école d'anglais ! big_smile

Nan, nathéo, change tout de suite de job, pitié...

Hors ligne

#2150 Le 06/10/2012, à 22:04

nathéo

Re : /* Topic des codeurs [7] */

C'est bien gentils de vouloir critiquer à tout bout de champ, mais ce serait sympa de se documenter un minimum avant, il y a quand des asteks (des étudiants d'epitechs de promos précédentes), qui aident pendant le temps d'étude les étudiants.


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne