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

JavaScript Discussion :

Afficher un mot sur deux à l'envers


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Afficher un mot sur deux à l'envers
    bonjour,
    je dois faire un petit programme javascript, qui demande a l'utilisateur de rentrer une phrase, ensuite compte le nombre de mots de la phrase, l'affiche a l'écran.
    A partir de la phrase rentrée, il crée une autre phrase, qui aura un mot sur deux (de la phrase rentrée), affiché a l'envers.par exemple si l'utilisateur rentre: je mange du fromage, il retourne: je egnam du egamorf. malheureusement impossible d'utiliser des fonctions, ni des tableaux, juste des boucles et le charAt(i).
    pour la première partie du problème, je me suis assez bien débrouillé, mais c'est la seconde( affichage a l'envers d'un mot sur deux), qui ne m'affiche pas vraiment ce que j'esperes. alors voici le code que j'ai fait jusqu'à présent:


    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
    var phrase = prompt("entrez une phrase");
    var comptMot = 0;    
    for(var i = 0; i<=phrase.length; i++){
     
        if(phrase.charAt(0)== " "|| phrase.charAt(0)== ","|| phrase.charAt(0)== "."|| phrase.charAt(0)== ":"|| phrase.charAt(0)== ";"|| phrase.charAt(0)== "?"|| phrase.charAt(0)== "!"|| phrase.charAt(0)=="-"){// si l'utilisateur commence sa phrase par un caractere separateur de mots
        i++;
        }
     
        if(phrase.charAt(i)== " "|| phrase.charAt(i)== ","|| phrase.charAt(i)== "."|| phrase.charAt(i)== ":"|| phrase.charAt(i)== ";"|| phrase.charAt(i)== "?"|| phrase.charAt(i)== "!"|| phrase.charAt(i)== "-"){//si le caractere a la position i est l'un des caracteres separateur de mots
     
     
           if(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-"){//si en plus le caractere a la position i+1 est l'un des caracteres separateurs
            i++;
               while(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-" ){//tant que le caractere a la position i+1 est l'un des caracteres separateurs, incrementer
                i++;
               }
           }
     
         comptMot++;
        }
    }
     
    alert ("il y a "+ comptMot + " mots dans votre  phrase");
     
     
    var phraseEnvers = "";
    var comptMot = 0;
    for(var i =0; i<=phrase.length; i++){
       if(phrase.charAt(0)== " "|| phrase.charAt(0)== ","|| phrase.charAt(0)== "."|| phrase.charAt(0)== ":"|| phrase.charAt(0)== ";"|| phrase.charAt(0)== "?"|| phrase.charAt(0)== "!"|| phrase.charAt(0)=="-"){// si l'utilisateur commence sa phrase par un caractere separateur de mots
        i++;
        }
     
        if(phrase.charAt(i)== " "|| phrase.charAt(i)== ","|| phrase.charAt(i)== "."|| phrase.charAt(i)== ":"|| phrase.charAt(i)== ";"|| phrase.charAt(i)== "?"|| phrase.charAt(i)== "!"|| phrase.charAt(i)== "-"){//si le caractere a la position i est l'un des caracteres separateur de mots
            comptMot++;
            var t = i;
            var j = comptMot-1;
            if(comptMot%2 !=0){//si c'est impair
     
                for(var m = j;m<=t;m++){
                    phraseEnvers += phrase.charAt(m); 
                }
                i++;
            }
            if(comptMot%2 ==0){//si c'est pair
                for(var k=t-1;k>=j;k--){
                    phraseEnvers += phrase.charAt(m)
                }
                i++
            }
     
     
           if(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-"){//si en plus le caractere a la position i+1 est l'un des caracteres separateurs
            i++;
               while(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-" ){//tant que le caractere a la position i+1 est l'un des caracteres separateurs, incrementer
                i++;
               }
           }
     
        } 
    }
    alert(phraseEnvers);
    si quelqu'un voit le problème, faites-moi part s'il vous plait
    merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Marrant comme exercice
    je me suis juste permis une entorse avec le indexOf
    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
    phrase="je mange du fromage";
    output="";
    pl=phrase.length;
    cpt=phrase.length;
    alphabet="aàâäbcdeéèêëfghiîïjklmnoöûpqrstuüûvwxyz";
    even=true;
    word="";
    while(cpt >-1 ){
        lettre=phrase.charAt(pl-(cpt--))
    	if(alphabet.indexOf(lettre)>-1){
    			word=even?word+lettre:lettre+word;
    			}		
    	else {
    			if(word.length>1){even=!even;}
    			output+=word+lettre;
    			word=""		
    	}
    	if(cpt==0){
    	output+=word;
    	}		
    }
     
    alert(output)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    euh merci pour la reponse, j'aimerais repreciser que dans cet exercice ,les caracteres separateurs de mots sont, (espace), ";" ,".", "?".
    merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    mot ou non mot ...
    suffit de faire une chaine des non mots ... et tester l'indexOf dessus ça ne change pas grand chose ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut afficher un mot sur deux a l'envers dans une phrase
    bonjour,
    je dois faire un petit programme javascript, qui demande a l'utilisateur de rentrer une phrase, ensuite compte le nombre de mots de la phrase, l'affiche a l'écran.
    A partir de la phrase rentrée, il crée une autre phrase, qui aura un mot sur deux (de la phrase rentrée), affiché a l'envers.par exemple si l'utilisateur rentre: je mange du fromage, il retourne: je egnam du egamorf. malheureusement impossible d'utiliser des fonctions, ni des tableaux, juste des boucles et le charAt(i).
    a noter que, les caracteres separateurs de mots, sont," " (espace),";" "?"..
    pour la première partie du problème, je me suis assez bien débrouillé, mais c'est la seconde( affichage a l'envers d'un mot sur deux), qui ne m'affiche pas vraiment ce que j'esperes: quand je lexecute, par exemple, pour la phrase<je sui> il m'affiche <jeius>, il ne respecte pas l'espace, alors que c'est demandé.aussi, lorsque je rentre une phrase comme <je suis> il m'affiche<jesiu>, je pense a un probleme avec mes boucles, mais je vois vraiment pas depuis.alors voici le code que j'ai fait jusqu'à présent:

    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
    var phrase = prompt("entrez une phrase");
    var comptMot = 0; 
    var motActuel = "";
    for(var i = 0; i<phrase.length; i++){
     
        if(phrase.charAt(0)== " "|| phrase.charAt(0)== ","|| phrase.charAt(0)== "."|| phrase.charAt(0)== ":"|| phrase.charAt(0)== ";"|| phrase.charAt(0)== "?"|| phrase.charAt(0)== "!"|| phrase.charAt(0)=="-"){// si l'utilisateur commence sa phrase par un caractere separateur de mots
        i++;
        }
     
     
        if(phrase.charAt(i)== " "|| phrase.charAt(i)== ","|| phrase.charAt(i)== "."|| phrase.charAt(i)== ":"|| phrase.charAt(i)== ";"|| phrase.charAt(i)== "?"|| phrase.charAt(i)== "!"|| phrase.charAt(i)== "-"){//si le caractere a la position i est l'un des caracteres separateur de mot
     
            if(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-"){//si en plus le caractere a la position i+1 est l'un des caracteres separateurs
            i++;
               while(phrase.charAt(i+1)== " "|| phrase.charAt(i+1)== ","|| phrase.charAt(i+1)== "."|| phrase.charAt(i+1)== ":"|| phrase.charAt(i+1)== ";"|| phrase.charAt(i+1)== "?"|| phrase.charAt(i+1)== "!"|| phrase.charAt(i+1)== "-" ){//tant que le caractere a la position i+1 est l'un des caracteres separateurs, incrementer
                i++;
               }
           }
     
         comptMot++;
     
            if(comptMot%2 !=0){
                for(var k=motActuel.length-1;k<i;k++){
                    motActuel+=phrase.charAt(k);
     
                }
     
            }else{// if(comptMot%2==0)
     
                for(var j= i-1;j>=motActuel.length-1;j--){
                    motActuel+= phrase.charAt(j);
     
                }
     
            }
         }
    }
     
     
     
    alert ("il y a "+ comptMot + " mots dans votre  phrase");
    print(motActuel);

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Si tu avais étudié le code que j'ai proposé, tu aurais vu comment étaient gérés les espaces ou ponctuations...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par danda Voir le message
    malheureusement impossible d'utiliser des fonctions, ni des tableaux, juste des boucles et le charAt(i).
    Pas de fonctions ni de tableaux ? Pourquoi ça
    Pourtant c'est de loin la meilleure façon de résoudre ce problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var phrase = "je mange.du,fromage?et.j'aime;ça";
    var separateurs = /([,;\.\s\?])/;
     
    var tokens = phrase.split(separateurs);
    var count = Math.floor(tokens.length/2)+1;
    var newphrase = tokens.map(function(t,i){ 
        return (i-2)%4 ? t : t.split('').reverse().join('');
    }).join("");
     
    alert("il y a "+ count + " mots dans votre phrase");
    alert(newphrase);
    One Web to rule them all

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    un exercice de cours ....
    et une solution a été données plus haut ..

    il n'y a plus qu'a recoder le indexOf() avec une bcoule charAt() ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 183
    Points : 274
    Points
    274
    Par défaut
    Bon voila une solution qui ne te rendras pas du tout service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function inverseUnSurDeux(str) {
      var re=/([ ,.:;?!\-]+)/, count=0;
      return str.split(re).map(function(str,i) {
           return re.test(str) ? (count++,str) : (count%2 ? str.split("").reverse().join("") : str);
     
      }).join(""); 
    }
    Mais sinon on peut coder ce que tu veux faire simplement et en utilisant des fonctions afin de bien rendre le code visible.
    Dis toi une chose et ça c'est très important, quand tu commences à répéter du code, c'est que tu peux en faire une fonction
    Regarde tes "if", il sont longs comme le sexe d'un acteur porno italien célèbre et ils sont répétés plusieurs fois.


    Voila une solution à ton problème sans utiliser de tableau
    Cette solution est commentée afin d'expliquer ce que j'ai fait
    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
    66
    67
    68
    69
    /**
      Cette fonction prend un caractere en entrée et retourne true si ce
     caractere est dans la liste et false dans le cas contraire
    */
    function estUnCaractereSeparateur(char) {
        var listeCaracteres = " ,.:;?!-";
        /* on parcoure la liste des caractères, */
        for (var i=0; i<listeCaracteres.length; i++) {
        	/* et si notre caratère est egal au caractère en cours on retourne true */
           if(char==listeCaracteres.charAt(i)) {
           	   return true;
           }
        }
        return false
    }
     
    /**
      Cette fonction inverse une chaîne de caractères simplement en
     utilisant une boucle for et retourne cette chaîne
    */
     
    function inverseChaine(str) {
        var newChaine = "";
        for (var i = str.length - 1; i >= 0; i--) {
            newChaine += str.charAt(i);
        }
        return newChaine;
    }
     
    /** Cette fonction va parcourir une chaine et quand on va trouver 
         un caractère qui n'est pas "séparateur" va continuer à trouver les 
         nouveaux caractères et inverser le mot une fois sur deux */
     
    function inverseUneFoisSurDeux(chaine) {
        var newChaine = "";
        var mot = "";
        var motCompteur = 0;
        for (var i = 0; i < chaine.length; i++) {
            var carCourant = chaine.charAt(i);
            /* si notre caractère n'est pas un caractère separateur alors on
               va récupérer ce caractère et le mettre dans une chaine et ainsi de suite */
            if (estUnCaractereSeparateur(carCourant)) {
                /* comme on vient de trouver un caractère séparateur, on va regarder
                    si mot n'est pas vide, dans ce cas, on utilise mot et on l'inverse
                    si c'est nécessaire en regardant la valeur de motCompteur */
                if (mot !== "") {
                    /* on incrémente notre compteur de mots */
                    motCompteur++;
                    if (motCompteur % 2) {
                        /* on rajoute le mot à la nouvelle chaine */
                        newChaine += mot;
                    } else {
                        /* on inverse le mot et on le rajoute à la nouvelle chaine */
                        newChaine += inverseChaine(mot);
                    }
                    /* on vide mot pour une réutilisation ultérieure */
                    mot = "";
                }
                /* on rajoute ensuite le caractere separateur qu'on venait de trouver */
                newChaine += carCourant;
            } else {
                mot += chaine.charAt(i);
            }
        }
        /* il peut y avoir un dernier mot et comme on vient de terminer la boucle, on ne peut l'ajouter que ici */
        newChaine += mot;
        return newChaine;
    }
    inverseUneFoisSurDeux("je mange une pomme, c'est super bon");

Discussions similaires

  1. Afficher un hint sur deux lignes
    Par Romainll93 dans le forum Delphi
    Réponses: 10
    Dernier message: 23/02/2007, 12h41
  2. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  3. Afficher un chiffre sur deux caractères
    Par Metallic-84s dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2006, 10h55
  4. Afficher un résultat sur deux critères du même champ
    Par julien6660 dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 11h30
  5. le sous formulaire s'affiche une fois sur deux
    Par Math dans le forum Access
    Réponses: 16
    Dernier message: 10/10/2005, 15h25

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