|
Hey all,
You've been very, very helpful in the past, and I hope to draw on more of Team Liquid's vast experience with computer science and programming.
We just started doing arrays last week, and although they look complicated as hell at first, it's actually extremely straightforward, which is nice. I'm only having trouble with one program out of the four I need to do tonight, here it is:
Number Analysis Program
* Ask the user to enter a file name. Assume that the file contains a series of numbers, each written on a separate line. The program should read the contents of the file into an array and then display the following data:
- The lowest and highest numbers in the array - The total numbers in the array - The average of the sum of the numbers in the array
The Student CD contains a file named numbers.txt that you can use to test the program.
+ Show Spoiler [Code So Far] +Don't have anything yet
First of all, I have absolutely no clue how to link a file to a program in this way. Maybe it's completely obvious and I'm overthinking this one, but that's the main part that's throwing me for a loop.
I'm confident that once I learn how to do this, I can write the code required to get the values asked for, but again, I don't know how to draw information from a file like that, so maybe there is something i'm missing.
Furthermore, since I bought the eBook version of the textbook, I didn't get the CD, so I don't have that test file. I can obviously just make text file in notepad to test, but i was like "WTF, pwned " when I saw that.
anyway, as always, any and all help is greatly appreciated and thanks in advanced for everyone who does help me out!
|
Oh ya, and one more thing.
I use Wascana Eclipse as my editing tool, for those of you who haven't checked the previous blogs or forgot.
For some reason, a lot of the time when I make changes to a source code withing a project, I get this error that says "Cannot open output file NameOfFile.exe: Permission denied."
The problem is easily solved by just closing the project and reopening it, but that becomes a huge pain in the ass after the 2oth or so time. Also, it doesn't happen every time I make changes, only sometimes.
Do any Wascana users know how to make this stop? That would be doubly awesome as well.
|
Damn, introductory coding courses are so bad... Testing on file I/O instead of arrays, lol.
In c++, you should get used to using the standard library. The library code you are looking for, I believe, is ifstream (input file stream), which you can learn about by googling. It's a bit overwhelming if you haven't learned anything about objects, but look for a simple example of how to open a file and read ints out and you will be fine.
Afterwards it is loops and basic math, if you payed attention to how top access and lop through arrays that should be easy.
|
http://www.cplusplus.com/doc/tutorial/files/
That seems like it'd teach you everything you need to know although I could be missing something considering I'm not much of an actual programmer. Just read in the filename as a string from standard in, then open up an input file stream with that string as the name and read in all the numbers with that stream's name instead of cin... algorithm after that should be the same.
|
Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself?
Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array.
Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language:
+ Show Spoiler [don't worry mine actually has co…] +
|
|
On November 18 2010 10:36 neSix wrote:Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself? Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array. Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language: + Show Spoiler [don't worry mine actually has co…] + My favorite site as well. It works wonders!
|
On November 18 2010 10:36 neSix wrote:Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself? Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array. Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language: + Show Spoiler [don't worry mine actually has co…] +
I understand what you are saying. I was a tutor for introductory programming classes in college and I've encountered many of these people. Just have to be patient and 'guide' them to do the work by themselves D:
|
you can use a pair of nested loops to add the contents of each element to an accumulator. ex.
const int NUM_ROWS = 3; //Number of Rows const int NUM_COLS = 5; //Number of Columbs int total = 0; //Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{numbers}};
//Sum the array elements.
for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; } //Display the sum.
cout<< "The total is " <<total <<endl;
I also need some help defining a 3D array(not to be a thread-derailer);
I need to display a 3D array in which has a bunch of numbers and has 3 subjects, 4 grades(9th-12th), and [Fail, C, B, A] in 3 boxes kinda like
Math ----------------------- 9th [Fail] [C] [B] [A] 10th [20] 29] [10] [9] 11th [31] [7] [15] [7] 12th [12] [13] [20] [14]
and I have to make 3 boxes like this, my code so far is:
//arrayz©.-·:._.·:·¯·:·_.~`z3r0~ #include <iostream> #include <string> #include <iomanip>
using namespace std;
int main() { int Ar[3][4][4] = {20, 29, 10, 9, 31, 7, 15, 7, 12, 13, 20, 14, 7, 22, 11, 12, 22, 2, 33, 9, 19, 7, 7, 13, 5, 17, 12, 9, 2, 7, 21, 33, 33, 12, 7, 1, 10, 19, 3, 7, 14, 8, 9, 12, 9, 8, 20, 17};
return 0; }
|
On November 18 2010 10:39 NoUShutUp wrote:Show nested quote +On November 18 2010 10:36 neSix wrote:Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself? Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array. Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language: + Show Spoiler [don't worry mine actually has co…] + I understand what you are saying. I was a tutor for introductory programming classes in college and I've encountered many of these people. Just have to be patient and 'guide' them to do the work by themselves D:
Yeah, but honestly, it's not a big deal to help a new guy get used to googling what he needs to learn... Introductory programming courses never show their students the basic skills of how to articulate what it is they need, how to read articles...
But honestly, googling something like reading from a file will turn up a lot of results that require A LOT more knowledge about programming than this guy has, so you can't just tell him to f*$# off and teach himself everything about object oriented coding required to understand the documentation for a basic io library like iostream...
|
On November 18 2010 10:39 NoUShutUp wrote:Show nested quote +On November 18 2010 10:36 neSix wrote:Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself? Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array. Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language: + Show Spoiler [don't worry mine actually has co…] + I understand what you are saying. I was a tutor for introductory programming classes in college and I've encountered many of these people. Just have to be patient and 'guide' them to do the work by themselves D:
Ok I understand what you guys are saying. I'm not some dumbfuck college kid who pays nerds to do my work for me so I can go get hammered every night, and while the fact that you assumed this of me is offensive, it's also completely understandable since that seems to be the trend in college nowadays, and you obviously don't know me. I'm an International Business major as well as a Digital Arts minor, so this course is very relevant to me and I actually want to learn how to do this so that I have a good foundation moving forward.
First of all I want to state, I do not want you to write the code for me, and in fact that's the opposite of what I want you to do.
secondly I have 3 other programs for this specific assignment, two of which I've finished and the third i'm working on right now, I can post the code if that would make you feel better, but I felt it unnecessary since I've already finished/ am about to finish.
I said in the post that I had absolutely no idea how to do this, and that I couldn't find the information in my textbook. Links to places where I can get the information are very helpful, and I tried googling how to do it, but I wasn't 100% sure what words to write to get a proper google search.
as a side note, cplusplus.com is an awesome site, I found it tonight whe trying to look at how to do my last homework problem, so thanks to NoUShutUp for posting that.
|
On November 18 2010 10:50 NevilleS wrote:Show nested quote +On November 18 2010 10:39 NoUShutUp wrote:On November 18 2010 10:36 neSix wrote:Asking for help on a homework assignment in which you've started absolutely no code is kind of like a big "hey fuck you write my program for me". What irks me even more about it is that you put your lack of code in a spoiler. Why in the world would you do that UNLESS you were trying to trick me into thinking you'd actually spent some time working on it yourself? Having that said, break the problem up into pieces. Since you said you pretty much understand arrays, and you are having trouble just reading from the file, start by creating a simple array in memory with some hard-coded integers, and solve the problems you're asked to solve using that array. Then once you have that working, all you need to do is figure out how to read from a file in C++. Here's a reference to a really big and often thorough textboox that I use to solve simple problems like "how do i read from a file?" in any language: + Show Spoiler [don't worry mine actually has co…] + I understand what you are saying. I was a tutor for introductory programming classes in college and I've encountered many of these people. Just have to be patient and 'guide' them to do the work by themselves D: Yeah, but honestly, it's not a big deal to help a new guy get used to googling what he needs to learn... Introductory programming courses never show their students the basic skills of how to articulate what it is they need, how to read articles... But honestly, googling something like reading from a file will turn up a lot of results that require A LOT more knowledge about programming than this guy has, so you can't just tell him to f*$# off and teach himself everything about object oriented coding required to understand the documentation for a basic io library like iostream...
In this case, googling "Read File C++" gives you a very good website with crystal clear explanations.
http://www.google.com/search?q=read file c++&esrch=BetaShortcuts
|
On November 18 2010 10:42 Sexualinguistic wrote: you can use a pair of nested loops to add the contents of each element to an accumulator. ex.
const int NUM_ROWS = 3; //Number of Rows const int NUM_COLS = 5; //Number of Columbs int total = 0; //Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{numbers}};
//Sum the array elements.
for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; } //Display the sum.
cout<< "The total is " <<total <<endl;
I also need some help defining a 3D array(not to be a thread-derailer);
I need to display a 3D array in which has a bunch of numbers and has 3 subjects, 4 grades(9th-12th), and [Fail, C, B, A] in 3 boxes kinda like
Math ----------------------- 9th [Fail] [C] [B] [A] 10th [20] 29] [10] [9] 11th [31] [7] [15] [7] 12th [12] [13] [20] [14]
and I have to make 3 boxes like this, my code so far is:
//arrayz©.-·:._.·:·¯·:·_.~`z3r0~ #include <iostream> #include <string> #include <iomanip>
using namespace std;
int main() { int Ar[3][4][4] = {20, 29, 10, 9, 31, 7, 15, 7, 12, 13, 20, 14, 7, 22, 11, 12, 22, 2, 33, 9, 19, 7, 7, 13, 5, 17, 12, 9, 2, 7, 21, 33, 33, 12, 7, 1, 10, 19, 3, 7, 14, 8, 9, 12, 9, 8, 20, 17};
return 0; }
bump for interest
|
On November 18 2010 10:58 Sexualinguistic wrote:Show nested quote +On November 18 2010 10:42 Sexualinguistic wrote: you can use a pair of nested loops to add the contents of each element to an accumulator. ex.
const int NUM_ROWS = 3; //Number of Rows const int NUM_COLS = 5; //Number of Columbs int total = 0; //Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{numbers}};
//Sum the array elements.
for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; } //Display the sum.
cout<< "The total is " <<total <<endl;
I also need some help defining a 3D array(not to be a thread-derailer);
I need to display a 3D array in which has a bunch of numbers and has 3 subjects, 4 grades(9th-12th), and [Fail, C, B, A] in 3 boxes kinda like
Math ----------------------- 9th [Fail] [C] [B] [A] 10th [20] 29] [10] [9] 11th [31] [7] [15] [7] 12th [12] [13] [20] [14]
and I have to make 3 boxes like this, my code so far is:
//arrayz©.-·:._.·:·¯·:·_.~`z3r0~ #include <iostream> #include <string> #include <iomanip>
using namespace std;
int main() { int Ar[3][4][4] = {20, 29, 10, 9, 31, 7, 15, 7, 12, 13, 20, 14, 7, 22, 11, 12, 22, 2, 33, 9, 19, 7, 7, 13, 5, 17, 12, 9, 2, 7, 21, 33, 33, 12, 7, 1, 10, 19, 3, 7, 14, 8, 9, 12, 9, 8, 20, 17};
return 0; }
bump for interest
please make your own thread.
|
On November 18 2010 10:58 Sexualinguistic wrote:Show nested quote +On November 18 2010 10:42 Sexualinguistic wrote: you can use a pair of nested loops to add the contents of each element to an accumulator. ex.
const int NUM_ROWS = 3; //Number of Rows const int NUM_COLS = 5; //Number of Columbs int total = 0; //Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{numbers}};
//Sum the array elements.
for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; } //Display the sum.
cout<< "The total is " <<total <<endl;
I also need some help defining a 3D array(not to be a thread-derailer);
I need to display a 3D array in which has a bunch of numbers and has 3 subjects, 4 grades(9th-12th), and [Fail, C, B, A] in 3 boxes kinda like
Math ----------------------- 9th [Fail] [C] [B] [A] 10th [20] 29] [10] [9] 11th [31] [7] [15] [7] 12th [12] [13] [20] [14]
and I have to make 3 boxes like this, my code so far is:
//arrayz©.-·:._.·:·¯·:·_.~`z3r0~ #include <iostream> #include <string> #include <iomanip>
using namespace std;
int main() { int Ar[3][4][4] = {20, 29, 10, 9, 31, 7, 15, 7, 12, 13, 20, 14, 7, 22, 11, 12, 22, 2, 33, 9, 19, 7, 7, 13, 5, 17, 12, 9, 2, 7, 21, 33, 33, 12, 7, 1, 10, 19, 3, 7, 14, 8, 9, 12, 9, 8, 20, 17};
return 0; }
bump for interest
It would be easier if you just define a struct/class to hold the three floats for subjects' grades, and make an array of that class.
Actually, I thought about it some more, that's not how you use a 3D array at all. A 3D array gives you n^3 space, where you only need 3n...
|
Well, it should be pretty obvious that the only "nontrivial" part of this assignment is the file input, as the actual computation is blazingly obvious. So, you just had to google C++ file I/O and use the basic stuff. I don't think you even need to use delimiters since the default delimiter is '\n' I believe... could be wrong, haven't used C++ in 5 years.
So, just nextline reads basically. You don't even need to store the entire read - if you think about it, as long as you have a separate one integer wide buffer for max, min, sum, count, then you can do the computations required. And besides, I/O time will dominate so you don't need a buffer any larger than that to prevent your CPU from being throttled by the I/O time, assuming you pipeline the I/O into the computation.
|
Australia7069 Posts
The approach i would take is A) find some example code to open a file, and read line by line b) modify to write numbers into an array (ie: write each line to an array element, initialise the array to the correct size etc) c) write the simple algorithms they asked for d) replace your hard coded file path with an element which is written by cin
voila you're done. if you need specific help with any of these steps, post the code you have so far and i'll be happy to help. not going to write code from scratch for you tho
|
tips:
understand how input from the file is fed in looks like a loop over arrays exercise. not too difficult (read up on loops and arrays duh) once you get the hang of them
also look up how to open files on those websites above. usually just googling the simple stuff helps
|
On November 18 2010 11:02 KiLL_ORdeR wrote:Show nested quote +On November 18 2010 10:58 Sexualinguistic wrote:On November 18 2010 10:42 Sexualinguistic wrote: you can use a pair of nested loops to add the contents of each element to an accumulator. ex.
const int NUM_ROWS = 3; //Number of Rows const int NUM_COLS = 5; //Number of Columbs int total = 0; //Accumulator int numbers[NUM_ROWS][NUM_COLS] = {{numbers}};
//Sum the array elements.
for (int row = 0; row < NUM_ROWS; row++) { for (int col = 0; col < NUM_COLS; col++) total += numbers[row][col]; } //Display the sum.
cout<< "The total is " <<total <<endl;
I also need some help defining a 3D array(not to be a thread-derailer);
I need to display a 3D array in which has a bunch of numbers and has 3 subjects, 4 grades(9th-12th), and [Fail, C, B, A] in 3 boxes kinda like
Math ----------------------- 9th [Fail] [C] [A] 10th [20] 29] [10] [9] 11th [31] [7] [15] [7] 12th [12] [13] [20] [14]
and I have to make 3 boxes like this, my code so far is:
//arrayz©.-·:._.·:·¯·:·_.~`z3r0~ #include <iostream> #include <string> #include <iomanip>
using namespace std;
int main() { int Ar[3][4][4] = {20, 29, 10, 9, 31, 7, 15, 7, 12, 13, 20, 14, 7, 22, 11, 12, 22, 2, 33, 9, 19, 7, 7, 13, 5, 17, 12, 9, 2, 7, 21, 33, 33, 12, 7, 1, 10, 19, 3, 7, 14, 8, 9, 12, 9, 8, 20, 17};
return 0; }
bump for interest please make your own thread.
no, fuck you. There are enough "HELP WITH C++" threads, why do you think I said "please don't think of me as a thread derailer"
PLUS, I even got the code figured out (thanks to someone else in this thread), I needed to use a triple array, goes something like:
+ Show Spoiler + #include <iostream> #include <iomanip> #include <string> using namespace std;
int main() { int arr[3][4][4] = {20,29,10,9,31,7,15,7,12,13,20,7,22,11,12,22,2,33,9,19,7,7,13,5,17,12,9,2,7,21,33,33,12,7,1,10,19,3,7,14,8,9,12,9,8,20,17}; string courses[3] = {"Math","English", "Science"}; string grade[4] = {" 9th Grade", "10th Grade", "11th Grade", "12th Grade"}; /*int arr[3][4][4]; int value;
for (int x = 0; x<3; x++) { for (int y = 0; y<4; y++) { for (int k = 0; k<4; k++) { cin>>value; arr[x][y][k] = value;
} } } cout<<endl;
*/ double pass=0.0; double fail = 0.0; double passrate = 0.0; for (int x = 0; x<3; x++) {
cout<<setw(7)<<courses[x]<<": F C B A"<<endl; /* if (x==0) cout<<"Math: F C B A"<<endl; else if (x==1) cout<<"English: F C B A"<<endl; else cout<<"Science: F C B A"<<endl; */ cout<<"---------------------------------"<<endl; for (int y = 0; y<4; y++) { cout<<setw(10)<<grade[y]<<" : |"; /* if (y==0) cout<<" 9th Grade : |"; else if (y==1) cout<<"10th Grade : |"; else if (y==2) cout<<"11th Grade : |"; else cout<<"12th Grade : |"; */ for (int k = 0; k<4; k++) { cout<<right<<setw(3)<<arr[x][y][k]<<"|"; if (k==0) fail+=arr[x][y][k]; else pass+= arr[x][y][k];
} cout<<endl; } cout<<"---------------------------------"<<endl; cout<<" Fail = "<<fail<<" Pass = "<<pass<< " Pass rate = "; passrate = pass / (fail+pass) * 100; cout<<passrate<<"%"<<endl<<endl; pass = 0; fail = 0; }
return 0; }
[b]User was temp banned for this post.
|
EDIT: Seems I don't look at forum names until AFTER I posted.
You didn't comment your code one bit! Commenting your code is essential when you are trying to figure out what exactly you want your code to do. It's especially necessary when you want others to take a look at it so they don't have to wrack their minds over what exactly you're doing.
To clean up your code you can definitely initialize more functions so that your main function isn't so complicated:
+ Show Spoiler + void ReadFile(string sFile); // reads in a file and passes all integers to a vector int LowestScore(); // loops through all scores and returns the lowest one int HighestScore(); // loops through all scores and returns the highest one int ScoreCount(); // returns the number of scores in the vector float AverageScore(); // returns the average score from all elements in the vector
This way when you're debugging you won't have to scroll through ALL of your code to try and find out where your problem is. Each task has it's own function, that way if you run across a problem with, say, the average score, you can skip right to the AverageScore() function and figure out what's wrong.
|
|
|
|