Probleme pascal

f_atma15 1 Messages postés lundi 6 novembre 2017Date d'inscription 6 novembre 2017 Dernière intervention - 6 nov. 2017 à 17:57 - 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 

12 réponses

Répondre au sujet
cs_sagitarius 45 Messages postés samedi 26 août 2017Date d'inscription 3 décembre 2017 Dernière intervention - 6 nov. 2017 à 19:30
0
Utile
8
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 672 Messages postés jeudi 17 avril 2008Date d'inscription 8 janvier 2018 Dernière intervention > cs_sagitarius 45 Messages postés samedi 26 août 2017Date d'inscription 3 décembre 2017 Dernière intervention - 9 nov. 2017 à 08:29
Je pense que cette dernière solution supprime les 2 derniers caractères et non le 2ème caractère.
korgis 397 Messages postés samedi 17 mai 2003Date d'inscription 8 janvier 2018 Dernière intervention - 9 nov. 2017 à 10:27
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 672 Messages postés jeudi 17 avril 2008Date d'inscription 8 janvier 2018 Dernière intervention > korgis 397 Messages postés samedi 17 mai 2003Date d'inscription 8 janvier 2018 Dernière intervention - 9 nov. 2017 à 14:22
Limpide
soit pour ramener au cas présent :
Delete(edit1.text, 2, 1);
korgis 397 Messages postés samedi 17 mai 2003Date d'inscription 8 janvier 2018 Dernière intervention > dubois77 672 Messages postés jeudi 17 avril 2008Date d'inscription 8 janvier 2018 Dernière intervention - 9 nov. 2017 à 14:27
Net, définitif ET limpide ;-)
Merciiii beaucoup pour tous le monde :-)
Commenter la réponse de cs_sagitarius
korgis 397 Messages postés samedi 17 mai 2003Date d'inscription 8 janvier 2018 Dernière intervention - Modifié par korgis le 9/11/2017 à 14:42
0
Utile
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
Caribensila 2668 Messages postés jeudi 15 janvier 2004Date d'inscription 7 janvier 2018 Dernière intervention - 12 nov. 2017 à 19:22
0
Utile
1
En tout cas, on n'est pas harcelés par la fatma, nous...

--
korgis 397 Messages postés samedi 17 mai 2003Date d'inscription 8 janvier 2018 Dernière intervention - 12 nov. 2017 à 20:26
Parle pour toi, Cari ^^
Commenter la réponse de Caribensila

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.