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 :

banc de poissons


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut banc de poissons
    Bonjour à tous !
    J'ai eu une idée : de faire un programme modélisant (au moins grossièrement) un banc de poissons : avec plusieurs poissons (pixels) et un pixel que l'on peut faire bouger sur tout l'écran (je l'appelle pointeur).
    En fait je programme sur TI mais je ne me suis mis au C que depuis quelques semaines : j'ai déjà réalisé ce programme en basic mais j'ai abandonné le projet à cause de la vitesse...

    Le principe est le suivant :

    Si un poisson détecte le pointeur à une certaine distance, définissable, il s'en éloigne jusqu'à être au delà de cette distance.
    Le groupe de poissons se forme de cette façon : chacun va en direction du poisson le plus proche et s'arrête à une distance définissable aussi.

    Je ne sais pas si je suis très clair, aussi je joins le code que j'ai élaboré (pour l'instant, il n'y a qu'un seul poisson). Il comporte une erreur, le problème c'est que je ne sais pas laquelle. Si quelqu'un pouvait m'aider à la trouver, ainsi que pour la suite du programme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    short xa,ya,xta,yta,yy,xx,y,x,yt,xt;          /* Variables de déplacement */
    char get;                                     /* Variable de test clavier */
    short cy,cx,tecom;                            /* Variables de comptage    */
     
    moduldep()                                    /* Fonction de déplacement  */
    {                                             /* du pointeur              */
    get=ngetchx();
    if((get==81)&&(y>2))
    	y-=2;
    if((get==82)&&(x>2))
    	x-=2;
    if((get==84)&&(y<98))
    	y+=2;
    if((get==88)&&(x<158))
    	x+=2;
    }
     
    bacomp()                                      /* Fonction de comptage des */
    {                                             /* distances                */
    cy=ya-y;
    cx=xa-x;
    if((cy<=10)&&(cx<=10))
    {
    	tecom=1;
    	if(cy<0)
    	{
    		if(ya<99)
    			ya++;
    	}
    	else
    	{
    		if(ya>1)
    			ya--;
    	}
     
    	if(cx<0)
    	{
    		if(xa<159)
    			xa++;
    	}
    	else
    	{
    		if(xa>1)
    			xa--;
    	}
    }
    else
    tecom=0;
    }
     
    // Main Function
    void _main(void)
    {
    clrscr();
    xa=xta=79;
    ya=yta=49;
    x=y=xt=yt=1;
    DrawPix(xa,ya,A_NORMAL);
    DrawPix(x,y,A_NORMAL);
     
    dep:
    moduldep();
    DrawPix(x,y,A_XOR);
    DrawPix(xt,yt,A_XOR);
    yt=y;
    xt=x;
     
    ba:
    bacomp();
    if (get=8)
    	goto zzz;
    if(tecom)
    {
    	DrawPix(xa,ya,A_XOR);
    	DrawPix(xta,yta,A_XOR);
    	yta=ya;
    	xta=xa;
    	goto ba;
    }
    goto dep;
    zzz:
    }

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virgiledu95
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // Main Function
    void _main(void)
    {
    clrscr();
    xa=xta=79;
    ya=yta=49;
    x=y=xt=yt=1;
    DrawPix(xa,ya,A_NORMAL);
    DrawPix(x,y,A_NORMAL);
     
    dep:
    moduldep();
    DrawPix(x,y,A_XOR);
    DrawPix(xt,yt,A_XOR);
    yt=y;
    xt=x;
     
    ba:
    bacomp();
    if (get=8)
        goto zzz;
    if(tecom)
    {
        DrawPix(xa,ya,A_XOR);
        DrawPix(xta,yta,A_XOR);
        yta=ya;
        xta=xa;
        goto ba;
    }
    goto dep;
    zzz:
    }
    Un Force 10 comme ça, d'entrée de jeu. Bravo!

    http://emmanuel-delahaye.developpez.com/goret.htm
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Yeah terrible ton echelle.
    Desormais quand je ferai un code, je me baserai sur ca pour faire un code goret level 0. ^^

    Je trouve quand meme l'echelle un peu dure, mais ce n'est que mon avis.

    Echelle 8 : plus qu'un return par fonction

    J'ai deja vu des codes a toi avec plusieurs return...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 70
    Points : 34
    Points
    34
    Par défaut
    l'expression 'comme un goret' signifie 'salement', 'de façon crade' etc.
    Un code peut être crade et efficace à la fois...

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Mais un code illisible est bon pour la poubelle

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    je n'arrive pas à savoir quel est le niveau le pire et le mieux... parce que je ne sais pas si je dois prendre cette remarque comme un compliment ou comme une critique... et si c'est une critique merci d'argumenter

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Le pire c'est le Force 10...

    Et pourquoi ben parce que y'a des goto dans tous les sens, tout est dans le main, ya des variables globales en pagaille, pas d'indentation...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ton code est très mauvais, et regroupe une bonne partie de ce qu'il ne faut absolument pas faire en C.
    Mais tu es débutant, tu as programmé sur ta calculette en basic à coup de goto donc celà ne peut donner que de mauvais résultats.
    Donc, avant de te lancer dans un programme, apprends l'algorithmique sérieusement, ouvre un bon bouquin de C (pas ceux de Delannoy ) et mets toi au boulot.
    Reviens dans quelques temps nous montrer un code un peu plus correct (tu te demanderas alors comment tu as pu écrire de telles horreurs) et on sera là pour résoudre tes problèmes.
    Bon courage
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci : au moins, ça a le mérite d'être clair.
    Je vais faire ce que tu me conseille : finir mon livre de C.
    Je mets le forum en favoris et je reviendrai plus tard...
    Si par contre, en attendant, tu pouvais me signaler les erreurs les plus grosses dans mon code pour que je bosse dessus, ça m'arrangerait bien !

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Skyrunner te les a enumérées :
    => La présentation : le code est mal indenté, défaut peut-être mineur, mais une bonne présentation aide à la compréhension du code, à la lecture de la structure du programme.

    => Beaucoup plus grave (et même rédhibitoire): un code bourré de goto est complètement illisible, montre une mauvaise étude du problème, une méconnaissance totale de l'algorithmique et fait que personne ne voudra lire ton code pour essayer de la comprendre, (tu as vu les réactions).

    => Méconnaissance du C :
    void _main(void) : jamais vu !!! où as-tu trouvé ça, si c'est dans ton bouquin, direction poubelle ! Il y a de bons livres d'apprentissage, regarde sur le site, on t'en conseillera de bons.

    Les fonctions ne retournent pas de valeurs, ton compilo devrait le signaler

    Utilisation de variables globales, à proscrire absolument, il faut prendre tout de suite les bonnes habitudes, elles sont rarement vraiment nécessaires et dans 99% des cas, on peut s'en passer.

    ==> Enfin, pour le forum, publication d'un code non compilable, oubli des fichiers de déclarations de fonctions (.h), aucune explication sur ce que sont censées faire ces fonctions, manque de précisions : Mon code comporte une erreur, mais tu ne nous donnes aucune pistes sur le comportement du programme, et de ce que tu en attendais.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par virgiledu95
    Merci : au moins, ça a le mérite d'être clair.
    Je vais faire ce que tu me conseille : finir mon livre de C.
    Je mets le forum en favoris et je reviendrai plus tard...
    Si par contre, en attendant, tu pouvais me signaler les erreurs les plus grosses dans mon code pour que je bosse dessus, ça m'arrangerait bien !
    En tout cas bonne attitude. Bravo.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Désolé pour ces oublis
    mon compilateur est TIGCC C and ASM SDK Version 0.96 Beta 6
    je mets en include :
    mais pour ce qui est de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void _main(void)
    {
     
    }
    , le compilateur me l'insère automatiquement lorsque je crée un fichier !

  13. #13
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Et tu as choisi ce compilateur comment?
    C'est juste une question.

    Si tu veux developper en C standard, tourne toi vers un IDE type Code::Blocks et un compilateur type GCC.

    Un tres bon livre.
    http://c.developpez.com/livres/#L2100487345

    LA référence.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  14. #14
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    C'est du C pour calculatrice, il vaut mieux abandonner à mon avis, et faire des choses sérieuses sur un vrai compilo, sinon tu vas prednre rapidement de mauvaises habitudes.
    Extrait de la DOc:
    III:\ La fonction principale :
    Comme nous l'avons déjà expliqué au Chapitre précédent, la fonction principale doit systématiquement être nommée _main.
    Cette fonction est déclarée comme étant de type [FONT=Courier New]void[/FONT]. (Elle est précédée du modificateur de type [FONT=Courier New]void[/FONT].). Cela signifie que cette fonction ne renverra aucun résultat. De plus, elle n'admet aucun argument, puisque l'argument (placé entre parenthèses à la suite du nom de la fonction est de type [FONT=Courier New]void [/FONT]lui aussi).
    Ceci est parfaitement logique : puisque cette fonction est la fonction principale, c'est elle qui est active dès le lancement du programme, et elle ne peut donc pas être lancée par une autre fonction.
    En C, passer des arguments à un programme en le lançant est possible, mais cela ne se gère pas de la même façon dans le code source qu'en TI-BASIC.
    La norme C impose que la fonction main retourne un résultat, donc apprendre le C sur les calculettes de ce type est une absurdité car ton code n'est pas portable.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Justement, la fonction principale d'un programme en C sur TI s'appelle _main et non main pour la bonne raison qu'elle n'est pas standard.

    En clair, "ce n'est pas un bug, c'est une feature".

    Mon conseil: Pour les TI, va sur un autre forum, celui-ci est surtout conçu pour les architectures plus standards.
    Par exemple, tu peux aller sur http://www.tigen.org, l'un des gourous les plus intégristes de TI-GCC s'y trouve.



    PS: ça reste du code super-gore, même si je ne suis pas d'accord avec tous les critères d'Emmanuel...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Optimisation par les PSO (les bancs de poissons)
    Par takfa2008 dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 14/05/2009, 11h36
  2. Réponses: 4
    Dernier message: 18/01/2007, 13h48
  3. Poisson en 3D, difficile ?
    Par mims1664 dans le forum Flash
    Réponses: 10
    Dernier message: 11/08/2006, 17h59
  4. [Conseil] Banc de tests ?
    Par MonsieurAk dans le forum Test
    Réponses: 7
    Dernier message: 24/11/2005, 11h25

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