Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : SOS besoin d'aide programmation [ Divers / Débutant(e) ] (zhao77)

mardi 3 octobre 2006 à 11:52:29 | SOS besoin d'aide programmation

zhao77



Bonjour a tous

voila j'ai un probleme de programmation mais je ne sais pas comment faire
je suis neophite en la matiere voila mon probleme .

comment programmer ceci en C .

dans un fichier j'ai des entiers ( 10 par ligne ) ex

1 2 3 4 5 6 7 8 9 10
1 2 5 7 9 10 11 13 14 15
.....
.....
.....
dans mon programme je genere toutes les combinaisons possibles
de 1 a 25 de 10 chiffres C ( 10 25 ) ce qui fait 3 268 760 combinaisons

chaque combinaisons generé doit etre verifier avec chaque ligne de mon fichier ( donc verifier chffre par chiffre) quand un chiffre est commun je doit incrementer un compteur ,faire cela jusqu'a la fin des combinaisons generées .

comment programmer ce genre de choses de façon a ce qu'il soit le plus optimiser possible ? ( par exemple les boucles imbriquées qui sont tres nombreuse , recursivité ... enfin bref je sais pas ;-) )

merci de votre aide
cordialement
ps) pardon pour les fautes

mardi 3 octobre 2006 à 14:18:26 | Re : SOS besoin d'aide programmation

THEwarrior333

Salut
je n'ai pas bien compris le principe de ton programme mais un conseil: evite la recursivite qui est souvent bien moins performante que la methode iterative meme si elle est plus jolie a voir.
Ensuite qq techniques permettent d'optimiser le traitement des boucles. Par exemple, for(int i=0; i<MAX; ++i) est legerement plus rapide que for(int i=0; i<MAX; i++) . Ensuite, si tu imbriques deux boucles pour un parcours de tableau, fais en sorte que la boucle imbriquée parcours sur les lignes du tableau car l'accès en mémoire sera plus rapide.


mardi 3 octobre 2006 à 16:25:19 | Re : SOS besoin d'aide programmation

yann_lo_san

Heu, sans affirmer quoi que ce soit, ton ++i demarre la boucle à 1 et fait passer à l'as le test sur [0], de plus le code assembleur généré ne me parait pas plus rapide, mais j'ai peut être mal compris...


mardi 3 octobre 2006 à 17:16:43 | Re : SOS besoin d'aide programmation

ria94

Tu charges ton fichier dans un tableau de int 10 par 10  et tu compares chaque ligne de ton tableau avec tes 3 268 760 combinaisons

Je part du principe que tu fais une boucle qui englobe ce bou de code afin de remplir ton tableau de combinaison.
Voila comment j'aurai fait mais je t'avoue que j'ai peut etre mal compris ce que tu voulais parce que je ne comprend pas vraiment l'utilité.
int compteur = 0;
int tab_fichier[10][10];
int tab_combinaison[10];
int i,j;

 for(i=0; i<10; i++)
{
    for(j=0; j1<10; j1++)
   {
        tab_fichier[i][j]  = tab_combinaison[j];
         compteur++;
    }
 }

mardi 3 octobre 2006 à 17:29:59 | Re : SOS besoin d'aide programmation

luhtor

si for (... ++i) commence bien à 0 et est (il parait) plus rapide que for (...i++)
Pour les algo récursive, si le niveau de récursivité est faible, moi je voyais pas de différence en temps d'éxécution sur mes progs.


mardi 3 octobre 2006 à 17:32:42 | Re : SOS besoin d'aide programmation

mad_love_disease


En effet yann_lo_san,

l
a ou tu a raison thewarrior333 c'est qu'une méthode récursive n'est pas tres envisageable vu le nombre de calcul à effectuer ainsi que la simplicité du problème; Bref, si j'ai bien compris tu dois Vérifier le fichier texte contenant le nombre et non le générer. Pour ça, je crois que le meilleur moyen est de parcourir tout le fichier texte en comptant l'occurence de chaque nombre, par colone et par ligne.  Un petit test d'égalité à la fin pour les compteurs en colone et un petit test pour chaque combinaisons de nombre en ligne et c'est bon. Je m'explique:

Prenons ton exemple, un fichier généré avec C ( 3 2) nos chiffres seront 0 et 1. ( et oui, on en sort jamais)

on obtient:

    000    compteur 0=3  ; compteur 1=0
    100    compteur 0=2  ; compteur1=1
    010   ........
    001
    011
    101
    110
    111

Pour chaque colone on compte 4 zéros et 4 un.
Pour les lignes on a:
1fois 3 zéros et 1 fois 3 un.  C (3 1) = 1possibilité
3fois 2 zéros et 2 un            C(2  2) + je ne sais koi
3fois 1 zéro et 1 un            C(1 3)   sans répétitions

Bref, je ne suis pas très douer en maths mais l'intuition me dit que la somme des compteurs égaux pour chaque nombre ( en ligne) sont eux aussi égaux.

ca fait pour ton cas 10*25*25 compteurs... (6250)
Ca te fait beaucoup de compteur c'est vrai, mais surement moins que mémorisé les 3 268 760 combinaisons.

Si tu ne compte pas les chiffres en lignes et tu ne compte qu'en colone, les résultats trouvés peuvent être faux, exemple:

pour C(2 2) avec 1 et 0

11
00
00
11

En esperant être clair....

 Mad_Love_Disease

mardi 3 octobre 2006 à 18:39:13 | Re : SOS besoin d'aide programmation

mad_love_disease

et on compte aussi zéro fois zéros et zéro fois un

j'avais oublié celui la... @pluche

 Mad_Love_Disease


mercredi 4 octobre 2006 à 02:39:10 | Re : SOS besoin d'aide programmation

zhao77

bBonjour a tous et merci de vos reponses ,precision :

pour la generation des combi voila comment je procede si vous avez un algo plus rapide je suis preneur  ;-)

#include<stdio.h>
#include <dos.h>
#include <time.h>

main()

{

int tc[10];
int nt=0;
register int i,j,k,l,m,n,o,p,q,r;

FILE *fichier;

fichier=fopen("test.txt","r");

printf("entrez votre valeur ");
scanf("%d",&nt);
a=nt-9;

for(i=1;i<=a;i++)
for(j=i+1;j<=a+1;j++)
for(k=j+1;k<=a+2;k++)
for(l=k+1;l<=a+3;l++)
for(m=l+1;m<=a+4;m++)
for(n=m+1;n<=a+5;n++)
for(o=n+1;o<=a+6;o++)
for(p=o+1;p<=a+7;p++)
for(q=p+1;q<=a+8;q++)
for(r=q+1;r<=a+9;r++)
tc[0]=i;tc[1]=j;tc[2]=k;tc[3]=l;tc[4]=m;tc[5]=n,
tc[6]=o;tc[7]=p;tc[8]=q;tc[9]=r;
}

ensuite quel est la syntaxe pour que chaque chiffre de la combinaison generer soit comparer avec chaque chiffre de chaque ligne de mon fichier ?

par exemple admettons que la combi generer soit celle ci :

1 2 3 4 5 6 7 8 9 10

et que dans mon fichier j'ai ceci :

2 3 7 8 9 11 12 15 17 20
7 8 11 16 18 19 21 22 23 25
.........
.........
.........
etc....

je doit comparer tous les chiffres de ma combi generer avec tous les chiffres de la premier ligne et ceux de la deuxieme ligne etc...et ceci jusqu'a la fin de mon fichier et recommencer  cette operation jusqu'as la derniere combinaisons generer ,cela represent un sacré paquets de tests donc l'optimisation est la bien venu ;-))
cordialement

mercredi 4 octobre 2006 à 12:12:08 | Re : SOS besoin d'aide programmation

mad_love_disease

Je ne comprends pas très bien si tes combinaisons sont ordonnées ou non, avec ou sans répétitions

Peut on avoir 1 1 1 1 1 1 1 1 1 1
ou encore       25 1 2 3 4 5 6 7 8 9 (et) 1 2 3 4 5 25 6 7 8 9

Mad_Love_Disease

mercredi 4 octobre 2006 à 14:11:07 | Re : SOS besoin d'aide programmation

mad_love_disease

Ok, je crois que j'ai trouvé une solution.

Ce que j'ai dit auparavant était valable pour les combinaisons "avec répétitions", ici on a faire (vu ton algo de génération ainsi que le nombre de combis possible) aux combinaisons sans répétions non ordonnés. Pour savoir si ton fichier est valide, il te faut vérifier trois choses;

- La première et ca va de soi est de vérifier si le nombre de combinaisons dans le fichier est égale aux nombre de combinaisons attendue

- La deuxième est de vérifier que les combinaisons sont valides (pas de chiffres invalide (>25 ou <1) et pas de répétitions)

- La troisième est de compter le nombre de combinaisons contenant chaque chiffre. En effet, il y aura autant de combinaisons contenant un 1 que de solutions contenant un 2, un 3 ou un 25 (dans ton cas).

un exemple avec C(4 5)

on a :

1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5

on compte 5 combinaisons (résultat attendu)
il n'y a pas de combinaisons invalides
il y a: 

- 4 combinaisons comprenant un 1
- 4 combinaisons comprenant un 2
- 4 combinaisons comprenant un 3
- 4 combinaisons comprenant un 4
- 4 combinaisons comprenant un 5

le fichier est bon...

Mad_Love_Disease


1 2 3

Cette discussion est classé dans : aide, probleme, programmation, sos, combinaisons


Répondre à ce message

Sujets en rapport avec ce message

projet programmation c++... aidez moi svp [ par GoldFk ] Voilà, je suis étudiant en 1ère ingénieur à bruxelles et j'ai besoin d'aide pour un projet de programmation c++.On pourrait penser que ce n'est pas tr SOS AIDE [ par djoumessi ] salut a tous j'ai des problemes et je voudrais que vous m'aidiez.En effet je suis etudiant de niveau 1 en genie informatique dans une iut camrounaise. Programmation QT, besoin d'aide URGENT!!! [ par D1m3x ] Salut tout le monde,est-ce que quelqu'un sait me dire où je peux trouver de l'aide QT en français??? car j'ai fait un projet et grace à ce bout de cod Au secours!!! besoin d'aide en programmation [ par valouchoue ] Salut!Je suis étudiante et je dois programmer un jeu de dame sous unix et je suis nulle!!!!!Si quelqu'un peux m'aider j'attends vos reponses...Merci.v j'ai besoin d'aide [ par spipiho ] bon voila le probleme :Je suis etudiant en informatique et mes profs mon doner un tp gere les threads a plusieurs niveau de priorites le seul petit pr Probleme de programmation C++ [ par zlitus ] Salut, je ne sait pas programmer en c++ et déssidé d'apprendre.Pour cela j'ai téléchargerDEV-C++ et j'ai essayé de marquer "hello world" avec.Je copi Aide pr virus [Once Again] [ par DeViL_StRiKeR ] Salut a tous,Je ne sais pas pourquoi, mais je ne retrouve plus mon sujet "Aide pour virus" dans le forum que j'avais posté!Meme le lien dans ma boite programmation de probleme de gestion d'hotel avec liste en C [ par mohcene ] Bonjour a tout le monde, vola j'ai un probleme de programmation de probleme de gestion d'hotel avec liste en C, les contraints un client peut réserve fmod j'ai besoin d'aide [ par unionx ] --------------------------------------->------------------------------------------------salut tout le monde voila mo


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.