Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2044 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Selection de caracteres de facon aleatoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Selection de caracteres de facon aleatoire

n°967848
Tonio94
Posté le 01-02-2005 à 01:02:10  profilanswer
 

Bonjour,
 
 
je voudrais faire un petit prog qui melange les lettres d'un mot que je lui passe en argument ou bien que je definis dans le main.
 
int main()
{
 char *str = "essai";
 char *tmp;
 int i = 0;
 
 while (i != 5)
  {
    tmp[i] = str[i];
    putchar(tmp[i]);
    i++;
  }
 return (0);
}
 
 
Bon la je vous l'accorde il fait pas grand chose le prog, je voudrais juste qu'il me sorte le mot "essai" avec les lettres melangees, et qu'a chaque lancement du prog les lettres soient dans un ordre different. Vous voyez ? La je vois pas trop comment faire sinon un read sur un fichier et en utilisant random apres mais ca parait long pour pas grand chose!
 
Merci d'avance.


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
mood
Publicité
Posté le 01-02-2005 à 01:02:10  profilanswer
 

n°967879
Zipo
Ours bipolaire
Posté le 01-02-2005 à 02:43:02  profilanswer
 

Tonio94 a écrit :

Bonjour,
 
 
je voudrais faire un petit prog qui melange les lettres d'un mot que je lui passe en argument ou bien que je definis dans le main.
 
int main()
{
 char *str = "essai";
 char *tmp;
 int i = 0;
 
 while (i != 5)
  {
    tmp[i] = str[i];
    putchar(tmp[i]);
    i++;
  }
 return (0);
}
 
 
Bon la je vous l'accorde il fait pas grand chose le prog, je voudrais juste qu'il me sorte le mot "essai" avec les lettres melangees, et qu'a chaque lancement du prog les lettres soient dans un ordre different. Vous voyez ? La je vois pas trop comment faire sinon un read sur un fichier et en utilisant random apres mais ca parait long pour pas grand chose!
 
Merci d'avance.


non seulement il ne fait pas grand chose mais en + il est susceptible de planter ton prog :D
Lorsque tu fais tmp[i] = str[i]; tu n'a alloué aucune mémoire derrière tmp, donc tu écris dans une zone mémoire où tu n'as pas lieu d'être :)
passe un coup de malloc.
 
Ceci dit je me trompe peut être, n'étant pas un pro moi même :p veuillez me corriger si tel est le cas.
 
 

n°967880
Tonio94
Posté le 01-02-2005 à 02:51:22  profilanswer
 

C'est peut etre pas tres propre mais ca fonctionne ;) Mais la n'est pas le pb, j'aurais pu me passer de mettre ce bout de code vu son utilite ^^


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
n°967882
Zipo
Ours bipolaire
Posté le 01-02-2005 à 03:31:57  profilanswer
 

Tonio94 a écrit :

C'est peut etre pas tres propre mais ca fonctionne 9 fois sur 10 car pas de réservation de mémoire ;) Mais la n'est pas le pb, j'aurais pu me passer de mettre ce bout de code vu son utilite ^^


n°967886
matafan
Posté le 01-02-2005 à 05:04:36  profilanswer
 

Ca revient à un tirage aléatoire sans remise entre 0 et strlen(str). Fait une recherche, c'est un des classiques du forum.

n°967897
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-02-2005 à 08:29:29  profilanswer
 

Tonio94 a écrit :


je voudrais faire un petit prog qui melange les lettres d'un mot que je lui passe en argument ou bien que je definis dans le main.


- La chaine S doit être modifiable (tableau de char)
- Tirer un nombre A entre 0 et N-1 (N est la longueur de la chaine)
- Tirer un nombre B entre 0 et N-1 different de A
- Inverser les contenus de S[A] et S[B]
- Faire ça autant de fois que nécessaire (au minimum N/2 fois, je dirais...)
C'est une sorte de tri bulle, mais à l'envers...


Message édité par Emmanuel Delahaye le 01-02-2005 à 08:30:11

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°967909
Lam's
Profil: bas.
Posté le 01-02-2005 à 09:01:31  profilanswer
 

Emmanuel Delahaye a écrit :

- La chaine S doit être modifiable (tableau de char)
- Tirer un nombre A entre 0 et N-1 (N est la longueur de la chaine)
- Tirer un nombre B entre 0 et N-1 different de A
- Inverser les contenus de S[A] et S[B]
- Faire ça autant de fois que nécessaire (au minimum N/2 fois, je dirais...)
C'est une sorte de tri bulle, mais à l'envers...


Il est préférable de faire aller A de 0 à N-1, tout simplement. Cela garantit que chaque lettre sera "potentiellement" déplacée. Et cela permet d'être sûr de converger avec un nombre d'itération connu et fixe.
 

n°968220
jagstang
Pa Capona ಠ_ಠ
Posté le 01-02-2005 à 13:32:31  profilanswer
 

intervertit ces deux lignes :  
 
 
char *str = "essai";
char *tmp;  
 
et affiche les valeurs. on verra si ça fonctionne toujours


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°968830
Tonio94
Posté le 01-02-2005 à 23:10:15  profilanswer
 

Merci pour vos reponses je vais essayer avec l'explication de Manu ^^


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
n°968904
matafan
Posté le 02-02-2005 à 01:01:05  profilanswer
 

Elle est bidon son explication, essaie plutôt celle de Lam's : tu prends i = strlen(str) - 1, tu tires un nombre j entre 0 et i, tu echanges str[i] et str[j], j-- et tu recommence.

mood
Publicité
Posté le 02-02-2005 à 01:01:05  profilanswer
 

n°968919
Tonio94
Posté le 02-02-2005 à 03:42:40  profilanswer
 

ok je vais voir ca, j'ai pas encore eu le temps depuis. Merci.


---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti
n°968929
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-02-2005 à 08:28:02  profilanswer
 

matafan a écrit :

Elle est bidon son explication<...>


Bidon, faudrait peut être pas exagérer... Améliorable, oui, et je ne l'ai pas contesté.


Message édité par Emmanuel Delahaye le 02-02-2005 à 08:28:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°969675
matafan
Posté le 02-02-2005 à 17:07:19  profilanswer
 

Desole j'avais oublie le smiley :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Selection de caracteres de facon aleatoire

 

Sujets relatifs
Afficher des caractères spéciaux sous Internet Explorer[c] Comment saisir une chaine de caractères
à propos de la fonction aléatoire...Renvoyer les valeurs commençant par XXX caractères.
Combien de caractères maxi sur une ligne shell unix ???Selection d'un champs et validation avec submit()
[Fortran 95] Conversion de types numériques en chaine de caractèresSélection de 3 tables
Trouver un mot dans une chaine de caracteresReconnaissance de caractères
Plus de sujets relatifs à : Selection de caracteres de facon aleatoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR