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

Mathématiques Discussion :

Calculer la somme de plusieurs nombres sans dépasser un maximum


Sujet :

Mathématiques

  1. #21
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 609
    Points : 188 582
    Points
    188 582
    Par défaut
    Ce que je dis aussi implicitement : si ta solution actuelle est trop lente parce que tu lui fournis trop de tickets à l'avenir (des dizaines de milliers, par exemple, sait-on jamais !), il y a très franchement moyen de faire mieux que cette solution LibreOffice. Si le solveur de LibreOffice utilise les mêmes techniques que celui d'Excel (très probable, mais je ne trouve pas l'info : que fait-il des variables entières ?), ce n'est pas parce qu'il te propose une solution qui exploite 90 % (juste pour mettre un chiffre…) de ton budget qu'il n'en existe pas de meilleure (à 99,9 %, par exemple) — ce que mon approche permet de prouver mathématiquement et qui pourrait être plus problématique pour une association, selon la taille des budgets.

    Enfin, je suppose que c'est déjà une grande avancée par rapport à une approche purement à la main !
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #22
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    ...
    Enfin, je suppose que c'est déjà une grande avancée par rapport à une approche purement à la main !
    Comme je l'ai précisé dans mon exemple, j'avais fait la recherche manuelle pour moins de 20 valeurs et ... ça m'a pris près d'une heure et ... sans garantie d'avoir trouvé la meilleure solution.
    Mais toutes les propositions faites sur les deux sites sont intéressantes à des degrés et pour des besoins divers. Et pour cela, je ne peux que remercier tous ces contributeurs généreux.

    A+

  3. #23
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    en cherchanty un peu j'ai trouvé une implementation en pascal de l'algo subset sum
    regarde ici
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #24
    Membre actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Points : 218
    Points
    218
    Par défaut
    Salut Papy,

    Ton problème est assez intéressant.

    Je te propose une solution sous calc, comme tu l'utilises.
    L'idée est de classer les notes selon une valeur de division du montant cible maximum qui détermine la précision de la réponse.

    1/ Dans la colonne B, tu renseignes les montants des notes
    2/ En face de "Total cible" tu renseignes le montant de la subvention
    3/ En face de "division" tu renseignes le nombre de divisions qui te donneras la précision (j'ai tracé une grille qui correspond à une division de 100. Tu dois agrandir la grille tracée si tu renseignes une valeur supérieure à 100 et modifier les cellules qui calculent les totaux).
    4/ Tu lance la macro Total_maxi

    La macro sélectionne les valeurs de montant les plus importants en premier puis dans l'ordre de saisie. Cela reste à améliorer selon ton besoin.
    Le résultat est sur la feuille 2.

    Le fichier est en pièce jointe. Les feuilles sont protégées sans code de protection.

    Le code ci-dessous :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    REM  *****  BASIC  *****
     
    Sub Total_maxi
     
    Dim Doc as object
    Dim Feuille1 as object
    Dim Feuille2 as object
    Dim col as integer
    Dim lig as integer
     
    Dim Note(500) as double
    Dim Total_cible as double
    Dim Total_maxi as double
    Dim div as integer
    Dim division(200,500) as double
     
     
     
    Doc = thiscomponent
    Feuille1 = Doc.Sheets.getByIndex(0)
    Feuille2 = Doc.Sheets.getByIndex(1)
     
    Total_cible = Feuille1.getCellByPosition(5,3).value
     
    rem ------ Mise à zéro de la partie résultat des deux feuilles
    Feuille1.getCellByPosition(5,5).value = 0
    Feuille2.getCellByPosition(5,5).value = 0
     
    rem ------ Rangement des notes par diviseur
    max = 400
    div = Feuille1.getCellByPosition(5,8).value
    for lig = 14 to max+14
    	Note(lig) = Feuille1.getCellByPosition(1,lig).value
    	for a = 1 to div
    			if Note(lig) < Total_cible*a/div then
    				if Note(lig) >= Total_cible*a/div - Total_cible*1/div then
    					Feuille1.getCellByPosition(2+a,lig).value = Note(lig)
    					division(a,lig) = Note(lig)
    				endif
    			endif
    	next
    next
     
     
    rem ------- Selection des notes de la plus grande à la plus petite
    a = div/2
     
    	do while a > 0
    		for lig = 9 to max
    			if division(a,lig) > 0 then 
    				if Total_maxi + division(a,lig) < Total_cible then
    					Total_maxi = Total_maxi + division(a,lig)
    					Feuille2.getCellByPosition(a+2,lig).value = division(a,lig)
    				endif
    			endif
    		next
    	a = a - 1
    	loop
     
    rem ------- Affichage du résultat et reprise des données sur la deuxième feuille
    Feuille1.getCellByPosition(5,5).value = Total_maxi
    Feuille2.getCellByPosition(5,5).value = Total_maxi
    Feuille2.getCellByPosition(5,3).value = Total_cible
    Feuille2.getCellByPosition(5,8).value = div
    End Sub
    Cordialement,

    Pascaltech
    Fichiers attachés Fichiers attachés
    Pascaltech

    Traduction : guides, manuels, normes : http://tradinfo.e-monsite.com/

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [LibreOffice][Tableur] Additionner des nombres d'une liste sans dépasser un maximum indiqué
    Par Papy Octet dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 30/06/2016, 19h12
  2. comment calculer la somme de 2 nombres de 32 bits en 8086
    Par dev des systèmes dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 05/05/2016, 22h27
  3. Calculer la somme de plusieurs enregistrement
    Par essai_sas dans le forum SAS Base
    Réponses: 3
    Dernier message: 05/11/2011, 18h52
  4. Réponses: 3
    Dernier message: 01/04/2009, 12h51
  5. calcule la somme de 2 nombre complexes avec structure
    Par autoin dans le forum Débuter
    Réponses: 3
    Dernier message: 05/04/2008, 21h51

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