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.
D’autre façon le langage assembleur est le langage le plus proche de la machine qu’on peut l’utiliser au cœur d’un 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