begin process at 2010 03 11 06:57:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > ADDITION ET SOUSTRACTION AVEC VIRGULE N CHIFFRES

ADDITION ET SOUSTRACTION AVEC VIRGULE N CHIFFRES


 Information sur la source

 Description

comme il existe plusieurs editeur et compilateur différents
je poste sans zip deux fonctions qui sont l'addition et la soustraction,ça s'addresse au débutants.

Source

  • public static String Sous (String a,String b)
  • { String res ="";
  • int i,m,n,l,w,x;
  • int y = 0;
  • int max = 0;
  • int r =0;
  • int base = 10;
  • // Supprimer les virgules
  • if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
  • { w = a.length() - a.indexOf(",");
  • x = b.length() - b.indexOf(",");
  • if (w>x)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • for (i = 1 ; i <= w-x;i++)
  • { b = b + "0";}
  • y = w;
  • }
  • else if (x > w)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • for (i = 1 ; i <= x-w;i++)
  • { a = a + "0";}
  • y = x;
  • }
  • else if (x == w)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • y = x;
  • }
  • }
  • else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
  • { w = a.length() - a.indexOf(",");
  • for (i = 1 ; i< w; i++)
  • { b = b + "0";}
  • a = a.replace(",", "");
  • y = w;
  • }
  • else if (b.indexOf(",")>0 && a.indexOf(",")== -1)
  • { x = b.length() - b.indexOf(",");
  • for (i = 1 ; i <x;i++)
  • { a = a + "0";}
  • b = b.replace(",", "");
  • y = x;
  • }
  • // Réduit chaque chaines à la même longueur
  • if (a.length()> b.length())
  • { max = a.length();
  • l = max - b.length();
  • for (i =1 ;i <=l;i++)
  • { b = "0"+ b;}
  • }
  • else if (b.length()> a.length())
  • { max = b.length();
  • l = max - a.length();
  • for (i=1 ; i <= l;i++)
  • { a = "0" + a;}
  • }
  • else if (a.length() == b.length())
  • { max = a.length(); }
  • // Soustrait
  • String a1,b1;
  • for (i = max; i>0;i--)
  • { a1= a.substring(i-1,i);
  • b1= b.substring(i-1,i);
  • m = Integer.valueOf(a1);
  • n = Integer.valueOf(b1);
  • r = m - r - n;
  • if (r<0)
  • { a1 = String.valueOf(r+base);
  • r=1;
  • }
  • else
  • { a1 = String.valueOf(r);
  • r=0;
  • }
  • res = a1 + res;
  • }
  • // Met la virgule s'il y a lieu
  • if (y != 0) res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
  • // Supprime les zéros à gauche
  • int k=0;
  • l = res.length();
  • for (i = 1; i < l;i++)
  • { if (res.charAt(i-1) != '0') break;
  • k ++;
  • }
  • res = res.substring(k,res.length());
  • if (y !=0)
  • {// Supprime les zéros à droite
  • int j=0 ;
  • for (i= res.length();i > 0 ; i--)
  • { if (res.charAt(i-1)!= '0') break;
  • j ++;
  • }
  • res = res.substring(0,res.length()-j);
  • if (j==(y-1))
  • {res = res + "0";}
  • }
  • if ( res.indexOf(",")== 0 ) res = "0" + res;
  • return res;
  • }
  • public static String Add (String a,String b)
  • { String res ="";
  • int i,m,n,l,w,x;
  • int y = 0;
  • int max = 0;
  • int r =0;
  • int base = 10;
  • // Supprimer les virgules
  • if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
  • { w = a.length() - a.indexOf(",");
  • x = b.length() - b.indexOf(",");
  • if (w>x)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • for (i = 1 ; i <= w-x;i++)
  • { b = b + "0";}
  • y = w;
  • }
  • else if (x > w)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • for (i = 1 ; i <= x-w;i++)
  • { a = a + "0";}
  • y = x;
  • }
  • else if (x == w)
  • { b = b.replace(",", "");
  • a = a.replace(",", "");
  • y = x;
  • }
  • }
  • else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
  • { w = a.length() - a.indexOf(",");
  • for (i = 1 ; i< w; i++)
  • { b = b + "0";}
  • a = a.replace(",", "");
  • y = w;
  • }
  • else if (b.indexOf(",")>0 && a.indexOf(",")== -1)
  • { x = b.length() - b.indexOf(",");
  • for (i = 1 ; i <x;i++)
  • { a = a + "0";}
  • b = b.replace(",", "");
  • y = x;
  • }
  • // Réduit chaque chaines à la même longueur
  • if (a.length()> b.length())
  • { max = a.length();
  • l = max - b.length();
  • for (i =1 ;i <=l;i++)
  • { b = "0"+ b;}
  • }
  • else if (b.length()> a.length())
  • { max = b.length();
  • l = max - a.length();
  • for (i=1 ; i <= l;i++)
  • { a = "0" + a;}
  • }
  • else if (a.length() == b.length())
  • { max = a.length(); }
  • // Additionne
  • String a1,b1;
  • for (i = max; i>0;i--)
  • { a1= a.substring(i-1,i);
  • b1= b.substring(i-1,i);
  • m = Integer.valueOf(a1);
  • n = Integer.valueOf(b1);
  • r = m + r + n;
  • if (r>= base)
  • { a1 = String.valueOf(r-base);
  • r=1;
  • }
  • else
  • { a1 = String.valueOf(r);
  • r=0;
  • }
  • res = a1 + res;
  • if ((r==1) && (i==1)) res = "1"+ res;
  • }
  • // Met la virgule s'il y a lieu
  • if (y != 0)
  • { res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
  • // Supprime les zéros à droite
  • int j=0 ;
  • for (i= res.length();i > 0 ; i--)
  • { if (res.charAt(i-1)!= '0') break;
  • j ++;
  • }
  • res = res.substring(0,res.length()-j);
  • if (j==(y-1))
  • {res = res + "0";}
  • }
  • return res;
  • }
public static  String Sous (String a,String b)
    { String res ="";
      int i,m,n,l,w,x;
      int y = 0;
      int max = 0;
      int r =0;
      int base = 10;

      // Supprimer les virgules
      if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
      { w = a.length() - a.indexOf(",");
        x = b.length() - b.indexOf(",");
        if (w>x)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= w-x;i++)
          { b = b + "0";}
          y = w;
        }    
        else if (x > w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= x-w;i++)
          { a = a + "0";} 
          y = x;
        }   
        else if (x == w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          y = x;   
        }
      }   
      else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
      { w = a.length() - a.indexOf(",");
        for (i = 1 ; i< w; i++)  
        {   b = b + "0";}
        a = a.replace(",", "");
        y = w;
      }
      else if (b.indexOf(",")>0 && a.indexOf(",")== -1)    
      { x = b.length() - b.indexOf(",");
        for (i = 1 ; i <x;i++)
        { a = a + "0";}
        b = b.replace(",", "");
        y = x;
      }    
         
     // Réduit chaque chaines à la même longueur
      if (a.length()> b.length())
      { max = a.length();
       l = max - b.length();
        for (i =1 ;i <=l;i++)
        { b = "0"+ b;}     
      }   
      else if (b.length()> a.length())
      { max = b.length();
        l = max - a.length();
        for (i=1 ; i <= l;i++)
        { a = "0" + a;}
      }    
      else if (a.length() == b.length())
      { max = a.length(); }
      
      // Soustrait
      String a1,b1;
      for (i = max; i>0;i--)
      { a1= a.substring(i-1,i);
        b1= b.substring(i-1,i);
          m = Integer.valueOf(a1);
          n = Integer.valueOf(b1);
          r = m - r -  n;
        if (r<0)
        { a1 = String.valueOf(r+base);
           r=1;
        }   
        else
        { a1 = String.valueOf(r);
            r=0;
        }   
          res = a1 + res;         
      }
      
      // Met la virgule s'il y a lieu
      if (y != 0) res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
         // Supprime les zéros à gauche
            int k=0;
            l = res.length();
            for (i = 1; i < l;i++)
            { if (res.charAt(i-1) != '0') break;  
                k ++;
            }    
       res = res.substring(k,res.length());     
       if (y !=0)  
       {// Supprime les zéros à droite
            int j=0 ; 
            for (i= res.length();i > 0 ; i--)
            { if (res.charAt(i-1)!= '0') break;
                j ++;
            }
       res = res.substring(0,res.length()-j);
       if (j==(y-1))
       {res = res + "0";}   
       }   
       if ( res.indexOf(",")== 0 ) res = "0" + res;
       return res;
    }       

 public static  String Add (String a,String b)
    { String res ="";
      int i,m,n,l,w,x;
      int y = 0;
      int max = 0;
      int r =0;
      int base = 10;

      // Supprimer les virgules
      if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
      { w = a.length() - a.indexOf(",");
        x = b.length() - b.indexOf(",");
        if (w>x)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= w-x;i++)
          { b = b + "0";}
          y = w;
        }    
        else if (x > w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= x-w;i++)
          { a = a + "0";} 
          y = x;
        }   
        else if (x == w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          y = x;   
        }
      }   
      else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
      { w = a.length() - a.indexOf(",");
        for (i = 1 ; i< w; i++)  
        {   b = b + "0";}
        a = a.replace(",", "");
        y = w;
      }
      else if (b.indexOf(",")>0 && a.indexOf(",")== -1)    
      { x = b.length() - b.indexOf(",");
        for (i = 1 ; i <x;i++)
        { a = a + "0";}
        b = b.replace(",", "");
        y = x;
      }    
         
     // Réduit chaque chaines à la même longueur
      if (a.length()> b.length())
      { max = a.length();
       l = max - b.length();
        for (i =1 ;i <=l;i++)
        { b = "0"+ b;}     
      }   
      else if (b.length()> a.length())
      { max = b.length();
        l = max - a.length();
        for (i=1 ; i <= l;i++)
        { a = "0" + a;}
      }    
      else if (a.length() == b.length())
      { max = a.length(); }
      
      // Additionne
      String a1,b1;
      for (i = max; i>0;i--)
      { a1= a.substring(i-1,i);
        b1= b.substring(i-1,i);
          m = Integer.valueOf(a1);
          n = Integer.valueOf(b1);
          r = m + r +  n;
        if (r>= base)
        { a1 = String.valueOf(r-base);
           r=1;
        }   
        else
        { a1 = String.valueOf(r);
            r=0;
        }   
          res = a1 + res;
      
          if ((r==1) && (i==1)) res = "1"+ res;   
      }
      
      // Met la virgule s'il y a lieu
      if (y != 0)
       { res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
           // Supprime les zéros à droite
            int j=0 ; 
            for (i= res.length();i > 0 ; i--)
            { if (res.charAt(i-1)!= '0') break;
                j ++;
            }
       res = res.substring(0,res.length()-j);
       if (j==(y-1))
       {res = res + "0";}   
      }    
      return res;
    }       



 Sources de la même categorie

LIRE LES FICHIERS .WAV par Julien39
Source avec Zip Source avec une capture TRADUCTEUR FRANÇAIS --> NERLANDAIS par edouard333
Source avec Zip IA POUR DISCUTER par edouard333
Source avec Zip Source avec une capture JSUBTITLE1.0 par darrylsite
Source avec Zip COMPILATEUR PASCAL par youma85

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SIMPLEXE ET DUAL par MrRenaud
ENSEMBLE COMPLEXE par rocky87
Source avec Zip CLASS IDENTITEREMARQUABLE.JAVA par The Red Man
Source avec Zip CALCULETTE EN JAVA par Trax63
FACTORIELLE par TheSaib

Commentaires et avis

Commentaire de petifa le 05/12/2008 11:37:14

slt alpha5
dsl de dire ca mais je ne vois pas trop l'utilité de ta fonction ? De plus les tratiement sont complexes et peuvent prendre du temps. Déjà le fait de supprimer la virgue et ajouter des 0 Avant ou Après la valeur initiale est un peu tiré par les cheveux.

Pourquoi ne pas faire pour la soustraction :
result = Float.ValueOf(a) - Float.ValueOf(b)
enfin quelque chose comme ca??


-Remarques, tu fais des traitement directement sur les variable a et B, moi je dirais a éviter pour que ca ne les modifient pas directement dans le programme appelant

-j'ai remarqué un test inutile, tu en as surement d'autres : l-27
#else if (x == w)

Commentaire de coucou747 le 05/12/2008 14:34:33

petifa, le but de cette source est d'avoir des valeurs precises, pas d'utiliser les floats...

bon, pour commencer : dans ton code, tu fais tout sur des String, ce que tu fais consomme beaucoup d'objets, tu vas beaucoup faire bosser le garbage collector.

ensuite, si tu veux implementer la multiplication, alors tu as besoin de couper ton nombre en deux, ce qui n'est pas possible de facon super efficace sur des String. (alors qu'en C, si tu stoques un couple : char * nbr, int len on peut le faire facilement)

enfin, stoquer tes nombres a l'envers, ca t'evite pas mal de problemes pour l'addition, la multiplication et la division euclidienne.

plutot que de gerer la virgule, gerrer les fractions c'est plus simple et plus precis.

plutot que de mettre le signe dans la chaine, mettre un flag c'est plus simple a manipuler, et ca rend le code plus rapide.

sinon, ton code n'est pas DU TOUT objet.

Commentaire de alpha5 le 06/12/2008 10:26:17

petifa ces deux opérations peuvent traiter des nombres très grands.
coucou747 merci pour tes conseils , en effet les opérations sont lentes à exucuter toutefois  mon but est de donner une source acceptable pour tout le monde je ne sais pas si tu as produit des sources mais si tu produit une source un peu trop sensible les administrateur la supprimeront aussitot.
encore merci pour vos commentaires.

Commentaire de coucou747 le 06/12/2008 12:57:31

j'ai produit plusieurs sources.

je ne sais pas ce que tu entends par sensible, mais en general, les admins ne suppriment que les sources inutiles et les sources illegales (et c'est pas trop mon genre de trip.)

Commentaire de petifa le 06/12/2008 17:37:24

ce que je disais concernant la conversion en float était une suggestion. c'étais aussi pour avoir plus de précision su rle but de la source.
Sinon en tout cas si tu garde ce mode la tu devrais factoriser ton code, regrouper dans une fonction l'ajout de 0 avant et après dans la chaine, avec comme paramètre le string (a ou b) ainsi que le nombre de 0 et pourquoi pas un booléen pour dire si c'est en début ou en fin de chaine...

Commentaire de alpha5 le 08/12/2008 21:08:39

coucou 747 je pensai que tu avez des codes bien plus rapides et meilleurs que le mien.
petifa je prends note de tes suggestions.
mais mon but etait de corriger une erreur qui se produit de temps en temps lorsque l'on utilise les opérations en float ou en double, peut être que j'améliorerai  ces deux opérations merci.

Commentaire de coucou747 le 08/12/2008 21:28:08

j'en ai. mais pas en java (je pourrais les refaire en java, mais j'en ai pas l'utilite)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

calcul [ par celfun ] je cherche comment faire pour programmer un calcul exemple0 1 1 2 3 5 8 13 21 34 55l'addition se fait a partir des 2 derniers chiffres calcul de besoin d'un logiciel GPAO [ par lebobby ] Salut les jeunes... Je suis à la recherche, d'un petit applicatif JAVA qui permet de calculer besoins bruts et ordre prévisionnels de produits dans le calcul de besoin d'un logiciel GPAO [ par lebobby ] Salut les jeunes... Je suis à la recherche, d'un petit applicatif JAVA qui permet de calculer besoins bruts et ordre prévisionnels de produits dans le Classe Matrice [ par progueur ] Bonjour,Pour répondre à corebreaker, j'aurais besoin d'une classe Matrice dont les éléments sont reels.Il me faudrait le calcul du determinant, de la calcul de checksum (ASCII <==> hexa) [ par knd ] Bonjour,je voudrais savoir comment calculer la valeur hexa d une trame ascii?==&gt; chaque caractere a une valeur ascii! comment trouver cette valeur calcul aléatoire gaussian [ par la_taupe12 ] bonjour, je n'arrive pas a trouver une fonction que permet de me retourner un valeur aléatoire Gaussienne de moyenne nulle et de variance paramétrable calcul d'une moyenne en JVS [ par ludoweb ] Bonjour à tousComment faire pour calculer la moyenne de n champ de texte ?voici le code qui génére les champs de texte (il n'est pas de moi, merci a m Calcul de position d'un pixel suivant quelques critères... [ par gaelcal ] Bonjour !Voilà j'ai un problème qui me prend la tête depuis une semaine et là je craque un peu !Je vous explique:A la base j'ai la position de 2 point Pb calcul avec un string [ par nicboi ] Salutje cherche a faire un calcul a partir d'un string du style "10+12*52/36-4" sans tenir compte des priorite d'operation.Existe t'il une fonction ja programme d'un calcul scientifique avec java [ par ayour1981 ] bonjour,j'ai un programme qui calcul en 15 points un nombre de paramétre à savoir la température de l'eau .....mais le probleme c'est que lorsque j'in


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales