Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1589 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comprendre la fonction ord en pascal [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comprendre la fonction ord en pascal [Résolu]

n°1239626
bossgama
Posté le 06-11-2005 à 12:53:20  profilanswer
 

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
mood
Publicité
Posté le 06-11-2005 à 12:53:20  profilanswer
 

n°1239654
antp
Super Administrateur
Champion des excuses bidons
Posté le 06-11-2005 à 13:35:27  profilanswer
 

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
n°1239659
bossgama
Posté le 06-11-2005 à 13:48:50  profilanswer
 

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?

n°1239671
antp
Super Administrateur
Champion des excuses bidons
Posté le 06-11-2005 à 14:10:01  profilanswer
 

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
n°1242188
bossgama
Posté le 09-11-2005 à 14:07:50  profilanswer
 

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;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Comprendre la fonction ord en pascal [Résolu]

 

Sujets relatifs
[resolu] Access ??Comment inclure une fonction "spoilers" dans un script de news
[Resolu]preg_replace[resolu] manipulation d'image TIFF
Macro excel de sauvegarde [resolu]Coment écrire dans une case d'un tableau [Résolu ]
[Résolu] unhandled exception class System.SecurityEfichier non accessible pr un visiteur, mais oui pr le serveur [resolu]
supprimer contour image cliquable [RESOLU]Appel dynamique à une fonction ou sub
Plus de sujets relatifs à : Comprendre la fonction ord en pascal [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR