Probleme pascal

Messages postés
1
Date d'inscription
lundi 6 novembre 2017
Statut
Membre
Dernière intervention
6 novembre 2017
- - Dernière réponse :  f_atma - 1 déc. 2017 à 07:20
salut a tous;

j'ai pa pu resolu ce probleme :(

ecrire un programme Pascal permettant de saisir:
  • une adresse e-mail sous la forme nom_utilisateur@nom_domaine
  • saisir une date de naissance sous la forme (jj/mm/aaaa)


Enfin,genérer et afficher un mot de passe MP sachhant qu'il
est constitué de quatre parties:
-les trois derniers caracteres du nom_utilisatuer
-les deux premiers caratères du nom_domaine
-le nombre de caractères du nom_utilisateur
-la somme des chiffres de la date de naissance

Separer les quatres parties par des traits d'unions et supprimer le 2éme caractere

EXEMPLE
Email foulenfoulani@gmail.com
Date de naissance : 20/08/1990
Mot de passe : ai-gm-13-29

aidez moi s'il vous plait
Afficher la suite 

Votre réponse

3 réponses

0
Merci
bonsoir,
essaye un truc du genre:
var
Texte, S :string;
c1, c2 :char;
i, j, nb: integer;

begin
// -les deux premiers caratères du nom_domaine
Texte := edit1_nom_domaine.Text;
c1 := Texte[1];
c2 := Texte[2];

// -le nombre de caractères du nom_utilisateur
i:= Length(Edit_nom_utilisateur.Text);

// Separer les quatres parties par des traits d'unions
S:= (partie1)+ '-' + (partie2)+ '-' ....

// supprimer le 2éme caractère
Texte := edit1.Text;
Repeat
nb := 0;
Repeat
j := pos(C, Texte);
if j <> 0 Then
delete(texte, j, 2);
inc(nb);
Until pos(C, Texte) = 0;
S:= C; //+ ce que tu veux
until length(texte) = 0;

voilà, en espérant t'avoir aidé et mis sur la bonne voie
cordialement
dubois77
Messages postés
693
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10 > Utilisateur anonyme -
Je pense que cette dernière solution supprime les 2 derniers caractères et non le 2ème caractère.
korgis
Messages postés
429
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16 -
Salut,

Toutes autres considérations mises à part...
La manière la plus simple de supprimer le 2ème caractère d'une chaîne est :

Delete(maChaine, 2, 1);

C'est net et définitif.
dubois77
Messages postés
693
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10 > korgis
Messages postés
429
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
-
Limpide
soit pour ramener au cas présent :
Delete(edit1.text, 2, 1);
korgis
Messages postés
429
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16 > dubois77
Messages postés
693
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
-
Net, définitif ET limpide ;-)
Merciiii beaucoup pour tous le monde :-)
Commenter la réponse de Utilisateur anonyme
Messages postés
429
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
0
Merci
Salut f_atma,

Voici un code qui répond au problème posé.

Ce n'est sans doute pas le meilleur code qui soit, mais il me parait logique et simple à comprendre.

Il met en pratique l'usage de quelques méthodes fournies par Pascal/Delphi très utiles pour traiter les chaînes, et qu'il faut absolument maîtriser. En particulier : Copy, Delete, Pos, Length, Concat... et il y en a d'autres.

Si tu étudies son fonctionnement, il t'aidera dans la progression de ton étude de Delphi/Pascal.

Si tu n'utilise pas Delphi mais Turbo Pascal ou autre appli console, il te faudra légèrement l'adapter au niveau de la saisie et de l'édition.

{ Attention : vérifie la mise en forme correcte de la date, mais pas sa validité !
  Retourne également une chaîne contenant les chiffres de la date sans les séparateurs }
function FormatDateIsOK(const s: string; out DigitsOnly: string): Boolean;
const
  DateSeparator = '/';
var
  i: Integer;
begin
  Result := False;
  if Length(s) < 10 then Exit;
  if (s[3] <> DateSeparator) or (s[6] <> DateSeparator) then Exit;
  //if not DateIsValid(s) then Exit; // mais ça complique le code
  DigitsOnly := s;
  DigitsOnly := StringReplace(DigitsOnly, '/', '', [rfReplaceAll]);
  if Length(DigitsOnly) < 8 then Exit;
  for i := 1 to 8 do
  begin
    if not (DigitsOnly[i] in ['0'..'9']) then
    begin
      ShowMessage(DigitsOnly[i]);
      Exit;
    end;
  end;
  Result := True;
end;

{ Attention : la mise en forme de l'adresse EMail est vérifiée, mais pas sa validité }
function GetPassWord(EMail, BirthDate: string): string;
var
  Part1, Part2, Part3, Part4: string;
  PosAt: Integer;     // position de '@'
  UserName: string;   // nom de l'utilisateur
  DigitsOnly: string; // date de naissance sans les '/' (chiffres seuls)
  i: Integer;
  DigitsSum: Integer; // somme des chiffres de la date de naissance
begin
  Result := '';
  if Length(EMail) < 6 then Exit;   // minimum = 3 char + '@' + 2 char
  PosAt := Pos('@', EMail);         // position de '@' dont on va se servir souvent
  if PosAt < 4 then Exit;           // il faut au moins 3 char avant '@'
  if Length(EMail) - PosAt < 2 then Exit; // il faut au moins 2 char après '@'
  if not FormatDateIsOK(BirthDate, DigitsOnly) then Exit;
  Part1 := Copy(EMail, Pos('@', EMail) - 3, 3);
  Delete(Part1, 2, 1);
  Part2 := Copy(EMail, PosAt + 1, 2);
  UserName := Copy(EMail, 1, PosAt - 1);
  Part3 := IntToStr(Length(UserName));
  DigitsSum := 0;   // Initialisation
  { on va parcourir chaque caractère de la chaîne contenant les chiffres }
  for i := 1 to 8 do
    DigitsSum := DigitsSum + StrToInt(DigitsOnly[i]);
  Part4 := IntToStr(DigitsSum);
  Result := Concat(Part1, '-', Part2, '-', Part3, '-', Part4);
end;


A utiliser comme ceci :

var
  EMail: string;
  BirthDate: string;
  PassWord: string;
begin  
  PassWord := GetPassWord(EMail, BirthDate);
end;


Et en prime la fonction qui vérifie la date mais qui complique à mon avis trop le code et qui plantera en design time s'il y a une erreur, donc à négliger pour l'instant :

function DateIsValid(sDate: string): Boolean;
begin
  Result := True;
  try
    StrToDate(sDate);
  except
    Result := False;
  end;
end;


Bon courage.

korgis
Commenter la réponse de korgis
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
10
0
Merci
En tout cas, on n'est pas harcelés par la fatma, nous...

--
korgis
Messages postés
429
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16 -
Parle pour toi, Cari ^^
Commenter la réponse de Caribensila