Université Mohammed Premier Année universitaire 2020-2021
Faculté des Sciences Oujda Filière SMI et SMA S3
Département d’Informatique TP de Programmation 1
Correction des exercices de toutes les séances du
TP de Programmation 1 (Informatique 3)
Série N° 1
Séance 1
Exercice 1
#include<stdio.h>
main() {
int n , m , k1, k2 ;
printf(" donnez la valeur de n : \n ") ;
scanf("%d",&n) ;
printf("donnez la valeur de m : \n") ;
scanf("%d",&m) ;
k1=n/m ;
printf("la division de %d par %d est %d \n ", n , m , k1);
k2=n%m ;
printf("le rest de la division de %d par %d est %d \n ", n , m , k2);
printf(" Le premier entier est : %d le deuxieme entier est : %d \n ", n , m) ;
printf(" La division entiere est : %d le reste de la division est : %d ", k1 , k2 ) ;
getch() ; }
Exercice 2
#include<stdio.h>
#include<math.h>
main() {
float x , y , z ;
float x1 , x2 , y1 , y2 , N ;
float d1 , d2 , D , R;
printf(" donnez la valeur de x : \n ") ;
scanf("%f",&x) ;
printf("donnez la valeur de y : \n") ;
scanf("%f",&y);
printf("donnez la valeur de z : \n") ;
scanf("%f",&z);
if ((z+8)>= 0) x1 = x*x*sqrt(z+8);
x2 = (y*y - 9)*(y*y-9);
if ( (x-3)> 0 ) y1 = log(x-3);
y2 = sin(x+4*z) ;
d1= z-4 ;
d2 = x-y+6 ;
N =x1+x2+y1+y2 ;
D=d1*d2 ;
if (D!= 0) R=N/D ;
printf("la valeur de l expression est %f ", R) ;
getch();}
Exercice 3
La solution est dans le cours
Séance 2
Exercice 1
#include<stdio.h>
main()
{ int n , m , i , S ;
S=1;
printf(" donnez n et m \n ");
scanf("%d",&n);
scanf("%d",&m);
i=1 ;
while(i<=m)
{ S=S*n ;
i++; } ;
printf(" %d a la puiss %d est %d", n , m , S ) ;
getch(); }
Exercice 2
#include<stdio.h>
main()
{ int n , i ;
float S=0;
printf(" donnez n \n ");
scanf("%d",&n);
for(i=1;i<=n;i++)
S=S + 1/( (float)i ) ;
printf(" le resultat est %f", S ) ;
getch(); }
Exercice 3
#include<stdio.h>
main()
{ int n , p , pf=1 ;
float S=0;
printf(" donnez n \n ");
scanf("%d",&n);
for(p=1;p<=n;p++)
{ pf=pf*p;
S=S + 1/( (float)pf ) ;
} ;
printf(" le resultat est %f", S ) ;
getch(); }
Série N° 2
Séance 3
Exercice 1
#include<stdio.h>
#define N 10
main() {
float T1[N]={1,2,3,4,5,6,7,8,9,10};
float T2[N];
float T3[N];
int i;
for(i=0;i<N;i++)
T2[i]=i*i-2;
printf(" donnez les element du tableau T3 \n");
for(i=0;i<N;i++)
scanf("%f",&T3[i]);
printf(" affichage tableau T1 \n");
for(i=0;i<N;i++)
printf(" T1[%d]=%f \n",i,T1[i]);
printf(" affichage tableau T2 \n");
for(i=0;i<N;i++)
printf(" T2[%d]=%f \n",i,T2[i]);
printf(" affichage tableau T3 \n");
for(i=0;i<N;i++)
printf(" T3[%d]=%f \n",i,T3[i]);
getch();
}
Exercice 2
#include<stdio.h>
main() {
int n;
printf("donnez n la taille du tableau \n");
scanf("%d",&n);
float T[n], max, min, temp;
int i, posMax,posMin;
printf(" donnez les element du tableau T \n");
for(i=0;i<n;i++)
scanf("%f",&T[i]);
printf(" affichage tableau T \n");
for(i=0;i<n;i++)
printf(" T[%d]=%f \n",i,T[i]);
max=min=T[0];
posMax=posMin=0;
for(i=0;i<n;i++){
if(max<T[i]) {max=T[i];
posMax=i;}
if(min>T[i]) {min=T[i];
posMin=i;} }
printf("la max est %f a l indice %d \n", max,posMax);
printf("la min est %f a l indice %d \n", min,posMin);
temp=T[posMax];
T[posMax]=T[posMin];
T[posMin]=temp ;
printf(" nouveau affichage tableau T \n");
for(i=0;i<n;i++)
printf(" T[%d]=%f \n",i,T[i]);
getch();}
Exercice 3
la solution est dans le cours
Séance 4
Exercice 1
#include<stdio.h>
main() {
int n , m;
printf("donnez n et m la taille de matrice \n");
scanf("%d",&n);
scanf("%d",&m);
double T[n][m];
int i , j ;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
T[i][j]=i+j;
for(i=0;i<n;i++)
for (j=0;j<m;j++) {
printf("%f \t", T[i][j]);}
printf("\n");
} ;
getch();}
Exercice 2
#include<stdio.h>
main() {
int n , m;
printf("donnez n et m la taille de matrice \n");
scanf("%d",&n);
scanf("%d",&m);
int T[n][m] , X[m] , Y[n] ,s;
int i , j ;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&T[i][j]);
for(j=0;j<m;j++)
scanf("%d",&X[j]);
for(i=0;i<n;i++)
{s=0;
for(j=0;j<m;j++)
s=T[i][j]*X[j];
Y[i]=s;}
for(i=0;i<n;i++)
for (j=0;j<m;j++) {
printf("%d \t", T[i][j]);}
printf("\n");
} ;
printf("\n");
for(j=0;j<m;j++)
printf("%d \t", X[j]);
printf("\n");
for(i=0;i<n;i++)
printf("%d \t", Y[i]);
getch();}
Exercice 3
#include<stdio.h>
main() {
int n , m;
printf("donnez n et m la taille de matrice \n");
scanf("%d",&n);
scanf("%d",&m);
double T[n][m], max , min ;
int i , j ;
int imax, jmax, imin, jmin ;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%lf",&T[i][j]);
for(i=0;i<n;i++)
for (j=0;j<m;j++) {
printf("%f \t", T[i][j]);}
printf("\n");
} ;
max=min=T[0][0];
imax=jmax=imin=jmin=0 ;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if( max<T[i][j] )
{ max=T[i][j] ;
imax= i;
jmax=j ;
};
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if( min>T[i][j] )
{ min=T[i][j] ;
imin= i;
jmin=j ;
};
printf("le max est %f sur ligne %d et colonne %d \n", max,imax,jmax);
printf("le min est %f sur ligne %d et colonne %d", min,imin,jmin);
getch();}
Série N° 3
Séance 5
Exercice 2
#include<stdio.h>
main(){
int n , m , *p , *q ;
p=&n ;
q=&m ;
printf(" donnez n m \n ") ;
scanf("%d",p); // on lit la valeur de n
scanf("%d",q); // on lit la valeur de m
printf(" avant operataion n= est %d et m= %d\n",n,m );
(*p)++ ; // les parentheses sont important ici
(*q)--;
printf(" apres operataion n= est %d et m= %d\n",n,m );
getch();}
Exercice 3
#include <stdio.h>
#include <stdlib.h>
main() {
int n;
scanf("%d",&n);
float T[n], *Deb, *Fin, *Ind, *PosMax, *PosMin, Som=0;
// PosMax et Ind sont des pointeurs sur des reels ,
// leurs contenus c est l adresse voulu
Deb=T;
Fin=T+(n-1); // Fin =&T[n-1] ;
for(Ind=Deb; Ind<= Fin; Ind++)
{printf ("Entrez T[%d] ",Ind-T);
scanf("%f",Ind);
for(Ind=Deb; Ind<= Fin; Ind++)
printf(" T[%d] =%f \n ",Ind-T, *Ind);
PosMax=T;
PosMin=T;
for(Ind=Deb; Ind<= Fin; Ind++)
if(*Ind>=*PosMax)
PosMax=Ind;
for(Ind=Deb; Ind<= Fin; Ind++)
if(*Ind<=*PosMin)
PosMin=Ind;
printf(" Position du Max %d et sa valeur %f \n", PosMax-Deb, *PosMax);
printf(" Position du Min %d et sa valeur %f \n", PosMin-Deb, *PosMin);
*Ind=*PosMax;
*PosMax=*PosMin;
*PosMin=*Ind;
for(Ind=Deb; Ind<= Fin; Ind++)
printf(" T[%d] =%f \n ",Ind-T, *Ind);
for(Ind=Deb; Ind<= Fin; Ind++)
Som+=*Ind;
printf(" Som des elements de T est %f \n",Som);
getch(); }
Séance 6
Exercice 1
#include <stdio.h>
#include <stdlib.h>
main() {
int n, m, i, j, k;
scanf("%d",&n);
scanf("%d",&m);
float T[n][m], *Deb, *Fin, *Ind, *PosMax, *PosMin;
// PosMax PosMin et Ind sont des pointeurs sur des reels ,
// leurs contenus c est l adresse voulu
Deb=&T[0][0] ;
Fin=&T[n-1][m-1];
/* for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf ("Entrez T[%d][%d]\n ",i,j ) ; scanf("%d", Deb+(i*m)+j ) ; }
for(i=0;i<n;i++)
{ for(j=0;j<m;j++) printf (" %d \t", *( Deb+(i*m)+j) ) ;
printf ("\n");}
// cette façons est dans le cours
*/
for(Ind=Deb; Ind<= Fin; Ind++)
{k=Ind-Deb; // methode pour retrouver les indices
j=k%m;
i=k/m;
printf ("Entrez T[%d][%d] ",i,j);
scanf("%f",Ind);
for(Ind=Deb; Ind<= Fin; Ind++)
k=Ind-Deb;
j=k%m;
i=k/m;
printf("T[%d][%d]=%f ",i,j,*Ind);
if(j==(m-1)) {printf(" \n ") ;}
};
PosMax=Deb;
PosMin=Deb;
for(Ind=Deb; Ind<= Fin; Ind++)
if(*Ind>=*PosMax)
PosMax=Ind;
for(Ind=Deb; Ind<= Fin; Ind++)
if(*Ind<=*PosMin)
PosMin=Ind;
}
k=PosMax-Deb;
j=k%m;
i=k/m;
printf(" Position du Max dans ligne %d et colonne %d, sa valeur %f \n", i,j, *PosMax);
k=PosMin-Deb;
j=k%m;
i=k/m;
printf(" Position du Min dans ligne %d et colonne %d, sa valeur %f \n", i,j, *PosMin);
getch(); }
Exercice 2
#include<stdio.h>
#include <stdlib.h>
main() {
int i ;
int *p;
p=(int*)malloc(8*sizeof(int));
if (p==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ; }
for(i=0;i<8;i++)
scanf("%d",p+i);
for(i=0;i<8;i++)
printf(" p[%d]=%d \n",i,*(p+i));
free(p);
getch(); }
Exercice 3
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j ;
float **q;
q=(float**)malloc(4*sizeof(float*));
if (q==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ; }
for (i=0;i<4;i++)
{ q[i]=(float*)calloc(5,sizeof(float)); // pour initialiser à zero
if (q[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
printf(" donnez les 20 valeurs \n" );
for (i=0;i<4;i++){
for (j=0;j<5;j++) {
scanf("%f", (q[i]+j));} }
printf(" Affichage des 20 valeurs \n" );
for (i=0;i<4;i++)
for (j=0;j<5;j++) {
printf("%f \t", *(q[i]+j));}
printf("\n");
}
for (i=0;i<4;i++){
for (j=0;j<5;j++) {
*(q[i]+j)= *(q[i]+j)**(q[i]+j) +3 ;}
printf(" Affichage des 20 valeurs apres modification \n " );
for (i=0;i<4;i++)
for (j=0;j<5;j++) {
printf("%f \t", *(q[i]+j));}
printf("\n");
} ;
for (i=0;i<4;i++)
free(q[i]); // SVP insistez sur l'odre de free pour un tableau
free(q); // Pour free, il faut faire l'inverse qu'avec malloc :
getch(); }
Séance 7
Exercice 1
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j ;
int n, m;
int Imax, Imin,Jmax,Jmin;
scanf("%d",&n); scanf("%d",&m);
float T[n][m], Max, Min;
float **q, *p;
printf(" Lecture de la matrice \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
scanf("%f",T[i]+j);}
q=(float**)malloc(n*sizeof(float*));
if (q==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ; }
for (i=0;i<n;i++)
{ q[i]=(float*)malloc(m*sizeof(float));
if (q[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
else
q[i]=&T[i][0] ;
printf(" Affichage de la matrice \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
printf(" %f ", *(q[i]+j));}
printf("\n");
};
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
*(q[i]+j)= 2**(q[i]+j)*2**(q[i]+j) +2 ;}
printf(" Affichage de la matrice apres modif \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
printf(" %f ", *(q[i]+j));}
printf("\n");
};
Max=Min=*q[0];
Imax=Jmax=Imin=Jmin=0;
for (i=0;i<n;i++){
for (j=0;j<m;j++)
{ if (Max<=*(q[i]+j))
{Max=*(q[i]+j);
Imax=i;
Jmax=j;
};
for (i=0;i<n;i++){
for (j=0;j<m;j++)
{ if (Min>=*(q[i]+j))
{Min=*(q[i]+j);
Imin=i;
Jmin=j;
}
};
printf(" la max se trouve au ligne %d et colonne %d sa valeur %f \n", Imax,Jmax,Max);
printf(" la min se trouve au ligne %d et colonne %d sa valeur %f \n", Imin,Jmin,Min);
for (i=0;i<n;i++)
free(q[i]); // SVP insistez sur l'odre de free pour un tableau
free(q); // Pour free, il faut faire l'inverse qu'avec malloc :
getch(); }
Exercice 2
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j ;
int n, m;
printf(" valuer de n et de m \n " );
scanf("%d",&n); scanf("%d",&m);
float **A, *X,*Y, s;
A=(float**)malloc(n*sizeof(float*));
if (A==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ; }
for (i=0;i<n;i++)
{ A[i]=(float*)malloc(m*sizeof(float));
if (A[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
printf(" Lecture de la matrice \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
scanf("%f",A[i]+j);}
printf(" \n " );
printf(" Lecture de X \n " );
X=(float*)malloc(m*sizeof(float));
if (X==NULL) exit(0);
for (j=0;j<m;j++) {
scanf("%f",X+j);}
Y=(float*)malloc(n*sizeof(float));
if (Y==NULL) exit(0);
for(i=0;i<n;i++)
{s=0;
for(j=0;j<m;j++)
{s=s+*(A[i]+j)**(X+j);
Y[i]=s;}
printf(" \n " );
printf(" Affichage de la matrice \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
printf(" %f ", *(A[i]+j));}
printf("\n");
};
printf(" \n " );
printf(" \n " );
printf(" Affichage du vecteur X \n " );
for (j=0;j<m;j++) {
printf(" %f ", *(X+j));}
printf(" \n " );
printf(" \n " );
printf(" \n " );
printf(" Affichage du vecteur resultat Y \n " );
for (j=0;j<n;j++) {
printf(" %f ", *(Y+j));}
printf(" \n " );
printf(" \n " );
printf(" Redimentionnement \n " );
float **tempA , *tempX, *tempY;
int h, k;
printf(" \n " );
printf(" valuer de h et de k \n " );
scanf("%d",&h); scanf("%d",&k);
printf(" \n " );
printf(" on redim la matrice A \n " );
printf(" \n " );
tempA=(float**)realloc(A,(n+h)*sizeof(float*));
if (tempA==NULL)
printf(" On n'a pas pu allouer de la mémoire A" );
exit(0) ;
};
A=tempA;
for (i=0;i<n;i++)
tempA[i]=(float*)realloc(A[i],(m+k)*sizeof(float));
if (tempA[i]==NULL)
printf(" On n'a pas pu allouer de la mémoire AI %d", i ) ;
exit(0) ;
else
A[i]=tempA[i];
}
for (i=n;i<n+h;i++)
A[i]=(float*)malloc((m+k)*sizeof(float));
if (A[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire AI %d", i ) ;
exit(0) ;
printf(" \n " );
printf(" \n " );
printf(" on complte la matrice A \n " );
for (i=0;i<n;i++){
for (j=m;j<m+k;j++) {
scanf("%f",A[i]+j);}
for (i=n;i<n+h;i++){
for (j=0;j<m+k;j++) {
scanf("%f",A[i]+j);}
printf(" \n " );
printf(" \n " );
printf(" on redim le vecteur X \n " );
tempX=(float*)realloc(X,(m+k)*sizeof(float));
if (tempX==NULL)
exit(0);
else
X=tempX;
printf(" \n " );
printf(" \n " );
printf(" on complte le vecteur X \n " );
for (j=m;j<m+k;j++) {
scanf("%f",X+j);}
printf(" \n " );
printf(" \n " );
printf(" on redim le vecteur Y \n " );
tempY=(float*)realloc(Y,(n+h)*sizeof(float));
if (tempY==NULL)
exit(0);
else
Y=tempY;
printf(" \n " );
for(i=0;i<n;i++) // ici on complete les lignes existantes
for(j=m;j<m+k;j++)
{Y[i]=Y[i]+*(A[i]+j)**(X+j);}
}
for(i=n;i<n+h;i++) // ici on calcule pour les nouvelles lignes
{s=0;
for(j=0;j<m+k;j++)
{s=s+*(A[i]+j)**(X+j);
Y[i]=s;}
printf(" Affichage de la matrice A apres \n " );
for (i=0;i<n+h;i++){
for (j=0;j<m+k;j++) {
printf(" %f ", *(A[i]+j));}
printf("\n");
};
printf(" \n " );
printf(" Affichage du vecteur X apres \n " );
for (j=0;j<m+k;j++) {
printf(" %f ", *(X+j));}
printf(" \n " ); printf(" \n " );
printf(" Affichage du vecteur resultat Y apres \n " );
for (j=0;j<n+h;j++) {
printf(" %f ", *(Y+j));}
for (i=0;i<n+h;i++)
free(A[i]); // SVP insistez sur l'odre de free pour un tableau
free(A); // Pour free, il faut faire l'inverse qu'avec malloc :
free(X);
free(Y);
getch(); }
Exercice 3
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j ;
int n, m, k, x;
scanf("%d",&n); scanf("%d",&m); scanf("%d",&k);
float **A, **B,**P, s;
A=(float**)malloc(n*sizeof(float*));
if (A==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ; }
for (i=0;i<n;i++)
{ A[i]=(float*)malloc(m*sizeof(float));
if (A[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
B=(float**)malloc(m*sizeof(float*));
if (B==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ;
}
for (i=0;i<m;i++)
{ B[i]=(float*)malloc(k*sizeof(float));
if (B[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
P=(float**)malloc(n*sizeof(float*));
if (P==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " );
exit(0) ;
for (i=0;i<n;i++)
{ P[i]=(float*)malloc(k*sizeof(float));
if (P[i]==NULL)
{ printf(" On n'a pas pu allouer de la mémoire " ) ;
exit(0) ; }
printf(" Lecture de la matrice A \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
scanf("%f",A[i]+j);}
printf(" Lecture de la matrice B \n " );
for (i=0;i<m;i++){
for (j=0;j<k;j++) {
scanf("%f",B[i]+j);}
}
for (i=0;i<n;i++){
for (j=0;j<k;j++)
{ s=0;
for (x=0;x<m;x++)
{s=s+*(A[i]+x)**(B[x]+j);}
*(P[i]+j)=s;};
printf(" Affichage de la matrice A \n " );
for (i=0;i<n;i++){
for (j=0;j<m;j++) {
printf(" %f ", *(A[i]+j));}
printf("\n");
};
printf(" Affichage de la matrice B \n " );
for (i=0;i<m;i++){
for (j=0;j<k;j++) {
printf(" %f ", *(B[i]+j));}
printf("\n");
};
printf(" Affichage de la matrice P \n " );
for (i=0;i<n;i++){
for (j=0;j<k;j++) {
printf(" %f ", *(P[i]+j));}
printf("\n");
};
getch(); }