problème création suite de mot

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème création suite de mot

par Hywan » 18 août 2008, 11:58

Bah il faut juste te faire tes fonctions. ++ sur une chaîne de caractères est toléré par le langage, mais pas --. Conclusion : faire ses fonctions.

Une chaîne est un tableau, ne l'oublie pas (voir str_split()). Tu peux donc inverser les tableaux, les trier, et tout le toutime.
Essaye d'écrire un algorithme sur papier, tente de le coder, et on t'aidera pour avancer. Il y a plusieurs façons de procéder et je n'ai pas réfléchit à la meilleure. Donc choisis-en une qui te convient, et on l'étudiera avec toi :).

par sophie1812 » 18 août 2008, 02:02

moi aussi j'étais étonnée de voir que ++$mot fonctionne tout à fait comme je le voulais !

Mais je n'arrive toujours pas à comprendre pourquoi --$mot ne fonctionne pas !!

Quelqu'un a une idée ou une solution intermédiaire à proposer sur ce forum ?

par Sékiltoyai » 17 août 2008, 21:56

Euh, au passage, avant d'avancer des méthodes ultra complexes, l'opérateur modulo ( % ), ca existe…

par Hywan » 17 août 2008, 20:48

Bah c'est correct. z + 1 = a, et on a une retenu de 1, donc a + 1 = b, soit tataz + 1 = tatba. Pour le --, je ne sais pas pourquoi ça marche pas.
Une chaîne de caractère, c'est juste un tableau de caractère. Bizarre déjà que le ++ fonctionne :?.

par AB » 17 août 2008, 20:30

Si si j'ai testé pour l'incrémentation d'une chaine de caractère et ça fonctionne :

$mot = "arbre";
echo ++$mot;

ça m'affiche bien "arbrf"



Le petit soucis que j'ai et c'est pour cela que j'ai besoin d'aide c'est que je cherche à faire une décrémentation également, mais "--$mot" ne fonctionne pas.

Connaissez vous une fonction ou un script pouvant faire la meme chose que "++$mot" mais en décrémentation de chaine de caractère.

Merci
Ben comme Hywan a vérifié j'ai tendance à le croire. Ton exemple fonctionne parce que tu as du bol
mais si l'on fait

$var = 'tataz';

echo ++$var;

ça affiche "tatba"

par Aureusms » 17 août 2008, 20:05

Une petite idée rapide :

1. Tu mets tout tes mots de même longueur comparé avec strlen() dans un tableau
2. Tu tries ton tableau avec sort()
3. Tu compares la clef retournées avec array_keys()
4. Si clef du mot n°1 est plus grande que clef du mot n°2 : mot n°1 est suivant par rapport à mot n°2
5. Tu fais de même pour tout tes longueur de mots

par sophie1812 » 17 août 2008, 19:58

Si si j'ai testé pour l'incrémentation d'une chaine de caractère et ça fonctionne :

$mot = "arbre";
echo ++$mot;

ça m'affiche bien "arbrf"



Le petit soucis que j'ai et c'est pour cela que j'ai besoin d'aide c'est que je cherche à faire une décrémentation également, mais "--$mot" ne fonctionne pas.

Connaissez vous une fonction ou un script pouvant faire la meme chose que "++$mot" mais en décrémentation de chaine de caractère.

Merci

par Hywan » 17 août 2008, 19:48

Hey :),

Il n'existe pas de surcharge d'opérateur en PHP.
J'ai regardé du côté de la SPL, mais je n'ai rien trouvé. Tu ne peux pas faire comme ça.

par sophie1812 » 17 août 2008, 17:04

ça ne fonctionne pas comme je le voudrais par contre moi j'ai cherché et voila ce que j'ai trouvé :

imaginons qu'au départ on parte avec le mot "arbre"

$mot = "arbre";
echo ++$mot;

Et là ça m'affiche bien le mot suivant qui est : arbrf

Par contre le soucis que j'ai c'est que pour le mot précédent j'ai voulu faire en toute logique : --$mot
mais là ça ne marche pas.

Donc ma question (après avoir cherché !), existe t'il une fonction ou un script capable de faire une décrémentation d'une chaine de caractère comme le fait ++$mot pour l'incrémentation ?

Merci

par Patriboom » 17 août 2008, 16:01

Je ne sais pas ce que tu veux faire, à lire les quelques lignes ci-haut, tu sembles vouloir produire des mots de différentes longueurs. À vue de nez, voici une piste:
$Lettres = array( ... liste des éléments alphabétiques, numériques ou symboliques);
$CeMot = Array();

for ($y=1; $y<=Nombre max de lettres; $y++) {
   $CeMot = "";
   for($x=1; $x<count($Lettres); $x++) {
          for ($z=0;$z<$y;$z++) {
               $CeMot .= $Lettres[$z];
          }
          echo "Voici le mot généré: ".$CeMot.$Lettres[$x];
          echo " ... précédé de :".$CeMot.$Lettres[$x-1];
          echo " ... suivi de : ".$CeMot.$Lettres[$x+1];
          echo "<br>";
   }
}
Rappelle-toi que le présent forum en est un d'entraide. Il ne faut pas penser que nous ferons tout le code pour toi. Il faut que tu y mettes du tien un peu.

D'ailleurs, il y a une erreur logique dans le traitement de construction de $CeMot (boucle $z) que tu devras trouver et résoudre.

par sophie1812 » 17 août 2008, 14:41

je n'ai pas de code pour le moment puisque c'est là mon soucis, je ne vois pas comment monter mes boucles.

Ton idée me parait intéressante, par contre je ne vois pas comment je pourrais faire ça avec des boucles.

Tu as une proposition qui marche ?

par Patriboom » 17 août 2008, 14:36

As-tu déjà du code dans lequel insérer ces conditions et exigences ou pars-tu en neuf?

Si t'as du code, montre-le nous ici.


Autrement, ce peut être assez simple avec quelques boucles et l'alphabet monté en Array.
Pour simplifier le code, je te suggère de monter un tableau comme ceci:
$Lettres = Array("z","a","b",..."y", "z","a");
Il suffit alors d'appeler les lettres selon leur rang habituel (a étant 1, b étant 2, z étant 26) et la précédante en soustrayant 1, la suivante en additionnant autant.

problème création suite de mot

par sophie1812 » 17 août 2008, 14:29

Bonjour,

J'ai un problème avec le PHP, je ne sais pas comment je pourrais faire pour arriver à générer le mot suivant et précédent d'un mot.

Je m'explique :

Prenons par exemple le mot "mot",
je cherche à faire un script qui puisse m'afficher le mot suivant : "mou" (après "t" c'est "u" dans l'alphabet)
Puis ce meme script doit m'afficher le mot précédent : "mos" (avant "t" c'est "s" dans l'alphabet)


Mais il faudrait prendre en compte les 4 cas particuliers suivant quand c'est "z" ou "a" :

1- exemple, le mot est "moz"
mot suivant : "mpa" (on incrémente "z" en "a" et "o" en "p")

2- exemple le mot est "zzz"
mot suivant : "aaaa" (on incrémente successivement les "z" en "a" et on ajoute un "a" au début du mot)

3- exemple le mot est "moa"
mot précédent : "mnz" (on décrément "a" en "z" et "o" en "n")

4- exemple le mot est "aaaa"
mot précédent : "zzz" (on décrémente successivement les "a" en "z" et on supprime le "z" au débutdu mot)


Avez vous une idée de script pour réaliser ce problème. je réfléchie de mon coté également.

Merci