CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Question Delphi : Fonction Ord

lord_kalipsy
lord_kalipsy
Niveau 10
22 mai 2004 à 16:08:17

Bonjour

Dernièrement je me suis m´y au Pascal avec Delphi. J´ai trouvé d´excellent tutoriel sur le wouaibe mais j´ai encore quelque question. ^^

Dans l´exemple suivant(en fait pas juste dans l´exemle) tiré d´un tuto je n´arrive pas à comprendre la fonction Ord :

procedure TForm1.Button1Click(Sender: TObject);
type
TTypeSupport = ( tsDisq35, tsDisqueDur, tsCDRom, tsDVDRom, tsZIP);
var
Supp1: TTypeSupport;
begin
Supp1 := Low(TTypeSupport);
ShowMessage(IntToStr(Ord(Supp1)));
Inc(Supp1);
ShowMessage(IntToStr(Ord(Supp1)));
Dec(Supp1);
ShowMessage(IntToStr(Ord(Supp1)));
end;

Si vous pouviez m´éclairer un peu se serai sympa. ^^

Merci

«psy

lord_kalipsy
lord_kalipsy
Niveau 10
22 mai 2004 à 17:15:49

Ok ok je crois avoir compris...

Yoda_Software
Yoda_Software
Niveau 30
22 mai 2004 à 17:28:57

Fait Ctrl-F1 sur le mot ord pour obtenir de l´aide sur cette fonction. L´aide de Delphi est en général très bien faite !

lord_kalipsy
lord_kalipsy
Niveau 10
22 mai 2004 à 19:13:01

Le tableau commence par intervalle donc on est pas obliger de commencer par 0 comme dans le C/C++ ?

Yoda_Software
Yoda_Software
Niveau 30
22 mai 2004 à 19:30:22

Tu peux définir comme tu veux les indice min et max des tableaux.
Ex. :
array[1..10] of . ..
array[-30..60] of . ..
array[40..250] of . ..
array[´a´..´z´] of . ..

lord_kalipsy
lord_kalipsy
Niveau 10
22 mai 2004 à 19:35:36

même [´a´ . . ´z´] ? chouette ^^ le tableau avec Delphi sont beaucoup plus qu´avec le C ou on commence avec le 0 ( souvent les débutants font des erreurs avec ça.)

merci :)

«psy

Yoda_Software
Yoda_Software
Niveau 30
22 mai 2004 à 19:45:04

tu peux même faire un truc comme ça, mais je ne me souvient plus très bien :
Type
Couleurs = orange, vert, bleu, violet, rose;
array[orange.. rose] of . ..

Dès que je peux, je reteste ça et je te tiens au courant !

dnob700
dnob700
Niveau 10
22 mai 2004 à 20:42:11

c´est d´ailleur étrange, c´était une focntion du VB où on pouvait déclaré des tableau :

dim tableau(5 to 48) as . ..

mais avec le . NET, on est repasser au genre C avec des tableau de base 0. Bizarre de viré ce genre de chose.

Yoda_Software
Yoda_Software
Niveau 30
22 mai 2004 à 21:22:16

Surtout que c´est bien pratique !
Je ne sais pas ce qu´il en est pour Delphi 8 . net !

lord_kalipsy
lord_kalipsy
Niveau 10
26 mai 2004 à 03:07:21

Est ce que selon les normes c´est mieux de commencer par 0 ? ( lisibilité etc . ..)

Kelios
Kelios
Niveau 8
26 mai 2004 à 03:36:17

" Est ce que selon les normes c´est mieux de commencer par 0 ? ( lisibilité etc . . .)"
Si tu veux savoir d´où vient l´indexage de zéro...

Indexer à partir du zéro ne vient pas vraiment d´une norme mais d´un simple raisonnement mathématique, découlant du déférençage:

Adresse du i-eme élément = b + i*t, où:
b est l´adresse de base;
i est l´index;
t est la taille des objets du tableau.

Ainsi, b pointe vers le début du tableau, soit le premier élément. Pour accéder au deuxième, il faut aller à l´adresse de la base, plus la taille d´un de ces éléments.

Soit un tableau de 4 éléments de, disons, 4 bytes chaqu´un.

. ... < 4 bytes, représentés par 4 points
[1 ][2 ][3 ][4 ]
^...^
b...x?

ici, pour accéder au 2e élément,[2 ], il faut donc partir du premier élément, pointé par b, et y additionner 1*4 bytes, pour passer le premier élément du tableau, [1 ].
Pour accéder au 3e, il faut faire le même principe, mais y additionner 8 bytes au lieu de quatre, pour passer et [1 ] ET [2 ]. Donc, en suivant la logique, on obtient:
b+i*t, avec i qui part de 0 ( pour le premier élément, i vaut 0)

Remarquez ici en C ( Je suis désolé de ne pas parler directement de Delphi ni de VB, pourtant le sujet direct de ce topic):

type Tableau[Taille];
Et pour déférencer:
Tableau[Index];

Mais en fait, c´est directement importé de la logique mathématique!
En effet, Tableau est un pointeur, n´oublions pas, et on a donc:

b + i*t
Tableau + Index*sizeof(type)
! !!
le sizeof(type) est sous entendu, pour alléger. On a donc une forme ainsi:

b[i].

C´est simple, non?
Donc voilà pourquoi à la base, on commençait les indices de 0.

Maintenant, de nos jours, cela n´a plus vraiment de rapport, avec les languages modernes. Disons que l´on peut les garder par norme, oui, aussi pour ne pas mélanger les programmeurs vétérans habitués à la vielle syntaxe d´index qui part de 0 se formant à un nouveau language. Du moins c´est cela que j´imagine.

Kelios
---------

Sarafan
Sarafan
Niveau 10
26 mai 2004 à 09:09:15

Dans ton exemple TTypeSupport n´est pas un tableau c´est type enumérer.
Un type tableau se déclare avec set of.

par exemple :
Type
TTypeSupport = ( tsDisq35, tsDisqueDur, tsCDRom, tsDVDRom, tsZIP);

TTabSupport = set of TTypeSupport;

Ton exemple fonctionnerait aussi comme ça(je ne reprend pas les déclarations) :

Supp1 := tsDisq35;
ShowMessage(IntToStr(Ord(Supp1)));
Supp1 := tsDisqueDur;
ShowMessage(IntToStr(Ord(Supp1)));
Supp1 := tsDisq35;
ShowMessage(IntToStr(Ord(Supp1)));

ou alors :

ShowMessage(IntToStr(Ord(tsDisq35)));
ShowMessage(IntToStr(Ord(tsDisqueDur)));
ShowMessage(IntToStr(Ord(tsDisq35)));

donne le même résultat.

Technix59
Technix59
Niveau 5
28 mai 2004 à 14:33:53

Salut Lord & salut à tous les autres.

Globalement, la fonction ORD renvoie l´indice d´un élément d´un tableau ou d´une liste énumérée.
Si tu prends les caractères ASCII par exemple qui forment un tableau de 255 éléments, la fonction ORD(´A´) te renverra 65 sachant que la lettre ´A´ est la 65ème dans ce tableau.
Dans ce cas précis, ORD et l´inverse de CHR qui elle te donne la valeur de l´index dans le tableau et donc CHR(65) te renverra ´A´.

J´espère que ça t´aidera un peu et surtout, une très bonne continuation.

Technix59
Technix59
Niveau 5
28 mai 2004 à 14:37:55

Petit complément sur le post précédent.

Lord, en Delphi il existe plusieurs types de chaînes de caractères dont les STRINGS et les PCHAR qui sont les chaînes AZT ( à zero terminal - Elles se terminent par CHR(0)).
Je voulais donc dire que le tableau ASCII comportent 256 éléments de 0 à 255.

Ce qui est amusant c´est de modifier ( très déconseillé) de faire varier la valeur de Str[0] pour Str: String;

Ca revient à faire un Copy(Str, 1, Valeur de Str[0]).

Allé, @+

DasHuhn
DasHuhn
Niveau 10
28 mai 2004 à 23:02:02

Up anti flood

Yoda_Software
Yoda_Software
Niveau 30
28 mai 2004 à 23:04:45

Laisse courrir, il se fatiguera tout seul !
Ca ne mérite pas de réponse !

lord_kalipsy
lord_kalipsy
Niveau 10
28 mai 2004 à 23:10:47

Merci de vaux explication. Pour les PCAHR je savais pas alors c´est utile. :)

amicalement,

«psy

DasHuhn
DasHuhn
Niveau 10
28 mai 2004 à 23:12:17

Bon d´accord. Idée : développer un bot. C´est quand même dingue que sur un forum Programmation on doive tout faire à la main...

lord_kalipsy
lord_kalipsy
Niveau 10
28 mai 2004 à 23:13:45

Lol ^^ oui se serais sympa. Mais avec les truc anti-flood je crois pas que ce sois possible . ...

Gasquet01
Gasquet01
Niveau 2
28 mai 2004 à 23:15:18

ET CONNARD T´ARRETE DE ME FAIRE CHIER

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment