| | |
Counter help
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Dec 2006
Posts: 1,089
Reputation:
Solved Threads: 164
> ... but that didn't work either. Still weird numbers.
assert( ( matrix[i][3] == 0 ) || ( matrix[i][3] == 1 ) ) ;
assert( ( matrix[i][4] == 0 ) || ( matrix[i][4] == 1 ) ) ;
int sum = matrix[i][3] + matrix[i][4] ;
if( sum == 2 ) ++counters[1][1] ;
else if( sum == 1 ) ++counters[0][1] ;
else ++counters[0][0] ; Last edited by vijayan121; Mar 27th, 2008 at 3:27 pm.
•
•
Join Date: Jan 2008
Posts: 3,842
Reputation:
Solved Threads: 503
I think I cut and pasted your first post before I saw your second. You had:
declared at the top, but I never saw it used later in the code. Looks like post 2 has it.
C++ Syntax (Toggle Plain Text)
int counters[2][2] = {0};
Last edited by VernonDozier; Mar 27th, 2008 at 3:28 pm.
The code you posted previously for doing the counting:
Seems OK. I don't see why the 0-0 combination is not being counted, and the cumulative counts don't correctly increment, seems they just keep adding the original value, in this example.
Have you changed this part?
C++ Syntax (Toggle Plain Text)
for(i = 0; i < 10; i++) // Set the counter for the genotypes { if (matrix[i][3]==0 && matrix[i][4] ==0) // If alleles AA, increase counter [0][0] by 1 { counters[0][0]++; } else if (matrix[i][3]==0 && matrix[i][4] ==1 || matrix[i][3]==1 && matrix[i][4] ==0) // If allele is heterozygous, increase counter [0][1] by 1 { counters[0][1]++; } else if (matrix[i][3]==1 && matrix[i][4] ==1) // If alleles BB, increase counter [1][1] by 1 { counters[1][1]++; } }
Have you changed this part?
Last edited by vmanes; Mar 27th, 2008 at 3:30 pm.
Everyone's gotta believe in something. I believe I'll have another drink.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
Please show your current version. And a set of results that it generates.
Last edited by vmanes; Mar 27th, 2008 at 3:36 pm.
Everyone's gotta believe in something. I believe I'll have another drink.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
•
•
Join Date: Jan 2008
Posts: 70
Reputation:
Solved Threads: 0
C++ Syntax (Toggle Plain Text)
#include <fstream.h> #include <stdlib.h> #include <assert.h> int i, j; int matrix[10000][5] = {0}; //Define a matrix with a maximum of 100 rows and 6 columns int counters[2][2] = {0}; // Define the genotype counter int repeats = 0; int norepeats; float p, q; float rand1, rand2, rand3, rand4; void SetSeed(); int main () { FILE *output_file = fopen("output.txt", "w"); printf("Enter the frequency of allele A: "); scanf("%f", &p); printf("\n"); printf("Frequency of allele A (p) is: %.3f\n", p); // States the frequency of the A allele q = 1 - p; // The value of q is 1 - (the probability entered for p) printf("Frequency of allele B (q) is: %.3f\n", q); // States the frequency of the B allele printf("\n"); printf("Please enter the desired number of repeats: "); scanf("%d", &norepeats); // Desired number of repeats of the program stored in 'norepeats' printf("\n"); while (repeats != norepeats){ // A while loop to loop the program 'norepeats' amount of times const float RANGE = 1.0; // Random number generated is below 1 SetSeed(); // Seed file for RNG set here //Open the input file// ifstream inFile; inFile.open("input.txt"); // Genealogy input file opened if (!inFile) { printf ("Unable to open input file"); // Error message reported if input.txt cannot be opened exit(1); } //Read the input file into the array while (inFile >> matrix[i][0]) { printf ("%d\t", matrix[i][0]); for (j = 1; j < 3; j++) { inFile >> matrix[i][j]; printf ("%d\t", matrix[i][j]); } int counter; if (matrix[i][1] == 0 && matrix[i][2] == 0){ // If the individual is a founder: rand1 = (float) rand() * RANGE / RAND_MAX; // Random number 1 generated rand2 = (float) rand() * RANGE / RAND_MAX; // Random number 2 generated if (rand1 < p){ // Place a 0 allele down in column 4 if random number 1 is below the set p value matrix[i][3] = 0; } else{ matrix[i][3] = 1; // Place a 1 allele down in column 4 if random number 1 is above the set p value } printf("\t%d", matrix[i][3]); if (rand2 < p){ // Place a 0 allele down in column 5 if random number 2 is below the set p value matrix[i][4] = 0; } else{ // Place a 1 allele down in column 5 if random number 2 is above the set p value matrix[i][4] = 1; } printf("\t%d", matrix[i][4]); } else{ int dad = matrix[i][1]; // 1 is "dad" column int mum = matrix[i][2]; // 2 is "mum" column int dadRowIndex = dad - 1; // The row of the father is 'dad - 1' as the first row is set at zero int mumRowIndex = mum -1; // The row of the mother is 'mum - 1' as the first row is set at zero for (counter = 1;counter <= 1;counter++){ rand3 = (float) rand() * RANGE / RAND_MAX; // Random number 3 generated rand4 = (float) rand() * RANGE / RAND_MAX; // Random number 4 generated } if (rand3 < 0.5){ // If random number 3 is less than a half, receive allele stored in column 4 from dad matrix[i][3] = matrix[dadRowIndex][3]; } else{ // If random number 3 is more than a half, receive allele stored in column 5 from dad matrix[i][3] = matrix[dadRowIndex][4]; } printf("\t%d", matrix[i][3]); if (rand4 < 0.5){ // If random number 4 is less than a half, receive allele stored in column 4 from mum matrix[i][4] = matrix[mumRowIndex][3]; } else{ // If random number 4 is more than a half, receive allele stored in column 5 from mum matrix[i][4] = matrix[mumRowIndex][4]; } printf("\t%d", matrix[i][4]); } i++; printf ("\n"); } inFile.close (); // Close the infile for(i = 0; i < 10; i++) // Set the counter for the genotypes { assert( ( matrix[i][3] == 0 ) || ( matrix[i][3] == 1 ) ) ; assert( ( matrix[i][4] == 0 ) || ( matrix[i][4] == 1 ) ) ; int sum = matrix[i][3] + matrix[i][4] ; if( sum == 2 ) ++counters[1][1] ; else if( sum == 1 ) ++counters[0][1] ; else ++counters[0][0] ; } printf("\n"); printf("Cumulative genotype totals:\n"); printf("AA: %d\n", counters[0][0]); // Print total number of AA individuals printf("AB: %d\n", counters[0][1]); // Print total number of heterozygotes printf("BB: %d\n", counters[1][1]); // Print total number of BB individuals printf("\n"); printf("\n"); repeats++; // End loop here } fclose(output_file); } void SetSeed() { // Determining the seed file FILE *seed_file; long int seed_value; seed_file = fopen("seed.txt","r"); // Open seed file fscanf(seed_file,"%d",&seed_value); // Exctract seed from file fclose(seed_file); // Close seed file srand(seed_value); // Randomise seed value seed_file = fopen("seed.txt","w"); // Create temporary output fprintf(seed_file,"%d",rand()); // Print random number to output fclose(seed_file); // Close temporary seed output file }
Result:
Desired number of repeats = 3
1 0 0 0 1
2 0 0 1 1
3 0 0 0 1
4 1 2 1 1
5 1 2 1 1
6 0 0 1 0
7 3 4 0 1
8 5 6 1 1
9 7 8 1 1
10 7 8 0 1
Cumulative totals:
00 = 0
10 = 5
11 = 5
1 0 0 0 0
2 0 0 1 0
3 0 0 0 1
4 1 2 1 1
5 1 2 1 1
6 0 0 0 1
7 3 4 1 1
8 5 6 1 1
9 7 8 1 1
10 7 8 1 1
Cumulative totals:
00 = 0
10 = 10
11 = 10
1 0 0 0 0
2 0 0 0 1
3 0 0 0 1
4 1 2 1 1
5 1 2 0 1
6 0 0 1 1
7 3 4 0 1
8 5 6 1 0
9 7 8 0 1
10 7 8 1 1
Cumulative totals:
00 = 0
10 = 15
11 = 15
This bit:
I'm not sure what it's supposed to do, but I suspect it's going back and changing some of the allele values in previous rows. So, what you display upon assignment is not always the value still there when you get to the counting portion. If you put a loop to display the matrix just before the counting loop, you'll see this occurs.
C++ Syntax (Toggle Plain Text)
else{ int dad = matrix[i][1]; // 1 is "dad" column int mum = matrix[i][2]; // 2 is "mum" column int dadRowIndex = dad - 1; // The row of the father is 'dad - 1' as the first row is set at zero int mumRowIndex = mum -1; // The row of the mother is 'mum - 1' as the first row is set at zero for (counter = 1;counter <= 1;counter++){ rand3 = (float) rand() * RANGE / RAND_MAX; // Random number 3 generated rand4 = (float) rand() * RANGE / RAND_MAX; // Random number 4 generated } if (rand3 < 0.5){ // If random number 3 is less than a half, receive allele stored in column 4 from dad matrix[i][3] = matrix[dadRowIndex][3]; } else{ // If random number 3 is more than a half, receive allele stored in column 5 from dad matrix[i][3] = matrix[dadRowIndex][4]; } printf("\t%d", matrix[i][3]); if (rand4 < 0.5){ // If random number 4 is less than a half, receive allele stored in column 4 from mum matrix[i][4] = matrix[mumRowIndex][3]; } else{ // If random number 4 is more than a half, receive allele stored in column 5 from mum matrix[i][4] = matrix[mumRowIndex][4]; } printf("\t%d", matrix[i][4]); }
C++ Syntax (Toggle Plain Text)
for( int r = 0; r < 10; r++ ) { for( int c = 0; c < 5; c++ ) cout << matrix[r][c] << " " ; cout << endl; } for(i = 0; i < 10; i++) // Set the counter for the genotypes { assert( ( matrix[i][3] == 0 ) || ( matrix[i][3] == 1 ) ) ; assert( ( matrix[i][4] == 0 ) || ( matrix[i][4] == 1 ) ) ; int sum = matrix[i][3] + matrix[i][4] ; if( sum == 2 ) ++counters[1][1] ; else if( sum == 1 ) ++counters[0][1] ; else ++counters[0][0] ; }
Everyone's gotta believe in something. I believe I'll have another drink.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
•
•
Join Date: Jan 2008
Posts: 3,842
Reputation:
Solved Threads: 503
•
•
•
•
Result:
Desired number of repeats = 3
1 0 0 0 1
2 0 0 1 1
3 0 0 0 1
4 1 2 1 1
5 1 2 1 1
6 0 0 1 0
7 3 4 0 1
8 5 6 1 1
9 7 8 1 1
10 7 8 0 1
Cumulative totals:
00 = 0
10 = 5
11 = 5
1 0 0 0 0
2 0 0 1 0
3 0 0 0 1
4 1 2 1 1
5 1 2 1 1
6 0 0 0 1
7 3 4 1 1
8 5 6 1 1
9 7 8 1 1
10 7 8 1 1
Cumulative totals:
00 = 0
10 = 10
11 = 10
1 0 0 0 0
2 0 0 0 1
3 0 0 0 1
4 1 2 1 1
5 1 2 0 1
6 0 0 1 1
7 3 4 0 1
8 5 6 1 0
9 7 8 0 1
10 7 8 1 1
Cumulative totals:
00 = 0
10 = 15
11 = 15
The results of the second group (non-cumulative) should be this, correct?
C++ Syntax (Toggle Plain Text)
1 0 0 0 0 2 0 0 1 0 3 0 0 0 1 4 1 2 1 1 5 1 2 1 1 6 0 0 0 1 7 3 4 1 1 8 5 6 1 1 9 7 8 1 1 10 7 8 1 1 Non-Cumulative totals: 00 = 1 (row 1) 10 = 3 (rows 2, 3, 6) 11 = 6 (rows 4, 5, 7, 8, 9, 10)
The first 3 columns are irrelevant to these totals, right? We are only looking at columns 4 and 5.
Note: I picked the second group since the first had no 00 rows. Also, do you want to display the current round's tallies in addition to the cumulative or just the cumulative tallies, as you have?
Last edited by VernonDozier; Mar 27th, 2008 at 7:40 pm. Reason: math error
![]() |
Similar Threads
- ASP .NET hit counter? (ASP.NET)
- letter and word counter (C)
- I'm looking for a counter.. (HTML and CSS)
- Counter issues (C)
- ASP .NET database hit counter (ASP.NET)
- Counter Strike issue (Windows Software)
- Page counter print accounting (*nix Software)
Other Threads in the C++ Forum
- Previous Thread: Going insane, please help!
- Next Thread: memcmp help needed
Views: 1333 | Replies: 21
| Thread Tools | Search this Thread |
Tag cloud for C++
6 add api array arrays assignment beginner binary bitmap c++ c/c++ calculator char class classes code compile compiler console conversion convert count data database delete desktop developer directshow display dll encryption error file forms fstream function functions game getline givemetehcodez graph homeworkhelper iamthwee ifstream input int integer java lazy lib linux loop looping loops map math matrix memory multidimensional newbie news node number output parameter pointer problem program programming project proxy python random read recursion recursive reference return sort string strings struct studio system template templates text tree url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets






