Académique Documents
Professionnel Documents
Culture Documents
U: 2022-2023
Séried'exercicesN°2
Exercice1 : Matrices en C++
1. Ecrire une fonction multiplierScal qui permet de multiplier une matrice par un scalaire
2. Ecrire une fonction transpose qui permet de calculer le transposée d’une matrice
3. Ecrire une fonction multiplier qui permet de multiplier deux matrices
#define n 4
#define p 5
#define q 6
A[i][j]=alpha*A[i][j];
B[i][j]=A[j][i];
return B;
Page 1 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
{int s=0;
s=s+A[i][k]*B[k][j];
C[i][j]=s; }
Exercice N° 2:Compléter le tableau en indiquant les valeurs des différentes variables au terme
de chaque instruction du programme suivant :
q=p+1 ; p++ ;
r=q-p ;
*(p+1)=*q+r ;
if(p<=q){r=(*p)+(*q) ;} ;
Page 2 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
Exercice 3:
Le triangle de Pascal est une présentation géométrique (cf. figure) des coefficients du
développement de (x+y)i qui sont les coefficients binomiaux.
1) Écrire une fonction en C++ qui alloue la mémoire nécessaire à une matrice triangulaire
#include <iostream>
#include <string>
#include<iomanip>
int** alloue_matrice(int n)
Page 3 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
return(p); }
int ** remplit_matrice_pascal(int n)
{int** M=alloue_matrice(n);
int i,j,k;
for(i=0;i<n;i++)M[i][0]=1;
for(i=0;i<n;i++)M[i][i]=1;
for(i=2;i<n;i++)
{ for(j=1;j<i;j++) M[i][j]=M[i-1][j]+M[i-1][j-1]; }
return(M);
{int i;
void afficher_mat(int n)
{int**M=remplit_matrice_pascal(n);
int i,j;
for(i=0;i<n;i++)
Liberer_mat(M,n); }
main()
{afficher_mat(15);}
Page 4 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
Présentation du problème :Avant son exécution, tout code source d’un programme informatique doit
être traduit en un autre code appelé code machine. Cette traduction est réalisée par un compilateur
dont le rôle est de transformer le code source en une suite d’instructions élémentaires directement
exécutables par le processeur.
Ainsi le rôle de l’analyse lexicale est d’identifier puis supprimer les caractères superflus du code source
(commentaires, espaces,…), de reconnaitre les mots-clés, les identificateurs, les opérateurs, et qui sont
définies par un ensemble de règles.
En plus l’analyseur lexical signale les éventuelles erreurs de syntaxe et associe à chaque erreur le
numéro de la ligne dans laquelle elle intervient. Dans le problème qui suit, on se propose de mettre en
œuvre un analyseur lexical.
Il s’agit d’implémenter des fonctions en langage C++ pour un analyseur lexical d’un pseudo langage
informatique noté PL.
Ecrire une fonction d’entête : voidsupprim_espaces(string instr) qui supprime les espaces multiples
consécutifs (qui se suivent) entre les caractères de la chaine instr en paramètre. S’il y’a N (1<N)
espaces au début, ou à la fin, ou entre deux caractères de la chaine instr, on ne laissera qu’un seul
espace.
Exemple : soit la chaine instr=" repeter (max<10) max++;" après l’appel
de la fonction supprim_espaces(instr), instr= " repeter ( max<10 ) max++ ;"
Page 5 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
Tout langage de programmation définit un ensemble de mots clés qui sont des chaines de caractères
ayant des significations et des utilisations spécifiques pour ce langage.
Pour le pseudo langage PL, on suppose avoir déclaré et défini N et tmotscles tels que :
- N est une constante entière strictement positive contenant le nombre de mots clés du pseudo
langage PL.
- tmotscles est un tableau de N chaines de caractères contenant tous les mots clés de PL.
écrire la fonction d’entête : intmotcle(string mot) qui retourne 1 si mot (le paramètre de la
fonction) est un mot clé de PL ou 0 sinon. Le paramètre mot est un mot clé de PL si c’est un élément
du tableau tmotscles (supposé déclaré et défini).
Exemple : pour N=5 si on astring tmotscles[N]={ "entier","reel","repeter","si","sinon"} alors
l’appel motcle("si") retourne 1 et l’appel motcle("pour") retourne 0.
Un identificateur est une chaine de caractères qui permet de déclarer et d’identifier les éléments d’un
programme (les constantes, les variables, …). Il doit respecter un ensemble de règles particulières pour
chaque langage.
Un identificateur du pseudo langage PL est valide s’il respecte les quatre conditions (C1, C2, C3 et C4)
suivantes :
C1- Sa longueur est inférieure strictement à 80
C2- Ne contient aucun espace
C3- Ne commence pas par un chiffre (‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’).
C4- Ne doit pas être un mot clé du langage PL (n’est pas dans tmotscles)
Ecrire une fonction d’entête int identificateur(string id) qui retourne 1 si son paramètre id est un
identificateur valide de PLouretourne0 (zéro) sinon.
#include <iostream>
#include <string>
char tmotscles[N][80]={"entier","reel","repeter","si","sinon"};
string Tmotscles[N]={"entier","reel","repeter","si","sinon"};
Page 6 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
return(instr.substr(0,2)+instr.substr(l-2,2)=="\\**\\");
{ for(int i=0;i<instr.length()-1;i++)
{instr.replace(i,1,""); i--;}
return 1;
return 0; }
//****************Condition 2
return 1;
Page 7 / 8
Module: Techniques de Programmation(POO) Pr M. JEBBAR A.U: 2022-2023
//***************Condition 3
//*******Question B-2
else return 0; }
main()
//ch.replace(0,2,"x");
supprim_espaces(ch);
cout<<ch<<endl; cin>>ch;
int s=0;
cout<<"\n s="<<s<<endl;
string x="réel";
string y="entier";
Page 8 / 8