IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

[LG]traduction d'une chaine en une autre chaine de caractères


Sujet :

Langage Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [LG]traduction d'une chaine en une autre chaine de caractères
    Bonjour!
    C'est la première fois que je me cobnnecte sur ce site et j'ai besoin de votre aide!
    Comment traduire une chaine de caractères en une autre chaine de caractères sur turbo pascal?

    Exemple : traduction des triplets d'acides nucléiques ( entré par l'utilisateur au clavier ) en protéines :
    UUU CUC AUG AUU
    donne : Phe Leu Met Ile

    Merci de me répondre, j'ai un besoin d'aide urgent!!
    Cordialement.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Je suis ignare ! Est-ce qu'il n'y a bien que ces 4 correspondances ?
    UUU --> Phe
    CUC --> Leu
    AUG --> Met
    AUU --> Ile

    Comment se passe la saisie ? Appuie sur Entrer à chaque triplets ou espace entre ?

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    C'est bizarre, il y a beaucoup de monde qui est en Bio et qui programme sur turbo pascal...
    Il faut faire un tableau de correspondance puis ensuite rechercher une valeur dans un tableau :
    le tableau triplets contiendra toutes les combinaisons d'acides nucléïques possibles, et le tableau protéïnes contiendra tous les noms de protéïnes possibles. Attention cependant, le premier triplet du tableau triplet devra correspondre à la première protéine du tableau protéine, et ainsi de suite...
    Ensuite dès que l'utilisateur aura rentré un ytriplet, il suffira de chercher ce triplet dans le tableau triplet, de récupérer l'indice où si situe le trioplet dans le tableau, puis d'afficher à l'écran le nom de la protéine correspondante. Si tu as tout bien fait correctement, ca marche
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Ce mec m'épate !
    Je ne l'ai encore vu sécher sur aucune question.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Merci Alcatîz, ça me fait très plaisir d'entendre ça !!
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  6. #6
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    (c est juste qu il ne connais pas hdd , les deux font un concour tous les week end )
    6*8 =42

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Voici une implémentation de la méthode de wormful_sickfoot avec des chaines

    Bien entendu, les listes peuvent être allongées.
    La saisie se ferait par une chaine du style: 'UUUUUUCUCAUGCUC'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    uses crt;
     
    const ListeEntree = 'UUU CUC AUG AUU';
          ListeSortie = 'Phe Leu Met Ile';
     
    var entree : string;
        tete    : string;
        i         : integer;
     
    begin
    readLn(entree);
    while entree <> '' do
          begin
          tete   := copy(entree, 1, 3);
          entree := copy(entree, 4, length(entree)-3);
          i      := pos(tete, ListeEntree);
          if i > 0 then
             writeLn(tete + '  ==>  ' + copy(ListeSortie, i, 3))
          else
             writeLn('Correspondance non trouvée.');
          end;
    repeat until keyPressed;
    end.

    [Edité pour complémement]
    La longueur des chaines (normales) est me semble-t-il comprise entre 0 et 255 caractères.
    S'il y a, pour chacune, 64 combinaisons de 3 lettres sépérées par un espace ... cela fera: 4 * 64 + 63 = 255 (ouf !)

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Une autre manière de le faire serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    program acides_nucléiques;
    uses crt;
    type Tab_String=array[1..64] of string[3];
    const triplets:Tab_String=('UUU','CUC,'AUG,'AUU',......);
    const protéines:Tab_String=('Phe','Leu','Met','Ile',........);
    {Il faut bien que la première entrée dans le tableau triplets corresponde à la première entrée dans le tableau protéines, et ainsi de suite...}
     
    var triplet:string[3];
    var i:integer;
    begin
    clrscr; {efface l'écran}
    write('Entrez le triplet : ');
    readln(triplet);
    i:=1;
    while ((triplet<>triplets[i]) and (i<=64)) do i:=i+1;
    if i<=64 then write('La protéine correspondante est : ',proteines[i])
    else write('protéine non trouvée');
    readln;
    end.
    Voilà, ca devrait marcher !! Des fois, je me dis que je suis trop généreux
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Des fois, je me dis que je suis trop généreux
    Ca ne viendrait pas, par hasard, du prénom féminin ?

    Pour siocnarf : les strings sont bien limitées à 255 caractères mais on peut s'affranchir facilement de cette limitation en utilisant les chaînes AZT (pChar et Array [x..y] of Char).
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Evidemment, aurélie76, ça fait plus rêver que maurice_programmeur...
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  11. #11
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    lol ! Vous me faites bien marrer avec vos deux tableaux à chaque fois. Un seul suffit !

    Et puis il y a des perfectionnement à apporter, pour par exemple supporter les minuscules et autres subtilités.

    On peut aussi vérifier que chaque triplet ne contient que les lettres A, G, T, U et C (je ne me trompe pas dans les lettres j'espère, j'ai arrêté la bio y'a 3 ans !!!)

    Bon, ça peut nous donner un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 caractŠres }
     
    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.
    Il fonctionne nickel... On peut lui rentrer ce qu'on veut !

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour vos réponses!
    Je vais essayer de faire au plus simple et je vous recontacterez si j'ai un problème!
    a+!

  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Bah moi, j'ai fait au plus simple!!
    Pour information, la jeune fille prénomée aurélie76 m'a envoyé un message privé poutr me demander ce que voulais dire "type" en pascal... J'ai fait un programme de base pour aider !!
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  14. #14
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    evidemment ça va etre dur mais je vous rassure c'est pas la seule, a la fac j'essaye d'aider comme je peux et des fois ya des questions j'y aurais meme pas pensé.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo