Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • main
1 result

Target

Select target project
  • algorithmique/cours
  • aurelien.boyer/cours
  • jeremy.meissner/cours
  • radhwan.hassine/cours
  • yassin.elhakoun/cours-algo
  • gaspard.legouic/cours
  • joachim.bach/cours
  • gabriel.marinoja/algo-cours
  • loic.lavorel/cours
  • iliya.saroukha/cours
  • costanti.volta/cours
  • jacquesw.ndoumben/cours
12 results
Select Git revision
  • master
1 result
Show changes
Showing
with 4141 additions and 2131 deletions
This diff is collapsed.
This diff is collapsed.
---
title: "Introduction aux algorithmes"
date: "2022-10-05"
patat:
eval:
tai:
command: fish
fragment: false
replace: true
ccc:
command: fish
fragment: false
replace: true
images:
backend: auto
title: "Introduction aux algorithmes III"
date: "2024-09-30"
---
# Rappel (1/2)
......@@ -23,7 +11,6 @@ patat:
* L'algorithme de la factorielle.
* L'algorithme du PPCM.
* Le début de l'algorithme du PGCD.
# Rappel (2/2)
......@@ -158,16 +145,15 @@ Par groupe de 3 (5-10min):
## Pseudo-code
```C
entier pgcd(m, n) {
entier pgcd(m, n)
tmp_n = n
tmp_m = m
tant que (tmp_m ne divise pas tmp_n) {
tant que (tmp_m ne divise pas tmp_n)
tmp = tmp_n
tmp_n = tmp_m
tmp_m = tmp modulo tmp_m
}
retourne tmp_m
}
```
# Le code du PGCD de 2 nombres
......@@ -200,7 +186,7 @@ void main() {
* Remplissage d'un tableau et recherche de la valeur minimal
* Anagrammes
* Palindromes
* Crible dratosthène
* Crible d’Ératosthène
. . .
......@@ -211,7 +197,7 @@ void main() {
\footnotesize
* Objets de même type: leur nombre est **connu à la compilation**;
* Stockés contigüement en mémoire (très efficace);
* Stockés de façon contiguë en mémoire (très efficace);
```C
#define SIZE 10
......@@ -235,8 +221,7 @@ void main() {
# Remarques
* Depuis `C99` possibilité d'avoir des tableaux dont la taille est *inconnue à
la compilation*;
* Depuis `C99` la taille peut être *inconnue à la compilation* (VLA);
```C
int size;
......@@ -273,6 +258,7 @@ for (int i = 0; i < SIZE; ++i) {
tab[i] = rand() / (double)RAND_MAX * 10.0 - 5.0;
// tab[i] contient un double dans [-5;5]
}
int other_tab[4] = {0}; // pareil que {0, 0, 0, 0}
```
# Recherche du minimum dans un tableau (1/2)
......@@ -304,7 +290,7 @@ pour i de 1 à SIZE - 1
int index = 0;
float min = tab[0];
for (int i = 1; i < SIZE; ++i) {
if min > tab[i] {
if (min > tab[i]) {
min = tab[i];
index = i;
}
......@@ -322,18 +308,10 @@ Trier un tableau par ordre croissant.
```C
ind = 0
tant que (ind < SIZE-1)
Trouver le minimum du tableau, tab_min[ind:SIZE].
Trouver le minimum du tableau, tab_min = min([ind:SIZE]).
Échanger tab_min avec tab[ind]
ind += 1
```
# Tri par sélection (2/2)
## Implémentation par groupe de 3
* Initialiser aléatoirement un tableau de `double` de taille 10;
* Afficher le tableau;
* Trier par sélection le tableau;
* Afficher le résultat trié;
* Vérifier algorithmiquement que le résultat est bien trié.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
version: "3.3"
services:
slides:
image: omalaspinas/pandoc:latest
user: 1000:1000
container_name: slides
volumes:
- ./:/data
entrypoint: ["make"]
working_dir: /data
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define SIZE 10
int tab_find_min_index(int i, int size, char tab[size]) {
int i_min = i;
for (int j = i + 1; j < (int)strlen(tab); ++j) {
if (tab[j] < tab[i_min]) {
i_min = j;
}
}
return i_min;
}
void swap(int i, int j, char tab[]) {
char tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
}
void tab_selection_sort(int size, char tab[size]) {
for (int i = 0; i < (int)strlen(tab); ++i) {
int i_min = tab_find_min_index(i, size, tab);
// échange tab[i] et tab[j]
if (i_min != i) {
swap(i, i_min, tab);
}
}
}
bool tab_is_sorted(int size, char tab[size]) {
for (int i = 1; i < size; ++i) {
if (tab[i - 1] > tab[i]) {
return false;
}
}
return true;
}
int main() {
// allocate tab
char tab_lhs[SIZE] = "tutut";
char tab_rhs[SIZE] = "tutta";
printf("Are %s and %s anagrams? ", tab_lhs, tab_rhs);
tab_selection_sort(SIZE, tab_lhs);
tab_selection_sort(SIZE, tab_rhs);
printf("Are %s and %s anagrams? ", tab_lhs, tab_rhs);
int is_equal = strcmp(tab_lhs, tab_rhs);
printf("%d", is_equal);
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.