ça commence à se corser pour moi mais ça reste vraiment intéressant. Très bonne vidéo, vraiment merci de partager tes connaissances avec nous, continue comme ça !
Oui, voir en accéléré peut se faire sans soucis pour ceux qui comprennent bien le français. Bonne continuation à toi o/ +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
merci infiniment pour ce fameux tutoriel sur la pile. elle me sera très utile . deux choses m'ont vraiment touché sur cette partie . Premièrement, c'est cette façon de subdiviser le programme pour avoir un code plus lisible et plus facile à comprendre. car je me demande bien à quoi aurait ressemblé le code si l'on avait inclue toutes nos fonctions créée dans le fichier (main.c). ahahahaahahah. Enfin j'ai bien pu apprecié l'efficacité sur les pointeurs et pour ma part je pense que c'est l'un des éléments qui fait la puissance de ce langage. Un grand merci JASON bravooooooooooooooooooooooooooooooooooooooooooooo et un grand respect.
Oui, sans les pointeurs, le C perdrait de tout son potentiel, alors il ne faut hésiter à s'en servir à chaque fois que cela est nécessaire, c'est à dire 98% du temps :) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
c'est la premier fois de ma vie que je dois revoir plusieurs fois une vidéo pour comprendre. normalement pour apprendre langage je regarde les vidéo une traite et une seul fois car je n'ai pas le temps.
Cette séance 17 va nous permettre de découvrir quelques structures de données en langage C. 🔗 Code source d'une Piles (entiers) : bit.ly/2VW5nET 🔗 Code source d'une Pile (joueurs) : bit.ly/30Y3ic0 🔗 Schéma d'une Pile : bit.ly/2O01lH5
salut, j'ai une question : comment se fait il qu'on peut déclarer une variable de type structure(comme "next") à l'intérieure de la même structure qui la définit ? et ça fonctionne uniquement pour des pointeurs j'ai essayer pour une variable de type int et char ça n'a pas fonctionné.
Coucou Jason, j'ai un problème au niveau de l'énumération / définition de type Bool, les valeurs true et false ne sont pas reconnue par le compilateur de VS 2017. Ce dernier mentionnant : identificateur indéfini. Je ne pense pas que ce soit lié au fait que je code un projet en "Visual" C++ (peut-être différent du C++ conventionnel)
J'ai clisurle lien mai j'a pas pu télécharger le code source mais grâce à votre explication j'ai pu implémenter correctement le code de A à Z. Encore une fois merci.
De rien, à bientôt 👍 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Merci à toi 🙂 ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 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
Bonsoir, J'ai une question au sur la nouvelle structure player car je ne comprends pas. En effet, 45'33" il faut créer un nouveau header pour cette nouvelle structure. Pourquoi? pourtant cette structure est utilisée par l'autre ou plutôt les deux structures forment la pile...
dans la fonction afficher comme dans length tu as parcouru la pile or dans la notion de pile on a pas le droit de parcourir non ? (on vide plutot la pile dans une autre et on remet )
Non, il est tout à fait possible d'afficher une Pile, que ce soit en remplissant une autre ou en la parcourant. Le principe de la Pile doit surtout respecter le fait que tu ne pourras dépiler que la dernière donnée qui a été empilée. Donc remplissage par le haut.
Bonjour , svp dans popstack() vous avez fait un free(st) alors que vous n'avez pas déclaré de tableau dynamique dans cette fonction comment ça se fait ?
Si tu as bien regardé le code, on travaille toujours sur la même Pile, donc celle que tu nous avons créé au départ (en faisant des allocations avec malloc). +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
dans la fonction d'affichage tu fais st=st->next , or c'est un pointeur , cela n'affecte pas la suite (tu perd pas ta tete de pile) apres l'execution de la fonction ? et si on voulait que par exemple notre st a la sortie change on met come entree Stack* st ?
Le but n'est pas de perdre les données de la Pile, juste de les parcourir de la première à la dernière pour les afficher, ou compter le nombre d'élements. On ne fait donc que déplacer un pointeur sur chaque élément, rien de plus ;)
Bonsoir Jason, j'ai un problème avec l'énumération / définition de type Bool, les valeurs true et false ne sont pas reconnue par le compilateur de VS 2017. Ce dernier mentionnant : identificateur indéfini. C'est vraiment curieux car ta manière est censée fonctionner de partout comme tu l'as si bien dit. Je ne pense pas que ce soit par ce que je code un projet Visual C++ (différent du C++ conventionnel)
Bonjour, c'est Visual Studio qui ne doit pas accepter cette syntaxe. L'IDE ne te propose-t-il pas une autre syntaxe ? Ou même de directement utiliser le type bool introduit par la suite en standard dans le langage C ?
FormationVidéo Il est en effet possible d'utiliser le type Book sans passer par l'énum mais VS2017 n'aime pas non plus l'alloc mémoire d' *élément, il mais que l'assignation (le égal) pose problème : element = malloc(sizeof(*element)); Merci encore ^^
Bonjour , Bon travail merci pour vos cours très complet , pourriez vous svp d'expliquer d'avantage les pointeurs sur les structures expliquer par des exemples indépendants , merci
Tout ce qu'il y a à savoir sur les pointeurs est détaillé dans le cours sur les pointeurs : th-cam.com/video/Qra-0U_jEKs/w-d-xo.html Leur application est la même, que ce soit avec ou sans l'utilisation de structures ;)
Non, ça ne supprimerait que l'élément courant de la Pile (le premier en l'occurence). Oublie pas qu'on a fait un malloc() à chaque fois qu'on ajoute un élément à la Pile. Donc il faut autant de free()
Merci beaucoup pour ces cours sur le langage C! J'ai encore quelques lacunes mais je pense qu'à force de répéter ça ira, en tout cas ta formation m'est très utile et je compte bien continuer!
De rien, et en effet, n'hésite pas à t'exercer, faire des petits programmes, voire des projets, expérimenter, tester ce que tu apprends et voir ce que tu comprends de tout ça à l'arrivée 🙂
@@formation-video Oui en plus jusqu'à maintenant je ne faisais que visionner les cours (de peur d'endommager mon pc en cas d'erreur ^^) mais il faudrait que je teste moi même aussi en même temps que le cours ce serait mieux, merci pour ta réponse!
J'ai finalement compris les piles , par contre j'ai une petite question au niveau de la fonction pop_stack, moi j'ai juste fait return st.next sans faire le free de st, parce que la fonction clear_stack s'occupe de tout après dans main, et cela a fonctionné , est-ce une bonne manière aussi? merci.
Non, la fonction pop_stack dépile un élément. Elle doit donc faire son travail de nettoyage de ce qui a été alloué. D'ailleurs, la fonction clear_stack() utilise pop_stack() pour libérer les ressources, ce n'est pas elle qui libère directement ce qui est alloué.
Bonjour Jason, J'ai suivi ton programme et au moment de la compilation, j'ai un warning "assignement makes pointer from integer without a cast" à la ligne qui flush la pile dans le main. Cela dit le programme s'execute quand même sans erreur. As-tu une explication de ce warning ? Merci
Bonjour, peux-tu montrer le code ? Car cette erreur risque de poser problème pour l'exécution, il faudrait la corriger ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
vous aurez du utilisé un pointeur pour Player non pas utiliser la structure player directement dans la structure des pille Par exemple dans la minute 52:20 si vous avez utilisé un pointeur ça va pas poser un probleme avec le "NULL "
Salut. Je ne comprends pas comment tu peux utiliser Stack comme type quand tu définis ta fonction pour créer une nouvelle pile, alors que quand tu as définis ta structure, tu as donné deux noms possibles : StackElement et *Stack, mais pas Stack tout seul. Stack new_stack(void). Je comprends bien qu'il y-a plusieurs d'utiliser un pointeur et que tu peux ne pas mettre l'étoile devant, et dans ce cas tu obtiens non pas la valeur de la variable pointée, mais l'adresse où elle se trouve. Pourtant, ici ce pointeur est le nom d'un type, alors Stack tout seul n'est pas définit comme un nom de type de variable, alors comment se fait-il que tu puisses créer une fonction avec comme Stack comme type de retour ? Merci d'avance si tu peux apporter une réponse.
Bonjour, ce que je n'arrive pas à comprendre, c'est le " *Stack " que tu as ajouté à l'énonciation de la structure de la pile. Tu dis qu'on "cache le pointeur" , ça non plus je comprends pas. Merci d'avance ! :)
Bonsoir, si je ne mettais pas cette syntaxe, il faudrait écrire la structure en faisant : Stack *st (au lieu de Stack st) et d'autres changements dans le code. En le masquant, on évite les erreurs d'oubli de l'étoile par exemple, c'est tout :)
Vraiment merci beaucoup pour ces explications !! j'ai juste un petite demande : t'a pas une idée sur le jeu de dames ou un exemple d'un projet d'une jeu ...?
Tu peux voir sur la playlist des exercices pour t'entraîner. Il y en aura plusieurs au fur et à mesure et à difficulté croissante : th-cam.com/play/PLrSOXFDHBtfF6lXQpJ4hBha76DsQufiEQ.html
Bonjour Jason. Alors il y a beaucoup de manipulations que tu fais avec les pointeurs, mais je ne les comprends pas tous. Par exemple à 30:16 lorsque tu crées une fonction print_stack pour afficher la pile dans la console, je vois bien que tu parcours toute la pile avec une boucle while mais l'action que tu fais après le print, le "st = st->next" si j'ai bien compris, ça modifie la pile pointée par st vu que celui-ci est un pointeur? Donc je pense avoir mal compris (puisque la fonction marche), mais pourquoi la pile ne se détruit pas à chaque fois que la fonction fini de s'exécuter?
Bonjour, l'instruction st = st->next permet de déplacer le "curseur" (l'endroit où l'on se situe pour le parcours sur l'élément suivant). En gros, on commence du premier élément (avec lequel on fera nos traitement), puis on passe à l'élément suivant, jusqu'à arriver à la fin (quand st->next vaut NULL). Par ailleurs, la Pile n'a aucune raison d'être détruite puisque nous passons un pointeur vers celle-ci dans nos fonctions. Ce qui sera détruit à la fin de la fonction, c'et le pointeur qui a été créé au départ de celle-ci, pas la structure elle-même 🙂 ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 🔵 Rejoindre 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
Pas dans ce cours, pas de rapport direct avec 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut :) , est ce qu'il est possible que je puisse utiliser le nom de la pile "stackElement" dans les fonction et non pas "stack" , sinon pourquoi ? merci vraiment !
Oui, tu peux bien nommer les choses comme tu le veux et adapter la structure comme tu préfères 🙂 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Super explication comme toujours .... J'avais très peur de cette leçon mais maintenant je la trouve très simple et je la comprends très bien Merci Jason . j'ai juste une remarque dans ce qui concerne la fonction top_stack dans ce fichier bit.ly/2VW5nET . le problème se pose dans cette ligne : exit(EXIT_FAILURE); : Si on utilise cette ligne, le compilateur va sortir du programme sans exécuter les instructions qui se suivent alors il faut renvoyer un nombre pour que la compilation du programme continue . On peut retourner un entier négatif comme vous l'avez fait dans la vidéo. Bonne continuation ^^
Salut, le compilateur me met ça quand je compile : C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0xf): undefined refe rence to `new_stack' C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0x33): undefined ref erence to `add_stack' C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0x47): undefined ref erence to `add_stack' collect2.exe: error: ld returned 1 exit status Pourquoi donc ?
Salut à 18:30 tu fais l'allocation dynamique et je me demande pourquoi dans l'argument du sizeof tu utilise * element et non StackElement* , sachant que pour moi StackElement* est un pointeur de type StackElement et * element le déréferencement d'élément. Du coup j'ai comparé le résultat du sizeof(StackElement*) et sizeof(*element) et ce dernier est plus grand en plus si je comprend bien *element retourne ce qui est contenu à cette adresse et à cette adresse il y a une structure de type StackElement sans préciser l'adresse de next ou la valeur de cette élément.
Bonsoir :). En temps normal, tu pourrais remplacer le "*element" du sizeof() non pas par "StackElement*" mais "StackElement" tout court (sans l'étoile). Or, j'ai pris l'habitude de mettre directement le nom du pointeur pour l'allocation plutôt que le type. De cette façon, si je venais un jour à changer le nom du type, je n'aurais pas à toucher aux allocations, c'est tout. Donc, tu peux sans problème faire un *malloc(sizeof(StackElement))* si tu le souhaites.
Bonjour, j'ai une question, je ne comprends pas l'utilité d'une pile si celle-ci est structurée de la même façon qu'une liste. En fait, ce que je veux dire, c'est que la fonction push_stack est la même que insertHead d'une liste chainée d'entier, alors qu'est-ce qui différencie ces 2 méthodes ?
Bonjour, tout dépend de l'implémentation que les gens veulent en faire. Grosso-modo, on a 3 types de structures : Pile : on ajoute des données par l'avant, et on retire par l'avant (la première donnée à avoir été insérée sera la dernière à être retirée). File : on ajoute des données par l'arrière, et on retire de l'avant (la première donnée à avoir été insérée sera la première à être retirée). Liste : plus flexible, elle ne suit pas de contrainte particulière (on peut ajouter/supprimer depuis le début, la fin, et même en plein milieu de la structure). Chaque structure répond donc à des besoins spécifiques :)
Bonsoir, lorsqu'on crée notre structure pour la pile et que l'on crée une fonction pour retirer un un élément, le return renvoi t'il une adresse d'un élément de structure crée pour la pile ?
Bonjour il y a un truc que je ne comprends pas dans la fonction servant à afficher la pile. J'ai l'impression que la boucle while vide la pile puisque la condition est "while (!empty_stack(st))" et pourtant quand on demande si la pile contient des elements apres son affichage la réponde et que oui il y a bien 47 et 14 dans la pile.
Bonjour, la fonction d'affichage ne modifie pas la pile puisqu'elle ne renvoie rien en retour. Donc si tu demandes grâce à la fonction "is_empty_stack" si ta pile est vide après l'avoir affichée, c'est normal que le programme te dise qu'elle n'est pas vide.
Pour commencer un grand merciii pour le travail que vous faites. C'est très instructif. Sinon, une question, c'est quoi l’intérêt de donner 2 Alias de noms a la pile ?
Bonsoir, les deux alias sont là pour rendre le code plus lisible ensuite. Comme une Pile n'ayant qu'un seul élément est aussi une Pile, il serait bizarre de dire qu'une Pile contient des Piles. Donc, avec cette syntaxe, ça permet en lisant le code de comprendre qu'une pile (Stack) possède des éléments (StackElement). +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Stackement est un alias de Stack, c'est le principe du typedef 👍. C'est juste pour avoir deux nommages et que ce soit plus lisible au niveau du code (si on voit Stack, on pensera à la pile complète, et si on voit StackElement, on pensera à un seul élément d'une pile)
@@formation-video donc je met un & devant ? Et sinon, j'ai une question, pourquoi on met un *devant une fonction et c'est quoi la différence ? Merci pour tes réponses.
Non : pastebin.com/hUsmXJDu Si une fonction a comme type de retour int* par exemple, cela veut simplement dire qu'elle renvoie un pointeur sur int (entier).
Bonjour. Je suis en train d'apprendre le C et je te remercie pour tes vidéos qui sont très claires. Cependant je dois avouer que, si j'ai regardé les 16 premières vidéos sans soucis de compréhension, je ne comprends pas bien celle-ci.En effet je ne comprends pas , concrètement , à quel moment dois-je organiser mon code comme tu le fais dans la vidéo, en pile....?Je ne sais pas si je suis clair, où s'il y a un truc que j'ai zappé au cours de la formation. Merci d'avance pour ton aide.
Bonjour, à partir de cette séance 17, ce ne sont plus des notions propres au C directement. En gros, tu as appris les notions du langage. Ici ce sont des structures de données (parmi d'autres : graphes, arbres, files, listes) qui sont des structures très utilisées en informatique pour ordonner/trier/hiérarchiser des données. Par exemple, la mémoire virtuelle utilisée par ton programme stocke les variables que tu déclares sur une Pile, qui fonctionne sur ce même principe. En intelligence artificielle, on va retrouver des arbres, pour calculer des itinéraires de graphes, etc.
Bonjour, si je ne "veux pas" définir la structure avec typedef, mais simplement faire "struct StackElement", comment dois-je ré-écrire la suite du code, pour les deux fonctions new_stack() et is_empty_stack() ? Je m'y perds, c'est encore pour moi un vrai labyrinthe... Juste savoir ça, svp, ré-écrire sans typedef. Merci !
Bonjour, justement, "typedef" ne sert pas à définir de structure, mais à définir un alias. Donc, oui, tu peux évidemment faire sans : pastebin.com/2YKJyxPy
Bonjour je comprends pas pourquoi apres avoir par exemple dépiler le 31, puis le 23 le programme dit que la pile est vide pourtant on a encore deux éléments
à 9:14 je ne comprends pas la ligne " struct StackElement *next " pourtant j'ai revus et bien compris la vidéo des pointeurs. Je dirais que le pointeur next pointe vers la structure StackElement mais je ne suis absolument pas sur. Peux-tu me corriger stp? Merci d'avance! Et au passage, super vidéo, comme toutes les autres d'ailleurs...
Bonsoir, en fait "next" est un pointeur vers une donnée de type "StackElement". Car un Pile, dans l'implémentation proposée, qu'est-ce que c'est ? - Pile vide = NULL - Stack avec 1 seul élément = Pile - Stack avec 2 éléments = Pile - Stack avec 100 élements = Pile. Donc, pour chaîner chaque élément dans une Pile, le pointeur "next" pointe sur un autre élément de Pile (StackElement), sinon NULL (on est au bout de la Pile). +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
@@formation-video excusez moi, je ne comprends pas au niveau du pointeur: celui ci est de type stackelement, mais il peut pointer des piles de plusieurs tailles differentes si j'ai bien compris, est ce logique qu'un pointeur d'espace fixe ici 4 bits puisse pointer plusieurs piles de tailles differentes ? merci,
bjr. mrc pour cette vidéo (même si sa fais déjà 2ans). Pour être sur d'avoir bien compris, dans la fonction main, si je fait une initialisation de ma piles en fesant Stack *stack = new_stack(); sa ne marchera pas car stack est déjà un pointeur en fesant Stack stack; ?
Bonjour, le mieux est que tu testes pour voir ce que te donnera le compilateur ;) ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut, j'ai une question.A quoi ça sert de mettre "structure StackElement *next" à l'intérieur de la première structure ?Je ne me souvient pas que tu en ais parlé dans le cour "structure et type".
Pour le maillon suivant de la Pile. Tu as du comprendre qu'une Pile qui n'a qu'un seul élement est aussi une Pile. Donc, elle a une valeur, et un pointeur vers l'élément suivant, et ainsi de suite. Voilà pourquoi on a donc un pointeur vers une Pile dans une Pile.
Bonjour/soir , je ne comprend pas la présence de ce pointeur ici 8:35 , il n’est pas défini et pointe sur rien (tu as dit qu'il pointe sur la pile mais d'où on sait ça), je ne comprend donc pas sa présence et je ne comprend pas non-lus l'utilité de *next (enfin tu l'as dit c'est pour passer a la pile d'en dessous) mais d'où on sait ça, comment ça se fait ?
En fait, je définis une double syntaxe pour ma structure de Pile. En gros, StackElement est une struct Stack, et Stack également. Dans la structure elle-même, chaque élément de la pile doit être lié aux autres (sinon, chaque élément serait isolée et nous n'aurions aucune structure, mais que des variables isolées). Donc, on indique que chaque "maillon" (élément) de la Pile pointe vers un autre élément (sinon NULL). Ce chaînage est nécessaire pour établir la liaison de nos éléments (tu retrouveras le même principe avec une File, une Liste, ou autre...) et permet de parcourir la structure (du premier au dernier élément). +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Bonsoir, J'ai commencé par la création du pile mais quand j'ai compilé le code, j'avais toujours deux erreurs le premier : error: expected identifier or '(' before 'float' float decimal et le deuxième : error: expected ':', ',', ';', '}' or '__attribute__' before '{' token { Merci pour me répondre si vous avez une idée des ces erreurs.
c'est réglé, c'était des erreurs des autres fichier c qui sont dans le même dossier. J'ai crée un nouveau dossier et j'ai mis dedans que les fichier du travail sur le pile.
OK, ça ne devait pas être grand chose alors :) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Petite question, pour les stacks, on reféfini à chaque fois la variable stack pour mettre à jour notre pile mais dans ce cas ne serait-il pas plus opti de passer par l'adresse de la stack et de la manipuler via des pointeurs au lieu de ce passage par valeur ?
@@formation-video ok je comprend un petit rafraîchissement de mémoire sur les structures et les pointeurs dans les structures n'était pas de trop 😅 Merci pour ta réponse
Super bien explique. au fait est ce que c'etait possible de creer ka pile et ses focntions sans pointeur? SI cest non est est uniquement parce que le passage pas valeur n'aurait pas permis d'agir sur la pile ou il ya d'autres raisons
Non, car ton ordinateur ne sait pas ce qu'est une Pile, ni l'espace que cela a besoin, et on ne connaît pas à l'avance le nombre d'éléments qu'elle aura. Donc : pointeurs et allocations de mémoire dynamiques.
@@formation-video oh je vois merci beaucoup pour avoir repondu. C'est aussi pour ca tu as utilise *Stack? Des fois quand tu utlise StackElement tu met * devant element mais quand tu utilise Stack tu ne met rien. est ce que ca veut dire que les deux sont equivalents? j'ai remarque que tu as utulise Stack uniquement avec les focntions aussi et StackElement avec les piles temporaires des fonctions
C'est surtout par rapport aux alias créés à partir de la structure avec typedef. Dans ma définition, j'ai créé deux alias : - le premier pour dire que struct StackElement est équivalent à StackElement - le second pour dire que struct StackElement est équivalent à *Stack Ainsi, dans le premier on doit mentionner le pointeur, dans la seconde, il est masqué 👍
Bonjour Jason et merci pour la vidéo, elle est très clair mais j'avoue ne pas comprendre l'intérêt de cette notion ou sa puissance malgré l'exemple en fin de vidéo. Aurais tu des exemple d'utilisation concrets des piles s'il te plait ?
Bonjour, un exemple concret et facile à imagine : la pile d'un programme. Pour faire simple : chaque variable déclarée dans ton programme ou chaque appel de fonction est enregistré sur une pile. C'est la structure utilisée en mémoire (virtuelle) pour gérer ces données (j'en parlerai d'ailleurs dans ma playlist Architecture)
Bonjour, j'ai une question par rapport au type des fonctions et au pointeur caché dans la stucture "StackElement" : Est-ce que le fait d'appelé une fonction par "Stack nomDeFonction (param 1, ..)" est en fait une manière de créer un pointeur de fonction ? (afin de renvoyer l'adresse de la fonction et d'éviter de renvoyer l'adresse des éléments de la structure modifié par la fonction via des pointeurs) Merci d'avance pour vos réponses et j'apprécie énormément vos cours qui sont clairs pour la majorité !
Bonjour, cela ne concerne pas les pointeurs de fonction, c'est juste pour avoir un nom simple (ici Stack) pour représenter la structure de notre pile 👍
@@formation-video D'accord. Je pense que je commence à comprendre : si on créer une fonction avec "Stack" on demandera de fait à la fonction de retourner non seulement une stack mais avec l'adresse de celle-ci (comme on déclare "*Stack" dans la structure) en plus, est-ce correcte ? Merci pour votre réponse et j'adore vos vidéos même si ce n'est pas toujours évident vous m'aidez & m'apprenez beaucoup !
Bonjour ! Je voulais savoir pourquoi l'invite de commande marque le message ci-après lorsque que je tente de compiler le programme "piles" ? Je suis sous windows 10, si cela peut bien évidemment aider ^^ Merci de votre compréhension.. C:\Users\blute\AppData\Local\Temp\cc7dOG3Y.o:main.c:(.text+0xf): undefined reference to `new_stack' C:\Users\blute\AppData\Local\Temp\cc7dOG3Y.o:main.c:(.text+0x1f): undefined reference to `is_empty_stack' collect2.exe: error: ld returned 1 exit status
Bonsoir, dans l'archive fournie, tu as les fichiers "stack.c" et "stack.h". Tu peux donc créer un fichier "main.c" avec la fonction main() dedans (comme j'ai fait dans la vidéo). Toujours dans ce fichier, il ne faut pas oublier au début d'ajouter la ligne *#include** "stack.h"* pour inclure le fichier d'en-tête de la Pile, sinon les fonctions ne seront pas trouvées par le compilateur, d'où ton message d'erreur.
Le problème persiste alors que la configuration est telle que tu l'énonce dans ton message... Toujours le même message... Y aurait t-il un autre moyen ? C:\Users\blute\Desktop\Codage\Piles>gcc main.c -o prog C:\Users\blute\AppData\Local\Temp\cctFSDxv.o:main.c:(.text+0xf): undefined reference to `new_stack' C:\Users\blute\AppData\Local\Temp\cctFSDxv.o:main.c:(.text+0x1f): undefined reference to `is_empty_stack' collect2.exe: error: ld returned 1 exit status
Erreur d'étourderie... Je viens de trouver la subtilité ^^ Très bonne soirée PS : Une excellent travail côté réalisation vidéo ainsi qu'une solide pédagogie à en faire trembler certains professeurs ^^ Bonne continuation...
Salut, je ne comprends pas pourquoi le fichier main.c fonctionne sans include stack.c c'est bien stack.c qui contient la fonction new_stack() n'est ce pas , stack.h ne contient que le prototype de la fonction , de plus stack.c inclus stack.h , pourquoi pas ne pas l'inclure dans main.c au lieu de stack.h merci !
Bonsoir, Un include permet d'ajouter un fichier d'en-tête, et un fichier ".c" n'en est pas un, il s'agit d'un fichier source. Donc, chaque fichier source doit inclure les fichiers d'en-tête et bibliothèques dont il a besoin.
Voilà. Pour le compilateur, tant qu'il connaît l'existence des fonctions (via le prototype), il saura retrouver celle-ci pour compiler le tout comme il faut et te faire un exécutable fonctionnel :). Ne pas oublier que pour la machine, y'a pas de fonctions en réalité, ce ne sont que des adresses en mémoire, y compris pour les variables.
Merci Jason pour la qualité pédagogique et le pan sur les structures de données. On fait un saut, là partir de #17. Bizarre, en testant le programme, la console retourne "gcc : error *.c : invalid argument . Je ne vois pas ce qui cloche..
Oui, les notions du C sont abordées les 16 premières vidéos. À partir de cette séance, tu ne vas voir que l'application dans quelques domaines du langage, et apprendre à manipuler quelques structures de données ;) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Pour ton erreur de compilation, regarde de bien faire : gcc *.c -o prog pour compiler l'ensemble de tes fichiers source (extension ".c" tout en les liant avec les en-êtes ".h") +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
De rien, à bientôt =) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Tu avait raison, au début il y a une semaine, je comprenais vraiment pas bien les piles, puis en faisant des schémas de mon côtés pour essayer de comprendre, je comprends mieux, mais d'ailleurs, c'était pas mieux de commencer par les listes chainées avant les piles ? Merci pour tes vidéos !
@@formation-video ah d'accord, en gros celle là est plus simple. Mais une autre question, pour ajouter des éléments à la pile, on peut passer par des pointeurs au lieu d'incrémenter la nouvelle valeur directement à la pile ? En gros, on appelle juste la fonction (void) qui ajoute.
Pas compris, mais c'est ce qui est fait dans la vidéo. Dans une Pile, on ajoute des éléments par "le début". C'est ce que fait la fonction push_stack()
@@formation-video Pour ajouter un élément, toi tu as fait ça : stack = push_stack(stack, x); Est ce qu'on pourrais modifier cette fonction pour juste l'appeler comme ça : push_stack(stack, x);
Bonjour Jason, merci pour ce travail bien fait; j'aimemrais tout de même comprendre la ligne (struct StackElement *next) qui intervient dans la déclaration de la structure (typedef struct stackElement). Je m'attendais à ce qu'elle soit ignorée par le compilateur car faisant partie des champs de la structure créée.
Bonjour, et bien non, on peut parfaitement définir une structure dont un de ses membres est aussi du type de la structure. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bonjour, parce que sur les anciennes normes, elle n'existait pas, et comme je ne peux pas garantir que les internautes l'auront, en créant le type, je suis sûr que ça fonctionnera chez tout le monde (et ça permet au passage de voir une application de l'énumération) 😉 +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
De rien +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Je reprends on code pas à pas pour en comprendre la logique, après la création de la fonction qui libère la pile, j'ai 2 erreurs répétées plusieurs fois dans la console : dans le "main" : assigment makes pointer from integer without a cast; par exemple ici : pile1 = ajoute_element_pile(pile1,14); puis, sur toutes mes fonctions, par exemple : sur "pile.c" et "main.c" :multiple definition of "nouvelle_pile" Il me semble que mon code répète bien ton code même s'il y a d'autres noms... ?!
A priori, tu dois avoir des fonctions définies deux fois, et certainement d'autres erreurs dans ton code pour avoir ces messages là. Relis bien ton code, et compare avec le mien pour identifier les erreurs éventuelles ;) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Salut, y'a un petit point que j'arrive pas à éclaircir, pourquoi rajouter "*Stack" a la définition de la struct à la place de "Stack" ? On ne peux pas juste la déclarer comme pointeur à la création seulement comme ca "Stack *stack = ... " ?
Je l'avais expliqué dans les vidéos, c'est une manière de pouvoir employer la structure en masquant le pointeur. Je l'avais fait pour montrer que c'était possible (en faisant différemment sur d'autres structures de données de la formation pour que vous ayez plusieurs exemples d'implémentation). ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ 💙 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
Salut, quand je compile en tapant gcc *.c -o prg , Windows me retourne une erreur pour "*.c" argument invalide. Je ne comprends pas pourquoi du coup. Merci
Bonjour, il semblerai qu'il y a une erreur sur le schéma à 25:40, on crée d'abord l'élément contenant la valeur 31, donc le sommet serait plutôt en bas ? En tout cas, j'adore vos vidéos ça m'aide à comprendre beaucoup plus de choses sur le C !
Bonjour, non, le sommet de la pile, c'est le dernier élément qui a été ajouté à la pile (et celui qui sera le premier a être dépilé). C'est pour cela qu'il faut vraiment le voir comme une pile d'objets. Le sommet d'une pile n'est jamais l'élément qui se trouve tout en bas de celle-ci 😉
Non, pas comme est conçue la structure. Une Pile n'est pas une structure conçue pour faire du tri, car on empile des valeurs par un côté, et on dépile par ce même côté. Si tu veux une structure triée, il faudra plutôt travailler avec une liste
FormationVidéo Merci j'ai compris prof, Sinon si j'ai bien compris le pointeur Des piles pointe sur L'element precedent et celui des files pointe sur le prochain non?? Pardon pour le derangement
Non, la Pile et la File utilisent le même système de pointeur vers l'élément suivant. Ce qui change entre les deux, c'est l'ordre d'insertion et suppression d’élément :)
Merci super tuto comme d'hab ! J'ai une question, peut-on changer tous les "StackElement *element" (dans les fonctions pop_stack ou push_stack) par des "Stack element" ? en fait j'ai du mal à comprendre la fin de ta déclaration de structure, quand tu écris "StackElement, *Stack"
@@formation-video je viens de verifier et ca marche en faisant ce remplacement, ca me semble plus clair, je l'ecrirai donc comme ca maintenant, merci beaucoup ! (Neanmoins je ne comprends pas l'etoile devant le Stack a la fin de la declaration de la structure, en essayant de l'enlever j'ai des erreurs a la pelle)
Bonjour, j'aimerai savoir pourquoi mon programme ne fonctionne pas : main.c : #include #include #include "stack.h" int main(void) { Stack sta = newStack(); //on crée un pointeur nommé "sta" et de type Stack, qui prend la valeur du retour de la fonction newStack() if(isEmptyStack(sta)) printf("La pile est vide. "); else printf("La pile n'est pas vide. "); printStack(sta); sta = pushStack(sta, 14); sta = pushStack(sta, 47); printStack(sta);
if(isEmptyStack(sta)) printf("La pile est vide. "); else printf("La pile n'est pas vide. "); sta = clearStack(sta);
printStack(sta);
if(isEmptyStack(sta)) printf("La pile est vide. "); else printf("La pile n'est pas vide. "); return 0; } stack.c : #include #include #include "stack.h" Stack newStack(void) { return NULL; } Bool isEmptyStack(Stack st) { //si l'adresse st de type Stack est NULL, on retourne true (voir enum du fichier "stack.h") et donc on sort de la fonction, donc, si on ne l'a pas fait, on retournera false (pas besoin de else) if(st == NULL) return true;
//si la pile est déjà vide, on retourne le retour de newStack : if(isEmptyStack(st)) return newStack();
//on donne à element une valeur en fonction de st, qu'on libère ensuite : element = st->next; free(st);
//on retourne le retour de clearStack en fonction de element, donc on va réexecuter la fonction jusqu'à ce que la pile soit vide, auquel cas il retournera le retour newStack() (voir plus haut) : return clearStack(element); } void printStack(Stack st) { if(isEmptyStack(st)) { printf("Rien a afficher, la pile est vide. "); return; //on sort de la fonction sans retourner de valeur car la fonction est de type void }
while(!isEmptyStack(st)) { printf("[%d] ", st->value); st = st->next; } } stack.h : #ifndef __STACK__H__ #define __STACK__H__ // --§__création d'un type booléen__§-- typedef enum { false, //0 true //1 }Bool;
// --§__définition d'une pile__§-- typedef struct StackElement { int value; struct stackElement *next; }StackElement, *Stack;
// --§__prototypes des fonctions__§-- Stack newStack(void); //cette fonction retourne une adresse de type Stack (voir structure) Bool isEmptyStack(Stack st); void printStack(Stack st); Stack pushStack(Stack st, int x); Stack clearStack(Stack st);
Bonjour, pour plus de lisibilité, peux-tu partager ton code via pastebin ? Sinon, relis d'abord ton code, car je vois rapidement pas mal d'erreurs (par exemple dans la structure, tu as noté "stackElement" au lieu de "StackElement". Les minuscules/majuscules sont importantes. +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
Parfait 😉 ! +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
pourquoi certaines fonctions ne prennent elles pas de double pointeurs, dans cetrains cas, je pense qu'il devrait y avoir des problemes des lors que nous quittons les fonction telle que push stack dans le main non ?
Tout cela vient de la manière dont a été définie la structure de la Pile. En revanche, tu verras que pour d'autres structures, j'ai fait une implémentation différente, histoire de montrer plusieurs manières de faire, et ce que cela change sur la syntaxe 😉 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut , merci pour cette super video . Je travaille avec le code::Blocks et j'ai essayé mais dans le terminal il m'a dit que la pile est toujours vide malgrés que j'ai fais l'ajout des élements à l'aide de la fonction "push_Stack" j'ai pas compris pourquoi malgrés que j'ai fait aucun erreur dans le code .merci de me répondre !
bonjour , celui ci est la fonction "push_stack" : Stack push_Stack (Stack st , int x ) { StackElement *element ; element = malloc (sizeof(*element)) ; if (element ==NULL) { printf("problème allocation dynamique . "); } element->value=x ; element->next =st ; return element ; } et dans la fonction main : int main(void) { Stack sta=new_Stack() ; print_Stack(sta); printf(" -----------------------------
"); sta = push_Stack(sta,13); sta = push_Stack(sta,26); sta = push_Stack(sta,80); print_Stack(sta); return 0 ; }
OK, et donc avec ce code, l'ajout des éléments n'est pas fait tu me dis ? Tout semble correct pourtant. Vérifie bien en revanche que tout est bon sur le nommage des fonctions, je vois par exemple que tu as mis une majuscule sur le "S" de push_Stack, ou print_Stack, donc vérifier que c'est identique partout :) Après si ton code compile, c'est qu'il n'y a pas d'erreurs
Dans ton archive d'entiers il manque un ; après int value dans la définition d'une pile et tu as laissé Player dans les paramètres de pushStack Et quand j'inclu stack.h dans mon main ça marche pas alors que quand je fais include stack.c ça marche, je pense que c'est parce que je fais gcc main.c -o prog et que tu fais gcc *.c -o prog du coup j'imagine qu'il pack les 2 .c dans le prog.exe ?
Merci de l'avoir signalé, j'ai mis à jour l'archive et les liens sur la vidéo 👍 Et oui, il faut bien compiler tous les fichiers source, donc -> gcc *.c -o prog (ou éventuellement : gcc stack.c main.c -o prog) ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
No, the stack structure must respect the LIFO (Last In First Out) principle. For the insertion of elements at a specific position, we generally use a list 👍
Il y a une chose que je ne comprend pas le type "stack" qu'on met avant la fonction push_stack c'est le type de retour n'est ce pas,alors pourquoi vous n'avez rien retourner et pourtant ça marche mais quand moi je fait ceci: stack push_stack(stack st,int x) { stackelement* element=(stackelement*)malloc(sizeof(stackelement)); if(element==NULL) { printf("probleme allocation memoire "); exit(1); } element->value=x; element->next=st; return st; } ça ne marche pas alors que je retourne bien la pile st, ça me met que la pile est vide a chaque fois quand j'exécute Merci bien de me répondre
et selon moi on devait retourné la pile st et non element,c'est la raison pour laquelle on fait sta=push_stack(sta,13) la fonction retourne un stack (une pile) alors pourquoi ça marche pas avec st
Relis bien le code de la fonction. On créée une variable element, qui sera la future pile en fait. Sur la première case, on met la valeur passée à la fonction, et à la suite, on met l'ancienne pile. Donc forcément, si tu retournes "st", cette Pile au début est vide donc tu retournes à chaque fois une Pile sur laquelle rien a été ajouté, voilà pourquoi c'est toujours vide. Si le code est pas assez clair pour toi, remplace le nom *element* par *newStack* et tu comprendras mieux :).
Non mais c'est plus propre de ne pas tout mettre dans un seul fichier. On définit les structures, énumérations et prototypes de fonctions dans un fichier d'en-tête. Puis on implémente les fonctions dans un fichier source. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
bonjour ! quand vou avez definie la pile vous avez mis : typedef struct stackelement { int value ; struct stackelement *next ; }stackelement, *stack ; la question est pourquoi vous avez fait "struct stackelement *next ;" est pas directement "stackelement *next " ; vous avez deja dit dans les video precedentes que le decalaration precedente suffit . merci !
Bonjour, en testant avec le retrait du mot "struct", tu aurais tout de suite compris pourquoi je l'ai indiqué. Simplement parce qu'à ce stade (on définit la structure), l'alias StackElement = struct StackElement n'est pas encore valide et connu pour le compilateur 😉
Bonjour merci pour la formation just une question pour m'éclaircir les idées un peut plus on aurait pas pu faire : sta = new_stack(); pour vider la pile ? et merci encore
Et que fais-tu de tout ce qui a été alloué en mémoire (et ne sera donc pas libéré = fuite mémoire) ? 😉 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
je veut dire si c'est possible de ns donner un exemple quand il y a une pile pleine ou d'une autre façon, le test d'une pile pleine Pardon pour le dérangement et je vs remercie monsieur :-)
Dans mon code, tu vois que je n'ai pas mis de limite à la Pile. Si tu veux adapter la structure à cela, tu peux utiliser une variable de type "int max_size" en mettant une valeur que tu veux. Ensuite, il te suffira simplement de faire une fonction qui teste à chaque fois si on a atteint la taille max (quand on veut ajouter un élément notamment).
Bonjour ! On nous a donné un projet sur les piles et les files : Comment implémenter une pile a l'aide de deux files ? Comment implémenter une file a l'aide de deux piles ? J'ai aucun problème sur tout ce qui concerne le code ! Ce que je comprends pas c'est la présentation (le schéma ) car je vois que c'est inutiles ! Pouvez vous m'expliquer l'implémentation svp ! Cordialement
C'est étrange ce que l'on te demande sachant que les deux structures ont un fonctionnement complètement différent. Pour une Pile, la dernière valeur insérée est la première que l'on peut retirer. Pour une File, la dernière valeur insérée est la dernière que l'on pourra retirer.
Bonsoir jason champagne merci pour la vidéo j'aimerai savoir pourquoi lorsqu'on crée une pile on utilise l'allocation dynamique d'après ce que j'ai compris on utilise l'allocation dynamique lorsqu'on veut utiliser une donnée dont la taille n'est pas connu par notre ordinateur j'ai un problème ici car lorsque qu'on crée un variable de type int on a pas besoin d'allocation mais lorsqu'on veut créer une pile on dit comme l'avez écrit stackelement *element; p = malloc(sizeof(element)); étant donné qu'on a crée la structure stackelement en mettant un typedef est ce que la machine n'a elle pas déjà réservée un espace pour les types stackelement? puisque dans la vidéo sur les structures on entrait les username, hp et mp des Player sans avoir à faire une allocation dynamique
Bonjour, avec ces structures de données, nous manipulons des pointeurs vers ces dernières, d'où la nécessité d'allouer l'espace nécessaire, car non, l'ordinateur ne sait pas à l'avance quel espace occupe une Pile 👍 Un exemple simple pour illustrer cela : pastebin.com/KvYK87mE
@@formation-video ça veut donc dire que dès que l'on utilise un pointeur dont le type est défini par une structure, nous devons automatiquement faire une allocation dynamique?
quelle est la difference entre la signature stack et StackElement , parce-qu'a un moment dans la vidéo il dit que c'est juste une notation differente " dans le typedef il avait mit a la fin StackElement , *stack " merci de votre aide :D
Tu as une notation qui masque le pointeur, c'est tout. Ce n'est pas obligatoire de procéder comme ça, mais je tenais à le faire pour montrer les possibilités que l'on a avec le "typedef" 😉 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
salut Jason !! d'abord je vous remercie pour tout l'aide que vous nous portez sincèrement depuis que je suis tes vidéos j'ai quitter tout les site que je suivis avant... enfin bref ! Ma question est la suivante : Comment peut on réaliser un algorithme de tri d'une pile ? j'ai essayé plusieurs fois mais je n'ai pas arrivé et est ce qu'il n y a pas une fonction prédéfinie pour l'utiliser merci d'avance jason ! c'est ASMA love u
Bonjour, et bien si ta Pile contient des entiers, il suffit d'utiliser les algorithmes de tri habituels pour trier des nombres, simplement :). Après, une Pile n'est pas une structure conçue pour stocker des données triées (puisqu'on empile par le haut, et la première valeur retirée de la Pile sera toujours la dernière qui y a été ajoutée). Pour plus d'infos sur l'Algorithmie, je te renvoie sur mon début de cours : th-cam.com/play/PLrSOXFDHBtfGy7xYmf5LlNr8f-niDkf7_.html
donc si par exemple jai une pile de 4 element et que je veux deplacer le 3eme element en première position la solution est de parcourir jusqu'au 3eme element et je le dépile c'est faisable? bien sur en réorganiser le pointage ... je suis débutante dans la programmation du coup j'essaye de reproduire les algos qu'on voit sauvant sur les piles je n'ai aucun interet de faire le tri et je ne sais pas si c'est utile ou pas lol pour etre honnete et puis je reve d'etre programmeur comme vous . merci pour votre réponse :) !
On peut se tutoyer ;). Alors oui, tu peux procéder ainsi, mais le mieux, sera de dépiler toutes les valeurs qu'il faut (en les sauvegardant dans des variables), jusqu'à avoir la valeur à mettre en premier, puis ré-empiler les valeurs sauvegardées et finir par empiler la valeur qui sera en première position. Après, un tri se fait surtout sur une Liste, pas vraiment une Pile qui n'est pas faite pour cela. Bon courage pour ton avancée en langage C
bonsoir monsieur j'ai un problème d'inconpréhension au niveau de la fonction clear_stack à la 25:29 en faisant free(st) pourquoi cela ne vide pas toute la pile puisque la pile c'est st moi j'aurais fais free(element) et j'aurais fais une erreur svp eclairez moi
Parce que si tu regardes bien, on a alloué un espace (malloc) pour chaque élément de la Pile. Il faut donc naturellement libérer (free) chaque élément à son tour. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video je vois mais je ne sais pas si j'ai pas encore compris mais liberé la pile ( free(stack) ) c'est aussi la libéré de tout ses éléments pourquoi rappeler alors la fonction en retournant stack_element puisqu'il n'en a plus dans le pile
Pour faire simple, tu dois faire autant de free() que tu as fait de malloc(), donc pas qu'un seul 😉 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video je comprend bien ce fait je pense que ne saurais expliquer par écrit ce que je pense il y'aurait-il un moyen de vous joindre svp svp!!!!!!!
J'aimerais avoir un eclaircicement sur un truck ou deux : Comment on reconnais une pile vide ? , le fait de dire vide ne veut pas dire que ca n'a pas de valeur sinon on aurais dit st->value , j'ai aussi un probleme des structurese et enumeration, ces derniers ne fonctionne pas , et si j'avais envie d'afficher le premier element enregistrer de la pile c'est a dire je fais commet ?
Bonjour, tout dépend de comment tu vas représenter ta structure. Dans mon implémentation, une pile est une Pile qui n'est rien, donc la valeur NULL. Ensuite, le principe de la Pile n'est pas censé permettre de récupérer le premier élément empilé, mais le sommet de celle-ci. Après tu peux créer une fonction pour le faire, mais ta Pile deviendrait plus une sorte de Liste ;)
Et bien d'indiquer à ton ordinateur quelle place il doit réserver en mémoire. Car il sait allouer seul un entier, un caractère, un flottant, mais un élément de Pile, non
Via les liens dans la description de la vidéo, tu arrives sur des pages de mon GitHub. Sur celles-ci, tu as sur la droite une icône pour télécharger l'archive : imgur.com/LqiOUki
Salut Jason, pourquoi dans l'enum l'ordre entre "true" et le "false" est important ? j'ai bcp peiné à retrouver cette erreur. En mettant l'inverse de ce que t'as fait je me retrouve avec un segmentation fault. Et un Grand merci, pour tes vidéos ça m'aide énormément.
Bonjour, parce que par défaut, une énumération est numérotée, en commançant par 0, puis 1, etc. Dans ce cas, si tu viens à attribuer true à 0 et false à 1, je pense que tu comprends le problème que ça entraîne 😉
Bonsoir, n'hésite pas à montrer ton code (en t'aidant du site pastebin par exemple) pour voir où tu peux avoir une erreur :) +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
D'accord +---------------------------------------------------------------------------------------------------------------------------------------------+ |- 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 +---------------------------------------------------------------------------------------------------------------------------------------------+
c'est cool et bien expliqué ... Mais je me demande quand même un truc : Est ce que ça ne fait pas exactement le même taf qu'un tableau ? Du coup c'est quoi le contexte pour utiliser une pile ? Sans compter qu'en plus le tableau on peut cibler précisément un index pour récup une donnée. Du coup j'ai du mal à visualiser l'intérêt ?
Un tableau est conçu pour une besoin bien précis, là où la Pile a son propre usage aussi. On veut pouvoir implémenter des structures pour contrôler la gestion des données (dans une Pile, on ne veut justement pas pouvoir ajouter/retirer un élément de n'importe où)
Parce qu'on aurait pas notre structure sinon, où chaque élément est "rattaché" à un autre. ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video bonjour; j'ai pas bien compris votre réponse; le ptr *next doit contenir une adresse(pourquoi le type struct StackElement et non type int)
Parce que "next" est un pointeur vers StackElement, pas un pointeur sur "int" ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ◾ 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 ◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bonjour, je ne comprends pas bien le fait de donner deux nom au typage de pile : StackElement et *Stack. J'ai bien compris que la pile et un élement c'est la même chose mais pourquoi écrire *Stack et non Stack ? Merci à toi. Belle soirée.
Bonjour, c'est une syntaxe purement usuelle pour représenter une structure de Pile. Car ici, une Pile peut avoir 0, un ou plusieurs éléments, c'est une Pile dans tous les cas
ça commence à se corser pour moi mais ça reste vraiment intéressant. Très bonne vidéo, vraiment merci de partager tes connaissances avec nous, continue comme ça !
Ne lâche rien et n'hésite pas à faire des petits programmes de ton côté pour mettre ça en pratique 👍
Super tutoriel, tes explications sont simples et claires ! On peut facilement regarder la vidéo en 1.25 voir 1.5 sans se perdre ! Merci :)
Oui, voir en accéléré peut se faire sans soucis pour ceux qui comprennent bien le français. Bonne continuation à toi o/
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
merci infiniment pour ce fameux tutoriel sur la pile. elle me sera très utile . deux choses m'ont vraiment touché sur cette partie . Premièrement, c'est cette façon de subdiviser le
programme pour avoir un code plus lisible et plus facile à comprendre. car je me demande bien à quoi aurait ressemblé le code si l'on avait inclue toutes nos fonctions créée dans
le fichier (main.c). ahahahaahahah. Enfin j'ai bien pu apprecié l'efficacité sur les pointeurs et pour ma part je pense que c'est l'un des éléments qui fait la puissance de ce langage.
Un grand merci JASON bravooooooooooooooooooooooooooooooooooooooooooooo et un grand respect.
Oui, sans les pointeurs, le C perdrait de tout son potentiel, alors il ne faut hésiter à s'en servir à chaque fois que cela est nécessaire, c'est à dire 98% du temps :)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
c'est la premier fois de ma vie que je dois revoir plusieurs fois une vidéo pour comprendre.
normalement pour apprendre langage je regarde les vidéo une traite et une seul fois car je n'ai pas le temps.
C'est normal, ça se corse un peu, et ça met en application beaucoup de concepts vus précédemment 👍
Cette séance 17 va nous permettre de découvrir quelques structures de données en langage C.
🔗 Code source d'une Piles (entiers) : bit.ly/2VW5nET
🔗 Code source d'une Pile (joueurs) : bit.ly/30Y3ic0
🔗 Schéma d'une Pile : bit.ly/2O01lH5
salut, j'ai une question : comment se fait il qu'on peut déclarer une variable de type structure(comme "next") à l'intérieure de la même structure qui la définit ? et ça fonctionne uniquement pour des pointeurs j'ai essayer pour une variable de type int et char ça n'a pas fonctionné.
mon copliateure ne reconé pas tes declaration boolienne vue que j utilise le dev c
Coucou Jason, j'ai un problème au niveau de l'énumération / définition de type Bool, les valeurs true et false ne sont pas reconnue par le compilateur de VS 2017. Ce dernier mentionnant : identificateur indéfini.
Je ne pense pas que ce soit lié au fait que je code un projet en "Visual" C++ (peut-être différent du C++ conventionnel)
FILO (First In Last Out) peut fonctionner aussi car Le premier qui rentre sera le dernier qui sort :p
Oh la la, je m'incline devant ce cours de qualité !
Merci beaucoup !!!
Merci à toi pour le commentaire :)
Avec toi, je suis sûr et certain de bien Coder en C !
Explications trop cool et très simple
Merci et bon courage à toi en C
Merci beaucoup pour ce tuto très clair ! Bonne continuation !
De rien, à bientôt 👍
Superbe vidéo encore une fois! J'ai bien aimé la Structure de player à la fin! CHOUBACCA, sympa comme pseudo Ahahaha XD
👍
merci infiniment pour tout
👍
J'ai clisurle lien mai j'a pas pu télécharger le code source mais grâce à votre explication j'ai pu implémenter correctement le code de A à Z. Encore une fois merci.
Bonne continuation
Encore une fois merci bien Jason :)
De rien, à bientôt 👍
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
merci beaucoup, toujours aussi utile !
De rien, bonne suite du cours ✌
bonjour grand frère, merci pour la formation que le grand Dieu vous bénisse
Merci à toi 🙂
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 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
Bonsoir,
J'ai une question au sur la nouvelle structure player car je ne comprends pas. En effet, 45'33" il faut créer un nouveau header pour cette nouvelle structure. Pourquoi? pourtant cette structure est utilisée par l'autre ou plutôt les deux structures forment la pile...
Qu'est-ce que tu ne comprends pas ?
dans la fonction afficher comme dans length tu as parcouru la pile or dans la notion de pile on a pas le droit de parcourir non ? (on vide plutot la pile dans une autre et on remet )
Non, il est tout à fait possible d'afficher une Pile, que ce soit en remplissant une autre ou en la parcourant. Le principe de la Pile doit surtout respecter le fait que tu ne pourras dépiler que la dernière donnée qui a été empilée. Donc remplissage par le haut.
Titoonis
Aaaahhhhhhhh, Merci beaucoup!
De rien ;)
bonjour, comment vous faites pour ouvrir +sieurs fichiers en même temps sur une seule console?
j'ai la peine d'ouvrir +sieurs fichiers sur linux.
Bonjour, comment ça ouvrir plusieurs fichiers sur la console ?
Bonjour , svp dans popstack() vous avez fait un free(st) alors que vous n'avez pas déclaré de tableau dynamique dans cette fonction comment ça se fait ?
Si tu as bien regardé le code, on travaille toujours sur la même Pile, donc celle que tu nous avons créé au départ (en faisant des allocations avec malloc).
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
dans la fonction d'affichage tu fais st=st->next , or c'est un pointeur , cela n'affecte pas la suite (tu perd pas ta tete de pile) apres l'execution de la fonction ? et si on voulait que par exemple notre st a la sortie change on met come entree Stack* st ?
tout comme dans lenght le fait de faire st=st->next cela ne te fais pas perdre la tete de la pile ?
Le but n'est pas de perdre les données de la Pile, juste de les parcourir de la première à la dernière pour les afficher, ou compter le nombre d'élements. On ne fait donc que déplacer un pointeur sur chaque élément, rien de plus ;)
oui mais le fait de deplacer le pointeur ne te fera pas perdre l'adresse de l'element de tete ?
Non du tout ;)
Bonsoir Jason, j'ai un problème avec l'énumération / définition de type Bool, les valeurs
true et false ne sont pas reconnue par le compilateur de VS 2017. Ce dernier
mentionnant : identificateur indéfini.
C'est vraiment curieux car ta manière est censée fonctionner de partout comme tu l'as si bien dit.
Je ne pense pas que ce soit par ce que je code un projet Visual C++ (différent du C++ conventionnel)
Bonjour, c'est Visual Studio qui ne doit pas accepter cette syntaxe. L'IDE ne te propose-t-il pas une autre syntaxe ? Ou même de directement utiliser le type bool introduit par la suite en standard dans le langage C ?
FormationVidéo Il est en effet possible d'utiliser le type Book sans passer par l'énum mais VS2017 n'aime pas non plus l'alloc mémoire d' *élément, il mais que l'assignation (le égal) pose problème :
element = malloc(sizeof(*element));
Merci encore ^^
Alors soit ton VS2017 est mal configuré, soit il faut changer d'IDE. Car la syntaxe pour le malloc est évidemment correcte :)
Bonjour , Bon travail merci pour vos cours très complet , pourriez vous svp d'expliquer d'avantage les pointeurs sur les structures expliquer par des exemples indépendants , merci
Tout ce qu'il y a à savoir sur les pointeurs est détaillé dans le cours sur les pointeurs : th-cam.com/video/Qra-0U_jEKs/w-d-xo.html
Leur application est la même, que ce soit avec ou sans l'utilisation de structures ;)
Dans clear_stack(Stack st), je me demande et si on avait placé free(st) avant element= st ->next, est-ce qu'il efface toute les piles.?
Non, ça ne supprimerait que l'élément courant de la Pile (le premier en l'occurence). Oublie pas qu'on a fait un malloc() à chaque fois qu'on ajoute un élément à la Pile. Donc il faut autant de free()
Merci beaucoup pour ces cours sur le langage C! J'ai encore quelques lacunes mais je pense qu'à force de répéter ça ira, en tout cas ta formation m'est très utile et je compte bien continuer!
De rien, et en effet, n'hésite pas à t'exercer, faire des petits programmes, voire des projets, expérimenter, tester ce que tu apprends et voir ce que tu comprends de tout ça à l'arrivée 🙂
@@formation-video Oui en plus jusqu'à maintenant je ne faisais que visionner les cours (de peur d'endommager mon pc en cas d'erreur ^^) mais il faudrait que je teste moi même aussi en même temps que le cours ce serait mieux, merci pour ta réponse!
Oui, c'est clair, et puis tu ne vas pas endommager ton PC ;)
@@formation-video génial alors!!
J'ai finalement compris les piles , par contre j'ai une petite question au niveau de la fonction pop_stack, moi j'ai juste fait return st.next sans faire le free de st, parce que la fonction clear_stack s'occupe de tout après dans main, et cela a fonctionné , est-ce une bonne manière aussi? merci.
Non, la fonction pop_stack dépile un élément. Elle doit donc faire son travail de nettoyage de ce qui a été alloué. D'ailleurs, la fonction clear_stack() utilise pop_stack() pour libérer les ressources, ce n'est pas elle qui libère directement ce qui est alloué.
Bonjour Jason,
J'ai suivi ton programme et au moment de la compilation, j'ai un warning "assignement makes pointer from integer without a cast" à la ligne qui flush la pile dans le main. Cela dit le programme s'execute quand même sans erreur. As-tu une explication de ce warning ? Merci
Bonjour, peux-tu montrer le code ? Car cette erreur risque de poser problème pour l'exécution, il faudrait la corriger
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
vous aurez du utilisé un pointeur pour Player non pas utiliser la structure player directement dans la structure des pille
Par exemple dans la minute 52:20 si vous avez utilisé un pointeur ça va pas poser un probleme avec le "NULL "
Oui, c'est une solution préférable, mais je ne voulais pas compliquer le code ici, donc le exit() fait l'affaire également ;)
Salut. Je ne comprends pas comment tu peux utiliser Stack comme type quand tu définis ta fonction pour créer une nouvelle pile, alors que quand tu as définis ta structure, tu as donné deux noms possibles : StackElement et *Stack, mais pas Stack tout seul.
Stack new_stack(void).
Je comprends bien qu'il y-a plusieurs d'utiliser un pointeur et que tu peux ne pas mettre l'étoile devant, et dans ce cas tu obtiens non pas la valeur de la variable pointée, mais l'adresse où elle se trouve.
Pourtant, ici ce pointeur est le nom d'un type, alors Stack tout seul n'est pas définit comme un nom de type de variable, alors comment se fait-il que tu puisses créer une fonction avec comme Stack comme type de retour ?
Merci d'avance si tu peux apporter une réponse.
Je réponds sur ton autre commentaire alors ;)
Bonjour, ce que je n'arrive pas à comprendre, c'est le " *Stack " que tu as ajouté à l'énonciation de la structure de la pile. Tu dis qu'on "cache le pointeur" , ça non plus je comprends pas. Merci d'avance ! :)
Bonsoir, si je ne mettais pas cette syntaxe, il faudrait écrire la structure en faisant : Stack *st (au lieu de Stack st) et d'autres changements dans le code.
En le masquant, on évite les erreurs d'oubli de l'étoile par exemple, c'est tout :)
Ah d'accord, donc pour la machine " StackElement" et "*Stack" c'est exactement la même chose, non ?
Oui, la même structure :)
Voilà c'était pour être sûr, désolé pour la question bête xD. Merci ! :)
Il n'y a jamais de question bête =)
Vraiment merci beaucoup pour ces explications !!
j'ai juste un petite demande : t'a pas une idée sur le jeu de dames ou un exemple d'un projet d'une jeu ...?
Tu peux voir sur la playlist des exercices pour t'entraîner. Il y en aura plusieurs au fur et à mesure et à difficulté croissante : th-cam.com/play/PLrSOXFDHBtfF6lXQpJ4hBha76DsQufiEQ.html
Bonjour Jason. Alors il y a beaucoup de manipulations que tu fais avec les pointeurs, mais je ne les comprends pas tous.
Par exemple à 30:16 lorsque tu crées une fonction print_stack pour afficher la pile dans la console, je vois bien que tu parcours toute la pile avec une boucle while mais l'action que tu fais après le print, le "st = st->next" si j'ai bien compris, ça modifie la pile pointée par st vu que celui-ci est un pointeur?
Donc je pense avoir mal compris (puisque la fonction marche), mais pourquoi la pile ne se détruit pas à chaque fois que la fonction fini de s'exécuter?
Bonjour, l'instruction st = st->next permet de déplacer le "curseur" (l'endroit où l'on se situe pour le parcours sur l'élément suivant). En gros, on commence du premier élément (avec lequel on fera nos traitement), puis on passe à l'élément suivant, jusqu'à arriver à la fin (quand st->next vaut NULL).
Par ailleurs, la Pile n'a aucune raison d'être détruite puisque nous passons un pointeur vers celle-ci dans nos fonctions. Ce qui sera détruit à la fin de la fonction, c'et le pointeur qui a été créé au départ de celle-ci, pas la structure elle-même 🙂
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔵 Rejoindre 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
Merci pour la réponse précédente. Et à quel moment parle t-on de l’implémentation de l'assembleur et du compilateur?????
Pas dans ce cours, pas de rapport direct avec 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
vous etes un heros haha, vous etes super mon frere =D
🙂
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut :) , est ce qu'il est possible que je puisse utiliser le nom de la pile "stackElement" dans les fonction et non pas "stack" , sinon pourquoi ? merci vraiment !
Oui, tu peux bien nommer les choses comme tu le veux et adapter la structure comme tu préfères 🙂
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Super explication👏👏👏
🙏
Super explication comme toujours .... J'avais très peur de cette leçon mais maintenant je la trouve très simple et je la comprends très bien Merci Jason .
j'ai juste une remarque dans ce qui concerne la fonction top_stack dans ce fichier bit.ly/2VW5nET .
le problème se pose dans cette ligne : exit(EXIT_FAILURE); :
Si on utilise cette ligne, le compilateur va sortir du programme sans exécuter les instructions qui se suivent alors il faut renvoyer un nombre pour que la compilation du programme continue . On peut retourner un entier négatif comme vous l'avez fait dans la vidéo.
Bonne continuation ^^
Oui, si on veut être rigoureux, il faut bien gérer les codes de retour des fonctions et traiter cela ensuite dans la fonction main()
Salut, le compilateur me met ça quand je compile :
C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0xf): undefined refe
rence to `new_stack'
C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0x33): undefined ref
erence to `add_stack'
C:\Users\massy\AppData\Local\Temp\cca3OPEP.o:piles.c:(.text+0x47): undefined ref
erence to `add_stack'
collect2.exe: error: ld returned 1 exit status
Pourquoi donc ?
Vérifie que tu as bien fait les includes comme dans la vidéo.
Et de bien compiler en faisant -> gcc *.c -o prog
Pile ce qu'il fallait !
Salut à 18:30 tu fais l'allocation dynamique et je me demande pourquoi dans l'argument du sizeof tu utilise * element et non StackElement* , sachant que pour moi StackElement* est un pointeur de type StackElement et * element le déréferencement d'élément. Du coup j'ai comparé le résultat du sizeof(StackElement*) et sizeof(*element) et ce dernier est plus grand en plus si je comprend bien *element retourne ce qui est contenu à cette adresse et à cette adresse il y a une structure de type StackElement sans préciser l'adresse de next ou la valeur de cette élément.
Bonsoir :).
En temps normal, tu pourrais remplacer le "*element" du sizeof() non pas par "StackElement*" mais "StackElement" tout court (sans l'étoile). Or, j'ai pris l'habitude de mettre directement le nom du pointeur pour l'allocation plutôt que le type. De cette façon, si je venais un jour à changer le nom du type, je n'aurais pas à toucher aux allocations, c'est tout.
Donc, tu peux sans problème faire un *malloc(sizeof(StackElement))* si tu le souhaites.
Bonjour, j'ai une question, je ne comprends pas l'utilité d'une pile si celle-ci est structurée de la même façon qu'une liste. En fait, ce que je veux dire, c'est que la fonction push_stack est la même que insertHead d'une liste chainée d'entier, alors qu'est-ce qui différencie ces 2 méthodes ?
Bonjour, tout dépend de l'implémentation que les gens veulent en faire.
Grosso-modo, on a 3 types de structures :
Pile : on ajoute des données par l'avant, et on retire par l'avant (la première donnée à avoir été insérée sera la dernière à être retirée).
File : on ajoute des données par l'arrière, et on retire de l'avant (la première donnée à avoir été insérée sera la première à être retirée).
Liste : plus flexible, elle ne suit pas de contrainte particulière (on peut ajouter/supprimer depuis le début, la fin, et même en plein milieu de la structure).
Chaque structure répond donc à des besoins spécifiques :)
C'est compris, merci pour votre réponse :)
De rien ;)
Bonsoir, lorsqu'on crée notre structure pour la pile et que l'on crée une fonction pour retirer un un élément, le return renvoi t'il une adresse d'un élément de structure crée pour la pile ?
Bonjour, la fonction pop_stack() renvoie une "Stack", c'est-à-dire la pile moins l'élément qui a été supprimé, comme expliqué dans la vidéo 👍
Bonjour il y a un truc que je ne comprends pas dans la fonction servant à afficher la pile. J'ai l'impression que la boucle while vide la pile puisque la condition est "while (!empty_stack(st))" et pourtant quand on demande si la pile contient des elements apres son affichage la réponde et que oui il y a bien 47 et 14 dans la pile.
Bonjour, refais-toi l'algorithme dans ta tête (ou en faisant un schéma) en prenant l'ensemble du code de la fonction d'affichage, et tu comprendras 😉
Bonjour, la fonction d'affichage ne modifie pas la pile puisqu'elle ne renvoie rien en retour. Donc si tu demandes grâce à la fonction "is_empty_stack" si ta pile est vide après l'avoir affichée, c'est normal que le programme te dise qu'elle n'est pas vide.
@@Low_Han ah ouai ok merci
Pour commencer un grand merciii pour le travail que vous faites. C'est très instructif.
Sinon, une question, c'est quoi l’intérêt de donner 2 Alias de noms a la pile ?
Bonsoir, les deux alias sont là pour rendre le code plus lisible ensuite. Comme une Pile n'ayant qu'un seul élément est aussi une Pile, il serait bizarre de dire qu'une Pile contient des Piles. Donc, avec cette syntaxe, ça permet en lisant le code de comprendre qu'une pile (Stack) possède des éléments (StackElement).
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
@@formation-video C'est très claire, un très grand merci
gros merci 🥰
Je t'en prie, bonne continuation en C 👋
Est ce que *Stack et StackElement, c'est la même chose ? Je comprends pas pourquoi il y en a deux, et pourquoi l'un est un pointeur et pas l'autre ?
Stackement est un alias de Stack, c'est le principe du typedef 👍. C'est juste pour avoir deux nommages et que ce soit plus lisible au niveau du code (si on voit Stack, on pensera à la pile complète, et si on voit StackElement, on pensera à un seul élément d'une pile)
@@formation-video Mais pourquoi lorsque je remplace Stack par StackElement, j'ai une erreur ?
Si tu as bien regardé. Avec la notation "Stack", pas de pointeur indiqué, mais avec "StackElement", oui
@@formation-video donc je met un & devant ? Et sinon, j'ai une question, pourquoi on met un *devant une fonction et c'est quoi la différence ? Merci pour tes réponses.
Non : pastebin.com/hUsmXJDu
Si une fonction a comme type de retour int* par exemple, cela veut simplement dire qu'elle renvoie un pointeur sur int (entier).
Bonjour. Je suis en train d'apprendre le C et je te remercie pour tes vidéos qui sont très claires. Cependant je dois avouer que, si j'ai regardé les 16 premières vidéos sans soucis de compréhension, je ne comprends pas bien celle-ci.En effet je ne comprends pas , concrètement , à quel moment dois-je organiser mon code comme tu le fais dans la vidéo, en pile....?Je ne sais pas si je suis clair, où s'il y a un truc que j'ai zappé au cours de la formation. Merci d'avance pour ton aide.
Bonjour, à partir de cette séance 17, ce ne sont plus des notions propres au C directement. En gros, tu as appris les notions du langage. Ici ce sont des structures de données (parmi d'autres : graphes, arbres, files, listes) qui sont des structures très utilisées en informatique pour ordonner/trier/hiérarchiser des données.
Par exemple, la mémoire virtuelle utilisée par ton programme stocke les variables que tu déclares sur une Pile, qui fonctionne sur ce même principe. En intelligence artificielle, on va retrouver des arbres, pour calculer des itinéraires de graphes, etc.
@@formation-video ok merci beaucoup pour ta réponse
De rien 👋
parfait! et merci
👍
Bonjour, si je ne "veux pas" définir la structure avec typedef, mais simplement faire "struct StackElement",
comment dois-je ré-écrire la suite du code, pour les deux fonctions new_stack() et is_empty_stack() ? Je m'y perds, c'est encore pour moi un vrai labyrinthe...
Juste savoir ça, svp, ré-écrire sans typedef. Merci !
Bonjour, justement, "typedef" ne sert pas à définir de structure, mais à définir un alias.
Donc, oui, tu peux évidemment faire sans : pastebin.com/2YKJyxPy
Bonjour je comprends pas pourquoi apres avoir par exemple dépiler le 31, puis le 23 le programme dit que la pile est vide pourtant on a encore deux éléments
Bonjour, quel moment de la vidéo exactement ?
à 9:14 je ne comprends pas la ligne " struct StackElement *next " pourtant j'ai revus et bien compris la vidéo des pointeurs. Je dirais que le pointeur next pointe vers la structure StackElement mais je ne suis absolument pas sur. Peux-tu me corriger stp? Merci d'avance! Et au passage, super vidéo, comme toutes les autres d'ailleurs...
Bonsoir, en fait "next" est un pointeur vers une donnée de type "StackElement". Car un Pile, dans l'implémentation proposée, qu'est-ce que c'est ?
- Pile vide = NULL
- Stack avec 1 seul élément = Pile
- Stack avec 2 éléments = Pile
- Stack avec 100 élements = Pile.
Donc, pour chaîner chaque élément dans une Pile, le pointeur "next" pointe sur un autre élément de Pile (StackElement), sinon NULL (on est au bout de la Pile).
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
@@formation-video excusez moi, je ne comprends pas au niveau du pointeur:
celui ci est de type stackelement, mais il peut pointer des piles de plusieurs tailles differentes si j'ai bien compris, est ce logique qu'un pointeur d'espace fixe ici 4 bits puisse pointer plusieurs piles de tailles differentes ?
merci,
bjr. mrc pour cette vidéo (même si sa fais déjà 2ans). Pour être sur d'avoir bien compris, dans la fonction main, si je fait une initialisation de ma piles en fesant Stack *stack = new_stack(); sa ne marchera pas car stack est déjà un pointeur en fesant Stack stack; ?
Bonjour, le mieux est que tu testes pour voir ce que te donnera le compilateur ;)
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut, j'ai une question.A quoi ça sert de mettre "structure StackElement *next" à l'intérieur de la première structure ?Je ne me souvient pas que tu en ais parlé dans le cour "structure et type".
Pour le maillon suivant de la Pile.
Tu as du comprendre qu'une Pile qui n'a qu'un seul élement est aussi une Pile. Donc, elle a une valeur, et un pointeur vers l'élément suivant, et ainsi de suite. Voilà pourquoi on a donc un pointeur vers une Pile dans une Pile.
Merci j'ai enfin compris.
Bien =)
Bonjour/soir , je ne comprend pas la présence de ce pointeur ici 8:35 , il n’est pas défini et pointe sur rien (tu as dit qu'il pointe sur la pile mais d'où on sait ça), je ne comprend donc pas sa présence et je ne comprend pas non-lus l'utilité de *next (enfin tu l'as dit c'est pour passer a la pile d'en dessous) mais d'où on sait ça, comment ça se fait ?
En fait, je définis une double syntaxe pour ma structure de Pile. En gros, StackElement est une struct Stack, et Stack également.
Dans la structure elle-même, chaque élément de la pile doit être lié aux autres (sinon, chaque élément serait isolée et nous n'aurions aucune structure, mais que des variables isolées). Donc, on indique que chaque "maillon" (élément) de la Pile pointe vers un autre élément (sinon NULL).
Ce chaînage est nécessaire pour établir la liaison de nos éléments (tu retrouveras le même principe avec une File, une Liste, ou autre...) et permet de parcourir la structure (du premier au dernier élément).
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Bonsoir,
J'ai commencé par la création du pile mais quand j'ai compilé le code, j'avais toujours deux erreurs
le premier : error: expected identifier or '(' before 'float' float decimal
et le deuxième : error: expected ':', ',', ';', '}' or '__attribute__' before '{' token
{
Merci pour me répondre si vous avez une idée des ces erreurs.
c'est réglé, c'était des erreurs des autres fichier c qui sont dans le même dossier. J'ai crée un nouveau dossier et j'ai mis dedans que les fichier du travail sur le pile.
OK, ça ne devait pas être grand chose alors :)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Petite question, pour les stacks, on reféfini à chaque fois la variable stack pour mettre à jour notre pile mais dans ce cas ne serait-il pas plus opti de passer par l'adresse de la stack et de la manipuler via des pointeurs au lieu de ce passage par valeur ?
Regarde comment est définie la structure de la Pile
@@formation-video ok je comprend un petit rafraîchissement de mémoire sur les structures et les pointeurs dans les structures n'était pas de trop 😅 Merci pour ta réponse
👍
Super bien explique. au fait est ce que c'etait possible de creer ka pile et ses focntions sans pointeur? SI cest non est est uniquement parce que le passage pas valeur n'aurait pas permis d'agir sur la pile ou il ya d'autres raisons
Non, car ton ordinateur ne sait pas ce qu'est une Pile, ni l'espace que cela a besoin, et on ne connaît pas à l'avance le nombre d'éléments qu'elle aura. Donc : pointeurs et allocations de mémoire dynamiques.
@@formation-video oh je vois merci beaucoup pour avoir repondu. C'est aussi pour ca tu as utilise *Stack? Des fois quand tu utlise StackElement tu met * devant element mais quand tu utilise Stack tu ne met rien. est ce que ca veut dire que les deux sont equivalents? j'ai remarque que tu as utulise Stack uniquement avec les focntions aussi et StackElement avec les piles temporaires des fonctions
C'est surtout par rapport aux alias créés à partir de la structure avec typedef. Dans ma définition, j'ai créé deux alias :
- le premier pour dire que struct StackElement est équivalent à StackElement
- le second pour dire que struct StackElement est équivalent à *Stack
Ainsi, dans le premier on doit mentionner le pointeur, dans la seconde, il est masqué 👍
@@formation-video ah c'est plus clair maintenant merci beaucoup
De rien
Bonjour Jason et merci pour la vidéo, elle est très clair mais j'avoue ne pas comprendre l'intérêt de cette notion ou sa puissance malgré l'exemple en fin de vidéo. Aurais tu des exemple d'utilisation concrets des piles s'il te plait ?
Bonjour, un exemple concret et facile à imagine : la pile d'un programme. Pour faire simple : chaque variable déclarée dans ton programme ou chaque appel de fonction est enregistré sur une pile. C'est la structure utilisée en mémoire (virtuelle) pour gérer ces données (j'en parlerai d'ailleurs dans ma playlist Architecture)
Bonjour,
j'ai une question par rapport au type des fonctions et au pointeur caché dans la stucture "StackElement" :
Est-ce que le fait d'appelé une fonction par "Stack nomDeFonction (param 1, ..)" est en fait une manière de créer un pointeur de fonction ?
(afin de renvoyer l'adresse de la fonction et d'éviter de renvoyer l'adresse des éléments de la structure modifié par la fonction via des pointeurs)
Merci d'avance pour vos réponses et j'apprécie énormément vos cours qui sont clairs pour la majorité !
Bonjour, cela ne concerne pas les pointeurs de fonction, c'est juste pour avoir un nom simple (ici Stack) pour représenter la structure de notre pile 👍
@@formation-video D'accord. Je pense que je commence à comprendre : si on créer une fonction avec "Stack" on demandera de fait à la fonction de retourner non seulement une stack mais avec l'adresse de celle-ci (comme on déclare "*Stack" dans la structure) en plus, est-ce correcte ?
Merci pour votre réponse et j'adore vos vidéos même si ce n'est pas toujours évident vous m'aidez & m'apprenez beaucoup !
Oui, sinon on ne pourrait pas modifier notre structure de données 😉
Bonjour ! Je voulais savoir pourquoi l'invite de commande marque le message ci-après lorsque que je tente de compiler le programme "piles" ?
Je suis sous windows 10, si cela peut bien évidemment aider ^^
Merci de votre compréhension..
C:\Users\blute\AppData\Local\Temp\cc7dOG3Y.o:main.c:(.text+0xf): undefined reference to `new_stack'
C:\Users\blute\AppData\Local\Temp\cc7dOG3Y.o:main.c:(.text+0x1f): undefined reference to `is_empty_stack'
collect2.exe: error: ld returned 1 exit status
Bonsoir, dans l'archive fournie, tu as les fichiers "stack.c" et "stack.h".
Tu peux donc créer un fichier "main.c" avec la fonction main() dedans (comme j'ai fait dans la vidéo). Toujours dans ce fichier, il ne faut pas oublier au début d'ajouter la ligne *#include** "stack.h"* pour inclure le fichier d'en-tête de la Pile, sinon les fonctions ne seront pas trouvées par le compilateur, d'où ton message d'erreur.
Le problème persiste alors que la configuration est telle que tu l'énonce dans ton message...
Toujours le même message...
Y aurait t-il un autre moyen ?
C:\Users\blute\Desktop\Codage\Piles>gcc main.c -o prog
C:\Users\blute\AppData\Local\Temp\cctFSDxv.o:main.c:(.text+0xf): undefined reference to `new_stack'
C:\Users\blute\AppData\Local\Temp\cctFSDxv.o:main.c:(.text+0x1f): undefined reference to `is_empty_stack'
collect2.exe: error: ld returned 1 exit status
Erreur d'étourderie... Je viens de trouver la subtilité ^^
Très bonne soirée
PS : Une excellent travail côté réalisation vidéo ainsi qu'une solide pédagogie à en faire trembler certains professeurs ^^
Bonne continuation...
Ah, bien que ce soit bon enfin de ton côté, bonne continuation :) !
Salut,
je ne comprends pas pourquoi le fichier main.c fonctionne sans include stack.c
c'est bien stack.c qui contient la fonction new_stack() n'est ce pas , stack.h ne contient que le prototype de la fonction ,
de plus stack.c inclus stack.h , pourquoi pas ne pas l'inclure dans main.c au lieu de stack.h
merci !
Bonsoir,
Un include permet d'ajouter un fichier d'en-tête, et un fichier ".c" n'en est pas un, il s'agit d'un fichier source. Donc, chaque fichier source doit inclure les fichiers d'en-tête et bibliothèques dont il a besoin.
Merci pour la réponse rapide ! du coup il suffit d'avoir le fichier stack.c dans le même répertoire que main.c
Voilà. Pour le compilateur, tant qu'il connaît l'existence des fonctions (via le prototype), il saura retrouver celle-ci pour compiler le tout comme il faut et te faire un exécutable fonctionnel :).
Ne pas oublier que pour la machine, y'a pas de fonctions en réalité, ce ne sont que des adresses en mémoire, y compris pour les variables.
FormationVidéo c'est compris merci!
De rien :)
Merci Jason pour la qualité pédagogique et le pan sur les structures de données. On fait un saut, là partir de #17.
Bizarre, en testant le programme, la console retourne "gcc : error *.c : invalid argument . Je ne vois pas ce qui cloche..
Oui, les notions du C sont abordées les 16 premières vidéos. À partir de cette séance, tu ne vas voir que l'application dans quelques domaines du langage, et apprendre à manipuler quelques structures de données ;)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Pour ton erreur de compilation, regarde de bien faire : gcc *.c -o prog pour compiler l'ensemble de tes fichiers source (extension ".c" tout en les liant avec les en-êtes ".h")
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
merci Jason
De rien, à bientôt =)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Tu avait raison, au début il y a une semaine, je comprenais vraiment pas bien les piles, puis en faisant des schémas de mon côtés pour essayer de comprendre, je comprends mieux, mais d'ailleurs, c'était pas mieux de commencer par les listes chainées avant les piles ?
Merci pour tes vidéos !
Non, pas besoin de commencer avec une structure en particulier, étant donné que leur fonctionnement est différent de l'une à l'autre
@@formation-video ah d'accord, en gros celle là est plus simple. Mais une autre question, pour ajouter des éléments à la pile, on peut passer par des pointeurs au lieu d'incrémenter la nouvelle valeur directement à la pile ? En gros, on appelle juste la fonction (void) qui ajoute.
Pas compris, mais c'est ce qui est fait dans la vidéo. Dans une Pile, on ajoute des éléments par "le début". C'est ce que fait la fonction push_stack()
@@formation-video Pour ajouter un élément, toi tu as fait ça : stack = push_stack(stack, x);
Est ce qu'on pourrais modifier cette fonction pour juste l'appeler comme ça :
push_stack(stack, x);
Oui, il suffit d'adapter la structure de données 👍
Bonjour Jason, merci pour ce travail bien fait; j'aimemrais tout de même comprendre la ligne (struct StackElement *next) qui intervient dans la déclaration de la structure (typedef struct stackElement). Je m'attendais à ce qu'elle soit ignorée par le compilateur car faisant partie des champs de la structure créée.
Bonjour, et bien non, on peut parfaitement définir une structure dont un de ses membres est aussi du type de la structure.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut pour quoi tu n'as pas utililse la bibliotheque stdbool.h pour declarer le type booleen ? y a til une raison ?
Bonjour, parce que sur les anciennes normes, elle n'existait pas, et comme je ne peux pas garantir que les internautes l'auront, en créant le type, je suis sûr que ça fonctionnera chez tout le monde (et ça permet au passage de voir une application de l'énumération) 😉
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Cool merci pour l’information
De rien
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Je reprends on code pas à pas pour en comprendre la logique, après la création de la fonction qui libère la pile, j'ai 2 erreurs répétées plusieurs fois dans la console :
dans le "main" : assigment makes pointer from integer without a cast; par exemple ici : pile1 = ajoute_element_pile(pile1,14);
puis,
sur toutes mes fonctions, par exemple : sur "pile.c" et "main.c" :multiple definition of "nouvelle_pile"
Il me semble que mon code répète bien ton code même s'il y a d'autres noms... ?!
A priori, tu dois avoir des fonctions définies deux fois, et certainement d'autres erreurs dans ton code pour avoir ces messages là. Relis bien ton code, et compare avec le mien pour identifier les erreurs éventuelles ;)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Salut, y'a un petit point que j'arrive pas à éclaircir, pourquoi rajouter "*Stack" a la définition de la struct à la place de "Stack" ? On ne peux pas juste la déclarer comme pointeur à la création seulement comme ca "Stack *stack = ... " ?
Je l'avais expliqué dans les vidéos, c'est une manière de pouvoir employer la structure en masquant le pointeur. Je l'avais fait pour montrer que c'était possible (en faisant différemment sur d'autres structures de données de la formation pour que vous ayez plusieurs exemples d'implémentation).
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💙 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
Salut, quand je compile en tapant gcc *.c -o prg , Windows me retourne une erreur pour "*.c" argument invalide.
Je ne comprends pas pourquoi du coup.
Merci
Quelle est l'erreur exacte que t'affiche le terminal ?
sortie de l'écran:
Microsoft Windows [version 10.0.16299.125]
(c) 2017 Microsoft Corporation. Tous droits réservés.
C:\Users\HoangDiep\Desktop\TP_C\Nouveau dossier\PILES>gcc *.c -o prog
gcc: error: *.c: Invalid argument
gcc: fatal error: no input files
compilation terminated.
Voilà :(
Dans mon dossier PILES il y a bien les 2 fichiers .c (et pile.h)
Et tu as bien encodé tes fichiers en UTF-8 ?
Oui j'ai suivi tes instructions de la Première vidéo.
Bonjour, il semblerai qu'il y a une erreur sur le schéma à 25:40, on crée d'abord l'élément contenant la valeur 31, donc le sommet serait plutôt en bas ?
En tout cas, j'adore vos vidéos ça m'aide à comprendre beaucoup plus de choses sur le C !
Bonjour, non, le sommet de la pile, c'est le dernier élément qui a été ajouté à la pile (et celui qui sera le premier a être dépilé). C'est pour cela qu'il faut vraiment le voir comme une pile d'objets. Le sommet d'une pile n'est jamais l'élément qui se trouve tout en bas de celle-ci 😉
Prof, a propos d'une fonction de trie d'une pile on va faire la comparaison entre value ET next et on les permutes. C'est possible sur une pile??
Non, pas comme est conçue la structure. Une Pile n'est pas une structure conçue pour faire du tri, car on empile des valeurs par un côté, et on dépile par ce même côté. Si tu veux une structure triée, il faudra plutôt travailler avec une liste
Mais oui sinon, dans le principe, il suffirait de permuter les valeurs de deux maillons de la Pile. Exemple st->value avec st->next->value
FormationVidéo Merci j'ai compris prof, Sinon si j'ai bien compris le pointeur Des piles pointe sur L'element precedent et celui des files pointe sur le prochain non?? Pardon pour le derangement
Non, la Pile et la File utilisent le même système de pointeur vers l'élément suivant. Ce qui change entre les deux, c'est l'ordre d'insertion et suppression d’élément :)
comment tu fais pour copier coller juste en cliquant ?
sinon super video comme toujours
C'est ça, c'est une fonction standard de Sublime Text, bien pratique =)
Merci super tuto comme d'hab ! J'ai une question, peut-on changer tous les "StackElement *element" (dans les fonctions pop_stack ou push_stack) par des "Stack element" ? en fait j'ai du mal à comprendre la fin de ta déclaration de structure, quand tu écris "StackElement, *Stack"
Le meilleur moyen de le savoir, c'est de le tester, alors fais et tu verras quel comportement cela engendre au niveau de ton programme 👍
@@formation-video je viens de verifier et ca marche en faisant ce remplacement, ca me semble plus clair, je l'ecrirai donc comme ca maintenant, merci beaucoup ! (Neanmoins je ne comprends pas l'etoile devant le Stack a la fin de la declaration de la structure, en essayant de l'enlever j'ai des erreurs a la pelle)
Parce que c'est une notation avec pointeur, donc forcément, si tu l'enlèves... 😉
Bonjour, j'aimerai savoir pourquoi mon programme ne fonctionne pas :
main.c :
#include
#include
#include "stack.h"
int main(void)
{
Stack sta = newStack(); //on crée un pointeur nommé "sta" et de type Stack, qui prend la valeur du retour de la fonction newStack()
if(isEmptyStack(sta))
printf("La pile est vide.
");
else
printf("La pile n'est pas vide.
");
printStack(sta);
sta = pushStack(sta, 14);
sta = pushStack(sta, 47);
printStack(sta);
if(isEmptyStack(sta))
printf("La pile est vide.
");
else
printf("La pile n'est pas vide.
");
sta = clearStack(sta);
printStack(sta);
if(isEmptyStack(sta))
printf("La pile est vide.
");
else
printf("La pile n'est pas vide.
");
return 0;
}
stack.c :
#include
#include
#include "stack.h"
Stack newStack(void)
{
return NULL;
}
Bool isEmptyStack(Stack st)
{
//si l'adresse st de type Stack est NULL, on retourne true (voir enum du fichier "stack.h") et donc on sort de la fonction, donc, si on ne l'a pas fait, on retournera false (pas besoin de else)
if(st == NULL)
return true;
return false;
}
Stack pushStack(Stack st, int x)
{
StackElement *element;
element = malloc(sizeof(*element)); //on crée un tableau avec l'allocution dynamique pour notre pile
//si l'allocution a échoué, on quite le programme :
if(element == NULL)
{
fprintf(stderr, "Probleme allocation dynamique !!!
");
exit(EXIT_FAILURE);
}
//on met les valeurs en fonction des paramètres de la fonction :
element->value = x;
element->next = st;
return element;
}
Stack clearStack(Stack st)
{
StackElement *element;
//si la pile est déjà vide, on retourne le retour de newStack :
if(isEmptyStack(st))
return newStack();
//on donne à element une valeur en fonction de st, qu'on libère ensuite :
element = st->next;
free(st);
//on retourne le retour de clearStack en fonction de element, donc on va réexecuter la fonction jusqu'à ce que la pile soit vide, auquel cas il retournera le retour newStack() (voir plus haut) :
return clearStack(element);
}
void printStack(Stack st)
{
if(isEmptyStack(st))
{
printf("Rien a afficher, la pile est vide.
");
return; //on sort de la fonction sans retourner de valeur car la fonction est de type void
}
while(!isEmptyStack(st))
{
printf("[%d]
", st->value);
st = st->next;
}
}
stack.h :
#ifndef __STACK__H__
#define __STACK__H__
// --§__création d'un type booléen__§--
typedef enum
{
false, //0
true //1
}Bool;
// --§__définition d'une pile__§--
typedef struct StackElement
{
int value;
struct stackElement *next;
}StackElement, *Stack;
// --§__prototypes des fonctions__§--
Stack newStack(void); //cette fonction retourne une adresse de type Stack (voir structure)
Bool isEmptyStack(Stack st);
void printStack(Stack st);
Stack pushStack(Stack st, int x);
Stack clearStack(Stack st);
#endif
Merci beaucoup !
Bonjour, pour plus de lisibilité, peux-tu partager ton code via pastebin ?
Sinon, relis d'abord ton code, car je vois rapidement pas mal d'erreurs (par exemple dans la structure, tu as noté "stackElement" au lieu de "StackElement". Les minuscules/majuscules sont importantes.
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Merci beaucoup, mon code fonctionne très bien, et vos vidéos sont géniales !
Parfait 😉 !
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
pourquoi certaines fonctions ne prennent elles pas de double pointeurs, dans cetrains cas, je pense qu'il devrait y avoir des problemes des lors que nous quittons les fonction telle que push stack dans le main non ?
Tout cela vient de la manière dont a été définie la structure de la Pile. En revanche, tu verras que pour d'autres structures, j'ai fait une implémentation différente, histoire de montrer plusieurs manières de faire, et ce que cela change sur la syntaxe 😉
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Salut , merci pour cette super video .
Je travaille avec le code::Blocks et j'ai essayé mais dans le terminal il m'a dit que la pile est toujours vide malgrés que j'ai fais l'ajout des élements à l'aide de la fonction "push_Stack" j'ai pas compris pourquoi malgrés que j'ai fait aucun erreur dans le code .merci de me répondre !
Bonjour, pourrais-tu me montrer le code complet de ta fonction "push_stack" et comment tu appelles celle-ci dans ta fonction main() ?
bonjour , celui ci est la fonction "push_stack" :
Stack push_Stack (Stack st , int x )
{
StackElement *element ;
element = malloc (sizeof(*element)) ;
if (element ==NULL)
{
printf("problème allocation dynamique .
");
}
element->value=x ;
element->next =st ;
return element ;
}
et dans la fonction main :
int main(void)
{
Stack sta=new_Stack() ;
print_Stack(sta);
printf("
-----------------------------
");
sta = push_Stack(sta,13);
sta = push_Stack(sta,26);
sta = push_Stack(sta,80);
print_Stack(sta);
return 0 ;
}
OK, et donc avec ce code, l'ajout des éléments n'est pas fait tu me dis ? Tout semble correct pourtant. Vérifie bien en revanche que tout est bon sur le nommage des fonctions, je vois par exemple que tu as mis une majuscule sur le "S" de push_Stack, ou print_Stack, donc vérifier que c'est identique partout :)
Après si ton code compile, c'est qu'il n'y a pas d'erreurs
Dans ton archive d'entiers il manque un ; après int value dans la définition d'une pile et tu as laissé Player dans les paramètres de pushStack
Et quand j'inclu stack.h dans mon main ça marche pas alors que quand je fais include stack.c ça marche, je pense que c'est parce que je fais
gcc main.c -o prog
et que tu fais
gcc *.c -o prog
du coup j'imagine qu'il pack les 2 .c dans le prog.exe ?
Merci de l'avoir signalé, j'ai mis à jour l'archive et les liens sur la vidéo 👍
Et oui, il faut bien compiler tous les fichiers source, donc -> gcc *.c -o prog (ou éventuellement : gcc stack.c main.c -o prog)
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
is it possible to add an element in a specific position ??
No, the stack structure must respect the LIFO (Last In First Out) principle. For the insertion of elements at a specific position, we generally use a list 👍
Il y a une chose que je ne comprend pas le type "stack" qu'on met avant la fonction push_stack c'est le type de retour n'est ce pas,alors pourquoi vous n'avez rien retourner et pourtant ça marche mais quand moi je fait ceci:
stack push_stack(stack st,int x)
{
stackelement* element=(stackelement*)malloc(sizeof(stackelement));
if(element==NULL)
{
printf("probleme allocation memoire
");
exit(1);
}
element->value=x;
element->next=st;
return st;
}
ça ne marche pas alors que je retourne bien la pile st,
ça me met que la pile est vide a chaque fois quand j'exécute
Merci bien de me répondre
Bonjour, tu as du mal lire le code, car je retourne pourtant bien une pile, en faisant le *return element*.
vous avez fait un return element,je vais essayer alors,mais je comprends quand même pas pourquoi return st ne marche pas
et selon moi on devait retourné la pile st et non element,c'est la raison pour laquelle on fait sta=push_stack(sta,13)
la fonction retourne un stack (une pile) alors pourquoi ça marche pas avec st
Relis bien le code de la fonction. On créée une variable element, qui sera la future pile en fait. Sur la première case, on met la valeur passée à la fonction, et à la suite, on met l'ancienne pile.
Donc forcément, si tu retournes "st", cette Pile au début est vide donc tu retournes à chaque fois une Pile sur laquelle rien a été ajouté, voilà pourquoi c'est toujours vide.
Si le code est pas assez clair pour toi, remplace le nom *element* par *newStack* et tu comprendras mieux :).
merci c'est plus clair maintenant
la programmation modulaire est-elle nécessaire à la création d'une pile????
Non mais c'est plus propre de ne pas tout mettre dans un seul fichier. On définit les structures, énumérations et prototypes de fonctions dans un fichier d'en-tête. Puis on implémente les fonctions dans un fichier source.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
bonjour !
quand vou avez definie la pile vous avez mis :
typedef struct stackelement
{
int value ;
struct stackelement *next ;
}stackelement, *stack ;
la question est pourquoi vous avez fait "struct stackelement *next ;" est pas directement "stackelement *next " ; vous avez deja dit dans les video precedentes que le decalaration precedente suffit .
merci !
Bonjour, en testant avec le retrait du mot "struct", tu aurais tout de suite compris pourquoi je l'ai indiqué. Simplement parce qu'à ce stade (on définit la structure), l'alias StackElement = struct StackElement n'est pas encore valide et connu pour le compilateur 😉
Bonjour merci pour la formation
just une question pour m'éclaircir les idées un peut plus
on aurait pas pu faire : sta = new_stack();
pour vider la pile ?
et merci encore
Et que fais-tu de tout ce qui a été alloué en mémoire (et ne sera donc pas libéré = fuite mémoire) ? 😉
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video Ahhhhh c'est vrai, merci mec ^^
salam,
Svp monsieur on peut avoir un exemple sur la pile pleine!?
Merci !
Bonjour, comment ça ?
je veut dire si c'est possible de ns donner un exemple quand il y a une pile pleine
ou d'une autre façon, le test d'une pile pleine
Pardon pour le dérangement et je vs remercie monsieur :-)
Dans mon code, tu vois que je n'ai pas mis de limite à la Pile. Si tu veux adapter la structure à cela, tu peux utiliser une variable de type "int max_size" en mettant une valeur que tu veux.
Ensuite, il te suffira simplement de faire une fonction qui teste à chaque fois si on a atteint la taille max (quand on veut ajouter un élément notamment).
ça c pour les piles à la représentation contigus?
Oui, le principe même d'une Pile
Salut y-t-il eu des changements concernant l’affichage de pile ? , ça ne semble pas marcher pour moi
Bonjour, non, pourquoi y'aurait-il un changement ? Si cela ne fonctionne pas, c'est que tu as une erreur dans ton code.
Tu avais bien raison mon erreur était dû au push_stack Plutôt. Merci ✌️
Impeccable 👍
Bonjour !
On nous a donné un projet sur les piles et les files :
Comment implémenter une pile a l'aide de deux files ?
Comment implémenter une file a l'aide de deux piles ?
J'ai aucun problème sur tout ce qui concerne le code ! Ce que je comprends pas c'est la présentation (le schéma ) car je vois que c'est inutiles !
Pouvez vous m'expliquer l'implémentation svp !
Cordialement
Coucou,
C'est ton projet qui te demande précisément d'implémenter une Pile avec 2 Files, et une File avec 2 Piles ?
FormationVidéo ouais !
C'est étrange ce que l'on te demande sachant que les deux structures ont un fonctionnement complètement différent.
Pour une Pile, la dernière valeur insérée est la première que l'on peut retirer.
Pour une File, la dernière valeur insérée est la dernière que l'on pourra retirer.
Merci pour ce tuto
De rien =)
merci !
✌
Bonsoir jason champagne merci pour la vidéo j'aimerai savoir pourquoi lorsqu'on crée une pile on utilise l'allocation dynamique d'après ce que j'ai compris on utilise l'allocation dynamique lorsqu'on veut utiliser une donnée dont la taille n'est pas connu par notre ordinateur j'ai un problème ici car lorsque qu'on crée un variable de type int on a pas besoin d'allocation mais lorsqu'on veut créer une pile on dit comme l'avez écrit stackelement *element; p = malloc(sizeof(element)); étant donné qu'on a crée la structure stackelement en mettant un typedef est ce que la machine n'a elle pas déjà réservée un espace pour les types stackelement? puisque dans la vidéo sur les structures on entrait les username, hp et mp des Player sans avoir à faire une allocation dynamique
Bonjour, avec ces structures de données, nous manipulons des pointeurs vers ces dernières, d'où la nécessité d'allouer l'espace nécessaire, car non, l'ordinateur ne sait pas à l'avance quel espace occupe une Pile 👍
Un exemple simple pour illustrer cela : pastebin.com/KvYK87mE
@@formation-video ça veut donc dire que dès que l'on utilise un pointeur dont le type est défini par une structure, nous devons automatiquement faire une allocation dynamique?
Non, pas si tu déclares un pointeur pointant vers une structure déjà déclarée : pastebin.com/Bgzr3LpD
Si j'ai bien compris la notation *Stack correspond à l'adresse du premier élément de la pile, qu'on peut simplifier par la pile elle même ?
Non, la notation Stack* (et pas *Stack) indique un pointeur vers une structure de type Stack
Ah oui en fait on note StackElement * Stack j'avais pas bien compris que la notation était typedef struct StackElement* Stack
Je voulais parler de la notation Stack du coup
OK 👍
quelle est la difference entre la signature stack et StackElement , parce-qu'a un moment dans la vidéo il dit que c'est juste une notation differente " dans le typedef il avait mit a la fin StackElement , *stack " merci de votre aide :D
Tu as une notation qui masque le pointeur, c'est tout. Ce n'est pas obligatoire de procéder comme ça, mais je tenais à le faire pour montrer les possibilités que l'on a avec le "typedef" 😉
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Merci pour le tuto,
un seul truc Gênant c est la notation simplifiée de la *Stack ; troublante si confusion avec un pointeur.
Oui, sur d'autres structures, je ne l'ai pas utilisé, histoire de varier les notations et montrer plusieurs façons possibles de faire 👍
salut Jason !! d'abord je vous remercie pour tout l'aide que vous nous portez sincèrement depuis que je suis tes vidéos j'ai quitter tout les site que je suivis avant... enfin bref !
Ma question est la suivante : Comment peut on réaliser un algorithme de tri d'une pile ? j'ai essayé plusieurs fois mais je n'ai pas arrivé et est ce qu'il n y a pas une fonction prédéfinie pour l'utiliser merci d'avance jason ! c'est ASMA
love u
Bonjour, et bien si ta Pile contient des entiers, il suffit d'utiliser les algorithmes de tri habituels pour trier des nombres, simplement :).
Après, une Pile n'est pas une structure conçue pour stocker des données triées (puisqu'on empile par le haut, et la première valeur retirée de la Pile sera toujours la dernière qui y a été ajoutée).
Pour plus d'infos sur l'Algorithmie, je te renvoie sur mon début de cours : th-cam.com/play/PLrSOXFDHBtfGy7xYmf5LlNr8f-niDkf7_.html
donc si par exemple jai une pile de 4 element et que je veux deplacer le 3eme element en première position la solution est de parcourir jusqu'au 3eme element et je le dépile c'est faisable? bien sur en réorganiser le pointage ...
je suis débutante dans la programmation du coup j'essaye de reproduire les algos qu'on voit sauvant sur les piles je n'ai aucun interet de faire le tri et je ne sais pas si c'est utile ou pas lol pour etre honnete et puis je reve d'etre programmeur comme vous . merci pour votre réponse :) !
On peut se tutoyer ;).
Alors oui, tu peux procéder ainsi, mais le mieux, sera de dépiler toutes les valeurs qu'il faut (en les sauvegardant dans des variables), jusqu'à avoir la valeur à mettre en premier, puis ré-empiler les valeurs sauvegardées et finir par empiler la valeur qui sera en première position.
Après, un tri se fait surtout sur une Liste, pas vraiment une Pile qui n'est pas faite pour cela. Bon courage pour ton avancée en langage C
Ahh d'accord ! merci infiniment pour laide que tu ns porte Jason :) !
C'est avec plaisir, n'hésite pas si tu rencontres d'autres soucis, je réponds toujours aux commentaires :)
bonsoir monsieur j'ai un problème d'inconpréhension au niveau de la fonction clear_stack à la 25:29 en faisant free(st) pourquoi cela ne vide pas toute la pile puisque la pile c'est st
moi j'aurais fais free(element) et j'aurais fais une erreur svp eclairez moi
Parce que si tu regardes bien, on a alloué un espace (malloc) pour chaque élément de la Pile. Il faut donc naturellement libérer (free) chaque élément à son tour.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video je vois mais je ne sais pas si j'ai pas encore compris mais liberé la pile ( free(stack) ) c'est aussi la libéré de tout ses éléments pourquoi rappeler alors la fonction en retournant stack_element puisqu'il n'en a plus dans le pile
Pour faire simple, tu dois faire autant de free() que tu as fait de malloc(), donc pas qu'un seul 😉
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video je comprend bien ce fait je pense que ne saurais expliquer par écrit ce que je pense il y'aurait-il un moyen de vous joindre svp svp!!!!!!!
J'aimerais avoir un eclaircicement sur un truck ou deux :
Comment on reconnais une pile vide ? , le fait de dire vide ne veut pas dire que ca n'a pas de valeur sinon on aurais dit st->value , j'ai aussi un probleme des structurese et enumeration, ces derniers ne fonctionne pas , et si j'avais envie d'afficher le premier element enregistrer de la pile c'est a dire je fais commet ?
Bonjour, tout dépend de comment tu vas représenter ta structure. Dans mon implémentation, une pile est une Pile qui n'est rien, donc la valeur NULL.
Ensuite, le principe de la Pile n'est pas censé permettre de récupérer le premier élément empilé, mais le sommet de celle-ci. Après tu peux créer une fonction pour le faire, mais ta Pile deviendrait plus une sorte de Liste ;)
ok et quel est l'interet de faire un malloc au niveau de l'ajout
d'un element
je veux aussi connaitre la difference entre stack et stackelement
Et bien d'indiquer à ton ordinateur quelle place il doit réserver en mémoire. Car il sait allouer seul un entier, un caractère, un flottant, mais un élément de Pile, non
Stack est l'écriture qui va masquer le pointeur, StackElement celle qui ne le masque pas
bonjour pourquoi avoir écrit "st" dans vos programmes? que signifie t-il?
Bonsoir, "st" est simplement un nom que je donne à ma variable pour représenter la Pile. Mais j'aurais pu évidemment lui donner n'importe quel nom
+FormationVidéo merci!
:)
Avez-vous un site qui contient des exercices en longuage c
Non, j'en ai sur ma chaîne : th-cam.com/play/PLrSOXFDHBtfF6lXQpJ4hBha76DsQufiEQ.html
????
Sur le lien donné, tu as des vidéos d'exercices en langage C
salut.... Pouvez vous m'expliquer
Si y a-t-il une différence entre stackElement et *stack ou ils ont le même effet ?
merci.
Bonjour, rien qu'à l'écrire tu vois la différence, dans la syntaxe. StackElement masque le pointeur là où Stack ne le fait pas.
@@formation-video MERCI beaucoup 🙂.... merci de votre aide💙
De rien 👋
@@formation-video Bonjour, pourrais tu expliquer la notion de masquer le pointeur? Qu'est ce que ca veut dire exactement?
J' aime vraiment les vidéos mais je n'arrive pas à accéder au code laisser en description
Via les liens dans la description de la vidéo, tu arrives sur des pages de mon GitHub. Sur celles-ci, tu as sur la droite une icône pour télécharger l'archive : imgur.com/LqiOUki
Salut Jason, pourquoi dans l'enum l'ordre entre "true" et le "false" est important ? j'ai bcp peiné à retrouver cette erreur. En mettant l'inverse de ce que t'as fait je me retrouve avec un segmentation fault.
Et un Grand merci, pour tes vidéos ça m'aide énormément.
Bonjour, parce que par défaut, une énumération est numérotée, en commançant par 0, puis 1, etc. Dans ce cas, si tu viens à attribuer true à 0 et false à 1, je pense que tu comprends le problème que ça entraîne 😉
Ohh oui compris maintenant merci 👍🏻.
De rien ;)
Salut. J'ai un soucie avec l'allocation dynamique. Je ne vois meme pas les valeurs entrées
Bonsoir, n'hésite pas à montrer ton code (en t'aidant du site pastebin par exemple) pour voir où tu peux avoir une erreur :)
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
Ok. Je le de suite
D'accord
+---------------------------------------------------------------------------------------------------------------------------------------------+
|- 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
+---------------------------------------------------------------------------------------------------------------------------------------------+
J'ai essayer de vous contacter sur switch. Avec le username Nanitelamio
Et su votres site web. Je n'ai pas trouvé un espace appropie pour paster mon code
c'est cool et bien expliqué ...
Mais je me demande quand même un truc :
Est ce que ça ne fait pas exactement le même taf qu'un tableau ? Du coup c'est quoi le contexte pour utiliser une pile ?
Sans compter qu'en plus le tableau on peut cibler précisément un index pour récup une donnée. Du coup j'ai du mal à visualiser l'intérêt ?
Un tableau est conçu pour une besoin bien précis, là où la Pile a son propre usage aussi. On veut pouvoir implémenter des structures pour contrôler la gestion des données (dans une Pile, on ne veut justement pas pouvoir ajouter/retirer un élément de n'importe où)
bonjour;
pourquoi l'or de la définition d'une pile le pointeur *next est de type struct StackElement ?
Parce qu'on aurait pas notre structure sinon, où chaque élément est "rattaché" à un autre.
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
@@formation-video
bonjour;
j'ai pas bien compris votre réponse; le ptr *next doit contenir une adresse(pourquoi le type struct StackElement et non type int)
Parce que "next" est un pointeur vers StackElement, pas un pointeur sur "int"
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
◾ 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
◼ ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
Bonjour, je ne comprends pas bien le fait de donner deux nom au typage de pile : StackElement et *Stack. J'ai bien compris que la pile et un élement c'est la même chose mais pourquoi écrire *Stack et non Stack ? Merci à toi. Belle soirée.
Bonjour, c'est une syntaxe purement usuelle pour représenter une structure de Pile. Car ici, une Pile peut avoir 0, un ou plusieurs éléments, c'est une Pile dans tous les cas