Solved

Trying to do some tricky char output

Posted on 2003-11-03
9
230 Views
Last Modified: 2010-04-02
I'm doing a problem from a c++ book and am lost and clueless.... the jist of the problem is that the user enters a char from the keyboard then it prints the letters out in a triangle starting from the inside&last row first, for instance if the char was d the out put would look like
      A
    ABA
  ABCBA
ABCDCBA

I'v figured that that a for loop with 2 nested loops (one for spacing, and one for lines) are needed, at least I think........
if anyone could point me in the right direction on how to implement them, and get the output

thanks for the help.......

-orlando-
0
Comment
Question by:Orlando15767
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
9 Comments
 
LVL 4

Expert Comment

by:n_fortynine
ID: 9676193
This sounds like homework, so here's a few hints:
Yes, two nested loops seem sufficient. The outer should be used to control the "row" of the triangle (e.g. if the letter is 'D' how many rows are there? how about 'E'? what's the relationship here?)

The inner loop is used to displayed each row. Notice that you can start from 'A' going to 'D' and coming back to A, so something like:
    Say A + n is the letter (in case letter is 'D' n is 3)
(A) (A+1) (A+2) ... (A + (n - 1)) (A+n) (A + (n - 1)) ... (A + 2) (A + 1) (A)
Everything revolves around n, pretty much. Remember that the center letter varies for each row (so does n), and this is what your outer loop should be keeping track off.
0
 
LVL 3

Assisted Solution

by:freewell
freewell earned 20 total points
ID: 9676420
int i,j,nDepth = 4;
char ch = 'A';

for(i=0;i<nDepth;i++)
{
      for(j=1;j<nDepth-i;j++)
            printf(" ");
      for(j=ch;j<=ch+i;j++)
            printf("%c",j);
      for(j=ch+i-1;j>=ch;j--)
            printf("%c",j);

      printf("\r\n");
}
0
 
LVL 1

Author Comment

by:Orlando15767
ID: 9679444
how can you figure out what the position of the alphabet the letters are in (d=5,E=6) to figure out the number of lines and rows?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 4

Expert Comment

by:n_fortynine
ID: 9680130
Well, the simplest way to find that out:
ch = toupper(ch); //make everything to upper case (or to lower and then subtract 'a'.
int pos = ch - 'A';
0
 
LVL 1

Author Comment

by:Orlando15767
ID: 9690726
Below is the code that I came up with( I put the '-' in to see where a space would go.......
there is a few problems with it though, the output is all on one line, and I can't get the letters to decrease.....  any suggestions?

this is what the out put looks like...... '- - - DDD - - DD - D'

 int i,j;
      char letter;

      cout << "Enter a char to start the triangle: "; cin >> letter;

      letter = toupper(letter);

      int pos = (letter - 'A')+1;

      cout << letter << "'s position in the alphebet is: " << pos << endl;
      cout << "\n" << endl;

      for ( ; pos >= 1; pos--)
      {
      for (i=1; i<pos; i++)
            cout << "-";
      for (j=1; j<pos; j++)
            cout << letter;
      }

thanks for the help
0
 
LVL 4

Expert Comment

by:n_fortynine
ID: 9690895
I'm not going to write any code here, since freewell has already given you some code that would work for you (sigh). I'll just explain what he did in case you didn't understand it. (If you use his code please give him credit for it)

for(i=0;i<nDepth;i++)
{
     for(j=1;j<nDepth-i;j++) //Display the preceding spaces here.
          printf(" ");                //Notice that you would go to nDepth - 1, meaning this limit would change every time.
                                         //and reaches 0 on the last row.
     for(j=ch;j<=ch+i;j++)    //Printing the first segment of the row: A, AB, ABC etc. The limit would also change.
          printf("%c",j);
     for(j=ch+i-1;j>=ch;j--)  //Printing the remaining segment of the row.
          printf("%c",j);

     printf("\r\n");
}

You could replace printf() with the corresponding C++ syntax cout.
0
 
LVL 1

Author Comment

by:Orlando15767
ID: 9690955
I tried his code and it doesn't work how I thought it would, and wound't use his anyway... I want to work it though myself....
such as his code doesn't work if you change the ch to 'z'
in his code what does "%c" mean and such......


thanks for all the help with this....
0
 
LVL 4

Accepted Solution

by:
n_fortynine earned 105 total points
ID: 9691051
well, the thing is you need to calculate nDepth the way you did, i.e. if the letter is 'D' nDepth is 4 etc.
for all his C syntax:
printf(" "); is equivalent to cout << ' ';
printf("%c",j); is equivalent to cout << j; ("%c" saying this variable is of type char)
printf("\r\n"); is equivalent to cout << endl;

If you want to work it through by yourself, well, you can still break the task into 3 (or 2 if you try to compress the last 2) smaller portions (per row):
1. Display the preceding spaces.
2. Display the first half segment.
3. Display the rest.

Have fun.
0
 
LVL 1

Author Comment

by:Orlando15767
ID: 9692154
this is what I'v got so from peicing this together. the thing is it is outputing numbers instead of letters
thanks for all the help


int i,j;
char ch;

      cout << "Enter a char to start the triangle: "; cin >> ch;

      ch = toupper(ch);

      int pos = (ch - 'A')+1;

for(i=0;i<pos;i++)
{
    for(j=1;j<pos-i;j++)
         cout << "-";
    for(j=ch;j<=ch+i;j++)
      {
            //char j;
            cout << j;
      }
    for(j=ch+i-1;j>=ch;j--)
      {
            //char j;
            cout << j;
      }
    cout << endl;
}
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
mixing C++ & C# in Vis Studio 2013 7 281
FMX enumerated colours 2 156
c++ substatte a varabe for a string in a LPCTSTR statment 8 101
c++, dynamic object by json 1 65
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

751 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question