> I'm having a hard time writing a code for this one. I tried several
> times, but I can't get it to work properly. I live in Japan and I take
> an online C++ course. The instructor lives in the US so whenever I am
> awake, he's asleep. Therefore, I cannot contact him directly when I
> need help. I have to get this program up and running ASAP. I tried
> searching everywhere for help, but there's none except for this group.
> My textbook isn't much of a help either. I WILL GREATLY APPRECIATE THE
> HELP I WILL GET!
This is what he said. And trust me I have seen people struggle with writing a function to add two numbers after taking a college course of 1 year in C. I don't think he didn't try at all.
The way he presents the problem gives no point of reference for a nice person to say "oh, I see where you misunderstood what foo does" and make it a learning experience. He could, for example, have included one of the several some-what working attempts.
The only "good" answers to such a request are a: here's the code and b: lesson one, here's how a for-loop works. Since his textbook doesn't help, option b doesn't seem viable.
Rude, lazy, it's a fine line, I suppose. Being lazy in front of strangers you're asking for help is perhaps not rude, but doesn't exactly scream for a super-constructive response.
Ah, yes. Another little piece of comp.lang.* lore: the expression "Bullschildt" was not invented for nothing.
See also his annotated version of the official C standard, which at the time it was published contained not only Schildt's comments but also the complete text of the standard itself. The standard was available from the international standards bodies for a small fortune, yet the annotated version was available in bookshops for a modest fraction of the cost. It was widely speculated that the difference in price reflected the value added by Schildt's comments.
Perhaps the key is "ASAP" -- he waited until the last minute, then realized he was in trouble with a deadline.
Programming takes time as well as understanding and effort.
[I always finished my assignments early. I learned not to mention this, because I was beset with demands of the "help me with this" nature, where the people needing help really just needed to do the work.
Of course, towards the end of the semester, with a week left and three projects remaining and a /really/ loaded mainframe -- a Univac 1108 in my case -- with turnarond time measured in hours, well, this was beyond pathetic or poignant, it was simple stupidity for them to expect that they could do that much work in so little time.]
The problem is, these groups get dozens of posts like that every week. Most of them are probably just lies, as you can tell because the posters disappear when asked politely to show what they have come up with so far.
There are people on those groups who volunteer their time to help others, but there is only so much time to go around. There are plenty of people who have made a real effort and, per the FAQs, post the results they have so far to demonstrate this. It is entirely fair that the volunteers should want to prioritise helping these people instead.
And trust me I have seen people struggle with writing a function to add two numbers after taking a college course of 1 year in C.
Think about how they got so far while remaining so helpless. If someone convinces you that they're working really hard and trying to be independent, yet their helplessness proves they have a long history of being dependent and getting credit for other people's work, then odds are they're just good actors. Or they're fooling themselves. Either way, don't waste your time.
I know that's harsh on people who actually are trying to turn themselves around, but they should expect to weather some initial skepticism after coasting for so long.
I am a C programmer and could work through that code with a bit more effort than code I have maintained. However, I have seen some C++ code that baffled me more than this ever would.
Hm. Or I could take the obsfucated C version, dump it into an Inline::C block and then run it through Acme::EyeDrops. Then we could have a C version shaped like a camel. I am, however, far too tired to actually do so - anybody more awake is welcome to steal the idea ...
The program is drawing on a grid 9 wide by 10 high. The loop is going over each space in this grid. It puts a * in each cell that falls within the equations described by the four inequalities. Here's a slightly more simplified version.
int putchar ( int ) ;
int main ( void )
{
int z;
int width = 9;
int height = 10;
for (z = 0; z < width * height; z++)
{
int x = z % width;
int y = z / width;
putchar (
x + y > 3 && /* top left */
x + y < 14 && /* bottom right */
y < x + 6 && /* bottom left */
y > x - 5 /* top right */
? '*' : ' ' );
if (x == width - 1)
putchar ( '\n' );
};
putchar ( '\n' ) ;
return 0;
}
It would be clearer to separate the main loop into nested loops for x and y, but I've left it as is to show a closer resemblance to the previous version.
The fun part is that you can now play with the various settings. Try increasing the height and width and scaling the equations appropriately. Replace x by 2 * x or x * x for more interesting shapes. You can bound the picture by any equations you like. Example: http://ideone.com/53Qh3
I subscribed to comp.lang.c for a few months about two years ago when I was taking a course on C. Like a lot of older or more high-volume lists, the regulars are complete characters. Small battles over minor points of style go from 0 to A.E. Housman in no time at all. (If the Housman reference is too odd, substitute Erik Naggum.)
I eventually quit the list because it was too much of a time suck, but it's well worth a half a day swimming through the archives. Heathfield's posts are almost always worth a look.
Once upon a time, I was a Classics student, and even in the 1980s and 1990s, people still got a lot of mileage out of Housman stories and quotations. (He died in 1936.)
Apparently, after he died, they found notebooks in his office that he had filled with long elaborate, witty, hurtful insults -- aimed at nobody in particular. When he wrote a review, he would tweak the pre-fab insults as needed and voila. A sick, twisted person, but fascinating. (If you're really curious, check out Tom Stoppard's The Invention of Love.)
Thanks for the pointer. I tried desultorily to get a (net-)look at the Gow text, but no dice. I'll have to leave it to some weekend/vacation time to chase sources.
Here, a one-liner that makes its own calculations:
print '\n'.join(max(4-i, i-5)*' ' + (min(i, 9-i)*2+1)*'*' for i in range(0, 10))
Edit: shaved off a few more characters and somehow made it slightly clearer. I would make it diamond shaped, but python will whine because of "invalid indentation".
That actually doesn't do the trick because there is only one line 9 asterisks wide when it should be two. I don't think you can accomplish this replacing max/min with any combination of abs.
Regardless of whether or not the original post was rude is no excuse for a rude answer. Kindness begets kindness, patience begets patience. We have a duty to not escalate stuff like this into shit-storms. If the kid didn't post correctly, then we should answer by asking the right questions to guide him to the correct question. If you can't do that, then just move along, you don't need to post.
I remember being that kid. Well, not quite so bad that I literally wanted someone to write code for me, but I'm sure someone thought my poorly worded questions were asking people to write code for me. How many kids are we scaring away because we're being assholes to them?
> Regardless of whether or not the original post was rude is no excuse for a rude answer.
The answer wasn't rude, it was just unhelpful.
For those not familiar with the culture on comp.lang.c and the various related C and C++ groups, it is very simple: people will generally be helpful in dealing with homework questions as long as the asker has made a genuine effort.
On the other hand, anyone who just reposts homework verbatim with no effort whatsoever to solve the problem first is likely to find themselves given a very clever answer that is technically correct but clearly completely implausible for a beginner, thus making it very obvious to the teacher that the person is cheating on their homework. I recall a similar example where someone asked how to work out factorials in C++, and was presented with a highly efficient answer... because it used template metaprogramming and generated that answer at compile time.
This was certainly clear in the related FAQs last time I checked, so anyone who asks a homework question without making any effort to solve it themselves is not only lazy but also incapable of following basic netiquette. I doubt you'd find many regular posters on those groups who had much sympathy, even though some of those same posters give up a great deal of time to help those who are making a genuine effort to improve.
So is your time valuable or not? Is your time is too valuable to waste on people who don't put in a genuine effort, or is it not valuable enough that posting an unhelpful answer isn't a waste of effort? That's my point, it's easier for you to just ignore the bad poster. And yes, a deliberately unhelpful answer is rude.
Have you ever hung out on a comp.lang.X site being helpful to people? I acknowledge your description of the POV of the questioner, but from the POV of someone who spends significant time helping out people who have (ahem) "real" problems, see if you're still so polite after your 200th "please solve my homework problem!" post.
To whatever riposte you might be planning, I would point out that I'm not talking about theory, either. Yeah, sure, everyone deserves care and love and ponies. I'm talking about, in practice, would you still be so caring and loving and pony-dispensing after hundreds of these things? If so, you're better than most. (Too much better for me to believe in, in fact.)
There's just so many times you can direct people to http://www.catb.org/~esr/faqs/smart-questions.html without losing your sanity. I spent several years trying to help people on a specific topic and eventually gave up because the stream of people who haven't put their brain to use before asking was reaching 90%. And that's on a niche topic, I don't even want to know how much more noise common topics get, and I have great respect for people like Heathfield for not giving up.
This problem appears in the Deitel and Deitel book "C++ How to Program" as well as in their Java book.
It's a great exercise that challenges CS students every year and does a very good job at teaching nested loops.
Later in the same set of exercises is the four triangles problem that ties increment and decrement operators to the use of nested loops. It's one of my personal favorites.
CS students who legitimately complete these exercises always do well with chapter 4 (Arrays, Simpletron), chapter 5 (pointers) and chapter 6 (structs and classes) and come away with insight and a sense of confidence that echoes for a long time.
It is literally one of those defining problems that separates those who are serious from those who are not.
The responder at comp.lang.c knew that. Kudos to him.
Exactly. I'm surprised to see many people here saying that the responder was unhelpful or rude. I think that the answer was not only fascinating but also responsible, pedagogical and, in a way, even compassionate.
A little of topic. I may need to dive back in C++. I knew the language pretty well (circa 1994), the STL was brand new and namespaces were experimental. I don't know what happened after that. Can anyone recommend any online resources to fill the gap? Thanks
You could have a look at the "Frequently Questioned Answers" (http://yosefk.com/c++fqa/). But that will probably produce more frustration with C++ than it helps..
One of the things you want to hit up right away after you get reacquainted is the boost library: http://www.boost.org/
If you use it well, it does a lot of heavy lifting, adds a lot of safety and expressiveness (boost::bind is just pure magic) that just wasn't there before, and a lot of the boost libraries are going into the standard - and are already implemented in the TR1 namespace.
What percent of HN users could figure this out without using references? I've been .NET programming for 5+ years and couldn't figure it out giving it a few hours to try.
Not really. Almost any numbers would do, since z is an int and integer division "a/b" in C means not exactly a/b, but its floor. For instance, "2/2/2".
57 comments
[ 3.2 ms ] story [ 114 ms ] thread> times, but I can't get it to work properly. I live in Japan and I take
> an online C++ course. The instructor lives in the US so whenever I am
> awake, he's asleep. Therefore, I cannot contact him directly when I
> need help. I have to get this program up and running ASAP. I tried
> searching everywhere for help, but there's none except for this group.
> My textbook isn't much of a help either. I WILL GREATLY APPRECIATE THE
> HELP I WILL GET!
This is what he said. And trust me I have seen people struggle with writing a function to add two numbers after taking a college course of 1 year in C. I don't think he didn't try at all.
The only "good" answers to such a request are a: here's the code and b: lesson one, here's how a for-loop works. Since his textbook doesn't help, option b doesn't seem viable.
Rude, lazy, it's a fine line, I suppose. Being lazy in front of strangers you're asking for help is perhaps not rude, but doesn't exactly scream for a super-constructive response.
http://news.ycombinator.com/item?id=1339884
:)
See also his annotated version of the official C standard, which at the time it was published contained not only Schildt's comments but also the complete text of the standard itself. The standard was available from the international standards bodies for a small fortune, yet the annotated version was available in bookshops for a modest fraction of the cost. It was widely speculated that the difference in price reflected the value added by Schildt's comments.
Programming takes time as well as understanding and effort.
[I always finished my assignments early. I learned not to mention this, because I was beset with demands of the "help me with this" nature, where the people needing help really just needed to do the work.
Of course, towards the end of the semester, with a week left and three projects remaining and a /really/ loaded mainframe -- a Univac 1108 in my case -- with turnarond time measured in hours, well, this was beyond pathetic or poignant, it was simple stupidity for them to expect that they could do that much work in so little time.]
The problem is, these groups get dozens of posts like that every week. Most of them are probably just lies, as you can tell because the posters disappear when asked politely to show what they have come up with so far.
There are people on those groups who volunteer their time to help others, but there is only so much time to go around. There are plenty of people who have made a real effort and, per the FAQs, post the results they have so far to demonstrate this. It is entirely fair that the volunteers should want to prioritise helping these people instead.
Think about how they got so far while remaining so helpless. If someone convinces you that they're working really hard and trying to be independent, yet their helplessness proves they have a long history of being dependent and getting credit for other people's work, then odds are they're just good actors. Or they're fooling themselves. Either way, don't waste your time.
I know that's harsh on people who actually are trying to turn themselves around, but they should expect to weather some initial skepticism after coasting for so long.
C++ != trivially obfuscated C.
http://www.wolframalpha.com/input/?i=x+%2B+y+%3E+3+%26%26+x+...
The fun part is that you can now play with the various settings. Try increasing the height and width and scaling the equations appropriately. Replace x by 2 * x or x * x for more interesting shapes. You can bound the picture by any equations you like. Example: http://ideone.com/53Qh3
I eventually quit the list because it was too much of a time suck, but it's well worth a half a day swimming through the archives. Heathfield's posts are almost always worth a look.
Piqued. Lessee, http://en.wikipedia.org/wiki/Alfred_Edward_Housman ... colleagues were unnerved by his scathing critical attacks ... they "were often savage in the extreme."
Also, for other reasons: A fellow don described him as being "descended from a long line of maiden aunts".
Apparently, after he died, they found notebooks in his office that he had filled with long elaborate, witty, hurtful insults -- aimed at nobody in particular. When he wrote a review, he would tweak the pre-fab insults as needed and voila. A sick, twisted person, but fascinating. (If you're really curious, check out Tom Stoppard's The Invention of Love.)
It's curious that the A.E.H. vinegar does not get wider circulation. My copy of Matthew Parris' Scorn only features a couple of harmless barbs (one the 'malt/Milton' line). There are some scraps over at http://en.wikiquote.org/wiki/Alfred_Edward_Housman , and here http://www.lrb.co.uk/v29/n13/frank-kermode/nothing-for-ever-...
(Also, a passing appreciation by Chesterton, a guide I trust, here http://wikilivres.info/wiki/Autobiography_%28Chesterton%29/C...)
The name was left blank in the original, but was intended to be filled in and used when a suitable subject should turn up.
And you hard-coded it in a list. I consider this cheating.
print '\n'.join([" "abs(4-i) + ""(9-abs(8-i2)) for i in range(9)])
print '\n'.join([" "abs(int(4.5-i)) + ""(10-abs(9-i2)) for i in range(10)])
I remember being that kid. Well, not quite so bad that I literally wanted someone to write code for me, but I'm sure someone thought my poorly worded questions were asking people to write code for me. How many kids are we scaring away because we're being assholes to them?
The answer wasn't rude, it was just unhelpful.
For those not familiar with the culture on comp.lang.c and the various related C and C++ groups, it is very simple: people will generally be helpful in dealing with homework questions as long as the asker has made a genuine effort.
On the other hand, anyone who just reposts homework verbatim with no effort whatsoever to solve the problem first is likely to find themselves given a very clever answer that is technically correct but clearly completely implausible for a beginner, thus making it very obvious to the teacher that the person is cheating on their homework. I recall a similar example where someone asked how to work out factorials in C++, and was presented with a highly efficient answer... because it used template metaprogramming and generated that answer at compile time.
This was certainly clear in the related FAQs last time I checked, so anyone who asks a homework question without making any effort to solve it themselves is not only lazy but also incapable of following basic netiquette. I doubt you'd find many regular posters on those groups who had much sympathy, even though some of those same posters give up a great deal of time to help those who are making a genuine effort to improve.
Being deliberately unhelpful is rude.
To whatever riposte you might be planning, I would point out that I'm not talking about theory, either. Yeah, sure, everyone deserves care and love and ponies. I'm talking about, in practice, would you still be so caring and loving and pony-dispensing after hundreds of these things? If so, you're better than most. (Too much better for me to believe in, in fact.)
It's a great exercise that challenges CS students every year and does a very good job at teaching nested loops.
Later in the same set of exercises is the four triangles problem that ties increment and decrement operators to the use of nested loops. It's one of my personal favorites.
CS students who legitimately complete these exercises always do well with chapter 4 (Arrays, Simpletron), chapter 5 (pointers) and chapter 6 (structs and classes) and come away with insight and a sense of confidence that echoes for a long time.
It is literally one of those defining problems that separates those who are serious from those who are not.
The responder at comp.lang.c knew that. Kudos to him.
It's up there with FizzBuzz; anyone who can't do it simply isn't up to being a programmer.
If you use it well, it does a lot of heavy lifting, adds a lot of safety and expressiveness (boost::bind is just pure magic) that just wasn't there before, and a lot of the boost libraries are going into the standard - and are already implemented in the TR1 namespace.