Delphi! [Résolu]

Signaler
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
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à!

en espérant une réponse, merci d'avance!

12 réponses

Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Bj Samou!

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;

Bien à toi

Jean_Jean
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009

bonjour jean jean


D'abord merci de répondre à ma question, mais ce que je veux c'est le cardinal d'un ensemble de type "set of integer" .

pour ce qui est de ta réponse à la deuxième question  je n'ai pas compris ce qu'est "unité match"

voilà si tu pouvais m'aider je t'en serais reconnaissante!
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
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.

Jean_Jean
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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;

Cordialement, Bacterius !
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009

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???? 
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
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*

Cordialement, Bacterius !
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
@ Samou!

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
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
"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)
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009

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!!!!
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
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

Jean_Jean
Messages postés
46
Date d'inscription
mardi 2 juin 2009
Statut
Membre
Dernière intervention
7 octobre 2009

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!!

MERCI.
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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)