IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Etude du programme micro-Max


Sujet :

C

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut Etude du programme micro-Max
    Bonjour !

    J'étudie un programme d'échecs dont j'aimerais faire une adaptation en Basic et en Pascal, qui sont les deux langages que je pratique. Je voudrais solliciter votre aide au fur et à mesure sur les difficultés que je rencontre.

    Voici le programme en question.

    Les dix premières lignes, ça va.

    Mais à cet endroit je me perds :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D(k,q,l,e,x,n)
    int k,q,l,e,x,n;
    Qu'est-ce que c'est ? Je dirais que c'est une procédure avec ses variables locales, mais si c'était le cas elles devraient être après l'accolade, non ?
    Et pourquoi deux fois les mêmes noms ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Ne t'inquiète pas, tu n'est pas le seul à ne pas comprendre

    Personnellement je te dirais de t'inspirer le moins possible de ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define F(I,S,N) for(I=S;I<N;I++)
    #define W(A) while(A)
    C'est absolument dégueulasse... et peut même générer des erreurs pour le for.

    Sans compter les noms de variables qui sont tout à fait explicites.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hia,

    Ne t'inquiète pas (je simplifie un peu le code)
    est une ancienne notation en C (à l'origine du C !), donnant le type des paramètres passés à la fonction.

    De nos jours, on doit écrire
    J'ai mis int comme type renvoyé par la fonction, car, à l'origine, c'était le cas de toute fonction.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Merci pour vos réponses. J'ai bien compris que ce n'était pas un exemple à imiter.

    Je vais quand même essayer d'avancer encore un peu, puisque la première difficulté est résolue.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Membre expérimenté Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Points : 1 372
    Points
    1 372
    Par défaut
    Je partage en partie l'avis de Neckara, ce code n'est pas un exemple pour coder un programme, encore moins pour une transposition dans un autre langage !

    Toutefois, je ne pense pas du tout que ce code soit mauvais, au contraire il est impressionnant considérant le but affiché qui est de produire le programme le plus court possible en nombre de caractères.
    Dans ces conditions, il est évident que le développeur n'a mis aucun commentaire et a utilisé tous les raccourcis possibles offerts par le C, notamment les tests ou les define super horribles que cite Neckara et qui n'ont bien sûr pour but que de réduire encore la taille du code en grapillant quelques caractères sur les nombreuses boucles for et while.

    C'est un défi incroyable et je suis très admiratif de l'exploit de ce développeur !

    Mais cela ne peut effectivement guère constituer un bon exemple pour développer un logiciel, d'autant qu'il n'est évidemment pas commenté et difficile à lire ...
    Quant à t'en inspirer pour écrire toi-même un programme ultra-court en BASIC ou Pascal, quel intérêt alors qu'aucune des astuces utilisées en C ne seront transposables ?

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    OMG ! C'est impressionnant !

    réduire encore la taille du code
    Dommage que ça ne réduise pas la taille de l'exécutable par la même occasion

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Ngork Voir le message
    Mais cela ne peut effectivement guère constituer un bon exemple pour développer un logiciel, d'autant qu'il n'est évidemment pas commenté et difficile à lire ...
    En fait l'auteur propose plusieurs versions, et j'ai choisi la plus courte, qui effectivement n'est pas commentée. Mais la version complète est commentée ligne à ligne. Il y aussi une version avec des noms de variables plus longs.

    Citation Envoyé par Ngork Voir le message
    Quant à t'en inspirer pour écrire toi-même un programme ultra-court en BASIC ou Pascal, quel intérêt alors qu'aucune des astuces utilisées en C ne seront transposables ?
    Il m'a semblé qu'au-delà des astuces employées pour réduire le nombre de caractères, il y avait aussi une vraie maîtrise du sujet. C'est ce qui m'a intéressé.
    Et puis c'est instructif comme exercice, de chercher à faire la même chose dans un autre langage. Je commence à savoir un peu de C et ça me plaît bien.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Je reviens vous embêter avec "mon" programme.

    Que signifie cette ligne ?

    Il s'agit du while qui est à la fin de la boucle principale dans la fonction D.
    Je n'arrive pas à distinguer ce qu'il faut incrémenter, ce qu'il faut évaluer, et dans quel ordre.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Je reviens vous embêter avec "mon" programme.

    Que signifie cette ligne ?

    Il s'agit du while qui est à la fin de la boucle principale dans la fonction D.
    Je n'arrive pas à distinguer ce qu'il faut incrémenter, ce qu'il faut évaluer, et dans quel ordre.
    Je pense que c'est :
    ~M : inversion de tous les bits de M
    i+9
    (i+9)&~M : opérateur "et" bit à bit. Pour chaque bit des deux opérande, effectue l'opération "et".
    i=(i+9)&~M : affectation, retourne la valeur affectée.

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je pense que c'est :
    ~M : inversion de tous les bits de M
    i+9
    (i+9)&~M : opérateur "et" bit à bit. Pour chaque bit des deux opérande, effectue l'opération "et".
    i=(i+9)&~M : affectation, retourne la valeur affectée.
    Merci.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bon, il est certain que je n'arriverai pas au bout de ce travail, donc je préfère abandonner.

    Si cela vous intéresse, vous pouvez voir dans le forum Pascal le code proposé par Paul Toth.

    Merci pour votre aide. Je suis bien content d'avoir commencé à apprendre le C.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MC68HC908GR8] Programmer micro-contrôleur pour affichage
    Par expert911 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 19/02/2009, 00h13
  2. [ETUDES] Comment avez-vous appris la programmation ?
    Par easyman dans le forum Etudes
    Réponses: 74
    Dernier message: 16/01/2006, 19h41
  3. Réponses: 19
    Dernier message: 26/12/2005, 01h04
  4. Etude des "styles" de programmation
    Par RiRi51 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/03/2003, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo