Comprendre la fonction ord en pascal [Résolu]

Comprendre la fonction ord en pascal [Résolu] - Delphi/Pascal - Programmation

Marsh Posté le 06-11-2005 à 12:53:20    

Salut, je viens de me mettre au pascal, et j'ai un problème sur du code. Je m'explique.
Je cherche à réaliser une fonction qui détecte si à l'entrée d'un caractère, on a bien un integer. J'ai récupérer un morceau de code sur le net, mais je n'arrive pas à le comprendre.
 

(*  Teste si le caractère passe‚ en paramètre renvoie    *)
(*  … une fonction d'après la table ASCII.              *)
function IsFunct(c:char):boolean;
begin
IsFunct:=((ord(c) in [0..27]));
end;

 
d'apres ce que j'ai trouvé sur le net, la fonction ord trouve la place de c, mais je vois pas en quoi ca teste une fonction?


Message édité par bossgama le 09-11-2005 à 14:08:26
Reply

Marsh Posté le 06-11-2005 à 12:53:20   

Reply

Marsh Posté le 06-11-2005 à 13:35:27    

Dans ce code ça regarde si le code ASCII est entre 0 et 27 (Ord renvoie la valeur numérique correspondant à un caractère ou une enum)
Mais dans ton cas tu devrais plutôt faire
Result := c in ['0'..'9']
si tu veux voir si le caractères est un chiffre.


Message édité par antp le 06-11-2005 à 13:36:15

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-11-2005 à 13:48:50    

je suis d'accord pour tester la nature du caractère, mais il faut ensuite convertir le char en integer, et ce n'est possible que si on a le code ascii correspondant.
Par contre je ne comprends toujours pas pourquoi le code ascii entre 0 et 27 est considéré comme mauvais, vu que dans la table ascii que j'ai regardé (http://www.lookuptables.com/) ca serait plutot entre 48 et 57.
Non?

Reply

Marsh Posté le 06-11-2005 à 14:10:01    

La fonction que t'as mise dans le premier post ne teste pas si le caractère est un chiffre mais si il s'agit d'un caractère de contrôle je suppose (bien que, ça devrait aller jusqu'à 31 et non 27 dans ce cas).
De toute façon pas besoin d'aller voir les codes ASCII, tu peux directement utiliser des caractères comme je l'ai mis dans mon post précédent. C'est mieux de faire comme ça que de taper 48..57 qui sont nettement moins "parlant".


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-11-2005 à 14:07:50    

Bon j'ai fini ma fonction et elle marche, merci pour ton aide antp.
 
Pour ceux qui sont intéressés, voila ma fonction  :) :

Code :
  1. function GetInt() : integer;
  2. {Permet d'utiliser des bibliothèques de fonctions existantes}
  3. uses crt,sysutils;
  4. {définition des variables}
  5. var
  6.    c : char;
  7.    valeur : integer;
  8.    variable : string;
  9.    X,Y,L : byte;
  10. {définition du programme}
  11. begin
  12.      variable := '';
  13.      writeln('Rentrer un entier');
  14.      Y := whereY;                                               {On récupère les coordoonées du pointeur}
  15.      X := whereX;
  16.      repeat
  17.            repeat
  18.                  c := readkey;
  19.                  gotoXY(X,Y);                                   {Affichage du pointeur aux coordonnées X et Y}
  20.            until ((c in ['0'..'9']) or ((c = #45) and (signe = true) and (variable = '')) or (((c = #8) or (c = #13)) and (variable <> '')));  {Tant que le caractère n'est pas un nombre, un backspace, un moins ou un return}
  21.            write(c);
  22.            if c = #45 then              {Teste si le caractère est négatif}
  23.               begin
  24.                    signe := false;
  25.                    inc(X);
  26.               end;
  27.            if c = #8 then                                      {Si appui sur backspace alors on supprime le dernier caractère}
  28.               begin
  29.                    L := length(variable);                       {Récupère la taille de la chaine}
  30.                    delete ( variable, L, 1 );                   {Efface 1 caractère à partir de L dans variable}
  31.                    dec(X);                                      {Décremente X}
  32.                    gotoXY(X,Y);
  33.                    clreol;
  34.               end;
  35.            if ((c = #13) and (variable <> '')) then             {Si appui sur return et un entier a été rentré on termine la boucle}
  36.               begin
  37.                    break;
  38.               end;
  39.            if ((c <> #8) and (c <> #13) and (c <> #45)) then    {On incrémente la chaine du caractère entré}
  40.               begin
  41.                    if (variable = '') then
  42.                       begin
  43.                            variable := c;
  44.                       end
  45.                    else
  46.                        begin
  47.                             variable := variable + c;
  48.                        end;
  49.                    inc(X);                                      {On incrémente X}
  50.               end;
  51.      until ((c = #13) and (variable <> ''));
  52.                valeur := StrToInt(variable);                              {On convertit la chaine de caractères variable en un integer}
  53.                if signe = false then
  54.                   begin
  55.                        GetInt := 0 - valeur;
  56.                   end
  57.                else
  58.                    begin
  59.                         GetInt := valeur;
  60.                    end;
  61.                writeln;
  62. end;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed