Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //funkcia na vypis sekvencie zo suboru na obrazovku
  5. int vypis(FILE *fr, char *c){
  6. int p,s=0;
  7.  
  8. //pouzivatel zada cele cislo p predstavujuce pocet pismen v riadku na vypis celeho suboru
  9. scanf("%d", &p);
  10.  
  11. //program zisti ci zadane cislo p od pouzivatela je v rozsahu 1-20, ak nie je funkcia skonci a pokracuje sa v hlavnom programe
  12. if (p<1 || p>20){
  13. printf("Nespravny pocet nukleotidov na riadok");
  14. return 0;
  15. }
  16.  
  17. //program zisti ci sa dany subor da otvorit, ak nie funkcia skonci a pokracuje sa v hlavnom programe
  18. if ((fr = fopen("DNAsekvencie.dat", "r")) == NULL){
  19. printf("Neotvoreny subor.\n");
  20. return 0;
  21. }
  22. //premenna "s" je pocitadlo podla ktoreho sa vypise subor na "p" pismen pre riadok a funkcia skonci
  23. while ((*c = getc(fr)) != EOF){
  24. printf("%c", *c);
  25. s++;
  26. if (s%p==0) putchar('\n');
  27. }
  28. return 0;
  29. }
  30.  
  31. int nacitanie(FILE *fr, char *c, char w[]){
  32. int i=0,p=0;
  33.  
  34. //program zisti ci sa dany subor da otvorit, ak nie funkcia skonci a pokracuje sa v hlavnom programe
  35. if ((fr = fopen("DNAsekvencie.dat", "r")) == NULL){
  36. printf("Neotvoreny subor.\n");
  37. return 0;
  38. }
  39.  
  40. //skontrolujeme ci v subore je zapisana DNA sekvencia (neobsahuje ine znaky ako A,T,C,G)
  41. while ((*c = getc(fr)) != EOF){
  42. if (*c!='A' && *c!='C' && *c!='G' && *c!='T')
  43. p=1;
  44. }
  45.  
  46. if (p==1)
  47. printf("Sekvencia nesplna podmienky\n");
  48.  
  49. //ak v subore je naozaj zapisana iba DNA sekvencia, tak ju zapiseme do pola "w", ktore obsahuje najviac 1000 znakov a zvysok ignoruje
  50. else {
  51. rewind(fr);
  52. while (((*c = getc(fr)) != EOF) && (i!=1000)){
  53. w[i]=*c;
  54. i++;
  55. }
  56. printf("Sekvenciu sa podarilo nacitat\n");
  57. }
  58. return 0;
  59. }
  60.  
  61.  
  62. int histogram(char w[]){
  63. int i,h[4];
  64.  
  65. //program zisti ci sekvencia bola vobec nacitana do pola "w", ak nie je, tak funckia skonci a pokracuje sa v hlavnom programe
  66. if (w[0]<'A' || w[0]>'Z'){
  67. printf("Sekvencia nie je nacitana");
  68. return 0;
  69. }
  70.  
  71. //nastavime pomocne premenne pola "h" na 0
  72. for(i=0;i<4;i++)
  73. h[i]=0;
  74.  
  75. //prezerame pole "w" a hladame pismena A,C,G a T, ktorych jednotlive mnozstva zapiseme do pomocnych premennych pola "h"
  76. for(i=0;i<1000;i++){
  77. if (w[i]=='A') h[0]++;
  78. if (w[i]=='C') h[1]++;
  79. if (w[i]=='G') h[2]++;
  80. if (w[i]=='T') h[3]++;
  81. }
  82. printf("A: %d\nC: %d\nG: %d\nT: %d", h[0], h[1], h[2], h[3]);
  83. return 0;
  84. }
  85.  
  86. int hladanie(char w[]){
  87. int i,n,j=0,m=0,k=0,t=0;
  88. char r[10];
  89.  
  90. printf("Zadaj podsekvenciu\n");
  91. scanf("%s", &r);
  92.  
  93. for (i=0;i<1000;i++)
  94. if (w[i]>='A' && w[i]<='Z') n=i;
  95.  
  96. for (i=0;i<10;i++)
  97. if (r[i]>='A' && r[i]<='Z') m=i;
  98.  
  99.  
  100. for(i=0;i<n+1;i++){
  101. if (r[t]==w[i]){
  102. if (k+1!=i) t=0;
  103. k=i;
  104. t++;
  105.  
  106. }
  107.  
  108. if ((m+1)==t) {
  109.  
  110. if (i<=3) {
  111. printf("%d ", i-t+2);
  112. for (j=0;j<3-i+1;j++)
  113. printf("-");
  114. for(j=0;j<i+4;j++)
  115. printf("%c", w[j]);
  116. putchar('\n');
  117. }
  118. if (i>3 && n-i>=3) {
  119. printf("%d ", i-t+2);
  120. for(j=i-3;j<i+5;j++)
  121. printf("%c", w[j]);
  122. putchar('\n');
  123. }
  124. if (n-i<=3){
  125. printf("%d ", i-t+2);
  126. for(j=i-4;j<n+1;j++)
  127. printf("%c", w[j]);
  128. for (j=n-i;j<3;j++)
  129. printf("-");
  130. putchar('\n');
  131. }
  132. t=0;
  133. }
  134. }
  135. }
  136.  
  137. int komplement(char w[]){
  138. int i,k;
  139.  
  140. for(i=0;i<1000;i++)
  141. if (w[i]>='A' && w[i]<='Z') k=i+1;
  142.  
  143. for(i=0;i<k;){
  144. if (w[i]=='A'){
  145. w[i]='T';
  146. i++;
  147. }
  148. if (w[i]=='T'){
  149. w[i]='A';
  150. i++;
  151. }
  152. if (w[i]=='C'){
  153. w[i]='G';
  154. i++;
  155. }
  156. if (w[i]=='G'){
  157. w[i]='C';
  158. i++;
  159. }
  160. }
  161. for(i=0;i<k;i++)
  162. printf("%c",w[i]);
  163. }
  164.  
  165. int priemer(char w[]){
  166. int i=0,s=0,p=0,a=0,j=0,f=0;
  167. char l,k;
  168. float d=0;
  169. scanf("%c %c", &l, &k);
  170. for (i=0;i<1000;i++)
  171. if (w[i]==l) p++;
  172.  
  173. for (i=0;i<1000;i++){
  174. if (w[i]==l){
  175. s=i;
  176. for (j=i+1;j<1000;j++)
  177. if (w[j]==k){
  178. a=j;
  179. d+=a-s;
  180. f++;
  181. }
  182. }
  183. }
  184. d/=f;
  185. printf("%.2f", d);
  186. }
  187.  
  188. int main() {
  189. FILE *fr;
  190. int i=0;
  191. char c,q,w[1000];
  192.  
  193. fr = fopen("DNAsekvencie.dat", "r");
  194.  
  195. do{
  196. 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");
  197. q=getchar();
  198. getchar();
  199. switch (q) {
  200. case 'v':
  201. vypis(fr, &c);
  202. break;
  203. case 'n':
  204. nacitanie(fr,&c,w);
  205. break;
  206. case 'h':
  207. histogram(w);
  208. break;
  209. case 'p':
  210. hladanie(w);
  211. break;
  212. case 'c':
  213. komplement(w);
  214. break;
  215. case 'd':
  216. priemer(w);
  217. break;
  218. }
  219. putchar('\n');
  220. }while (q!='k');
  221.  
  222. fclose(fr);
  223. system("pause");
  224. return 0;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement