Aller au contenu

debut en C


Messages recommandés

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

  • Réponses 69
  • Créé
  • Dernière réponse
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

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 :transpi:

Lien vers le commentaire
Partager sur d’autres sites

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 :D).

Faire un compilateur c'est un objectif fort louable mais qui ne sera pas facile à atteindre, donc comme le dit Mephisto, bon courage :francais:

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

vouspouvezrépéterlaquestion??

c'est ptêtre le réveil qu'est difficile, mais j'ai du mal à visualiser.

donnes un/des exemples :francais:

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

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

plutôt que de faire ça
struct 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

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. :francais:

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

avant de coder, ouvre vi / vim / prends une feuille de papier (le premier qui dit emacs ... STFU&GTFO! :francais: )

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

[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... :cartonrouge:
Lien vers le commentaire
Partager sur d’autres sites

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

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...)
+1

mais 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

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

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 :sm:

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...