De l'aide!! Types énumérés et ensembles

Résolu
Dancsi27 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 20 mars 2009 - 18 mars 2009 à 21:21
Yorundr Messages postés 289 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 11 juin 2012 - 30 déc. 2009 à 17:37
Allo tout le monde,

j'ai une petite lab à faire pour lundi prochaine, j'ai déjà commencé à placer les éléments nécessaires sur la fiche et à déclarer les types énumérés et les types ensembles dans le code source.

Le programme  est composé de checkboxes (il y en a 11, qui sont nommés avec des loisirs différents (musique, hockey, tennis, voyage, baseball, lecture, cinéma, théâtre, escalade, golf et football) qui se retrouvent dans un groupbox. Il y a une mémo, 1 edit box et 3 buttons (Quitter, Afficher l'ensemble les loisirs choisis et compter l'ensemble des loisirs choisis).

L'usager peux cocher 1 ou plusieurs checkbox et quand il appuie sur le button Afficher, la mémo affiche (avec un string) les loisirs choisis dans l'ordre ordonné (ex: si musique, cinéma et golf sont choisis, alors la mémo affiche les 3 loisirs dans cette ordre). Le button Compter doit afficher dans le edit box le nombre de loisirs choisis (c'est évident  ), donc dans ce cas, 3.

J'ai trois 3 types énumérés/ensembles à déclarer:

TLoisirs = ( l'énumération des 11 loisirs);

TEnsLoisirs = set of TLoisir;

et TSTR255 = string[255];

Pour faire le lab correctement (en utilisant ces types), je dois utiliser 2 fonctions et 2 procédures
Et c'est ici que je suis bloqué un peu, je ne sais pas comment débuter, mais je px donner les consignes, si qq'un peut me donner un ptit coup de main.

La fonction Construire : TEnsLoisirs permet de retourner un ensemble qui contient les loisirs choisis par l'usager.

La fonction ConvertLoisirs(ens: TEnsLoisirs): TSTR255 nous retourne une chaîne composée de plusieurs lignes; chaque ligne constitue une activité choisie par l'usager

La procédure btCompterClick (en cliquant sur le button Compter) permet de compter le nombre de loisirs choisis; il faut utiliser la fonction Construire ici pour avoir l'ensemble des loisirs choisis puis on compte les éléments de cet ensemble

Et finalement la procédure btAfficherClick permet d'afficher les loisirs choisis par l'usager dans une mémo séparés par des sauts de ligne. Il faut utiliser ici les fonctions ConvertLoisirs et Construire.

La plus grande partie du programme c'est bien sûr ces 4 codages et je suis déjà bloqué sur la 1er fonction..lol
Je vais essayer de m'avancer un peu c'est juste que j'ai aussi un script à faire en Linux pour mardi prochaine   qui est un peu plus dur que cette lab (script qui crée et qui efface des comptes d'usager à partir d'un fichier qui contient la liste des noms avec leur mot de passe. So, il faut mettre les paramètres pour chacun des choix (-c pour créér avec 3 par., -d pour détruire les comptes avec 2 par) le tout dans un boucle While..do..Done. Entk, c plus difficile que Delphi
Si quelqu'un pourra m'aider un peu avec cette lab, j'apprécierai beaucoup

Daniel

5 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 mars 2009 à 21:46
type
  TMyValue = (mvValue1, mvValue2, mvValue3, mvValue4);
  TMyValues = set of TMyValue;

function MakeValues(const Value1, Value2, Value3, Value4: boolean): TMyValues;
begin
  result := [];
  if Value1 then  result := result + [mvValue1];
  if Value2 then  result := result + [mvValue2];
  if Value3 then  result := result + [mvValue3];
  if Value4 then  result := result + [mvValue4];
end;

function CountValues(const MyValues: TMyValues): integer;
var N : TMyValue;
begin
  result := 0;
  for N := low(TMyValue) to high(TMyValue) do
    if N in MyValues then
      inc(result);
end;

function ValueToString(const MyValue: TMyValue): string;
const
  VTS : array[TMyValue] of string = ('Value 1','Value 2','Value 3','Value 4');
begin
  result := VTS[MyValue];
end;

function ValuesToString(const MyValues: TMyValues): string;
var N : TMyValue;
    C : integer;
const
  EOW : array[boolean] of string = ('.',', ');
begin
  result := '';
  C := CountValues(MyValues);
  for N := low(TMyValue) to high(TMyValue) do
    if N in MyValues then
    begin
      dec(C);
      result := result + ValueToString(N) + EOW[C > 0];
    end;
end;




<hr size="2" width="100%" />
3
Dancsi27 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 02:17
Merci, mais ce n'est pas exactement ce que je cherchais..premiérement, ce code est pour une application console vu qu'il n y a pas les éléments graphique dans le code (mémo, edit box et buttons) et il n'y a pas d'affichage aussi.
Quelqu'un a une meilleure solution par hasard?

Daniel
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 mars 2009 à 05:31
pfffff

De ou ton niveau en programmation te permet de juger si un code est exclusif a un programme console ou pas ?
j'aimerais bien le savoir.

N'y vois rien d'aggressif mais la meilleure solution aprés celle que je viens de te donner c'est :
"Demmerde toi tout seul".

Je te file un code passe partout/standalone (pour programme a Interface Visuelle ou Console!) a adapter a ton cas ... si maintenant tu n'en veux pas ... c'est ton problème.

Avec la fonction MakeValue tu apprend comment remplir un ensemble a partir de données booléennes.

Avec la fonction CountValues tu apprend comment compter les valeurs presente dans un ensemble

Avec la fonction ValueToString tu apprend comment transformer une valeur en chaine

Avec la fonction ValuesToString tu apprend comment tranformer toutes les valeurs d'un ensemble en une chaine coherente et lisible.

A toi d'adapter ce code au cas donné dans ton exercice. L'adaptation de code fait partie integrante du travail d'un programmeur, si tu ne comprend pas ce principe, change tout de suite de branche ... prend horticulture ou menuiserie.

merci, au revoir.

<hr size="2" width="100%" />
 
0
Dancsi27 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 14:19
Finalement, tu as raison, j'ai commencé à coder la fonction Construire (la fonction MakeValues dans ton cas) et la syntaxe revient à la même chose que dans mon cas aussi, il me manquait juste le Case..Of pour ordonner les éléments de l'ensemble dans l'orde (Musique à Tennis) avec la boucle For Do aussi.
Alors je te remercie de ton aide, je vais l'utiliser ton exemple et l'ajuster un peu avec les autres fonctions.

Désolé si j'étais aggressif ou méchant avec toi, je ne voulais pas être. Je ne suis pas un pro en prog je l'avoue, mais j'ai quand même des connaissances (j'ai étudié VB6 et Delphi 7 et maintenant j'étudie aussi les scripts de Linux
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yorundr Messages postés 289 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 11 juin 2012
30 déc. 2009 à 17:37
SAlut,

je m'incruste dans cette conversation terminé depuis bien longtemps :)

Mais comment ferais tu pour supprimer un élément de ton énuméré ?
0
Rejoignez-nous