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 :

comment faire un décompteur


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Par défaut comment faire un décompteur
    bonjour;

    j'aimerai faire un décompteur et pouvoir le remettre au début en entrant une série de chiffre.et sinon j'ai entendu dire que l'on pouvait faire faire des bips a l'ordinateur si oui se serai pour que des que l'on s'approche de zéro sa se met à sonné.

    voila merci j'espère que vous pouvez m'aidez merci.
    PS:je suis débutant

  2. #2
    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 : 44
    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
    Bonsoir,

    Il faudrait que tu donnes des exemples d'utilisation de ton decompteur pour voir ce que tu pourrais faire.

    Pour le bip ca dépend de ton système sous Windows il y a une fonction qui s'appelle Beep dont le premiere parametre est la frequence du bip et le second la durée du bip ou l'inverse a voir dans la doc msdn.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Hello .

    Le Decompteur, il faudrais plus de details. je vois pas tres bienc e que tu veux faire, si tu veux faire un chronos c'est pas bien compliquer, si non pour les BIP, je crois que c'est un \b, je ne sais plus j'avais fait un truc il y a longtemps ^^

    Voila je peux rien faire de plus pour le moment, a part verifier pour le \b

  4. #4
    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 : 44
    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
    C'est \a je crois non ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Je ne sais pas, je ne suis pas sur ma station de travail a l'ecole, et je sais que sur mac \a comme \b ne marche pas :/

    je vasi chercher sur google

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Je presente mes escuse ^^ c'est bien \a


    voila un code de teste ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <unistd.h>
     
    void    my_putchar(char c)
    {
      write (1, &c, 1);
    }
     
    int main()
    {
      my_putchar('\a');
      return (0);
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    si non pour le chronos, tu cree un int, tu met un sleep suffisant, et a chaque fois tu decremente, ton chronos

    ex:

    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
     
    /*Initialisation de la variable*/
    int chronos;
     
    /*On cree un boucle qui va decremente la valeur chronos initialiser a 15*/
    for (chronos = 15; chronos >= 0; chronos--)
    {
     
    /*On affiche la valeur*/
    printf("%d\n", chronos);
     
    /*La condition fixer ici est si chronos est inferieur ou egale a 10 on bip :)*/
    if (chronos <= 10)
    write(1, '\a', 1);
    }
    explication sur le write.
    /*
    ** le premier argument de write va dire sur quel FD tu vas ecrire, un FD est
    ** un file descriptor, c'est a dire un fichier ouverte (enfin grosso modo ^^),
    ** le '\a', c'est que tu veux ecrire, comme c'est un simple char, tu met des
    ** simple quote. et le dernier et la taille de ton mot a ecire ^^, je revien sur ** le fd.
    **
    ** tu as fd, 1 utiliser ici qui est donc ton ecran on appel cela la sortie standar
    ** mais aussi 0, qui est l'entree standar (ton clavier par example )
    ** et deux qui est la sortie d'erreur.
    */

    On peut aussi ecrire les nombre en vert de 15 a 10, en jaune de 9 a 4 et en rouge de 5 a 0

    donc voila pour cela recherche google sur les sequances d'echapements, et si non cherche aussi un truc pour effacer ton ecran a la fin de chaque tour de Boucle ^^, mais essai de chercher pour ca

    Si je ne repond pas a ta question je m'escuse et je te demande de me reformuler la question, voila j'espere que j'ais reussi a te venir en aide

    Good Night

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PiXi-PiX
    voila un code de teste ^^
    Mais qu'est-ce que c'est que ce code à la noix... Même pas portable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdio.h>
     
    int main (void)
    {
      putchar ('\a');
      return 0;
    }
    Attention, un '\a' ne produit une alarme (visuelle, sonore) que si le matériel le permet, sinon, le caractère est simplement ignoré et il ne se passe rien.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PiXi-PiX
    si non pour le chronos, tu cree un int, tu met un sleep suffisant
    et propre ...

    Sorry, coudn't resist...

  10. #10
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    pour le beep, normalement c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf ( stderr, "%c", toascii(7));
    7 est le code ASCII de BELL...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    pour le beep, normalement c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       fprintf ( stderr, "%c", toascii(7));
    7 est le code ASCII de BELL...
    Et ? Quelle est ta définition de 'normalement' ? Qui a paré de code ASCII ?

    Pour être portable, c'est '\a'. Point.

    Quand à toascii(), c'est pas standard. A quoi ça peut bien servir ?
    Enfin, stderr, pas plus que stdout n'est obligé de supporter une interprétation du '\a' requérant l'attention ('a' signifie 'attention').

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Je voulais juste aider avec mon code pas portable :p

    Mais, on ne sais pas ce qu'il veut en faire donc voila une solution qui fais un decompteur...
    .
    et j'ai toujours coder sur unix..

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Juste une remarque sur le code "pas portable":

    write(1, '\a', 1);
    write attend en deuxième paramètre une adresse mémoire et non une valeur.
    C'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(1 /* ou stdout */,"\a",1);
    qu'il faut écrire

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par josse95
    write attend en deuxième paramètre une adresse mémoire et non une valeur.
    C'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(1 /* ou stdout */,"\a",1);
    qu'il faut écrire
    Certainement pas stdout qui est un pointeur de type FILE... Plutôt FILENO_STDOUT pour être conforme à POSIX.1.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Par défaut
    bonjour a tous je vous remercie d'avoir prèté attention a mon problème.
    je vais vous expliqué plus précisément se que je veux faire:
    j'aimerai que l'on me dise comment je pourrai faire pour faire un décompte et que
    je puisse le remettre au départ en entrant un code et que plus le décompte s'approche de zéro plus un bip retentira.

    encore merci

  16. #16
    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 : 44
    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
    Beh il faut que tu commences a ecrire l'algo. Tu veux l'algo et le code tout de suite ?!? Essaie de pondre (bon c'est les poules d'habitude qui pondent) quelque chose a partir des éléments qu'on t'a donné puis on essaiera au fur et a mesure de te rediriger ( pas a la frontiére hein ) dans ton programme pour realiser ce que tu veux, mais il ne faut pas demander le beurre et l'argent du beurre...

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Autant pour moi pour le stdout (le commentaire est bien-sûr faux, il faudrait remplacer par stdout->fd). Mais je voulais juste souligner le "\a" à la place du '\a'.

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Par défaut
    voila ce que j'ai essayer de faire mais le truc c'est que consigne ne se décrémente pas car scanf attent que je rentre une valeur pour continuer.
    ______________________________________________________________
    #include <stdio.h>
    #include <stdlib.h>

    unsigned int consigne,code,essai;

    int main(int argc, char *argv[])
    {

    consigne=5000000; /*valeur de départ du compte a rebours*/
    code=416; /*valeur du code a taper pour remettre le décompteur aux début*/
    do
    {
    consigne=consigne-1; /*décrémentation de la valeur consigne*/
    (scanf("%d",&essai);
    if(essai==code) /*vérification du code*/
    {
    consigne=5000000; /*valeur de la remise aux début du décompteur si essai=code*/
    }
    printf("%d\n",consigne);
    }
    while(consigne!=0)
    }
    ________________________________________________________________

    voila si je pouvait avoir un peut d'aide elle sera la bienvenu.

    (je précise que je n'ai que quelque notion en C car j'ai simplement vu les base
    en cour car je suis étudient en bep électronique et on a vu le C pour faire juste de simple modification sur un programme qui est envoyer sur un micro contrôleur et on n'ira pas plus loin en cours donc voila)
    merci beaucoup de l'attention que vous porté a mon problême.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Tu ne peux faire de saisie avec limite de temps en C standard.
    Renseigne-toi sur des APIs non-standard comme conio, curses, pdcurses...

    Edit: alarm() n'est pas standard, mais POSIX.
    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.

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Tu ne peux faire de saisie avec limite de temps en C standard
    Peut-être, mais pourquoi tiens tu à ce que son code soit du C standard ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int delai = ...
    char car;
     
    alarm(SIG_ALRM,mon_alarme);
    alarm(delai);
    read(0,&car,sizeof(char));
    par exemple.

    Cela dit, on ne maîtrise pas vraiment le délai (comme sur un système temps réel) en procédant ainsi.

Discussions similaires

  1. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31
  2. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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