Langage C #20 - listes doublement chaînées

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ธ.ค. 2024

ความคิดเห็น • 173

  • @kgb_express5914
    @kgb_express5914 ปีที่แล้ว +1

    l'une des seules vidéos où les heures de tournages ne sont pas nocturne, c'est bon pour la forme, super video comme a ton habitude, continue comme ça !!

  • @ZiqoR
    @ZiqoR 6 ปีที่แล้ว +7

    En réalité tes erreurs sont très utiles et permettent de tester notre compréhension du code en direct. Encore un grand merci, plus j'avance dans la formation et plus je fais mes TD sans problèmes. J'ai pu conseiller cette chaine à tout mon groupe d'école, en espérant que tu gagnes quelques abonnées en plus ;)

    • @formation-video
      @formation-video  6 ปีที่แล้ว +1

      Bonjour, bien content que ça profite à davantage de monde, en espérant vous compter de plus en plus nombreux oui, c'est le but :) ! Merci à toi o/

  • @papendao5819
    @papendao5819 2 ปีที่แล้ว +1

    Bonjour croyez moi vous avez elevez mon niveau ça vaut de l'or ce que vous faite!!!
    Merci enormement!!!!!!

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonjour, de rien et bon courage en langage C

  • @itsysrleyna3619
    @itsysrleyna3619 4 ปีที่แล้ว +2

    merci beaucoup pour tes efforts , sa m'aide beaucoup en tant qu’étudiante .
    bonne continuation

    • @formation-video
      @formation-video  4 ปีที่แล้ว +1

      Bon courage dans tes études 👍
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @le_cartel_0xFF
    @le_cartel_0xFF 5 ปีที่แล้ว +2

    Merci bcp, c'est très clair ce que vous expliquez.

    • @formation-video
      @formation-video  5 ปีที่แล้ว +1

      De rien =)
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

  • @kalarlapastos4824
    @kalarlapastos4824 7 ปีที่แล้ว +3

    y'on a ils ont vraiment ce qu'ils veulent pour la rentrée merci !

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Héhé, ça remontera le moral de certains :D !

  • @rabahgag
    @rabahgag 10 หลายเดือนก่อน

    Je te remercie...bravo, tu codes et tu explique en parallèle.😊
    Juste au niveau des fonctions push, à l'intérieur de la deuxième condition 'if', avant d'arrêter le programme il faut libérer la mémoire que t'as alloué pour 'éléments' .

    • @formation-video
      @formation-video  10 หลายเดือนก่อน

      Cela est volontaire, dans la mesure où le programme est quitté à ce moment-là et que le système fera le nécessaire pour libérer la mémoire.
      Une fuite de mémoire est problématique quand le programme est toujours en cours d'exécution, mais ne l'est pas lorsque le programme est interrompu, du moins sur les systèmes d'exploitation que nous utilisons. 👍

  • @sylvaing4866
    @sylvaing4866 7 ปีที่แล้ว +7

    [Bug] sur le free() dans les pop: il me semble que quand il reste un seul element tu fais free (li) ce qui libere la memoire de dlist mais pas du dernier element dlistnode lui meme (il manque un free (li->begin) ou free (li->back)).

    • @formation-video
      @formation-video  7 ปีที่แล้ว +1

      Ah en effet, un élément a été oublié dans le lot, merci :)

  • @amadoucherifthiero2284
    @amadoucherifthiero2284 3 ปีที่แล้ว

    Vraiment merci beaucoup pour ce beau travail !

    • @formation-video
      @formation-video  3 ปีที่แล้ว +1

      De rien, à bientôt et bon courage 👋

  • @nozanimos2685
    @nozanimos2685 2 ปีที่แล้ว

    Salut Jason, merci pour ce cours très instructif. Vu que je reproduis le cours sur ordi en même temps que tes explications je suis, cependant je commence à avoir des bulles de savon dans le cerveau lol... pop !

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonne continuation et ne lâche rien ! ✌

  • @elhadjihadysarr2932
    @elhadjihadysarr2932 6 ปีที่แล้ว +1

    pour le module de l'ajout en fin est ce qu'on est obligé d'allouer la liste passée en parametre sur le module ??? je ne l'avais pas fait mais j'arrivais pas à ajouter plus d' un élément !!!

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Regarde bien mon code et tu auras quelque chose qui fonctionne

  • @kevinlegallo8165
    @kevinlegallo8165 6 ปีที่แล้ว +1

    Salut, merci pour tes videos qui me sont d'une grande aide.
    Je ne comprends pas la liberation de la memoire dans ton pop_back_dlist à la minute 25'30. Lorsque tu "free" (li), tu enleves li et les pointeurs vers une dlist cell, mais ça ne supprime pas la cellule en tant que telle, mais juste le li et ses pointeurs. Ne faudrait-il pas supprimer la cellule en premier puis la dlist(li) ? car sinon la cellule va rester perdue en mémoire sans aucun pointeur sur elle. merci de m'éclairer

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Oui, il y avait un oubli dans la vidéo que j'avais indiqué dans les commentaires ;)

    • @kevinlegallo8165
      @kevinlegallo8165 6 ปีที่แล้ว +1

      FormationVidéo un gros merci !

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Avec plaisir :)

  • @tahakherraf28
    @tahakherraf28 5 ปีที่แล้ว

    min 27:41 prq on doit donner un valeur NULL pour temp->bck et next si apres on va faire un free sur temp tt entier ?

    • @formation-video
      @formation-video  5 ปีที่แล้ว +1

      Si tu as bien écouté les explications de la vidéo, le free() ne libère que l'élément temporaire, mais pas ce à quoi il est rattaché. Il faut donc libérer ce sur quoi pointent les pointeurs, et ensuite la donnée elle-même 😉
      +---------------------------------------------------------------------------------------------------------------------------------------------+
      |- COUCOU, TU VEUX :
      |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
      |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
      |--- T'abonner à mon autre chaîne TH-cam ? th-cam.com/users/jasonchampagne
      |--- Me follow sur Twitter ? twitter.com/jachampagne8
      |--- Liker la page Facebook ? facebook.com/jachampagne8
      |--- Me follow sur Insta ? instagram.com/jachampagne8
      |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
      +---------------------------------------------------------------------------------------------------------------------------------------------+

  • @Pikatsu00945
    @Pikatsu00945 4 หลายเดือนก่อน

    Bonjour et merci pour la vidéo. J'ai un petit soucis avec les fonction de suppression lorsque la pile ne contient qu'un seul élément, pourquoi on ne libère pas la mémoire du premier ou du dernier élément mais juste celui de la liste elle même alors que lors de l'ajout d'un élément on allouais de la mémoire et on attribuait cette adresse au premier ou au dernier élément selon la façon dont a fait notre ajout.

    • @formation-video
      @formation-video  4 หลายเดือนก่อน

      Bonjour, tu parles de pile mais il s'agit de la vidéo sur les listes doublement chaînées sur laquelle tu postes. Ta question concerne donc quelle structure précisément ?

    • @Pikatsu00945
      @Pikatsu00945 4 หลายเดือนก่อน

      Désolé je parle des listes doublement chaînées.

    • @formation-video
      @formation-video  4 หลายเดือนก่อน

      OK, donc s'il ne reste qu'un élément à la liste, le pointeur se trouve sur ce dernier. Il suffit donc de libérer l'élément en libérant la liste elle-même.

    • @Pikatsu00945
      @Pikatsu00945 4 หลายเดือนก่อน

      @@formation-video d'accord

  • @bishop6903
    @bishop6903 2 ปีที่แล้ว

    Salut jason,
    J'aimerai savoir si cette syntaxe marche pour la lecture de la liste :
    for(DListNode* temp = li->begin;temp != NULL; temp->next)
    printf("%d",temp->value);
    Merci :)

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonjour, oui, même si ça peut donner un code moins lisible et pas forcément plus évident à corriger en cas de bugs

  • @santino4294
    @santino4294 5 ปีที่แล้ว +1

    Bonsoir je suis ta formation j'ai un petit soucis "Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)" qui apparait en compilant encore merci pour ta formation

    • @formation-video
      @formation-video  5 ปีที่แล้ว +1

      Bonsoir, regarde que tu n'as pas d'erreur ou faute de frappe dans ton code. Tu dois faire usage d'une ressource qui n'a pas été initialisée et peut entraîner cette erreur par exemple.
      +---------------------------------------------------------------------------------------------------------------------------------------------+
      |- Jason CHAMPAGNE - jasonchampagne.fr
      +---------------------------------------------------------------------------------------------------------------------------------------------+
      |- COUCOU, TU VEUX :
      |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
      |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
      |--- T'abonner à mon autre chaîne TH-cam ? th-cam.com/users/jasonchampagne
      |--- Me follow sur Twitter ? twitter.com/jachampagne8
      |--- Liker la page Facebook ? facebook.com/jachampagne8
      |--- Me follow sur Insta ? instagram.com/jachampagne8
      |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
      +---------------------------------------------------------------------------------------------------------------------------------------------+

  • @roodveltmonfiston8345
    @roodveltmonfiston8345 2 ปีที่แล้ว

    Thank you, Thank you so much brother!!!

  • @pierremichiels9436
    @pierremichiels9436 7 ปีที่แล้ว +1

    Salut, j'aimerais savoir comment paramètrer ma commande gcc pour mettre ces options (-std=c11, -pedantic et -Werror=vla) de manière définitive dans ma commande gcc sous windows. J'ai envie d'incorporer ces options une bonne fois pour tte de manière à ce que je n'ai pas a répéter ces options a chaque appel de la commande gcc

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Tu peux te créer un fichier Batch à l'endroit de ton projet, et y mettre la commande que tu veux, exemple : pastebin.com/YVMEyDYz

    • @pierremichiels9436
      @pierremichiels9436 7 ปีที่แล้ว +1

      Je crée un fichier .bat ayant comme contenu ce que tu m'as donné via pastebin? Si c'est le cas, dans cmd j'ai qu'a faire "gcc *.c" et le fichier .bat sera chargé ?

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Non, tu n'auras plus qu'à double-cliquer sur le fichier .bat pour tout compiler.
      Dans le fichier BAT, tu peux aussi changer la commande de compilation comme tu le souhaites

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Exemple de BAT qui compile tous les fichiers ".c" et exécute le "prog.exe" obtenu, et mets en pause le terminal : pastebin.com/DBSf6U1C

  • @wismtree
    @wismtree 5 ปีที่แล้ว +2

    Coucou, très pratique tes vidéos :) Pourrais-tu me confirmer que dans ton écriture de push_back_dlist (vers les 18:49) l'accolade du if (li == NULL) devrait se fermer avant de changer les champs (li->length = 0; ...). Car si je comprends bien, là ils sont à la suite d'un arrêt du programme pour problème d'allocation de mémoire, donc ne servent à rien ^_^. Merci

    • @formation-video
      @formation-video  5 ปีที่แล้ว +2

      Ah oui en effet, merci d'avoir signalé cette coquille, l'accolade doit bien arriver avec le exit() 🙂
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

  • @nikirehinonseziberenger4875
    @nikirehinonseziberenger4875 7 ปีที่แล้ว +1

    salut j'ai encore un soucis avec mon compilateur malgré que le programme est correcte j'arrive toujours pas a compiler et voici ce qu'il mais comme erreure C:\Users\beren>cd C:\Users\beren\Desktop\prog
    C:\Users\beren\Desktop\prog>gcc main.c -o hello
    main.c: In function 'main':
    main.c:7:1: error: expected ';' before '}' token
    }
    ^ or voici le hello world voyez si il ya probleme
    #include
    int main(void)
    {
    printf("bonjour tout le monde ! : )
    ");
    return 0;
    }

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Bonjour, tu as du oublié un caractère dans ton code (comme un point-virgule à la fin d'une instruction)

  • @botyjavannguessan7000
    @botyjavannguessan7000 6 ปีที่แล้ว +1

    Salut merci ce tuto.
    Mais existent-elles des listes n-èmement chaînées?
    C'est pas si l'orthographe "n-èmement" existe... mais bon voila.
    Si oui est-ce la même procédure?
    Merci pour votre compréhension.

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Non, tu as des listes à simple chaîne (où on ne peut parcourir que du début à la fin), ou doublement chaînée (parcours possible du début à la fin ET de la fin vers le début)

    • @botyjavannguessan7000
      @botyjavannguessan7000 6 ปีที่แล้ว +1

      ok merci
      suis mieux situé maintenant

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      De rien :)

    • @MindcraftMax
      @MindcraftMax 5 ปีที่แล้ว +1

      Techniquement, une liste doublement chaînée n'est rien moins que deux listes « superposées », c'est-à-dire qui contiennent les mêmes données comme éléments de liste, mais dans des ordres différents.
      Si pour une raison ou pour une autre, tu aimerais parcourir ta liste non pas seulement dans l'ordre croissant ou décroissant des indices, mais également dans un autre ordre un peu plus fantaisiste, tu pourrais rajouter un troisième pointeur "next_weird_order" et tu aurais alors une liste « triplement » chaînée.
      Comme il y a pour une liste de longueur _n_ exactement _n_ ! façons différentes d'ordonner ta liste, tu pourrais aller jusqu'à une liste _n_ !-èmement chaînée, mais ça n'a bien entendu aucun intérêt à part boucher ta mémoire de pointeurs inutiles ^^

  • @geoffrey.streetjumping
    @geoffrey.streetjumping 3 ปีที่แล้ว

    C'est un peu chiant de devoir faire ça avec malloc à chaque fois, on pourrait pas le mettre dans une fonction qui vérifie que le pointeur ne vaut pas NULL ?
    Merci pour tes vidéos, tu es génial !

    • @formation-video
      @formation-video  3 ปีที่แล้ว +1

      Tu fais comme tu veux 👍

    • @IBelieveInCode
      @IBelieveInCode ปีที่แล้ว

      C'est un petit détail. La vraie difficulté c'est de savoir ce qu'on fait en cas de manque de mémoire. La solution "on envoit un message d'erreur et on ferme le programme", n'est généralement pas acceptable. C'est pourtant ce que font la plupart des développeurs...

  • @kikisimba8053
    @kikisimba8053 4 ปีที่แล้ว

    Bonjour,
    Et si je souhaite utiliser des nombres et des chaînes de caractères, dois-je créer 2 fois la même bibliothèque avec les mêmes structures mais des types différents ?
    Je trouverai ça pas du tout optimiser.

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      Oui, il te faudra définir une Liste d'entiers, et une Liste de chaînes. Pour faire plus optimisé, on peut faire une Liste générique (void*), mais ce n'est pas forcément le plus idéal avec un langage comme le C 😉
      +◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

    • @kikisimba8053
      @kikisimba8053 4 ปีที่แล้ว

      Merci beaucoup, autres questions, - si je veux récupérer un élément de la liste (entre la première et la dernière), dois-je obligatoirement créer une fonction avec une boucle ou y a-t-il un moyen pour simple (encore plus rapide) ?
      Si je veux remplacer une des valeurs de la liste par une autre, dois-je créer aussi une fonction avec des boucles pour remplacer l'élément ? Merci

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      Oui, si tu veux ajouter d'autres fonctionnalités à ta Liste, il faudra évidemment les implémenter (coder)
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @ahmetsy1549
    @ahmetsy1549 4 ปีที่แล้ว

    Merci ça aide beaucoup pour comprendre les listes

  • @alfredmatheus8907
    @alfredmatheus8907 2 ปีที่แล้ว

    Bonjour, pourquoi doit on faire une allocation dynamique de mémoire quand on ajoute un élément à une dlist vide alors que ca n'était pas nécessaire dans les autres structures de données? Merci beaucoup pour tes vidéos elles sont très instructives :) Bonne journée

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonjour, comment ça pas nécessaire dans les autres structures ? Car si justement, ton ordinateur ne sait absolument pas combien un StackElement, ou ListElement ou tout autre chose prend d'espace en mémoire. On a donc toujours alloué ce nouvel espace lors de l'insertion dans une structure

  • @malatini_ytb
    @malatini_ytb 3 ปีที่แล้ว

    Hello Jason, sur la fonction pop_back_dlist, je ne comprends pas pourquoi le pointeur temp est free alors qu il n est pas alloqué ?

    • @formation-video
      @formation-video  3 ปีที่แล้ว +1

      Parce qu'on lui copie la donnée pointée, celle que l'on retirer de notre liste, qui a été allouée plus tôt dans le programme. C'est ça qui nous permet de retirer notre élément et le libérer de la mémoire 🙂

  • @Nico14801
    @Nico14801 7 หลายเดือนก่อน

    Cool depuis que je compile avec le gcc du dossier mingw64 je peux suivre ces cours par contre je sais pas ce qu'il se passe avec CodeBlocks mais je n'arrive pas à travailler normalement avec.
    Dois-je mettre les fichiers du dossier mingw64 dans les dossiers du programme ? J'ai un peu peur d'empirer les choses...

    • @formation-video
      @formation-video  7 หลายเดือนก่อน

      C'est soit l'un soit l'autre :
      - soit tu utilises Code::blocks, qui est un environnement avec tout d'intégré (y compris un compilateur)
      - soit tu utilises chaque outil à part (éditeur de code, compilateur)

    • @Nico14801
      @Nico14801 7 หลายเดือนก่อน

      @@formation-video ah je pensais qu'il était possible de mettre les bibliothèques à jour sans le programme, Ok je me sers de Codeblocks comme éditeur de source et du compilateur du dossier mingw64.
      Pour l'instant j'ai pas trouvé de meilleur éditeur de source C que Codeblocks, bien que son comportement laisse à désirer (freeze et blocage incompréhensible). Ça fonctionne mais c'est pas parfait.

    • @formation-video
      @formation-video  6 หลายเดือนก่อน

      Si tu veux un éditeur à utiliser avec MinGW, il y a VS Code : th-cam.com/video/eQUsUq_2AQU/w-d-xo.html
      Sinon, pour un environnement tout-en-un, il y a Visual Studio Community : visualstudio.microsoft.com/fr/vs/community

  • @guillaumev.5924
    @guillaumev.5924 2 ปีที่แล้ว

    Hello, je ne comprends pas pourquoi ta déclaration Dlist mylist = new_dlist(); fonctionne, chez moi je suis obligé de faire struct Dlist* mylist = new_dlist(); ou de déclarer le struct DList différemment...

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonjour, cela fonctionne car un alias (*DList) a été défini pour la structure (avec le typedef)

    • @guillaumev.5924
      @guillaumev.5924 2 ปีที่แล้ว

      @@formation-video Merci, en fait j'ai bien capté, mais j'avais dû mal écrire un truc, du coup ça fonctionnait pas, en le réécrivant ça a finit par fonctionner. Du coup, pensant avoir fait la même chose je pigeais pas pourquoi ça fonctionnait différemment xD Merci pour ta réponse ;)

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      👍

  • @KaKaShUruKioRa
    @KaKaShUruKioRa 4 ปีที่แล้ว

    Je me posais une question par rapport à ces Listes Bidirectionnelles :
    Imaginons que la liste est vraiment grosses, y a plein de truc dedans...
    On peut demander à faire deux thread simultanée pour effacer une moitié par le front,(begin) et une par le back(end) [Je me rappelle la partie évoqué sur ça dans Python]
    Est-ce que c'est faisable (probablement plusieurs façon de le faire)
    J'pensais :
    1. En se servant de dlist_lenght(Dlist li) pour libérer la mémoire d'un nombre précis d'élément... [En divisant par deux, et vérifiant par modulo 2 un reste éventuel]
    2. En faisant une boucle jusqu'à tomber sur null (Mais celui là pourrait poser problème, je pense ?)
    3. Une autre façon à laquelle j'n'ai pas pensé ?
    etc... ?
    Et du coup, est-ce que ça rendrait la chose vraiment efficace, plus rapide...
    Bon du coup, c'est un peu avancé par rapport au cours de cette vidéo, mais ça m'intriguait ^^
    Après je sais même pas si c'est faisable "facilement" en C.
    PS : Merci pour les rappels de notion de Dév C/C++ Python et autres infos en programmation, ça m'a bien remis le pied à l'étrier, appris des nouvelles façons (+moderne) de faire par rapport aux cours sur le site du zéro (OpenClassRoom)
    Les cours version Vidéo Formations, c'est vraiment pas désagréable du tout. J'avais peur que ça effleure trop part rapport à l'écris... mais non ^^
    Bravo pour ton Travail, et Merci encore.

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      Si tu sais employer des threads en C, tu pourrais tester de ton côté et comparer les temps d'exécution afin de voir si c'est le traitement mono-threadé ou multi-threadé qui s'avère être le plus efficace dans ce cas 😉
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @xoxofunny6659
    @xoxofunny6659 3 ปีที่แล้ว

    j'ai une question a propos les listes chainee imbriquee
    est ce que ca c'est juste j pour les infirmiers je veux une liste des infirmier dans structure service
    //Declaration structure infirmier
    struct infirmier {
    char identifiantinf[50];
    char nominf[12];
    char prenominf[12];
    char adresseinf[12];
    float salaireinf;
    char typeconta[20];
    date datepreaff;
    struct infirmier *suivant;

    } ;
    typedef struct infirmier infirmier;
    //Declaration des structures Service
    //créer et initialiser une liste de services
    struct service{
    char code[10];
    char nomservi[12];
    char secretaire[12];
    medecin chef;
    date dateservice;

    struct service*suivant;
    infirmier*list;

    } ;
    typedef struct service serv;

    • @formation-video
      @formation-video  3 ปีที่แล้ว +1

      En gros, au lieu que chaque élément de ta Liste contienne un simple entier, il contiendra un pointeur vers une structure Infirmier 👍

    • @xoxofunny6659
      @xoxofunny6659 3 ปีที่แล้ว

      @@formation-video Merciii

  • @Pikatsu00945
    @Pikatsu00945 4 หลายเดือนก่อน

    Si c'est possible, pourriez-vous faire une vidéo sur les tables de hashage ?

  • @serikmohamed3735
    @serikmohamed3735 6 ปีที่แล้ว +1

    bonjour je me demande pourquoi vs avez fait *DList au lieu de DList

    • @serikmohamed3735
      @serikmohamed3735 6 ปีที่แล้ว +1

      chez moi quand je compile le programme ça me donne erreur Merci de répondre

    • @serikmohamed3735
      @serikmohamed3735 6 ปีที่แล้ว +1

      FormationVidéo merci de me répondre svp

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Bonjour, parce pour cette vidéo, je ne masque pas le pointeur, histoire de montrer une autre manière de faire que dans les structures précédentes. Enfin, si ton code ne fonctionne pas, compare avec le mien et tu sauras d'où vient ton erreur.
      Tu as même une archive disponible de la structure dans la description de la vidéo.

    • @zouz5466
      @zouz5466 6 ปีที่แล้ว +1

      Finalement on retrouve le problème que j'avais énoncé ;)

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Bien sûr, et c'est normal que les gens puissent comprendre ce qu'ils font

  • @fde45opi26
    @fde45opi26 ปีที่แล้ว

    Bonjour, je me pose une question:
    Ne pouvons nous pas écrire:
    mylist= push_front_dlist(mylist, 15);

    push_front_dlist(mylist, 16);

    push_front_dlist(mylist, 113);
    au lieu de :
    mylist= push_front_dlist(mylist, 15);

    *mylist* =push_front_dlist(mylist, 16);

    *mylist* =push_front_dlist(mylist, 113);

    • @formation-video
      @formation-video  ปีที่แล้ว

      Bonjour, pourquoi ne pas tester et voir le résultat à l'exécution ? 😉

    • @fde45opi26
      @fde45opi26 ปีที่แล้ว

      @@formation-video eh bien cela fonctionne, merci de votre réponse.

  • @iliassalilou9879
    @iliassalilou9879 4 ปีที่แล้ว

    qu'ils sont les point forts ou faibles pour une liste doublement chainne et simplement chainnee(une comparaison s'il vous plait
    )

    • @formation-video
      @formation-video  4 ปีที่แล้ว +1

      C'est assez simple : les points forts sont les raisons pour laquelle ce genre de structure de données a été conçue, et les inconvénients, ce pourquoi elle n'a pas été faite. En gros : une Liste est bien parce que c'est une Liste, mais un mauvais choix de structure si on veut une File (ou encore une Pile)
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @wartanikhalil1726
    @wartanikhalil1726 4 ปีที่แล้ว

    dans la fonction dliste_first quand t'a mis si la liste est vide exit 1 c la meme chose que return 1???

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      C'est différent. L'instruction "return" permet de quitter la fonction (en retournat la valeur 1), là où exit est une fonction pour quitter complètement le programme
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @abgoudjeakouaneoumar9339
    @abgoudjeakouaneoumar9339 2 ปีที่แล้ว

    Salut ! Est ce que je peux avoir une vidéo sur la liste doublement chaînée je n arrive pas à bien maîtriser comment initialiser une liste doublement chaînée et aussi les autres fonctions insérer début, insérer fin , compter la liste, et supprimer début et fin et vider la liste.

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Bonjour, bizarre que tu demandes une vidéo sur les listes doublement chaînées, alors que tu postes ton message justement sur cette vidéo

    • @abgoudjeakouaneoumar9339
      @abgoudjeakouaneoumar9339 2 ปีที่แล้ว

      @@formation-video désolé ! Je n ai pas suivi la vidéo jusqu'à la fin. Vraiment je m excuse. Et au faite la fonction initialiser liste n existe pas dans la vidéo est ce que vous pouvez m expliquez un peu ?

    • @formation-video
      @formation-video  2 ปีที่แล้ว

      Initialiser une liste, c'est en créer une nouvelle. Donc, dans la vidéo, il s'agit de la fonction new_dlist()

  • @jaurestchato4993
    @jaurestchato4993 4 ปีที่แล้ว

    Bonsoir Jason 🤠 !
    Déjà un grand merci pour la vidéo et en général pour tes cours d'excellentes qualités ainsi que pour ta pédagogie ! Tu es un super Pro d(^_^)b.
    Voilà, après avoir consommé et bien digéré cette séance de cours, j'ai essayé d’implémenter ma structure de liste doublement chaînée sous une forme autre que celle présentée dans la vidéo; tout semble marcher nickel sauf que j'ai un soucis avec mes fonctions de suppression d’éléments (au début et à la fin) lorsque ma liste ne contient qu'un seul élément, à l’exécution j'obtiens une erreur de segmentation !
    J'ai pourtant la même condition que la tienne pour ce cas de figure, ça m'aiderait beaucoup si tu pouvais trouver un petit moment pour y jeter un coup d’œil, j'ai déjà tourné et retourné mon code dans tous les sens, mais j'ai pas trouvé où se situe le soucis. Voici mes différents fichiers sources :
    pastebin.com/M0fTKJHa -> main.c
    pastebin.com/mbUdGX5G -> dlinkedlist.c
    pastebin.com/rzn4VWCG -> dlinkedlist.h
    Captures d'écran de mon terminal :
    ibb.co/GTLLXSK
    ibb.co/mNsfY5w
    Merci d'avance et passe une excellente fin de journée.

  • @djibrilkonteye5509
    @djibrilkonteye5509 ปีที่แล้ว

    slt vraiement je suis fierev de vous , vos aussi interessant
    mais j'aimerais vous allez faire des details sur les biblioteque : leur role , utilite et utilisation.

    • @formation-video
      @formation-video  ปีที่แล้ว

      Les vidéos de la chaîne sont là pour ça : github.com/jasonchampagne/FormationVideo

  • @nicolasmanns7249
    @nicolasmanns7249 7 หลายเดือนก่อน

    Salut, au lieu de me donner les éléments de la liste et sa longueur les fonctions d'affichage me renvoient des chiffres sans queue ni tête type [12070848] [1998638048]
    Taille de la DList : 12061793
    Je ne trouve pas ou est l'erreur 🤔 Une idée ?

    • @formation-video
      @formation-video  7 หลายเดือนก่อน

      Visiblement, ce sont des valeurs en dehors de ta liste. Et non, je ne peux pas trouver d'erreur sans code sous les yeux (ma boucle de cristal est en panne 😏)

  • @asma-ks1gr
    @asma-ks1gr 4 ปีที่แล้ว

    svp ou est ce que vous avez montionner le "li" ??

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      À quel endroit de la vidéo en particulier ?
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @saber.07
    @saber.07 3 ปีที่แล้ว

    je rencontre des problèmes d’allocations au niveau des fonctions pop !!!
    faut-il ajouter un free ?
    si oui ou le placer svp ?

    • @formation-video
      @formation-video  3 ปีที่แล้ว

      Regarde ce que tu as écrit au niveau de ton code, il doit y avoir une erreur quelque part

  • @cozycorner988
    @cozycorner988 5 ปีที่แล้ว

    bon jour s'il vous plait je veux trie une liste par fusion recursivement j'ai fait une procedure qui coupe une liste en deux , une procedure qui fusionner deux liste et les tri en meme temps mais dans la procedure de tri-fusion-recursive je veux trie une liste les cas d'arret ( la liste est vide , ne contien q'un seul element ) j'ai fait ça
    void tri_fusion(liste l){
    liste lg=NULL,ld=NULL;
    if(l!=NULL &&l->suiv!=NULL){
    division(l,&lg,&ld);
    tri_fusion(lg);
    tri_fusion(ld);
    fusion(&l,&lg,&ld);}}
    mais j'arrive jamais au solution est ce que vous pouvez m'aider s'il vous plait

    • @formation-video
      @formation-video  5 ปีที่แล้ว

      Bonjour. Quand un cas d'arrêt est rencontré dans ta fonction, tu peux tout simplement en sortir avec un return, pour s'assurer que la suite n'est pas exécutée.
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

    • @cozycorner988
      @cozycorner988 5 ปีที่แล้ว

      @@formation-video mais c'est une procédure?

    • @cozycorner988
      @cozycorner988 5 ปีที่แล้ว

      @@formation-video est ce que l'ordre des instructions. Est vrai? Est ce que le concept est vrai?

    • @formation-video
      @formation-video  5 ปีที่แล้ว

      Tel qu'elle est écrite, ta fonction tri_fusion ne peut jamais s'arrêter, car à aucun moment on en sort (avec un return). Par exemple, tester si la Liste contient 1 seul élément ou est vide, et si c'est le cas, faire un return.
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

  • @AYSKO
    @AYSKO 7 ปีที่แล้ว +3

    A quand utiliser les sockts et la création de Serveur/Client en TCP pour ouvrir un shell sur la victime

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      La partie réseau, c'est pour après la 2D =)

  • @thecrazzxz3383
    @thecrazzxz3383 4 ปีที่แล้ว +1

    28:10 Oula j'ai sursauté mdr

    • @formation-video
      @formation-video  4 ปีที่แล้ว

      Forcément, durant la vidéo, je ne m'y attendais pas non plus 😂
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ MERCI DE TON SOUTIEN ! 🔻
      ◾ Pas encore abonné(e) ? N'hésite pas à le faire 💙
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8
      ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

  • @rayenbouzaabia7798
    @rayenbouzaabia7798 3 ปีที่แล้ว

    petit problème dans les fonction pop_back_dlist () et pop_front_dlist () tanque il existe un seul élément il faut la liber ..
    free(li->end)par exemple ..avant la libération de li sinon élément ne sera pas libéré

  • @anfelmebarkia8641
    @anfelmebarkia8641 6 ปีที่แล้ว

    J'arrive pas a telecharger le fichier

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Bonjour, le voici : mega.nz/#!cIFkFIbS!RQZ9U2svZUyImTS4QkpSmLYq7t7YYTa-5hnLPRftl78
      +---------------------------------------------------------------------------------------------------------------------------------------------+
      |- Jason CHAMPAGNE - jasonchampagne.fr
      +---------------------------------------------------------------------------------------------------------------------------------------------+
      |- COUCOU, TU VEUX :
      |--- Nous rejoindre sur Discord ? discord.me/jasonchampagne
      |--- Me voir en direct sur Twitch ? www.twitch.tv/jachampagne
      |--- T'abonner à mon autre chaîne TH-cam ? th-cam.com/users/jasonchampagne
      |--- Me follow sur Twitter ? twitter.com/jachampagne8
      |--- Liker la page Facebook ? facebook.com/jachampagne8
      |--- Me follow sur Insta ? instagram.com/jachampagne8
      |--- M'ajouter sur Snapchat ? www.snapchat.com/add/jachampagne8
      +---------------------------------------------------------------------------------------------------------------------------------------------+

  • @nikirehinonseziberenger4875
    @nikirehinonseziberenger4875 7 ปีที่แล้ว +1

    j'ai plusieurs fois vérifié avant de vous envoyez donc regarder et voyez d'ou vient mon erreur

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Peux-tu me faire parvenir ton code via pastebin.com/ ? Merci :)

  • @papendao5819
    @papendao5819 2 ปีที่แล้ว

    Bae j'ai un probleme où pourrais-je vous poser des questions

  • @cozycorner988
    @cozycorner988 5 ปีที่แล้ว

    est ce que les listes doublement chaînées sont les memes listes bidirectionelle

    • @formation-video
      @formation-video  5 ปีที่แล้ว

      Oui, en gros c'est une Liste que tu peux parcourir du début à la fin, et inversement.
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

  • @bekhouchemaamar1590
    @bekhouchemaamar1590 4 ปีที่แล้ว

    Merci

  • @joeldumortier8043
    @joeldumortier8043 3 ปีที่แล้ว

    Bonjour, encore une fois, merci pour ton travail et merci pour tes videos , ca m'aide vachement à comprendre. J'ai lu les commentaires et apparement, j'ai vu que la questions a été posée, voir avait fait polémique, alors je ne veux pas en rajouter une couche mais je n'ai pas compris la réponse, et je pense que je ne suis pas le seul à galérer sur ce point. Pourrais-tu s'il te plait expliquer plus en détails la notion de "masquer le pointeur". En effet, je ne comprends pas bien pourquoi: typedef struct DlistNode{....}DlistNode / typedef struct DList{...}*Dlist.
    Pourquoi dans un cas tu mets * et dans l'autre non, parfois même dans les vidéos précédentes tu utilises les deux : typedef struct ListElement{..}ListElement,*List.
    Je bute vraiment si cette notion de masquage de pointeur.
    Je te remercie d'avance pour ton aide.
    Bonne continuation

    • @formation-video
      @formation-video  3 ปีที่แล้ว

      Bonjour, tout vient du typedef, et si tu en as compris son utilisation, le sais-tu déjà ?

    • @joeldumortier8043
      @joeldumortier8043 3 ปีที่แล้ว

      @@formation-video Bonsoir Jason. Je n'ai pas compris ce que tu veux dire

    • @formation-video
      @formation-video  3 ปีที่แล้ว

      Sais-tu à quoi sert un typedef ?

    • @joeldumortier8043
      @joeldumortier8043 3 ปีที่แล้ว

      @@formation-video Oui, ça sert à créer ses propres types de variables, cependant ce que j'ai du mal à comprendre c'est quand tu parles de "masquer" le pointeur....

    • @formation-video
      @formation-video  3 ปีที่แล้ว

      Alors voilà le problème : typedef ne permet pas de définir un type de donnée (c'est "struct" qui sert à cela). Le typedef sert en revanche à créer un alias pour un type de donnée. Par exemple : tu veux que le type "int" puisse s'appeler "NOMBRE", dans ce cas, tu auras ce code tout à fait fonctionnel : pastebin.com/UsTgVfCW
      Maintenant que tu as compris cela, cette notation doit alors être plus compréhensive : le type "struct DListNode" a pour alias "DListNode", et le type "struct DList" a pour alias "*DList"

  • @cozycorner988
    @cozycorner988 5 ปีที่แล้ว

    c'est quoi le maillon de liste

    • @formation-video
      @formation-video  5 ปีที่แล้ว

      La partie qui va permettre de stocker un élément de la Liste. Une Liste de 5 éléments aura donc 5 maillons
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      💙 Si ce n'est pas encore fait, n'hésite pas à t'abonner à la chaîne
      ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
      ◾ Soutenir FormationVidéo : bit.ly/2L0xNXA
      ◾ Site web : jasonchampagne.fr
      ◾ Discord : discord.me/jasonchampagne
      ◾ Twitch : www.twitch.tv/jachampagne
      ◾ TH-cam (personnel) : th-cam.com/users/jasonchampagne
      ◾ Twitter : twitter.com/jachampagne8
      ◾ Facebook : facebook.com/jachampagne8
      ◾ Instagram : instagram.com/jachampagne8
      ◾ Snapchat : www.snapchat.com/add/jachampagne8

  • @purplemyself6792
    @purplemyself6792 4 ปีที่แล้ว

    Mind blown TT

  • @anouarlamghari5417
    @anouarlamghari5417 4 ปีที่แล้ว

    merçi infiniment,pour ce travail,شكرا (merçi en arabe hhhhhhh).

  • @thebanane78
    @thebanane78 7 ปีที่แล้ว +6

    Epitech représente

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Yeah o/ !

    • @mathieupinaud5434
      @mathieupinaud5434 7 ปีที่แล้ว +1

      pushswap en force en didi de marseille

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Coucou o/

    • @thebanane78
      @thebanane78 7 ปีที่แล้ว +1

      on est tous en galère sur le pushswap alors nous voila sur cette vidéo de doubles listes chainées, bon taf tu m'as bien aidé Naoki ! Et ca fait plaisir de savoir que y a pas qu'a paris ou on galère

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Bien content de pouvoir aider des étudiants, n'hésitez pas à partager la chaîne à tous vos collègues :)

  • @fadi63
    @fadi63 7 ปีที่แล้ว +1

    Bonjour,
    Je profite de cette dernière vidéo pour pousser un petit coup de gueule.
    Désolée Jason mais je pense que c'est nécessaire.
    Je suis un peu en colère de voir que tous les tipeurs (sauf un) sont partis. Après tout le travail que tu fournis (bénévolement) c'était la moindre des choses de te filer un petit coup de main. Les gens ont l'air d'oublier que tout ça (TH-cam, tipeee etc) c'est tes seuls revenus et je trouve ça bien triste. Quand je vois sur des autres chaines des youtubers qui gagnent des sommes folles en racontant des conneries c'est affligeant de se donner du mal pour rien. J'espère que les gens vous se remettre un peu question car même 5 euros par mois, pour vous ce n'est peut-être pas grand chose mais pour lui c'est beaucoup. Pensez-y. Merci pour lui.
    Bonne journée Jason et encore félicitations pour ton travail.

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Bonjour, je suis au courant puisque lesdites personnes m'avaient déjà prévenues à la base qu'elles ne pourraient pas donner continuellement, d'autres pourront donner plus tard et certains ont stoppé sur Tipeee et passent plutôt par Paypal pour éviter d'autres frais supplémentaires retirés de ce qu'ils donnent.
      Internet fonctionne comme ça : des gens qui le méritent ne sont pas forcément "payés" à la valeur de leur travail et d'autres qui font du contenu de qualité médiocre touchent quelques milliers d'euros. Après, il ne faut pas oublier que ma chaîne est toute récente, et que même les chaînes PRANK/dégustation et cie ont du se développer sur 4-5 ans avant d'espérer rentabiliser leur travail.
      Dans mon cas, je me suis présenté sur TH-cam pour former les gens, et je n'ai rien imposé donc il est normal que je ne puisse pas (et ne veux pas) imposer une rémunération contre mon travail. Après, l'évolution de la chaîne se fera en fonction de la motivation des gens, des nombreux contacts professionnels que je reçois en ce moment (Udemy pour ne citer qu'eux), et il faudra bien parfois faire des choix pour effectivement rentabiliser mon travail si je veux espérer le continuer dans le bon sens.
      Je m'adresse du coup à tous les internautes : même s'il ne vous est pas possible de donner (surtout que vous êtes quand même beaucoup de mineurs/étudiants/étrangers), un simple partage des vidéos, likes et bouche-à-oreille est suffisant pour faire connaître la chaîne, augmenter son nombre d'abonnés et lui donner du poids face aux géants actuels de TH-cam :D

    • @sundaco9906
      @sundaco9906 5 ปีที่แล้ว

      @@formation-video Pourquoi ne travaille tu pas en entreprise ? Tu ma l'aie vraiment chaud dans plusieurs langage l'amis!

  • @elhadjihadysarr2932
    @elhadjihadysarr2932 6 ปีที่แล้ว +1

    MAINTENANT J'arrive pas à afficher la liste

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      Tu as vu faire des erreurs dans ton code, le mien dans la vidéo fonctionne

    • @elhadjihadysarr2932
      @elhadjihadysarr2932 6 ปีที่แล้ว +1

      ok ça marche maintenant je devais utiliser la boucle do ...while au lieu de while

    • @formation-video
      @formation-video  6 ปีที่แล้ว

      OK impeccable :)

  • @purplemyself6792
    @purplemyself6792 4 ปีที่แล้ว

    pourquoi tu prend la liste doublement chaînée comme un pointeur vers une structure de liste et pas la dernière elle-même ?? Est-ce-que c'est juste de définir la liste comme suit :
    typedef struct DList -------> la structure de liste
    {
    int length = 0;
    DListNode* first;
    DListNode* last;
    }DList;
    DList L; ----> définition d'une liste doublement chaînée
    Bonne continuation ^^

    • @formation-video
      @formation-video  4 ปีที่แล้ว +1

      Oui, comme je l'ai indiqué, on peut implémenter les structures de données de plein de manières différentes, alors n'hésite pas à faire ta propre structure 👍

  • @eudesml5637
    @eudesml5637 3 ปีที่แล้ว

    rien compris..

    • @formation-video
      @formation-video  3 ปีที่แล้ว

      Qu'est-ce que tu n'as pas compris exactement ?

  • @KamiS17x
    @KamiS17x หลายเดือนก่อน

    J'ai suivi sais ordinateur : j'ai mal à la tête

    • @formation-video
      @formation-video  หลายเดือนก่อน +1

      Il faut prendre le temps, même si tu dois la voir en plusieurs fois, prendre des notes, etc.

  • @luca4962
    @luca4962 7 ปีที่แล้ว +2

    yop

  • @zouz5466
    @zouz5466 7 ปีที่แล้ว +1

    Mon dieu ... Tu dit toi meme que les fonctions correspondent a un comportement definis dans tes video et que celui ci sert a gagner du temps mais tu dupliques ton code n'importe comment....
    Fait une fonctione qui te cree ta DLIST !!!
    Non seulement ca mais le fait d'utiliser des fonctions augmenteras la maintenabilite de ton code et par consequent sa qualite
    De plus dans quasiment toutes tes fonctions tu vas verifier Un pointeur NULL .... Pourquoi fait tu ca ?
    Premierement, c'est une perte de performance inutile, heuresement que tu n'a rien rendu sur les standart LOL
    Deuxiemement, tu ne devrais jamais avoir envie de verifier NULL dans ce genre de fonction, car elle induit par son utilisation que l'utilisateur sais qu'il appelle la fonction et qu'il en assume les consequances, Si tu ne le fait pas -> Le programme Crash.
    Et c'est exactement le comportement que l'on veux, Passer des heures a debuguer car toutes nos fonctions verifient null.
    Hf pour savoir a quel moment tu as un pointeur nul sur un programme comptabilisant + de quelques centaines de lignes. -> Non maintenable.
    Alors qu'un crash sur une erreur de segmentation est plus benefique ! Il Alerte drastiquement le devellopeur que le programme ne fonctionne pas selon son bon vouloir et lui indique facilement d'ou vien l'erreur avec les debuggeur classique (Ex valgrind).
    IL n'aura ensuite qu'a retracer le chemin que parcoure son pointeur pour savoir a quel moment le bug est survenu.
    Le fait de typedef ta structure Dlist en *DLIST induit tres tres fortement en erreur.
    Comment faire comprendre a un debutant qui a du mal a savoir quand utiliser "->" ou le "." pour accedder a un membre qu'il peux utiliser un type qui a priori n'est pas un pointeur car "Oh il manque l'etoile" avec la "->" ???? Meilleur moyen pour embrouiller un esprit sur les pointeurs qui sont deja une notions assez complexe a aborder.
    De plus cela n'ameliore en rien la lisibilite de ton code .. au contraire c'est le comportemet type d'une personne qui voudrais faire de
    l'obfuscation.
    Pour moi cette video contient du bon, mais au niveau des pratiques manque cruelement de bon sens et de remises en questions sur tes connaissances deja acquise.
    Peut etre a tu appris les choses de cette maniere, mais si c'est le cas je t'invite a l'avenir a reflechir a la notion que tu souhaite presenter plus amplement avant de faire une video qui est cense faire partie d'une formation.
    Le but etant que les gens comprennent plus, plus en profondeur etc..

    • @formation-video
      @formation-video  7 ปีที่แล้ว +1

      Bonjour,
      J'apprécie toujours lire les remarques liées contenu que je publie, merci de l'avoir fait, et de manière détaillée ici.
      Tout d'abord, cette vidéo s'inscrit comme tu t'en seras douté dans un ensemble de "cours" progressifs. Le but étant de donner la possibilité à des purs débutants (qui sont très loin d'être négligeables) de s'initier
      à la programmation, ici sur un langage qui se veut assez strict dans sa grammaire. Je vais donc m'expliquer sur les points que tu as relevés :
      1. Il est clair que le code est nombre de fois dupliqué dans la fonction main(), mais ce n'est pas le point central de la vidéo. L'attention est focalisée sur l'implémentation (une possible implémentation, puisque il peut en exister plusieurs) d'une structure de données, ce qui est fait dans la fonction principale n'est évidemment pas à refaire sur un projet d'envergure. D'ailleurs, la fonction main() n'est pas faite pour accueillir autant de code si on veut faire les choses proprements. Les gens sont parfaitement au courant de cela, puisque je l'ai précisé maintes fois, mais qu'il n'est pas possible de réaliser un "vrai" projet à chaque vidéo, sans allourdir inutilement le code et augmenter justement la confusion de ceux qui apprennent.
      Je réserve les "bonnes méthodes" d'organisation d'un projet pour des tutoriels en annexe, qui eux seront axés sur l'organisation du code, sous tous les points. Mes vidéos sont déjà plutôt longues, alors j'évite si possible de trop en ajouter.
      N'oublions pas que les gens sont là pour apprendre une représentation d'une structure, pas pour la ré-utiliser aveuglément dans un véritable projet professionnel. L'optimisation n'est pas là, et comme dit maintes fois également, le code est largement optimisable et améliorable, rien que dans son implémentation.
      2. Ensuite, la vérification du pointeur NULL est simple. Arbitrairement ici, il est choisi qu'une structure vide vaut NULL. Encore une fois, c'est une représentation possible parmi tant d'autres. De ce fait, la fonction vérifiant que la DListe est vide, permet de tester simplement si la DListe est vide ou non. Il n'y a donc pas de perte de performance, il ne s'agit que d'une considiton vérifiant une constante, aucun calcul n'est fait, aucun comptage, aucun accès spécifique.
      3. Pour ton point sur l'utilisation assumée d'une fonction, je ne suis pas d'accord par contre. Le langage C impose que nous vérifions le bon fonctionnement des fonctions (leur valeur de retour par exemple). Certes, il ne s'agit pas ici de programmation système ou sur réseaux, mais le C n'a pas la même philosophie d'approche que le Python. Il me parait donc parfaitement logique, que pour une fonction devant afficher une liste par exemple, on indique un message à l'utilisateur, si cette fameuse Liste est vide, plutôt que d'amener à un simple plantage du programme.
      Dans la mesure du possible, on évite le plantage d'un programme justement, puisque quand cela arrive, et tu l'as noté avec le débogage, on trace l'origine du problème pour le résoudre. Dans mon cas, il s'agit simplement d'avertir l'utilisateur sur l'état de la Liste qu'il manipule. Prenons l'exemple dans un jeu vidéo quelconque, si tu veux acheter un article à 100 pièces d'or, si le joueur n'en a que 80, tu ne vas pas faire planter le jeu. En revanche, tu afficheras gentiment qu'il n'a pas assez d'argent.
      En conséquence, dans mes tests vérifiant la nullité de la Liste, il ne peut se produire de crash (si la Liste vaut NULL, elle est simplement vide, rien d'autre). Par contre, si le programme se coupe, cela peut arriver en cas d'échec d'allocation de mémoire, mais dans ce cas présent, un message est également affiché pour en avertir le développeur, et directement en sortie d'erreur standard ;). Il faut donc bien dissocier les erreurs de programmation, de celle d'exécution, etc.
      4. Pour le cas du typedef sur la structure, dans mes développements personnels, je ne masque jamais l'utilisation du pointeur. D'ailleurs, il y a des vidéos de la formation où je ne le fais pas. J'ai justement abordé les deux cas possible (avec et sans masquage) auprès des internautes, pour leur montrer que cela est possible, et fonctionnel. Après, ce n'est pas tellement à moi d'imposer l'utilisation de l'un ou de l'autre. De toute manière, prends 100 développeurs en C, une part sera pour le masquage, une autre contre, ça a toujours été ainsi. Comme le fameux débat sur l'indentation avec des espaces ou des tabulations, l'accolade ouvrante après le nom de la fonction ou à la prochaine ligne ? Et ainsi de suite...
      Mon objectif est de rendre les gens autonomes, pas qu'ils deviennent dépendants de moi, et qu'ils adoptent par eux-même leurs propres conventions de codage, leur propre syntaxe. Je conseille juste, je propose plusieurs solutions possibles, et chacun est libre de choisir celle qu'il souhaite :).
      Aussi, tu parles de la confusion de l'étoile avec l'utilisation de la flèche, mais de toute manière, on ne mettra jamais l'étoile en utilisant celle-ci. Les deux syntaxes sont (*pointeur).membre OU pointeur->membre, dans les normes du langage C, eux même masquent l'étoile avec l'usage de la flèche. Cela n'est donc en rien une mauvaise pratique, et chacun choisira donc une syntaxe, ou l'autre.
      Enfin, la notion de pointeur n'est justement pas compliquée : c'est la chose que j'entends se répéter très souvent, mais l'usage de pointeurs fait partie intégrante du langage, leur compréhension est absolument aisée, encore faut-il savoir convenablement l'enseigner, ce que j'ai essayé de faire dans la séance #11 (qui, vus les retours, sans prétention aucune, a l'air d'être plutôt bien reçue).
      Comprends donc par là que je présente, pour les structures de données, UNE possible implémentation de ces dernières. Il en existe des dizaines, chacune avec leurs avantages, leurs inconvénients (comme pour les Algorithmes de tri d'ailleurs). Le choix arbitraire qui s'opèrera sans doute par la suite, incombera à celui ou celle qui apprend. Je ne suis pas là pour imposer un cas, ceux qui apprennent doivent devenir autonomes.
      Il est bien à mon sens de dissocier la compétence de la pédagogie : savoir programmer est une chose, mais savoir l'enseigner en est une autre. Et bien souvent, on m'a fait remarquer que beaucoup de personnes étaient compétentes, mais manquaient cruellement de pédagogie. C'est dans ce scénario que celui qui est initié se décourage et finit par laisser tomber.
      Mon but est que chaque personne qui démarre ait la volonté et l'envie d'aller jusqu'au bout. Je t'accorde que c'est un travail délicat et compliqué, et je n'ai pas la prétention de fournir un contenu parfait, mais jusqu'à présent, je peux quand même me réjouir, d'après les retours et avis des internautes, que la méthode fonctionne plutôt bien :).
      Merci encore de ton commentaire, et à bientôt
      PS : je suis curieux de savoir dans quel(s) langages tu développes de manière générale

    • @zouz5466
      @zouz5466 7 ปีที่แล้ว +1

      bonjour, Je m'exuse du ton que j'ai pu prendre lors de mon precedent commentaire il est inexcusable.
      Quand je parle du fait de verifier un pointeur NULL je parle de maniere generale et non pas dans cette fonction precisement. Il faut effectivement faire le check mais il prend plus de sens quand il est en Amont de la fonction (donc avant son appel) car le fait de Forcer ce check entraine un cout inutile qui pourrais etre evite, Si qui utilise cette fonctione sais que le pointeur ne seras pas NULL pourquoi le verifier ?
      Ce que je veux dire par la c'est que lors de la manipulation d'une structure de donee l'allocation et les verification qui seront effectue doivent etre faite le plus tot possible.
      Comme tu le fait toi meme lorsque tu verifies les appels a Malloc.
      Auquel cas si il ont ete fait en amont, n'ont plus besoin d'etre fait en aval.
      Ensuite pour moi ton exemple parlant des pieces d'or n'est pas pertinent, On parle ici d'un pointeur NULL qu'on essaierais de dereferencer -> souvent un segfault.
      -> Lors de la phase de devellopement d'un projet, Le segfault est une Arme puissante qu'il faut savoir manier.
      Celui-ci indique clairement au dev que son programme a un comportement qu'il ne souhaite pas puisque lors de ce dereferencement le dit pointeur n'est pas cense etre NULL.
      Donc plutot que de traiter ce check comme un cas qui est cense arriver, Le traiter comme un cas n'etant pas cense arrive me semble preferable. Puisque le dev va voir l'erreur la regler et plus jamais cette erreur ne surviendra, donc par consequent ton if() deviendra inutile.
      Transposons le probleme a la libc, La fonction strlen (signature : size_t strlen(const char *str))
      Si tu regarde le code source de cette fonction tu verra qu'elle ne regarde pas si le pointeur que tu passe en parametre est NULL ou non. Simplement parce que ce n'est pas son travail. Et si elle le faisais cela n'aurais
      aucun sens.
      Comment pourrais t'on faire la difference entre le fait que notre chaine ne contiene rien ("") et un pointeur NULL ? -> Impossible.
      Et c'est le meme cas pour ta fonction qui retourne la taille de la liste.
      Le pointeur sur l'encapsulation de ta liste doit simplement toujour etre alloue. Sinon c'est de la faute du dev et non pas de la personne qui a ecrit cette fonction.
      Je me justifie de nouveau car il me semble que tu n'a pas bien compris le probleme que j'exposais.
      Ensuite pour parler de l'obfuscation, encore une fois je pense que tu n'a pas saisis totalement ce que je remontais (Me suis-je mal exprime ?)
      Quand je parle de l'utilisation il est evident que pour manipuler un pointeur sur une structure on va evidemment utiliser la fleche car c'est une feature du language et ne creer en rien de l'obfuscation.
      Ce dont je parlais etais sur la manipulation du TYPE.
      En effet si je declare un DLIST l;
      Si j'utilise ta methose je n'ai pas la moindre idee que ce type est en fait un pointeur cache.
      Si je veux utiliser ta DLIST directement et que je cree un pointeur dessus (Puisque d'apres la declaration ce n'est pas un pointeur :/)
      Je me retrouve reelement avec un DLIST **l; :/
      Ce qui est problematique ...
      Pareil pour ce qui va etre de passer le type en parametre, Je vais potentiellement penser que je vais faire une copie a chaque passage a tout bout de champ, Invivable.
      Selon moi c'est une tres mauvaise pratique que de faire cela, Tu caches la nature reele du type mis en application. Certes il faut le montrer pour que les gens qui suivent tes video l'apprenne.
      Pour moi cette pratique ne doit etre utilisee qu'a titre PERSONNEL dans du code n'etant aboslument pas destine a etre manipule par une personne tiers.
      Et pour son utilisation, probleme pour un debutant, il vois beaucoup de code ou il va voir que pointeur sur struct = ->
      Struct = .
      Mais dans ta video, si on a pas bien tout suivis (ce qui est facilement le cas pour un debutant qui ne comprendrais pas tout)
      Ben a premiere vu on se retrouve avec Struct = ->.
      Et la on se pose de serieuse questions et potentiellemtn demoralise parce que l'etudiant va penser qu'il ne comprend rien.
      Pour ce qui est de la duplication du code, je comprend ton point de vue mais ne suis pas d'accord, En quoi le fait d'avoir fait une fonction en plus aurais allonge le temps de ta video ? Le temps de mettre la declarer ? -> Moins de 30 seconde et c'est les meme 30 secondes que tu as utilise pour copy/paste ton code.
      Donc pour moi il n'y a pas de justification a avoir. C'est une erreur de ta part.
      La duplication est la cause de nombreux bugs en entreprise car celle-ci rend le code Inmaintenable et lorsque qu'on en change le comportement, on dois le changer Dans tout les endroits ou le code a ete duplique ... Pas tres pratique comme gain de temps :/
      Pour repondre a ta derniere question.
      Je fait principalement du c/c++ mais j'ai fait aussi des petites choses que j'ai moins pratiquees (java/php/c#/.NET/python/bash/lua/Django).
      Je fait moi-meme partie de la pedagogie d'une ecole (Epitech) en tant qu'Astek & Koala (peut etre que ces labels te parleront) et fait ces remarques car tes videos me semblent pertinentes mais pour moi manquent de discernement.
      Je serais ravi de pouvoir discuter avec toi par Mp plutot que de nous etaler dans les commentaires.
      Si la conversation se prolonge je repondrais sur le mail Que tu as fournit

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      D'accord, avec ton complément sur les remarques précédentes, je vois donc où tu voulais en venir, c'est effectivement tout à fait justifié d'ailleurs. Comme dit plus tôt, dans mon cas, je ne vais pas masquer l'utilisation des pointeurs, partant du principe qu'ils sont l'essence même du C. Il n'y a pas à en avoir "honte" et à chercher à s'en passer, au contraire.
      C'est assez déroutant je pense pour toi qui débarque tout juste sur la chaîne, et cette vidéo, mais pour ceux qui ont suivi la formation depuis le début, et me connaissent, suivent le tout, ont reçu tous mes conseils sur ce propos. J'ai tenu justement les mêmes relèves que tu exposes ici :). Je leur ai dit, pour l'exemple, qu'il était bien mieux de ne pas masquer les pointeurs, même si j'ai pu le faire dans quelques unes, pour montrer le procédé.
      Pour la redondance du code, même chose, je me répète assez souvent sur le fait de toujours factoriser ce qui est répété, et de garder l'idée qu'une fonction ne doit faire globalement qu'une seule chose, chacune son rôle. Il peut arriver naturellement que je fasse exception dans certains de mes développements exposés ici, là aussi, les gens le savent, et ne sont pas pris au dépourvu, surtout comme tu l'as noté pour des débutants, qui pourraient se trouver des difficultés là où ils n'en ont pas en réalité.
      Je ne connais pas le détail d'Epitech, mais sais que beaucoup d'étudiants de ces écoles (et 42) suivent ce que je fais sur TH-cam, c'est toujours un plaisir de pouvoir apporter mon aide, alors merci d'être là également, le monde est vraiment petit décidément.
      N'hésite pas à me contacter via mon e-mail, tu te doutes qu'il est là pour ça, et une bonne journée à toi.
      À bientôt o/

    • @formation-video
      @formation-video  7 ปีที่แล้ว

      Ah, et pour le ton pris, pas de problème ne t'en fais pas, je ne suis pas quelqu'un qui se froisse sans raison, et j'apprécie la franchise, et l'échange d'idées, même si elles diffèrent :)

    • @simonking1547
      @simonking1547 5 ปีที่แล้ว +1

      @@formation-video Bonjour, je vais rajouter ma petite pierre... J'apprécie toutes tes vidéos et te suis assidûment depuis que je t'ai découvert et te remercie énormément pour le travail apporté qui me permet d'apprendre par moi-même. La clarté dans tes vidéos et ton style de code est parfait pour moi. SAUF pour cette histoire de pointeur caché. Cela m'a plutôt rendu confus dans la compréhension des listes... J'essaies toujours de coder "en avance" tes fonctions pour voir si j'ai bien comprit la notion. J'ai retiré cette * cachée et franchement passer des Dlist *maFonction(Dlist *li) est bcp plus clair pour moi et ma vision des pointeurs. Cela n'enlève ne rien au travail que tu fournis bien sûr ! Je vais attaquer les abres binaires plus sereinement désormais ! A bientôt ! Ps : Lâche nous un cours sur le JS !!! on attends tous avec impatience. ps2 : je sais que t'as 10 000 autres choses à faire courage et force à toi.