begin process at 2012 05 28 11:42:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

aide sur les concensus


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

aide sur les concensus

dimanche 1 mai 2005 à 21:10:58 | aide sur les concensus

torgal79

salut

voila je suis tres novice en langage c et je dois comprendre un code portant sur la methode des concensus.Mais le probleme c'est que mes bases sont "faibles" c'est pour cela que je fais appel a vous ainsi je pourrai mieux comprendre ce langage et ce programme.Si il  vous est possible d'inserer des commentaires sur le code a chaque ligne/groupe de ligne(hormis include ou printf ...)
merci pour tout

voila le code :

#include<stdio.h>

#include<stdlib.h>

struct elementliste{

int *valeur;

struct elementliste *suivant,*precedent;

};

typedef struct elementliste ElementListe, *Liste;

 

 

typedef struct file{

Liste premier;

Liste dernier;

int longueur;

} *MONOMES;

 

MONOMES creerFileVide()

{

MONOMES f=(MONOMES)malloc(sizeof(struct file));

Liste elt=(Liste)malloc(sizeof(ElementListe));

elt->suivant=NULL;

elt->precedent=NULL;

f->premier=elt;

f->dernier=elt;

f->longueur=0;

return f;

}

MONOMES enfile(MONOMES f, int *x)

{

Liste elt=f->dernier;

elt->valeur=x;

Liste elt_suiv=(Liste)malloc(sizeof(ElementListe));

elt_suiv->suivant=NULL;

elt_suiv->precedent=elt;

elt->suivant=elt_suiv;

f->dernier=elt_suiv;

f->longueur++;

return f;

}

MONOMES defile(MONOMES f, Liste a)

{

a->precedent->suivant=a->suivant;

a->suivant->precedent=a->precedent;

free(a);

return f;

}

/*

a=1

!a=-1

sinon 0

*/

int *creerConsensus(int nb, int* A, int* B)

{

int i,diff=0;

int *res=(int*)malloc(nb*sizeof(int));

for(i=0;i<nb;i++)

{

if((A[i]!=0) || (B[i]!=0))/**/

{

if(A[i]!=B[i])

{

diff+=1;

if(diff>1)

return NULL;

res[i]=0;

}

else

res[i]=A[i];

}

else

res[i]=(A[i]==0)?B[i]:A[i];

}

return res;

}

Liste Absorption(int nb, Liste A, Liste B)

{

int i,n;

Liste tmp,tmp_prec=NULL;

for(i=0;i<nb;i++)

{

n=(A->valeur[i]*B->valeur[i]);

if(n<0)

return NULL;

else if(!n)

{

tmp=(A->valeur[i]==0)?A:B;

if(tmp==tmp_prec)

return NULL;

tmp_prec=tmp;

}

}

return tmp;

}

MONOMES creerMonome (int nb_monome, int nb_var)

{

int i,var,*tab,j;

MONOMES monomes=creerFileVide();

for(i=0;i<nb_monome;i++)

{

printf("\nmonome %d (1 si a, -1 si !a, 0 sinon)\n",i+1);

tab=(int*)malloc(nb_var*sizeof(int));

for(j=0;j<nb_var;j++)

{

printf("valeur var %d : ",j+1);

scanf("%d",&var);

tab[j]=var;

}

monomes=enfile(monomes,tab);

}

return monomes;

}

 

MONOMES methodeConsensus (int nb_monome, int nb_var)

{

int i,j,k;

MONOMES monome;

int *new;

Liste new2;

Liste first,second,avantcons;

monome=creerMonome(nb_monome,nb_var);

do

{

nb_monome=monome->longueur;

i=0;

/* creation consensus */

avantcons=monome->dernier;

first=monome->premier;

second=first->suivant;

for(j=0;j<nb_monome-1;j++)

{

for(k=j+1;k<nb_monome;k++);

{

new=creerConsensus(nb_var,first->valeur,second->valeur);

if(new)

{

i++;

monome=enfile(monome,new);

}

second=second->suivant;

}

first=first->suivant;

}

if(i)

{

/* absorption */

first=monome->premier;

second=avantcons->suivant;

for(j=0;j<nb_monome-1;j++)

{

while(second!=monome->dernier)

{

new2=Absorption(nb_var,first,second);

if(new2)

{

monome=defile(monome,new2);

}

second=second->suivant;

}

first=first->suivant;

}

}

}while(i!=0);

return monome;

}

void afficheMonomes(MONOMES f, int nb_var)

{

int i,j;

Liste courant=f->premier;

for(i=0;i<f->longueur;i++)

{

for(j=0;j<nb_var;j++)

{

printf("%d ",courant->valeur[j]);

}

printf("+ ");

courant=courant->suivant;

}

}

int main ()

{

int nb_cons,nb_var;

MONOMES f;

printf("Entrer le nb de cons :");scanf("%d",&nb_cons);

printf("Entrer le nb de var :");scanf("%d",&nb_var);

f=methodeConsensus(nb_cons,nb_var);

afficheMonomes(f,nb_var);

return 1;

}


 le sexe apaise les pensées


Cette discussion est classée dans : int, liste, nb, monome, monomes


Répondre à ce message

Sujets en rapport avec ce message

URGENT : transposer du C en Caml [ par torgal79 ] Salut Voila mon probleme. On m'a filé un prog en c et j'y connais rien a ce langage. Et mon boulot est de le transposer en caml et c'est super urgent. plantage inexpliqué [ par graall ] bonjour, j'ai un problème avec ce code :     getch();     FILE *pHtml;     int nb_char = 0;     bool sortie = false; Probleme de recursivite [ par Anysse ] Salut, je n arrive pas a comprendre le pourquoi de ce que le programme suivant renvoie : #include #include #include void recur (int, int);</FO problème c++ [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé problème multiplication [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé Manipulation de matrices en C. [ par T TeKa K ] Hello les gens! Je viens quemander de l'aide afin de me sortir de ce programme qui me prend la tete. But de l'exericice: creer un programme qui m strstr() avec int [ par nashoy ] Bonsoir,mon problème est le suivant :j'aimerais utiliser la fonction strstr() avec des variables int , et forcément il râle .. j'ai essayé de faire st Initialisation d'un tableau d'objet [ par Alela ] Bonjour,J'aimerais initialiser ma classe de cette façon :MaClasse *mc= new MaClasse[5](7);avec :class MaClasse {     int nb;     public: Listes chainées [ par angelfire0808 ] Bonjour voila voici mon, code j'ai une ereeur de compilation mais je ne comprend pas ;-(l'erreur c'est ici :   " nouveau->suivant=(*tete); ".De plus j Est-ce que mes destructeurs sont corrects ? [ par nisaloncaje ] Bonjour, voila, j'ai les classes suivantes, et le programme suivant :class st2{public:int nb;            // Le nombre de briques de chacun des joueurs


Nos sponsors


Sondage...

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,437 sec (3)

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