|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On February 23 2013 04:07 ranshaked wrote: if(currentFace == "Ace");{ //int sameCardsAce=0; sameCardsAce++; if(sameCardsAce==2) System.out.println("You have a pair"); }
Why are there semicolons after the conditions?
|
On February 23 2013 15:27 phar wrote: You are exactly right, performance arguments like this are always pointless.
Yeah, I'm doing a games programming course, and one of the things they try to drill into us is to forget about performance. Make something that works first, and then worry about performance.
|
On February 24 2013 04:41 zf wrote:Show nested quote +On February 23 2013 04:07 ranshaked wrote: if(currentFace == "Ace");{ //int sameCardsAce=0; sameCardsAce++; if(sameCardsAce==2) System.out.println("You have a pair"); }
Why are there semicolons after the conditions? Because it's wrong. Don't follow that code's syntax exactly.
|
+ Show Spoiler +
#include "Oving 5 del 1.h" #include <iostream>
using namespace std;
class Matrix2x2 { private: double matrix[1][1]; public: Matrix2x2(); void setValue(int x, int y, double value); double getValue(int x, int y); void printMatrix(); };
int main() { Matrix2x2 a; a.printMatrix(); a.setValue(0.0,0.0,1.0); a.printMatrix(); }
Matrix2x2::Matrix2x2() { matrix.setValue(0, 0, 1.0); matrix.setValue(0, 1, 0.0); matrix.setValue(1, 0, 0.0); matrix.setValue(0, 1, 1.0); }
void Matrix2x2::setValue(double x, double y, double value) { matrix[x][y] = value; }
double Matrix2x2::getValue(double x, double y) { return matrix[x][y]; }
void Matrix2x2::printMatrix() { for (int i = 0;i<2;i++) { for (int s = 0;s<2;s++) { cout << matrix[i][s] << " "; } cout << endl; } }
I get really many errors on this one. Why doesn't this work?
|
That reminds me when I wasted half a day trying to find why the following code wasn't working as desired:
while(true);{ //do something }
Good times :D
|
arent the functions supposed to be inside the class ?
Furthermore, reading the errors should give you an idea where it goes wrong.
|
On February 24 2013 22:38 Marradron wrote: arent the functions supposed to be inside the class ?
Furthermore, reading the errors should give you an idea where it goes wrong.
Isn't it easier to read when they are outside? (as long as the functions are longer than one line) All the problems has to do with the constructor! As soon as I remove it, there's no problem. I want to set the default values of the matrix declared in private, how should I do this?
|
On February 24 2013 22:46 Arnstein wrote:Show nested quote +On February 24 2013 22:38 Marradron wrote: arent the functions supposed to be inside the class ?
Furthermore, reading the errors should give you an idea where it goes wrong. Isn't it easier to read when they are outside? (as long as the functions are longer than one line) All the problems has to do with the constructor! As soon as I remove it, there's no problem. I want to set the default values of the matrix declared in private, how should I do this?
I wasnt sure that was allowed. Haven't programmed in c++ in a while.
|
I dont know C++, but what is the scope of matrix in the following function?
void Matrix2x2::setValue(double x, double y, double value) { matrix[x][y] = value; }
Should it not be this[x][y]= value; ?
|
On February 24 2013 23:45 AKnopf wrote:I dont know C++, but what is the scope of matrix in the following function? void Matrix2x2::setValue(double x, double y, double value) { matrix[x][y] = value; }
Should it not be this[x][y]= value; ?
Without trying to sound aggressive: While your attempts to help are appreciated, they're useless if you don't know C++.
matrix[x][y] refers to the member variable "matrix". "this" is a special pointer to the calling object. That part is likely correct Saying matrix[x][y] in a member function defaults to this->matrix[x][y]
@ the guy who posted the question: If you want help, it usually is useful to post error messages. If there are loads, pick ones that seem common.
Also, you're using doubles to index a matrix in the declarations of the getter/setter. That makes no sense, matrix indices are integers. As such, your get and set functions should take int x, int y (and double for the value, that's correct). You have it right in the declarations.
And you're fine to declare functions outside the class. It's not uncommon to have the class in a header file and the function declarations in a separate .cpp file.
Also, in your constructor you should be calling either this->setValue(...) or just setValue(...) (which will call it on "this" for you). This is why it's failing in the constructor and is probably the source of all your problems.
|
On February 24 2013 23:56 SgtCoDFish wrote:Show nested quote +On February 24 2013 23:45 AKnopf wrote:I dont know C++, but what is the scope of matrix in the following function? void Matrix2x2::setValue(double x, double y, double value) { matrix[x][y] = value; }
Should it not be this[x][y]= value; ? Without trying to sound aggressive: You have no idea what you're talking about, and while your attempts to help are appreciated, they're useless if you don't know C++. matrix[x][y] refers to the member variable "matrix". "this" is a special pointer to the calling object. That part is likely correct. @ the guy who posted the question: If you want help, it usually is useful to post error messages. If there are loads, pick ones that seem common. Also, you're using doubles to index a matrix. That makes no sense, matrix indices are integers. As such, your get and set functions should take int x, int y (and double for the value, that's correct) And you're fine to declare functions outside the class. It's not uncommon to have the class in a header file and the function declarations in a separate .cpp file. Also, in your constructor you should be calling either this->setValue(...) or just setValue(...) (which will call it on "this" for you). This is why it's failing in the constructor.
Very much agreed. OP's problem seems to be in the constructor: He's calling setValue incorrectly.
+ Show Spoiler +Line 29: matrix.setValue(0, 0, 1.0);
This should instead just be setValue(0, 0, 1.0); (as an object of type double[][] doesn't have a setValue method). That, and as you pointed out, changing the indices x and y to int in the type signature of getValue and setValue will make the code compile as far as I can tell.
Edit: clarified the fix to the code a bit
|
Thanks! I will check this out. I DID change the double before you told me to, because I realized how stupid it was. Value is still double though.
Edit: That fixed it! Thanks guys, you are awesome! Now I have to deal with a whole crock of shit with operator overloading I really love to learn programming, but the amount of work the university requires, it really makes it a bit less fun, and more exhausting.
|
Your definition of matrix should be double matrix[2][2];
|
On February 25 2013 00:32 waxypants wrote: Your definition of matrix should be double matrix[2][2]; True, didn't even notice that because the program still happens to work (no bounds checking)... If this was more complicated chances are some other variable would be overwritten and you'd notice some strange bugs. Edit #10: It did actually mess up indexing before, so the "wrong" array was printed.
|
Is this true? I thought indexing started at number 0? So by creating [1][1] you get index 0 and index 1; 2 indexes?
Also, I seem to have misunderstood operator overloading syntax.
This is added to the previously seen code: + Show Spoiler + const Matrix2x2 operator +(Matrix2x2& matrise1, Matrix2x2& matrise2);
const Matrix2x2 operator +(Matrix2x2& matrise1, Matrix2x2& matrise2) { double matrise[1][1]; matrise[0][0] = matrise1.getValue(0,0) + matrise2.getValue(0,0); matrise[0][1] = matrise1.getValue(0,1) + matrise2.getValue(0,1); matrise[1][0] = matrise1.getValue(1,0) + matrise2.getValue(1,0); matrise[1][1] = matrise1.getValue(1,1) + matrise2.getValue(1,1); }
This doesn't give any compiler errors, but it does give a warning since I don't have a return on the +operator.
Also, when I test it by making two matrices, a and b, then c = a+b;, I get this:
+ Show Spoiler + Program received signal: “EXC_BAD_INSTRUCTION”. sharedlibrary apply-load-rules all warning: Unable to restore previously selected frame. warning: Unable to restore previously selected frame. warning: Unable to restore previously selected frame. warning: Unable to restore previously selected frame. (gdb)
|
On February 25 2013 01:01 Arnstein wrote: Is this true? I thought indexing started at number 0? So by creating [1][1] you get index 0 and index 1; 2 indexes?
Indexing starts at 0, but an array of size 1 still only has 1 (valid) index.
|
[MySQL] Lets say I have the following table
id datetime playerid score 1 2013-02-15 19:15 1 10 1 2013-02-15 19:15 2 8 2 2013-02-16 19:15 2 5 3 2013-02-17 19:15 1 2 4 2013-02-20 19:15 2 1 5 2013-02-22 19:15 2 1
I now want the sum of the score for each player at that date so that the result becomes:
datetime playerid sumAtTime 2013-02-15 19:15 1 10 2013-02-15 19:15 2 8 2013-02-16 19:15 1 10 2013-02-16 19:15 2 13 2013-02-17 19:15 1 12 2013-02-17 19:15 2 13 2013-02-20 19:15 1 12 2013-02-20 19:15 2 14 2013-02-22 19:15 1 12 2013-02-22 19:15 2 15
It's almost like a SUM(score) and GROUP BY playerid, datetime.
How do I achieve this in MySQL? I know it is possible and very easy if I process this in php and I know how to do that, it's just that I'd like to do it with SQL if possible.
|
[C language]
I have a rather simple presentation problem.
My output is like this:
number(space)number(space) number(space)number(space) number(space)number(space)
However, an online check program wants output without the 2nd space: number(space)number number(space)number number(space)number
The variable answer is not unique. In other words, it is the only variable used for printing a value. Any suggestions?
Let me know if you need more info.
Sample code:
for (int x = 1; x < END; x++) { for (int z = 0; z < x; z++) { answer += var1 + var2; printf("%d ", answer); } printf("\n"); }
|
On February 25 2013 01:50 nakam wrote:[MySQL] Lets say I have the following table + Show Spoiler + id datetime playerid score 1 2013-02-15 19:15 1 10 1 2013-02-15 19:15 2 8 2 2013-02-16 19:15 2 5 3 2013-02-17 19:15 1 2 4 2013-02-20 19:15 2 1 5 2013-02-22 19:15 2 1
I now want the sum of the score for each player at that date so that the result becomes: datetime playerid sumAtTime 2013-02-15 19:15 1 10 2013-02-15 19:15 2 8 2013-02-16 19:15 1 10 2013-02-16 19:15 2 13 2013-02-17 19:15 1 12 2013-02-17 19:15 2 13 2013-02-20 19:15 1 12 2013-02-20 19:15 2 14 2013-02-22 19:15 1 12 2013-02-22 19:15 2 15
It's almost like a SUM(score) and GROUP BY playerid, datetime. How do I achieve this in MySQL? I know it is possible and very easy if I process this in php and I know how to do that, it's just that I'd like to do it with SQL if possible. Take this with a grain of salt because my sql knowledge sucks, but I think you have it basically correct already
SELECT datetime,playerid,SUM(score) FROM TableTable GROUP BY datetime, playerid
I think you're right: http://beginner-sql-tutorial.com/sql-group-by-clause.htm
But again, I have literally never written and executed a line of SQL in my entire life, so...
|
On February 25 2013 02:07 darkness wrote: I have a rather simple presentation problem.
My output is like this:
number(space)number(space) number(space)number(space) number(space)number(space)
However, an online check program wants output in without the 2nd space: number(space)number number(space)number number(space)number
The variable is not unique. Any suggestions?
Let me know if you need more info.
Assuming that you are generating this sequence in a loop, this is an example of a fencepost loop. Your for-loop likely looks like this:
For each number n: print n + " "
This generates the former sequence rather than the latter sequence. You can think of the for-loop as a stamp that repeatedly generates "number(space)". The trick is to recognize that this stamp cannot possibly generate the form on its own because of the special case at the end which has no space.
Your only recourse is to factor this special case out of loop:
For each number n except the last: print n + " " print the last number
This is called a fencepost loop because the problem is analogous to laying down fenceposts and wire.
|--|--|--|
There is one extra fencepost (n+1 overall) that you must account for when using n pieces of wire. The code ends up being easier to read if, rather than special casing the last post, you special case the first post and change the pattern accordingly:
print the first number For each number n starting from the second: print " " + n
|
|
|
|
|
|