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);
}}}

10 réponses

1 2
Avatar
Amrein-Marie Christophe
wrote:

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




...

Tu préfères pas à la place faire des boucles et travailler avec des
tableaux ? Ca rendrait ton code plus lisible et plus simple à maintenir. Si
tu aimes les maths, c'est comme travailler sur des matrices :

- T'as pas grand chose à ajouter comme mot clef pour travailler avec : "for"
et un "break" dans un de tes "if" pour sortir d'une des boucles.

- Éventuellement des constantes ou des #define pour définir la taille des
tableaux et pouvoir en changer facilement.

- Autre conseil, évites les "toto++" dans tes instructions. C'est pas très
lisible et on peu avoir une erreur de logique du genre :
if ( titi == 5 && ++toto == 7 )...

Si titi != 5, t'auras pas de toto++

- Et pourquoi printf ? Tu préfères les fonctions d'origine du C ? Tu fais
comme tu veux. Le principale c'est qu'il te sorte ce que tu veux sur le
terminal.

Lisibilité difficile => bugs cachés (le plus souvent). La simplicité avant
tout.
Avatar
Michael DOUBEZ
wrote:
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



Je n'ai pas eu le courage de décrypter tout ton code mais, à chaque
fois, tu fais la comparaison x==nb_1 || x==nb_2 .... c'est plus clair
mettre ça en fonction.

Supposant, que nb_1 ... sont dans un std::array nb_12345, c'est équivalent à
std::find(nb_12345.begin(),nb_12345.end(),x)!=nb_12345.end()

Tu pourrais aussi utiliser un std::set, c'est plus logique:
nb_12345.find(x)!=nb_123455.end()

Mis en fonction,ça donne exists_in(value, container).

Ensuite, tu peux stocker les résultats pour éviter de refaire les
comparaisons:
const bool has_nb_11=exists_in(nb_11,nb_12345);
const bool has_nb_22=exists_in(nb_22,nb_12345);
...

Enfin, concernant le comptage des t123,...t235, tu peux refaire comme tu
as fait:
if ( has_nb_11 && has_nb_22 && has_nb_33 )++t123;
...

C'est assez clair et simple pour cet ordre de grandeur.


--
Michael
Avatar
James Kanze
On Mar 24, 11:18 pm, Michael DOUBEZ wrote:
wrote:
> 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



Je n'ai pas eu le courage de décrypter tout ton code mais, à
chaque fois, tu fais la comparaison x==nb_1 || x==nb_2 ....
c'est plus clair mettre ça en fonction.



Le problème, je crois, commence déjà avec la formulation du
problème. Je n'arrive pas à comprendre ce qu'il veut faire. Et
quand ce qu'on ne veut faire n'est pas clair, ou n'est pas
clairement formulé, la conception et le code qui s'en suivent ne
le seront pas non plus.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
euh merci d'avoir repondu
voila comem je les dit dans ancien post je suis debutant
et j'arrive pas avec les vector stocker une ligne de fichier et acceder a
telle ligne et comparer ...

je prefere un exemple que faire un blabla comme je suis aps fort
fichier ligne 1 : 74 85 96 10 2 ficier 2 ligne 1: 2 10 98 54 65
la y a 2 chiffre equivalent
et met pour la ligne 1du fichier 1 2 chiffre equivalent dans une variable
passe a la ligne suivante du fichier 2 ligne 2
et fais al meme chose avec la ligne 1 du fichier 1 toujours
etc
a la fin j aimerais savoir que avec le fichier 1 ligne une il y 5 ligne du
fichier 2 qui ont les meme chiffre
et 3 ligne qui ont 4chiffre equivalent etc
voila j'expere que jai un peu pres bien expliquer



"James Kanze" a écrit dans le message de news:

On Mar 24, 11:18 pm, Michael DOUBEZ wrote:
wrote:
> 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



Je n'ai pas eu le courage de décrypter tout ton code mais, à
chaque fois, tu fais la comparaison x==nb_1 || x==nb_2 ....
c'est plus clair mettre ça en fonction.



Le problème, je crois, commence déjà avec la formulation du
problème. Je n'arrive pas à comprendre ce qu'il veut faire. Et
quand ce qu'on ne veut faire n'est pas clair, ou n'est pas
clairement formulé, la conception et le code qui s'en suivent ne
le seront pas non plus.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
James Kanze
On Mar 25, 5:50 pm, wrote:

voila comem je les dit dans ancien post je suis debutant et
j'arrive pas avec les vector stocker une ligne de fichier et
acceder a telle ligne et comparer ...



je prefere un exemple que faire un blabla comme je suis aps
fort



Et comme j'ai dit, c'est précisement là où réside le problème.
Tant que tu ne peux pas décrire le problème en français, d'une
manière claire et précise, il n'y a aucun espoir de pouvoir le
traduire en C++.

fichier ligne 1 : 74 85 96 10 2 ficier 2 ligne 1: 2 10 98 54 65
la y a 2 chiffre equivalent et met pour la ligne 1du fichier
1 2 chiffre equivalent dans une variable passe a la ligne
suivante du fichier 2 ligne 2 et fais al meme chose avec la
ligne 1 du fichier 1 toujours etc.



Je ne comprends toujours pas tous, mais j'ai l'impression déjà
ce que tu définis une fonction sur le produit cartesien des
lignes dans les deux fichiers. Pour créer l'ensemble des
produits cartesiens, il faut déjà deux boucles imbriquées.

Ensuite, j'ai l'impression que tu veux la cardinalité de l'union
des ensembles de nombres dans chaque pair. La plus simple pour
ça, c'est de trier les donners, puis utiliser std::set_union.

Mais il reste beaucoup d'inconnus : quel est le format exact
des fichiers en entrée (toujours cinq nombres par ligne, ou
non), que c'est qu'il faut faire s'il y a une erreur de format
(laisser tomber la ligne, et continuer, ou abandonner le
traitement). Ensuite, il faudrait bien une définition plus
exacte des données sur lesquelles on travaille, ce qu'il
signifie, etc. Et pour des raisons purement technique, on
aimerait avoir une idée de la taille des données -- le problème
est beaucoup plus simple si on pourrait les tenir tous en
mémoire.

a la fin j aimerais savoir que avec le fichier 1 ligne une il
y 5 ligne du fichier 2 qui ont les meme chiffre et 3 ligne
qui ont 4chiffre equivalent etc voila j'expere que jai un
peu pres bien expliquer



Pas trop. Au moins, ce ne m'est toujours pas trop clair.
Peut-être d'autres ont mieux compris.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
Michael DOUBEZ
James Kanze wrote:
On Mar 25, 5:50 pm, wrote:

voila comem je les dit dans ancien post je suis debutant et
j'arrive pas avec les vector stocker une ligne de fichier et
acceder a telle ligne et comparer ...



je prefere un exemple que faire un blabla comme je suis aps
fort



Et comme j'ai dit, c'est précisement là où réside le problème.
Tant que tu ne peux pas décrire le problème en français, d'une
manière claire et précise, il n'y a aucun espoir de pouvoir le
traduire en C++.

fichier ligne 1 : 74 85 96 10 2 ficier 2 ligne 1: 2 10 98 54 65
la y a 2 chiffre equivalent et met pour la ligne 1du fichier
1 2 chiffre equivalent dans une variable passe a la ligne
suivante du fichier 2 ligne 2 et fais al meme chose avec la
ligne 1 du fichier 1 toujours etc.



Je ne comprends toujours pas tous, mais j'ai l'impression déjà
ce que tu définis une fonction sur le produit cartesien des
lignes dans les deux fichiers. Pour créer l'ensemble des
produits cartesiens, il faut déjà deux boucles imbriquées.



Il n'a pas donné de précondition quand au fait que les nombres soient
distinct donc il n'est pas à priori possible d'utiliser les ensembles et
je suppose qu'il s'agit de sac.

D'après le code, il prends tous les sous-sac de trois éléments d'un sac
de référence (R={{nb_1,nb_2,nb_3,nb_4,nb_5}}) de 5 éléments. Puis il
calcule le nombre de fois ou chacun de ces sous-sacs de R est également
un sous-sac de sacs d'entrées I={{ {{nb_11,nb_22,nb_33,nb_44,nb_55}},... }}.

[snip]

a la fin j aimerais savoir que avec le fichier 1 ligne une il
y 5 ligne du fichier 2 qui ont les meme chiffre et 3 ligne
qui ont 4chiffre equivalent etc voila j'expere que jai un
peu pres bien expliquer



Pas trop. Au moins, ce ne m'est toujours pas trop clair.
Peut-être d'autres ont mieux compris.



Pas mieux.

--
Michael
Avatar
donc voila fichier text qui sont defini comme ci dessous:
1234 45 67 89 9 2
etc
etc
le premier chiffre 1234 je tiens pas compte il prend les 5 chiffre qui
suive le 1234
et compare ligne d un second fichier text aussi defini la meme chose et la
fin je voudrais savoir
que la ligne du fichier un il y a 5 chiffre equivalent sur deux ligne du
fichier 2
4 chiffre equivalent sur 8 ligne du ficier 2
3 chiffre equivalent sur 14 ligne du fichier 2
etc
jusqua 2 chiffre equivalent
apres quand a fini de verifier el fichier 2 avec la ligne 1 passe a la ligne
2 du fichier 1 et fais la meme chose avec le fichier et recherche combiend e
ligne il y a equivalene avec la ligne 2 du fichier 1 etc
jusqua la fin
voila j'espere un peu pluscomprensible


"James Kanze" a écrit dans le message de news:

On Mar 25, 5:50 pm, wrote:

voila comem je les dit dans ancien post je suis debutant et
j'arrive pas avec les vector stocker une ligne de fichier et
acceder a telle ligne et comparer ...



je prefere un exemple que faire un blabla comme je suis aps
fort



Et comme j'ai dit, c'est précisement là où réside le problème.
Tant que tu ne peux pas décrire le problème en français, d'une
manière claire et précise, il n'y a aucun espoir de pouvoir le
traduire en C++.

fichier ligne 1 : 74 85 96 10 2 ficier 2 ligne 1: 2 10 98 54 65
la y a 2 chiffre equivalent et met pour la ligne 1du fichier
1 2 chiffre equivalent dans une variable passe a la ligne
suivante du fichier 2 ligne 2 et fais al meme chose avec la
ligne 1 du fichier 1 toujours etc.



Je ne comprends toujours pas tous, mais j'ai l'impression déjà
ce que tu définis une fonction sur le produit cartesien des
lignes dans les deux fichiers. Pour créer l'ensemble des
produits cartesiens, il faut déjà deux boucles imbriquées.

Ensuite, j'ai l'impression que tu veux la cardinalité de l'union
des ensembles de nombres dans chaque pair. La plus simple pour
ça, c'est de trier les donners, puis utiliser std::set_union.

Mais il reste beaucoup d'inconnus : quel est le format exact
des fichiers en entrée (toujours cinq nombres par ligne, ou
non), que c'est qu'il faut faire s'il y a une erreur de format
(laisser tomber la ligne, et continuer, ou abandonner le
traitement). Ensuite, il faudrait bien une définition plus
exacte des données sur lesquelles on travaille, ce qu'il
signifie, etc. Et pour des raisons purement technique, on
aimerait avoir une idée de la taille des données -- le problème
est beaucoup plus simple si on pourrait les tenir tous en
mémoire.

a la fin j aimerais savoir que avec le fichier 1 ligne une il
y 5 ligne du fichier 2 qui ont les meme chiffre et 3 ligne
qui ont 4chiffre equivalent etc voila j'expere que jai un
peu pres bien expliquer



Pas trop. Au moins, ce ne m'est toujours pas trop clair.
Peut-être d'autres ont mieux compris.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
pjb
writes:

donc voila fichier text qui sont defini comme ci dessous:
1234 45 67 89 9 2
etc
etc
le premier chiffre 1234 je tiens pas compte il prend les 5 chiffre qui
suive le 1234
et compare ligne d un second fichier text aussi defini la meme chose et la
fin je voudrais savoir
que la ligne du fichier un il y a 5 chiffre equivalent sur deux ligne du
fichier 2
4 chiffre equivalent sur 8 ligne du ficier 2
3 chiffre equivalent sur 14 ligne du fichier 2
etc
jusqua 2 chiffre equivalent
apres quand a fini de verifier el fichier 2 avec la ligne 1 passe a la ligne
2 du fichier 1 et fais la meme chose avec le fichier et recherche combiend e
ligne il y a equivalene avec la ligne 2 du fichier 1 etc
jusqua la fin
voila j'espere un peu pluscomprensible



Non ce n'est pas compréhensible.
On n'a là qu'une suite informe de mots et de nombres.
Il faudrait écrire des phrases.

--
__Pascal Bourguignon__
Avatar
Michael DOUBEZ
wrote:
donc voila fichier text qui sont defini comme ci dessous:
1234 45 67 89 9 2
etc
etc
le premier chiffre 1234 je tiens pas compte il prend les 5 chiffre qui
suive le 1234
et compare ligne d un second fichier text aussi defini la meme chose et la
fin je voudrais savoir
que la ligne du fichier un il y a 5 chiffre equivalent sur deux ligne du
fichier 2
4 chiffre equivalent sur 8 ligne du ficier 2
3 chiffre equivalent sur 14 ligne du fichier 2
etc
jusqua 2 chiffre equivalent
apres quand a fini de verifier el fichier 2 avec la ligne 1 passe a la ligne
2 du fichier 1 et fais la meme chose avec le fichier et recherche combiend e
ligne il y a equivalene avec la ligne 2 du fichier 1 etc
jusqua la fin
voila j'espere un peu pluscomprensible



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
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





"Michael DOUBEZ" a écrit dans le message de news:
49cb8d94$0$10133$
wrote:
donc voila fichier text qui sont defini comme ci dessous:
1234 45 67 89 9 2
etc
etc
le premier chiffre 1234 je tiens pas compte il prend les 5 chiffre qui
suive le 1234
et compare ligne d un second fichier text aussi defini la meme chose et
la fin je voudrais savoir
que la ligne du fichier un il y a 5 chiffre equivalent sur deux ligne du
fichier 2
4 chiffre equivalent sur 8 ligne du ficier 2
3 chiffre equivalent sur 14 ligne du fichier 2
etc
jusqua 2 chiffre equivalent
apres quand a fini de verifier el fichier 2 avec la ligne 1 passe a la
ligne 2 du fichier 1 et fais la meme chose avec le fichier et recherche
combiend e ligne il y a equivalene avec la ligne 2 du fichier 1 etc
jusqua la fin
voila j'espere un peu pluscomprensible



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


1 2