1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
program ADN;
type
TTransItem = record
Acide: string[3];
Proteine: string[3];
end;
type
TCharSet = set of Char; { Ensemble de caractres }
const
Max = 4; { Nombre d'éléments dans le tableau de référence }
const
Table: array[0..Max - 1] of TTransItem =
((Acide: 'UUU'; Proteine: 'Phe'),
(Acide: 'CUC'; Proteine: 'Leu'),
(Acide: 'AUG'; Proteine: 'Met'),
(Acide: 'AUU'; Proteine: 'Ile'));
{ Ne garde que les lettres d'une chaine }
function KeepLetters(const S: string; Letters: TCharSet): string;
var
Result: string;
i: Byte;
begin
Result := '';
for i := 1 to Length(S) do
if UpCase(S[i]) in Letters then
Result := Result + UpCase(S[i]);
KeepLetters := Result;
end;
var
Acides, Proteines: string;
Found: Boolean;
S: string[3];
i: Byte;
begin
Write('Acides nucléïques : ');
ReadLn(Acides);
Acides := KeepLetters(Acides, ['A', 'C', 'G', 'T', 'U']);
Proteines := '';
{ Si nous n'avons que des paquets de 3... }
if Length(Acides) mod 3 = 0 then
begin
{ tant que la chaine n'est pas vide... }
while Acides <> '' do
begin
{ On récupère les 3 premiers caractères }
S := Copy(Acides, 1, 3);
{ Et on les supprime de la chaine source }
Delete(Acides, 1, 3);
{ On parcourt le tableau à la recherche de notre acide }
Found := False;
for i := 0 to Max - 1 do
if S = Table[i].Acide then { Trouvé ? }
begin
{ On ajoute son nom }
Proteines := Proteines + Table[i].Proteine + ' ';
{ On quitte la boucle de recherche }
Found := True;
Break;
end;
{ Si on ne l'a pas trouvé... }
if not Found then Proteines := Proteines + '??? ';
end;
WriteLn('Protéïnes : ', Proteines);
end
else WriteLn('Chaine invalide !');
WriteLn;
Write('Appuyez sur Entrée...');
ReadLn;
end. |
Partager