Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // a5q1.cpp
- // DNA Analysis
- //
- // Created by Hayden Lueck on 2014-11-17.
- // Copyright (c) 2014 Hayden Lueck. All rights reserved.
- //
- // dna.txt: http://pastebin.com/jshtBzX5
- #include <iostream>
- #include <string>
- #include <fstream>
- void SetGene(char[]); //sets genes from input file
- void PrintGene(char[]); //prints out a gene (used for testing, unused in program)
- bool SameGene(char[], char[], int); //checks if 2 genes are the same
- std::string SickleType(char[], char[]); //checks whether person is normal, anemic, or a carrier
- std::string AreTheyRelated(char[], char[], char[], char[], int); //first 2 for first person's genes,
- //second 2 for second person's genes, int for size
- std::ifstream inFile; //declare for input
- std::ofstream outFile; //declare for output
- const int GENE_SIZE = 444; //constant integer for size of genes
- int main() {
- /***** bind input and output files *****/
- inFile.open("dna.txt");
- outFile.open("DNAanalysis.txt");
- /****** check files exist ******/
- if(!inFile){
- std::cout << "Cannot find input file dna.txt Exiting..." << std::endl;
- return 1;
- }
- if(!outFile){
- std::cout << "Cannot find output file DNAanalysis.txt Exiting..." << std::endl;
- return 2;
- }
- /***** declare gene arrays *****/
- char gene1A[GENE_SIZE];
- char gene2A[GENE_SIZE];
- char gene1B[GENE_SIZE];
- char gene2B[GENE_SIZE];
- char gene1C[GENE_SIZE];
- char gene2C[GENE_SIZE];
- char gene1D[GENE_SIZE];
- char gene2D[GENE_SIZE];
- /***** set genes *****/
- SetGene(gene1A);
- SetGene(gene2A);
- SetGene(gene1B);
- SetGene(gene2B);
- SetGene(gene1C);
- SetGene(gene2C);
- SetGene(gene1D);
- SetGene(gene2D);
- /***** check if genes are normal/sickle ******/
- outFile << "Person A is " << SickleType(gene1A, gene2A) << std::endl;
- outFile << "Person B is " << SickleType(gene1B, gene2B) << std::endl;
- outFile << "Person C is " << SickleType(gene1C, gene2C) << std::endl;
- outFile << "Person D is " << SickleType(gene1D, gene2D) << std::endl;
- outFile << std::endl;
- /***** related people *****/
- outFile << "Person A " << AreTheyRelated(gene1A, gene2A, gene1B, gene2B, GENE_SIZE)
- << "person B" << std::endl;
- outFile << "Person A " << AreTheyRelated(gene1A, gene2A, gene1C, gene2C, GENE_SIZE)
- << "person C" << std::endl;
- outFile << "Person A " << AreTheyRelated(gene1A, gene2A, gene1D, gene2D, GENE_SIZE)
- << "person D" << std::endl;
- outFile << "Person B " << AreTheyRelated(gene1B, gene2B, gene1C, gene2C, GENE_SIZE)
- << "person C" << std::endl;
- outFile << "Person B " << AreTheyRelated(gene1B, gene2B, gene1D, gene2D, GENE_SIZE)
- << "person D" << std::endl;
- outFile << "Person C " << AreTheyRelated(gene1C, gene2C, gene1D, gene2D, GENE_SIZE)
- << "person D" << std::endl;
- /***** close input/output files *****/
- inFile.close();
- outFile.close();
- return 0;
- }
- void PrintGene(char gene[])
- {
- for(int i = 0; i < GENE_SIZE; i++) //go through 444 times
- {
- outFile << gene[i]; //print out each letter in the gene
- }
- outFile << std::endl;
- }
- void SetGene(char gene[])
- {
- for (int i = 0; i < GENE_SIZE; i++) //go through 444 times
- {
- inFile.get(gene[i]); //get the next character in the file, set it to the char in the array
- }
- }
- bool SameGene(char gene1[], char gene2[], int size)
- {
- bool sameGene = false; //prime sameGene
- for(int i = 0; i < size; i++) //go through 444 times
- {
- if(gene1[i] == gene2[i]) //if current letter in gene1 is same as gene2
- sameGene = true; //set to true, go through again with next letter to make sure it's still true
- else //if one letter is off
- {
- sameGene = false; //set to false
- break; //break out of loop
- }
- }
- return sameGene; //return true/false value of sameGene
- }
- std::string SickleType(char gene1[], char gene2[])
- {
- bool geneOneSickle = false, geneTwoSickle = false; //set gene1 and gene2 to not sickle
- if(gene1[19] == 'T') //if 20th char is T
- geneOneSickle = true; //gene is sickle
- if(gene2[19] == 'T') //if 20th char is T
- geneTwoSickle = true; //gene is sickle
- if(geneOneSickle || geneTwoSickle) //if either is sickle
- {
- if(geneTwoSickle && geneTwoSickle) //check if both are sickle, if they are...
- return "a carrier"; //they're a carrier
- else //only one is sickle
- return "anemic"; //they're anemic
- }
- else //neither genes are sickle
- return "normal"; //the person is normal
- }
- std::string AreTheyRelated(char person1Gene1[], char person1Gene2[], char person2Gene1[], char person2Gene2[], int size)
- {
- if(SameGene(person1Gene1, person2Gene1, size) ||
- SameGene(person1Gene1, person2Gene2, size) ||
- SameGene(person1Gene2, person2Gene1, size) ||
- SameGene(person1Gene2, person2Gene2, size)) //compare all genes, check if any are the same
- {
- return " is related to "; //if true, they're related
- }
- else //if false...
- return " is not related to "; //they're not related
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement