IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Dépassement de capacité! Projet EULER pb #3


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut Dépassement de capacité! Projet EULER pb #3
    Bonjour et merci à ceux qui auront pris le temps de lire mon post :-)

    Je commence doucement VBA car je vais être amené à l'utiliser à partir de l'année prochaine (Master en finance) et j'essaye de m'y initier! Pour ce faire on m'a conseillé de jeter un oeil au projet EULER et d'essayer de résoudre les problèmes en utilisant vba.

    J'en suis au troisième problème (https://projecteuler.net/problem=3) et pour le résoudre j'ai écrit ce petit programme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Sub test3()
     
     
    Dim nombre As Currency, i As single, j As single, diviseur As Byte
     
     
    nombre = InputBox("choisir un nombre")
     
     
    For i = Int(Sqr(nombre)) To 1 Step -1
        For j = 1 To i
     
            If i Mod j = 0 Then
     
                diviseur = diviseur + 1
     
                     If diviseur > 2 Then
                        Exit For
                     End If
     
            End If
        Next
     
        If diviseur = 2 Then
     
            If nombre Mod i = 0 Then
     
               MsgBox i & " est la réponse"
               Exit For
     
            End If
     
        Else
     
            diviseur = 0
     
        End If
    Next
     
     
    End Sub
    Mon petit programme à l'air de plutôt bien fonctionner mais uniquement avec des valeurs inférieures à 2 milliards et des briquettes (or il s'agit dans le PB n3 de tester un ombre supérieur à 600 milliards)! Au dessus j'ai le droit à une erreur 6 " dépassement de capacité". Je me suis aperçu que j'avais déclaré nombre comme single (donc cela ne pouvait effectivement pas marcher) mais désormais puisqu'il est déclaré en currency je ne comprends pas pourquoi il me fait encore l'erreur 6

    Toute remarque sur des erreurs de débutant sera (vraiment) bien venue!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Int(Sqr(nombre)) To 1 Step -1
    diviseur As Byte est un peu court avec Sqr(600851475143)=775146

    i et j sont des entiers. Pourquoi as single et non as long ? Ca serait plus rapide

    eric

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    hello Eric et merci d'avoir pris le temps de regarder mon soucis!

    Tout d'abord, j'ai fait en sorte que diviseur ne puisse pas prendre une valeur au dessus de 3 donc étant donné que byte court jusqu'à 255 je n'arrive pas vraiment à saisir pourquoi il faudrait le mettre dans un autre type
    Après effectivement, il vaudrait mieux que je mette i t j en long :-)

    cela ne change malheureusement pas le fait que dès que je teste une valeur supérieure à 2 milliards et quelques, il me met l'erreur 6

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Dit comme ça, je ne peux que dire oui.
    J'aurai dû regarder un peu plus ton code ;-)

    Tu sembles dépasser les possibilités de Mod() avec i = 729169. Ce que je ne m'explique pas car sur une feuille ça passe encore (?)
    En remplaçant mod() par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre - Round(Int(nombre / i) * i, 0)
    ça devrait passer je pense. Je n'ai pas la patience d'attendre...

    eric

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/10/2014, 17h08
  2. Transaction, Dépassement de capacité
    Par SkYsO dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 23/12/2008, 15h56
  3. Dépassement de capacité
    Par jean-pierre96 dans le forum Access
    Réponses: 2
    Dernier message: 10/05/2006, 17h04
  4. Réponses: 8
    Dernier message: 06/02/2006, 15h34
  5. détection de dépassement de capacité
    Par tut dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2004, 23h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo