Projet Tutore Définitif
Projet Tutore Définitif
REMERCIEMENTS
Nous tenons à exprimer notre sincère gratitude à toutes les personnes qui
ont contribué à la réalisation de ce projet.
Merci à tous !
____________________________________________________
1
INTRODUCTION GENERAL
2
CHAPITRE I. GENERALITE SUR LE SYSTÈME DE TROIS ÉQUATIONS A
TROIS INCONNUES
2x − y − 3z = 1,
3x + 2y − 2z = − 4
− x − 4y + 6z = 22.
Nous commençons par cette méthode parce qu’elle nous semble plus naturelle pour les
débutants. Mais nous conseillons d’utiliser, de préférence, la méthode d’élimination
par addition.
De la première équation, tirons l’expression de y en fonction de x et de z :
3x + 2(2x − 3z − 1) − 2z = − 4,
− x − 4(2x − 3z − 1) + 6z = 22 ;
Ou :
3x + 4x − 6z − 2 − 2z = − 4,
− x − 8x + 12z + 4 + 6z = 22 ;
Soit :
7x − 8z = − 4 + 2 = − 2,
− 9x + 18z = 22 − 4 = 18.
Cette dernière équation peut être simplifiée en divisant ses deux membres par 9. On est
donc ramené à résoudre le système :
2x − y − 3z = 1, 7x − 8z = − 2
− x + 2z = 2.
3
Entre les deux dernières équations, éliminons z par addition :
1 7x − 8z = − 2, 7x − 8z = −2
4 − x + 2z = 2 − 4x + 8z = 8
3x = 6
On en tire : x = 2.
L’équation : − x + 2z = 2 donne alors :
2z = 2 + x = 2 + 2 = 4, soit : z = 2.
L’équation :
2x − y − 3z = 1 ou y = 2x − 3z −
1, donne enfin : y = 4 − 6 − 1 = − 3.
Ne pas oublier de remplacer x, y, z, par : 2, − 3, 2 dans le système (I), pour vérifier.
3 3x + 2y − 2z = − 4, 9x + 6y − 6z = −12
1 − x − 4y + 6z = 22 − x − 4y + 6z = 22
8x + 2y = 10
2 2x − y − 3z = 1, 4x − 2y − 6z = 2
1 -x − 4y + 6z = 22 − x − 4y + 6z = 22
3x − 6y = 24
ou : x − 2y = 8
Résolvons le système :
8x + 2y = 10
+ x − 2y = 8.
1− 2y = 8 ou y = − 3.
Enfin une des équations du système (I), la première par exemple, donne la valeur de z :
4 + 3 − 3z = 1, z = 2.
4
Exemple 2. Résoudre :
3x − z + 2y= 4
3x + z− y= 9
2x − 3y = 2.
− 3x + z − 2y = − 4
−1 3x − z + 2y = 4,
1 3x + z − y = 9 3x + z − y = 9
2z − 3y = 5
𝑥 𝑦 𝑧
= =
3 4 5
− 2x − y + 3z = 3
4x = 3y 4x − 3y = 0
5y = 4z ou 5y − 4z = 0
− 2x − y + 3z = 3 − 2x − y + 3z = 3.
5
3x =4y =5z =t.
On en tire : x = 3t, y = 4t,
z = 5t.
Reportons dans la dernière équation du système :
− 2. 3t − 4t + 3. 5t = 3,
Ou :
− 6t − 4t + 15t = 3,
soit :
5t = 3 et t= .
On en déduit les solutions du système :
x=3t , y=4t , z = 5t =3.
Une méthode plus élégante consisterait à utiliser une propriété des suites de rapports
égaux. On écrirait :
𝑥 𝑦 𝑧 −2𝑥−𝑦+3𝑧 3
= = = =
3 4 5 −2.3−4+3.5 5
EXEMPLE 2. Résoudre :
x + y = m,
y + z = p,
z + x = q.
2(x + y + z) = m + p + q,
𝑚+𝑝+𝑞
Ou : x+ y+z = .
2
6
EXEMPLE 3.
1.4. Méthode de Bézout ou méthode des coefficients indéterminés.
2x − y + 3z = − 2, (1)
x +2y − 4z = 4,
4x − 3y − 2z = 3.
− u + 2v − 3w = 0,
3u − 4v − 2w = 0.
2 − u + 2v − 3w = 0 − 2u + 4v − 6w = 0,
1 3u − 4v − 2w = 0 3u − 4v − 2w = 0,
u − 8w = 0.
− u + 2v − 3w = 0,
Par exemple, donne :
7
− 8w + 2v − 3w = 0,
soit :
2v = 11w.
Donnons à w une valeur arbitraire. Nous prendrons w = 2, pour avoir une solution en
nombres entiers, sous la forme la plus simple possible. On obtient :
v = 11 et u = 16.
(32 + 11 + 8) x = − 32 + 44 + 6,
ou :
51x = 18,
soit :
x= = ,
2u + v + 4w = 0,
− u + 2v − 3w = 0.
Eliminons u :
1 2u + v + 4w = 0 2u + v + 4w = 0,
2 − u + 2v − 3w = 0 − 2u + 4v − 6w = 0
5v − 2w = 0.
Eliminons v :
+2 2u + v + 4w = 0 4u + 2v + 8w = 0,
−1 − u + 2v − 3w = 0 u − 2v + 3w = 0
5u + 11w = 0.
On a donc : 5v = 2w et 5u = − 11w.
Prenons : w = 5, on aura :
v = 2, u = − 11, et
l’équation (II) donne :
(−33 − 8 − 10) z = + 22 + 8 + 15,
ou :
− 51z = 45, soit
: x=− =− .
dans les équations du système (I), pour obtenir la valeur de y et vérifier. On obtient :
y= .
8
CHAPITRE II : ALGORITHME
1.1. Définitions :
Un algorithme est une suite ordonnée d’instructions qui indique la démarche à suivre
pour résoudre une série de problèmes équivalents.
Algorithme : Description en langage naturel de la suite des actions effectuées par un
programme structuré. Un algorithme est écrit en utilisant un langage de description
d’algorithme (LDA). L’algorithme ne doit pas être confondu avec le programme
proprement dit (tel que Pascal, C, ..)
L’algorithmique s’intéresse à l’art de construire des algorithmes ainsi qu’à caractériser
leur validité, leur robustesse, leur réutilisabilité, leur complexité ou leur efficacité.
La validité d’un algorithme est son aptitude à réaliser exactement la tâche pour
laquelle il a été conçu.
La réutilisabilité d’un algorithme est son aptitude à être réutilisé pour résoudre des
taches équivalentes à celle pour laquelle il a été conçu.
La complexité d’un algorithme est le nombre d’instructions élémentaires à exécuter
pour réaliser la tâche pour laquelle il a été conçu.
L’efficacité d’un algorithme est son aptitude à utiliser de manière optimale les
ressources du matériel qui l’exécute.
●Type de variable
Entier : Il s’agit des variables destinées à contenir un nombre entier positif ou négatif.
Réel : Il s’agit des variables numériques qui ne sont pas des entiers, c’est-à-dire qui
comportent des décimales. Généralement un nombre réel est codé sur 4 octets.
9
Booléen : Il est souvent nécessaire lorsque l’on écrit un programme d’introduire des
variables qui prennent les valeurs VRAI ou FAUX ou les valeurs OUI ou NON.
Caractère : Les variables de type caractères contiennent des caractères
alphanumériques ou numériques.
Chaîne : Pour manipuler des chaînes de caractères permettant de représenter des mots
ou des phrases.
1.4. Opérateur
Un opérateur est un symbole d’opération qui permet d’agir sur des variables ou de
faire des “calculs”.
Un opérateur peut être unaire ou binaire :
- Unaire s’il n’admet qu’un seul opérande, par exemple l’opérateur non.
- Binaire s’il admet deux opérandes, par exemple l’opérateur +
Un opérateur est associé à un type de donnée et ne peut être utilisé qu’avec des
variables, des constantes, ou des expressions de ce type ; Par exemple l’opérateur + ne
peut être utilisé qu’avec les types arithmétiques (naturel, entier et réel) ou (exclusif) le
type chaîne de caractères.
Un opérande est une entité (variable, constante ou expression) utilisée par un
opérateur.
Une expression est une combinaison d’opérateur(s) et d’opérande(s), elle est évaluée
durant l’exécution de l’algorithme, et possède une valeur (son interprétation) et un
type.
VARIABLE
. a1, b1, c1, d1
.a2, b2, c2, d2
.a3, b3, c3, d3
Chaine de caractère x, y, z réel
DEBUT
Ecrire (‘’Entrez les coefficients 1 (a1, b1, c1, d1)’’)
Lire (a1, b1, c1, d1)
Ecrire (‘’ Entrez les coefficients 2 (a2, b2, c2, d2)’’)
Lire (a2, b2, c2, d2)
Ecrire (‘’ Entrez les coefficients 3 (a3, b3, c3, d3)’’)
Lire (a3, b3, c3, d3)
Si D == 0
Ecrire (‘’ce système n’é pas de solution unique ‘’)
Sinon
10
Calculons x, y, z
X=
Y=
Z=
Ecrire (‘’que le résultat de x, y, z est : résultat’’)
Finsi
Fin
11
CHAPITRE III : LA PROGRAMMATION EN LANGAGE C
Int main () {
Printf(« Bonjour, monde !\n ») ;
Return 0 ;
}
- GCC (GNU Compiler Collection) : C’est l’un des compilateurs les plus utilisés pour
le langage C. Il est open source et disponible sur plusieurs plateformes.
12
- Clang : Un autre compilateur open source, connu pour sa rapidité et ses messages
d’erreur clairs. Il est souvent utilisé dans les projets de développement sur macOS.
- MinGW : Pour les utilisateurs de Windows, MinGW (Minimalist GNU for
Windows) fournit un environnement de compilation basé sur GCC.
3. Sur Linux :
- Visual Studio Code : Un éditeur léger et extensible qui prend en charge une
multitude de langages et dispose de nombreux plugins utiles pour C.
- Code : Blocks : Un IDE simple et facile à utiliser spécifiquement conçu pour la
programmation en C/C++.
- Dev-C++ : Un autre IDE populaire qui est léger et facile à configurer pour les projets
C.
2.1.8.2. Assure-toi que ton éditeur est configuré pour utiliser le bon
compilateur.
Par exemple, dans Visual Studio Code, tu peux installer l’extension « C/C++ »
pour bénéficier de fonctionnalités avancées comme l’auto complétion.
13
2.1.8.3. Écris ton premier programme en C, par exemple :
#include <stdio.h>
Int main () {
Printf (« Bienvenue dans la programmation en C !\n ») ;
Return 0 ;
}
a. Syntaxe de base
b. Variables
Les variables sont utilisées pour stocker des valeurs. Tu dois déclarer une variable
avant de l’utiliser :
Int nombre ; // Déclaration d’une variable
Nombre = 10 ; // Initialisation de la variable
c. Opérateurs
14
1. Conditions (`if`, `else`):
- Boucle for
For (int i = 0; i < 10; i++) {
Printf (« %d\n », i) ;
}
- Boucle while :
Int i = 0;
While (i < 10) {
Printf(« %d\n », i) ;
I++ ;
}
e. Fonctions
a. Tableaux
Les tableaux sont des structures de données qui te permettent de stocker plusieurs
valeurs du même type sous un seul nom. Voici comment les déclarer et les utiliser :
Déclaration d’un tableau :
Int nombres [5] ; // Déclare un tableau de 5 entiers
Initialisation d’un tableau :
Int nombres [5] = {1, 2, 3, 4, 5} ; // Initialisation avec des valeurs
15
Tu peux utiliser une boucle pour parcourir tous les éléments d’un tableau :
For (int i = 0 ; i < 5 ; i++) {
Printf(« %d\n », nombres[i]) ;
}
b. Chaînes de caractères
Il existe plusieurs fonctions utiles dans `<string.h>` pour manipuler les chaînes :
- Concaténation (`strcat`) :
Char nom1 [20] = « Junior » ;
a. Pointeurs
Les pointeurs sont des variables qui stockent l’adresse mémoire d’une autre variable.
Ils te permettent d’accéder directement à la mémoire, ce qui est très puissant en C.
Déclaration d’un pointeur :
Int p ; // Déclare un pointeur vers un entier
Initialisation d’un pointeur :
Pour initialiser un pointeur, tu dois lui assigner l’adresse d’une variable :
Int a = 10 ;
P = &a ; // p pointe vers a
Accès à la valeur pointée :
Pour accéder à la valeur stockée à l’adresse pointée par le pointeur, utilise l’opérateur
de déréférencement `` :
Printf (« %d\n », p) ; // Affiche 10
16
b. Allocation dynamique de mémoire
c. Pointeurs et tableaux
Les tableaux et les pointeurs sont étroitement liés en C. En fait, le nom d’un tableau est
considéré comme un pointeur vers le premier élément du tableau.
Accès aux éléments du tableau via un pointeur :
Int nombres [5] = {1, 2, 3, 4, 5} ;
Strcpy (p1.nom, « Alice ») ; // Assigne « Alice » au membre nom
P1.age = 30 ; // Assigne 30 au membre âge
Printf (« Nom : %s, Age : %d\n », p1.nom, p1.age) ; // Affiche les informations
Tu peux également utiliser des pointeurs pour accéder aux membres d’une structure.
Utilise l’opérateur `->` :
Int nombre ;
Fscanf (fichier, « %d », &nombre) ;
// Lit un entier depuis le fichier
Printf (« %d\n », nombre) ;
// Affiche l’entier l
17
f. Fermeture d’un fichier
Les pointeurs sont des variables qui stockent l’adresse d’une autre variable. Ils sont
puissants et permettent une manipulation efficace de la mémoire.
c. Pointeurs et tableaux
Les pointeurs sont étroitement liés aux tableaux. Le nom d’un tableau est en fait un
pointeur vers son premier élément.
Int tab [3] = {1, 2, 3} ;
Int ptr = tab ;
// ptr pointe vers le premier élément du tableau
Printf (« %d\n », (ptr + 1)) ;
// Affiche 2 (deuxième élément)
c. Libération de la mémoire
N’oublie pas de libérer la mémoire que tu as allouée pour éviter les fuites mémoires :
Free (tableau) ;
// Libère la mémoire allouée
18
2.1.8.7. Fonctions
Tu peux également passer des pointeurs à des fonctions pour modifier des variables :
Void incrémenter (int n) {
(n)++ ;
// Incrémente la valeur pointée par n
}
Int main () {
Int nombre = 5 ;
Incrementer(&nombre) ;
// Passe l’adresse de nombre à la fonction
Printf (« Nombre après incrémentation : %d\n », nombre) ; // Affiche 6
}
Les pointeurs te donnent un contrôle fin sur la mémoire, ce qui est crucial pour écrire
des programmes efficaces en C. La gestion dynamique de la mémoire te permet de
gérer des structures de données flexibles, tandis que les fonctions facilitent
l’organisation et la réutilisation du code.
La gestion des fichiers en C te permet de lire et d’écrire des données sur le disque.
19
}
La gestion des erreurs est cruciale pour écrire des programmes fiables.
b. Utilisation d’errno
La variable `errno` peut être utilisée pour obtenir plus d’informations sur les erreurs
système.
#include <errno.h>
#include <string.h>
FILE fichier = fopen (« inexistant.txt », « r ») ;
If (fichier == NULL) {
Printf (« Erreur : %s\n », strerror (errno)) ; // Affiche le message d’erreur
correspondant
}
Conclusion sur les structures, les fichiers et la gestion des erreurs
Les structures te permettent de gérer des données complexes de manière organisée,
tandis que la gestion des fichiers facilite la persistance des données. La gestion
appropriée des erreurs est essentielle pour garantir que ton programme fonctionne
correctement dans différents scénarios.
2.1.8.9. Préprocesseurs
Les préprocesseurs sont des directives qui sont traitées avant la compilation du code
source.
a. Inclusion de fichiers
Utilise `#include` pour inclure des bibliothèques standard ou des fichiers que tu as
créés :
#include <stdio.h>
20
#include <stdlib.h>
#include « mon_fichier.h »
b. Définitions de macros
c. Directives conditionnelles
EXPLICATION DU PROGRAMME
#include <stdio.h>
int main() {
// Coefficients des équations
double a1, b1, c1, d1;
21
double a2, b2, c2, d2;
double a3, b3, c3, d3;
if (det == 0) {
printf("Le système n'a pas de solution unique (il pourrait être
incompatible ou avoir une infinité de solutions).\n");
return 1;
}
// Calcul de x, y, z
x = (d1 * (b2 * c3 - b3 * c2) - b1 * (d2 * c3 - d3 * c2) + c1 * (d2
* b3 - d3 * b2)) / det;
y = (a1 * (d2 * c3 - d3 * c2) - d1 * (a2 * c3 - a3 * c2) + c1 * (a2
* d3 - a3 * d2)) / det;
z = (a1 * (b2 * d3 - b3 * d2) - b1 * (a2 * d3 - a3 * d2) + d1 * (a2
* b3 - a3 * b2)) / det;
return 0;
}
22
CONCLUSION
23
SUGGESTION
24
DIFFICULTES RENCONTREE
25
- Gestion des erreurs : Savoir comment gérer les erreurs et les exceptions dans le code
peut être un défi, car le C n’offre pas de mécanisme intégré pour cela.
9. Portabilité du Code
- Différences entre compilateurs : Les différences entre divers compilateurs peuvent
entraîner des problèmes de portabilité du code, ce qui nécessite une attention particulière
lors du développement.
- Normes du langage : S’assurer que le code respecte les normes ANSI C ou ISO C peut
également poser problème si les étudiants ne sont pas conscients des différences.
Pour surmonter ces difficultés, il est essentiel que les étudiants bénéficient d’un
accompagnement adéquat, tant sur le plan théorique que pratique. Des séances de
tutorat, des exercices pratiques et une bonne communication au sein du groupe
peuvent grandement faciliter la compréhension et la résolution des systèmes
d’équations à trois inconnues ainsi que du langage C dans le cadre d’un projet tutoré.
26
TABLE DES MATIERES
Remerciement …………………………………………………………………………… 1
Introduction Générale …………………………………………………………………………. 2
2.1. Définition.……………………………………………………………………….... 9
2.2. Objectifs d’algorithme …………………………………………………………... 9
2.3. Les variables .......................................................................................................... 9
2.4. Opérateur ………………………………………………………………………… 10
2.5. La structure répétitive ……………………………………………………………. 10
2.6. Algo : résolution du système d’équation à trois inconnues ……………………… 10
3.1.8.1. Crée un nouveau projet ou fichier source dans ton éditeur. ……………….. 12
3.1.8.2. Assure-toi que ton éditeur est configuré pour utiliser le bon compilateur…. 12
3.1.8.3. Écris ton premier programme en C, par exemple ………………………….. 12
3.1.8.4. Gestion des tableaux et des chaînes de caractères …………………………. 14
3.1.8.5. Gestion de la mémoire et pointeurs ………………………………………... 15
3.1.8.6. Mémoire dynamique ……………………………………………………….. 17
3.1.8.7. Fonctions…………………………………………………………………… 18
3.1.8.8. Gestion des erreurs…………………………………………………...... 19
3.1.8.9. Préprocesseurs……………………………………………………………… 19
3.1.9. Le code du projet en langage c qui traite le système de trois équations a trois
inconnues. ………………………………………………………………………. 20
CONCLUSION …………………………………………………………………... 22
SUGGESTION ………………………………………………………………….... 24
DIFFICULTES RENCONTREE …………………………………………………. 25
27