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 :

Exercice du k&r pas clair


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut Exercice du k&r pas clair
    Bonjour,

    voilà l'énoncé d'un des exercices du livres :


    Écrivez un programme detabuler qui remplace les caractères de tabulation qu'il reçoit par le nombre d'espaces nécessaires pour atteindre la prochaine tabulation. Considérez que les tabulations sont positionnées à intervalles réguliers, toutes les n colonnes. Faut-il que n soit une variable ou une constante symbolique?
    ce que j'ai compris c'est remplacé les \t par des espaces, si par exemple n = 3 je remplace chaque \t que je trouve par 3 espaces.

    Je me demande si j'ai bien compris? parce que dans le livre ils disent que cet exercice est compliqué, et là ça me parait trop simple, donc y doit y avoir quelque chose que je vois pas

    Merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ce que j'ai compris c'est remplacé les \t par des espaces, si par exemple n = 3 je remplace chaque \t que je trouve par 3 espaces.
    Non, c'est plus complexe car tu dois savoir en quelle position sur la ligne tu te trouves et remplacer le '\t' par le nombre de blancs permettant d'aller à la prochaine position multiple de n . Exemple : (^ représentant un blanc)
    "abc\tdefg" -> "abc^^^defg"
    "abcd\tefg" -> "abcd^^efg"
    "abcde\tfg" -> "abcde^fg"
    "abcdef\tg" -> "abcdef^^^g"

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par diogene
    Non, c'est plus complexe car tu dois savoir en quelle position sur la ligne tu te trouves et remplacer le '\t' par le nombre de blancs permettant d'aller à la prochaine position multiple de n . Exemple : (^ représentant un blanc)
    "abc\tdefg" -> "abc^^^defg"
    "abcd\tefg" -> "abcd^^efg"
    "abcde\tfg" -> "abcde^fg"
    "abcdef\tg" -> "abcdef^^^g"

    dans l'exemple que tu me donnes n = 1 non ??

    merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Non, n=3.
    Si on avait n=1, chaque tab ferait simplement 1 espace.

    Avec n=4, on aurait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    "a\tbcdefghij" -> "a^^^bcdefghij"
    "ab\tcdefghij" -> "ab^^cdefghij"
    "abc\tdefghij" -> "abc^defghij" 
    "abcd\tefghij" -> "abcd^^^^efghij" 
    "abcde\tfghij" -> "abcde^^^fghij"
    "abcdef\tghij" -> "abcdef^^ghij"
    "abcdefg\thij" -> "abcdefg^hij"
    "abcdefgh\tij" -> "abcdefgh^^^^ij"
    "abcdefghi\tj" -> "abcdefghi^^^j"
    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.

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    j'ai vraiment du mal à saisir le principe

    je prends juste tes 2 premières lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "a\tbcdefghij" -> "a^^^bcdefghij"
    "ab\tcdefghij" -> "ab^^cdefghij"

    on a dit n = 4, donc chaque tab doit faire 4 espaces, ce que je ne comprends pas :

    1 - pourquoi à chaque fois qu'on passe à la ligne suivante le \t se décale d'une position, pourquoi on aurait pas ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "a\tbcdefghij" -> "a^^^bcdefghij"
    "abc\tdefghij" -> "ab^^cdefghij"
    "abcde\tfghij" ->
    ou même encore à chaque ligne un décalage aléatoire de \t
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "\tabcdefghi"
    "\tabcdefghi"
    "ab\tcdefhgi"
    "a\tbcdefghi"
    PS : tout ça me fait mal à la tête, dire qu'y en a qui passent leur journées à la plage en ce moment

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    on a dit n = 4, donc chaque tab doit faire 4 espaces, ce que je ne comprends pas :
    Justement non. Une tabulation amène le curseur à la position suivante de tabulation qui dans cet exemple sont placées tout les 4 caractères
    pourquoi à chaque fois qu'on passe à la ligne suivante le \t se décale d'une position, pourquoi on aurait pas ça :
    Il s'agit d'exemples indépendants les uns des autres pour montrer comment la chaîne doit être transformée selon la position du \t dans la chaîne.

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par diogene
    Justement non. Une tabulation amène le curseur à la position suivante de tabulation qui dans cet exemple sont placées tout les 4 caractères
    Il s'agit d'exemples indépendants les uns des autres pour montrer comment la chaîne doit être transformée selon la position du \t dans la chaîne.

    oki je commence petit à petit à saisir le principe,

    juste une chose, dans code blocks j'avais remarqué un comportement que j'avais jamais réussi à expliquer, selon le nombre de caractères que je tapes sur une ligne, le nombre d'espaces que prend une tabulation est différent genre pour une tabulation équivalent à trois espaces j'ai les résultats suivants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    si tape : "a\tbc" -> "a^^bc"
    si tape : "ab\tc" -> "ab^c"
    si tape : "abc\t" -> "abc^^^"
    c'est exercice essaie de faire la même chose c'est ça? et là question qui tue, à quoi ça sert ??

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    A aligner.

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    oki, après avoir tester ça a l'air d'être implémenter dans tous les éditeurs de texte, me reste plus qu'a codé tout ça.

    merci pour l'aide

  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
    d'où le nom : tabulation == table


  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par exhortae
    oki, après avoir tester ça a l'air d'être implémenter dans tous les éditeurs de texte, me reste plus qu'a codé tout ça.
    C'est meme implemente sur les machines a ecrire mecaniques.

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    je met le programme si un jour quelqu'un fait une recherche

    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
     
    /* --------------------------------------------------------------------------
       Fonction : Remplace les tabulations par des espaces
       -------------------------------------------------------------------------- */
    #include <stdio.h>
     
    #define INTERVALLE 3
     
    /* --------------------------------------------------------------------------
       detabuler ()
       --------------------------------------------------------------------------
       Role : Remplace les tabulations par des espaces
       -------------------------------------------------------------------------- */
    void detabuler (int intervalle)
    {
       int c;
       int nombre_espaces;
       int position;
     
       position = 1;
       while ((c = getchar ()) != EOF)
       {
          if (c == '\t')
          {
             nombre_espaces = intervalle - (position - 1) % intervalle;
     
             while (nombre_espaces > 0)
             {
                putchar (' ');
                --nombre_espaces;
                ++position;
             }
          }
          else if (c == '\n')
          {
             putchar ('\n');
             position = 1;
          }
          else
          {
             putchar (c);
             ++position;
          }
       }
    }
     
    int main (void)
    {
       detabuler (INTERVALLE);
     
       return 0;
    }

  13. #13
    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
    il manque stdlib.h ...

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Par défaut
    Citation Envoyé par souviron34
    il manque stdlib.h ...

    pourquoi ?

    le code compile sous gcc sans erreur ni warning

  15. #15
    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
    ne serait-ce que la définition des types...

    stdio ne s'occupe (à priori ) que des IO.

    (sauf que par sécurité ils incluent stdlib...)

    Mais quand on code, il faut TOUJOURS inclure stdlib..

  16. #16
    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
    ne serait-ce que la définition des types...
    Si il manquait quelque chose, ça ne compilerait pas.
    stdio ne s'occupe (à priori ) que des IO.

    (sauf que par sécurité ils incluent stdlib...)

    Mais quand on code, il faut TOUJOURS inclure stdlib..
    Pure invention. On ne met <stdlib.h> (ou n'importe quel autre header) que si c'est nécessaire. Evidemment, il faut avoir un compilateur bien réglé qui signale les absences de prototypes.

    Se méfier des expériences anciennes pas toujours bien expliquées à l'époque... Ca peut mener à des conclusions erronées jamais remises en cause...

  17. #17
    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
    Citation Envoyé par Emmanuel Delahaye
    Se méfier des expériences anciennes pas toujours bien expliquées à l'époque... Ca peut mener à des conclusions erronées jamais remises en cause...
    milles excuses ...


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

Discussions similaires

  1. tutorial ssl pas clair
    Par chillansky dans le forum Apache
    Réponses: 6
    Dernier message: 03/07/2007, 17h04
  2. [Dates] Pb avec dates, aides pas claires en fait :(
    Par zax-tfh dans le forum Langage
    Réponses: 4
    Dernier message: 10/09/2005, 13h55
  3. Trucs pas claire
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 09/07/2003, 21h10

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