Bonjour à tous!
je voudrais savoir s'il existe une fonction prédéfinie en Delphi qui donne le cardinal d'un ensemble d'entiers, ainsi qu'une fonction prédéfinie donnant le minimum entre deux nombre entiers, voilà!
1. Si tu as une varaible de ton ensemble (tableau) définie par array of MesChoses (c'est à dire un tableau ouvert) alors tu doit
pouvoir identifier le nombre d'élément parl'instruction High.
Ex : Var MonEnsemble : array of MesChoses;
Tu peux écrire High(MonEnsemble) qui te donnera le Nb d'éléments - 1 car un tableau ouvert commence tj à 0. Voir aide delphi!
2. Min(A,B) donne leplus petit de (A,B) = Unité Math de delphi;
1. Si tu ne sais pas ce qu'est une unité, alors je te conseille d'acquérir un tutorial gratuit sur Delphi. Il y en a plein. Google télécharger Cours gratuit Delphi par exemple. L'unité Math est donc un ensemble de fonctions mathématiques distribué par Borland avec Delphi dans le répertoire source.
2. Pour l'ensemble SET, je ne sais pas. Quand j'ai besoin de compter j'utilise des tableaux, ça offre plus de possibilités.
function Min(A, B: Integer): Integer;
begin
if A < B then Result := A else Result := B;
{
Si A < B, alors on renvoie A.
Si A = B, alors on renvoie B.
Si A > B, alors on renvoie B.
}
end;
Merci encore jean jean, il est vrai que je ne connais pas toute les composantes de DELPHI meme si j'ai lu quelques tutoriels mais le fait est que je suis prise par le temps; alors s'il te plait je voudrais savoir où se trouve le répertoire source????
Tu cherchais une fonction donnant le plus petit entier entre deux entiers.
Merci encore d'avoir pris le temps de lire la fonction que j'avais concoctée avec amour pour toi. J'avais même mis des commentaires ... *sort en claquant la porte*
1. Euh, autant pour moi, l'unité sorce Math.pas n'est plus disponible directement. On trouve par contre sa version compilée Math.dcu qui est ici : C:\Program Files\Borland\Delphi7\Lib
2. Donc si tu veux savoir tout ce qu'il y a dans l'unité Math, il te suffit d'utiliser l'aide delphi. tu fait rechercher Math et tu as toutes les fonctions mathématiques del'unité qui y est décrite. J'utilise perso une autre méthode lorsque je veux connaître l'unité à laquelle appartient une fonction.
Je tape au milieu du code le nom de la fonction, par exemple Min, je met mon curseur dessus et je tape F1, tu auras accès directement au détail...
3. Bactérius t'a écris la fonction telle qu'elle est écrite dans Math.pas pour que tu comprennes mieux. Pédagogique ce Bactérius!!
Bon code!
Jean_Jean
"Quand j'ai besoin de compter j'utilise des tableaux, ça offre plus de possibilités."
heu les set et les array, c'est pas vraiment la meme chose. Chacun des 2 a son propre interet, et sont bien distincts.
pour parcourir un ensemble tu peux faire :
TMySet = (ms1, ms2, ms3);
var
ms: TMySet;
begin
for ms := Low(TMySet) to High(TMySet) do
showMessage(IntToStr(Ord(ms))); //Ord renvoie la cardinalité de ms (0 pour ms1, 1 pour ms2, ...)
end;
tu peux aussi specifier toi meme les valeur
type
TMySet = (ms1=1, ms2=2)
Merci pour ton aide Bactérius contrairement à ce que tu crois j'ai aussi lu ta réponse mais le fait est qu'elle ne correspondait pas exactement à ce que je cherchais ....merci quand meme!!!!
Salut Guillemouze
Tu as raison de me reprendre : "Quand j'ai besoin de compter j'utilise des tableaux, ça offre plus de possibilités."
Comme elle ne nous a pas précisé ce qu'elle voulait faire, je me suis permis...
Par contre je ne me souvenais plus que Low et High fonctionnaient également sur les ensembles...
Bien à vous
Bonjour Guillemouze!
D'abord Merci de ta réponse; mais j'ai eu un problème en essayant de l'implémenter car dans ton code tu as posé :
var
ms: TMySet; //donc ms est un ensemble
mais plustard tu utlilises "ms" pour parcourir l'ensemble or "ms" doit etre de type ordinal pour servir d'indice de parcours, je vais expliquer un peu mieux mon problème:
j'ai un tableau(ARRAY) où chaque case contient un ensemble(SET) d'entier; et dans une autre étape j'ai besoin de calculer le cardinal de l'intersection d'ensemble.
voilà j'espere que c'est plus clair;....de l'aide serait la bienvenue!!
ah oui merde, je suis parti sur les enum au lieu des set
dans ce cas je pense qu'il faut que tu fasse ton calcul a la mano:
type
TMonEnum = (...);
TMesEnums = set of TMonEnum;
TMonArray = array of TMesEnums;
var
me: TMonEnum;
i: integer;
tab: TMonArray
card: integer;
begin
...
for i := 0 to Length(tab)-1 do
begin
card := 0;
for me := Low(TMonEnum) to High(TMonEnum) do
if me in tab[i] then
Inc(card);
end;
Petite info : tu peut caster les Set en Byte (ou word ou integer selon la taille de l'enum associé)
dans ce cas, chaque element de l'enum a un bit distinct. ainsi, si ton set contient le 1er et le 3eme element de l'enum, il vaudra 5 (00000101 en binaire)