0% ont trouvé ce document utile (0 vote)
115 vues11 pages

TP Oop2

Ce document présente différents algorithmes de tri et leur implémentation en C#. Il décrit l'algorithme de tri par insertion, de tri à bulles et donne leur complexité. Il présente également l'algorithme pour calculer la somme de deux matrices et donne un exemple en C++. Enfin, il décrit l'algorithme pour la notation des étudiants.

Transféré par

David Munyaga
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
115 vues11 pages

TP Oop2

Ce document présente différents algorithmes de tri et leur implémentation en C#. Il décrit l'algorithme de tri par insertion, de tri à bulles et donne leur complexité. Il présente également l'algorithme pour calculer la somme de deux matrices et donne un exemple en C++. Enfin, il décrit l'algorithme pour la notation des étudiants.

Transféré par

David Munyaga
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

REPUBLIQUE DEMOCRATIQUE DU CONGO

INSTITUT SUPERIEUR D’INFORMATIQUE ET DE GESTION


I.S.I.G / GOMA
B.P 841 / GOMA

TP
ALGORITHMIQUE ET MÉTHODES DE PROGRAMMATION
LIC 2/LIAGE

GROUPE 24:
KAHINDO SYAMINYA
MUNYAGA MAMBOLEO DAVID
BEZA HAKIZA DIVINE
BUKENGE CHOYA NATHALIE
ASSANI KAZINGUFU SHALIMO
NEEMA TUNGA
1. L’algorithme de tri par insertion consiste à insérer chaque élément du tableau à trier à sa
place parmi les éléments déjà triés. Pour cela, on compare l’élément à insérer avec les
éléments précédents, et on les décale si nécessaire pour libérer la place. Le tri par insertion
est un tri stable, en place, et online. Il a une complexité en temps de O(n2) en moyenne et en
pire cas, où n est la taille du tableau. Il est efficace sur des petites entrées ou des entrées
presque triées.

Algorithme :

Commencer par considérer le premier élément du tableau comme la partie triée.

Prendre l'élément suivant de la partie non triée et l'insérer à la place correcte dans la partie
triée.

Répéter cette étape jusqu'à ce que la partie non triée devienne vide.

Complexité :

Meilleur cas : O(n) - lorsque le tableau est déjà trié.

Pire cas : O(n2) - lorsque le tableau est trié dans l'ordre inverse.

L’algorithme de tri à bulles consiste à parcourir le tableau à trier, et à échanger les éléments
consécutifs qui ne sont pas dans l’ordre. Après un premier passage, le plus grand élément se
trouve en fin de tableau. On répète le processus en s’arrêtant à l’avant-dernier élément, et
ainsi de suite. Le tri à bulles est un tri stable et en place. Il a une complexité en temps de
O(n2) en moyenne et en pire cas, où n est la taille du tableau. Il est peu performant comparé
à d’autres algorithmes de tri.

Algorithme :

Parcourir le tableau à partir du début.

Comparer les éléments adjacents et les échanger s'ils sont dans le mauvais ordre.

Répéter ces étapes jusqu'à ce que le tableau soit entièrement trié.

Complexité :

Meilleur cas : O(n) - lorsque le tableau est déjà trié.

Pire cas : O(n2) - lorsque le tableau est trié dans l'ordre inverse.
2. LES DEUX ALGORITHMES TRADUIT EN C#.NET

ALGORITHME DE TRI PAR INSERTION :


using System;

class Program
{
static void Main()
{
int[] tableau = { 5, 2, 9, 1, 5, 6 };

TriInsertion(tableau);

[Link]("Tableau trié par insertion : ");


AfficherTableau(tableau);
}

static void TriInsertion(int[] tableau)


{
int n = [Link];

for (int i = 1; i < n; ++i)


{
int cle = tableau[i];
int j = i - 1;

while (j >= 0 && tableau[j] > cle)


{
tableau[j + 1] = tableau[j];
j = j - 1;
}

tableau[j + 1] = cle;
}
}

static void AfficherTableau(int[] tableau)


{
foreach (int element in tableau)
{
[Link](element + " ");
}
[Link]();
}

}
ALGORITHMES DE TRI A BULLES :
using System;

class Program
{
static void Main()
{
int[] tableau = { 15, 12, 19, 11, 15, 16 };

TriBulles(tableau);

[Link]("Tableau trié à bulles : ");


AfficherTableau(tableau);
}

static void TriBulles(int[] tableau)


{
int n = [Link];

for (int i = 0; i < n - 1; ++i)


{
for (int j = 0; j < n - i - 1; ++j)
{
if (tableau[j] > tableau[j + 1])
{
// Échanger les éléments si ils sont dans le mauvais ordre
int temp = tableau[j];
tableau[j] = tableau[j + 1];
tableau[j + 1] = temp;
}
}
}
}

static void AfficherTableau(int[] tableau)


{
foreach (int element in tableau)
{
[Link](element + " ");
}
[Link]();
}
}

3. ALGORITHME D’UN PROGRAMME CALCULANT ET AFFICHANT LA SOMME S, DE DEUX MATRICES A


ET B. SACHANT QUE A ET B SONT DES MATRICES À 3 LIGNES ET À 3 COLONNES, ET LES ÉLÉMENTS
DES MATRICES A ET B SONT PRÉALABLEMENT SAISIS PAR L’UTILISATEUR:
ALGORITHME SOMME_MATRICES
Variables
i, j : entier
A[3][3], B[3][3], S[3][3] : réel
Début
// Saisir les éléments des matrices A et B
Pour i de 1 à 3
Pour j de 1 à 3
Ecrire "Entrez l'élément A[", i, "][", j, "] : "
Lire A[i][j]
Ecrire "Entrez l'élément B[", i, "][", j, "] : "
Lire B[i][j]
FinPour
FinPour
// Calculer la somme S
Pour i de 1 à 3
Pour j de 1 à 3
S[i][j] <- A[i][j] + B[i][j]
FinPour
FinPour
// Afficher la somme S
Ecrire "La somme S des matrices A et B est : "
Pour i de 1 à 3
Pour j de 1 à 3
Ecrire S[i][j], " "
FinPour
Ecrire "\n"
FinPour
Fin
4. CODE C++ ET ILLUSTRATION:

#include <iostream>

using namespace std;


// Déclaration de la fonction principale
int main() {
// Déclaration des matrices A, B et la somme S
int A[3][3], B[3][3], S[3][3];

// Saisie des éléments de la matrice A par l'utilisateur


for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cout << "Saisir l'élément A[" << i << "][" << j << "] : ";
cin >> A[i][j];
}
}

// Saisie des éléments de la matrice B par l'utilisateur


for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cout << "Saisir l'élément B[" << i << "][" << j << "] : ";
cin >> B[i][j];
}
}

// Calcul de la somme des matrices A et B


for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
S[i][j] = A[i][j] + B[i][j];
}
}

// Affichage de la somme S
cout << "La somme des matrices A et B est :\n";
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cout << S[i][j] << " ";
}
cout << "\n";
}

return 0;
}
5. ALGORITHME DE COTATION

Déclarations :
pointsMaximaux = [100, 120, 80, 80, 120, 100]

Pour chaque étudiant (i de 1 à 10) :


Demander le nom de l'étudiant
totalPoints = 0

Pour chaque cours (j de 1 à 6) :


Demander la note obtenue pour le cours j
Ajouter la note au totalPoints

Calculer le pourcentage : pourcentage = (totalPoints / pointsMaximaux[j]) * 100

Déterminer la mention en fonction du pourcentage :


Si pourcentage >= 55 et pourcentage < 69 : mention = "Satisfaction"
Sinon, si pourcentage >= 70 et pourcentage < 80 : mention = "Distinction"
Sinon, si pourcentage >= 80 et pourcentage < 90 : mention = "Grande Distinction"
Sinon, si pourcentage >= 90 et pourcentage <= 100 : mention = "Très Grande Distinction"
Sinon : mention = "Échec"

Afficher le nom de l'étudiant, les notes pour chaque cours, le pourcentage et la mention
Fin Pour
TRADUCTION EN LANGAGE JAVA

import [Link];

public class CotationEtudiants {


public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);

// Déclarations
int[] pointsMaximaux = {100, 120, 80, 80, 120, 100};

// Boucle pour chaque étudiant


for (int etudiant = 1; etudiant <= 10; etudiant++) {
[Link]("Étudiant " + etudiant);

// Demander le nom de l'étudiant


[Link]("Saisir le nom de l'étudiant : ");
String nomEtudiant = [Link]();

// Initialiser le total des points


int totalPoints = 0;

// Boucle pour chaque cours


for (int cours = 0; cours < 6; cours++) {
// Demander la note obtenue pour le cours
[Link]("Saisir la note obtenue pour le cours " + getNomCours(cours) + " :
");
int note = [Link]();

// Ajouter la note au total des points


totalPoints += note;
}

// Calculer le pourcentage
double pourcentage = ((double) totalPoints / pointsMaximaux[0]) * 100;

// Déterminer la mention
String mention = getMention(pourcentage);

// Afficher les résultats


[Link]("Nom de l'étudiant : " + nomEtudiant);
[Link]("Total des points : " + totalPoints);
[Link]("Pourcentage : " + pourcentage + "%");
[Link]("Mention : " + mention);

// Saut de ligne pour la clarté


[Link]();
// Nettoyer le tampon d'entrée
[Link]();
}
}

static String getNomCours(int index) {


String[] cours = {"Algorithme", "Programmation Orientée Objet", "Recherche
Opérationnelle", "Pédagogie Comparée", "Système d'Exploitation", "Langage Java"};
return cours[index];
}

static String getMention(double pourcentage) {


if (pourcentage >= 55 && pourcentage < 69) {
return "Satisfaction";
} else if (pourcentage >= 70 && pourcentage < 80) {
return "Distinction";
} else if (pourcentage >= 80 && pourcentage < 90) {
return "Grande Distinction";
} else if (pourcentage >= 90 && pourcentage <= 100) {
return "Très Grande Distinction";
} else {
return "Échec";
}
}
}
REFERENCES

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to algorithms.
Mit Press.

Learn Data Structure and Algorithms. GeeksforGeeks. (n.d.).


[Link]

0x9FL33T, coma94, & Aronanol. (2014, July 9). Le tri par insertion • tutoriels • zeste de
savoir. Zeste de Savoir. [Link]

Vous aimerez peut-être aussi