Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1526 Le 29/07/2011, à 14:21

Pylades

Re : /* Topic des codeurs couche-tard [5] */

@ helly : pourquoi tu ne gères que 255 valeurs possibles pour un octet ? Je sais bien que dans une chaîne en UTF-8 tu n’auras jamais d’octet à 0xff, mais il n’y a pas que l’UTF-8 comme encodage, tu peux avoir ça en UTF-16 ou en ISO-8859-1…


@ grim7reaper : à propos d’en-têtes, comment tu les fais, toi ? T’as un plugin qui s’en charge ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1527 Le 29/07/2011, à 14:25

helly

Re : /* Topic des codeurs couche-tard [5] */

@Pylade : yep mais c’est juste provisoire ça, en fait c’était surtout pour le test.
Dans le second jet j’vais étudier les wchar qui, parraît il, permettent de gèrer l’utf8 et plein d’autres trucs (mais j’me suis pas encore penché dessus).

Pour les filename ouais à l’origine je m’étais emêllé entre c++ et cpp, donc j’ai fait des mv mais le nom des entête a pas changé, c’est tout.
@Pylade : pour moi, j’utilise c.vim :
http://www.vim.org/scripts/script.php?script_id=213

Dernière modification par helly (Le 29/07/2011, à 14:29)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1528 Le 29/07/2011, à 14:31

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

@Πυλάδης : yep, c'est ce plugin il me semble (édit : bon bah le même qu'helly apparemment).
Mais j'ai pas mal retouché les snippets fourni parce qu'il ne me convenait pas vraiment. Et puis y'a encore certains raccourci pour lesquels j'ai pas pris l'automatisme (mais je l'utilise surtout en C++ en fait, en C moins).

Avant d'utiliser ce plugin, je faisait mes entêtes à la main avec ce système.

Dernière modification par grim7reaper (Le 29/07/2011, à 14:32)

Hors ligne

#1529 Le 29/07/2011, à 15:09

Pylades

Re : /* Topic des codeurs couche-tard [5] */

OK, merci.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1530 Le 29/07/2011, à 15:34

helly

Re : /* Topic des codeurs couche-tard [5] */

Hop voilà, mise à jour des remarques de grim.
Mis à part les trucs prévus en TODO pour le cas de l’unicode (ou du codage des caractères en général), d’autres remarques ?
http://coptere.dyndns.org/Trucs/enigma_v-0%2C5.0.0.7z


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1531 Le 29/07/2011, à 15:46

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Heu, sinon, ça fait quoi au juste cet énorme fichier plugin/c.vim ? Parce qu’il est un peu obèse, je trouve…

Et j’ai bien le fichier doc/csupport.txt installé, mais il ne veut pas me balancer l’aide. J’ai loupé quelque chose ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1532 Le 29/07/2011, à 15:47

pfranco

Re : /* Topic des codeurs couche-tard [5] */

Sécuriser la saisie, peut-être?
cin c'est bien, mais pas du tout sûr. Et pis, si y il a un espace dans le nom d'un fichier de rotor, ça va joliement boguer...
Bon, c'est sûr, un espace dans un nom de fichier, c'est déguelasse... Mais faut bien prévoir pour les utilisateurs, disons... inférieur mentalement big_smile .


Arch forever!!!
En attente de GW2!!!
"Regression testing"? What's that? If it compiles, it is good; if it boots up, it is perfect.
Linus Torvalds.

Hors ligne

#1533 Le 29/07/2011, à 17:02

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

helly a écrit :

d’autres remarques ?

Yep.

Je vois que tu as bien suivi mon conseil de préallocation du std::vector, mais t'appelles pas la méthode la plus adaptée.
Tu fais

rotor.resize(nb_rotors);

C'est pas con, sauf que là tu augmente la taille du tableau, pas sa capacité !
Le souci, c'est que par exemple si ton tableau a une taille qui vaut 7 et que tu fais un resize(42), tu vas agrandir ton tableau pour contenir 42 éléments (ça c'est bien) et tu vas appeller 35 fois le constructeur par défaut de Rotors pour que ton tableau contiennent 42 éléménts (ça c'est moins cool) !
Et pire, comme ton tableau est rempli, les push_back font devoir refaire des allocations et au final t'auras rien gagné niveau perf' et t'auras un std::vector avec une taille = 2*nb_rotors hmm

La bonne méthode c'est reserve, qui elle alloue de la taille en prévision mais n'agrandit pas le tableau lui‑même.
Ton code devient donc :

rotor.reserve(nb_rotors);


Sinon je ne sais pas si c'est voulu ou un simple oubli de ta part, mais tu ne passes toujours pas les std::string aux constructeurs (aussi bien pour Rotor que pour Enigma) par référence constante, donc t'as toujours des copies inutiles.
Et puis tu as passé NB à 128 (c'est bien) mais il n'est toujours pas unsigned.



Πυλάδης  a écrit :

Heu, sinon, ça fait quoi au juste cet énorme fichier plugin/c.vim ? Parce qu’il est un peu obèse, je trouve…

Bah tu peux regarder dedans, tu verras bien ce qu'il fait tongue
(en plus c'est commenté il me semble, enfin un minimum…)

Πυλάδης  a écrit :

Et j’ai bien le fichier doc/csupport.txt installé, mais il ne veut pas me balancer l’aide. J’ai loupé quelque chose ?

Ha ouais, tiens ça fonctionne pas chez moi non plus. J'avais jamais remarqué.
Bon bah doit y avoir un truc à faire alors…



@pfranco : ouais mais ça on en a déjà parlé hier, c'est prévu dans les TODO.

Hors ligne

#1534 Le 29/07/2011, à 17:11

helly

Re : /* Topic des codeurs couche-tard [5] */

Heuuu t’entend quoi par le coup des références constantes ?
Faire un (const std::string &nom) ?
Pour NB, ouais, c’est un oubli smile.
Après, pour le coup du reserve, t’as mal compris je crois !
Genre toi tu veux faire

rotors.reserve(n_rotors)
for (int cpt…)
rotors.push_back(Rotor(…));

Et moi :

rotors.resize(n_rotors)
for(int cpt…)
rotors[cpt] = Rotor(…)

C’est tout aussi bon nan ?

C’est juste qu’il ne fait pas mixer reserve et push_back, mais ce n’est pas ce que je faisais smile.

Ou j’ai mal compris ! sad

Dernière modification par helly (Le 29/07/2011, à 17:17)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1535 Le 29/07/2011, à 17:16

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

helly a écrit :

Heuuu t’entend quoi par le coup des références constantes ?
Faire un (const std::string &nom) ?

C'est tout à fait ça.
Quoique selon ma préférence personnelle c'est plus

const std::string& nom

big_smile
Mais le résultat est le même.

Dernière modification par grim7reaper (Le 29/07/2011, à 17:22)

Hors ligne

#1536 Le 29/07/2011, à 17:17

helly

Re : /* Topic des codeurs couche-tard [5] */

voir mon édit wink
(ce message sera supprimé quand l’edit sera pris en compte.)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1537 Le 29/07/2011, à 17:20

helly

Re : /* Topic des codeurs couche-tard [5] */

Et pour les const std::string &, pourquoi le faire que pour les string et pas pour les int ?
Ça vient du fait que les strings ne sont pas des types « naturels » ?


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1538 Le 29/07/2011, à 17:27

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Sinon vu que tu as passé certaines variables en unsigned, faudra aussi passer tab en unsigned sinon t'as un warning ici

pos = (pos + tab[ind]) % NB;

Sinon vu que tu as passé certaines variables en unsigned, faudra aussi passer tab en unsigned sinon t'as un warning ici

pos = (pos + tab[ind]) % NB;

Et faut déclarer ind en unsigned, sinon t'as un warning ici

int ind = ((pos + cran) > NB) ? pos + cran - NB : pos + cran ;
helly a écrit :

Et pour les const std::string &, pourquoi le faire que pour les string et pas pour les int ?
Ça vient du fait que les strings ne sont pas des types « naturels » ?

Oui.
Quand tu passes un std::string par copie t'appelle le constructeur par copie, ce qui peut être lourd selon la taille de ta chaîne.
Autant passer une référence (qui est un pointeur constant donc sur du 32 bits on va dire 4 octets). On ajoute le const pour bien préciser qu'on ne va pas modifier la chaîne.
Pour un int tu pourrais le faire mais y'a pas de gain vu qu'en général un int fait la même taille qu'un pointeur.


Pour le resize vs reserve, j'arrive…
Ha bah c'est vite vu en fait : enigma.c++ compile pas !
Au début pour une typo : rotor au lieu de rotors.
Mais une fois corrigé bah ça compile toujours pas car resize (comme je le dis plus haut) appelle le contructeur par défaut.
Or, avec les problèmes de ces deux derniers jours tu sais que ce constructeur n'existe actuellement pas pour Rotor smile
Donc vaut mieux utiliser reserve/push_back.

helly a écrit :

Après, pour le coup du reserve, t’as mal compris je crois !

Mal compris non, lu trop vite oui hmm
Effectivement, tu ne fais pas de push_back donc t'auras pas un tableau de 2*nb_rotors.
Cela dit, c'est pas génial non plus, Cf. ce qui suit wink

helly a écrit :

Genre toi tu veux faire

rotors.reserve(n_rotors)
for (int cpt…)
rotors.push_back(Rotor(…));

Et moi :

rotors.resize(n_rotors)
for(int cpt…)
rotors[cpt] = Rotor(…)

C’est tout aussi bon nan ?

Oui et non.
Oui car au final t'auras le même résultat que moi (si ça compile bien sûr, donc faut que tu définisses un constructeur par défaut).
Non car ta version est plus mauvaise que la mienne.
Ma version fait :
- alloue une taille mémoire de N éléments (reserve) ;
- ajoute les N rotors (push_back en boucle).

Ta version fait :
- alloue une taille mémoire de N éléments et remplis le avec  N rotors par défaut (resize) ;
- remplace chaque rotors par défaut par un rotor inialisé par copie, en appelant l'opérateur d'assignation = (rotors[cpt] = Rotor(…)).

On voit que ta versions va créer N rotors pour rien.



Enfin, pour terminer la série des modifs à apporter pour le passage à unsigned.
Dans enigma.c++
La boucle

for (int cpt = (nb_rotors-1) ; cpt >= 0 ; cpt--)

provoque un warning.
Le mieux, je pense, serait d'écrire ton code dans un style plus C++ : utiliser des itérateurs plutôt que des boucles de parcours avec compteur wink
Genre quelque chose comme ça :

std::vector<Rotor>::reverse_iterator rit;
for(rit = rotors.rbegin(); rit < rotors.rend(); ++rit)
    i = rit->Precedent(i);

Et cette ligne là aussi fait un warning :

cliquet = rotors[cpt].Tourner();

Faut déclarer cpt en unsigned



Je viens de me rendre compte que j'avais pas encore regarder le main.c++.
Pour cette ligne

Enigma eni(nb,nref);

faut que tu penses à déclarer nb en unsigned

Et ici

fic2 << (char)eni.Chiffrer(c);

Les cast à-la-C sont mal vu en C++, dans le cas présent utilise plutôt un static_cast.

Cette fois, je crois que j'ai fait le tour.
Pfiou ^^

Dernière modification par grim7reaper (Le 29/07/2011, à 18:15)

Hors ligne

#1539 Le 29/07/2011, à 18:17

Pylades

Re : /* Topic des codeurs couche-tard [5] */

grim7reaper a écrit :

(en plus c'est commenté il me semble, enfin un minimum…)

Ben, pas tant que ça…
Nan mais en fait votre truc c’est pour transformer GVim en un IDE ; c’est bien trop pour me besoins…


grim7reaper a écrit :

Pour un int tu pourrais le faire mais y'a pas de gain vu qu'en général un int fait la même taille qu'un pointeur.

Chez moi les pointeurs sont même plus gros que les int. :]


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1540 Le 29/07/2011, à 18:26

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Πυλάδης a écrit :

Nan mais en fait votre truc c’est pour transformer GVim en un IDE ; c’est bien trop pour me besoins…

GVim mad !!
Mollo, les insultes stp.
Mais oui, ça rapproche Vim d'un IDE.

Sinon

/me a écrit :

Avant d'utiliser ce plugin, je faisait mes entêtes à la main avec ce système.

Tu peux toujours faire comme ça.

Πυλάδης a écrit :
grim7reaper a écrit :

Pour un int tu pourrais le faire mais y'a pas de gain vu qu'en général un int fait la même taille qu'un pointeur.

Chez moi les pointeurs sont même plus gros que les int. :]

Ouais, d'où mon « en général » wink
Mais ça reste mieux de passer un int par copie que par référence constante (y'a les instructions asm dispo qui comptent aussi)

Dernière modification par grim7reaper (Le 29/07/2011, à 18:28)

Hors ligne

#1541 Le 29/07/2011, à 18:44

helly

Re : /* Topic des codeurs couche-tard [5] */

Ouais, j’ai vu que la nouvelle version ne compile pas, et la jme prend les pieds en passant avec des unsigned int y’a des parties qui ne sont pas chiffrées comme il faut.
’faut que je reprenne ça lentement !


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1542 Le 29/07/2011, à 19:07

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Au pire repasse en int pour le moment, c'est pas dramatique
(c'est dans ces cas‑là que l'utilisation d'un gestionnaire de version est appréciable smile)

Hors ligne

#1543 Le 29/07/2011, à 19:23

helly

Re : /* Topic des codeurs couche-tard [5] */

Si, c’est bon voilà ^^.
Tout est passé en unsigned.
Il me reste plus qu’à faire taire 3 warnings et regarder ton affaire d’itérateurs (j’avais vu ça dans le bouquin de stroustrup mais ça me faisait peur, alors j’ai vite passé :] ).

edit : et moi, mon gestionnaire de version, c’est p7zip tongue.

Dernière modification par helly (Le 29/07/2011, à 19:24)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1544 Le 29/07/2011, à 19:52

Pylades

Re : /* Topic des codeurs couche-tard [5] */

grim7reaper a écrit :
Πυλάδης a écrit :

Nan mais en fait votre truc c’est pour transformer GVim en un IDE ; c’est bien trop pour me besoins…

GVim mad !!
Mollo, les insultes stp.
Mais oui, ça rapproche Vim d'un IDE.

Ben, 95 % du code du plugin est spécifique à GVim, hein…


grim7reaper a écrit :

Mais ça reste mieux de passer un int par copie que par référence constante (y'a les instructions asm dispo qui comptent aussi)

Ah, mais toujours mieux de passer un int par valeur !
D’ailleurs, chez moi la référence constant est plus grosse que l’int, justement. :]


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1545 Le 29/07/2011, à 20:28

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

helly a écrit :

regarder ton affaire d’itérateurs (j’avais vu ça dans le bouquin de stroustrup mais ça me faisait peur, alors j’ai vite passé :] ).

C'est pas si terrible que ça en à l'air.

helly a écrit :

edit : et moi, mon gestionnaire de version, c’est p7zip tongue.

On a connu mieux tongue
Je pense que t'aurais à y gagner à te mettre à un gestionnaire de version.
Bon, ce topic est plein de fanboy de Git donc tu peux commencer par celui‑là :]



Πυλάδης a écrit :

Ben, 95 % du code du plugin est spécifique à GVim, hein…

95% du code != 95% des fonctionnalités, hein…
Les interfaces graphiques ça puent, faut toujours masse de code pour quatre fois rien.

Πυλάδης a écrit :
grim7reaper a écrit :

Mais ça reste mieux de passer un int par copie que par référence constante (y'a les instructions asm dispo qui comptent aussi)

Ah, mais toujours mieux de passer un int par valeur !

Non pas toujours, justement…
Ça dépend de la taille d'un int vs la taille d'un pointeur (chui pas certains que sizeof(void*) soit toujours >= sizeof(int), du moins je trouve rien à ce sujet dans le standard) ET de l'ISA (Instruction Set Architecture).

Dernière modification par grim7reaper (Le 29/07/2011, à 20:29)

Hors ligne

#1546 Le 29/07/2011, à 20:58

kamui57

Re : /* Topic des codeurs couche-tard [5] */

Bonjour,

ya moyen de faire un truc du genre

for i in {1..$variable}

en bash ?

edit : c'est bon

for (( COMPTEUR_FICHIERS=1; COMPTEUR_FICHIERS<=${NOMBRE_FICHIERS}; COMPTEUR_FICHIERS++ ))

(évidemment suffit que je poste pour que je trouve...)

Dernière modification par kamui57 (Le 29/07/2011, à 21:04)


Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console

Hors ligne

#1547 Le 29/07/2011, à 21:09

helly

Re : /* Topic des codeurs couche-tard [5] */

Bon, voilà aussi pour les warnigns, un seul dont je ne peux pas me passer.
Maintenant, ces titérateurs…


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1548 Le 29/07/2011, à 21:09

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

@kamui57 : Ou sinon :

for i in $(seq $variable)

Mais bon je suis pas un gourou du Bash (je peux pas blairer Bash en fait…) donc on peut sûrement faire mieux.
Déjà je sais qu'il y a une nouvelle syntaxe pour ``

Édit : utilisation de la syntaxe plus-mieux pour ``

Dernière modification par grim7reaper (Le 29/07/2011, à 21:12)

Hors ligne

#1549 Le 29/07/2011, à 21:09

helly

Re : /* Topic des codeurs couche-tard [5] */

`` → $() wink.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1550 Le 29/07/2011, à 21:11

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

ouais voilà c'est ça, merci helly !
J'avais essayé ${}, mais forcément ça fonctionnait moins bien (quand je dis que je suis une buse en bash, c'est pas une blague…)

Hors ligne