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.

#1951 Le 12/09/2012, à 12:01

tshirtman

Re : /* Topic des codeurs [7] */

Beaucoup de gens font du mauvais javascript, ça vient de son historique (utilisation pour les bricolages dans les navigateurs, et bugs in peu partout dans ceux cis), mais il y a énormément d'innovation dans le monde javascript ces dernières années, c'est vraiment un langage qui vaut le coup de jouer avec. Faut juste l'apprendre correctement.

(bon, y'a quelques bizarreries dans le langage, mais quel langage n'en a pas? ^^)

Hors ligne

#1952 Le 12/09/2012, à 13:14

Pylades

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

@doudoulolita : pour JavaScript, n'écoute pas ce sale triste de Πυλάδης tongue Edit : et The Uploader un peu plus, mais pas beaucoup non plus tongue

Bah c’est juste que c’est « risqué » de s’investir dans le JavaScript. Je ne dis pas que c’est un mauvais langage, mais les contraintes pour un langage destiné à être exécuter pour du Web font qu’au bout d’un moment, on trouve ça chiant, puis on abandonne. Ce n’est qu’une expérience personnelle, mais j’ai l’impression qu’elle est largement partagée. C’est tout. tongue


“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

#1953 Le 12/09/2012, à 14:58

Kanor

Re : /* Topic des codeurs [7] */

abandonne ? tu a une idée en tête !

Hors ligne

#1954 Le 13/09/2012, à 19:25

Pylades

Re : /* Topic des codeurs [7] */

Juste un question, aux amateurs de Cmus… Est-ce normal qu’après chaque reboot, le volume revienne à 74 % ? Je n’ai pas vu d’option qui semblait fixer ça, ça existe ?


“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

#1955 Le 17/09/2012, à 15:10

Elzen

Re : /* Topic des codeurs [7] */

Deux p'tite question Python :

– Y a moyen de savoir simplement quelle est la dispo clavier active ? (Genre, une info comme « Azerty », « France Alternative », « fr oss », tout ça). En PyGTK, avec la Xlib, ou peu importe, mais un truc qui ne demande pas de lancer une commande shell et de parser la sortie standard, si possible.

– En PyGTK, y a moyen de gérer simplement (sans avoir recours à la Xlib, quoi) une popup comme celle des menus, mais pour autre chose qu'un menu ? Genre, j'voudrais faire apparaître une petite fenêtre avec un curseur dedans, et que dès qu'on clic n'importe où sur l'écran, en dehors de ladite fenêtre, ça la ferme.

Si quelqu'un avait une idée/un bout de doc à me suggérer à ce sujet, je prends wink

Hors ligne

#1956 Le 17/09/2012, à 20:10

grim7reaper

Re : /* Topic des codeurs [7] */

Pour faire mumuse avec le clavier, je pense qu’il faut passer par XKB (X Keyboard Extension).
De là, il te faut un wrapper Python du genre ça je pense.

Édit : peut-être que xklavier est suffisant en fait, si je me base sur ce code.

Sinon j’ai pas trop compris le point 2.

Dernière modification par grim7reaper (Le 17/09/2012, à 20:48)

Hors ligne

#1957 Le 17/09/2012, à 21:16

Pylades

Re : /* Topic des codeurs [7] */

Ce bidule est impossible à installer, dépend de Gnome et est de l’aveu des ses auteurs limité à des tâches très simples.

Ceci semble meilleur : http://devel.randomink.org/projects/python-xklavier.

Oui, complètement grillé, mais ce n’est pas grave. tongue

Dernière modification par Πυλάδης (Le 17/09/2012, à 21:19)


“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

#1958 Le 18/09/2012, à 10:01

Etoma

Re : /* Topic des codeurs [7] */

\o/
Première séance du cours de python...
Python va côtoyer C au premier semestre en programmation.


"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox

Hors ligne

#1959 Le 18/09/2012, à 13:38

Elzen

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Édit : peut-être que xklavier est suffisant en fait, si je me base sur ce code.

Yep, faut que je creuse un poil plus, mais à première vue, j'arrive à récupérer toutes les infos requises.

Πυλάδης a écrit :

Oui, complètement grillé, mais ce n’est pas grave. tongue

Surtout que ton lien ne marche pas (et quand je lis « dépend de GNOME », venant de toi, j'me méfie tongue)

grim7reaper a écrit :

Sinon j’ai pas trop compris le point 2.

Yep, j'me suis mal exprimé.

En gros, quand tu ouvres un menu (que ce soit le menu contextuel, par une barre de menus, ou autres), t'as une fenêtre pop-up qui s'affiche, et dès que tu cliques n'importe où dans l'écran, à l'extérieur de cette fenêtre, bah le clic est quand même intercepté (il ferme la fenêtre du menu et rend la main au reste du système).

Je voudrais reproduire ce comportement-là, mais pour des fenêtres gérées « à la main », autrement que par un gtk.Menu, afin de pouvoir ajouter d'autres composants dedans (gtk.Menu râle dès que tu essayes de lui ajouter autre chose qu'un gtk.MenuItem). Genre, typiquement, pour faire apparaître un curseur à régler lors d'un clic sur une icône du systray, par exemple.

Créer la fenêtre popup et la placer comme il faut, c'est assez simple ; ce que je ne sais pas faire, c'est faire en sorte qu'elle disparaisse dès que l'utilisateur clique ailleurs dans l'écran.

Hors ligne

#1960 Le 18/09/2012, à 16:35

grim7reaper

Re : /* Topic des codeurs [7] */

Ok, tu trouveras peut-être une solution ou une piste ici (le dernier post peut-être ?).

Dernière modification par grim7reaper (Le 18/09/2012, à 20:12)

Hors ligne

#1961 Le 18/09/2012, à 18:52

Pylades

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

(et quand je lis « dépend de GNOME », venant de toi, j'me méfie tongue)

Je parlais du DE, là. tongue


“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

#1962 Le 18/09/2012, à 20:20

Shanx

Re : /* Topic des codeurs [7] */

Premier post ici. cool

Je débute tout juste les cours d’algo (chiants) et ceux de C (cool), donc mes questions seront celles d’un noob…
La première que j’ai concerne un truc que je fais pour le fun : un programme du type “plus ou moins”, en C. Pour l’instant je voulais faire dans le cas de 2 joueurs, donc voilà ce que j’avais fait :

#include <stdio.h>

int main() {
        int a; //nombre de joueurs
        int i; //compteur
        int nombreMystere;
        int nombreEntre;
        printf("Combien de joueurs ? ");
        scanf("%d", &a);
        if (a=2) {
                i = 1;
                printf("Entrez le nombre mystère : ");
                scanf("%d", &nombreMystere);
                printf("Changement de joueur…\n");
                sleep(1);
                do {
                        printf("Entrez un nombre : ");
                        scanf("%d", &nombreEntre);
                        if (nombreEntre < nombreMystere) {
                                printf("Plus haut !\n");
                                i++;
                        }
                        else if (nombreEntre > nombreMystere) {
                                printf("Plus bas !\n");
                                i++;
                        }
                } while (nombreEntre != nombreMystere);
                printf("C'est pas mal, mais il t’a quand même fallu %d coups…\n", i);
        }
        else {
                printf("Prout");
        }
}

Alors actuellement y’a deux trucs qui me chagrinent : premièrement, quand le premier joueurs donne le nombre, le second pourra le lire (c’est bête…). Ensuite, et c’est d’ordre plus “théorique”, je me demande si pour la lisibilité du programme il n’aurait pas fallut que je créé deux fonctions correspondant chacune au nombre de joueur(s) et qui seraient appelées dans le if de mon main(). Mais je ne sais pas comment faire ça, vu qu’une fonction demande des paramètres (je crois)…

EDIT : voilà une nouvelle version, plus complète :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
        const int MAX = 100, MIN = 1; //pour la génération du nombre aléatoire
        int a; //nombre de joueurs
        int i; //compteur
        int nombreMystere; //s'il y a deux joueurs
        int nombreEntre;
        i = 1;
        a = 0;
        do {
                printf("Combien de joueurs ? ");
                scanf("%d", &a);
                if (a !=1 && a != 2) {
                        printf("Un ou deux joueurs, pas plus, pas moins.\n");
                }
        } while (a != 1 && a != 2);

        if (a==2) {
                printf("Entrez le nombre mystère : ");
                scanf("%d", &nombreMystere);
                printf("Changement de joueur…\n");
                sleep(1);
        }

        else {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        }

        do {
                printf("Entrez un nombre : ");
                scanf("%d", &nombreEntre);
                if (nombreEntre < nombreMystere) {
                        printf("Plus haut !\n");
                        i++;
                }
                else if (nombreEntre > nombreMystere) {
                        printf("Plus bas !\n");
                        i++;
                }
        } while (nombreEntre != nombreMystere);
        printf("C'est pas mal, mais il t’a quand même fallu %d coups…\n", i);


}

Je garde les mêmes questions, mais j’en rajoute une, de première importance : pourquoi, si je lui dis que je veux 1 joueurs, il fait comme si j’avais dit 2 ?

Dernière modification par Shanx (Le 18/09/2012, à 20:49)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1963 Le 18/09/2012, à 20:23

xapantu

Re : /* Topic des codeurs [7] */

@ArkSeth : je crois que si tu te connectes au signal focus-out-event, tu peux rapidement arriver à ce que tu veux. Sinon, tu peux mettre n'importe quelle widget dans un gtk.MenuItem, mais je crois qu'il y a des subtilité au niveau de la gestion du focus pour les widgets mis à la main justement.

Hors ligne

#1964 Le 18/09/2012, à 20:48

Pylades

Re : /* Topic des codeurs [7] */

@ Shanx :
Déjà, un prototype standard de main, ce serait :

int main(void)

Ensuite, never trust user input. scanf n’est pas du tout adapté pour demander des trucs à l’utilisateur ; il vaut mieux utiliser fgets (pas gets, si je te vois utiliser ce truc, des gens mourrons à la simple vue de ce qui restera de ton cadavre… tout usage de cette fonction est une monstrueuse faille de sécurité) et engueuler ledit utilisateur si ce qu’il rentre n’est pas correct. Ensuite, tu utilises mal printf, l’usage que tu en fait devrait être réservé à puts.

Sinon, oui, c’est mieux d’éviter de faire des fonctions trop énormes et de découper le programme. Exemple :

int main(void) {
    func1();
    return square(3);
}

void func1(void) {
    /* do some stuff */
}

int square(int num) {
    return num * num;
}

Mais bon, tu verras ça dans la suite de tes cours. ^^

À part ça, tu veux un truc du genre en mot de passe, rien ne s’affiche lorsque l’on tape ? J’ai oublié comment on fait. tongue


“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

#1965 Le 18/09/2012, à 20:52

Shanx

Re : /* Topic des codeurs [7] */

J’ai édité mon premier post, si jamais tu peux aussi répondre à la dernière question…

Concernant main(), scanf et printf, je les utilise comme le prof m’a appris à le faire… tongue (et vu que c’est lui qui mets les notes, je crois que je vais devoir garder ça pendant au moins le premier semestre…).


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1966 Le 18/09/2012, à 20:54

Rolinh

Re : /* Topic des codeurs [7] */

Shanx a écrit :

Premier post ici. cool

Bah sois le bienvenu !

Shanx a écrit :

Je débute tout juste les cours d’algo (chiants) et ceux de C (cool),

C'est pourtant important l'algo... Accroche au cours, tu verras que ce n'est pas si terrible.

Shanx a écrit :

donc mes questions seront celles d’un noob…

On a tous débuté une fois et on a jamais finit d'apprendre...

Plusieurs choses pour ton programme:

En C, ne pas mettre d'arguments au prototype d'une fonction revient à dire que ta fonction prend potentiellement n'importe quoi en argument (car pas d'information sur le type ou le nombre d'arguments) (une petite lecture sur le sujet). Ceci est donc à corriger wink

int main() {

Attention, ici tu fais une affectation au lieu d'une comparaison:

        if (a=2) {

Sinon, tu as besoin d'ajouter ceci si tu utilises la fonction sleep (consulte le man):

#include <unistd.h>

Autre chose: le main doit toujours retourner quelque chose. Ici il te manque quelque chose comme

return EXIT_SUCCESS;

à la fin de ta fonction main.

Shanx a écrit :

Alors actuellement y’a deux trucs qui me chagrinent : premièrement, quand le premier joueurs donne le nombre, le second pourra le lire (c’est bête…).

Tu peux effacer la console après l'entrée du nombre par le 1er joueur par exemple.

Shanx a écrit :

Ensuite, et c’est d’ordre plus “théorique”, je me demande si pour la lisibilité du programme il n’aurait pas fallut que je créé deux fonctions correspondant chacune au nombre de joueur(s) et qui seraient appelées dans le if de mon main(). Mais je ne sais pas comment faire ça, vu qu’une fonction demande des paramètres (je crois)…

Pourquoi les fonctions seraient différentes pour chaque joueur?

EDIT: grilled (mais moins que grim7reaper tongue )

Dernière modification par Rolinh (Le 18/09/2012, à 20:56)

Hors ligne

#1967 Le 18/09/2012, à 20:54

grim7reaper

Re : /* Topic des codeurs [7] */

@Shanx : Pour le point 1, plusieurs solutions (plus ou moins propre et portable).
D’abord un truc crade et pas portable (donc à oublier) :

/* Linux */
system("clear");
/* Windows (de mémoire) */
system("cls");

En plus de pas être portable, la fonction system peut être dangereuse (cf. ici) et puis en général il suffira de scroller pour voir le nombre quand même…
Après, tu peux aussi désactiver l’echo du terminal. Façon crade et pas portable (Linux only, connaît pas l’équivalent Windows).
Et encore le problème de system

system("stty -echo");

Puis

system("stty echo");

Sinon, tu passes par une bibliothèque genre ncurses.
Donc bon, pas de solution simple et propre là.



Pour le point 2, une fonction ne prends pas forcément de paramètre.
Du genre :

int main(void)


Bon sinon, je n’ai pas lu ton code il y a sûrement des trucs pas jojo (d’autres vont te le signaler tongue) mais premier truc qui me choque (et qui est malheureusement très répandu…) :

int main()

À banir !
Ce n’est pas un prototype standard (du moins, tant que tu fais pas de l’embarqué).
En C, main (sauf cas particulier) :

int main(void)

ou

int main(int argc, char** argv)

Ce sont les seuls totalement portable.

int main()

c’est du C++

En C++

void f()

et

void f(void)

C’est strictement équivalent.

En C, non.
Plus de détail ici par exemple.



Édit : over grillé, mais je m’en doutais. J’écris toujours des pavés.

Dernière modification par grim7reaper (Le 18/09/2012, à 20:58)

Hors ligne

#1968 Le 18/09/2012, à 20:57

Pylades

Re : /* Topic des codeurs [7] */

Ah, et sinon, tu déclares implicitement sleep, c’est mal.
T’as de la chance que les compilos sachent où la trouver, mais ce n’est pas censé passer. Tu es donc prié de mettre un #include <unistd.h>
Et au passage, du coup ce n’est pas du C standard, c’est du C Posix. Mais de toutes façons, je ne vois pas ce que cet appel vient faire là. tongue


“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

#1969 Le 18/09/2012, à 21:02

Shanx

Re : /* Topic des codeurs [7] */

Bon, voilà ce que ça donne :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
        const int MAX = 100, MIN = 1; //pour la génération du nombre aléatoire
        int a; //nombre de joueurs
        int i; //compteur
        int nombreMystere; //s'il y a deux joueurs
        int nombreEntre;
        i = 1;
        a = 0;

        do {
                printf("Combien de joueurs ? ");
                scanf("%d", &a);
                if (a != 1 && a != 2) {
                        printf("Un ou deux joueurs, pas plus, pas moins.\n");
                }
        } while (a != 1 && a != 2);

        if (a==2) {
                printf("Entrez le nombre mystère : ");
                scanf("%d", &nombreMystere);
                printf("Changement de joueur…\n");
        }

        else {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        }

        do {
                printf("Entrez un nombre : ");
                scanf("%d", &nombreEntre);
                if (nombreEntre < nombreMystere) {
                        printf("Plus haut !\n");
                        i++;
                }
                else if (nombreEntre > nombreMystere) {
                        printf("Plus bas !\n");
                        i++;
                }
        } while (nombreEntre != nombreMystere);

        printf("C'est pas mal, mais il t’a quand même fallu %d coups…\n", i);

return EXIT_SUCCESS;
}

Mais si je dis “un joueur”, il considère toujours que j’en veux 2…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1970 Le 18/09/2012, à 21:13

Pylades

Re : /* Topic des codeurs [7] */

Shanx a écrit :

J’ai édité mon premier post, si jamais tu peux aussi répondre à la dernière question…

Rolinh a répondu, tu fais une affectation et non une comparaison. Je suppose que tu dois avoir oublié de recompiler. tongue

Shanx a écrit :

Concernant main(), scanf et printf, je les utilise comme le prof m’a appris à le faire… tongue (et vu que c’est lui qui mets les notes, je crois que je vais devoir garder ça pendant au moins le premier semestre…).

Ce n’est pas parce que le prof fait de la merde que tu dois faire pareil. Il ne te pénalisera pas pour être propre, hein. tongue

Sinon, essaie d’indenter correctement, s’il te plaît. tongue


“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

#1971 Le 18/09/2012, à 21:15

Shanx

Re : /* Topic des codeurs [7] */

J’avais corrigé avant que Rolinh ne poste, mais le problème persiste…

Et je ne sais pas comment “indenter correctement”. OUI, je suis un noob.

EDIT : j’suis con, y’a plus l’air d’avoir de problème… ><”

Dernière modification par Shanx (Le 18/09/2012, à 21:17)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1972 Le 18/09/2012, à 21:18

Pylades

Re : /* Topic des codeurs [7] */

Décale d’un « cran » l’appel à srand et le return.

Et le problème persisterait-il parce que tu n’as pas recompilé ?
Édit : gagné. tongue

Dernière modification par Πυλάδης (Le 18/09/2012, à 21:18)


“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

#1973 Le 18/09/2012, à 21:20

Shanx

Re : /* Topic des codeurs [7] */

Πυλάδης a écrit :

Et le problème persisterait-il parce que tu n’as pas recompilé ?
Édit : gagné. tongue

Non non, perdu. tongue
J’avais bien recompilé, c’est juste que je lisais mal ce qu’il me disait… neutral (je suis très fatigué, ça fait 2 semaines que je suis sorti tous les soirs…).

EDIT : autant pour le return, j’veux bien, mais je ne vois pas pourquoi je dois décaler le srand…

Dernière modification par Shanx (Le 18/09/2012, à 21:21)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1974 Le 18/09/2012, à 21:26

Pylades

Re : /* Topic des codeurs [7] */

Je ne suis pas derrière ton écran non plus, mais selon ce que tu as copié ici, tu devrais.


“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

#1975 Le 18/09/2012, à 21:27

Elzen

Re : /* Topic des codeurs [7] */

Okay, xklavier intégré, je rajoute dans la liste des dépendances optionnelles. Merci à grim wink

Et @grim && xapantu : je regarde ça bientôt, merci wink

Hors ligne