Page 1 sur 1

Table ASCII en vrac sans doublon [Résolu]

Publié : mar. 31/juil./2007 13:36
par Kwai chang caine
Bonjour à tous

Je voudrais avoir une table ASCII en vrac.
Mais pour ce faire, je ne voudrais pas de doublon (Evidemment)
Car si y'a doublon, y'a pas bon

Peut on forcer la fonction random à ne pas générer plusieur fois le meme chiffre ?

Code : Tout sélectionner

Dim VracAscii.s(255)

For i = 1 To 255
 VracAscii(Random(255)) = Chr(i)
Next

CallDebugger
Merci de votre reponse

Publié : mar. 31/juil./2007 13:44
par Octavius
Tu peux peut-être utiliser une deuxième boucle à l'intérieure de la première qui vérifie que tous les nouveaux caractères que tu rentres n'ont pas déjà été rentrés. Si le caractère n'a pas déjà été utilisé c'est bon et on incrémente i, sinon on recommence et on n'incrémente pas i. Utilise plutôt un Repeat ou un While plutôt qu'un For/Next.

Publié : mar. 31/juil./2007 13:54
par Kwai chang caine
Bonjour OCTAVIUS

Merci pour l'info, c'est un peu ce que j'essayais de faire en attendant de savoir si PURE a prevu ça, ce que je ne pense pas car PURE est moins tordu que moi :D

Bonne journée à toi

Publié : mar. 31/juil./2007 14:04
par gnozal
Une petite idée (non testé) :

Code : Tout sélectionner

Dim VracAscii.s(255)
Dim DejaUtilise.l(255)

For i = 1 To 255
  Repeat
    CodeASCII = Random(255)
    If DejaUtilise(CodeASCII) = #False ; Vérifier si le code ASCII a déjà été utilisé
      VracAscii(i) = Chr(CodeASCII)
      DejaUtilise(CodeASCII) = #True
      Break
    EndIf
  ForEver
Next

Publié : mar. 31/juil./2007 14:16
par Kwai chang caine
Encore merci GNOZAL

Décidément aujourd'hui tu es une maman pour moi :D

J'avais pondu un oeuf du genre de ceux dont on se sépare le matin sans regret en appuyant sur le bouton de la chasse d'eau :lol:

Code : Tout sélectionner

Dim VracAscii.s(255)

For i = 32 To 255
 
 TrouveChiffre = #False
 ChiffreAleatoire = Random(255) 
 
 For a = 1 To 255 
 
  If VracAscii(a) = Chr(i)
   TrouveChiffre = #True
   Break
  EndIf 
 
 Next
 
 If TrouveChiffre = #False
  VracAscii(ChiffreAleatoire) = Chr(i) 
 EndIf
   
Next 

For i = 1 To 255
 Debug VracAscii(i)
Next

CallDebugger
Evidemment 3000 lignes pour dire "bonjour".
C'est dommage que je sois si nul, car à moi tout seul, je recréé la longueur des codes assembleur, mais avec du PURE :lol:

Ce qui est bizzare c'est que lorsque l'on regarde dans le visualiseur de variable y'a des barres "|", je suppose que ce sont des caracteres non editable, car cela fait pareil avec ton code ????

Alors j'ai démarré la table a 32 pour commencer à l'espace et c'est pareil 8O

Publié : mar. 31/juil./2007 14:26
par djes
Il y a des fois où l'on se prend la tête pour rien... Parcours simplement ton tableau et échange (swap) des éléments pris au hasard ;)
Et n'oublie pas qu'une table ASCII va de 0 à 255 (256 caractères).

Publié : mar. 31/juil./2007 14:32
par gnozal
Kwai chang caine a écrit :Ce qui est bizzare c'est que lorsque l'on regarde dans le visualiseur de variable y'a des barres "|", je suppose que ce sont des caracteres non editable, car cela fait pareil avec ton code ????
Alors j'ai démarré la table a 32 pour commencer à l'espace et c'est pareil 8O
Je pense que c'est dû à la police de caractères utilisée par le debugger.

Publié : mar. 31/juil./2007 14:41
par Kwai chang caine
@GNOZAL
Bon d'accord, pas d'affolage alors !!!

Au fait j'ai modifié ton code qu'est ce que tu en pense :

http://www.purebasic.fr/french/viewtopi ... 8466#68466

Merci à tous les 3.