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

Turbo Pascal Discussion :

[TP] Problème avec les intervalles de char


Sujet :

Turbo Pascal

  1. #21
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re:
    voici la procédure modifié
    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
     
    Procedure Test(f:string);
       var n:byte;
       Begin
          if length(f)<10 then
                writeln('Pas assez de chiffre ! ')
     
          else
          if length(f)>10 then
             writeln('Trop de chiffre ! ');
    		 for i:=1 to 10 do
     
    		 case  s[i] of'a'..'z': write ('erreur');end;
     
       End;
    mais il faudra que tu aprenne à résoudre tes problémes facilement et ça ne viendera pas comme ca.

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Lol ouais tu as parfaitement raison ...
    Dans tous les cas je te remerci infiniment pour tout ce que tu as fais, et Alcatîz aussi !! Je promet de me débrouiller beaucoup plus une prochaine fois !!
    Merci Encore !! ==> Résolu

  3. #23
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 968
    Points : 59 743
    Points
    59 743
    Billets dans le blog
    2
    Par défaut
    Les tests du nombre de chiffres et de la présence de lettres peuvent très bien être faits dans la fonction BalayageIn, qui renverrait alors un code d'erreur :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    program Telephone;
    uses crt;
    var
       s:string;
       i,k,j:byte;
       Fin : Boolean;
     
    Function BalayageIn (var Chaine : String) : Integer;
    Var IndexChaine, IndexResultat : Byte;
        CodeErreur : Integer;
        Resultat : String;
    Begin
      CodeErreur := 0;
      IndexChaine := 1;
      IndexResultat := 0;
      while (IndexChaine <= Length(Chaine)) and (CodeErreur = 0) do
        begin
          if Chaine[IndexChaine] in [#48..#57]
             then   (* Chiffre : OK *)
               begin;
                 Inc(IndexResultat);
                 Resultat[IndexResultat] := Chaine[IndexChaine];
               end
             else
               if Chaine[IndexChaine] in [#65..#90,#97..#122]
                  then   (* Lettre *)
                    CodeErreur := 1;
          Inc(IndexChaine);
        end;
      if CodeErreur = 0
         then
           if IndexResultat < 10
              then   (* Moins de 10 chiffres *)
                CodeErreur := -10
              else
                if IndexResultat > 10
                   then   (* Plus de 10 chiffres *)
                     CodeErreur := 10;
      if CodeErreur = 0
         then   (* Renvoi du résultat *)
           begin
             Resultat[0] := Char(IndexResultat);
             Chaine := Resultat;
           end;
      (* renvoi du code d'erreur *)
      BalayageIn := CodeErreur;
    End;
     
    Procedure Format_Points(var t:string; a:string);
       begin
       insert(a,t,3); insert(a,t,6); insert(a,t,9); insert(a,t,12);
       write(t);
       end;
     
    Begin
    clrscr;
     
    Fin := False;
    repeat
          writeln('Saisir le numéro de téléphone : ');
          readln(s);
          case BalayageIn(s) of
            0 : Fin := True;   (* OK : fin de boucle *)
            1 : WriteLn('Erreur : contient au moins une lettre');
            -10 : WriteLn('Pas assez de chiffres');
            10 : WriteLn('Trop de chiffres');
          end;
    until Fin;
     
    Format_Points(s,'.');
    readln;
     
    End.
    La procédure Test n'a alors plus aucune raison d'être.

  4. #24
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re:
    oui c'est mieux comme ca alcatiz ,n'oublie pas le tag résolu ,encore une petite chose Petrucci que je ne te vois plus jamais dans un forum je plaisentais

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Voila je l'ai mis en résolu

    J'ai lâchement copié vos codes !! honte à moi ...

    Mais cela fonctionne très bien !!


    Lol diden tu plaisante peutetre, mais si tu le dis, c'est que tu voulais que je l'entende ..... lol en tout cas rassure toi, si j'ai d'autres question je vais pas me gêner Pour ton plus grand plaisir ......

  6. #26
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 968
    Points : 59 743
    Points
    59 743
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Petrucci
    Voila je l'ai mis en résolu
    J'ai lâchement copié vos codes !! honte à moi ...
    Hum... ce n'est pas la meilleure façon d'apprendre, n'est-ce pas ?
    D'après les questions que tu as posées sur ce fil de discussion, il me semble que tu devrais quand même approfondir la notion de fonction en Pascal. C'est juste une suggestion.

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Voila, Alcatîz, j'ai bien approfondi la notion de fonction, je pense être au point à ce niveau là biensur en disant cela comme ça, il n'est pas envisageable de me croire, mais je garde une esquisse de début de lueur d'espoir malgré tout ...

    En revanche, une notion me chiffonne : j'ai bien compris tout le programme, sauf cette fameuse ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Resultat[0] := Char(IndexResultat);
    Si quelqu'un peut m'expliquer ça comme à quelqu'un qui n'avait jamais fait d'informatique, il ne pourrait qu'améliorer son expression, et me soulagerais d'un dilemme dont Alcatîz est la cause ...

    MERCI !

    P.S: cette ligne est dans le dernier code d'Alcatîz

  8. #28
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Cette ligne est en fait ce qu'on appelle un transtypage, c'est-à-dire que l'on va transformer une variable d'un certain type A en une expression de type B. Ici la variable IndexResultat de type Byte sera transformée en expression de type Char. Ce genre de manipulation est utile pour la gestion des chaînes, ou lors de l'utilisation des pointeurs (avec POO).

  9. #29
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 968
    Points : 59 743
    Points
    59 743
    Billets dans le blog
    2
    Par défaut
    Il s'agit d'un transtypage.

    Une chaîne de type String est une suite de caractères dont le premier contient la longueur effective de la chaîne, codée sur un octet.

    A la fin de la boucle, IndexResultat contient la longueur effective de la chaîne. Il n'y a plus qu'à aller copier cette valeur dans le premier octet de la chaîne. Mais ! Le compilateur renverra une erreur si tu essayes d'affecter une variable de type byte au 1er caractère de la chaîne ! Grâce au transtypage, le compilateur verra IndexResultat non pas comme un byte mais comme un char, et il n'y aura plus d'erreur de compilation.

    P.S. J'espère que le "dilemme" dont je suis la cause ne t'empêche pas de dormir !

    [Edit]
    Grillé par Wormful_Sickfoot
    [/Edit]

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    WAW !! Je suis à 100% satisfait par vos 2 réponses combinées !! J'ai absolument tout compris !! (et ce n'est pas ironique !! )
    le hasard fait parfois bien les choses !!
    Merci à tous les deux !!

    Vois-tu cher Alcatîz, le somnifère et le verre d'eau sur ma table de chevet sont arrivés là par ta faute, et ils s'en iront grâce à toi !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/11/2012, 09h24
  2. Erreur de compilation avec les string et char*
    Par number9 dans le forum C++
    Réponses: 3
    Dernier message: 30/04/2012, 10h58
  3. [XL-2007] Probl formule avec des intervales de dates
    Par alexandrek dans le forum Excel
    Réponses: 0
    Dernier message: 09/02/2011, 12h56
  4. Problème avec les tableaux de char.
    Par Letinono dans le forum Débuter
    Réponses: 3
    Dernier message: 29/05/2008, 17h24
  5. probl. avec les tableaux d'indices de sommets
    Par kagemusha dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2006, 20h41

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