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

Algorithmes et structures de données Discussion :

Déterminer les éléments d'un addition


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut Déterminer les éléments d'un addition
    Bonjour,

    J'aimerais développer une petite application mathématique pour mes enfants.
    Ma fille commence à faire des additions et des soustractions simples (disons que le maximum de ce qu'elle additionne fera 20).
    Avec 2 nombres.

    J'ai essayer de cherche sur Google mais j'avoue ne pas savoir quels termes de recherche utiliser.
    Je me tourne donc vers vous

    Prenons le problème de la somme:
    J'aimerai pouvoir définir dans une variable le maximum que mon addition peut atteindre [max_som]
    Exemple => [max_som=20]
    Comment puis-je faire, ensuite, pour que l'application me trouve les deux nombres possibles à additionner?
    Exemple => [nb1 = 19] + [nb2 = 1]

    J'avais pensé tout d'abord à utiliser une fonction random (nombres alétaoires) et d'ensuite additionner les 2 nombres.
    Si la somme dépasse mon [max_som] alors, je recommence la recherche de 2 nombres.
    Si la somme est <= [max_som] alors l'application propose à l'utilisateur de faire l'addition de ces 2 nombres.

    Si je fais cela, il faut chaque fois tester si l'addition des nombres est inférieure ou égale à mon [max_som].
    Existe-t-il un moyen afin d'être plus efficace dans la recherche des 2 nombres à additionner? De limiter le nombre de recherches et de tests?

    J'espère avoir été assez clair dans la description du problème

    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Pourquoi ne pas mémoriser l'ensemble des couples (i,j) tel que i+j<=max et i,j =>0.

    Ensuite tu pioches aléatoirement dans cet ensemble.




    Ou alors tu tires un i entre 0 et max et tu complètes avec un j entre 0 et max-i.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Déterminer les éléments d'un addition
    Bonjour,
    Tu peux faire comme te l'a indiqué CliffeCSTL :
    Avec Matlab :

    Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    N=20;%Somme à trouver
    x=nchoosek(1:N,2);
    S=x(:,1)+x(:,2);
    [I,J]=find(S==20);
    Resultat=x(I,:)% Résultat de la somme de deux nombres
    Tirage=  Resultat(1 + fix(length(Resultat)*rand(1)),:)%Paire de nombres de somme N

    Sortie : Tirage =

    8 12

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Dans ce bout de code, je remplacerais S==20 par S<=20, en espérant que la syntaxe reste correcte.

    Sinon, si toutes les additions donnent 20 comme résultat, le jeu va vite être lassant.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Déterminer les éléments d'une addition
    Bonsoir,
    Tu as raison tbv92, j'ai pris l'exemple de L0007 où N=20.
    On peut aussi tirer N au hasard.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Première idée: L'outil que tu cherches est "le reste de la division euclidienne", autrement appelé "modulo".

    Dans de nombreux langages, si / est la division entière, % est le modulo.
    Si la division entière est 'div', le modulo est 'mod'.

    Exemples:
    23%2 = 1
    46%20 = 6
    10 mod 13 = 10

    Le résultat est forcément entre 0 et ton diviseur. Donc tu peux utiliser somm inférieure à ton max_somm:
    a = random() % somm
    b = somm - a

    Deuxième idée: On tire, de la même façon le nombre somm.
    On utilise même un décalage pour que ce ne soit pas trop bas.

    somm= ( random() % (max_somm - 3) ) +3
    a = random() % somm
    b = somm - a

    Et voilà, tu donnes a et b à la petite.

    Facile à faire sur une colonne sous un tableur classique.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Déterminer les éléments d'un addition
    Bonjour,

    Pourquoi ne pas faire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % Addition avec N à priori = 20
     
    a=fix(1+19*rand)
    b=20-a
     
    ou :
     
    % Addition avec N au hasard < 100
    N=fix(100*rand)
    a=fix(1+(N-1)*rand)
    b=N-a

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    En préambule, il faudrait savoir si le générateur aléatoire produit des entiers (on ne fait jamais que générer des 0 et des 1) ou un nombre à virgule entre 0 (inclus) et 1 (exclu).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Divertissement
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Divertissement

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Nous savons que les deux termes de l'addition sont compris entre 0 et 20.
    La somme sera donc comprise entre 0 et 40.
    Si les deux termes générés par le programme font une somme qui "dépasse" la valeur 20, un test gère la situation en générant deux autres termes.
    En fin de compte, le programme éditera deux nombres dont la somme ne dépassera pas 20.

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut
    Merci à tous pour vos idées.

    Ceci m'a permis de réoudre mon problème

    Encore merci

  11. #11
    Inactif
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2016
    Messages : 22
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Pourquoi faire de max somme une variable et comment est-elle modifié ?

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Pourquoi faire de max somme une variable ?
    Pour pouvoir la modifier.
    Comment est-elle modifiée ?
    Elle est modifiée par la main du père en fonction de l'évaluation du niveau de sa fille.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Inactif
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2016
    Messages : 22
    Points : 31
    Points
    31
    Par défaut
    Comme vous êtes présomptueux.

    Dans la recherche de solution rien n'indique que cette valeur est modfiée.
    Dans le programme applant rien n'empèche de la déclarer comme une constante.
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    Somme : constant natural := natural'value(get_line);

    Je réfléchis comme ça :
    Si une valeur doit être modifiée par le programme, c'est une variable si non c'est une constante.

  14. #14
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Il y a un proverbe qui a traversé les siècles et qui dit : il n'y a pas de question idiote, il n'y a que des réponses idiotes.
    Je crois que le type qui a inventé ce proverbe ne fréquentait pas les forums internet.


    Moi, je trouve que la réponse de Flodelarab répondait assez bien à la question.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  15. #15
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Le berger qui compte ses moutons manipule des nombres constants et immuables.
    Mais on peut donner des noms à ces nombres. Comme "pi" ou "exponentielle" ou "nombre d'or" ou "x" ou "y" ou "Dominique".

    C'est le fait même de donner un nom à ces quantités (ce qu'on appelle l'abstraction), comme un pointeur sur une case mémoire, qui permet de changer la valeur qui est derrière.

    Constante, inconnue, variable (muette ou non), case de tableur, etc, c'est tout pareil.

    Le "LA" des musiciens était une vibration de la matière à 377 Hertz en 1511, 481 Hz en 1543, 404 Hz en 1700, 370 Hz en 1766, et 440 Hz de nos jours. (cf Wikipedia)
    Pourtant, tous les musiciens ont prétendu jouer le même LA.

    Le LA est-il une constante ou une variable ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déterminer les éléments uniques d'un tableau
    Par maggie2008 dans le forum MATLAB
    Réponses: 4
    Dernier message: 10/02/2012, 14h06
  2. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50
  3. Déterminer les coefficients moyens d'une équation linéaire
    Par Oliveuh dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/01/2005, 23h23
  4. Réponses: 15
    Dernier message: 21/06/2004, 16h52
  5. Réponses: 2
    Dernier message: 11/08/2003, 09h43

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