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 :

Combinaisons de 16 pris par 2 afficher les combinaisons


Sujet :

C

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Combinaisons de 16 pris par 2 afficher les combinaisons
    Salut a tous et merci pour lire ma question!

    Je veux afficher sur l'ecran toutes les combinaisons de 16(a mon cas n=16) pris par 2 (p=2) en utilisant le langage C.

    Combinaisons de n (ou n=16) pris par p ou p=2.

    Le nombre des combinaisons j'ai calcule ils sont 120 ce n'est pas ici le probleme.

    Le probleme c'est quand je veux afficher les combinaisons .

    Je vous donne ici tous mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    #include<stdio.h>
    #include<iostream.h>
    #include<conio.h>
     
    	typedef int sir[100];
    	sir x;
    	int p,i,k,n;
    	int as,ev;
    	sir a;
     
    void succ(sir x,int k,int &as)
    {if(x[k]<n)
      {as=1;
       x[k]=x[k]+1;
      }
     else as=0;
    }
     
    void valid(sir x, int k, int &ev)
    {ev=1;
    if((k>1) && !(a[x[k]]>a[x[k-1]]))
    ev=0;
    }
     
    void afis(sir x, int k)
    {int i;
    for(i=1;i<=k;i++)
     cout<<a[x[i]]<<" ";
     cout<<endl;
    }
     
    main()
    {cout<<"n=";cin>>n;
    for(i=1;i<=n;i++)
    cin>>a[i];
     
    cout<<"p=";cin>>p;
     
    k=1; x[k]=0;
     
    while(k>0)
     
    { do
        {succ(x,k,as);
           if(as)
     
               valid(x,k,ev);
        }
    while(as && !ev);
     
    if(as)
       if(k==p) afis(x,k);
             else
                  {k=k+1;
                   x[k]=0;
                   }
    else k=k-1;
    }
    getche();
    }
    }
    Je n'ai pas d'erreurs de syntaxe ca genere les combinaisons de 16 pris par 2 quand je lis n=16 et p=2.

    Ce que je veux c'est lister les combinaisons sans lire n et p.

    Voila ce que j'ai essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    //Generarea combinarilor
     
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    #include<iostream.h>
     
    //combinari de 16 luate cate2
         typedef int sir[120];
         sir st;
         sir a;
     
    int k,as,ev,n=16,p=2,nr;
     
    void init()          //functia de initializare
    {
    st[k]=0;
    }
     
    int succesor() //functia de succesor
    {
    if (st[k]<n)
     {
      st[k]=st[k]+1;
      as=1;
     }
    else
     as=0;
     return as;
    }
     
    void afis(int st[50], int k) //functia de afisare a combinarilor
    {int i;
    for(i=1;i<=k;i++)
    cout<<a[st[i]]<<" ";
    nr=nr+1;
    }
     
    void valid(sir st, int k, int &ev)
    {ev=1;
    if((k>2) && !(a[st[k]]>a[st[k-1]]))
    ev=0;
    }
     
    int sol(int k) //solutia care afiseaza combinarile
    {
    return (k==p);
    }
     
    void back()      //functia back de generare a combinarilor - combinarile sunt stocate in vectorul st[120]
    {
    int i,a;
    k=1;
    init();
      do
        {
          a=succesor();
           if (a)
    	 valid(st,k,ev);
        }
    while (k==1);
     while (as&&!ev);
        if (a)
          {
           if (sol(k))
    	 {
    	   afis(st,k);
    	 }
        else
    	 {
    	  k=k+1;
    	  init();
    	 }
          }
         else
          k=k-1;
    }
     
    void main()
    {  nr=0;
    clrscr();
    //printf("Combinari:");
    //scanf("%d",&n);
    //printf("luate cate:");
    //scanf("%d",&p);
    back();
    printf("nr");scanf("%d",nr);
    getch();
    }
    Les modifications faits a partir du code1:

    (j'ai pris une variable nr j'ai modifier la fonction afisare (affichage) nr=nr+1 et j'ai donne n=16 et p=2.

    Mais ca n'a pas l'air a marcher(code2). Pourquoi?

  2. #2
    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
    Ton code n'est pas du C mais du C++


    A cause les variables globales ton code est infernal à suivre.
    Supprime les, elles sont injustifiées et tu trouveras peut-être alors toi-même ton erreur ou, à défaut, des personnes pour t'aider.

    Ceci étant, une erreur manifeste ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void main()
    { ...scanf("%d",nr);....
    Dans un scanf, il faut donner l'ADRESSE de destination.
    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. Combinaisons de 16 pris par 2 code visual basic
    Par mihaispr dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/10/2009, 13h57
  2. Réponses: 4
    Dernier message: 01/03/2007, 14h24
  3. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53
  4. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50
  5. Réponses: 1
    Dernier message: 16/02/2005, 12h04

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