Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

algoritme de comparaison

16 réponses
Avatar
voila le code je sais pas mais pour le rendre plus simple pas evident comme
encore beginner

en resume compare valeur de de ligne avec 5 chiffre par ligne
avec un autre ligne de 5 chiffre
et s'il y a des equivalence ben me +1 dans une variable
voila merci
le t125 veu dire que le chiffre 1 et 2 et 5 de la ligne et equivalent e st
ainsi de suite
et ajoute+1 si y une autre ligne comparer qui a aussi cette equivalence la



if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)
{if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)
{if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)
{ printf(" test t123=%d \n",t123);++t123;printf(" test t123=%d
\n",t123);}}}



if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)

{if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)
{printf(" test t124=%d \n",t124); ++t124;printf(" test t124=%d \n",t124);}}}


if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)

{if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{ printf(" test t125=%d \n",t125);

++t125;

printf(" test t125=%d \n",t125);
}}}


if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)

{if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)

{printf(" test t134=%d \n",t134);

++t134;

printf(" test t134=%d \n",t134);
}}}

if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)

{if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{ printf(" test t135=%d \n",t135);

++t135;

printf(" test t135=%d \n",t135);
}}}

if (nb_11==nb_1 || nb_11==nb_2 || nb_11==nb_3 || nb_11==nb_4 ||
nb_11==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{printf(" test t145=%d \n",t145);

++t145;

printf(" test t145=%d \n",t145);
}}}

if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)

{if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)

{ printf(" test t234=%d \n",t234);

++t234;

printf(" test t234=%d \n",t234);
}}}


if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)

{if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{ printf(" test t235=%d \n",t235);

++t235;

printf(" test t235=%d \n",t235);
}}}

if (nb_22==nb_1 || nb_22==nb_2 || nb_22==nb_3 || nb_22==nb_4 ||
nb_22==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{printf(" test t245=%d \n",t245);

++t245;

printf(" test t245=%d \n",t245);
}}}

if (nb_33==nb_1 || nb_33==nb_2 || nb_33==nb_3 || nb_33==nb_4 ||
nb_33==nb_5)

{if (nb_44==nb_1 || nb_44==nb_2 || nb_44==nb_3 || nb_44==nb_4 ||
nb_44==nb_5)

{if (nb_55==nb_1 || nb_55==nb_2 || nb_55==nb_3 || nb_55==nb_4 ||
nb_55==nb_5)

{printf(" test t345=%d \n",t345);

++t345;

printf(" test t345=%d \n",t345);
}}}

6 réponses

1 2
Avatar
Michael DOUBEZ
wrote:
euh la j'arrive a comprenre le prog comme je connais pas
mais pas tout a fais ca encore je crois

en va faire un exemple plus concret :
fichier 1:
1234 12 34 56 67 89
4321 23 32 43 54 65
9876 1 2 3 4 5

fichier 2:
1234 89 56 45 45 56
7412 59 67 12 34 01
8523 54 65 02 03 07

donc comapre la ligne 1 du fichier avec toute les ligne du fichier 2

1234 12 34 56 67 89 <> 1234 89 56 45 45 56
il y a 2 equivalent le 56 89 donc ajouterai a +1 a t2 par exemple
ensuite compare
toujours ligne 1 avec ligne deux fu fichier 2
1234 12 34 56 67 89 <>7412 59 67 12 34 01
la aussi 2 equivalence donc ajoute +1 a t2
etc
quand fini avec de lire toute le fichier 2

me dit ligne 1 t2=2 dans notre exemple t3= 56 etc etc
et aprs l fais la meme chose avec la ligne 2 du fichier
4321 23 32 43 54 65 <> 1234 89 56 45 45 56
la y a rien
4321 23 32 43 54 65 <> 7412 59 67 12 34 01
la non plus
4321 23 32 43 54 65 <> 8523 54 65 32 03 07
la y a 3 donc t3+1
et ainsi de suite je pense plus claire la non



Ca correspond avec ce que j'ai dit.
De ton fichier1 et fichier2, sur une iteration, tu as les tableaux:
std::tr1::array<int,5> bag1={12,34,56,67,89};
std::tr1::array<int,5> bag2={19,56,45,45,56};

Tes données ont l'air d'être déjà triée mais si ce n'est pas le cas:
std::sort(bag1.begin(),bag1.end());
std::sort(bag2.begin(),bag2.end());

Calculer l'intersection des multisets:
int bag_intersect[5];
int* end=std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
&bag_intersect[0]
);

Calculer le nombre d'élément de l'intersection
int count=(end-bag_intersect)/sizeof(bag_intersect[0]);

Ou bien avec l'iterator donné en bas:
int count=0;
std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
count_iterator(count)
);



"Michael DOUBEZ" a écrit dans le message de news:


[snip]
Un peu plus. Je reformule:
D'un fichier, tu lis des groupes de 5 nombres organisés par ligne (avec un
nombre en début de ligne que tu ignore).
Ensuite, pour chaque groupe de ces 5 nombre, tu fais ce qui suit:
Ouvrir un deuxième fichier de même format Et compter
le nombre de lignes qui comportent le même nombre de nombres égaux
avec un minimum de deux nombres égaux.

Mathématiquement, tu calcules les cardinalités des intersections des
multiensembles.

Pour cela, tu tries tes entrées de 5 nombre (ou tu utilise un multiset) et
tu calcules leur intersection avec l'algorithme set_intersection().
Ensuite, il suffit d'obtenir la taille de l'intersection.

Alternativement, tu peux utiliser un iterator qui ne fait que compter le
nombre de fois où il est incrémenté dans set_intersection().

struct count_iterator:
public std::iterator<std::output_iterator_tag, void>
{
int* counter;

count_iterator(int& c):counter(&c){}

count_iterator& operator++(){++*counter;return(*this);}
count_iterator& operator++(int){++*counter;return(*this);}

count_iterator& operator*(){return *this;}
count_iterator* operator->(){return this;}

count_iterator& operator=(const count_iterator& i){counter=i.t;}

template<class T>
count_iterator& operator=(const T&){return *this;}
};





--
Michael
Avatar
la je comprend pas je suis encore debutant et la les vector ou ce que tu as
ecris je sais pas le mettre en pratique en prog...
"Michael DOUBEZ" a écrit dans le message de news:
49cba766$0$24827$
wrote:
euh la j'arrive a comprenre le prog comme je connais pas
mais pas tout a fais ca encore je crois

en va faire un exemple plus concret :
fichier 1:
1234 12 34 56 67 89
4321 23 32 43 54 65
9876 1 2 3 4 5

fichier 2:
1234 89 56 45 45 56
7412 59 67 12 34 01
8523 54 65 02 03 07

donc comapre la ligne 1 du fichier avec toute les ligne du fichier 2

1234 12 34 56 67 89 <> 1234 89 56 45 45 56
il y a 2 equivalent le 56 89 donc ajouterai a +1 a t2 par exemple
ensuite compare
toujours ligne 1 avec ligne deux fu fichier 2
1234 12 34 56 67 89 <>7412 59 67 12 34 01
la aussi 2 equivalence donc ajoute +1 a t2
etc
quand fini avec de lire toute le fichier 2

me dit ligne 1 t2=2 dans notre exemple t3= 56 etc etc
et aprs l fais la meme chose avec la ligne 2 du fichier
4321 23 32 43 54 65 <> 1234 89 56 45 45 56
la y a rien
4321 23 32 43 54 65 <> 7412 59 67 12 34 01
la non plus
4321 23 32 43 54 65 <> 8523 54 65 32 03 07
la y a 3 donc t3+1
et ainsi de suite je pense plus claire la non



Ca correspond avec ce que j'ai dit.
De ton fichier1 et fichier2, sur une iteration, tu as les tableaux:
std::tr1::array<int,5> bag1={12,34,56,67,89};
std::tr1::array<int,5> bag2={19,56,45,45,56};

Tes données ont l'air d'être déjà triée mais si ce n'est pas le cas:
std::sort(bag1.begin(),bag1.end());
std::sort(bag2.begin(),bag2.end());

Calculer l'intersection des multisets:
int bag_intersect[5];
int* end=std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
&bag_intersect[0]
);

Calculer le nombre d'élément de l'intersection
int count=(end-bag_intersect)/sizeof(bag_intersect[0]);

Ou bien avec l'iterator donné en bas:
int count=0;
std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
count_iterator(count)
);



"Michael DOUBEZ" a écrit dans le message de
news:


[snip]
Un peu plus. Je reformule:
D'un fichier, tu lis des groupes de 5 nombres organisés par ligne (avec
un nombre en début de ligne que tu ignore).
Ensuite, pour chaque groupe de ces 5 nombre, tu fais ce qui suit:
Ouvrir un deuxième fichier de même format Et compter
le nombre de lignes qui comportent le même nombre de nombres égaux
avec un minimum de deux nombres égaux.

Mathématiquement, tu calcules les cardinalités des intersections des
multiensembles.

Pour cela, tu tries tes entrées de 5 nombre (ou tu utilise un multiset)
et tu calcules leur intersection avec l'algorithme set_intersection().
Ensuite, il suffit d'obtenir la taille de l'intersection.

Alternativement, tu peux utiliser un iterator qui ne fait que compter le
nombre de fois où il est incrémenté dans set_intersection().

struct count_iterator:
public std::iterator<std::output_iterator_tag, void>
{
int* counter;

count_iterator(int& c):counter(&c){}

count_iterator& operator++(){++*counter;return(*this);}
count_iterator& operator++(int){++*counter;return(*this);}

count_iterator& operator*(){return *this;}
count_iterator* operator->(){return this;}

count_iterator& operator=(const count_iterator& i){counter=i.t;}

template<class T>
count_iterator& operator=(const T&){return *this;}
};





--
Michael



Avatar
Michael DOUBEZ
wrote:
la je comprend pas je suis encore debutant et la les vector ou ce que tu as
ecris je sais pas le mettre en pratique en prog...



Si tu sais lire des données d'un fichier, les mettre dans un tableau,
les trier, la suite est suivant l'algorithme suivant:

const int data_nb = 5;
typedef int data_type[data_nb];

// renvoie le nombre de nombres égaux dans deux lignes
// pre: les paramètres sont triés par ordre croissant
int count_intersect(const data_type& bag1, const data_type& bag2)
{
int count=0; // compte le nombre d'éléments égaux
int i1=0; // index dans bag1
int i2=0; //index dans bag2

while( (i1<data_nb) && (i2<data_nb) )
{
if ( bag1[i1] < bag2[i2] )
{ // regarde l'élément suivant de bag1 pour égalité
++i1;
}
else if ( bag2[i2] < bag1[i1] )
{ // regarde l'élément suivant de bag2 pour égalité
++i2;
}
else // bag1[i1] =ºg2[i2]*/
{ // les éléments sont égaux - ajouter au compteur
++i1;++i2;
++count;
}
}

return count;
}

Dans ta boucle de lecture:
data_type bag1={12,34,56,67,89};
data_type bag2={19,34,45,56,56};

int t=count_intersect(bag1,bag2);
assert( t == 2 );

"Michael DOUBEZ" a écrit dans le message de news:
49cba766$0$24827$
wrote:
euh la j'arrive a comprenre le prog comme je connais pas
mais pas tout a fais ca encore je crois

en va faire un exemple plus concret :
fichier 1:
1234 12 34 56 67 89
4321 23 32 43 54 65
9876 1 2 3 4 5

fichier 2:
1234 89 56 45 45 56
7412 59 67 12 34 01
8523 54 65 02 03 07

donc comapre la ligne 1 du fichier avec toute les ligne du fichier 2

1234 12 34 56 67 89 <> 1234 89 56 45 45 56
il y a 2 equivalent le 56 89 donc ajouterai a +1 a t2 par exemple
ensuite compare
toujours ligne 1 avec ligne deux fu fichier 2
1234 12 34 56 67 89 <>7412 59 67 12 34 01
la aussi 2 equivalence donc ajoute +1 a t2
etc
quand fini avec de lire toute le fichier 2

me dit ligne 1 t2=2 dans notre exemple t3= 56 etc etc
et aprs l fais la meme chose avec la ligne 2 du fichier
4321 23 32 43 54 65 <> 1234 89 56 45 45 56
la y a rien
4321 23 32 43 54 65 <> 7412 59 67 12 34 01
la non plus
4321 23 32 43 54 65 <> 8523 54 65 32 03 07
la y a 3 donc t3+1
et ainsi de suite je pense plus claire la non


Ca correspond avec ce que j'ai dit.
De ton fichier1 et fichier2, sur une iteration, tu as les tableaux:
std::tr1::array<int,5> bag1={12,34,56,67,89};
std::tr1::array<int,5> bag2={19,56,45,45,56};

Tes données ont l'air d'être déjà triée mais si ce n'est pas le cas:
std::sort(bag1.begin(),bag1.end());
std::sort(bag2.begin(),bag2.end());

Calculer l'intersection des multisets:
int bag_intersect[5];
int* end=std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
&bag_intersect[0]
);

Calculer le nombre d'élément de l'intersection
int count=(end-bag_intersect)/sizeof(bag_intersect[0]);

Ou bien avec l'iterator donné en bas:
int count=0;
std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
count_iterator(count)
);


"Michael DOUBEZ" a écrit dans le message de
news:


[snip]
Un peu plus. Je reformule:
D'un fichier, tu lis des groupes de 5 nombres organisés par ligne (avec
un nombre en début de ligne que tu ignore).
Ensuite, pour chaque groupe de ces 5 nombre, tu fais ce qui suit:
Ouvrir un deuxième fichier de même format Et compter
le nombre de lignes qui comportent le même nombre de nombres égaux
avec un minimum de deux nombres égaux.

Mathématiquement, tu calcules les cardinalités des intersections des
multiensembles.

Pour cela, tu tries tes entrées de 5 nombre (ou tu utilise un multiset)
et tu calcules leur intersection avec l'algorithme set_intersection().
Ensuite, il suffit d'obtenir la taille de l'intersection.

Alternativement, tu peux utiliser un iterator qui ne fait que compter le
nombre de fois où il est incrémenté dans set_intersection().

struct count_iterator:
public std::iterator<std::output_iterator_tag, void>
{
int* counter;

count_iterator(int& c):counter(&c){}

count_iterator& operator++(){++*counter;return(*this);}
count_iterator& operator++(int){++*counter;return(*this);}

count_iterator& operator*(){return *this;}
count_iterator* operator->(){return this;}

count_iterator& operator=(const count_iterator& i){counter=i.t;}

template<class T>
count_iterator& operator=(const T&){return *this;}
};









--
Michael
Avatar
donc les mettre dans tableau avec vector tu veu dire et bien moi je les
laisser dans les variable ...comem je sais pas encore mettre dans untableau
de taille inconnu et acceder a chaque ligne pour controler

et ca

data_type bag1={12,34,56,67,89}; les chiffre 12.34 etc je dois les
marquer pour chaque ligne ou du deuxieme fichier
ou le ferra tout seul

"Michael DOUBEZ" a écrit dans le message de news:
49cc9309$0$12936$
wrote:
la je comprend pas je suis encore debutant et la les vector ou ce que tu
as ecris je sais pas le mettre en pratique en prog...



Si tu sais lire des données d'un fichier, les mettre dans un tableau, les
trier, la suite est suivant l'algorithme suivant:

const int data_nb = 5;
typedef int data_type[data_nb];

// renvoie le nombre de nombres égaux dans deux lignes
// pre: les paramètres sont triés par ordre croissant
int count_intersect(const data_type& bag1, const data_type& bag2)
{
int count=0; // compte le nombre d'éléments égaux
int i1=0; // index dans bag1
int i2=0; //index dans bag2

while( (i1<data_nb) && (i2<data_nb) )
{
if ( bag1[i1] < bag2[i2] )
{ // regarde l'élément suivant de bag1 pour égalité
++i1;
}
else if ( bag2[i2] < bag1[i1] )
{ // regarde l'élément suivant de bag2 pour égalité
++i2;
}
else // bag1[i1] =ºg2[i2]*/
{ // les éléments sont égaux - ajouter au compteur
++i1;++i2;
++count;
}
}

return count;
}

Dans ta boucle de lecture:
data_type bag1={12,34,56,67,89};
data_type bag2={19,34,45,56,56};

int t=count_intersect(bag1,bag2);
assert( t == 2 );

"Michael DOUBEZ" a écrit dans le message de
news: 49cba766$0$24827$
wrote:
euh la j'arrive a comprenre le prog comme je connais pas
mais pas tout a fais ca encore je crois

en va faire un exemple plus concret :
fichier 1:
1234 12 34 56 67 89
4321 23 32 43 54 65
9876 1 2 3 4 5

fichier 2:
1234 89 56 45 45 56
7412 59 67 12 34 01
8523 54 65 02 03 07

donc comapre la ligne 1 du fichier avec toute les ligne du fichier 2

1234 12 34 56 67 89 <> 1234 89 56 45 45 56
il y a 2 equivalent le 56 89 donc ajouterai a +1 a t2 par exemple
ensuite compare
toujours ligne 1 avec ligne deux fu fichier 2
1234 12 34 56 67 89 <>7412 59 67 12 34 01
la aussi 2 equivalence donc ajoute +1 a t2
etc
quand fini avec de lire toute le fichier 2

me dit ligne 1 t2=2 dans notre exemple t3= 56 etc etc
et aprs l fais la meme chose avec la ligne 2 du fichier
4321 23 32 43 54 65 <> 1234 89 56 45 45 56
la y a rien
4321 23 32 43 54 65 <> 7412 59 67 12 34 01
la non plus
4321 23 32 43 54 65 <> 8523 54 65 32 03 07
la y a 3 donc t3+1
et ainsi de suite je pense plus claire la non


Ca correspond avec ce que j'ai dit.
De ton fichier1 et fichier2, sur une iteration, tu as les tableaux:
std::tr1::array<int,5> bag1={12,34,56,67,89};
std::tr1::array<int,5> bag2={19,56,45,45,56};

Tes données ont l'air d'être déjà triée mais si ce n'est pas le cas:
std::sort(bag1.begin(),bag1.end());
std::sort(bag2.begin(),bag2.end());

Calculer l'intersection des multisets:
int bag_intersect[5];
int* end=std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
&bag_intersect[0]
);

Calculer le nombre d'élément de l'intersection
int count=(end-bag_intersect)/sizeof(bag_intersect[0]);

Ou bien avec l'iterator donné en bas:
int count=0;
std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
count_iterator(count)
);


"Michael DOUBEZ" a écrit dans le message de
news:


[snip]
Un peu plus. Je reformule:
D'un fichier, tu lis des groupes de 5 nombres organisés par ligne
(avec un nombre en début de ligne que tu ignore).
Ensuite, pour chaque groupe de ces 5 nombre, tu fais ce qui suit:
Ouvrir un deuxième fichier de même format Et compter
le nombre de lignes qui comportent le même nombre de nombres égaux
avec un minimum de deux nombres égaux.

Mathématiquement, tu calcules les cardinalités des intersections des
multiensembles.

Pour cela, tu tries tes entrées de 5 nombre (ou tu utilise un
multiset) et tu calcules leur intersection avec l'algorithme
set_intersection(). Ensuite, il suffit d'obtenir la taille de
l'intersection.

Alternativement, tu peux utiliser un iterator qui ne fait que compter
le nombre de fois où il est incrémenté dans set_intersection().

struct count_iterator:
public std::iterator<std::output_iterator_tag, void>
{
int* counter;

count_iterator(int& c):counter(&c){}

count_iterator& operator++(){++*counter;return(*this);}
count_iterator& operator++(int){++*counter;return(*this);}

count_iterator& operator*(){return *this;}
count_iterator* operator->(){return this;}

count_iterator& operator=(const count_iterator& i){counter=i.t;}

template<class T>
count_iterator& operator=(const T&){return *this;}
};









--
Michael


Avatar
Michel Decima
a écrit :
donc les mettre dans tableau avec vector tu veu dire et bien moi je les
laisser dans les variable ...comem je sais pas encore mettre dans untableau
de taille inconnu et acceder a chaque ligne pour controler



L'avantage du tableau, c'est que si le specifications viennent a
changer, par exemple non plus 5 elements par ligne, mais 6, ou 42,
alors ton code fonctionne toujours de maniere transparente.
(pour te faire une idee, essaie de modifier ton code original
pour gerer 6 elements ...)

Sinon, pour l'utilisation d'un tableau, tu pourrais regarder
la documentation de la classe <vector>, ca va vraiment t'etre
utile pour la suite.

Pour remplir un tableau, et le trier :

#include <vector> // pour std::vector
#include <algorithm> // pour std::sort

std::vector< int > tab ;
tab.push_back( 12 ) ;
tab.push_back( 34 ) ;
tab.push_back( 56 ) ;
// etc...
std::sort( tab.begin(), tab.end() ) ;

Tu peux ensuite acceder aux elements en lecture/ecriture
avec l'operateur [], et acceder a la taille avec la fonction
membre size() :

for ( int i = 0 ; i < tab.size() ; i++ ) {
std::cout << tab[ i ] << std::endl ;
}

Mais pour utiliser le code de Michael, tu n'a pas besoin de
connaitre la classe std::vector, il te suffit de remplir des
objet de type data_type, qui n'est qu'un tableau de taille
fixe.

data_type tab ;
tab[ 0 ] = 12 ;
tab[ 1 ] = 34 ;
// etc...
std::sort( &tab[ 0 ], &tab[ data_nb ] ) ;



et ca

data_type bag1={12,34,56,67,89}; les chiffre 12.34 etc je dois les
marquer pour chaque ligne ou du deuxieme fichier
ou le ferra tout seul

"Michael DOUBEZ" a écrit dans le message de news:
49cc9309$0$12936$
wrote:
la je comprend pas je suis encore debutant et la les vector ou ce que tu
as ecris je sais pas le mettre en pratique en prog...


Si tu sais lire des données d'un fichier, les mettre dans un tableau, les
trier, la suite est suivant l'algorithme suivant:

const int data_nb = 5;
typedef int data_type[data_nb];

// renvoie le nombre de nombres égaux dans deux lignes
// pre: les paramètres sont triés par ordre croissant
int count_intersect(const data_type& bag1, const data_type& bag2)
{
int count=0; // compte le nombre d'éléments égaux
int i1=0; // index dans bag1
int i2=0; //index dans bag2

while( (i1<data_nb) && (i2<data_nb) )
{
if ( bag1[i1] < bag2[i2] )
{ // regarde l'élément suivant de bag1 pour égalité
++i1;
}
else if ( bag2[i2] < bag1[i1] )
{ // regarde l'élément suivant de bag2 pour égalité
++i2;
}
else // bag1[i1] =ºg2[i2]*/
{ // les éléments sont égaux - ajouter au compteur
++i1;++i2;
++count;
}
}

return count;
}

Dans ta boucle de lecture:
data_type bag1={12,34,56,67,89};
data_type bag2={19,34,45,56,56};

int t=count_intersect(bag1,bag2);
assert( t == 2 );

"Michael DOUBEZ" a écrit dans le message de
news: 49cba766$0$24827$
wrote:
euh la j'arrive a comprenre le prog comme je connais pas
mais pas tout a fais ca encore je crois

en va faire un exemple plus concret :
fichier 1:
1234 12 34 56 67 89
4321 23 32 43 54 65
9876 1 2 3 4 5

fichier 2:
1234 89 56 45 45 56
7412 59 67 12 34 01
8523 54 65 02 03 07

donc comapre la ligne 1 du fichier avec toute les ligne du fichier 2

1234 12 34 56 67 89 <> 1234 89 56 45 45 56
il y a 2 equivalent le 56 89 donc ajouterai a +1 a t2 par exemple
ensuite compare
toujours ligne 1 avec ligne deux fu fichier 2
1234 12 34 56 67 89 <>7412 59 67 12 34 01
la aussi 2 equivalence donc ajoute +1 a t2
etc
quand fini avec de lire toute le fichier 2

me dit ligne 1 t2=2 dans notre exemple t3= 56 etc etc
et aprs l fais la meme chose avec la ligne 2 du fichier
4321 23 32 43 54 65 <> 1234 89 56 45 45 56
la y a rien
4321 23 32 43 54 65 <> 7412 59 67 12 34 01
la non plus
4321 23 32 43 54 65 <> 8523 54 65 32 03 07
la y a 3 donc t3+1
et ainsi de suite je pense plus claire la non


Ca correspond avec ce que j'ai dit.
De ton fichier1 et fichier2, sur une iteration, tu as les tableaux:
std::tr1::array<int,5> bag1={12,34,56,67,89};
std::tr1::array<int,5> bag2={19,56,45,45,56};

Tes données ont l'air d'être déjà triée mais si ce n'est pas le cas:
std::sort(bag1.begin(),bag1.end());
std::sort(bag2.begin(),bag2.end());

Calculer l'intersection des multisets:
int bag_intersect[5];
int* end=std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
&bag_intersect[0]
);

Calculer le nombre d'élément de l'intersection
int count=(end-bag_intersect)/sizeof(bag_intersect[0]);

Ou bien avec l'iterator donné en bas:
int count=0;
std::set_intersection(
bag1.begin(),bag1.end(),
bag2.begin(),bag2.end(),
count_iterator(count)
);


"Michael DOUBEZ" a écrit dans le message de
news:


[snip]
Un peu plus. Je reformule:
D'un fichier, tu lis des groupes de 5 nombres organisés par ligne
(avec un nombre en début de ligne que tu ignore).
Ensuite, pour chaque groupe de ces 5 nombre, tu fais ce qui suit:
Ouvrir un deuxième fichier de même format Et compter
le nombre de lignes qui comportent le même nombre de nombres égaux
avec un minimum de deux nombres égaux.

Mathématiquement, tu calcules les cardinalités des intersections des
multiensembles.

Pour cela, tu tries tes entrées de 5 nombre (ou tu utilise un
multiset) et tu calcules leur intersection avec l'algorithme
set_intersection(). Ensuite, il suffit d'obtenir la taille de
l'intersection.

Alternativement, tu peux utiliser un iterator qui ne fait que compter
le nombre de fois où il est incrémenté dans set_intersection().

struct count_iterator:
public std::iterator<std::output_iterator_tag, void>
{
int* counter;

count_iterator(int& c):counter(&c){}

count_iterator& operator++(){++*counter;return(*this);}
count_iterator& operator++(int){++*counter;return(*this);}

count_iterator& operator*(){return *this;}
count_iterator* operator->(){return this;}

count_iterator& operator=(const count_iterator& i){counter=i.t;}

template<class T>
count_iterator& operator=(const T&){return *this;}
};








--
Michael






Avatar
Michael DOUBEZ
wrote:
donc les mettre dans tableau avec vector tu veu dire et bien moi je les
laisser dans les variable ...comem je sais pas encore mettre dans untableau
de taille inconnu et acceder a chaque ligne pour controler

et ca

data_type bag1={12,34,56,67,89}; les chiffre 12.34 etc je dois les
marquer pour chaque ligne ou du deuxieme fichier
ou le ferra tout seul




Je pense qu'à cette étape, il te revient d'apprendre à programmer pour
réaliser ces opérations.



"Michael DOUBEZ" a écrit dans le message de news:
49cc9309$0$12936$
wrote:
la je comprend pas je suis encore debutant et la les vector ou ce que tu
as ecris je sais pas le mettre en pratique en prog...


Si tu sais lire des données d'un fichier, les mettre dans un tableau, les
trier, la suite est suivant l'algorithme suivant:

const int data_nb = 5;
typedef int data_type[data_nb];

// renvoie le nombre de nombres égaux dans deux lignes
// pre: les paramètres sont triés par ordre croissant
int count_intersect(const data_type& bag1, const data_type& bag2)
{
int count=0; // compte le nombre d'éléments égaux
int i1=0; // index dans bag1
int i2=0; //index dans bag2

while( (i1<data_nb) && (i2<data_nb) )
{
if ( bag1[i1] < bag2[i2] )
{ // regarde l'élément suivant de bag1 pour égalité
++i1;
}
else if ( bag2[i2] < bag1[i1] )
{ // regarde l'élément suivant de bag2 pour égalité
++i2;
}
else // bag1[i1] =ºg2[i2]*/
{ // les éléments sont égaux - ajouter au compteur
++i1;++i2;
++count;
}
}

return count;
}

Dans ta boucle de lecture:
data_type bag1={12,34,56,67,89};
data_type bag2={19,34,45,56,56};

int t=count_intersect(bag1,bag2);
assert( t == 2 );





--
Michael
1 2