IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Déclaration tableau avec contraintes


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Déclaration tableau avec contraintes
    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.

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    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

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    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.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Est-ce le même problème que celui décrit ici ? http://www.developpez.net/forums/d14...cture-methode/

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    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
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Plantage Excel 2010 avec déclaration tableau
    Par Jean-Philippe44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/10/2014, 22h07
  3. [VB6] Déclaration d'un tableau avec variable en paramètre.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/10/2005, 12h21
  4. pb de coord de tex dans tableau avec multitex
    Par sebh dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/01/2004, 21h36
  5. Réponses: 13
    Dernier message: 14/10/2003, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo