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 :

Algorithme qui élimine les chiffre répétés


Sujet :

Algorithmes et structures de données

  1. #21
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Les opérations de l'arithmétique (quotient et reste de la division euclidienne) permettent probablement de définir une double suite (An, Bn), en partant de la puissance de dix (D0 < 1010) immédiatement inférieure au nombre considéré (N).
    Plus simplement, on peut renverser l'écriture du nombre avec des reste/divisions par 10.

    N=2032502
     
    L=0
    TANT QUE N>0
       D=N-(N/10)*10    // équivalent de D = N modulo 10
       L=10*L+D
       N=N/10
    FIN
     
    // L=2052302
    Il reste alors à le ré-inverser en prenant soin de supprimer les doublons (avec le principe des 10 filtres/portes expliqué ci-avant).

    porte0=porte1=...=porte9=ouverte.
    
    M=0
    TANT QUE L>0
       D=L-(L/10)*10
       SI (D==0 et porte0==ouverte) ALORS ( M=10*M+D;  porte0=fermée;)
       SI (D==1 et porte1==ouverte) ALORS ( M=10*M+D;  porte1=fermée;)
       ...
       L=L/10
    FIN
    
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  2. #22
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Algorithme qui élimine les chiffre répétés
    Prendre une série de 10 variables booléennes initialisées à la valeur True (chiffre non utilisé) au lieu de 10 entiers dont chacun peut passer de 1 (chiffre non utilisé) à 11, puis 112 (chiffre redoublé, donc éventualité exclue) est une solution astucieuse.

    J'avais songé (sans y revenir) à une relation itérative du type Bn = F(Bn-1, c), afin d'alléger l'algorithme; le calcul de la somme est une étape lourde.

    Il y a, quoi que l'on choisisse:
    a) un bloc de 10 instructions semblables lié à l'impossibilité d'emploi des tableaux (contrainte incontournable);
    b) deux blocs du type (WHILE ... DO), dont le plus simple correspond
    - soit au renversement des chiffres (selon ce que tu proposes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TANT QUE N>0
       D=N-(N/10)*10    // équivalent de D = N modulo 10
       L=10*L+D
       N=N/10
    FIN
    -soit à la détermination de la plus grande puissance de dix inférieure au nombre testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:= 1000000000; WHILE (D>N) DO D:= D DIV 10;
    C'est plus court à cet endroit, mais moins au niveau du filtre puisqu'il faut modifier le diviseur par une instruction du type
    Ta méthode est effectivement la plus simple.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #23
    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 458
    Points
    13 458
    Par défaut
    dans le sens dextrograde
    Cette discussion m'aura au moins appris 2 couples de mots: sinistrograde/dextrograde et sinistrovolubile/dextrovolubile.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #24
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour

    Sans remettre en questions vos idées et suggestions j'ai du mal à comprendre le besoin d'introduire autant de complexité pour un sujet qui me parait simple à résoudre avec juste deux boucles et un compteur.

    je suis pas mathématicien juste un développeur qui s’intéresse à l’algorithmie

    ce code ultra simple que je viens d'écrire devrait faire le job ou alors il y a une subtilité que je ne vois pas
    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
     
    string mystring = "1023352197291078"; //-> 10235978
                string outputstring="";
     
                for (int i = mystring.Length-1; i >= 0; i--)
                {
                    char chr = mystring.ElementAt(i);
     
                    int cpt=0;
                    for (int j = 0; j <i; j++)
                    {
                        if (chr == mystring.ElementAt(j)) cpt++;
                    }
     
                    if (cpt == 0) outputstring = chr + outputstring;
                }
     
                Console.WriteLine(outputstring);
                Console.ReadLine();

  5. #25
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Cette discussion m'aura au moins appris 2 couples de mots: sinistrograde/dextrograde ...
    L'opposé de dextrograde est "lévograde" = qui progresse vers la gauche, comme les écritures sémitiques (hébreu, arabe, araméen, etc )
    Citation Envoyé par Flodelarab Voir le message
    ... et sinistrovolubile/dextrovolubile.
    ? Où as-tu trouvé cela ?


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #26
    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 458
    Points
    13 458
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    ? Où as-tu trouvé cela ?
    Je vous retourne le compliment, très cher.
    "Dextrograde" n'est dans aucun dictionnaire, sérieux ou fantaisiste.
    Il semblerait que ce soit une francisation d'un mot anglais qui lui même est inventé.

    Prendre une série de 10 variables booléennes initialisées à la valeur True (chiffre non utilisé) au lieu de 10 entiers dont
    On peut même n'avoir qu'une variable et faire un multiplexage en base deux.
    Ça tient même sur 2 octets.
    2i indique la présence du chiffre i.

    j'ai du mal à comprendre le besoin d'introduire autant de complexité
    Complexité ? Où ça ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #27
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    après réflexion il y a une autre solution sans connaitre à l'avance le nombre de variable a utiliser

    se servir des fonctions de décalage de bit
    donc plutot que de se servir de 10 variables booléennes initialisées à la valeur True
    je prendrais 1 entier et utiliserais sa forme binaire

    "1023352197291078" ce qui devrais nous donner comme résultats intermédiaire après traitement "1111010011000001"

    il suffit de relire cet entier ce qui nous donneras
    "1023352197291078"
    "1111010011000001"
    "1023 5 97 8"

    mes deux cents
    Sans remettre en questions vos idées et suggestions j'ai du mal à comprendre le besoin d'introduire autant de complexité pour un sujet qui me parait simple à résoudre avec juste deux boucles et un compteur.
    nous avons déjà donné cette réponse il y a fort longtemps ... après moi je suis preneur pour d'autre solution
    dans ce cas ce fut fort intéressant
    je suis aussi informaticien ... et grâce à leur approche je viens de proposer une autre solution qui dans certain cas peut
    être utile par exemple dans les matériel embarqué avec peu de mémoire
    ou les optimisation pour le graphisme

    PS : Arf grillé pff
    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

  8. #28
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Algorithme qui élimine les chiffre répétés
    Citation Envoyé par Flodelarab Voir le message
    Cette discussion m'aura au moins appris 2 couples de mots: ... sinistrovolubile/dextrovolubile.
    Je me demandais quel pouvait être le lien avec le contenu du présent forum ...
    Citation Envoyé par Flodelarab Voir le message
    ... "Dextrograde" n'est dans aucun dictionnaire, sérieux ou fantaisiste.
    Il semblerait que ce soit une francisation d'un mot anglais qui lui même est inventé.
    J'ai lu ces termes dans un ouvrage français de linguistique, paru il y a quinze ou vingt ans; le contexte en rendait le sens si clair qu'il ne m'est jamais venu l'idée de consulter un dictionnaire - c'est désormais chose faite.
    On ne les trouve en effet que dans des articles en anglais traitant des écritures méditerranéennes; cependant leur étymologie latine et leur orthographe autorisent leur passage en français, même s'il s'agit de néologismes.

    Citation Envoyé par shaun_the_sheep Voir le message
    ... j'ai du mal à comprendre le besoin d'introduire autant de complexité pour un sujet qui me parait simple à résoudre avec juste deux boucles et un compteur ...
    Les chaînes apparaissent effectivement comme un outil approprié, comme cela avait déjà été suggéré (#13, #15); il y avait toutefois un handicap: l'obligation de ne pas utiliser les tableaux (et donc aussi les chaînes, très vraisemblablement), et de s'en tenir à des types simples de variables.

    Citation Envoyé par shaun_the_sheep Voir le message
    ... ce code ultra simple que je viens d'écrire ...
    Il n'y a là probablement aucune pointe d'humour noir, mais ce programme (dont je ne doute pas de l''efficacité) m'a paru rien moins qu'évident ... je ne suis peut-être pas le seul dans ce cas.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. pattern qui exclut les chiffres
    Par PedroL dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/02/2013, 19h40
  2. Réponses: 12
    Dernier message: 15/10/2012, 21h08
  3. Réponses: 4
    Dernier message: 01/10/2011, 00h13
  4. division qui conserve les chiffres après la virgule
    Par ali.ensi dans le forum Débuter
    Réponses: 3
    Dernier message: 05/10/2007, 13h26
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

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