2013-07-15 2 views
-1

나는 호출 루틴에서 매개 변수로 전달 된 양의 크기로 다이아몬드를 인쇄하려고합니다. 숫자가 0에서 시작하여 다음으로 높은 홀수로 변경되는 경우에도 마찬가지입니다. 금액이나 문자 유형이 전달되지 않으면 함수에 기본 매개 변수가 있습니다. 이상한 양의 줄에 기호를 출력하는 다이아몬드를 인쇄 할 수 있지만 전달 된 기호의 최대 줄 수까지 전달 된 기호의 홀수 줄을 인쇄하고 싶습니다. 내 문제는 전달 된 숫자와 동일한 양의 줄을 인쇄하여 전달 된 양만큼 홀수만큼의 줄이 아닌 각 줄에 기호의 홀수 양을 제공하는 것입니다. 즉 5를 전달하면 하나의 기호, 3 개의 기호, 5 개의 기호, 7 개의 기호, 9 개의 기호로 시작하는 5 개의 개별 줄이 인쇄됩니다. 내 뇌가 선 금액과 기호 금액을 구별하는 방법을 이해하도록 만들 수는없는 것 같습니다. 어떤 도움도 환영하며 숙제를위한 것입니다. 그래서 내가 잘못하고있는 것의 논리를 알아 내야합니다. 그래서 알아낼 수 있습니다. 고맙습니다. 여기에 내 코드가 있습니다. Eclipse를 컴파일러로 사용하는 것이 중요하다면.C++ for 루프 다이아몬드 전용 음수

#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; 
     } 
    } 
} 
+5

루프가 아직 무엇인지 알면서도 주 기능에서 사용하지 않기로 한 것에 감명 받았습니다. – Rapptz

+0

일식은 컴파일러가 아닌 ide입니다. – greatwolf

+0

Stackoverflow는 일반적인 질문과 대답의 형태로 * knowledge *의 저장소로 사용됩니다. 일반적인 도움말 포럼이 아닙니다. [about stackoverflow] (http://stackoverflow.com/about)를 참조하십시오. 어쩌면 도움이 필요한이 작업을 프로그래밍하는 특정 측면이 있습니까? –

답변

0

먼저 논리 중 일부가 잘못되었습니다. true으로 평가 될 때는 if (max % 2)을 사용하십시오.

둘째, 변수 이름이 잘못되었습니다. lineshape이 무엇을 나타낼 지 명확하지 않습니다 (분명히 각각 선과 모양이 아님).

셋째, 한 번에 너무 많이하려고합니다. 좀 더 간단한 것을 시도하십시오. 대신를 생산하기 위해 노력하고 5의 인수를 들면 다음과 같습니다

* 
*** 
***** 

또는이 :

* 
*** 
***** 

또는이 :

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

같은 간단한 첫번째 무언가를 시도

1 
3 
5 

또한 짝수 및 홀수의 잉킹은 2n2n+1입니다. 그게 너를 괴롭히는 데 충분할거야.