[JAVA]Algorithme de calcul de la limite de la somme des entiers

Algorithme de calcul de la limite de la somme des entiers [JAVA] - Java - Programmation

Marsh Posté le 08-11-2007 à 12:23:47    

bonjour ,
 
alors j aimerai savoir deja quelle est la limite pour les entiers integer en java??Quand on dit 4 octets , comment j arrive au calcul en decimal??
bref , alors voici mon algo en prenant pour limite 2147483647 (pourtant logiquement c 2.10e32??)
 
 

Code :
  1. public class Limitesomme {
  2.    
  3.  
  4.     public static void main(String [] args) {
  5.        
  6.     int Sommetotal,sommeinter ,i,limite;
  7.     boolean boucle;
  8. //Sommetotal est la limite de la valeur entier en java  
  9.     Sommetotal  = 2147483647;
  10.     i=0;
  11.     sommeinter =0;
  12.     limite =0;
  13.     boucle =true;
  14.    
  15.    
  16.         while (boucle == true){
  17.         i=i+1;
  18.         sommeinter=sommeinter+i;
  19.        
  20.             if (sommeinter==Sommetotal){
  21.                 boucle = false;
  22.                 System.out.println("limite"+i);
  23.                 System.out.println(Sommetotal);
  24.              
  25.             }
  26.        
  27.        
  28.         }
  29.     }
  30.    
  31. }


 
merci

Reply

Marsh Posté le 08-11-2007 à 12:23:47   

Reply

Marsh Posté le 08-11-2007 à 12:30:12    

antisarko a écrit :

Sommetotal  = 2147483647;
 
if (sommeinter==Sommetotal){


Dans ton algo tu considères qu'a la fin du sommeinter vaudra 2147483647. Ce qui n'est pas certain.
Il faut que tu trouves quoi, le sommeinter le grand possible sans qu'il dépasse Sommetotal ?
 

Reply

Marsh Posté le 08-11-2007 à 13:11:29    

salut ,  
 
merci de ta réponse rapide il faut que je determine le plus grand nombre qui permet de calculer la somme maximale des entiers integer .Il faut donc que je trouve i je pense , pourtant l algo marche quand je rentre une petite valeur a la place de la somme total.or je tombe sur une valeur negative  :pt1cable:  
 
L algo fait la somme des entiers en fait :
exple j ai Sommetotal=15;
 
donc i =5
5+4+3+2+1 =15
 
j espere que c est assez clair  
 
merci

Reply

Marsh Posté le 08-11-2007 à 14:07:28    


Si t'essaies d'affecter un nombre trop grand à un interger, ça va lancer une exception non ?
Donc moi je bouclerais à l'infini tant que tu peux faire ton sommeinter+=i.
Quand le nombre deviendra trop grand, une exception sera levée, tu récupères le précédent résultat.


Message édité par moustik510 le 08-11-2007 à 14:07:46
Reply

Marsh Posté le 08-11-2007 à 14:33:22    

salut ,
 
je ne vois pas ce que tu veux dire , tu pourrai me le mettre en code ??je n arrive pas a saisir la .
 
merci

Reply

Marsh Posté le 08-11-2007 à 14:36:08    

heu, tu es sûr de devoir utiliser cet algo ?
pasque la somme S des entiers jusqu'à i, ça donne S=i * (i+1) / 2 donc c'est sûrement plus rapide trouver en résolvant l'équation du 2ème degré ...
 
edit : et logiquement, i = (-1 + sqrt(1 + 8*S)) / 2
edit2 : surtout qu'avec ton exemple, ça donne 65535.5, ce qui n'est pas entier et donc ton algo il boucle jusqu'à l'infini ...

Message cité 1 fois
Message édité par TheRom_S le 08-11-2007 à 14:46:54

---------------
The Rom's, à votre service
Reply

Marsh Posté le 08-11-2007 à 14:52:20    

pour la valeur maximale d'un type, en java, y'a pas un truc genre :
 
int Maximum = int.MaxValue;
 
En .NET en tout cas, c'est le cas... Ca évite de se retrouver à planter comme un con le jour où ton appli tourne sur un processeur qui n'est pas 32 bits...

Reply

Marsh Posté le 08-11-2007 à 14:55:11    

Ensuite, ton test est faux.
 
Parceque tu ne vas pas forcément passer par cette valeur.
 
Genre, ton max, c'est 17.
pour i = 5, on a 15
pour i = 6, on a 21
=> ben tu peux toujours attendre pour tomber sur 17... (c'est ce qui t'arrive)
 
donc tu dois faire :
 
if (masomme >= MaxValue - i)
=> si c'est vrai, alors la prochaine incrémentation de i va faire dépasser la valeur maximale


Message édité par MagicBuzz le 08-11-2007 à 14:55:18
Reply

Marsh Posté le 08-11-2007 à 14:56:35    

oui il y a très exactement Integer.MAX_VALUE et ça concerne effectivement les int (pas seulement les Integer)


---------------
The Rom's, à votre service
Reply

Marsh Posté le 08-11-2007 à 15:04:26    

TheRom_S a écrit :

heu, tu es sûr de devoir utiliser cet algo ?
pasque la somme S des entiers jusqu'à i, ça donne S=i * (i+1) / 2 donc c'est sûrement plus rapide trouver en résolvant l'équation du 2ème degré ...
 
edit : et logiquement, i = (-1 + sqrt(1 + 8*S)) / 2
edit2 : surtout qu'avec ton exemple, ça donne 65535.5, ce qui n'est pas entier et donc ton algo il boucle jusqu'à l'infini ...


En fait ce qu'il tentait de faire revient à trouver la valeur de i avec les contraintes suivantes
S=i * (i+1) / 2
S le plus grand possible mais <= Sommetotal (2147483647)
 
int.MaxValue; (ça marche en Java ?) donnerais le nombre exact de Sommetotal mais le résultat ne sera pas celui attendu.
Exemple : si le nombre max était 9, ça ne serait pas la somme des entiers de 1 à i.
Si i=3 : 1+2+3 = 6
S i= 4 : somme = 10
Le résultat attendu serait alors i=3.
 
Je me trompe ?
 
[edit]Je répond trop tard


Message édité par moustik510 le 08-11-2007 à 15:05:18
Reply

Marsh Posté le 08-11-2007 à 15:04:26   

Reply

Marsh Posté le 13-11-2007 à 15:38:29    

bonjour ,
 
alors j ai reussi mais le probleme est pour un long comment je donne la valeur maximale???
 
j ai testé int.MaxValue sous java pour un integer ca marche pas , quelle est la syntaxe precise?
merci

Reply

Marsh Posté le 13-11-2007 à 22:45:36    

TheRom_S a écrit :

oui il y a très exactement Integer.MAX_VALUE et ça concerne effectivement les int (pas seulement les Integer)


 
Salut, apprends à lire, merci :o
 
ps : rien ne t'empêche de chercher par toi même, la javadoc c'est pas fait pour les chiens

Message cité 1 fois
Message édité par TheRom_S le 13-11-2007 à 22:46:32

---------------
The Rom's, à votre service
Reply

Marsh Posté le 13-11-2007 à 23:05:38    

TheRom_S a écrit :


 
Salut, apprends à lire, merci :o
 
ps : rien ne t'empêche de chercher par toi même, la javadoc c'est pas fait pour les chiens


salut ,
 
Ecoute , tu devrais apprendre à t'exprimer , je te trouve trop agressif , d autant plus que je ne t ai rien demandé.Tu n'as pas envie de repondre , ne reponds pas , je ne te force pas .
Si c 'est pour lire ça , tu aurais du eviter d intervenir.
la politesse ce n'est pas non plus fait pour les chiens  
 
merci

Reply

Marsh Posté le 14-11-2007 à 01:29:49    

Ouais m'enfin autant je suis pas partisant des tons agressifs, autant c'est vrai qu'il t'avait un peu déjà donné la réponse... Et que je me suis retenu de t'envoyer moi-même dans la doc : j'ai suggéré, en indiquant que c'était du C#, donc pas du Java, qu'il devait y avoir une constante dispo quelque part, certainement sous forme de membre statique d'une class. Après confirmation c'était pas vraiment compliqué de chercher dans la doc (ou jouer avec l'intellisense de ton GUI).
 
Enfin bref, t'as ta réponse pour la seconde fois, ainsi que des suggestions pour améliorer ton algo : débat clos, pas la peine d'envenimer les choses.

Reply

Sujets relatifs:

Leave a Replay

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