Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //funkcia na vypis sekvencie zo suboru na obrazovku
- int vypis(FILE *fr, char *c){
- int p,s=0;
- //pouzivatel zada cele cislo p predstavujuce pocet pismen v riadku na vypis celeho suboru
- scanf("%d", &p);
- //program zisti ci zadane cislo p od pouzivatela je v rozsahu 1-20, ak nie je funkcia skonci a pokracuje sa v hlavnom programe
- if (p<1 || p>20){
- printf("Nespravny pocet nukleotidov na riadok");
- return 0;
- }
- //program zisti ci sa dany subor da otvorit, ak nie funkcia skonci a pokracuje sa v hlavnom programe
- if ((fr = fopen("DNAsekvencie.dat", "r")) == NULL){
- printf("Neotvoreny subor.\n");
- return 0;
- }
- //premenna "s" je pocitadlo podla ktoreho sa vypise subor na "p" pismen pre riadok a funkcia skonci
- while ((*c = getc(fr)) != EOF){
- printf("%c", *c);
- s++;
- if (s%p==0) putchar('\n');
- }
- return 0;
- }
- int nacitanie(FILE *fr, char *c, char w[]){
- int i=0,p=0;
- //program zisti ci sa dany subor da otvorit, ak nie funkcia skonci a pokracuje sa v hlavnom programe
- if ((fr = fopen("DNAsekvencie.dat", "r")) == NULL){
- printf("Neotvoreny subor.\n");
- return 0;
- }
- //skontrolujeme ci v subore je zapisana DNA sekvencia (neobsahuje ine znaky ako A,T,C,G)
- while ((*c = getc(fr)) != EOF){
- if (*c!='A' && *c!='C' && *c!='G' && *c!='T')
- p=1;
- }
- if (p==1)
- printf("Sekvencia nesplna podmienky\n");
- //ak v subore je naozaj zapisana iba DNA sekvencia, tak ju zapiseme do pola "w", ktore obsahuje najviac 1000 znakov a zvysok ignoruje
- else {
- rewind(fr);
- while (((*c = getc(fr)) != EOF) && (i!=1000)){
- w[i]=*c;
- i++;
- }
- printf("Sekvenciu sa podarilo nacitat\n");
- }
- return 0;
- }
- int histogram(char w[]){
- int i,h[4];
- //program zisti ci sekvencia bola vobec nacitana do pola "w", ak nie je, tak funckia skonci a pokracuje sa v hlavnom programe
- if (w[0]<'A' || w[0]>'Z'){
- printf("Sekvencia nie je nacitana");
- return 0;
- }
- //nastavime pomocne premenne pola "h" na 0
- for(i=0;i<4;i++)
- h[i]=0;
- //prezerame pole "w" a hladame pismena A,C,G a T, ktorych jednotlive mnozstva zapiseme do pomocnych premennych pola "h"
- for(i=0;i<1000;i++){
- if (w[i]=='A') h[0]++;
- if (w[i]=='C') h[1]++;
- if (w[i]=='G') h[2]++;
- if (w[i]=='T') h[3]++;
- }
- printf("A: %d\nC: %d\nG: %d\nT: %d", h[0], h[1], h[2], h[3]);
- return 0;
- }
- int hladanie(char w[]){
- int i,n,j=0,m=0,k=0,t=0;
- char r[10];
- printf("Zadaj podsekvenciu\n");
- scanf("%s", &r);
- for (i=0;i<1000;i++)
- if (w[i]>='A' && w[i]<='Z') n=i;
- for (i=0;i<10;i++)
- if (r[i]>='A' && r[i]<='Z') m=i;
- for(i=0;i<n+1;i++){
- if (r[t]==w[i]){
- if (k+1!=i) t=0;
- k=i;
- t++;
- }
- if ((m+1)==t) {
- if (i<=3) {
- printf("%d ", i-t+2);
- for (j=0;j<3-i+1;j++)
- printf("-");
- for(j=0;j<i+4;j++)
- printf("%c", w[j]);
- putchar('\n');
- }
- if (i>3 && n-i>=3) {
- printf("%d ", i-t+2);
- for(j=i-3;j<i+5;j++)
- printf("%c", w[j]);
- putchar('\n');
- }
- if (n-i<=3){
- printf("%d ", i-t+2);
- for(j=i-4;j<n+1;j++)
- printf("%c", w[j]);
- for (j=n-i;j<3;j++)
- printf("-");
- putchar('\n');
- }
- t=0;
- }
- }
- }
- int komplement(char w[]){
- int i,k;
- for(i=0;i<1000;i++)
- if (w[i]>='A' && w[i]<='Z') k=i+1;
- for(i=0;i<k;){
- if (w[i]=='A'){
- w[i]='T';
- i++;
- }
- if (w[i]=='T'){
- w[i]='A';
- i++;
- }
- if (w[i]=='C'){
- w[i]='G';
- i++;
- }
- if (w[i]=='G'){
- w[i]='C';
- i++;
- }
- }
- for(i=0;i<k;i++)
- printf("%c",w[i]);
- }
- int priemer(char w[]){
- int i=0,s=0,p=0,a=0,j=0,f=0;
- char l,k;
- float d=0;
- scanf("%c %c", &l, &k);
- for (i=0;i<1000;i++)
- if (w[i]==l) p++;
- for (i=0;i<1000;i++){
- if (w[i]==l){
- s=i;
- for (j=i+1;j<1000;j++)
- if (w[j]==k){
- a=j;
- d+=a-s;
- f++;
- }
- }
- }
- d/=f;
- printf("%.2f", d);
- }
- int main() {
- FILE *fr;
- int i=0;
- char c,q,w[1000];
- fr = fopen("DNAsekvencie.dat", "r");
- do{
- printf("Vyber jednu z moznosti:\nv - vypis sekvencie\nn - nacitanie sekvencie do statickeho pola\nh - histogram\np - vyhladanie \nc - komplementarne vlakno\nd - priemerna vzdialenost\nk - ukoncenie programu\n");
- q=getchar();
- getchar();
- switch (q) {
- case 'v':
- vypis(fr, &c);
- break;
- case 'n':
- nacitanie(fr,&c,w);
- break;
- case 'h':
- histogram(w);
- break;
- case 'p':
- hladanie(w);
- break;
- case 'c':
- komplement(w);
- break;
- case 'd':
- priemer(w);
- break;
- }
- putchar('\n');
- }while (q!='k');
- fclose(fr);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement