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 :

bout de code à dechifrer svp


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut bout de code à dechifrer svp
    Bon voila j'ai recupere un bout de programme mais je ne comprend pas comment il marche

    const char strclord[]="Controlord presente "; /* text */

    for (s=strclord; *s; s++) {
    printf("%c", *s);
    wait(20);
    }
    Voila donc ce que comprend pas c'est ce comment marche la boucle for
    alors s=strclord??? j'ai toujours cru qu'il fallait mettre des entiers et la c'est du texte. Ensuite le *s il fait quoi?
    merci pour votre aide
    Equipe SG1 au rapport!

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Bon alors si je ne trompe pas (et c'est pas evident pasque a 8h45 jsuis pas au max de mon potentiel )

    En fait ce bout de code affiche "Controlord presente " mot apres mot ac un petit delai d attente entre chaque mot.

    s devient le premier caractère du tableau //Si ce n'est pas sa corrigez moi

    Ensuite dans le for on incrémente l adresse pointée par s
    puis on affiche la valeur de s.

    Apres tout ca c'est pas vraiement clair alors ce que je viens de dire c'est pas du 100% sur

  3. #3
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut Re: bout de code à dechifrer svp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	for (s=strclord; *s; s++) {
    on initialise le pointeur s en le mettant sur le premier caractère de strclord
    tant que *s est différent de 0 c'est à dire différent de '\0' (fin de string)
    on avance le pointeur

    on affiche le caractère à l'adresse s

    on attend 20 sec ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut Re: bout de code à dechifrer svp
    Citation Envoyé par bball
    Voila donc ce que comprend pas c'est ce comment marche la boucle for
    alors s=strclord??? j'ai toujours cru qu'il fallait mettre des entiers et la c'est du texte.
    Non ca peut être n'importe quelle instruction qui ne sera exécutée qu'à la première itération. ici on initialise le pointeur s a l'adresse de début de la chaîne
    Citation Envoyé par bball
    Ensuite le *s il fait quoi?
    merci pour votre aide
    C'est la condition d'arrêt. On boucle tant que *s est vrai. autrement dit tant que le caractère pointé par s est diférent de 0. le caractère de fin de chaîne.
    Je te l'accorde. L'instruction for(; en C permet de produire du code très compact mais pas forcément très lisible.

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...[/code]

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...
    Pas forcément. ça évite de déclarer Et ça a exactement le même effet que s'il y avait un i de déclaré.

    Il faut juste s'habituer à ce genre d'écriture.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  7. #7
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Ben non... Il a forcement declaré C'est marrant d'ecrire de cette facon, mais c'est tout....
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Bin je trouve pas d'avantage flagrant a declarer un a la place d'un . Mais bon ce n'est qu'un avis personnel je serais plutot comme Pouic, c'est marrant, interressant a connaitre mais sa s arrete la...

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...
    Dans le cas présent oui mais si tu ne connais pas la taille de la chaîne tu gagnes un appel à strlen().
    Pour du parcours de chaîne je fais toujours comme ça quoiqu'avec une intruction while().

  10. #10
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par ourk
    Dans le cas présent oui mais si tu ne connais pas la taille de la chaîne tu gagnes un appel à strlen().
    Pour du parcours de chaîne je fais toujours comme ça quoiqu'avec une intruction while().
    C'est vrai que vu sous cet angle sa peut etre interressant d'utiliser cette méthode pour parser une chaine inconnue. Mais est ce que l'on gagne vraiement a ne pas utiliser le strlen ???

  11. #11
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par ourk
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...
    Dans le cas présent oui mais si tu ne connais pas la taille de la chaîne tu gagnes un appel à strlen().
    Pour du parcours de chaîne je fais toujours comme ça quoiqu'avec une intruction while().
    Tu n'as pas forcément besoin d'appeler strlen, tu peux tout aussi bien faire comme condition d'arrêt:
    et tu n'appelles pas strlen.

    Je trouve que cette façon de codée peut être une légère optimisation...

    Reste à savoir si dans le code qui suit il réutilise son s* ou s'il a besoin d'un entier par la suite.

    par ailleurs un char prend moins de place en mémoire qu'un int

    Pour ce qui est du char *, je ne jurerai de rien.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  12. #12
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Difficile de répondre ça dépend de pas mal de choses. Du type de programme d'abord, de la longueur des chaînes et du code généré par le compilateur.

  13. #13
    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
    Tu gagnes le temps de parcours de la chaîne (rien n'empêche qu'elle puisse faire 10 000 caractères !).
    "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

  14. #14
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    La solution avec un pointeur (char* ici) est sûrement la solution la plus optimisée par rapport à un indice de tableau.

    En effet, lorsque que l'on manipule un pointeur, on manipule directement l'adresse de la donnée, alors qu'avec les indices de tableau, il y a un niveau d'indirection supplémentaire: d'abord il faut l'indice, puis l'adresse correspondant à l'indice.

    Si vous comprenez rien à ce que je dis, des notions d'assembleurs vous aideront à mieux comprendre.

    Pour ce qui est de l'optimisation ou de la lisibilité, il appartient au programmeur de faire son choix.

  15. #15
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    En gros utiliser les pointeurs c'est utiliser un niveau d'interprétation de moins (si j'ai bien compris).

    Cas d'utilisation de strlen:
    strlen agit sur des indices de tableaux qui eux meme agissent sur les pointeurs.

    Cas de l'exemple:
    on agit directement sur les pointeurs sans passer par les indices.

    Mais la question que je me pose toujours c'est s'il y a un réel gain (temps, utilisation processeur...)

  16. #16
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    La, franchement, on pinaille
    Avec un parcours utilisant un char *, on gagne une addition (necessaire dans le cas d'un tab[i] qui equivaut à &tab[0] + i ).
    Le gain n'etant pas enorme.... Alors dans une application ou chaque cycle est utile (embarqué temps reel par exemple) , oui, mais sur des machines courantes, le gain est ridicule ....
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  17. #17
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Pouic
    La, franchement, on pinaille
    Avec un parcours utilisant un char *, on gagne une addition (necessaire dans le cas d'un tab[i] qui equivaut à &tab[0] + i ).
    Le gain n'etant pas enorme.... Alors dans une application ou chaque cycle est utile (embarqué par exemple) , oui, mais sur des machines courantes, le gain est ridicule ....
    Si tu fais 50 gains ridicules sur un programme qui fait 10000 boucles, je pense que ça devient moins ridicule.

    Les 2 façons de faire fonctionnent, l'une d'entre elles va plus vite mais est moins lisible par le développeur non averti...(C'est quand même pas la mer à boire non plus, à comprendre)

    Je ne vois pas pourquoi se priver d'un gain de temps .

    De plus on ne gagne pas qu'une simple addition : on économise aussi en espace mémoire utilisé pour le programme puisqu'on ne déclare pas d'entier qui prends plus de place en mémoire qu'un char.
    ça fait donc plus de place pour les autres programmes sur la machine qui ne pinaillent pas
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  18. #18
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par ggnore
    De plus on ne gagne pas qu'une simple addition : on économise aussi en espace mémoire utilisé pour le programme puisqu'on ne déclare pas d'entier qui prends plus de place en mémoire qu'un char.
    Attention, on ne declare pas un char, mais un pointeur sur char : c'est different ! Sur toutes les implementations que j'ai rencontrees, la place prise en memoire pour un pointeur est celle d'un entier. Mais honnetement, je pense que cette discussion ne mene nulle-part...
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  19. #19
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Pouic
    Citation Envoyé par ggnore
    De plus on ne gagne pas qu'une simple addition : on économise aussi en espace mémoire utilisé pour le programme puisqu'on ne déclare pas d'entier qui prends plus de place en mémoire qu'un char.
    Attention, on ne declare pas un char, mais un pointeur sur char : c'est different ! Sur toutes les implementations que j'ai rencontrees, la place prise en memoire pour un pointeur est celle d'un entier. Mais honnetement, je pense que cette discussion ne mene nulle-part...
    Humm j'étais pas trop sûr pour l'histoire du pointeur.
    En même temps l'espace mémoire occupé par une donnée est composée de son adresse et de sa valeur, non ?

    l'adresse d'un double long aura la même taille que celle d'un char, mais au final la donnée double long prendra tout de même plus de place en mémoire, non ?

    L'optimisation ne mène pas nulle part, j'en suis sûr.

    D'ailleurs en voyant ce thread, je me suis dit que j'utiliserais peut être des unsigned char plutôt que des int, maintenant, pour les petites boucles qui nécessitent un indice.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  20. #20
    Membre régulier
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Hum c'est a tester sa peut toujours peut etre ajouter un point de plus dans une interro et sa peut devenir une bonne habitude a prendre...
    Pourquoi pas...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [flex/bison] un bout de code svp
    Par hunter99 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 29/12/2007, 22h26
  2. [XML][XSL] déplacer bout de code XML
    Par majanissa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 14/09/2005, 17h17
  3. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51

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