Vous êtes sur la page 1sur 28

Outils de programmation

- On s’intéresse a deux langages de programmation qui sont le C et le JAVA

- Chapitre 1: langage C

- Rappel des concepts de base: variables, boucles, tableaux


- , structure de données, etc.
- Application de langage C pour la résolution des problèmes linéaires

- Chapitre 2: langage JAVA

- Rappel des concepts de base de programmation orienté objet: classes,


objet, héritage, etc.

- Application de langage JAVA, pour la réalisation d’un éditeur de graphe,


Exemple1 d’un programme en langage C
Afficher la somme de deux chiffres a et b,

#include <stdio.h>
#include <stdlib.h>

main()
{
int a, b,r;

printf("donner les valeur de a et b\n");


scanf("%d%d", &a,&b);
r=a+b;
printf("resultat=%d",r);

}
Les type de langage C, avec leur formatage

TYPE FORMATAGE
int %i ou %d
float %f
double %d
char %c
Exemple2 d’un programme en langage C
Afficher la division de deux chiffres a et b,
L’instruction conditionnel if

#include <stdio.h>
#include <stdlib.h>

main()
{
int a, b,r;
printf("donner les valeur de a et b\n");
scanf("%d%d", &a,&b);

if(b!=0) {r=a/b;
printf("resultat=%d",r);
}
else printf("erreur: division sur zero");

}
If ( condition) {Bloc instructions 1}
else ) {Bloc instructions 2}

vrai faux
condition

Bloc Instructions 1 Bloc Instructions 2


Exemple3 d’un programme en langage C
Résoudre l’equation de premier degré, ax+b=0

#include <stdio.h>
#include <stdlib.h>

main()
{
int a, b;
float x;
printf("donner les valeur de a et b\n");
scanf("%d%d", &a,&b);
if((a==0)&&(b==0)) printf("une infinite de solutions");
else
if(a!=0) {x=(float)-b/a;
printf("x=%f",x);
}
else printf("erreur: pas de solution");

}
Exemple4 d’un programme en langage C
La boucle for ; Calcul de la somme des N premier nombre

#include <stdio.h>
#include <stdlib.h>

main()
{
int N,i,S;
printf("donner une valeur N\n");
scanf("%d",&N);

S=0;

for(i=0;i<=N;i++)
{
S=S+i;
}
printf("la somme = %d", S);

}
for(i=0;i<=N;i++)
{
S=S+i;
} i=0;

faux
i<=N

i++; vrai

S=S+i;

Instruction apres le for


Exemple5 d’un programme en langage C
La boucle while; Calcul de la somme des N premier nombre
#include <stdio.h>
#include <stdlib.h>

main()
{
int N,i,S;
printf("donner une valeur N\n");
scanf("%d",&N);

S=0;
i=0;
while(i<=N)
{
S=S+i;
i++;
}

printf("la somme = %d", S);

}
while(i<=N)
{
S=S+i;
i++;
}

faux
i<=N

i++; vrai

S=S+i;

Instruction apres le for


Exemple 6 d’un programme en langage C
Les tableaux: remplissage et affichage d’un tableau
#include <stdio.h>
#include <stdlib.h>

main()
{
int i, T[5];
// remplissage de tableau
for(i=0;i<5;i++)
{ printf("T[%d]=",i);
scanf("%d",&T[i]);
}
//affichage de tableau
printf("\n les valeur de tableau sont \n");
for(i=0;i<5;i++)
{ printf("%d ",T[i]);

}
Exemple 7 d’un programme en langage C
Les tableaux: opérations sur les éléments d’un tableau
#include <stdio.h>
#include <stdlib.h>

main()
{
int i, T1[5], T2[5], T[5];
// remplissage de deux tableaux
for(i=0;i<5;i++){ printf("T1[%d]=",i); scanf("%d",&T1[i]);}
for(i=0;i<5;i++){ printf("T2[%d]=",i); scanf("%d",&T2[i]);}

printf("\n les valeurs de tableau 1 sont :\n");


for(i=0;i<5;i++){ printf("%d ",T1[i]);}

printf("\n les valeurs de tableau 2 sont :\n");


for(i=0;i<5;i++) printf("%d ",T2[i]);

printf("\n les valeurs de tableau 1+ tableau 2 sont :\n");


for(i=0;i<5;i++){ T[i]=T1[i]+T2[i];
printf("%d ",T[i]);}
}
Exemple 10 d’un programme en langage C
Les Matrices remplissage et affichage d’une matrice
#include <stdio.h>
#include <stdlib.h>

main()
{
int i,j, M[2][2];
// remplissage de la matrice
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{ printf("M[%d][%d]=",i,j);
scanf("%d",&M[i][j]);}

printf("\n les valeurs de la matrice sont :\n");


for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{ printf("%d ",M[i][j]);}
printf("\n");
}
}
Exemple 11 d’un programme en langage C
Les Matrices :opérations sur les matrices

#include <stdio.h>
#include <stdlib.h>

main()
{
int i,j, M1[2][2], M2[2][2],M[2][2];
// remplissage de la matrice 1
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{ printf("M1[%d][%d]=",i,j);
scanf("%d",&M1[i][j]);} // calcul de la somme et affichage de resultats
printf("\n les valeurs de la somme des deux matrices sont :\n");

// remplissage de la matrice 2 for(i=0;i<2;i++)


for(i=0;i<2;i++) { for(j=0;j<2;j++)
for(j=0;j<2;j++) { M[i][j]=M1[i][j]+M2[i][j];
{ printf("M2[%d][%d]=",i,j); printf ("%d ",M[i][j]);}
scanf("%d",&M2[i][j]); printf("\n");}
}
}
Exemple 12 d’un programme en langage C
Les fonctions

Exercice : calculer la somme des 5 premiers nombres et la somme des 8 premiers nombres,
puis effectuer le produit entre les deux sommes
Solution 1, sans les fonctions Solution 2, avecles fonctions
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int somme(int N)
{ int S, i;
main()
S=0;
{
for(i=0;i<=N;i++){S=S+i;}
int i, S1, S2,P;
return S;
S1=0;
}
for(i=0;i<=5;i++){S1=S1+i;}
main()
{
S2=0;
int i, S1, S2,P;
for(i=0;i<=8;i++){S2=S2+i;}
S1=somme(5);
S2=somme(8);
P=S1*S2;
P=S1*S2;
printf("le produit =%d",P);
printf("le produit =%d",P);
}
}
Exemple 13 d’un programme en langage C
Les fonction: refaire l’example de la somme des deux matrices par les fonctions
#include <stdio.h>
#include <stdlib.h>
RempMatrice(int M[2][2], int numMatrice)
{ int i,j;
// remplissage de la matrice
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{ printf("M%d[%d][%d]=",numMatrice,i,j);
scanf("%d",&M[i][j]);}
}
main()
{int i,j, M1[2][2], M2[2][2],M[2][2];
RempMatrice(M1,1);
RempMatrice(M2,2);
printf("\n les valeurs de la somme des deux matrices sont :\n");
for(i=0;i<2;i++)
{ for(j=0;j<2;j++)
{ M[i][j]=M1[i][j]+M2[i][j];
printf ("%d ",M[i][j]);}
printf("\n");}
}
Exercice :
Calculer la somme de deux polynômes de degres 3. afficher le polynôme résultat
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j, coeff1[4],coeff2[4],coeff[4];
printf("donner les cofficient de polynome 1:\n");
for(i=0;i<4;i++) {printf("coeff1[%d]=",i);scanf("%d",&coeff1[i]);}
printf("donner les cofficient de polynome 2:\n");
for(i=0;i<4;i++) {printf("coeff2[%d]=",i);scanf("%d",&coeff2[i]);}

printf("\n le polynome resultat est :\n");


for(i=0;i<4;i++)

{ coeff[i]=coeff1[i]+coeff2[i];
if(i==0) printf("%d +",coeff[i]);
else printf (" %d x^%d+ ",coeff[i],i);
if(i==3) printf("%d x^%d ",coeff[i],i);
}

}
L’algorithme de DijKstra :
Cet algorithme calcul la distance minimal d’un nœud vers
les autres nœuds, dans un graphe Orienté ou non,
Intérêt:
On peut prendre pour exemple le réseau routier d'une
région: chaque sommet est une ville, chaque arc est une
route dont le poids est en fait le kilométrage: l'algorithme
de Dijkstra permet alors de trouver le plus court chemin
d'une ville à une autre.
Principe de l’algorithme

Soit V=9 le nombre de nœud de gaphe,


1) Créer un ensemble sptSet (shortest path tree set) :qui garde la trace des noeuds inclus dans
le chemin le plus court, cet ensemble est initialisement vide.

pour i de 0 à V
sptSet(i) := 0;
fin pour

le case sptSet(i)=1, vaut dire que le nœud i est inclut dans le chemin le plus court.

2) Fixer les distances vers tous les noeuds, initialement à l infini.

pour i de 0 à V
Distance(i) := infini;
fin pour

Et une distance de 0 pour le premier noeud de graphe. Distance(src)=0,

Le noeud src est le nœud de départ, depuis lequel on veut calculer les distance vers les autres
noeud.
3) Tanque sptSet n’inclue pas tous les noeud

a) prendre un noeud u qui n’exesite pas dejà dans sptSet, et qui a la distance
minimale

b) Mettre a jour tous les noeuds ajacent a u,

pour i de 0 à V

- choisir le nœud u avec Distance(u) minimal


- sptSet(u)=1;
- pour chaque nœud w qui a un arc avec u
si Distance(w) > Distance(u) + Poid(u,w) alors
Distance(w) := Distance(u) + Poid(u,w)
fin si
fin pour
1- initialement Distance= {0, INF, INF, INF, INF, INF, INF, INF, INF}
SptSet= {0, 0, 0, 0, 0 , 0, 0 , 0, 0, 0 }
2- Prendre le nœud avec la distance min, non déjà inclut dans sptSet.
SptSet= {1, 0, 0, 0, 0 , 0, 0 , 0, 0 }

3- Mettre a jour les distance, des nœuds ajacents


Distance= {0, 4, INF, INF, INF, INF, INF, 8, INF}
4- Prendre le nœud avec la distance min, non déjà inclut dans sptSet.

SptSet= {1, 1, 0, 0, 0 , 0, 0 , 0 , 0 }

5- Mettre a jour les distance, des nœuds ajacents


Distance= {0, 4, 12, INF, INF, INF, INF, 8,INF}

4+11> 8, donc le nœud 7 n’est pas mise a jour

6- Prendre le nœud avec la distance min, non déjà inclut dans sptSet.

SptSet= {1, 1, 0, 0, 0 , 0, 0 , 1 , 0 }

7- Mettre a jour les distance, des nœuds adjacents


Distance= {0, 4, 12, INF, INF, INF ,9 , 8, 15}
8- Prendre le nœud avec la distance min, non déjà inclut dans sptSet.

SptSet= {1, 1, 0, 0, 0 , 0, 1 , 1 , 0 }

8- Apres la répétition de ce processus autant de fois, jusuq’a ce que


tous les nœuds sont inclus dans sptSet, on obtient:
Implémentation en Langage C

#include <limits.h> // cette bib va nous permettre de définir l’infinie


#include <stdio.h>

// nombre de noeud dans le gaphe


#define V 9
main()
{
/* saisir les pois de graphe */
int poids[V][V] = { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },
{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },
{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },
{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },
{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
int src=0; // le nœud source, depuis lequel, on calcul les distance vers les autres noeuds

dijkstra(poids, src);
}
Implémentation en Langage C

void dijkstra(int poids[V][V], int src)


{
int dist[V]; // vecteur qui va contenir les distance minimal
int sptSet[V]; // sptSet[i] =1 , si le noeud est inclut dans le chemin le plus court

int i;
//initialiser tous les distance a l’infinie, et sptSet[i] =0
for ( i= 0; i < V; i++)
{dist[i] = INT_MAX; sptSet[i] = 0;}

// distance de la source =0
dist[src] = 0;
int count ;
for (count= 0; count < V ; count++)
{
int u = minDistance(dist, sptSet); /* minDistance est une fonction qui rend le
noeud avec la distance minimal, on va
programmer cette fonction*/

sptSet[u] = 1; /*prendre le noeud, choisit dans sptSet*/


int v;
//mettre a jour les distances des noeuds, ajdacent a u.
for ( v= 0; v < V; v++)
if (sptSet[v]==0 && poids[u][v]!=0&& dist[u] + poids[u][v] < dist[v])
dist[v] = dist[u] + poids[u][v];
}

printSolution(dist); /*afficher la solution*/


}
int minDistance(int dist[V], int sptSet[V])
{ int v;

int min = INT_MAX, min_index;

for ( v= 0; v < V; v++)


if (sptSet[v] == 0 && dist[v] <= min)
{min = dist[v]; min_index = v;}

return min_index;
}

printSolution(int dist[V])
{ int i;
printf(« Noeud\t\t la distance depuis la source\n");
for ( i= 0; i < V; i++)
printf("%d \t\t %d\n", i, dist[i]);
}

Vous aimerez peut-être aussi