De l'aide!! Types énumérés et ensembles [Résolu]

Messages postés
7
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
33
3
Merci
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%" />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
7
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009
0
Merci
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
Commenter la réponse de Dancsi27
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
33
0
Merci
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%" />
 
Commenter la réponse de f0xi
Messages postés
7
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009
0
Merci
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
Commenter la réponse de Dancsi27
Messages postés
289
Date d'inscription
mardi 31 octobre 2006
Statut
Membre
Dernière intervention
11 juin 2012
0
Merci
SAlut,

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

Mais comment ferais tu pour supprimer un élément de ton énuméré ?
Commenter la réponse de Yorundr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.