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 :

[Linux] Déplacement de plusieurs points


Sujet :

C

  1. #21
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Et ma solution ne te plaît pas ? Tu as regardé un peu le code.

  2. #22
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    je suis en train de l'étudier.

    Mais je l'écris comment (je débute en C )

  3. #23
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Ecrire quoi ?

    Tu as la définition d'un Point, une allocation , une initialisation et une fonction d'affichage.

  4. #24
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    oui, mais j'ai des erreurs de compilation :

    'point' undeclared
    syntac error before 'point'

  5. #25
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Essaie :

    Point.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef H_POINT_AL
    #define H_POINT_AL
     
    typedef struct  {
      int x,y,v;
    }Point;
     
    void affiche (Point *pPoints, unsigned int pnbPoint);
     
    #endif

    main.c
    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
     
     
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "Point.h"
     
    int main (int argc,char**argv) {
        Point points [2] ;
        points[0].x=5;points[0].y=5;points[0].v=5;
        points[1].x=15;points[1].y=50;points[1].v=5;
     
        affiche(points,2);
     
        return EXIT_SUCCESS;
    }
     
    void affiche (Point *pPoints, unsigned int pnbPoint) {
     
       int i;
        while (42){
            for(i=0;i<pnbPoint;i++) {
                //affichage du point
                printf("\033[%ld;%ldH*",pPoints[i].x,pPoints[i].y);
                //déplacement du point
                pPoints[i].x+=pPoints[i].v;
                pPoints[i].y+=pPoints[i].v;
                //controle depassemet ecran
                if(pPoints[i].x<1||pPoints[i].x>100) {
                    pPoints[i].x-=pPoints[i].v;
                }
                if(pPoints[i].y<1||pPoints[i].y>30) {
                    pPoints[i].y-=pPoints[i].v;
                }
          }
            printf("\033[H\033[2J");
        }
    }

    Par contre pour l'affichage ca donne des trucs bizarre chez moi...Pas portable les commandes printf ?

  6. #26
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Un bonne solution à ce problème serait un mélange entre du code de hegros (abstraction d'un Point) avec celui de souviron34 (abstraction de Deplace_Point, Affiche_Point, Ajuste_Delta, etc).

    Sinon, le code de hegros compile, avec quelques avertissements.

    En ce qui concerne la portabilité du code, celui-ci ne fonctionne que si la console supporte les séquences d'échappement ANSI.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #27
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mujigka
    Il faut juste encore inclure l'en-tête unistd.h pour que usleep() soit déclarée...
    Absolument milles excuses

    Pour ce qui est du code, cela fait tellement longtemps que je n'ai pas regardé les séquences d'échappement que je ne sais absolument pas ce que fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("\033[%d;%dH*",y,x);
     
    printf("\033[H\033[2J");
    Mais si tu voulais faire un truc portable, il y a 2 choses :

    1) remplacer les séquences d'affichage par un affichage d'une chaine (en mettant des blancs)
    2) je ne comprends pas trop le but :

    as-tu un affichage console que tu veux en 200*60 fixe (un rectangle fixe dans lequel tes points se déplacent) ?

    ou bien (ce que faisait ton code de départ il me semble) un déplacement ligne à ligne et point à point sans "limites" graphiques ?

  8. #28
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Pour faire ce genre de programmes de manière un peu plus portable, j'utilise la bibliothèque pdcurses http://pdcurses.sourceforge.net/ qui permet d'écrire des programmes en mode console sous *nix (compilent également avec curses.h), win32, dos, etc.

    Cela me semble en tout cas plus portable et plus facile à manipuler que les séquences d'échappement ANSI. Pour rappel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    \033[%d;%dH  /* déplace le curseur à la position spécifiée*/
    \033[H            /* replacé le curseur à l'origine */
    \033[2J           /* efface l'écran */
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #29
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par mujigka

    Sinon, le code de hegros compile, avec quelques avertissements.

    Thierry
    Tu as quelles options de compilation ?

    j'ai des warning sur les 2 printf.


    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "Point.h"
     
    int main (int argc,char**argv) {
        Point points [2] ;
        points[0].x=5;points[0].y=5;points[0].v=5;
        points[1].x=15;points[1].y=50;points[1].v=5;
     
        affiche(points,sizeof points/sizeof points[0]);
     
        return EXIT_SUCCESS;
    }
     
    void affiche (Point *pPoints,unsigned int pnbPoint) {
     
       int i;
        while (42){
            for(i=0;i<pnbPoint;i++) {
                //affichage du point
               printf("\033[%ld;%ldH*",pPoints[i].x,pPoints[i].y);
                //déplacement du point
                pPoints[i].x+=pPoints[i].v;
                pPoints[i].y+=pPoints[i].v;
                //controle depassemet ecran
                if(pPoints[i].x<1||pPoints[i].x>100) {
                    pPoints[i].x-=pPoints[i].v;
                }
                if(pPoints[i].y<1||pPoints[i].y>30) {
                    pPoints[i].y-=pPoints[i].v;
                }
          }
           printf("\033[H\033[2J");
        }
    }
    Point.h reste inchangé.

  10. #30
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par hegros
    Tu as quelles options de compilation ?

    j'ai des warning sur les 2 printf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall -Wextra -W -ansi -pedantic -o test main.c
    Pour les avertissements qui concernent les printf(), le spécificateur de format %ld est utilisé avec des valeurs de type int (remplacer avec %d).

    Sinon, comparaison entre un entier signé et un entier non signé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0;i<pnbPoint;i++) {
    Et bien entendu, les paramètres argc et argv ne sont pas utilisés. Pas grave.

    A part ça, pourquoi while(42)? Puis, sans la temporisation avec usleep(), on ne voit rien du tout.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #31
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    OK c'est corrigé.J'ai changé le prototype de la fonction affiche en remplacant le second paramétre par un int à la place d'un unsigned int.

    while(42) c'est équivalent à while(1) ca m'amuse de l'écrire comme cela rien de particulier.

    usleep n'existe pas sous windows.Il faudrait dans l'absolu ajouter des instructions pour pré-processeur.

  12. #32
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Pour disposer d'une fonction de temporisation (millisecondes), sous windows et Posix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef WIN32
    #include <windows.h>
     
    #define ms_sleep(s) Sleep(s)
    #else
    #include <unistd.h> 
     
    #define ms_sleep(s) usleep((s)*1000)            
    #endif
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #33
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    euh ça te donne pas à la seconde ça ??

  14. #34
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Sleep() sous win32 n'est pas en millisecondes? Je vérifie...

    EDIT: verifié! sleep(), déclarée dans unistd.h te donne la seconde, mais la fonction Sleep(), faisant partie de l'API Win32, reçoit des millisecondes. Et millisecondes * 1000 = microsecondes passées à usleep(). Non?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #35
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    si c'est bien cela.

    1 milliseconde = 1000 microsecondes

  16. #36
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oops oui j'avais compris en sens inverse

Discussions similaires

  1. courbes moyennes en fonction de plusieurs points sur un graphique
    Par jeanGuignol dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 26/09/2008, 09h51
  2. [Sérialisaton] plusieurs points d'entrées
    Par Deallyra dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 22/05/2008, 16h12
  3. plusieurs points d'accés pour le même ESSID.
    Par bouha_1 dans le forum Réseau
    Réponses: 3
    Dernier message: 17/09/2007, 09h38
  4. [VB.NET2.0] Impossible de charger un plusieurs points d'arrêt
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2006, 01h28
  5. Thread - Déplacement d'un point à un autre
    Par aymron dans le forum Graphisme
    Réponses: 4
    Dernier message: 26/11/2005, 01h37

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