[devc++]cherche le complementaire de la base azotée (adn)

0/5 (4 avis)

Snippet vu 3 433 fois - Téléchargée 36 fois

Contenu du snippet

correction :
===========
j'ai pris en compte les diffenrentes remarques postées.
merci.

j'avais envie de voir si je savais toujours coder sous C++ "pur" c-a-d sans VCL, MFC, etc... derriere.

pas mal non plus pour apprendre les pointeurs/allocations.

Source / Exemple :


#include <iostream.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *seq,*seqcpl; //pointeurs, quoique le pointeur seq pourrait ne pas etre un pointeur.
bool badCharactersArePresents = false;

seq = new char[1024];   //allocation directe. C'est pour celau que 'seq' peut ne pas etre un pointeur

cout << "Entrez la sequence d'ADN :\n";
cin >> seq;

seqcpl = (char*)malloc(sizeof(seq)+1); //allocation dynamique du second pointeur

if (seqcpl!=NULL) //teste.
{
cout << "\n\nVariable \"Seqcpl\" allou\202e dynamiquement avec succ\202s\n\n";
}
else
{
cout << "\n\nErreur d'allocation ! M\202moire probablement insuffisante\n\n";
}

for (int i = 0;i <strlen(seq);i++)
{

     switch(seq[i])
     {
    case 'A' : strcat(seqcpl,"T"); break;
    case 'T' : strcat(seqcpl,"A");break;
    case 'G' : strcat(seqcpl,"C");break;
    case 'C' : strcat(seqcpl,"G");break;

    default : badCharactersArePresents = true; break;
     }
}
/*
ci-dessus, c'est la partie principale du code mais la plus simple a comprendre.

  • /
if (badCharactersArePresents) { cout << "Des carat\202res diff\202rents de A,T,C,G \202taient pr\202sents." ; } cout << "\n\nLa chaine complementaire d'ADN est : " << seqcpl << endl<<endl<<endl; free(seq); free(seqcpl); system("PAUSE"); return 0; }

Conclusion :


je cherche la relation ADN/ARN pour faire un transcripteur, enfin, implementer un transcripteur dans le prog.

A voir également

Ajouter un commentaire Commentaires
Messages postés
64
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
26 novembre 2009

tu devrai soit utiliser que malloc/free (C), soit que new/delete (C++)
Version avec malloc/free :

//...
seq = (char*)malloc(1024); //...
//...
seqcpl = (char*)malloc(strlen(seq)+1); //allocation dynamique du second pointeur //utilisation de strlen pour connaitre la taille exacte de la chaîne !
//...
free(seq);
free(seqcpl);
//...

Version avec new/delete :

//...
seq = new char [1024]; //...
//...
seqcpl = new char [strlen(seq)+1]; //allocation dynamique du second pointeur //utilisation de strlen pour connaitre la taille exacte de la chaîne !
//...
delete [] seq; il faut les [] lorsque l'on a allouer un tableau et non un unique élément !
delete [] seqcpl;
//...

NB : Il faudrait faire : seqcpl[0]=0 : à cause de l'utilisation de strcat, de plus ca rend le code un peu plus lisible et compréhensible
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008

oki
Messages postés
117
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2003
3
Salut,

Pour les includes, utilise plutot ceux du c++ :
#include
#include <cstring>
#include <cstdlib>
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Pourquoi mélanger les allocations mémoires C et C++ ?

1- Quand il n'y a plus de mémoire disponible, malloc() retourne NULL.

2- On libére de la mémoire allouée par malloc() avec free().

3- Les deux sizeof() que tu utilises sont mals utilisés car ils retournent toujours la taille du pointeur (ici 4 octets). De tout façon, sizeof() ne peut pas être utilisé pour déterminer la taille d'un tableau dynamique.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.