Addition simple et ensuite avec retenue

Addition simple et ensuite avec retenue - C - Programmation

Marsh Posté le 28-10-2008 à 18:21:30    

voila je suis en pleine bistro epitech, et je suis en tatonnement sur l'addition :fou:
Je voudrais savoir comment vous evaluez mon code et comment se fait une retenue
 

Code :
  1. / ON ADDITIONNE ICI DEUX CHAINES DE CARACTERES
  2. // --------------------------------------------
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. int    main()
  6. {
  7.   int    i;
  8.   char    *result;
  9.   char  *rev_result;
  10.   char    *nombre1;
  11.   char    *nombre2;
  12.   char    *rev_nb1;
  13.   char    *rev_nb2;
  14.   nombre1 = "26112323";
  15.   nombre2 = "12345562";
  16.   rev_nb1 = (my_strdup(nombre1));
  17.   rev_nb2 = (my_strdup(nombre2));
  18.  
  19.   my_revstr(rev_nb1);
  20.   my_revstr(rev_nb2);
  21.   i = 0;
  22.   result = malloc(my_strlen(nombre1 + 1) * sizeof(nombre1));
  23.  
  24.   while(rev_nb1[i] != '')
  25.     {
  26.       result[i] = (rev_nb1[i] - '0') + (rev_nb2[i] - '0');
  27.       i++;
  28.     }
  29.   rev_result = strdup(result);
  30.   my_revstr(rev_result);
  31.    
  32.   int j;
  33.   j = 0;
  34.   while(rev_nb1[j] != ' 0')
  35.     {
  36.       my_putchar(result[j] + 48);
  37.       j++;
  38.     }
  39.   my_putchar('n');
  40.   return(0);
  41. }


Merci de vos reponses ^^


Message édité par immikimaru le 29-10-2008 à 09:51:16

---------------
Mon Feed-Back  
Reply

Marsh Posté le 28-10-2008 à 18:21:30   

Reply

Marsh Posté le 28-10-2008 à 23:29:14    

t'as pas les bases sur les char* / chaînes de caractères. A commencer par le fait qu'elles se terminent par un 0. après l'algorithme c'est pas bon non plus vu que tu ne gères pas la retenu et sa propagation.

Reply

Marsh Posté le 29-10-2008 à 09:23:07    

c'est quoi l'interet de ce truc ? :o
 
En 1 ligne c'est fait :

Code :
  1. atoi(itoa(b) + itoa(a));


 
J'ai jamais comprisl l'interêt de reinventer eternellement la roue... surtout quand en plus on la fait ovale. :D

Message cité 1 fois
Message édité par MEI le 29-10-2008 à 09:23:21

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 29-10-2008 à 09:38:36    

MEI a écrit :

c'est quoi l'interet de ce truc ? :o
 
En 1 ligne c'est fait :

Code :
  1. atoi(itoa(b) + itoa(a));


 
J'ai jamais comprisl l'interêt de reinventer eternellement la roue... surtout quand en plus on la fait ovale. :D


1) c'est un exercice
2) pour supporter une taille arbitraire

Reply

Marsh Posté le 29-10-2008 à 09:40:14    

Taz a écrit :

t'as pas les bases sur les char* / chaînes de caractères. A commencer par le fait qu'elles se terminent par un 0. après l'algorithme c'est pas bon non plus vu que tu ne gères pas la retenu et sa propagation.


Je sais que les chaines de caracteres se terminent par un ''...
Mais justement je ne sais pas comment gerer la retenue et la propagation!


---------------
Mon Feed-Back  
Reply

Marsh Posté le 29-10-2008 à 09:46:19    

immikimaru a écrit :


Mais justement je ne sais pas comment gerer la retenue et la propagation!


 
Bah comme tu le fait quand tu comptes sur papier. ;)


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 29-10-2008 à 11:50:35    

immikimaru a écrit :


Je sais que les chaines de caracteres se terminent par un ''...
Mais justement je ne sais pas comment gerer la retenue et la propagation!


bah justement, 0 c'est pas '' qui n'existe pas d'ailleurs.

Reply

Marsh Posté le 29-10-2008 à 11:57:54    

\0 ... ;)


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 29-10-2008 à 14:25:56    

voici mon code legerement ameliore  :o
seulement g encore 3 GROS problemes:

 

- Si je fais 100 + 200 , j'obtiens une ligne vierge (surement a cause du 0)
- Si je fais 9 + 1, j'obtiens 1
- Si je fais 212 + 20 j'ai *32

 
Code :
  1. // ON ADDITIONNE ICI DEUX CHAINES DE CARACTERES                                                                                                           
  2. // --------------------------------------------
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. int    max(int nb1, int nb2)
  6. {
  7.     if (nb1 < nb2)
  8.     {
  9.         return(nb2);
  10.     }
  11.     return(nb1);
  12. }
  13. int    main()
  14. {
  15.   int    i;
  16.   int    j;
  17.   int    c;
  18.   int    a;
  19.   int    b;
  20.   int   nbcaract;
  21.   char    *result;
  22.   char  *rev_result;
  23.   char    *nombre1;
  24.   char    *nombre2;
  25.   char    *rev_nb1;
  26.   char    *rev_nb2;
  27.   nombre1 = "232";
  28.   nombre2 = "132";
  29.   rev_nb1 = (my_strdup(nombre1));
  30.   rev_nb2 = (my_strdup(nombre2));
  31.  
  32.   my_revstr(rev_nb1);
  33.   my_revstr(rev_nb2);
  34.   i = 0; // Variable de l'incrementation
  35.   c = 0; // Variable de la retenue
  36.   nbcaract = max(my_strlen(nombre1),my_strlen(nombre2));
  37.   result = malloc(nbcaract);
  38.   while(i < nbcaract)
  39.     {
  40.       a = 0;
  41.       if (rev_nb1 != ' \0 ')
  42.       {
  43.           a = (rev_nb1[i] - '0');   
  44.       }
  45.       b = 0;
  46.       if (rev_nb2 != '')
  47.       {
  48.           b = (rev_nb2[i] - '0');
  49.       }
  50.       result[i] = (a + b + c) % 10; // pour ne prendre que les unites
  51.       c = (a + b + c - result[i]) / 10; // pour ne prendre que les dixaines
  52.       i++;
  53.     }
  54.   rev_result = strdup(result);
  55.   my_revstr(rev_result);
  56.   if (c > 0)
  57.     {
  58.       my_putchar(c + '0');
  59.     }
  60.   j = 0;
  61.   while(rev_result[j] != ' \0 ')
  62.     {
  63.       my_putchar(rev_result[j] + '0');
  64.       j++;
  65.     }
  66.   my_putchar('n');
  67.   return (0);
  68. }
 


Les '' sont en fait des bakslash zero


Message édité par immikimaru le 29-10-2008 à 16:12:31

---------------
Mon Feed-Back  
Reply

Marsh Posté le 29-10-2008 à 15:03:32    

malloc(taille + 1) pour le zéro final ...
 
Encore une fois '' ça n'existe pas. if (c) ou bien if (c != 0) ou bien if (c != '\0') ...

Reply

Marsh Posté le 29-10-2008 à 15:03:32   

Reply

Marsh Posté le 29-10-2008 à 15:33:19    

'' le code ne laffiche pas ds ce forum... ca remplace le /0


---------------
Mon Feed-Back  
Reply

Marsh Posté le 29-10-2008 à 15:53:36    

Code :
  1. '\0'

Reply

Marsh Posté le 30-10-2008 à 10:31:34    

c bon j'ai reussi l'addition, elle marche parfaitement avec les nombres infinis... maintenant la soustraction


---------------
Mon Feed-Back  
Reply

Marsh Posté le 11-11-2008 à 18:03:42    

Cay pas à la norme :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed