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

Pascal Discussion :

Algorithme de recherche de sous-séquence dans une séquence ADN


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Algorithme de recherche de sous-séquence dans une séquence ADN
    Bonsoir,

    Je possède un tableau de caractères qui représente une séquence d'ADN, par exemple u=GTAGCTAACA. On dira que v est une sous séquence de u si par exemple v=GTAC car u=GTAGCTAACA. Autrement dit on retrouve la séquence v dans u en conservant l'ordre des lettres.

    On veut alors écrire une Fonction EstSousSeq qui teste si la séquence v de longueur m est sous-séquence de u de longueur n.

    Voilà mon code :

    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
    Program genome;
     
    uses dos,crt;
     
    Type Seq=array[1..20] of char;
     
    Procedure EstSousSeq(n,m:integer; var u,v : Seq)
     
    var i,j:integer;
     
    begin
     
    for i:=1 to m do
     
        begin
        j:=i;
        while v[i]<>u[j] do j:=j+1;
        if j<>n then write(u[j]) else write('v n est pas une sous séquence de u');
        end;
     
    end;
     
    begin
     
    end.
    En compilant j'obtiens une erreur "Expected but VAR found" à la ligne "var i,j:integer;". Par ailleurs j'aimerai savoir si la structure de mon algorithme est bonne car je n'ai pas su utiliser une fonction (qui renverrait je suppose un booleen).

    Merci beaucoup !

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fio,

    Il manque un ; (point-virgule) sur la ligne définissant l'en-tête de la procédure

    Procedure EstSousSeq(n,m:integer; var u,v : Seq);


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Bonsoir

    Effectivement l'erreur venait de là merci ! Cela dit mon programme n'est pas opérationnel... une idée ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    S'iouplait

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Dio,
    Citation Envoyé par Inf0phile Voir le message
    Bonsoir

    Effectivement l'erreur venait de là merci ! Cela dit mon programme n'est pas opérationnel... une idée ?
    Ben, si le code est celui posté plus haut + correction, il ne va pas faire grand chose, puisque tu ne lui donne rien à faire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Bonsoir,

    J'ai deux problèmes : le premier c'est que je ne sais même pas si ma procédure permet effectivement de vérifier si v est une sous-séquence de u ; et le deuxième c'est que je ne sais pas générer une liste de caractère aléatoirement, ou même demander à l'utilisateur de les rentrer lui-même pour pouvoir lui appliquer la procédure.

    Excusez moi je débute en Pascal

    Merci pour vos réponses !

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fio,
    Citation Envoyé par Inf0phile Voir le message
    Bonsoir,

    J'ai deux problèmes : le premier c'est que je ne sais même pas si ma procédure permet effectivement de vérifier si v est une sous-séquence de u ; et le deuxième c'est que je ne sais pas générer une liste de caractère aléatoirement, ou même demander à l'utilisateur de les rentrer lui-même pour pouvoir lui appliquer la procédure.

    Excusez moi je débute en Pascal

    Merci pour vos réponses !
    Alors, il faut apprendre les bases.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gie,
    Citation Envoyé par Inf0phile Voir le message
    Bonsoir,

    Je possède un tableau de caractères qui représente une séquence d'ADN, par exemple u=GTAGCTAACA. On dira que v est une sous séquence de u si par exemple v=GTAC car u=GTAGCTAACA. Autrement dit on retrouve la séquence v dans u en conservant l'ordre des lettres.
    Dans ton message, je vois que tu sembles accepter qu'on peut rechercher la séquence même s'il y a un nucléotide qui s'y insère.

    Est-ce volontaire ou une erreur ?

    Si c'est volontaire, quelles sont les limites des insertions acceptées (une insertion de 1 ou plusieurs nucléotides, plusieurs insertions de 1 ou plusieurs nucléotides) ?

    L'algorithme va évidemment dépendre de ces valeurs.

  9. #9
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Pour faire de l'aléatoire, il faut utiliser la fonction random, que l'on initialise avec randomize (voir la FAQ).

    Le résultat te donnant un entier (si tu affectes le résultat d'un random à un entier), il faut que tu fasses toi-même le lien avec les caractères. Tu peux par exemple utiliser un tableau de 4 cases contenant tes caractères et l'entier que tu tires correspondra à un index du tableau.

    Pour les interactions avec l'utilisateur, le plus simple est d'utiliser la fonction readln. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    program interaction;
    uses crt;
     
    var
      s : string;
    begin
      writeln("tapez quelque chose au clavier.");
      readln(s);
      write("vous avez ecrit : ",s);
    end.
    Après tu peux faire des boucles sur les entrées/sorties pour répéter un traitement.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Bonjour à tous, et merci pour vos réponses !

    droggo > Oui on peut insérer des bases entre, on dit que v est une sous séquence de u si on retrouve les bases qui composent v dans u avec le même ordre.

    Du coup il me semble que la fonction d'Alcatiz ne colle pas à cette définition non ? J'ai l'impression en le lisant qu'on aurait une sous séquence uniquement si on retrouve v dans u tel quel. En tout cas je le remercie pour l'effort et je vais tâcher de tenir compte de ses conseils !

    Et merci aussi à Loceka je vais me renseigner sur cette fonction random.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Voi,
    Citation Envoyé par Inf0phile Voir le message
    droggo > Oui on peut insérer des bases entre, on dit que v est une sous séquence de u si on retrouve les bases qui composent v dans u avec le même ordre.
    Mais il doit bien y avoir une limite sur les insertions admises, sinon, si la séquence est assez longue, on a de bonnes chances de retrouver une sous-séquence de longueur notablement inférieure.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Je ne comprends pas bien, un exemple sera peut-être plus parlant :

    u = GACTGATTCGT et v = GGACT

    On a bien v qui est une sous-séquence de u car on retrouve ces lettres dans le même ordre à l'intérieur de u :

    u = GACTGATTCGT

    Et on n'a pas obligatoirement unicité de la sous-séquence dans u.

    Et en lisant la fonction d'Alcatiz j'ai l'impression qu'elle tente de retrouver le "bloc" GGACT dans u, c'est le cas ?

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2014, 21h01
  2. Création d'une séquence dans une transaction
    Par gangsoleil dans le forum PL/SQL
    Réponses: 2
    Dernier message: 16/01/2013, 08h24
  3. Réponses: 16
    Dernier message: 02/08/2012, 21h00
  4. créer une séquence dans une table déjà remplie
    Par dams78 dans le forum Oracle
    Réponses: 1
    Dernier message: 17/03/2010, 11h25
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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