Algorithme de calcul de la limite de la somme des entiers [JAVA] - Java - Programmation
Marsh Posté le 08-11-2007 à 12:30:12
antisarko a écrit : Sommetotal = 2147483647; |
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 ?
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
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
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.
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
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 ...
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...
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
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)
Marsh Posté le 08-11-2007 à 15:04:26
TheRom_S a écrit : heu, tu es sûr de devoir utiliser cet algo ? |
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
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
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
ps : rien ne t'empêche de chercher par toi même, la javadoc c'est pas fait pour les chiens
Marsh Posté le 13-11-2007 à 23:05:38
TheRom_S a écrit : |
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
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.
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??)
merci