From f932e6813c15a2d189339b699b8f4603426b42cc Mon Sep 17 00:00:00 2001 From: Emmanuel Srivastava Date: Mon, 20 Jan 2025 18:26:48 +0100 Subject: [PATCH] update --- DEV.1.1/divers/cm3.1.c | 46 ++++++++++++++++++++++ DEV.1.1/divers/cm3.2.c | 37 ++++++++++++++++++ DEV.1.1/divers/cm3.3.c | 89 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 DEV.1.1/divers/cm3.1.c create mode 100644 DEV.1.1/divers/cm3.2.c create mode 100644 DEV.1.1/divers/cm3.3.c diff --git a/DEV.1.1/divers/cm3.1.c b/DEV.1.1/divers/cm3.1.c new file mode 100644 index 0000000..c0863d2 --- /dev/null +++ b/DEV.1.1/divers/cm3.1.c @@ -0,0 +1,46 @@ +#include +#include +#include + +/* Fonction pour traiter l'image */ +void modifier_image_pgm(const char *nom_fichier) { + FILE *fichier; + char ligne[256]; + int largeur, hauteur, niveaux, x, y; + + fichier = fopen(nom_fichier, "r+"); + if (fichier == NULL) { + fprintf(stderr, "Erreur: Impossible d'ouvrir le fichier\n"); + exit(EXIT_FAILURE); + } + + /* Lire l'en-tête du fichier PGM */ + fgets(ligne, sizeof(ligne), fichier); /* Lire le format (P2) */ + fgets(ligne, sizeof(ligne), fichier); /* Lire le commentaire */ + fscanf(fichier, "%d %d", &largeur, &hauteur); + fscanf(fichier, "%d", &niveaux); + + /* Modifier les pixels d'intensité 3 au centre de l'image */ + for (y = 0; y < hauteur; y++) { + for (x = 0; x < largeur; x++) { + int pixel; + fscanf(fichier, "%d", &pixel); + if (pixel == 3 && x > 0 && x < largeur - 1 && y > 0 && y < hauteur - 1) { + fseek(fichier, -2, SEEK_CUR); + fprintf(fichier, "5 "); + } + } + } + + fclose(fichier); +} + +int main(int argc, char *argv[]) { + if (argc != 2) { + fprintf(stderr, "Usage: %s fichier.pgm\n", argv[0]); + return EXIT_FAILURE; + } + + modifier_image_pgm(argv[1]); + return EXIT_SUCCESS; +} diff --git a/DEV.1.1/divers/cm3.2.c b/DEV.1.1/divers/cm3.2.c new file mode 100644 index 0000000..dcf3bd7 --- /dev/null +++ b/DEV.1.1/divers/cm3.2.c @@ -0,0 +1,37 @@ +#include +#include + +/* Fonction récursive pour trouver le maximum */ +int trouver_maximum(int n, int valeurs[]) { + if (n == 1) { + return valeurs[0]; + } + int max_suivant = trouver_maximum(n - 1, valeurs + 1); + return (valeurs[0] > max_suivant) ? valeurs[0] : max_suivant; +} + +int main(int argc, char *argv[]) { + int i, n; + int *valeurs; + + if (argc < 2) { + fprintf(stderr, "Usage: %s nombre1 nombre2 ...\n", argv[0]); + return EXIT_FAILURE; + } + + n = argc - 1; + valeurs = (int*)malloc(n * sizeof(int)); + if (valeurs == NULL) { + fprintf(stderr, "Erreur d'allocation mémoire\n"); + return EXIT_FAILURE; + } + + for (i = 0; i < n; i++) { + valeurs[i] = atoi(argv[i + 1]); + } + + printf("%d\n", trouver_maximum(n, valeurs)); + + free(valeurs); + return EXIT_SUCCESS; +} diff --git a/DEV.1.1/divers/cm3.3.c b/DEV.1.1/divers/cm3.3.c new file mode 100644 index 0000000..7ec8791 --- /dev/null +++ b/DEV.1.1/divers/cm3.3.c @@ -0,0 +1,89 @@ +#include +#include +#include + +/* Structure d'un nœud de la liste chaînée */ +typedef struct Node { + int digit; + struct Node *next; +} Node; + +/* Fonction pour ajouter un chiffre à la fin de la liste chaînée */ +Node* ajouter_chiffre(Node *head, int digit) { + Node *new_node = (Node*)malloc(sizeof(Node)); + if (new_node == NULL) { + fprintf(stderr, "Erreur d'allocation memoire\n"); + exit(EXIT_FAILURE); + } + new_node->digit = digit; + new_node->next = NULL; + if (head == NULL) { + return new_node; + } + Node *temp = head; + while (temp->next != NULL) { + temp = temp->next; + } + temp->next = new_node; + return head; +} + +/* Fonction pour convertir une chaîne en liste chaînée */ +Node* convertir_en_liste(const char *nombre) { + Node *head = NULL; + int i; + for (i = 0; nombre[i] != '\0'; i++) { + head = ajouter_chiffre(head, nombre[i] - '0'); + } + return head; +} + +/* Fonction pour afficher la liste chaînée */ +void afficher_liste(Node *head) { + while (head != NULL) { + printf("%d", head->digit); + head = head->next; + } +} + +/* Fonction pour additionner deux listes chaînées */ +Node* additionner_listes(Node *l1, Node *l2) { + Node *resultat = NULL; + int retenue = 0; + + while (l1 != NULL || l2 != NULL || retenue) { + int somme = retenue; + if (l1 != NULL) { + somme += l1->digit; + l1 = l1->next; + } + if (l2 != NULL) { + somme += l2->digit; + l2 = l2->next; + } + resultat = ajouter_chiffre(resultat, somme % 10); + retenue = somme / 10; + } + return resultat; +} + +/* Fonction principale */ +int main(int argc, char *argv[]) { + Node *num1; + Node *num2; + Node *somme; + + if (argc != 3) { + fprintf(stderr, "Usage: %s nombre1 nombre2\n", argv[0]); + return EXIT_FAILURE; + } + + num1 = convertir_en_liste(argv[1]); + num2 = convertir_en_liste(argv[2]); + + somme = additionner_listes(num1, num2); + afficher_liste(somme); + printf("\n"); + + return EXIT_SUCCESS; +}