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 :

faire bouger une * dans un tableau ..?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    encore étudiante...
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : encore étudiante...

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Par défaut faire bouger une * dans un tableau ..?
    bonjour à vous,

    je suis nouvelle sur ce forum, et débutante en langage C sur Linux, je connais les bases mais je n'ai pas le même esprit logique que la plupart d'entre vous...
    bref, en cours (car je suis en Fac d'informatique), on nous demande de faire un programme avec un tableau en C (sous linux...) ou une étoile bouge quand je lance le "cmd", l'étoile est censé bouger avec l'action de l'utilisateur en appuyant sur des flèches directionnelles...
    ça fait 2 après midi que j'essaye de programmer tout ca mais sans aucuns succès ...

    une personne charitable pour m'aider ..?

    Alicia.

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Interaction avec un terminal donc. Regarde du cote des termcaps (ncurses pour te faciliter la vie).

  3. #3
    Futur Membre du Club
    Femme Profil pro
    encore étudiante...
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : encore étudiante...

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Par défaut
    Bonjour,
    Merci de m'avoir répondu
    C'est a dire ? Je devrai mettre cette ligne ou ?

  4. #4
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Il faudrait que tu mettes la partie du code que tu estimes utile sur le forum (balise [CODE]), et on pourra t'aider à partir de là.

  5. #5
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Citation Envoyé par Aliciasanchez Voir le message
    Bonjour,
    Merci de m'avoir répondu
    C'est a dire ? Je devrai mettre cette ligne ou ?
    Euh... Quelle ligne ? Est-ce que t'as compris de quoi je parlais ? Est-ce que tu as seulement cherche a comprendre de quoi je parlais ?

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aliciasanchez Voir le message
    bref, en cours (car je suis en Fac d'informatique), on nous demande de faire un programme avec un tableau en C (sous linux...) ou une étoile bouge quand je lance le "cmd", l'étoile est censé bouger avec l'action de l'utilisateur en appuyant sur des flèches directionnelles...
    ça fait 2 après midi que j'essaye de programmer tout ca mais sans aucuns succès ...
    Bonjour
    Il te faut
    1) attendre qu'on appuie sur une des flèches
    2) récupérer quelle touche a été appuyée
    3) faire bouger l'étoile selon la direction. C'est à dire aller à la position actuelle de l'étoile, y écrire un "blanc" pour l'effacer; puis calculer la nouvelle position selon la flèche, aller à cette position et y écrire le caractère "*".

    C'est un programme un peu bizarre qu'on te demande car il faut intercepter une touche tapée au clavier "à la volé" (sans valider par <return>) et ça, c'est pas tellement naturel. Toutefois il existe la fonction "getch()" qui fait ce travail seulement elle n'est pas standard (elle n'est pas obligée d'être présente sur ton OS).
    Ensuite il te faut dessiner sur l'écran à une position donnée et ça aussi c'est peu naturel ce qui implique l'utilisation de bibliothèques tierces comme ncurses. Bref ce genre de TP n'apporte rien à la compréhension du C en général.

    En revanche ça peut t'apprendre à développer en MVC. Le MVC c'est un concept où on découpe un travail en Modèle/Vue/Contrôleur.
    Le Modèle ce sont les datas et tout ce qui concerne leur sauvegarde (une bdd par exemple)
    La Vue concerne toutes les entrées/sorties (saisies/affichage)
    Le Contrôleur concerne tout ce qui est "calcul"
    En découpant un travail en MVC, on peut ensuite facilement changer un outil par un autre. Par exemple remplacer la bdd par une gestion de fichiers.

    Typiquement, pour un TP de ce genre, le MVC pourrait-être ceci
    Code C : 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
    #define FLECHE_HAUT 0x01
    #define FLECHE_BAS 0x02
    #define FLECHE_GAUCHE 0x03
    #define FLECHE_DROITE 0x04
     
    typedef struct {
        unsigned short lig;
        unsigned short col;
    } t_position;
     
    // Le modèle: on n'en a pas (la position n'étant pas sauvegardée)
     
    // La vue
    // Fonction qui intercepte la saisie
    int saisie()
    {
        // Ici il faut utiliser une interception clavier (peut-être getch() si c'est possible)
        // Ensuite, en fonction de la flèche qui a été tapée, renvoyer "FLECHE_HAUT"  ou "FLECHE_BAS" ou "FLECHE_GAUCHE" ou "FLECHE_DROITE" ou 0 pour quitter
        return...;
    }
     
    // Fonction qui affiche l'étoile à sa position
    void affiche(t_position *pos, char etoile)
    {
        // Ici  il faut utiliser une librairie d'affichage (style ncurses) pour afficher l'étoile à la position
    }
     
    // Le contrôleur
    // Fonction qui initialise la position
    void init(t_position *pos)
    {
       pos->lig=0;
       pos->col=0;
    }
     
    // Fonction qui calcule la position en fonction de la flèche
    void calcul(t_position *pos, int fleche)
    {
        switch(fleche)
        {
            case FLECHE_HAUT:
                if (pos->lig > 0)
                    pos->lig-=1;
                break;
            case FLECHE_BAS:
                if (pos->lig < 20)
                    pos->lig+=1;
                break;
            case FLECHE_GAUCHE:
                if (pos->col > 0)
                    pos->col-=1;
                break;
            case FLECHE_DROITE:
                if (pos->col < 80)
                    pos->col+=1;
                break;
        }
    }
     
    // Programme principal
    int main()
    {
        t_position pos;
        int fleche;
        init(&pos);
     
        while((fleche=saisie()) != 0)
        {
            affiche(&pos, ' ');
            calcul(&pos, fleche);
            affiche(&pos, '*');
        }
    }

    Ceci est un exemple de programmé en MVC. De cette façon, le squelette est déjà construit. Ne te reste qu'à remplir les blancs pour 1) récupérer la flèche au clavier et 2) afficher un caractère à l'écran à une position (x,y)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par imperio Voir le message
    Interaction avec un terminal donc. Regarde du cote des termcaps (ncurses pour te faciliter la vie). […] Euh... Quelle ligne ? Est-ce que t'as compris de quoi je parlais ? Est-ce que tu as seulement cherche a comprendre de quoi je parlais ?
    Je pense que oui mais elle nous explique qu'elle débute et nous avertit même qu'elle n'a pas encore l'esprit logique des programmeurs avertis. Du coup, des termes comme « interaction avec un terminal », « ncurses » et « termcap », c'est quand même vachement obscur pour des gens qui n'ont pas goûté un minimum à Unix, même avec Google sous le coude…

    Citation Envoyé par Aliciasanchez Voir le message
    bonjour à vous, je suis nouvelle sur ce forum, et débutante en langage C sur Linux, je connais les bases mais je n'ai pas le même esprit logique que la plupart d'entre vous...
    Bonjour et bienvenue,

    Les réponses données au-dessus sont les bonnes mais voici tout de même une idée générale de la façon dont tout cela fonctionne :

    La fenêtre dans laquelle tu saisis ta ligne de commande et qui te propose donc le shell s'appelle un terminal. Un « terminal », en informatique et en téléphonie, est par définition l'équipement qui vient prendre place au bout d'une ligne (de communication). En téléphonie, ton terminal est donc ton combiné, ou ton smartphone. En informatique, c'est un clavier couplé à un écran qui se contente d'envoyer sur la ligne tout ce que tu tapes au clavier et d'afficher à l'écran tout ce qu'il reçoit de cette même ligne (comme un Minitel).

    Ça s'explique parce qu'Unix a été développé avant les micro-ordinateurs personnels et qu'il était fait pour tourner sur de gros ordinateurs centralisés dans des salles machines, avec lesquels on ne communiquait qu'avec ces fameux terminaux.

    Lorsque l'on a commencé à faire fonctionner les systèmes UNIX directement sur la machine utilisée par l'utilisateur et que l'on a développé les interfaces graphiques (X-Window), on a inventé les « terminaux virtuels », c'est-à-dire des applications sans pendant matériel, fonctionnant en local sur la machine à exploiter, mais qui se déclaraient quand même comme des terminaux ordinaires auprès du système, qui lui était fait pour être utilisé à travers eux. En abrégeant, et par homonymie avec les terminaux réels qui fonctionnent de la même façon et servent à la même chose, les utilisateurs ont appelées « terminaux » tout court les terminaux virtuels, comme réels.

    Ça veut dire que le seul moyen pour un terminal de communiquer avec son serveur est de lui envoyer des caractères, d'où l'existence de caractères dits « de contrôle » dans la table ASCII et, accessoirement, de la touche Ctrl qui sert à les envoyer, ce que peu de gens savent encore aujourd'hui.

    On pourrait donc légitimement penser qu'il existe un caractère dédié par touche du curseur et qu'il suffit de vérifier, quand on en reçoit un caractère, si c'est un de ceux-là et de l'afficher normalement à l'écran dans le cas contraire. C'est le cas avec le Vidéotex du Minitel. Malheureusement, avec le standard DEC ANSI en usage sur PC, le nombre d'informations différentes à envoyer est assez élevé et pour ce faire, le terminal envoie des séquences débutant par un prologue similaire pour toutes, suivie d'une suite de caractères de longueur variable.

    Autrement dit, terminal envoie un train de trois caractères à chaque fois que tu tapes une touche du curseur.

    C'est pour cela que gérer les touches du curseur est aussi casse-pieds sur PC : tu as le choix entre deux approches : soit gérer directement l'arrivée des différents caractères en conservant la trace de chacun d'eux jusqu'à la fin de la séquence (« stateful ») et agir en conséquence, soit utiliser une bibliothèque externe à ton programme (ncurses), apprendre à l'utiliser et à la lier à ton programme.

    Paradoxalement, même si c'est moins portable et que ce n'est pas évolutif, je préfère la première solution. C'est beaucoup plus stimulant au niveau algorithmique et comme il s'agit d'un programme d'exercice, c'est beaucoup plus intéressant pour savoir comment ça fonctionne et pour s'entraîner à développer soi-même les programmes qui comblent les vides. S'il s'agit simplement d'apprendre à utiliser une API, il y en a de bien plus intéressantes.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    encore étudiante...
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : encore étudiante...

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Par défaut
    Merci beaucoup de votre aide,
    C'est vraiment tres gentil de votre part
    Vous mavez deja appris beaucoup plus que depuis debut septembre en programmation en cours (Merci Mr le prof ^^)

    Je teste tout et je vous renvoie mon produit

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

Discussions similaires

  1. Faire bouger une image dans un cadre
    Par georges34 dans le forum Flash
    Réponses: 0
    Dernier message: 07/05/2011, 15h27
  2. [Struts layout] comment faire un ascenseur dans un tableau
    Par chouchou93 dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/02/2006, 09h08
  3. Faire bouger une baballe
    Par mael94420 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/01/2006, 10h33

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