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 :

Trouver un maximum entre 2 chiffres sans tests


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Trouver un maximum entre 2 chiffres sans tests
    alors voila j'ai un exo assez particulier : je dois construire une fonction qui renvoie entre 2 nombres entier le plus grand des 2
    sans aucun test cad pas de if, pas de while pas < pas de > rien du tout juste des + des - des * des / des >> et des <<

    la je suis largué, je me demande meme si c'est possible ....;

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    euh
    ca marche qu'une fois sur 2 , héhé
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    c impossible alors ?
    packe dans ce cas c'est que le prof se fout de nous

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par orichimaru
    c impossible alors ?
    packe dans ce cas c'est que le prof se fout de nous
    je suis en train d'y réfléchir plus sérieusement que dnas mon précédent post, mais il semble qu'à ma connaissance ca ne soit pas possible sans utiliser de structure conditionellle.
    si j'ai une idée je te la communqiue
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  5. #5
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    salut!

    Sans condition, cà risque être chaud

    En effet, on aurais pu utiliser la différence entre les deux nombres et suivant que le résultat de l'opération sera négatif ou non dire quel est le plus grand.

    Donc, je pense que c'est tout simplement pas possible.

    A+

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    ton probleme revient a trouver le max de deux nombres à partir d'opérations élementaires mathématiques; à ma connaissance c'est impossible..
    Une des raisons qui me poussent a dire ca et qui est purement informelle est que pour trouver le maximum il faut à un moment ou un autre comparer les deux nombres, ce qui reveint a utiliser une structure conditionnelle
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    hmmm pourtant j'ai bien devant mes yeux le dm d'info
    et la question est : "determiner une fonction qui retournera un maximum entre 2 nombres sans user de structures conditionnelles (if,while,...) ni les operateurs > et <"

    donc je me demande si il ne ve pas qu'on trouve une fonction deja existante qui le fait

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si la valeur absolue est autorisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    max(a, b) = ((a + b) + |a - b|) / 2
    min(a, b) = ((a + b) - |a - b|) / 2
    Informatiquement on peut coder la valeur absolue sans conditionnelle, mais mathématiquement ça s'en rapproche tout de même.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    en codant |x|=sqrt(x^2)

    Ca n'a bien sûr strictement aucun intérêt.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Et comment fais tu pour calculer une valeur absolue sans tests?

    C'est possible en considérant la représentation des nombres en mémoire.. mais bon je ne sais pas si c'est ce que le professeur demande

    Sinon c'est vrai que c'est curieux comme question :)

    Ou alors sqrt((a - b)*(a - b)) mais bon encore faut'il pouvoir utiliser la fonction racine carré

    Bizare....

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Si la machine utilise le complément à 2 pour représenter les entiers négatifs, alors on peut écrire (en C++) ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    const int BITS_PER_INT;
    typedef unsigned int uint;
     
    uint abs ( int x )
    {
     
    	uint sign = (uint)x >> ( BITS_PER_INT - 1 );
    	return ( (uint)x ^ ~( sign - 1 ) ) + sign;
    }

    Si la machine utilise un bit de signe, on peut écrire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    uint abs ( int x )
    {
     
    	return ( x << 1 ) >> 1;
    }

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Mais ca dépend de la machine alors non?

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par Neo82
    Mais ca dépend de la machine alors non?
    Oui... Mais c'est tout ce que j'ai trouvé

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Bah oui...

    quelqu'un sait comment est calculée une racine carrée?

    Si on trouve un moyen de la calculer uniquement avec des opérations, c'est gagné, mais je pense que c'est encore plus dur :) LOL

    Bien curieux de voir la solution

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je sais qu'il existe une formule récursive pour calculer une racine carrée, mais je ne m'en souviens jamais.

    De toute façon je suppose que ça se règle comme d'habitude avec un développement limité.

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Pour la racine carrée, tu peut toujours utilisé u_(n+1) = ( u_n + a/u_n ) / 2 et déroullé la boucle, mais bon... c'est pas terrible comme solution.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Oui surement

    Il faut voir... on sait jamais des fois que ca serait possible de passer par la :)

    Bourrin mais bon, si ca marche

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Ceci marche. Mais niveau élegance, il y a mieux ;-)


    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
     
    uint abs ( int x )
    {
     
    	float fx = x*x;
    	float fr = 1;
     
    	fr = ( fr + fx/fr ) / 2;
    	fr = ( fr + fx/fr ) / 2;
    	fr = ( fr + fx/fr ) / 2;
    	fr = ( fr + fx/fr ) / 2;
    	fr = ( fr + fx/fr ) / 2;
    	fr = ( fr + fx/fr ) / 2;
     
    	return (uint) fr;
     
    }


    Pour les grands nombre, il faut augmenter le nombre d'itération.

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par Loulou24
    Je sais qu'il existe une formule récursive pour calculer une racine carrée, mais je ne m'en souviens jamais.

    De toute façon je suppose que ça se règle comme d'habitude avec un développement limité.
    Ca ne se règle quasiment jamais par des développements limités 8)

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    a uéééééééé
    putain loulou24 tu dechires
    ct evident
    sinon pour la valeur absolu ct une question o dessus

    aaaaaaa
    merchi a tous
    merci infiniment a tous

Discussions similaires

  1. Réponses: 14
    Dernier message: 25/11/2007, 18h32
  2. Réponses: 1
    Dernier message: 22/09/2005, 00h30
  3. Faire une division entre deux chiffres?
    Par shun dans le forum Langage SQL
    Réponses: 9
    Dernier message: 09/09/2005, 16h37
  4. [VB.NET] Textbox -> seulement des chiffres sans API?
    Par Pleymo dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/04/2005, 14h00
  5. [CR] trouver le maximum ?
    Par Etienne51 dans le forum Formules
    Réponses: 3
    Dernier message: 25/06/2004, 17h04

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