Skip to content
Snippets Groups Projects
Commit a95bd13a authored by paul.albuquer's avatar paul.albuquer
Browse files

added content lesson 2, put source code separately

parent afcbb22d
Branches
No related tags found
No related merge requests found
File moved
# Algorithmes et structures de données 2019-20
Contenu du cours 2 du du 25.09.2019
*****
## Plus petit commun multiple (PPCM) de deux nombres
- Algorithme de PPCM: exemple avec 12 et 15
| Tester si| `>, <` ou `=`| |
|-----------|:------------:|:---------|
| | `12 < 15` | |
| | `24 > 15` | |
| | `24 < 30` | |
| | `36 > 30` | |
| | `36 < 45` | |
| | `48 > 45` | |
| | `48 < 60` | |
| | `60 = 60` | **Fin !**|
## Plus grand diviseur commun (PGCD) de deux nombres
- Algorithme naïf du PGCD
- Pseudo-code du calcul du `PGCD` de `N` et `M`
```
si M rem N = 0 alors
PGCD := N
sinon
pour I de sqrt(N) à 1 faire
si N rem I = 0 et M rem I = 0 alors
PGCD := I
exit
fin si
fin pour
fin si
```
- Algorithme d'Euclide : exemple avec N = 35 et M = 60
| Dividende | = | Diviseur \* Quotient | + | Reste |
|:----------:|:----:|:---------------------:|:---:|:-------:|
| 35 | = | 60 \* 0 | + | 35 |
| 60 | = | 35 \* 1 | + | 25 |
| 35 | = | 25 \* 1 | + | 10 |
| 25 | = | 10 \* 2 | + | 5 |
| 10 | = | 5 \* 2 | + | 0 |
> > => PGCD = 5
## Exercice : Montrer que `PGCD(M,N)*PPCM(M,N) = M*N`
- Utiliser la décomposition en facteurs 1<sup>er<sup/>
## Type composé : tableaux statiques à une dimension
- Collection ordonnée d'objets de même type dont le nombre est connu à la compilation
- La taille d'un tableau statique ne peut pas changer en cours d'exécution
- Allocation contiguë en mémoire et sur la pile
```C
int entiers[] = {1,2,3,4,5};
int tab[3];
```
- Accès aux éléments d’un tableau via l’opérateur `[index]``index` est l’indice de l’élément à accéder, `index` va de 0 à la taille du tableau moins un
```C
int premier = entiers[0];
int dernier = entiers[4];
```
> **Attention!** L'accès à un indice hors de l'intervalle zéro à la taille du tableau moins un ne produit pas d'erreur à la compilation, mais possible à l'exécution.
- Tableau de nombres flottants
```C
const int SIZE = 13;
float tab[SIZE];
```
- Initialisation d'un tableau de floats avec `i*i`, puis avec des nombres aléatoires
```C
for (int i=0;i<SIZE;i++) {
tab[i] = (float)rand()/(float)(RAND_MAX) ;
}
```
- Recherche d'un indice de la valeur minimale d'un tableau de floats et permutation avec l'élément en 1<sup>ère</sup> position
- Répétition de l'opération précédente sur des tranches du tableau
- Tri par sélection avec illustration sur un exemple
- Algorithme de vérification que deux mots sont des anagrammes en utilisant un tri
## Palindrome avec parcours de boucle
## Le crible d'Eratosthène
#include <stdio.h>
// Programme calculant la factorielle d'un nombre
void main() {
int nb = 1;
printf("Entrer un nombre: ");
scanf("%d",&nb);
int fact = 1;
for(int i=2;i<=nb;i++) {
fact *= i;
}
/*int iter = 2;
while(iter <= nb) {
fact *= iter;
iter++;
}
do {
fact *= iter;
iter++;
} while(iter <= nb);*/
printf("Fact = %d\n",fact);
}
File moved
#include <stdio.h>
// calcul du PGCD de deux nombres
void main() {
int n = 90;
int m = 78;
printf("n = %d et m = %d\n",n,m);
// algorithme naif
int gcd = 1;
for (int div=n;div>=2;div--) {
if (n%div == 0 && m%div == 0) {
gcd = div;
break;
}
}
printf("Le pgcd de %d et %d est %d\n",n,m,gcd);
// algorithme d'Euclide
int tmp_n = n;
int tmp_m = m;
while (tmp_n%tmp_m > 0) {
int tmp = tmp_n;
tmp_n = tmp_m;
tmp_m = tmp%tmp_m;
}
printf("Le pgcd de %d et %d est %d\n",n,m,tmp_m);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
// Programme calculant le plus petit commun multiple (PPCM) de deux nombres
void main() {
int n = 15,m = 12;
int res = n*m;
for (int i=2;i<=m;i++) {
if (n*i%m == 0) {
res = n*i;
break;
}
}
printf("Le ppcm de %d et %d est %d\n",n,m,res);
int i = 1;
while (n*i%m != 0) {
i++;
}
printf("Le ppcm de %d et %d est %d\n",n,m,n*i);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
void main() {
int n = 15,m = 12;
printf("Entrez n et m:\n");
scanf("%d %d",&n,&m);
int tmp_n = n,tmp_m = m;
/*
while (tmp_n != tmp_m) {
if (tmp_n < tmp_m) {
tmp_n += n;
} else {
tmp_m += m;
}
}
while (true) {
if (tmp_n < tmp_m) {
tmp_n += n;
} else if (tmp_n > tmp_m) {
tmp_m += m;
} else {
break;
}
}
*/
do {
if (tmp_n < tmp_m) {
tmp_n += n;
} else {
tmp_m += m;
}
} while (tmp_n != tmp_m);
printf("Le ppcm de %d et %d est %d\n",n,m,tmp_m);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment