Skip to content
Snippets Groups Projects
Verified Commit 90e53aaa authored by orestis.malaspin's avatar orestis.malaspin
Browse files

ajout contenu anagrammes

parent a42c6a5e
No related branches found
No related tags found
No related merge requests found
---
title: "Introduction aux algorithmes"
date: "2021-10-06"
---
# Quelques algorithmes simples
## Voyons quelques algorithmes supplémentaires
## Quelques algorithmes supplémentaires
- Remplissage d'un tableau et recherche de la valeur minimale
......@@ -135,7 +140,142 @@ boucle (ind < SIZE-1) {
* Afficher le résultat trié;
* Vérifier algorithmiquement que le résultat est bien trié.
# Un type de tableau particulier
## Les chaînes de caractères
```C
string = tableau + char + magie noire
```
# Le type `char`{.C}
- Le type `char`{.C} est utilisé pour représenter un caractère.
- C'est un entier 8 bits signé.
- En particulier:
- Écrire
```C
char c = 'A';
```
- Est équivalent à:
```C
char c = 65;
```
- Les fonctions d'affichage interprètent le nombre comme sa valeur ASCII.
# Chaînes de caractères (strings)
- Chaîne de caractère `==` tableau de caractères **terminé par la valeur** `'\0'`{.C} ou `0`{.C}.
## Exemple
```C
char *str = "HELLO !";
char str[] = "HELLO !";
```
Est représenté par
| `H` | `E` | `L` | `L` | `O` | | `!` | `\0`|
|------|------|------|------|------|------|------|-----|
| `72` | `69` | `76` | `76` | `79` | `32` | `33` | `0` |
# Syntaxe
```C
char name[5];
name[0] = 'P'; // = 70;
name[1] = 'a'; // = 97;
name[2] = 'u'; // = 117;
name[3] = 'l'; // = 108;
name[4] = '\0'; // = 0;
char name[] = {'P', 'a', 'u', 'l', '\0'};
char name[5] = "Paul";
char name[] = "Paul";
char name[100] = "Paul is not 100 characters long.";
```
# Fonctions
- Il existe une grande quantités de fonction pour la manipulation de chaînes de caractères dans `string.h`.
- Fonctions principales:
```C
// longueur de la chaîne (sans le \0)
size_t strlen(char *str);
// copie jusqu'à un \0
char *strcpy(char *dest, const char *src);
// copie len char
char *strncpy(char *dest, const char *src, size_t len);
// compare len chars
int strncmp(char *str1, char *str2, size_t len);
// compare jusqu'à un \0
int strcmp(char *str1, char *str2);
```
- Pour avoir la liste complète: `man string`.
. . .
## Quels problèmes peuvent se produire avec `strlen`, `strcpy`, `strcmp`?
# Les anagrammes
## Définition
Deux mots sont des anagrammes l'un de l'autre quand ils contiennent les mêmes
lettres mais dans un ordre différent.
## Exemple
| `t` | `u` | `t` | `u` | `t` | `\0` | ` ` | ` ` |
|------|------|------|------|------|------|------|-----|
| `t` | `u` | `t` | `t` | `u` | `\0` | ` ` | ` ` |
## Problème: Trouvez un algorithme pour déterminer si deux mots sont des anagrammes.
# La fin
# Les anagrammes
## Des questions?
## Il suffit de:
1. Trier les deux mots.
2. Vérifier s'ils contiennent les mêmes lettres.
```C
void tri(char tab[]);
int strlen(char mot[]) {
int i = 0;
while (mot[i] != '\0') {
i++;
}
return i;
}
bool is_equal(char mot1[], char mot2[]) {
if (strlen(mot1) != strlen(mot2)) {
return false;
}
for (int i = 0; i < strlen(mot1); ++i) {
if (mot1[i] != mot2[i]) {
return false;
}
}
return true;
}
int main() {
char mot1[] = "tutut";
char mot2[] = "tutut";
printf("%s et %s ", mot1, mot2);
tri(mot1);
tri(mot2);
boll anagramme = is_equal(mot1, mot2);
if (anagramme) {
printf("sont des anagramme!");
} else {
printf("ne sont pas des anagramme!");
}
}
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment