Bonjour Je cherche à remplir aléatoirement un tableau de n cases jusqu'à atteindre une demande fixe (d) avec une capacité maximale pour chaque case qu'on peut pas dépasser avec le langage c.
Bonjour Je cherche à remplir aléatoirement un tableau de n cases jusqu'à atteindre une demande fixe (d) avec une capacité maximale pour chaque case qu'on peut pas dépasser avec le langage c.
Rien compris....
Tu veux remplir un tableau du style :
tab = malloc(n * sizeof(int));
Jusqu'à la case "d"...
for (i = 0; i < d; i++)
Avec des valeurs plus grandes qu'un int ?....
Tu as codé quoi déjà ?
Détails ?
Merci.
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Non, je cherche à remplir aléatoirement un tableau case par case jusqu'à atteindre une somme sur le tableau qui est égale à (d) qu'on fixe à l'avant. Chaque case est limité à une capacité maximale. Exemple:
Pour un tableau de 5 cases et une somme =40 on aura un tableau généré aléatoirement sous cette forme:
12---0---8---20---0.
La capacité maximale de la première case est de 20
La capacité maximale de la deuxième case est de 10
La capacité maximale de la troisième case est de 10
La capacité maximale de la quatrième case est de 30
La capacité maximale de la cinquième case est de 5
La façon brutale:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int tableau[TAILLE] = {0}; for(n=0 ; n<total ; n++) tableau[nombreAleatoire(TAILLE)]++;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bonjour,
Est-ce le même problème que celui décrit ici ? http://www.developpez.net/forums/d14...cture-methode/
Pas si facile.
Peut être de cette façon :
Donnés et notations:
- D est le total à atteindre pour le remplissage des N cases du tableau.
- La case n du tableau peut contenir au maximum la valeur Max[n].
- Soit Max la somme des Max[n] pour les cases non remplies. Au début Max = Somme(Max[n])
- Soit Tot la valeur totale à placer dans les cases non remplies. Au début Tot = D
Principe :
- Pour que le remplissage soit possible, on doit avoir Tot <= Max
- Si on veut remplir la case n, on doit tirer un nombre aléatoire V <= min(Max[n], Tot), mais il faut que cette valeur permette de remplir le reste du tableau. Pour le reste du tableau, Max sera réduit de Max[n] et Tot sera réduit de V. Alors, il faut que : Tot-V <= Max - Max[n]soit V >= Tot-Max +Max[n] .
- Finalement, on doit avoir Tot-Max + Max[n] <= V <= min(Max[n], Tot) . Ce qui donnera pour la dernière case à remplir V = tot (On a alors Max == Max[n], Tot <= Max[n])
- Le tirage d'une valeur dépend des tirages antérieurs (Tot dépendant de ces tirages), il est donc prudent de remplir les cases dans un ordre aléatoire.
Donc :
- Calculer Max et initialiser Tot. Il faut avoir Tot<= Max sinon le problème est insoluble - Déterminer aléatoirement l'ordre de traitement des cases - Traitement des cases -- si ce n'est pas la dernière case à remplir ---- Tirer un nombre aléatoire V tel que Tot-Max + Max[n] <= V <= min(Max[n],Tot) ---- Tot = Tot-V ; Max = Max - Max[n] -- sinon V = Tot -- Remplir la case avec V
Partager