A begginer simple problem !!!

Discussion in 'C++' started by Mohammad, Oct 20, 2006.

  1. Mohammad

    Mohammad Guest

    Dear Friends:

    I started learning c/c++ 2 weeks ago and so known a little about c++
    !!!
    now the problem is that, I found an excercise that I couldn't solve it
    in no ways !!!

    The problem is that:

    make this shape with 2 or 3 "for" Repetition Statement. (It means that
    it is possible even if with 2 !):

    **********
    ********
    ******
    ****
    **
    ****
    ******
    ****
    **
    ****
    ******
    ********
    **********

    I programmed one, but it isn't what I want ! but it's this:

    // Assignment 1: Excercise 1: Shape
    // Making a strange shape !!!
    // Programmed By: Mohammad Dashti

    #include <iostream>
    using namespace std;

    int main()
    {
    for (int i = 0 ; i <= 12 ; i++){
    if (i<=7){
    for (int j = 1 ; j <= 10-i ; j++){
    if (i<=4 && j<=i) cout << " ";
    else if (i<=4 && j>i) cout << "*";
    if ((i==5 || i==7) && j==2) cout << " ";
    else if ((i==5 || i==7) && j==3) cout << "****";
    if ( i==6 && j<=2) cout << " ";
    else if (i==6 && j==3) cout << "******";
    }
    }

    if(i>=8){
    for (int j = 11 ; j >= 14-i ; j--){
    if (j>=i) cout << " ";
    else cout << "*";
    }
    }

    cout << endl;
    }
    return 0; // indicate successful termination
    } // end main


    You will glad me, if you send me the solution as soon as possible !
    Mohammad, Oct 20, 2006
    #1
    1. Advertising

  2. Mohammad

    Phlip Guest

    Mohammad wrote:

    > make this shape with 2 or 3 "for" Repetition Statement. (It means that
    > it is possible even if with 2 !):
    >
    > **********
    > ********
    > ******
    > ****
    > **


    Start again, and program just this shape. Note that the left side progresses
    from 0 to 4, while the right side descends from 10 to 6. With one loop
    statement, how would you make two variables progress like that?

    --
    Phlip
    http://www.greencheese.us/ZeekLand <-- NOT a blog!!!
    Phlip, Oct 20, 2006
    #2
    1. Advertising

  3. Mohammad

    Earl Purple Guest

    Mohammad wrote:
    > Dear Friends:
    >
    > I started learning c/c++ 2 weeks ago and so known a little about c++
    > !!!


    You are learning C or learning C++ or both, as C++ with "C first" ?

    > now the problem is that, I found an excercise that I couldn't solve it
    > in no ways !!!
    >
    > The problem is that:
    >
    > make this shape with 2 or 3 "for" Repetition Statement. (It means that
    > it is possible even if with 2 !):
    >
    > **********
    > ********
    > ******
    > ****
    > **
    > ****
    > ******
    > ****
    > **
    > ****
    > ******
    > ********
    > **********
    >
    > I programmed one, but it isn't what I want ! but it's this:
    >
    > // Assignment 1: Excercise 1: Shape
    > // Making a strange shape !!!
    > // Programmed By: Mohammad Dashti
    >
    > #include <iostream>
    > using namespace std;
    >
    > int main()
    > {
    > for (int i = 0 ; i <= 12 ; i++){
    > if (i<=7){
    > for (int j = 1 ; j <= 10-i ; j++){
    > if (i<=4 && j<=i) cout << " ";
    > else if (i<=4 && j>i) cout << "*";
    > if ((i==5 || i==7) && j==2) cout << " ";
    > else if ((i==5 || i==7) && j==3) cout << "****";
    > if ( i==6 && j<=2) cout << " ";
    > else if (i==6 && j==3) cout << "******";
    > }
    > }
    >
    > if(i>=8){
    > for (int j = 11 ; j >= 14-i ; j--){
    > if (j>=i) cout << " ";
    > else cout << "*";
    > }
    > }
    >
    > cout << endl;
    > }
    > return 0; // indicate successful termination
    > } // end main
    >
    >
    > You will glad me, if you send me the solution as soon as possible !


    if we're allowed to create a table:

    const int num_stars[] = { 10, 8, 6, 4, 2, 4, 6, 4, 2, 4, 6, 8, 10 };

    We can now iterate through that collection, and then through all the
    numbers from 0 to 9 with an if statement as to whether to print a star
    or a space. The if statement would take the column number and the the
    number of stars in that row. You would probably use abs( col*2 - 9 ) <
    num_stars[col] to determine this.

    something like:

    const int num_rows = sizeof( num_stars ) / sizeof( int );
    const int num_cols = 10;
    for ( int row = 0; row < num_rows; ++ row )
    {
    for ( int col = 0; col < num_cols; ++col )
    {
    std::cout << ( abs( col * 2 - 9 ) < num_stars[ col ] ) ? '*' :
    ' ';
    }
    std::cout << '\n';
    }

    In fact you could write it in C just replacing std::cout with putc (or
    fputc with stdout)
    Earl Purple, Oct 20, 2006
    #3
  4. Mohammad

    LR Guest

    Mohammad wrote:


    > make this shape with 2 or 3 "for" Repetition Statement. (It means that
    > it is possible even if with 2 !):
    >
    > **********
    > ********
    > ******
    > ****
    > **
    > ****
    > ******
    > ****
    > **
    > ****
    > ******
    > ********
    > **********


    Think about how these numbers are related:
    -4 5 10
    -3 4 8
    -2 3 6
    -1 2 4
    0 1 2
    1 2 4
    2 3 6


    > You will glad me, if you send me the solution as soon as possible !




    LR
    LR, Oct 20, 2006
    #4
  5. Mohammad

    Jon Rea Guest

    Mohammad wrote:
    > Dear Friends:
    >
    > I started learning c/c++ 2 weeks ago and so known a little about c++
    > !!!
    > now the problem is that, I found an excercise that I couldn't solve it
    > in no ways !!!
    >
    > The problem is that:
    >
    > make this shape with 2 or 3 "for" Repetition Statement. (It means that
    > it is possible even if with 2 !):
    >
    > **********
    > ********
    > ******
    > ****
    > **
    > ****
    > ******
    > ****
    > **
    > ****
    > ******
    > ********
    > **********
    >
    > I programmed one, but it isn't what I want ! but it's this:
    >
    > // Assignment 1: Excercise 1: Shape
    > // Making a strange shape !!!
    > // Programmed By: Mohammad Dashti
    >
    > #include <iostream>
    > using namespace std;
    >
    > int main()
    > {
    > for (int i = 0 ; i <= 12 ; i++){
    > if (i<=7){
    > for (int j = 1 ; j <= 10-i ; j++){
    > if (i<=4 && j<=i) cout << " ";
    > else if (i<=4 && j>i) cout << "*";
    > if ((i==5 || i==7) && j==2) cout << " ";
    > else if ((i==5 || i==7) && j==3) cout << "****";
    > if ( i==6 && j<=2) cout << " ";
    > else if (i==6 && j==3) cout << "******";
    > }
    > }
    >
    > if(i>=8){
    > for (int j = 11 ; j >= 14-i ; j--){
    > if (j>=i) cout << " ";
    > else cout << "*";
    > }
    > }
    >
    > cout << endl;
    > }
    > return 0; // indicate successful termination
    > } // end main
    >
    >
    > You will glad me, if you send me the solution as soon as possible !
    >


    This certainly does the job, not sure if its the *best* way though ...


    #include "stdafx.h"
    #include <iostream>
    #include <string>

    using namespace std;

    void PrintLine(int x,int width)
    {
    if( x == 0 ) return;
    std::cout << std::string((width-x)/2,' ') << std::string(x,'*') <<
    std::endl;
    }

    void DrawHumps( int startWidth, int minima, int centerWidth, int step )
    {
    bool switchMe = false;
    int i;
    for (i = startWidth; switchMe ? i <= startWidth : i >= step; switchMe ?
    i+=step : i-=step )
    {
    PrintLine(i,startWidth);
    if (i == minima)
    {
    for (i = minima + step; switchMe ? i >= 2 : i <= centerWidth;
    switchMe ? i-=step : i+=step )
    {
    PrintLine(i,startWidth);
    if (i == centerWidth)
    {
    switchMe = true;
    }
    }
    i+=step;
    }
    }
    return;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    DrawHumps(10,2,6,2);
    }
    Jon Rea, Oct 23, 2006
    #5
  6. Mohammad

    Wayne Marsh Guest

    Jon Rea wrote:

    > This certainly does the job, not sure if its the *best* way though ...


    I love the way you decided to show off...

    > int _tmain(int argc, _TCHAR* argv[])
    > {
    > DrawHumps(10,2,6,2);
    > }


    ....but then showed that you don't know what you're doing here with this.
    _tmain? _TCHAR*? Get out.
    Wayne Marsh, Oct 23, 2006
    #6
  7. Mohammad

    Cinder6 Guest

    On Oct 20, 2:18 am, "Mohammad" <> wrote:
    > Dear Friends:
    >
    > I started learning c/c++ 2 weeks ago and so known a little about c++
    > !!!
    > now the problem is that, I found an excercise that I couldn't solve it
    > in no ways !!!
    >
    > The problem is that:
    >
    > make this shape with 2 or 3 "for" Repetition Statement. (It means that
    > it is possible even if with 2 !):
    >
    > **********
    > ********
    > ******
    > ****
    > **
    > ****
    > ******
    > ****
    > **
    > ****
    > ******
    > ********
    > **********
    >
    > I programmed one, but it isn't what I want ! but it's this:


    <snip>

    I just went ahead and did this myself. Basically, the easiest way to
    do it is to look at the problem as three parts: the first (top)
    triangle, the (middle) diamond, and the last (bottom) triangle. Write
    three loops, one for each of the parts. Instead of using literal
    values, use variables for the maximum width and the minimum width (you
    can also use one for the starting width). Then you integrate the three
    loops into one function. One easy way to have it switch to
    decrementing and back to incrementing is to make a 'starsAdded'
    variable that has a value of 2 (for putting on more stars), then
    multiply it by -1 (for reducing the number of stars on the line).

    There are tons of ways to do this. Mine is just one of them (and it's
    not the most elegant of them, but whatever). I think it should be
    possible to do it with just one for loop and some bools, but the code
    might become a bit obfuscated. If you are still stumped after all the
    advice you have gotten, just ask, and I will provide my answer to it.
    I just didn't want to spoil the fun for you :)
    Cinder6, Oct 23, 2006
    #7
  8. Mohammad

    janusz Guest

    Cinder6 wrote:
    > On Oct 20, 2:18 am, "Mohammad" <> wrote:
    >
    >>Dear Friends:
    >>
    >>I started learning c/c++ 2 weeks ago and so known a little about c++
    >>!!!
    >>now the problem is that, I found an excercise that I couldn't solve it
    >>in no ways !!!
    >>
    >>The problem is that:
    >>
    >>make this shape with 2 or 3 "for" Repetition Statement. (It means that
    >>it is possible even if with 2 !):
    >>
    >>**********
    >> ********
    >> ******
    >> ****
    >> **
    >> ****
    >> ******
    >> ****
    >> **
    >> ****
    >> ******
    >> ********
    >>**********
    >>
    >>I programmed one, but it isn't what I want ! but it's this:


    One for-loop is enough (if you _must_ use a for-loop).
    <code for use with character set where ' '==32 and '*'==42 >

    #include <stdio.h>
    #include <stdlib.h>
    main(){
    int i,j,k;
    putchar('\n');
    for(i=0;i<130;i++)
    {
    j=i%10;
    k=i/10;
    putchar( 32+10*((j>=(4-abs(abs(k-6)-2)))*(j<=(5+abs(abs(k-6)-2)))) );
    if(9==j) putchar('\n');
    }
    return 0;
    }

    </code>
    janusz, Oct 24, 2006
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. dhillon2004

    Begginer Question about TK::filevent

    dhillon2004, Sep 3, 2004, in forum: Perl
    Replies:
    0
    Views:
    459
    dhillon2004
    Sep 3, 2004
  2. grzybek

    Web Application begginer

    grzybek, Nov 24, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    423
    grzybek
    Nov 24, 2003
  3. Tom
    Replies:
    2
    Views:
    352
    =?Utf-8?B?d2VpY2h1bmcgW01DU0QsIE1DREJBXQ==?=
    Nov 24, 2004
  4. ablyplus

    new page - begginer

    ablyplus, Mar 26, 2005, in forum: ASP .Net
    Replies:
    2
    Views:
    426
    Steve C. Orr [MVP, MCSD]
    Mar 27, 2005
  5. begginer

    , Nov 21, 2005, in forum: ASP .Net
    Replies:
    2
    Views:
    500
Loading...

Share This Page