En l'apartat mètodes podem veure el disseny del programa utilitzat, i els diferents mètodes que utilitzem per resoldre el problema plantejat (predir exons). I ara us mostrem com hem programat aquesta solució, és a dir l'algorisme del programa CERCAEXONS. L'algorisme ha estat realitzat seguint els principis del disseny descendent, és a dir hem anat refinant els detalls de la implementació del problema d'una forma incremental, de forma que a cada pas el programa sigui més entenedor i més intuitiu que si donéssim tots els detalls en un sol pas. D'aquesta manera hem utilitzat accions curtes que resolen només una tasca concreta, afavorint-se així la reutilització de funcions. A continuació mostrem l'algorisme utilitzat. Utilitzem una sintaxi que creiem prou entenedora.
El primer nivell consisteix en les tasques bàsiques que s'han de fer pel nostre programa, on tractem les dades d'entrada per poder obtenir el resultat del programa.
      (id, s) = LLEGIR_FASTA(fasta);
       matriu_acceptors := LLEGIR_MATRIU(acceptors);
       matriu_donadors := LLEGIR_MATRIU(donadors);
       taula_codons := LLEGIR_USCODONS(codons);
       s_reverse := reverse(s);
       resultat_pos := EXONS(s, matriu_acceptors, matriu_donadors, taula_codons, llindar, "+");
       resultat_neg := EXONS(s_reverse, matriu_acceptors, matriu_donadors, taula_codons, llindar, "-");
       resultat_neg := POSICIONS_REALS_STRANDNEG (resultat_neg, MIDAVECTOR(s));
       resultat_pos_bons := EXONS_BONS(resultat_pos, llindar_exons);
       resultat_neg_bons := EXONS_BONS(resultat_neg, llindar_exons);
       resultats_units := UNIR_RESULTATS(resultat_pos_bons, resultat_neg_bons);
       ORDENAR(resultats_units);
       FORMAT_GFF(id,resultats_units);
FI ALGORISME
En el segon nivell del disseny del programa, mostrem la funció més important del programa, la funció EXONS, aquesta és la funció que donada una seqüència ens prediu els EXONS possibles segons les dades introduïdes. Aquesta funció resol la tasca utilitzant la funció RESULTAT, aquesta funció la veiem més avall. La funció RESULTAT fa els càlculs necessaris per poder predir els exons segons els mètodes que utilitzem.
       s1 := PAUTES_LECTURA(s, 1);
       s2 := PAUTES_LECTURA(s, 2);
       matriu0 := MATRIU_STOPCODONS(s0,s,0);
       matriu1 := MATRIU_STOPCODONS(s1,s,1);
       matriu2 := MATRIU_STOPCODONS(s2,s,2);
       resultat0 := RESULTAT(matriu0, matriu_acceptors, matriu_donadors, matriu_acceptors{P}, matriu_donadors{P}, taula_codons, 0, $llindar, strand, s);
       resultat1 := RESULTAT(matriu1, matriu_acceptors, matriu_donadors, matriu_acceptors{P}, matriu_donadors{P}, taula_codons, 1, llindar, strand, s);
       resultat2 := RESULTAT(matriu2, matriu_acceptors, matriu_donadors, matriu_acceptors{P}, matriu_donadors{P}, taula_codons, 2, llindar, strand, s);
       resultatJ := RESULTATS_JUNTS(resultat0, resultat1, resultat2);
       retorna resultatJ;
FI FUNCIO
       i := 0;
       c := 0;
       mentre (i < MIDAVECTOR(s)) fer
             p := COMPTARNUCLEOTIDS(s, i)
             splicing_acceptors := FILA_SPLICING(seq, hash_acceptors, hash_acceptors{tamany}, pa, p, MIDAFILAMATRIU(s[i]}));
             splicing_donadors = FILA_SPLICING(seq, hash_donadors, hash_donadors{tamany}, pd, p, MIDAFILAMATRIU(s[i]);
             taula_acceptors = SOBRE_LLINDAR(splicing_acceptors, llindar);
             taula_donadors = SOBRE_LLINDAR(splicing_donadors, llindar);
             taula_ATG = MATRIU_ATG(s[i], pauta, i);
             taula_STOP = MATRIU_STOP(s[i]);
             combinacio_interns = COMBINACIONS(taula_acceptors, taula_donadors, "internal");
             combinacio_inici = COMBINACIONS(taula_ATG, taula_donadors, "first ");
             combinacio_term = COMBINACIONS(taula_acceptors,taula_STOP, "terminal");
             combinacio_single = COMBINACIONS(taula_ATG,taula_STOP, "single ");
             combinacio_3 = RESULTATS_JUNTS(combinacio_inici, combinacio_interns, combinacio_term);
             combinacio = UNIR_RESULTATS(combinacio_3, combinacio_single);
             resultat_fila = BIAIX_CODIFICANT(combinacio, hash_biaix, s[i], pauta, i);
             resultat_fila = POSICIONS_REALS(resultat_fila,s, i, strand);
             j := 0;
             mentre (j < MIDAVECTOR(resultat_fila)) fer
                   resultat[c] := resultat_fila[j];
                   j := j + 1;
                   c := c + 1;
             fmentre
             i := i + 1;
       fmentre
FI FUNCIO
El proper pas ha sigut refinar les funcions utilitzades, escrivint un tercer nivell de l'algorisme. Aquest pas consisteix en fer l'algorisme de cadascuna de les funcions que hem vist que ens resolen una tasca determinada. També hem afegit controls dels diferents errors d'execució que es podrien donar en el programa. Aquesta tasca ja ha sigut molt extensa, així que ja no la mostrarem aquí.
Per veure en detall l'algorisme implementat en llenguatge de programació PERL, aquí teniu el codi font: CERCAEXONS