-1

呼び出しルーチンでパラメーターとして渡された量のサイズのダイヤモンドを印刷しようとしています。その数値がゼロから始まる次に高い奇数に変更された場合でも。金額または文字タイプが渡されない場合、関数にはデフォルトのパラメーターがあります。シンボルを奇数行で出力するひし形を印刷できますが、渡されたものの最大行数まで渡されたシンボルの奇数行を印刷したいと考えています。私の問題は、渡された数に等しい行数を出力し、渡された数までの奇数の行だけではなく、各行に奇数のシンボルのみを与えることです。つまり、5 を渡すと、1 つの記号、3 つの記号、5 つの記号、7 つの記号、9 つの記号で始まる 5 つの個別の行が出力されます。できます' ラインの量とシンボルの量を区別する方法を脳に理解させているようです。どんな助けでも大歓迎です。それは宿題のためなので、私が間違っていることの背後にあるロジックが必要なので、それを理解することができます. ありがとうございました。これが今の私のコードです。それが重要な場合は、Eclipse をコンパイラーとして使用します。

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <iomanip>
using namespace std;

// prototype for printDiamond
void printDiamond ( int = 1, char = '*' );

int main()
{
   printDiamond();
   cout << endl;
   printDiamond(1);
   cout << endl;
   printDiamond(2);
   cout << endl;
   printDiamond(3);
   cout << endl;
   printDiamond(4);
   cout << endl;
   printDiamond(5);
   cout << endl;
   printDiamond(1, '$');
   cout << endl;
   printDiamond(2, '$');
   cout << endl;
   printDiamond(3, '$');
   cout << endl;
   printDiamond(4, '$');
   cout << endl;
   printDiamond(5, '$');
   cout << endl;

   int someSize = 10;
   char someSymbol = ' ';
   printDiamond(someSize, someSymbol);
   cout << endl;

   return EXIT_SUCCESS;
}
void printDiamond ( int max, char symbol)
{

   if ( symbol == ' ')
      symbol = '*';
   if ( max % 2 == 0 )
            ++max;

   int shape,line;

   if ( max >= 0 )
   {

      if ( max % 2 )
      {

         for (shape=1;shape <= max ;shape++)
         {

            for (line = shape; line < max; line++)
            {
               cout << " " ;
            }

            for (line=1; line <= shape+shape-1; line++)
            {
               cout << symbol ;
            }
            cout << endl;

         }
      }
   }
   else
   {
       cout << "Input error. This function not defined for a negative integer.";
   }

   if ( max % 2 )
   {

      for (shape=max-1;shape >= 0 ;shape--)
      {

         for (line=shape;line<max;line++)
         {
            cout << " " ;
         }

         for (line=1;line <= shape+shape-1; line++)
         {
            cout << symbol ;
         }

         cout << endl;
      }
   }
}
4

1 に答える 1

0

まず、ロジックの一部が間違っているように見えます。if ( max % 2 )と評価することが確実な場合に使用しtrueます。

次に、変数の名前が不適切です。line何を表し、何を表すことになっているのかはまったく明確ではありませんshape(確かに、それぞれ線と形状ではありません)。

第三に、一度に多くのことをしようとしています。もっと簡単なことを試してください。これを生成しようとする代わりに、引数が 5 の場合:

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

次のように、最初はもっと簡単なものを試してください。

  *
 ***
*****

またはこれ:

*
***
*****

またはこれ:

1
3
5

また、偶数と奇数を と のように考えることに慣れて2nください2n+1。こぶを乗り越えるにはそれで十分なはずです。

于 2013-07-15T02:13:03.127 に答える