From fd3ce462014e92030055501abd921f54c3f07af3 Mon Sep 17 00:00:00 2001 From: Darius Date: Tue, 15 Oct 2024 11:32:41 +0200 Subject: [PATCH 1/3] papap --- .vscode/launch.json | 7 ++ .vscode/settings.json | 6 ++ .vscode/tasks.json | 28 +++++++ compte_rendu.txt | 0 pendu.c | 165 +++++++++++++++++++++++++++++++++++++----- 5 files changed, 189 insertions(+), 17 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 compte_rendu.txt diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..0a3214f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,7 @@ +{ + // Utilisez IntelliSense pour en savoir plus sur les attributs possibles. + // Pointez pour afficher la description des attributs existants. + // Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9b41d01 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "algorithm": "c", + "format": "c" + } +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..136d521 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc générer le fichier actif", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Tâche générée par le débogueur." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/compte_rendu.txt b/compte_rendu.txt new file mode 100644 index 0000000..e69de29 diff --git a/pendu.c b/pendu.c index 1b0cfd6..4c8e3bf 100644 --- a/pendu.c +++ b/pendu.c @@ -5,6 +5,7 @@ #define MAX_WORDS 14 #define MAX_TRIES 6 +#define MAX_WORDS_LENGTH 50 const char *words[MAX_WORDS] = { "programmation", @@ -35,33 +36,163 @@ void display_hangman(int tries) { } } +int ask_word_length() { + int word_length; + + printf("Veuillez entrer la longueur du mot souhaitée (entier positif) : "); + + while (scanf("%d", &word_length) != 1 || word_length <= 0) { + printf("Entrée invalide. Veuillez entrer un entier positif : "); + while (getchar() != '\n'); // vider le buffer + } + + return word_length; +} + +char* difficult(int word_length) { + int size1 = 0, size2 = 0; + + char** selected_words = selecte_words(word_length, &size1); + if (selected_words == NULL) { + printf("Erreur lors de la sélection des mots\n"); + return NULL; + } + + char** merged_words = word_merge(word_length, &size2); + if (merged_words == NULL) { + printf("Erreur lors de la fusion des mots\n"); + return NULL; + } + + char** final_words = merge_string_arrays(selected_words, merged_words, size1, size2); + + // Libérer la mémoire des tableaux intermédiaires + for (int i = 0; i < size1; i++) free(selected_words[i]); + for (int i = 0; i < size2; i++) free(merged_words[i]); + free(selected_words); + free(merged_words); + + if (final_words == NULL) { + printf("Erreur lors de la fusion finale des mots\n"); + return NULL; + } + + // Sélectionner un mot aléatoire + char* chosen_word = final_words[rand() % (size1 + size2)]; + + return chosen_word; +} + +char** merge_string_arrays(char** array1, char** array2, int size1, int size2) { + int merged_size = size1 + size2; + char** merged_array = (char**)malloc(merged_size * sizeof(char*)); + if (merged_array == NULL) { + printf("Erreur d'allocation de mémoire\n"); + return NULL; + } + + for (int i = 0; i < size1; i++) { + merged_array[i] = (char*)malloc((strlen(array1[i]) + 1) * sizeof(char)); + if (merged_array[i] == NULL) { + printf("Erreur d'allocation de mémoire pour array1[%d]\n", i); + return NULL; + } + strcpy(merged_array[i], array1[i]); + } + + for (int i = 0; i < size2; i++) { + merged_array[size1 + i] = (char*)malloc((strlen(array2[i]) + 1) * sizeof(char)); + if (merged_array[size1 + i] == NULL) { + printf("Erreur d'allocation de mémoire pour array2[%d]\n", i); + return NULL; + } + strcpy(merged_array[size1 + i], array2[i]); + } + + return merged_array; +} + +char** selecte_words(int word_length, int* size) { + char** word_Selected = (char**)malloc(MAX_WORDS * sizeof(char*)); + if (word_Selected == NULL) { + printf("Erreur d'allocation de mémoire\n"); + return NULL; + } + + *size = 0; // initialiser la taille à 0 + + for (int i = 0; i < MAX_WORDS && words[i][0] != '\0'; i++) { + if (strlen(words[i]) == word_length) { + word_Selected[*size] = (char*)malloc((strlen(words[i]) + 1) * sizeof(char)); + if (word_Selected[*size] == NULL) { + printf("Erreur d'allocation de mémoire pour le mot sélectionné\n"); + return NULL; + } + strcpy(word_Selected[*size], words[i]); + (*size)++; + } + } + + return word_Selected; +} + +char** word_merge(int word_length, int* size2) { + int max_combinations = MAX_WORDS * MAX_WORDS; + char** word_combinations = (char**)malloc(max_combinations * sizeof(char*)); + if (word_combinations == NULL) { + printf("Erreur d'allocation de mémoire pour les combinaisons\n"); + return NULL; + } + + *size2 = 0; + + for (int i = 0; i < MAX_WORDS; i++) { + for (int j = 0; j < MAX_WORDS; j++) { + if (i != j && (strlen(words[i]) + strlen(words[j]) == word_length - 1)) { + word_combinations[*size2] = (char*)malloc((strlen(words[i]) + strlen(words[j]) + 2) * sizeof(char)); // +2 pour l'espace et '\0' + if (word_combinations[*size2] == NULL) { + printf("Erreur d'allocation de mémoire pour une combinaison\n"); + return NULL; + } + snprintf(word_combinations[*size2], strlen(words[i]) + strlen(words[j]) + 2, "%s %s", words[i], words[j]); + (*size2)++; + } + } + } + + return word_combinations; +} + int main() { srand(time(NULL)); - const char *word = words[rand() % MAX_WORDS]; - int word_length = strlen(word); - char guessed[word_length]; - int tries = 0; - int guessed_correctly = 0; - for (int i = 0; i < word_length; i++) { - guessed[i] = '_'; + int word_length = ask_word_length(); + const char* word = difficult(word_length); + + if (word == NULL) { + printf("Erreur : aucun mot disponible avec cette longueur.\n"); + return 1; } - guessed[word_length] = '\0'; - while (tries < MAX_TRIES && guessed_correctly < word_length) { + int word_len = strlen(word); + char guessed[word_len + 1]; + int tries = 0, guessed_correctly = 0; + + for (int i = 0; i < word_len; i++) guessed[i] = '_'; + guessed[word_len] = '\0'; + + while (tries < MAX_TRIES && guessed_correctly < word_len) { printf("\nMot à deviner : %s\n", guessed); display_hangman(tries); char guess; printf("Entrez une lettre : "); scanf(" %c", &guess); - int found = 0; - for (int i = 0; i < word_length; i++) { - if (word[i] == guess) { - if (guessed[i] == '_') { - guessed[i] = guess; - guessed_correctly++; - } + int found = 0; + for (int i = 0; i < word_len; i++) { + if (word[i] == guess && guessed[i] == '_') { + guessed[i] = guess; + guessed_correctly++; found = 1; } } @@ -71,7 +202,7 @@ int main() { } } - if (guessed_correctly == word_length) { + if (guessed_correctly == word_len) { printf("Félicitations ! Vous avez deviné le mot : %s\n", word); } else { printf("Désolé, vous avez perdu. Le mot était : %s\n", word); -- 2.47.0 From 6338aa68153ebe8a45782360f67abadd01be223b Mon Sep 17 00:00:00 2001 From: Darius Date: Tue, 15 Oct 2024 11:35:40 +0200 Subject: [PATCH 2/3] ajout pendu.c --- pendu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pendu.c b/pendu.c index 4c8e3bf..54967cb 100644 --- a/pendu.c +++ b/pendu.c @@ -76,7 +76,7 @@ char* difficult(int word_length) { printf("Erreur lors de la fusion finale des mots\n"); return NULL; } - + // Sélectionner un mot aléatoire char* chosen_word = final_words[rand() % (size1 + size2)]; -- 2.47.0 From 6a39663c84813f62f7ddc7d2cbb982fc431bde0e Mon Sep 17 00:00:00 2001 From: Darius Date: Tue, 15 Oct 2024 11:45:28 +0200 Subject: [PATCH 3/3] fix --- .vscode/settings.json | 3 ++- compte_rendu.txt | 3 +++ pendu | Bin 0 -> 16408 bytes pendu.c | 15 +++++++++++++-- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100755 pendu diff --git a/.vscode/settings.json b/.vscode/settings.json index 9b41d01..702949c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "files.associations": { "algorithm": "c", - "format": "c" + "format": "c", + "cstdlib": "c" } } \ No newline at end of file diff --git a/compte_rendu.txt b/compte_rendu.txt index e69de29..efbe544 100644 --- a/compte_rendu.txt +++ b/compte_rendu.txt @@ -0,0 +1,3 @@ +ex2 les functionnalité ont etait codé la mienne ne functionne pas pour l instant on passe + +la creation de pull request \ No newline at end of file diff --git a/pendu b/pendu new file mode 100755 index 0000000000000000000000000000000000000000..cf16347d1fb2263b34c9ff2e332332d4b41c4f93 GIT binary patch literal 16408 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