Mini project suggestions

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Michael Strorm

    Mini project suggestions

    Hi,
    I'm in the middle of "teaching" myself C++. Having skimmed some of
    the "Teach Yourself C++ in 21 Days" book, I got a feel for the
    language, at least. Then I bought "The C++ Programming Language"
    because it was on offer, and I'd have ended up buying it at some stage
    anyway.
    Skimmed some of that, but there's too much detail (for now) and I
    know I won't take it in if I don't get some practice in actually
    *writing* programs in C++. I'm getting the very strong impression that
    (much more so than in C) learning to write "proper" C++ programs can't
    just be done through short question exercises.
    To get to the point, I'm wanting to start a moderately-sized
    project that would take a week (working full time on it, which I won't
    be :-) ) to do reasonably, cover a decent subset of the language, be
    interesting to do, and workable under (say) gcc on Linux (without too
    much nonstandard code). It'd also be interesting to get some practice
    in software design in there.
    So, I'd be interested to get some suggestions, because I feel like
    doing *something* with all this knowledge (and more importantly,
    finding out what I don't know well). Thanks!

    Michael Strorm
    mstrorm@yahoo.c o.uk
  • Mike Wahler

    #2
    Re: Mini project suggestions

    "Michael Strorm" <mstrorm@yahoo. co.uk> wrote in message
    news:5e705cb0.0 310011430.cbc75 7d@posting.goog le.com...[color=blue]
    > Hi,
    > I'm in the middle of "teaching" myself C++. Having skimmed some of
    > the "Teach Yourself C++ in 21 Days" book, I got a feel for the
    > language, at least. Then I bought "The C++ Programming Language"
    > because it was on offer, and I'd have ended up buying it at some stage
    > anyway.[/color]

    Yes, as your knowledge grows, I think you'll find this
    book quite valuable. Make sure it's the 3rd or 'special'
    edition though. Previous additions are essentially
    obsolete.

    Another very good book, especially for those who have
    previous experience with other languages, is Koenig
    & Moo's "Accelerate d C++". www.acceleratedcpp.com

    [color=blue]
    > Skimmed some of that, but there's too much detail (for now)[/color]

    Yes, it's info:page ratio is quite dense. I also needed
    to supplement it with other 'lighter' material when learning
    C++.

    [color=blue]
    >and I
    > know I won't take it in if I don't get some practice in actually
    > *writing* programs in C++.[/color]

    Yes, good that you realize that. Learn by doing.
    [color=blue]
    > I'm getting the very strong impression that
    > (much more so than in C) learning to write "proper" C++ programs can't
    > just be done through short question exercises.[/color]

    Short exercises are good start, especially to prove to
    yourself you understand a particular concept(s).
    [color=blue]
    > To get to the point, I'm wanting to start a moderately-sized
    > project that would take a week (working full time on it, which I won't
    > be :-) )[/color]

    Don't be too optimistic with your time estimates. Don't
    worry if something takes far longer than you expect. Even
    for professionals, one of the most difficult tasks is making
    (and meeting!) time estimates. Only practice and experience
    will help with this. And having built up a 'code base' of
    useful functions helps a lot toward 'speed of development'.
    The concept of code reuse. When writing a function, keep
    in mind "can this be 'generalized' to be useful in other
    contexts?" This won't always be the case, but often is,
    given a bit of forethought before deciding e.g. what
    the parameters should be, if any. E.g. if you write a
    function to output the contents of an object, you could
    'hard code' it to use 'cout', or you could defined a
    parameter of type std::ostream&, in which case the
    function could operate upon a file (std::ofstream) as
    well as on 'cout'.

    [color=blue]
    >to do reasonably, cover a decent subset of the language, be
    > interesting to do,[/color]

    Only you can know what you find 'interesting'. E.g. many
    are eager to write 'cool graphics games' etc. (which btw
    is a far too advanced topic when learning the language,
    especially since you'll need platform-specific 'extensions'
    and special purpose libraries). E.g. Games don't interest
    me at all, graphical or otherwise -- I have more fun with
    databases and text manipulation. But that's just me.
    [color=blue]
    > and workable under (say) gcc on Linux (without too
    > much nonstandard code).[/color]

    When learning, you should stay away from all nonstandard
    (e.g. platform-specific) constructs. Learn the language
    first. Then it matters not what your platform is (C++
    is a 'platform-independent' language.)
    [color=blue]
    >It'd also be interesting to get some practice
    > in software design in there.[/color]

    Design isn't really topical here, but we can help you
    organize your code to best take advantage of the
    language's power, prevent common errors etc. Software
    design itself would be better discussed in groups such
    as comp.programmin g and/or comp.algorithms , etc.
    Often specific algorithm categories have their own
    groups, e.g. cryptography.
    [color=blue]
    > So, I'd be interested to get some suggestions, because I feel like
    > doing *something* with all this knowledge[/color]

    Yes, it is very satisfying to actually build something
    useful and/or interesting with your new found skills.
    [color=blue]
    >(and more importantly,
    > finding out what I don't know well). Thanks![/color]

    The first 'nontrivial' thing I did with C++ (after
    many small exercises) was a small 'contacts' database with
    e.g. names, addresses, phone numbers, etc. That's because
    I'm interested in databases, and that's an area where I
    already have skill with other languages, and have the most
    experience.

    Hint: Use the standard library. It is *very* powerful,
    and lets you start applying 'code reuse' immediately.
    Spend some time learning about containers, iterators,
    and the algorithms declared by header <algorithm>
    which uses them. *Very* powerful and flexible things can
    be done with them. Which reminds me: A very good book to have is
    Josuttis' "The C++ Standard Library" www.josuttis.com/libbook


    HTH,
    -Mike


    Comment

    • Gene Wirchenko

      #3
      Re: Mini project suggestions

      On 1 Oct 2003 15:30:14 -0700, mstrorm@yahoo.c o.uk (Michael Strorm)
      wrote:

      [snip]
      [color=blue]
      > So, I'd be interested to get some suggestions, because I feel like
      >doing *something* with all this knowledge (and more importantly,
      >finding out what I don't know well). Thanks![/color]

      You could write a small text adventure. It need not do much, but
      just to bring it up to framework level, you are going to have to do a
      lot of work with I/O and string manipulation. There are plenty of
      opportunities to define classes or use STL. After you have the
      framework, you can bolt on a lot of other stuff that fits your fancy.

      Sincerely,

      Gene Wirchenko

      Comment

      • Jonathan Mcdougall

        #4
        Re: Mini project suggestions

        > [snip][color=blue]
        >[color=green]
        > > So, I'd be interested to get some suggestions, because I feel like
        > >doing *something* with all this knowledge (and more importantly,
        > >finding out what I don't know well). Thanks![/color]
        >
        > You could write a small text adventure. It need not do much, but
        > just to bring it up to framework level, you are going to have to do a
        > lot of work with I/O and string manipulation. There are plenty of
        > opportunities to define classes or use STL. After you have the
        > framework, you can bolt on a lot of other stuff that fits your fancy.[/color]

        But PLEASE, before you ask, there is no way in C++ to clear the screen or
        change the colour of the output :)


        Jonathan


        Comment

        • Richard Heathfield

          #5
          Re: Mini project suggestions

          [Just clearing up a tiny nit]

          Jonathan Mcdougall wrote:
          [color=blue]
          > But PLEASE, before you ask, there is no way in C++ to clear the screen or
          > change the colour of the output :)[/color]

          .....unless you are prepared to use extensions to the language (such as
          libraries - ncurses, SDL, OpenGL, whatever) which may not be available on
          all your target platforms, and discussion of which is off-topic in both
          these newsgroups but not in platform-specific newsgroups.

          --
          Richard Heathfield : binary@eton.pow ernet.co.uk
          "Usenet is a strange place." - Dennis M Ritchie, 29 July 1999.
          C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
          K&R answers, C books, etc: http://users.powernet.co.uk/eton

          Comment

          • Gene Wirchenko

            #6
            Re: Mini project suggestions

            On Wed, 1 Oct 2003 23:19:44 -0400, "Jonathan Mcdougall"
            <jonathanmcdoug all@DELyahoo.ca > wrote:

            [snip]
            [color=blue]
            >But PLEASE, before you ask, there is no way in C++ to clear the screen or
            >change the colour of the output :)[/color]

            <EG>

            The best response I ever saw to the clear screen question was
            "Which screen?"

            Sincerely,

            Gene Wirchenko

            Comment

            • Default User

              #7
              Re: Mini project suggestions

              Gene Wirchenko wrote:
              [color=blue]
              > You could write a small text adventure. It need not do much, but
              > just to bring it up to framework level, you are going to have to do a
              > lot of work with I/O and string manipulation. There are plenty of
              > opportunities to define classes or use STL. After you have the
              > framework, you can bolt on a lot of other stuff that fits your fancy.[/color]



              That's a pretty good project, if you like TA games. It was my learning
              program for C many moons ago. It's probably even better for C++, because
              the OO approach is natural for a game like that.




              Brian Rodenborn

              Comment

              • Mike Wahler

                #8
                Re: Mini project suggestions


                "Gene Wirchenko" <gwirchenkoEXCE PT@CAPITALSwenc omine.com> wrote in message
                news:2tionv0idf 6ifsuudl34q3uur pe84et7ol@4ax.c om...[color=blue]
                > On Wed, 1 Oct 2003 23:19:44 -0400, "Jonathan Mcdougall"
                > <jonathanmcdoug all@DELyahoo.ca > wrote:
                >
                > [snip]
                >[color=green]
                > >But PLEASE, before you ask, there is no way in C++ to clear the screen or
                > >change the colour of the output :)[/color]
                >
                > <EG>
                >
                > The best response I ever saw to the clear screen question was
                > "Which screen?"[/color]

                I like "use glass cleaner". :-)

                -Mike


                Comment

                • WW

                  #9
                  Re: Mini project suggestions

                  Mike Wahler wrote:[color=blue]
                  > "Gene Wirchenko" <gwirchenkoEXCE PT@CAPITALSwenc omine.com> wrote in
                  > message news:2tionv0idf 6ifsuudl34q3uur pe84et7ol@4ax.c om...[color=green]
                  >> On Wed, 1 Oct 2003 23:19:44 -0400, "Jonathan Mcdougall"
                  >> <jonathanmcdoug all@DELyahoo.ca > wrote:
                  >>
                  >> [snip]
                  >>[color=darkred]
                  >>> But PLEASE, before you ask, there is no way in C++ to clear the
                  >>> screen or change the colour of the output :)[/color]
                  >>
                  >> <EG>
                  >>
                  >> The best response I ever saw to the clear screen question was
                  >> "Which screen?"[/color]
                  >
                  > I like "use glass cleaner". :-)[/color]

                  Or if you need fast code and aggresive optimization there is the
                  hammer-fast-forward followed by a circle-to-remove-remainder (aka modulus)
                  method. And it is a time tested pattern used by burlgars and fireman all
                  around the world. ;-)

                  --
                  WW aka Attila


                  Comment

                  • Ron Natalie

                    #10
                    Re: Mini project suggestions

                    >> >> The best response I ever saw to the clear screen question was[color=blue][color=green][color=darkred]
                    > >> "Which screen?"[/color]
                    > >
                    > > I like "use glass cleaner". :-)[/color]
                    >[/color]
                    I just tell them to turn the computer upside down and shake.


                    Comment

                    • WW

                      #11
                      Re: Mini project suggestions

                      Ron Natalie wrote:[color=blue][color=green][color=darkred]
                      >>>>> The best response I ever saw to the clear screen question
                      >>>>> was "Which screen?"
                      >>>
                      >>> I like "use glass cleaner". :-)[/color]
                      >>[/color]
                      > I just tell them to turn the computer upside down and shake.[/color]

                      That's a good one. :-)

                      --
                      WW aka Attila


                      Comment

                      • Gene Wirchenko

                        #12
                        Re: Mini project suggestions

                        On Thu, 2 Oct 2003 16:35:14 GMT, Default User <first.last@com pany.com>
                        wrote:
                        [color=blue]
                        >Gene Wirchenko wrote:
                        >[color=green]
                        >> You could write a small text adventure. It need not do much, but
                        >> just to bring it up to framework level, you are going to have to do a
                        >> lot of work with I/O and string manipulation. There are plenty of
                        >> opportunities to define classes or use STL. After you have the
                        >> framework, you can bolt on a lot of other stuff that fits your fancy.[/color][/color]
                        [color=blue]
                        >That's a pretty good project, if you like TA games. It was my learning
                        >program for C many moons ago. It's probably even better for C++, because
                        >the OO approach is natural for a game like that.[/color]

                        Quite. There are OO languages for writing these games. See
                        rec.art.int-fiction.

                        Sincerely,

                        Gene Wirchenko

                        Comment

                        • jeffc

                          #13
                          Re: Mini project suggestions


                          "Michael Strorm" <mstrorm@yahoo. co.uk> wrote in message
                          news:5e705cb0.0 310011430.cbc75 7d@posting.goog le.com...[color=blue]
                          > To get to the point, I'm wanting to start a moderately-sized
                          > project that would take a week (working full time on it, which I won't
                          > be :-) ) to do reasonably, cover a decent subset of the language, be
                          > interesting to do, and workable under (say) gcc on Linux (without too
                          > much nonstandard code). It'd also be interesting to get some practice
                          > in software design in there.[/color]

                          I thought writing a Blackjack (21) simulator was a great exercise. It was a
                          little more than that for me, because I wanted to understand more about
                          betting strategies. (It's a fascinating game, mathematically. ) You don't
                          have to take it very far (you can bet the same each time, and never change
                          the rules), but you can quickly understand it (the "problem domain" is easy
                          to understand, and fun.) The concepts are quite simple - not to be mistaken
                          for easy! It really makes you think about overall program design. You will
                          have to think about performance and efficiency, because to get statistically
                          valid feedback you will have to run millions of hands. You have to think
                          about randomness. The difference between generating any old random number,
                          and generating a random shuffle with a real card deck is interesting. You
                          will have to think about data structures. And of course I/O.


                          Comment

                          • jeffc

                            #14
                            Re: Mini project suggestions


                            "jeffc" <nobody@nowhere .com> wrote in message
                            news:3f7c7845_1 @news1.prserv.n et...[color=blue]
                            >
                            >
                            > I thought writing a Blackjack (21) simulator was a great exercise.[/color]

                            You didn't mention OO, but in addition I found this to be an outstanding
                            exercise in OO design. It's not complex, but at the same time makes you
                            think quite about the relationships between the objects involved. Obviously
                            you need a deck of cards, but who has it? If the dealer has it, then how
                            much access to it does he have? Do you need a card table? Do you need a
                            casino? Who gets your chips when you lose, the dealer or the casino? When
                            you are dealt a hand, where does the hand go? (In a real casino, the hand
                            is "yours", but you can't touch the cards - only the dealer can. At the
                            same time, only you can make decisions about changing your hand, and the
                            dealer can't. So who "owns" or "has" the hand - you or the dealer?) Do you
                            even need a deck of cards? Can't you just deal a "card" as a random number
                            "out of thin air", from an "infinite deck"? (Before deciding, note that the
                            odds of getting a blackjack are higher in real life when using 1 deck of
                            cards than with 2!!)


                            Comment

                            • Default User

                              #15
                              Re: Mini project suggestions

                              Gene Wirchenko wrote:
                              [color=blue]
                              > Quite. There are OO languages for writing these games. See
                              > rec.art.int-fiction.[/color]


                              That doesn't provide any instruction in C++ programming. There are two
                              different, related but distinct ideas:


                              1. If you want to learn C++, writing a TA game is a good exercise.

                              2. If you want to write TA games, TADS, Inform or another dedicated
                              language would be a better choice than C++.




                              Brian Rodenborn

                              Comment

                              Working...