begin process at 2012 05 29 00:31:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

combinaisons possibles C(n,k)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

combinaisons possibles C(n,k)

lundi 22 novembre 2010 à 15:51:10 | combinaisons possibles C(n,k)

mervat

bonjour,
je veux faire la combinaison de n entiers, j'ai trouvé ce code dans un forum qui convient à ce que je veux:
Code C/C++ :
#include <string>
#include <iostream>
using namespace std;
typedef char* lpstrz ;
void combirec(int k, lpstrz l[], const string &s) {
  if (k==0) {
    cout << s << endl;
    return;
  }
  if (*l==0) return;
  if (s.empty())
  {
    combirec(k-1, l+1, *l);
  }
  else
  {
    combirec(k-1, l+1, s+","+*l);
  }
  combirec(k, l+1, s);
}
int main() {
  lpstrz tableau[] = {"1", "2", "3", "4", "5", 0};
  combirec(3, tableau, "" );
  return 0;
}

sauf que mon tableau ne contient pas 1,2,3,4,5 mais contient n éléments (n est déterminé par une autre fonction); j'ai fait ces modifications au main pour adapter ce code à mon problème:
Code C/C++ :
int main() {
 
  int n = nombreLignes ("in.txt"); // fonction qui détermine le nbre de lignes d'un texte
  
  char j[10]; 
  lpstrz tableau[10];
  for (int i = 1; i <= n+1 ; i++) 
  
  {  if (i==n+1) 
	 tableau [i] = "0";  // j'ai fait comme le code précédent, le dernier élément 0 
     else
	 {
	 sprintf (j,"%d",i); // pour convertir int en char car on va remplir un tableau de char
	 tableau[i] = j; 
         }
	   
  }
  
  combirec(3, tableau, "" );
  system ("pause");
  return 0;
}

avec ces modification, rien n'est affiché, pourrais je avoir votre aide pour savoir comment corriger ce code?
et merci d'avance.
lundi 22 novembre 2010 à 16:37:23 | Re : combinaisons possibles C(n,k)

buno

Administrateur CodeS-SourceS
Réponse acceptée !
Hello,

sauf que mon tableau ne contient pas 1,2,3,4,5 mais contient n éléments (n est déterminé par une autre fonction);


Il va falloir que tu passes par une allocation dynamique: malloc() ou new.

Code C/C++ :
lpstrz tableau[10];
  for (int i = 1; i <= n+1 ; i++)

Tu va avoir un souci si n > 10. Passes par une allocation dynamique

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
mardi 23 novembre 2010 à 10:03:50 | Re : combinaisons possibles C(n,k)

mervat


bonjour,
dans mon exemple je sais que n ne dépasse jamais 10 c'est pourquoi j'ai fait tableau [10], mais merci comme même je vais essayer de faire l'allocation dynamique.
mercredi 24 novembre 2010 à 22:05:55 | Re : combinaisons possibles C(n,k)

Ballesteros

Réponse acceptée !
Est ce qu'il y a un interêt caché à travailler avec des char * pour passer des nombres ?? . Ca me semble assez hallucinant comme code que tu as trouvé, il faut utiliser un tableau d'entiers et tu t'éviteras un paquet d'ennuis.

Ensuite, c'est une bonne idée de faire une allocation dynamique plutôt qu'un tableau de taille 10. Si tu es en train d'apprendre le C++, il vaut mieux partir du principe que tu peux avoir plus que 10 éléments et tu devra alors choisir si tu tronques ta série à 10, ou si tu crée un tableau de la taille voulue. Pour tronquer il te suffirait de faire un min(n,10) avant de lancer ta boucle, ou alors faire une double condition dans le if (<n+1 && <10).

Autre chose, tu ne remplis pas l'index 0 de ton tableau, donc quand tu écrit tableau[n+1], tu es en dehors des limites de ton tableau. Ta boucle for doit être : for (int i=0;i<10;++i)
si jamais n<10, il faut que tu rajoute une condition pour mettre une valeur 'joker' dans ton tableau.

jeudi 25 novembre 2010 à 09:28:23 | Re : combinaisons possibles C(n,k)

buno

Administrateur CodeS-SourceS

Est ce qu'il y a un interêt caché à travailler avec des char *


Tiens, je n'avais pas fait gaffe à ça...C'est clair que les int sont plus indiqués...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
jeudi 25 novembre 2010 à 10:44:42 | Re : combinaisons possibles C(n,k)

mervat

bonjour et merci beaucoup pour vos réponses, voila j'ai changé totalement le code, j'ai fait une allocation dynamique et un tableau de int au lieu de char *,
franchement j'ai trouvé le code sur le net et j'ai fait quelques modifications pour l'adapter à mon problème.

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>

void afficher( int *p, int n) {
  int i;
  for (i = 0; i < n; i++) std::cout << p[i] << " ";
  std::cout << std::endl;
}

void combi2(int cmb[], int n, int p , int i, int k) {
	if (k == p) afficher(cmb,p);
	else if (i < n) {
		combi2(cmb,n,p,i+1,k);
		cmb[k] = i;
		combi2(cmb,n,p,i+1,k+1);
	}
}

int main() {
  int n=5;  // dans mon cas n est donné par une fonction mais pour simplifier je vais       
           //  supposer que n= 5
  int *combi;
  combi=new int[n+1];
  combi2(combi,n+1,3,1,0);
  system ("pause");
  return 0;}

et le résultat sera:
Code :
345
245
235
234
145
135
134
125
124
123



Cette discussion est classée dans : code, int, tableau, char, combirec


Répondre à ce message

Sujets en rapport avec ce message

tableau char [ par dingue007 ] Voila je dois faire un prog en C++ : un tableau avec les mois de lannée et quand je tape un chiffre il me sort le mois ! mais je narrive pas a faire l Gestion d'entrées/sorties sur fichier [ par macrow ] Bonjour, Voici mon source : #include #include #include #include #include //******************************************** "désallocation" inopinée [ par vecchio56 ] J'ai touvé un truc bizarre avec Visual C++ 6: le code suivant plante:#include void f(char* a){ a = new char[100]; // alloue de la Tableau et char to int [ par Niníel ] Bonjour!J'ai un tableau: chTabStart[64] dans lequel je rentre un nombre dans le format suivant: d_25 pour un nombre décimale par exemple. Donc dans mo problème de char [ par minet03 ] Coucoutout le monde, tout d'abord voilà mon code :#include #include #include #include #include #include char *bin_dec(char *binai problème de char [ par minet03 ] Bonjour c'est encore le débutant, voilà le code :#include #include #include char inverser_char(char variable[]){ int longueur = strlen(variable); // l longip ... probleme [ par winwarrior ] Salut :)Voila j'ai un petit probleme avec un code qui est censé me renvoyer le longip, il me retourne -795585024 au lieu de 2130772483 (longip de 127. lister un tableau de string [ par minet03 ] Soyons bref, je suis en train de bosser sur un code qui liste les srting d'un tableau, seul problème c'est qu'il y a des problèmes !Voici mon code :vo Saisie chaines caractère en boucle en C [ par oim09 ] Voila alors j'ai rencontré un problème que je n'avai jamais rencontrer. Je veu faire une fonction qui rempli un tablaeu avec des chaines de caractères Help.... probleme avec un programme de tri de char [ par ratp ] Es ce que vous pouvez m'aider. j'ai réaliser un programme qui normalement doit permettre de trier les caracteres. mais sa ne marche pas. merci de m'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales