Correction TD4
Exercice 1 :
#include<stdio.h>
#include<stdlib.h>
int saisirTaille()
{
int N;
do
{
printf("saisir la taille du tableau!\n");
scanf("%d",&N);
}
while(N<10 || N>20);
return N;
}
void remplir(int *tab,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",tab+i);
}
void afficher(int *tab, int n)
{
int i;
for(i=0;i<n;i++)
printf("%d \t",*(tab+i));
}
void DiviserTab(int *tab,int *tab1,int* tab2, int n, int *n1, int *n2)
{
int*q,*q1,*q2;
for(q=tab,q1=tab1,q2=tab2;q<tab+n;q++)
{
if(*q%2==0)
{
*q1=*q;
q1++;
(*n1)++;
}
if(*q%2!=0)
{
*q2=*q;
q2++;
(*n2)++;
}
}
}
void main ( )
{
int *tab,*tab1,*tab2,n,n1=0,n2=0;
n=saisirTaille();
tab=(int*)malloc(n*sizeof(int));
tab1=(int*)malloc(n*sizeof(int));
tab2=(int*)malloc(n*sizeof(int));
if(!tab1 || !tab1 || !tab2 ) exit(-1);
remplir(tab,n);
printf("Affichage Tab\n");
afficher(tab,n);
printf("\n");
DiviserTab(tab,tab1,tab2,n,&n1,&n2);
printf("Affichage Tab1\n");
afficher(tab1,n1);
printf("\nAffichage Tab2\n");
afficher(tab2,n2);
}
Exercice 2 :
#include<stdio.h>
#include<stdlib.h>
void SaisirTaille1(int* n)
{
do
{
printf("saisir un entier entre 10 et 50!");
scanf("%d",n);
}
while(*n<10 || *n>20);
}
int SaisirTaille2()
{
int n;
do
{
printf("saisir un entier entre 10 et 50!");
scanf("%d",&n);
}
while(n<10 || n>20);
}
void remplir_Tab(int *tab,int n)
{
int i;
for(i=0;i<n;i++)
{
do
scanf("%d",tab+i);
while(*(tab+i)!=0 && *(tab+i)!=1);
}
}
void afficher_Tab(int *tab, int n)
{
int i;
for(i=0;i<n;i++)
printf("%d \t",*(tab+i));
}
void Compression_Tab(int *tab, int n, int *tab1, int *n1)
{
int *p,*q;
p=tab;
*tab1=*tab;
*n1=1;
for(q=tab1,p=tab+1;p<tab+n;p++)
{
if(*p!=*q)
{
q++;
*q=*p;
(*n1)++;
}
}
}
void main ( )
{
int *tab,*tab1,n,n1=0;
SaisirTaille1(&n);
//n=SaisirTaille2();
tab=(int*)malloc(n*sizeof(int));
tab1=(int*)malloc(n*sizeof(int));
if(tab==NULL||tab1==NULL) exit(-1);
remplir_Tab(tab,n);
afficher_Tab(tab,n);
printf("\nCOMPRESSION TAB\n");
Compression_Tab(tab,n,tab1,&n1);
printf("AFFICHAGE TAB1 COMPRESSE\n");
afficher_Tab(tab1,n1);
}
Exercice 3 :
#include<stdio.h>
#include<stdlib.h>
void remplir(int *tab,int n){
int i;
for(i=0;i<n;i++)
scanf("%d",tab+i);
}
void afficher(int *tab, int n)
{
int i;
for(i=0;i<n;i++)
printf("%d \t",*(tab+i));
}
int max_T(int *tab,int n)
{
int i,max;
max=*tab;
for(i=2;i<n;i++)
{
if(max<*(tab+i))
max=*(tab+i);
}
return max;
}
int min_T(int *tab,int n)
{
int min,i;
min=*tab;
for(i=2;i<n;i++)
{
if(min>*(tab+i))
min=*(tab+i);
}
return min;
}
void inverser(int *tab,int n)
{
int i,inter;
for(i=0;i<n/2;i++)
{
inter = *(tab+i);
*(tab+i)=*(tab+n-1-i);
*(tab+n-1-i)=inter;
}
}
void main ( )
{
int *tab,n;
do
{
printf("saisir un entier entre 10 et 50!");
scanf("%d",&n);
}
while(n<10 || n>50);
tab=(int*)malloc(n*sizeof(int));
if(tab==NULL) exit(-1);
remplir(tab,n);
afficher(tab,n);
printf("\nle max du tab est %d, le min du tab est %d\n",max_T(tab,n),min_T(tab,n));
inverser(tab,n);
printf("tab inversé \n");
afficher(tab,n);
}
Exercice 4 :
#include<stdio.h>
#include<stdlib.h>
void remplir(int *tab,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",tab+i);
}
void afficher(int *tab, int n)
{
int i;
for(i=0;i<n;i++)
printf("%d \t",*(tab+i));
}
int* fusion(int *tab1,int *tab2,int n1, int n2)
{
int *tabf,i,j;
tabf=(int*)malloc((n1+n2)*sizeof(int));
if(tabf==NULL) exit(-1);
for(i=0;i<n1;i++)
*(tabf+i)=*(tab1+i);
for(j=0;j<n2;j++)
*(tabf+n1+j)=*(tab2+j);
return tabf;
}
void main ( )
{
int *tab1,*tab2,n1,n2, *tabFusion;
printf("saisir la taille de tab1!");
scanf("%d",&n1);
printf("saisir la taille de tab2!");
scanf("%d",&n2);
tab1=(int*)malloc(n1*sizeof(int));
if(!tab1) exit(-1);
tab2=(int*)malloc(n2*sizeof(int));
if(!tab2) exit(-1);
remplir(tab1,n1);
remplir(tab2,n2);
afficher(tab1,n1);
printf("\n");
afficher(tab2,n2);
tabFusion=fusion(tab1,tab2,n1,n2);
printf("\n");
afficher(tabFusion,n1+n2);
}