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

Langage Pascal Discussion :

Calcul d'un nombre de caractères dans une chaîne


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Calcul d'un nombre de caractères dans une chaîne
    Bonjour tout le monde
    Je me présente : je suis un étudiant en informatique (1ere année).
    Voilà, j'ai un petit problème ,si quelqu'un peut maider ?

    Je voudrais calculer le nombre de caractères d'une chaîne de caractères (string).
    Exemple : si jai
    chaine:='jecpas' (chaine de type string)
    nb de caracter sera egal a 6
    chaine:='m'
    nb de caracter dans chaine est 1
    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
    program exemple;
    var x:string;
    i:integer;
    s:char;
    begin
    write('entrer un mot ');
    readln(x);
    i:=0;
     
       while (x[i]>chr(0)) do
           begin
            i:=i+1;
           end;
    write(i-1);
     
    readln;
     
    end.
    Voilà ce que jai fait mai le problème c'est quand on n'écrit rien : on aura i=-1
    et si je fais write(i) a la place de write(i-1) j'aurai toujours un (+1).

    Autre question : est-ce que je peux initialiser un caractère au vide ou comparer un caractère avec le vide ?

  2. #2
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    fonction length(); ?
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Manifestement, tu confonds les chaines de caractères du Pascal avec celles du C.

    En C, effectivement, la valeur 0 marque la fin de la chaine, ce qui, bien entendu, interdit d'utiliser ce caractère dans une chaine.

    En Pascal, si tu as utilisé correctement ta chaine de caractères, tu obtiens sa longueur en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    var
      s : string;
      len : integer;
    ...
      len = length(s);
    ...
    ton code est faux:
    - il suppose qu'un 0 termine la chaine, ce qui est faux, aucune manipulation de chaine en Pascal ne s'amuse à ça, aucun mécalisme n'est prévu pour systématiquement ajouter un 0 à la fin d'une chaine.

    Du coup, ta recherche du zéro terminal a de bonnes chances de te faire dépasser la taille de mémoire réservée pour la chaine, d'où problème de violation d'accès, et, de toute manière, n'a que fort peu de chance de te donner la bonne valeur.

    (De plus, rien n'interdit d'utiliser le caractère de code = 0 dans une chaine en Pascal.)


    Il te serait sans doute profitable (nécessaire ?) de lire un cours/bouquin/didacticiel pour le Pascal, car ce genre de fonction est basique, et apparaît dans toutes ces docs, si elles sont correctes.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    MERCI pour la length

    Et pour
    le chr(0) ce n'était pas pour le caractère 0 mai pour celui dont le rang est 0 dans la table ascii.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chr(0)=          (un vide ou espace)
    donc c'était pour dire que tant qu'on a un caractère dans la position i alors i:=i+1.
    C'est pour ça que j'ai demandé si c'est possile de comparer un caractère avec le vide (je sais que ça paraît un peut bizarre mais c'est tout ce que j'ai trouvé comme idée au début). C'est comme si on était en integer et je disais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tant que (x div 10 <>0) alors i:=i+1
    mais comme j'avais des caractères, ça m'a un peu gêné.
    Bon c'était juste une idée !!
    Dans tout les cas merci pour votre aide (surtout pour length).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Le 0 dont je parlais est évidemment le caractère de code 0, j'avais vraiment l'impression que c'était clair, sinon j'aurais écrit '0'.

    Et ton idée n'était pas bonne.

    Le premier et bon réflexe (le seul ?) quand on bute sur un problème aussi basique, comme celui d'obtenir la longueur d'une chaîne, c'est de regarder les docs (tu penses bien que cela existe dans tous les langages).

    Et le premier mauvais réflexe, c'est d'essayer de traduire le code d'un autre langage vers le tien, la preuve avec ton code qui vient directement d'une inspiration d'un code en C, et qui est totalement faux en Pascal.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Points : 36
    Points
    36
    Par défaut chaine se terminant pas #0
    salut thewho
    heureusement qu'il n'est qu'en première année, et qu'il ne manipule pas encore des chaines azt
    max

  7. #7
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour
    une autre solution ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var a:string;
    
    begin
    a:='titi';
    writeln(a);
    writeln( ord(a[0]) );
    end.
    affichage :
    titi
    4

    pourquoi ? parce que en TP le 1° caractère de la chaîne [n° 0] est la longueur de la chaîne elle même

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par thewho Voir le message
    Bonjour,

    Manifestement, tu confonds les chaines de caractères du Pascal avec celles du C.

    En C, effectivement, la valeur 0 marque la fin de la chaine, ce qui, bien entendu, interdit d'utiliser ce caractère dans une chaine.

    En Pascal, si tu as utilisé correctement ta chaine de caractères, tu obtiens sa longueur en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    var
      s : string;
      len : integer;
    ...
      len = length(s);
    ...
    ton code est faux:
    - il suppose qu'un 0 termine la chaine, ce qui est faux, aucune manipulation de chaine en Pascal ne s'amuse à ça, aucun mécanisme n'est prévu pour systématiquement ajouter un 0 à la fin d'une chaîne.

    Du coup, ta recherche du zéro terminal a de bonnes chances de te faire dépasser la taille de mémoire réservée pour la chaine, d'où problème de violation d'accès, et, de toute manière, n'a que fort peu de chance de te donner la bonne valeur.

    (De plus, rien n'interdit d'utiliser le caractère de code = 0 dans une chaine en Pascal.)


    Il te serait sans doute profitable (nécessaire ?) de lire un cours/bouquin/didacticiel pour le Pascal, car ce genre de fonction est basique, et apparaît dans toutes ces docs, si elles sont correctes.
    Salut tout le monde, je suis tombé sur ce sujet par recherche sur Google. Juste un petit correctif : la valeur ou le caractère spécial "\0" marque la fin de la chaîne, pas un 0.
    Merci.

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

Discussions similaires

  1. [ksh]Nombre de caractères dans une chaîne !
    Par tizilfin dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 08/10/2007, 13h56
  2. Réponses: 10
    Dernier message: 31/12/2006, 12h35
  3. Réponses: 2
    Dernier message: 17/08/2006, 12h36
  4. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12
  5. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 19h11

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