Probleme pascal

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

3 réponses

Utilisateur anonyme
6 nov. 2017 à 19:30
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
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
7 nov. 2017 à 07:57
Pour supprimer le 2éme caractère tu peux aussi faire :
Texte := Texte[1] + copy(Texte,3,99);
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
7 nov. 2017 à 08:13
et pour les 3 dernieres lettres du nom utilisateur :
i:= Length(Edit_nom_utilisateur.Text); 
d3 := copy(Edit_nom_utilisateur.Text,i-2,3);
0
Utilisateur anonyme > dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019
7 nov. 2017 à 21:30
// supprimer le 2éme caractère d'un string
tu peux faire aussi:
var
test: string;
begin
test := Edit1.Text;
test := Copy(Edit1.Text, 1, Length(Edit1.Text) -2);
end;
ce qui est mieux que ma première solution
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14 > Utilisateur anonyme
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.
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
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.
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
Modifié le 9 nov. 2017 à 14:42
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
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
12 nov. 2017 à 19:22
En tout cas, on n'est pas harcelés par la fatma, nous...

--
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
12 nov. 2017 à 20:26
Parle pour toi, Cari ^^
0
Rejoignez-nous