Selection de caracteres de facon aleatoire - C - Programmation
Marsh Posté le 01-02-2005 à 02:43:02
Tonio94 a écrit : Bonjour, |
non seulement il ne fait pas grand chose mais en + il est susceptible de planter ton prog
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 veuillez me corriger si tel est le cas.
Marsh Posté le 01-02-2005 à 02:51:22
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 ^^
Marsh Posté le 01-02-2005 à 03:31:57
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 ^^ |
Marsh Posté le 01-02-2005 à 05:04:36
Ca revient à un tirage aléatoire sans remise entre 0 et strlen(str). Fait une recherche, c'est un des classiques du forum.
Marsh Posté le 01-02-2005 à 08:29:29
Tonio94 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...
Marsh Posté le 01-02-2005 à 09:01:31
Emmanuel Delahaye a écrit : - La chaine S doit être modifiable (tableau de char) |
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.
Marsh Posté le 01-02-2005 à 13:32:31
intervertit ces deux lignes :
char *str = "essai";
char *tmp;
et affiche les valeurs. on verra si ça fonctionne toujours
Marsh Posté le 01-02-2005 à 23:10:15
Merci pour vos reponses je vais essayer avec l'explication de Manu ^^
Marsh Posté le 02-02-2005 à 01:01:05
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.
Marsh Posté le 02-02-2005 à 03:42:40
ok je vais voir ca, j'ai pas encore eu le temps depuis. Merci.
Marsh Posté le 02-02-2005 à 08:28:02
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é.
Marsh Posté le 01-02-2005 à 01:02:10
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