Mephisto Posté(e) le 15 juillet 2009 Partager Posté(e) le 15 juillet 2009 mouai. enfin, en général, t'arrives à déterminer un ensemble fini d'éventualités. mais, si t'en veux encore, le plus simple est d'aller voire côté C++. chapitres templates & polymorphisme suivant le type envoyé, la fonction "saura s'adapter". ça a ses limites (avis aux gorets), mais c'est surpuissant. c'est aussi l'occasion de voire static_cast / dynamic_cast et éventuellement, les surcharges d'opérator (au passage,) c'est également peut-être le moment pour te débarrasser des structures, et de voire les différents conteneurs C++ (map, ...) ne fonce pas tête baissé non plus (c'est des notions plus high-level que ce que t'as pu voire, et la compil est d'autant plus verbeuse / ésotérique). et bon courage ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 15 juillet 2009 Auteur Partager Posté(e) le 15 juillet 2009 mouai. enfin, en général, t'arrives à déterminer un ensemble fini d'éventualités. ouais je sais je suis un peut perfectionniste dans mon genre. d'un autre coté si le c est pas prévu pour, bah... point-virgule ne fonce pas tête baissé non plus (c'est des notions plus high-level que ce que t'as pu voire, et la compil est d'autant plus verbeuse / ésotérique). mouai, j'aimerais bien me faire de bonne bases en C avant de passé a un autre langage, histoire d'avoir des automatismes correct et une certaine maitrise du sujet (et accessoirement de pas finir goret en plus d'etre faignan ...) l'idée que j'avais c'etait de reussir a codé un compilateur avant de passer au C++ (a condition que sa reste "faisable") après d'un autre coté si sa peut me permettre d'avancé plus vite, pourquoi pas... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 15 juillet 2009 Partager Posté(e) le 15 juillet 2009 Si tu veux assurer d'abord en C, arrêtes toi là (dans le sens où tu ne peux pas vraiment mieux faire) en te disant que le C++ réglera tous tes problèmes (enfin concernant les types variable, ce qui est déjà pas mal ). Faire un compilateur c'est un objectif fort louable mais qui ne sera pas facile à atteindre, donc comme le dit Mephisto, bon courage Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 16 juillet 2009 Auteur Partager Posté(e) le 16 juillet 2009 Si tu veux assurer d'abord en C, arrêtes toi là (dans le sens où tu ne peux pas vraiment mieux faire) en te disant que le C++ réglera tous tes problèmes (enfin concernant les types variable, ce qui est déjà pas mal ).Faire un compilateur c'est un objectif fort louable mais qui ne sera pas facile à atteindre, donc comme le dit Mephisto, bon courage Merki. juste histoire de clore le chapitre, je me demandait si le fait de stocké des tableau dans une liste représentait un interet quelquonque, puisqu il suffit d'assemblé plusieur liste pour obtenir le meme resultat, ce qui si je ne me trompe pas, à l'avantage d'etre plus "securisé" concernant la memoire en limitant (supprimant ???) les risques de débordement. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 17 juillet 2009 Partager Posté(e) le 17 juillet 2009 vouspouvezrépéterlaquestion?? c'est ptêtre le réveil qu'est difficile, mais j'ai du mal à visualiser. donnes un/des exemples Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 17 juillet 2009 Auteur Partager Posté(e) le 17 juillet 2009 vouspouvezrépéterlaquestion??c'est ptêtre le réveil qu'est difficile, mais j'ai du mal à visualiser. donnes un/des exemples heu.... plutot que de faire sa struct liste_tab { char string[TAILLE]; struct liste_tab *nxt; }; est ce qu'on a pas plutot interet a faire sa: typedef struct sous_liste sous_liste; struct sous_liste { char caractère; struct sous_liste *nxt; }; typedef struct multi_liste multi_liste; struct multi_liste { struct sous_liste* ptr struct multi_liste*nxt; }; sous_liste remplaçant ici le string[] (si je me suis pas planté) je me disais que meme si c'est peut etre un peut plus compliqué a gérer, sa "supprime" les contrainte de taille et ameliore la securité de l'ensemble. mais en gros toute la question revient à savoir quand (ou sur quels cirtères) privilégier la liste par rapport au tableau. (that is the question) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 17 juillet 2009 Partager Posté(e) le 17 juillet 2009 Comprends pas pourquoi tu parles de sécurité. Que tu es ta liste de char[TAILLE], ou un char[n][TAILLE], çà revient au même. Les différences listes/tableaux/autres sont dans les temps de recherche, d'accès, et d'écriture. Il est plus rapide d'insérer des éléments dans une liste doublement chaînée, mais plus long de sortir le nième élément, par exemple. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 17 juillet 2009 Partager Posté(e) le 17 juillet 2009 plutôt que de faire çastruct liste_tab { char string[TAILLE]; struct liste_tab *nxt; }; est-ce qu'on a pas plutôt intérêt à faire ça: typedef struct sous_liste sous_liste; struct sous_liste { char caractère; struct sous_liste *nxt; }; typedef struct multi_liste multi_liste; struct multi_liste { struct sous_liste* ptr struct multi_liste*nxt; }; sous_liste remplaçant ici le string[] (si je me suis pas planté) je me disais que même si c'est peut être un peut plus compliqué a gérer, ça "supprime" les contraintes de taille et améliore la sécurité de l'ensemble. mais en gros toute la question revient à savoir quand (ou sur quels critères) privilégier la liste par rapport au tableau. (that is the question) niveau sécurité, fragmenter tes données est un bon moyen d'empécher qu'une autre processus vienne réécrire dessus. cependant, ta méthode est loin d'être la plus simpe / rapide / optimisée d'autant plus que ça reste facilement exploitable: tu localises un char, tu le remplaces par ce que tu veux, tu lis l'adresse à l'emplacement suivant et seek jusque là, et tu recommences. mais, aller chercher jusque là, ça tient de la paranoya / folie furieuse. :) après, pour ma part (et pour te répondre), je privilégie la liste quand le tableau ne suffit plus. le problème du tableau est qu'à un x correspond un y (tab[x]=y) par contre, l'avantage de la liste est qu'une structure peut comporter une "infinité" d'éléments (lst[x].alpha=y lst[x].beta=z) donc, tant que je ne dois pas gérer plusieurs valeurs par élément, je reste sur un tableau, plus simple d'utilisation, plus léger, plus rapide et plus propre. edit: par contre, au niveau de la gestion, c'est super dégueulasse (on est d'accord), mais de là à dire que c'est plus compliqué... un set(), un get(), et c'est finie. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 17 juillet 2009 Auteur Partager Posté(e) le 17 juillet 2009 Comprends pas pourquoi tu parles de sécurité.Que tu es ta liste de char[TAILLE], ou un char[n][TAILLE], çà revient au même. Les différences listes/tableaux/autres sont dans les temps de recherche, d'accès, et d'écriture. Il est plus rapide d'insérer des éléments dans une liste doublement chaînée, mais plus long de sortir le nième élément, par exemple. sécurité : heu... j'ai subitement zappé malloc. donc,... l'idée pour choisir entre liste ou tableau c'est de calculé les différentes operations qu'il faudra pouvoir effectuer sur la liste, definir les objectifs en terme de performances/memoire, et en fonction, évalué différentes configurations possibles et leurs resultats, et faire le choix le plus approprié Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 17 juillet 2009 Partager Posté(e) le 17 juillet 2009 avant de coder, ouvre vi / vim / prends une feuille de papier (le premier qui dit emacs ... STFU>FO! ) réfléchie à ce que tu veux coder: - subdivise ton projet en fonctionnalités - définis leurs interactions - détermine quel est - selon toi - la meilleur méthode pour stocker les données qui devront s'échanger. Lien vers le commentaire Partager sur d’autres sites More sharing options...
RaphAstronome Posté(e) le 19 juillet 2009 Partager Posté(e) le 19 juillet 2009 Tu est en C++ donc au lieu de faire ça : char string[TAILLE]; Tu fais ça : std::string nomdevariable; Et pour un tableau de chaines : std::vector<std::string> tableau; le "vector" est à voir selon l'utilisation. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 19 juillet 2009 Auteur Partager Posté(e) le 19 juillet 2009 Tu est en C++ donc au lieu de faire ça :char string[TAILLE]; Tu fais ça : std::string nomdevariable; Et pour un tableau de chaines : std::vector<std::string> tableau; le "vector" est à voir selon l'utilisation. ??? non non je suis en C Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 20 juillet 2009 Partager Posté(e) le 20 juillet 2009 ton titre prête à confusion [édit: c'est mieux ] et @RaphAstronome: grillé à poster sans avoir lu un seul message :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 20 juillet 2009 Auteur Partager Posté(e) le 20 juillet 2009 [EDIT] bon bas, après avoir (tenté) de comparer les avantages incovenients des listes et des tableaux (de manière abstraite) j'en suis arrivé à la conclusion suivante :[..blablala.] faut que je reprenne le tuto sur l'algo (à peine commencer d'ailleur) sinon histoire de je teste le codage d'un editeur de texte en console avec grosso modo 2 fonctionnalité : ouvrir un fichier et creer un fichier existant. ces deux option doivent permettre de recupérer les caractères (stocké en fichier ou entré au clavier) dans une liste chainé et de la modifier : - ajout de caractère - suppression de caractère. et je seche sur la suppréssion, je me suis codé un fonction qui supprime le dernier caractère de ma liste chainé et j'ai creer une boucle histoire de "mimer" le fonctionnement des SDL_flip(screen) et autre du meme genre. grosso modo le probleme c'est que getchar() ne recupère les valeur qu'une fois qu'entré a été tapé donc j'arrive ni a utilisé le backspace ni escape. y'aurait pas une fonction qui prend une (et une seule entrée) du clavier ??? Veni, vidi, vici....ouaaaaiih... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 21 juillet 2009 Partager Posté(e) le 21 juillet 2009 bah, sous nux, c'est read() qu'il faut utiliser (avec éventuellement un ioctl() pour ne pas bufferiser l'input) mais sous windows ... aucune idée ... pour parfaitement gérer un clavier, la libc ne suffit pas, il faut passer aux appels système. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 21 juillet 2009 Auteur Partager Posté(e) le 21 juillet 2009 bah, sous nux, c'est read() qu'il faut utiliser (avec éventuellement un ioctl() pour ne pas bufferiser l'input)mais sous windows ... aucune idée ... pour parfaitement gérer un clavier, la libc ne suffit pas, il faut passer aux appels système. les appels systeme sa se gere pas en asm ..?. j'ai bien essayer de regarde du coté de la fonction system(). mais rien a ce sujet. j'ai aussi regarder du coté de signal.h mais... pas tout pigé.... et pour read je croit que l'equivalent sous win c'est fread avec stdin en entré, et il y a bien un equivalent de ioctl() contenue dans "winioctl.h" mais pour trouver un tuto c'est une autre paire de manche. (ne pas avoir concu de man sous windows est tout simplement une aberration...) en ce qui concerne le test des choix possible pour le stockage des données (liste/tableaux) j'ai bien fait le test, mais a cause de probleme tel que celui la sa reste vachement abstrait. bref tout sa pour dire que je sais plus dans quelle direction aller ... ya tellement de truc a voir. [EDIT]et encore bref..., si t'as une idée d'un programme (type de programme) que je pourrais coder histoire de m'entrainer a manipuler les structures de données (listes simple, double, piles, files, (matrice creuse) etc...) et à utiliser la methode que tu m'a indiquer. ce qui accessoirement me serait une base utile pour appliquer les techniques decrite dans les tutos sur l'algo histoire de tester et de valider les différents choix/configurations/optimisation que j'ai fais (sur les plans memoire, vitesse d'execution, simplicité du code) sa m'aiderais bien, par ce que là si je commence a voir les appel systeme je vais me paumer... [EDIT2] bon j'en ai trouver 1 mais je reste ouvert à toute suggestions Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 22 juillet 2009 Partager Posté(e) le 22 juillet 2009 les appels systeme sa se gere pas en asm ..?. j'ai bien essayer de regarde du coté de la fonction system(). mais rien a ce sujet.mouai, si on veut.enfin, tout se gère en ASM. mais les appels systèmes existent aussi en C. et système, c'est pour exécuter une commande (comme sur ton invite de commande) j'ai aussi regarder du coté de signal.h mais... pas tout pigé....les signaux, c'est encore un autre chapitre. ca permet de faire communiquer différents processus. sous nux, ça permet de le job control (arrête ou freeze et reprise d'un process), la communication avec les process père et fils (segfault, bus errors, sigchild, ...), ...et pour read je croit que l'equivalent sous win c'est fread avec stdin en entréfread existe aussi sous linux, mais jsuis pas adepte. peut-être que ça te permettrait de faire ce que tu veux, mais j'en doute. (test, c'est le meilleur moyen d'être fixé)et il y a bien un equivalent de ioctl() contenue dans "winioctl.h" mais pour trouver un tuto c'est une autre paire de manche. (ne pas avoir concu de man sous windows est tout simplement une aberration...)+1mais tu as leur doc msdnaa (amuse-toi bien...) en ce qui concerne le test des choix possible pour le stockage des données (liste/tableaux) j'ai bien fait le test, mais a cause de probleme tel que celui la sa reste vachement abstrait.bref tout sa pour dire que je sais plus dans quelle direction aller ... ya tellement de truc a voir. regarde si t'arrives à le faire avec fread.[EDIT]et encore bref..., si t'as une idée d'un programme (type de programme) que je pourrais coder histoire de m'entrainer a manipuler les structures de données (listes simple, double, piles, files, (matrice creuse) etc...) et à utiliser la methode que tu m'a indiquer.ce qui accessoirement me serait une base utile pour appliquer les techniques decrite dans les tutos sur l'algo histoire de tester et de valider les différents choix/configurations/optimisation que j'ai fais (sur les plans memoire, vitesse d'execution, simplicité du code) sa m'aiderais bien, par ce que là si je commence a voir les appel systeme je vais me paumer... faut démystifier les appels systèmes. c'est juste un groupe de fonctions, qui changent la vie. je sais pas à quoi ça ressemble sous winwin, mais ça doit pas être si terrible que ça.après, en idées bout de code, si tu veux bosser sur les structures de données, fais-toi une BDD. un getline() pour récupérer ta commande. ensuite, à toi de voire quoi y faire. les tableaux: gestion de la nomenclature / des types / assignation, consultation, modification des valeurs et des champs, ... réorganisation des sélections les relations: primary/foreign key, simples ou composées, ... ligne de commande: gestion de l'envoie de plusieurs commandes (choisis un délimiteur), les requêtes imbriqués, ... etc. [EDIT2] bon j'en ai trouver 1 mais je reste ouvert à toute suggestions quoi donc ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 22 juillet 2009 Partager Posté(e) le 22 juillet 2009 Rho ! C'est pas si terrible que ça la doc MSDN Tout développeur windows doit l'avoir installée sur son ordi comme ça on l'a toujours sous la main... Un peu comme un man (en moins détaillé certes). Bref... Pour tes histoires de clavier tu peux commencer à fouiller dans cette direction Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 22 juillet 2009 Partager Posté(e) le 22 juillet 2009 en effet, la doc MSDN est très utile. c'est plus le fait qu'il existe apparemment deux fonctions (ReadConsoleInput() et PeekConsoleInput()) pour faire quelque chose d'aussi simple qu'un read... (et encore, je simplifie...) et qu'ils aillent jouer avec un buffer privé que tu "déplaces" ou recopies... enfin merde ! on fait du C là ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 22 juillet 2009 Auteur Partager Posté(e) le 22 juillet 2009 en effet, la doc MSDN est très utile. ouais d'accord mais loin d'etre aussi pratique que man ou c++.com. [EDIT] pas si terrible... faut d'abord si retrouver et savoir ou chercher. [EDIT2] bon j'avoue que je viens aussi de trouver l'aide de visual meme si c'est moins "bordelique" que msdn, ya pas mal d'erreur type : ErrorCode : 7XE348 - 34DE839 -XXXX qui se produisent lors d'une recherche. vais voir avec le support. c'est plus le fait qu'il existe apparemment deux fonctions (ReadConsoleInput() et PeekConsoleInput()) pour faire quelque chose d'aussi simple qu'un read... (et encore, je simplifie...)et qu'ils aillent jouer avec un buffer privé que tu "déplaces" ou recopies... enfin merde ! on fait du C là ! ouais sa marche c'est un miracle... non je m'explique en cherchant a faire fonctionner ces ReadConsoleInput je suis tomber sur un post d'un mec qui cherchais a faire une version portable de getch() (inclus dans conio.h). et pile poile ca correspond à un stdin non bufferisée. +1 j'ai juste remplacé mes getchar et tout roule nikel. maintenant que c'est fait je vais voir a donné au user la possibilité de déplacé le curseur (humhum...) histoire qu'il puisse faire des modif au milieu du texte. sinon en dehors de sa je pense que je vais m'orienté vers un live CD d'ubuntu (excellent tuto sur le SDZ) histoire de tester (mais je suis quasiment sur d'avoir un pc tatoué, faut que je vois sa aussi...) et GNOME a l'air sympa [EDIT 2] et read et write existe bien sous windows après vérification, sauf que les fonction incluses dans la lib <unistd.h> sous unix sont fragmenté dans plusieur lib dont <io.h> pour read et write, dans <dir.h> pour d'autre, et encore d'autre lib dont j'ai pas idée. quel galère ces clivages UNIX/windows Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.