Rechercher dans ce blog

samedi 5 mars 2011





Tp4


Introduction:
PARMIS les langages de programmation dits evolues ( structures , orientes objet , etc.)EN TROUVE LE LANGAGE C , qu'ils soient compiles ou interpretes doivent d'une maniere ou d'une autre etre traduits en langage machine avant de pouvoir etre executes par un ordinateur.
Dautre façon le langage assembleur est le langage le plus proche de la machine quon peut lutiliser au cœur dun programme c pour faciliter la tache sur le processeur
Code source:
#include
#include
#include
int et(unsigned int x,unsigned int y) /* FONCTION qui PRESENTE LE ET BINAIRE */
{
    int z;
    __asm__ ( "andl %%ebx, %%eax;" : "=a" (z) : "c" (x) , "b" (y) ); /*partie assembleur dans le langage C*/
    return(z);
}

    int inclusion(unsigned int x,unsigned int y)
{
    if(et(x,y)==y)   /* si et(x,y)==y alor y est inclu dans x*/
    return(1);
    return(0);
}

void base_contenant_Itemset(unsigned int Itemsets[100],unsigned int Itemset,int n_ense,unsigned int contenant[100],int *n_cont)
{
    int i;
    int repet=0;
    for(i=0;i
    {
 if(inclusion(Itemsets[i],Itemset)==1)
       {
         printf(" \n Itemset existe dans l'ensemble d'indice %d ,l'ensemble num= %d \n",i,i+1);
          contenant[repet]=Itemsets[i]; /*enregistrement des ensembles contenant Itemset dans le tableau contenant[]*/
          repet++; /*la variable qui prend le nombre d'ensembles contenant Itemset*/
       }
    }
    *n_cont=repet;
    if(repet==0)
    printf("\n Itemset n'existe pas dans aucun ensemble \n");
    else
    printf("\n le nombre d'ensembles de base contenant Itemset est: %d  \n",repet);
}

void le_plus_grand(unsigned int contenant[100],int n_cont)
{
    unsigned int a,zero;
    int i;
    a=contenant[0];
    for(i=1;i
    {
        if(et(contenant[i],a)==a)
          {
              a=contenant[i];
          }
    }
    printf("\n le plus grand ensemble contenant Itemset est::");

    for (zero = 1 << 31; zero; zero >>= 1)  /* affichage du tableau de bits */
       {
           fputc(a & zero ? '1' : '0' , stdout);
       }
}

int n_identifiants ()
{
int n;
do
{
printf("\n donnez le nembre d'identifiants entre 1 et 31 \n");
scanf("%d",&n);
}
while(n<=0 || n>=32);
return(n);
}

void saisi_ensemble(int T[32],int *n_ele,unsigned int *Itemset)
{
    unsigned int zero;
    unsigned int i=0;
    int a,j;
    int N;
    N=n_identifiants();
    *n_ele=N;
    for(j=0;j
    {
    do
    {
     printf("\n donnez l'identifiants numéro %d: ",j+1);
     scanf("%d",T+j);
     printf("\n");
    }
    while(T[j]<0 || T[j]>=32);
    }
     for(j=0;j
    {
        a=T[j];
    i |= (1 << a); /*le bit de position a prend 1*/
    }
    *Itemset=i;
    for (zero = 1 << 31; zero; zero >>= 1)  /* affichage du tableau de bits */
       {
           fputc(i & zero ? '1' : '0' , stdout);
       }
}

int n_ensembles()
{
 int n;
do
{
printf("\n  donnez le nembre ensembles entre 1 et 100 \n");
scanf("%d",&n);
}
while(n<=0 || n>=100);
return(n);
}

void saisi_100_ensembles(unsigned int Itemsets[100],int *n_ense)
{
 unsigned int z;
 int F[32] ;
 int i;
 int M;
 int f;
 M=n_ensembles();
 *n_ense=M;
 for(i=0;i
 {
     printf("\n vous etes dans l'ensemble: %d \n",i+1);
     saisi_ensemble(F,&f,&z);
     Itemsets[i]=z;
 }
 }
void main()
{
    unsigned int Itemset;
    unsigned int Itemsets[100]; /*enregistrement des ensembles  dans le tableau Itemsets[]*/
    unsigned int contenant[100]; /*enregistrement des ensembles contenant Itemset dans le tableau contenant[]*/
    int E[32];
    int n;  /*le nombre d’identifiants dans Itemset  */
    int N;  /*le nombre d’ensembles */
    int n_c; /*le nombre d’ensembles contenant Itemset  */
    saisi_ensemble(E,&n,&Itemset);  /*saisi de l'Itemset*/
    saisi_100_ensembles(Itemsets,&N);   /*saisi des ensembles*/
    base_contenant_Itemset(Itemsets,Itemset,N,contenant,&n_c); /*affiche le nombre d'ensemble contenant Itemset et les enregistre dans le tableau contenant[]*/
    if(n_c!=0)
     {
        le_plus_grand(contenant,n_c);
     }
}


Conclusion :
L’utilisation de l’assembleur au cœur d’un programme C  peut réduire le nombre d'instructions ayez exigé à être exécuté par le processeur







Aucun commentaire:

Enregistrer un commentaire