Algorithmique: bibliotheque de fonctions pour la manipulation genetique.

Discutez d'informatique ici !
Vander
Membre Naturel
Messages: 19
Enregistré le: 07 Déc 2012, 20:27

Algorithmique: bibliotheque de fonctions pour la manipulation genetique.

par Vander » 20 Jan 2013, 11:48

Bonjour tous le monde, voila j'ai un probleme d'algorithmique que je trouve assez complexe. Enonce : L'ADN est un polymere compose uniquement de 4nucleotides : l'Adenine(A), la Thymine(T), la Guanine(G) et la Cytosine(C), qui constituent donc les "lettres" de "l'alphabet" genetique. L'ADN est constitue de 2 fibres constituees a partir de ces 4 nucleotides. Ces 2 fibres sont "complementaires" : chaque nucleotide d'une fibre est lie a un autre sur l'autre fibre, sachant que A s'associe avec T et G s'associe avec C.
On va creer des fonctions pour representer et manipuler ces fibre: une fibre sera representee par un tableau de caracteres 'A', 'C', 'T' ou 'G'. Pour certaines de ces fonctions il faudre peut-etre decomposer le probleme en plusieurs parties.
Travail a faire :
1) Definir le type fibre
2) Ecrire la fonction ( fibreVide var f : fibre ; n : entier) : booleen, qui teste si une fibre est vide ou non.
3) Ecrire la procedure creer_fibre( var f : fibre ; n : entier) , qui cree une fibre aleatoirement de longueur passe en parametre. On utilisera la fonction randomChar( 'A','C','T','G') qui donne un caractere au hasard parmi ceux transmis en parametre.
4) Ecrire la fonction duplique (var f : fibre ; n : entier) : fibre qui renvoie le complementaire d'une fibre passee en parametre. Par exemple dupliquer applique a la liste ['A','T','T','C'] renvoie ['T','A', 'A','G'] .
5) Ecrire la fonction sequence (var f1,f2 : fibre ; n : entier) booleen qui etant donnee 2 listes de nucleotides determine si la premier est une sous-sequence de la deuxieme.
Je sais qu'il y'a des notions de science la dedans mais le pire ce sont ces fonctions. Je ne les ai jamais vu auparavant. Merci d'avance et bonne journee a tous !



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 20 Jan 2013, 12:11

hello,

quelle est ta question?
la vie est une fête :)

Vander
Membre Naturel
Messages: 19
Enregistré le: 07 Déc 2012, 20:27

par Vander » 20 Jan 2013, 19:53

Quel est la definition du type fibre ? Jusque la je ne connaissais que le type entier,reel, booleen,chaine de caractere. Comment peut on ecrire ces fonctions en s'adaptant a l'exo?

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 20 Jan 2013, 20:01

une fibre sera representee par un tableau de caracteres 'A', 'C', 'T' ou 'G'


donc si tu connais le type chaine de caractères, je crois que c'est bon.

creer_fibre est assez facile à écrire qu'est-ce qui bloque?
la vie est une fête :)

Vander
Membre Naturel
Messages: 19
Enregistré le: 07 Déc 2012, 20:27

C'est tres complique

par Vander » 21 Jan 2013, 09:36

Vois tu je ne suis encore qu'un bebe en programation, et je n'ai commence a faire l'algorithmique que cette annee. Je ne sais pas comment monter ces fonctions en s'adaptant a l'exo. Mon pays est assez en retard sur le plan tech. Bon je vais kan mm chercher. Merci encore a toi !

Vander
Membre Naturel
Messages: 19
Enregistré le: 07 Déc 2012, 20:27

Suggestion

par Vander » 21 Jan 2013, 10:11

Peut on ecrire la fonction creer_fibre, de cette facon :
Algorithme creer_fibre
fibre= tableau( 1... n ) : caractere
var f : fibre; n : entier
Debut
Ecrire( entrer le nombre )
Lire( n )
Si n=1 alors ecrire randomChar(' A' ,'C','T','G') vaut T, sinon
si n=2, alors ecrire random('A','C','T','G') vaut G, sinon si n=3 alors ecrire random('A', 'C', 'T', 'G') vaut A, sinon
si n= 4 , alors ecrire random('A','C','T','G') vaut C
Fin si
Fin

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 21 Jan 2013, 10:39

si tu ne sais pas ce qu est une fonction, je te suggere dapprendre la syntaxe et leur emploi avant de t'attaquer a cet exercice!
la vie est une fête :)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 21 Jan 2013, 13:17

Vander a écrit:Peut on ecrire la fonction creer_fibre, de cette facon :
Algorithme creer_fibre

Bonjour,
Il faut d'abord définit le type fibre.
Un exemple simple, je travaille en géométrie plane et je veux définir le type Point.
Alors je vais dire que un Point est constitué de 3 éléments
1- son numéro
2- son abscisse X
3- son ordonnée Y

Je pourrai ensuite faire une fonction qui calcule la distance d'un point P1 à un point P2.
Bien entendu, au préalable il aura fallu que je fasse une fonction "creer_point".

Vander
Membre Naturel
Messages: 19
Enregistré le: 07 Déc 2012, 20:27

Que penses-tu de cette réponse ?

par Vander » 14 Fév 2013, 15:15

1° Définir type fibre
Const n= 4
Type fibre=tableau[1..n]de caractère
2° Écrire la fonction fibre Vide
fonction fibre Vide (var f :fibre;n:entier):booléen
var i: entier; b: booléen
Début
f[i] = 1
pour i de 1 à n faire
si f[i] < > 0 alors
b = vrai
sinon
b=faux
fsi
fpour
fin
3° Écrire la procédure créer_fibre

procédure créer_fibre(var f:fibre; n:entier)
var i :entier
randomchar('A','C','T','G'): caractère
Début
i=1
pour i de 1 à n faire
si f[i]=A ou f[i]=T ou f[i]=C ou f[i]=G alors
randomChar('A','C','T','G')=f[i];
fsi
fpour
fin
4° Ecrire la fonction duplique(var f:fibre; n:entier) : fibre

fonction duplique(var f:fibre; n:entier) : fibre
var i:entier ; E:fibre
début
i=1
pour i de 1 à n faire
si f[i]= A alors E=T ;
sinon
si f[i]=T alors E=A ;
sinon
si f[i]=C alors E=G .
sinon
si f[i] = G alors E=C ;
fsi
fsi
fsi
fsi
fpour
fin

5° Ecrire la fonction sequence(var f1,f2:fibre; n:entier): booléen

fonction séquence(var f1,f2:fibre; n:entier):booléen
var i,j,n1,n2 : entier ; ss: sous séquence
début
pour i de 1 a n1 faire
pour i de 1 à n2 faire
si f(f1)= f2 alors
f2 ss f1
sinon
f1 ss f2
fsi
fpour
fpour
fin

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 14 Fév 2013, 15:47

Vander a écrit:1° Définir type fibre
Const n= 4
Type fibre=tableau[1..n]de caractère

Voila comment je définirais le type fibre
struct FIBRE
{
char N1;
char N2;
char N3;
char N4;
}UneFibre;
Je l'ai écrit avec la syntaxe du C, mais on pourrait l'écrire aussi
char Fibre[4];
Ce qui me parait important, c'est que ON SAIT s'il n'y a que 4 nucléides, donc inutile de prévoir
Const n=4.
Par contre, je me demande s'il ne faut pas prévoir quelque-chose pour préciser quelle fibre lui est associée.

2° Écrire la fonction fibre Vide
fonction fibre Vide (var f :fibre;n:entier):booléen
var i: entier; b: booléen
Début
f[i] = 1
pour i de 1 à n faire
si f[i] 0 alors
b = vrai
sinon
b=faux
fsi
fpour
fin

Là, je dirai que "une fibre n'est pas vide si ses 4 nuléides sont correctement renseignées".
Donc, il faut qu'il y en ait une et une seule de chaque type.


3° Écrire la procédure créer_fibre

procédure créer_fibre(var f:fibre; n:entier)
var i :entier
randomchar('A','C','T','G'): caractère
Début
i=1
pour i de 1 à n faire
si f[i]=A ou f[i]=T ou f[i]=C ou f[i]=G alors
randomChar('A','C','T','G')=f[i];
fsi
fpour
fin

D'abord, vous utilisez la fonction Rand à l'envers.
C'est forcément UnCarctere = randomChar(....);

4° Ecrire la fonction duplique(var f:fibre; n:entier) : fibre

fonction duplique(var f:fibre; n:entier) : fibre
var i:entier ; E:fibre
début
i=1
pour i de 1 à n faire
si f[i]= A alors E=T ;
sinon
si f[i]=T alors E=A ;
sinon
si f[i]=C alors E=G .
sinon
si f[i] = G alors E=C ;
fsi
fsi
fsi
fsi
fpour
fin

5° Ecrire la fonction sequence(var f1,f2:fibre; n:entier): booléen

fonction séquence(var f1,f2:fibre; n:entier):booléen
var i,j,n1,n2 : entier ; ss: sous séquence
début
pour i de 1 a n1 faire
pour i de 1 à n2 faire
si f(f1)= f2 alors
f2 ss f1
sinon
f1 ss f2
fsi
fpour
fpour
fin


Vous écrivez en pseudo-code, mais vous feriez mieux de l'écrire en français d'abord.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 14 Fév 2013, 16:24

char Fibre[4];

c'est faux.

Rien ne précise que la fibre fait 4 caractères de long.
Une fibre est consitutée par quatre types de nucléotides. Ca veut pas dire 4 nucléotides...
ex:AATCGTC

Une fibre vide, c'est la chaine de caractère nulle.

Pour le reste
si f[i]= A alors E=T ;

E c'est une fibre. Donc un tableau. et là tu assignes un caracatere?? Il faut etre cohérent

si f(f1)= f2 alors
f2 ss f1
sinon
f1 ss f2
fsi

ca c'est du n'importe quoi
la vie est une fête :)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 14 Fév 2013, 16:40

Rien ne précise que la fibre fait 4 caractères de long.
Une fibre est consitutée par quatre types de nucléotides. Ca veut pas dire 4 nucléotides...
ex:AATCGTC

Oui, j'avoue mon incompétence en matière d'ADN.
Ma question : la définition d'une fibre pourrait-elle être : " une fibres est constituée de l'association d'un certain nombre de nucléides de 4 types".
Autre question ce nombre est-il fixe, indéterminé ou a-t-il un maximum.
Je crois qu'il serait intéressant de préciser l'énoncé.
Avant d'aborder la question 2 et les suivantes, il faut savoir de quoi on parle, c'est à dire définir le type fibre.
Outre le fait du nombre de nucléides, la relation "possible" avec une copine peut-elle ou doit-elle faire partie de sa déclaration de type ?

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 14 Fév 2013, 23:00

En C, on pourrait écrire ceci :
Code: Tout sélectionner
typedef enum {A, C, T, G} ADN; 
typedef ADN *fibre;
et la déclaration
Code: Tout sélectionner
fibre tab[5] = {A,C,T,A,G};
est tout à fait correcte.
Cela ne correspond pas vraiment aux exigences de l'énoncé, mais une transposition entre ce qui sera saisi ou écrit et les codes A,C,T,G peut être facilement faite pour utiliser ce codage en interne du prog.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite