|
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 09 2012 00:15 Inori wrote:Show nested quote +On February 08 2012 07:49 mmp wrote:On February 07 2012 06:21 esotericc wrote: Thanks for the advice, I think the one language every few months plan seems like the best course.
I think this is a poor course. Going into a degree program, you will be better served by depth of knowledge in a useful language, not shallow familiarity in irrelevant languages (you can adopt them later once you appreciate how irrelevant they are). Python and C are both practical and relevant, more than any other languages I could recommend. Practical knowledge of Python will let you code up homework, class projects, and personal experiments quickly and with little headache. It's a decent scripting language to know, and is popular in software industry. Deep knowledge in C/C++ will make learning other languages a walk in the park, and is core to your education in computers. You'll do a lot better in compilers, computer languages, operating systems, distributed systems, parallel programming, and other classes that focus on low-level details if you start with an understanding of C. When I wrote the suggestions, I assumed esotericc had extensive knowledge in programming since he said he freelancer for a few years. 2 months is more than enough when all you need to learn is syntax, idioms and distinctive features. esotericc, since you actually don't have enough experience, I suggest ignoring my previous response and follow mmp post. No beef.
|
On February 10 2012 07:26 Frigo wrote:Show nested quote +On February 10 2012 06:47 Kasha_Not_Kesha wrote: Programming books are very rarely worth the money. If you're trying to teach yourself how to program in a specific language, it's usually easier and cheaper (and more beneficial in the long run) to look up tutorials online. That's my opinion anyway =P Read Clean Code: A Handbook of Agile Software Craftsmanship, I doubt you will find that in tutorials.
I'll look into it, thanks for the suggestion! I suppose I should have clarified that books explaining how to use a specific language (Like C#, which the guy I was responding to was looking for) are typically a waste of money. Conceptual books like the one you're talking about, or my Linear Data Structures book, can be uniquely helpful. =P
|
On February 10 2012 07:26 Frigo wrote:Show nested quote +On February 10 2012 06:47 Kasha_Not_Kesha wrote: Programming books are very rarely worth the money. If you're trying to teach yourself how to program in a specific language, it's usually easier and cheaper (and more beneficial in the long run) to look up tutorials online. That's my opinion anyway =P Read Clean Code: A Handbook of Agile Software Craftsmanship, I doubt you will find that in tutorials.
Thanks a lot. I'll look into it :-)
|
|
On February 10 2012 16:34 silentsaint wrote:Show nested quote +On February 10 2012 07:26 Frigo wrote:On February 10 2012 06:47 Kasha_Not_Kesha wrote: Programming books are very rarely worth the money. If you're trying to teach yourself how to program in a specific language, it's usually easier and cheaper (and more beneficial in the long run) to look up tutorials online. That's my opinion anyway =P Read Clean Code: A Handbook of Agile Software Craftsmanship, I doubt you will find that in tutorials. Thanks a lot. I'll look into it :-) Totally need to read that book.
I got it as advice from my brother to read that and it really is beneficial to you :D Also the Algorithm and Data structures mentioned in OP (or in another language like mine in Dutch) is also very good and imo a must read.
|
C Programming Hey guys, I'm trying to find an explaination on pointers etc. I keep getting errors like this 27 [Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast
Basically what I'm trying to do is the following: Take a few words and associate them with a number. Then compare the words and print the highest word (by its number)
Right now since it's homework, I'm only allowed to use 1D array and not 2D. I'm struggling with understanding how when a user inputs a word, followed by a number IE: scanf("%s %d", WORD, number); It keeps saving only the last word and number that was entered. When I use my if statement if (word >mostword) {mostword=word; strcpy(lrgstword, word);
I'm not exactly understanding how this stuff works, and after researching for a few hours I've decided that most of it points toward C++ and using other commands that I'm not allowed to use.
Obviously the assignment is much more complicated than this, but this is kind of what I don't exactly understand.
Edit: It would be like entering the following: Corolla 5000 Mercedes 50000 Corvette 40000
Then it saves those values to each word (car) and compares them. I cannot get it to save to a 1D array :/
|
On February 11 2012 03:55 ranshaked wrote:C Programming Hey guys, I'm trying to find an explaination on pointers etc. I keep getting errors like this Show nested quote +27 [Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast Basically what I'm trying to do is the following: Take a few words and associate them with a number. Then compare the words and print the highest word (by its number) Right now since it's homework, I'm only allowed to use 1D array and not 2D. I'm struggling with understanding how when a user inputs a word, followed by a number IE: scanf("%s %d", WORD, number); It keeps saving only the last word and number that was entered. When I use my if statement if (word >mostword) {mostword=word; strcpy(lrgstword, word); I'm not exactly understanding how this stuff works, and after researching for a few hours I've decided that most of it points toward C++ and using other commands that I'm not allowed to use. Obviously the assignment is much more complicated than this, but this is kind of what I don't exactly understand. Edit: It would be like entering the following: Corolla 5000 Mercedes 50000 Corvette 40000 Then it saves those values to each word (car) and compares them. I cannot get it to save to a 1D array :/
This would be practically impossible in C the way your teacher wants it. I think your confusion is here:
There are two "types" of strings in C and C++. There are c strings, which are declared the following way"
- char[] kitten = "You suck"; - char* kitten = (char*)malloc(sizeof(char)*50); kitten = "You Suck";
Then there are C++ strings, which are declared like this:
- string kitten = "You Suck"; - string kitten2("You Suck");
What's the difference? Non perfectly speaking, c strings are basically character arrays. They can be declared without including any sort of header file. The nice people are Bell Labs wrote a file with a bunch of functions that do common manipulations on c strings, such as the lovely strcpy() that you're using. That is in <string.h> or <cstring> if you're in c++. C strings are not objects, they are basically raw character data. C++ strings, on the other hand, are objects from a class called the string class. That's why you MUST include <string> whenever you declare them.
So now... if we want to store multiple C strings... then we must have an array of c strings. However, c strings are in themselves arrays, which means you're "sortof" using a double array. I'll write some example code for you to see what I mean.
+ Show Spoiler + #include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) { char* stringCollection[5]; // An array of 5 character pointers.... for ( int i = 0; i < 5; i++ ) { stringCollection[i] = (char*)malloc(sizeof(char)*20); // we're allocating memory to store stuff in our charater array. // ghetto if statement just to make example clear, do not code like this.... if ( i == 0 ) stringCollection[i] = "Sup dawg how you doin??"; else if ( i == 1 ) stringCollection[i] = "Hello this is streing 2!!!"; else if ( i == 2 ) stringCollection[i] = "Yoyoyo i got the beats just call me dr. dre"; else if ( i == 3 ) stringCollection[i] = "C programming is AWESOME!"; else if ( i == 4 ) stringCollection[i] = "My Last String!!!"; } // now let's print all this out!!! for ( int i = 0; i < 5; i++ ) printf("String number %i: %s \n",i+1,stringCollection[i]); // Ironically, we can access specific element ( i.e characters ) of each string by using double array notation!! // That's because it is a double array!!! char myChar = stringCollection[0][5]; // the fifth element of the 0th string in the collection... in other words the "a" in "sup dawg..." char myChar2 = stringCollection[0][6]; // the sixth element of the 0th string in the collection... printf("myChar is: %c \n",myChar); printf("myChar2 is: %c \n",myChar2); system("PAUSE"); return 0; }
It would be almost impossible to store c string without using a double array. I can't think of anything. If you're using strings, however, it's TECHNICALLY an array of objects and not a double array.
One way to do so is this: - string myString[3] = {"Audi", "BMW", "Ford"};
That should give you a good start! I think your problem with strcpy(), btw, is that you're passing an integer for the first argument. You must pass a char* as the first argument. Ask yourself of what type "lrgstword" is. Hope this gives you some insight. Let me know if you have more questions.
*edit* For those of you who think you're total ballers and take my code literally and point out that I go past my declared buffer length... I know this. It's just an example, that's not code for the pentagon.
|
On February 11 2012 05:03 Abductedonut wrote:Show nested quote +On February 11 2012 03:55 ranshaked wrote:C Programming Hey guys, I'm trying to find an explaination on pointers etc. I keep getting errors like this 27 [Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast Basically what I'm trying to do is the following: Take a few words and associate them with a number. Then compare the words and print the highest word (by its number) Right now since it's homework, I'm only allowed to use 1D array and not 2D. I'm struggling with understanding how when a user inputs a word, followed by a number IE: scanf("%s %d", WORD, number); It keeps saving only the last word and number that was entered. When I use my if statement if (word >mostword) {mostword=word; strcpy(lrgstword, word); I'm not exactly understanding how this stuff works, and after researching for a few hours I've decided that most of it points toward C++ and using other commands that I'm not allowed to use. Obviously the assignment is much more complicated than this, but this is kind of what I don't exactly understand. Edit: It would be like entering the following: Corolla 5000 Mercedes 50000 Corvette 40000 Then it saves those values to each word (car) and compares them. I cannot get it to save to a 1D array :/ This would be practically impossible in C the way your teacher wants it. I think your confusion is here: There are two "types" of strings in C and C++. There are c strings, which are declared the following way" - char[] kitten = "You suck"; - char* kitten = (char*)malloc(sizeof(char)*50); kitten = "You Suck"; Then there are C++ strings, which are declared like this: - string kitten = "You Suck"; - string kitten2("You Suck"); What's the difference? Non perfectly speaking, c strings are basically character arrays. They can be declared without including any sort of header file. The nice people are Bell Labs wrote a file with a bunch of functions that do common manipulations on c strings, such as the lovely strcpy() that you're using. That is in <string.h> or <cstring> if you're in c++. C strings are not objects, they are basically raw character data. C++ strings, on the other hand, are objects from a class called the string class. That's why you MUST include <string> whenever you declare them. So now... if we want to store multiple C strings... then we must have an array of c strings. However, c strings are in themselves arrays, which means you're "sortof" using a double array. I'll write some example code for you to see what I mean. + Show Spoiler + #include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[] { char* stringCollection[5]; // An array of 5 character pointers.... for ( int i = 0; i < 5; i++ ) { stringCollection[i] = (char*)malloc(sizeof(char)*20); // we're allocating memory to store stuff in our charater array. // ghetto if statement just to make example clear, do not code like this.... if ( i == 0 ) stringCollection[i] = "Sup dawg how you doin??"; else if ( i == 1 ) stringCollection[i] = "Hello this is streing 2!!!"; else if ( i == 2 ) stringCollection[i] = "Yoyoyo i got the beats just call me dr. dre"; else if ( i == 3 ) stringCollection[i] = "C programming is AWESOME!"; else if ( i == 4 ) stringCollection[i] = "My Last String!!!"; } // now let's print all this out!!! for ( int i = 0; i < 5; i++ ) printf("String number %i: %s \n",i+1,stringCollection[i] ; // Ironically, we can access specific element ( i.e characters ) of each string by using double array notation!! // That's because it is a double array!!! char myChar = stringCollection[0][5]; // the fifth element of the 0th string in the collection... in other words the "a" in "sup dawg..." char myChar2 = stringCollection[0][6]; // the sixth element of the 0th string in the collection... printf("myChar is: %c \n",myChar); printf("myChar2 is: %c \n",myChar2); system("PAUSE"); return 0; }
It would be almost impossible to store c string without using a double array. I can't think of anything. If you're using strings, however, it's TECHNICALLY an array of objects and not a double array. One way to do so is this: - string myString[3] = {"Audi", "BMW", "Ford"}; That should give you a good start! I think your problem with strcpy(), btw, is that you're passing an integer for the first argument. You must pass a char* as the first argument. Ask yourself of what type "lrgstword" is. Hope this gives you some insight. Let me know if you have more questions. Thank you very much, I'll continue to read this. I knew that you can't force an integer to a string, but that's how he wanted it? I'm not quite sure. The actual homework question is pretty basic, but the way it is written and the example he gave doesn't even work. We've never used char * in any examples, which is partially why I'm confused. + Show Spoiler +MAXEV=0; char SNAME[20] for (i=0;i<n;i++  { scanf("%s", &SNAME)//STATENAME// scanf("d", &STATELECTORALVOTES); //stateelectoralvotes// if STATEELECTORALVOTES > MAXEV {MAXEV=STATELECTORALVOTES strcpy(maxsname, sname)} printf("sname")
That was a "piece" of the code that he wrote down as we went over it in class. It doesn't work at all
|
Hyrule18977 Posts
that's because it's pseudocode.
Also, you can convert strings/integers with atoi and itoa.
|
On February 11 2012 05:32 tofucake wrote: that's because it's pseudocode.
Also, you can convert strings/integers with atoi and itoa. We aren't allowed to use that stuff. This is why I'm so confused.
|
Hyrule18977 Posts
What, you're not allowed to use pseudocode, or conversion functions?
|
On February 11 2012 05:08 ranshaked wrote:Show nested quote +On February 11 2012 05:03 Abductedonut wrote:On February 11 2012 03:55 ranshaked wrote:C Programming Hey guys, I'm trying to find an explaination on pointers etc. I keep getting errors like this 27 [Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast Basically what I'm trying to do is the following: Take a few words and associate them with a number. Then compare the words and print the highest word (by its number) Right now since it's homework, I'm only allowed to use 1D array and not 2D. I'm struggling with understanding how when a user inputs a word, followed by a number IE: scanf("%s %d", WORD, number); It keeps saving only the last word and number that was entered. When I use my if statement if (word >mostword) {mostword=word; strcpy(lrgstword, word); I'm not exactly understanding how this stuff works, and after researching for a few hours I've decided that most of it points toward C++ and using other commands that I'm not allowed to use. Obviously the assignment is much more complicated than this, but this is kind of what I don't exactly understand. Edit: It would be like entering the following: Corolla 5000 Mercedes 50000 Corvette 40000 Then it saves those values to each word (car) and compares them. I cannot get it to save to a 1D array :/ This would be practically impossible in C the way your teacher wants it. I think your confusion is here: There are two "types" of strings in C and C++. There are c strings, which are declared the following way" - char[] kitten = "You suck"; - char* kitten = (char*)malloc(sizeof(char)*50); kitten = "You Suck"; Then there are C++ strings, which are declared like this: - string kitten = "You Suck"; - string kitten2("You Suck"); What's the difference? Non perfectly speaking, c strings are basically character arrays. They can be declared without including any sort of header file. The nice people are Bell Labs wrote a file with a bunch of functions that do common manipulations on c strings, such as the lovely strcpy() that you're using. That is in <string.h> or <cstring> if you're in c++. C strings are not objects, they are basically raw character data. C++ strings, on the other hand, are objects from a class called the string class. That's why you MUST include <string> whenever you declare them. So now... if we want to store multiple C strings... then we must have an array of c strings. However, c strings are in themselves arrays, which means you're "sortof" using a double array. I'll write some example code for you to see what I mean. + Show Spoiler + #include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[] { char* stringCollection[5]; // An array of 5 character pointers.... for ( int i = 0; i < 5; i++ ) { stringCollection[i] = (char*)malloc(sizeof(char)*20); // we're allocating memory to store stuff in our charater array. // ghetto if statement just to make example clear, do not code like this.... if ( i == 0 ) stringCollection[i] = "Sup dawg how you doin??"; else if ( i == 1 ) stringCollection[i] = "Hello this is streing 2!!!"; else if ( i == 2 ) stringCollection[i] = "Yoyoyo i got the beats just call me dr. dre"; else if ( i == 3 ) stringCollection[i] = "C programming is AWESOME!"; else if ( i == 4 ) stringCollection[i] = "My Last String!!!"; } // now let's print all this out!!! for ( int i = 0; i < 5; i++ ) printf("String number %i: %s \n",i+1,stringCollection[i] ; // Ironically, we can access specific element ( i.e characters ) of each string by using double array notation!! // That's because it is a double array!!! char myChar = stringCollection[0][5]; // the fifth element of the 0th string in the collection... in other words the "a" in "sup dawg..." char myChar2 = stringCollection[0][6]; // the sixth element of the 0th string in the collection... printf("myChar is: %c \n",myChar); printf("myChar2 is: %c \n",myChar2); system("PAUSE"); return 0; }
It would be almost impossible to store c string without using a double array. I can't think of anything. If you're using strings, however, it's TECHNICALLY an array of objects and not a double array. One way to do so is this: - string myString[3] = {"Audi", "BMW", "Ford"}; That should give you a good start! I think your problem with strcpy(), btw, is that you're passing an integer for the first argument. You must pass a char* as the first argument. Ask yourself of what type "lrgstword" is. Hope this gives you some insight. Let me know if you have more questions. Thank you very much, I'll continue to read this. I knew that you can't force an integer to a string, but that's how he wanted it? I'm not quite sure. The actual homework question is pretty basic, but the way it is written and the example he gave doesn't even work. We've never used char * in any examples, which is partially why I'm confused. + Show Spoiler +MAXEV=0; char SNAME[20] for (i=0;i<n;i++  { scanf("%s", &SNAME)//STATENAME// scanf("d", &STATELECTORALVOTES); //stateelectoralvotes// if STATEELECTORALVOTES > MAXEV {MAXEV=STATELECTORALVOTES strcpy(maxsname, sname)} printf("sname") That was a "piece" of the code that he wrote down as we went over it in class. It doesn't work at all I'm not sure you understand the problem correctly. You want to find the name with the highest number and can ignore anything else. You don't need a 2d array. Just one that can hold the name with the high number.
Also with scanf your arguments are expected to be pointers so it should be scanf("%s, %d", &word, &number). The number received should be the comparison not the word.
if(number > greatestNumber){ greatestNumber = number; strcopy(lrgstword, word); }
word should be a char array. Just do char word[100] for simplicity.
If the number passed isn't greater than the greatest number than you can ignore the name and number completely.
|
FWIW, a 2D array and an array of char*s are not the same. While, especially in terms of syntax, they are very similar there are still some major differences in how they can be initialized and how they are represented 'under the covers'. See http://c-faq.com/aryptr/aryptr2.html for more information on why this is true. Therefore, a 1D array of pointers to char should satisfy the homework assignment completely.
Also, you should clarify to yourself whether the assignment requires that you keep a list of all previously entered words or only the word entered with the highest number. That makes a big difference in how you'll approach the problem.
Good luck!
|
What he's describing is basically keeping a "running maximum" for the input number, and copying the word you typed on the same line over into a variable whenever the number is larger than the previous one. Instead of storing each input and acting on them after, this is a sort of a filter that simply throws out anything smaller than the current largest number and saves the number and the associated word when it finds an input that is larger than it's current contents.
Personally my first instinct would have been to create a 2 dimensional array, feed each new line in and then process, but with the limitations you have, what he's describing there sounds like a pretty good way to go about it.
|
On February 11 2012 08:55 Bobbias wrote: What he's describing is basically keeping a "running maximum" for the input number, and copying the word you typed on the same line over into a variable whenever the number is larger than the previous one. Instead of storing each input and acting on them after, this is a sort of a filter that simply throws out anything smaller than the current largest number and saves the number and the associated word when it finds an input that is larger than it's current contents.
Personally my first instinct would have been to create a 2 dimensional array, feed each new line in and then process, but with the limitations you have, what he's describing there sounds like a pretty good way to go about it. Its not just a pretty good way to go about it, its pretty much the *best* way to go about it. It avoids double-iterating the list and avoids allocating a large chunk of memory to store all the strings that it will only look at once. Much better than the naive approach, especially for large input sets.
|
On February 10 2012 06:47 Kasha_Not_Kesha wrote: Programming books are very rarely worth the money. If you're trying to teach yourself how to program in a specific language, it's usually easier and cheaper (and more beneficial in the long run) to look up tutorials online. That's my opinion anyway =P
I disagree. I find reading a book tends to give you a more complete picture. Whenever I try to learn only through online tutorials I get the feeling I'm missing something, and I usually am.
|
On February 11 2012 09:57 tec27 wrote:Show nested quote +On February 11 2012 08:55 Bobbias wrote: What he's describing is basically keeping a "running maximum" for the input number, and copying the word you typed on the same line over into a variable whenever the number is larger than the previous one. Instead of storing each input and acting on them after, this is a sort of a filter that simply throws out anything smaller than the current largest number and saves the number and the associated word when it finds an input that is larger than it's current contents.
Personally my first instinct would have been to create a 2 dimensional array, feed each new line in and then process, but with the limitations you have, what he's describing there sounds like a pretty good way to go about it. Its not just a pretty good way to go about it, its pretty much the *best* way to go about it. It avoids double-iterating the list and avoids allocating a large chunk of memory to store all the strings that it will only look at once. Much better than the naive approach, especially for large input sets. Agree, I have to question the programming knowledge of anyone that though using a 2d array would be better and easier.
|
I have How to program Visual C# 2010 by Deitel. I think it's the best programming book i've ever had. Lots of exercises and you get access to their online extras. Really recommend it
|
speaking of books, can anybody recommend me a good intro java book, specifically with numerous exercises? the book we use for class does in fact has tons exercises, but no answers (wtf??). Some of them you can check for yourself, which i have no problems with, but other questions ask for a fragment code from a more complicated whole and such.
|
On February 12 2012 01:23 billy5000 wrote: speaking of books, can anybody recommend me a good intro java book, specifically with numerous exercises? the book we use for class does in fact has tons exercises, but no answers (wtf??). Some of them you can check for yourself, which i have no problems with, but other questions ask for a fragment code from a more complicated whole and such. If you are new to programming I can recommend Objects First with Java. It's the book that we're using for our introductory programming course. It is really pedagogic and it has tons of exercises in it (no answers though). I've never used another programming book so I don't have much to compare it to, but I think that the book is very good for a beginner and I am very satisfied with it.
|
|
|
|