2011-06-10 3 views
3

는 "프로그램 요청을 대문자를 입력 할 수있는 사용자를 가지고 같은 피라미드 패턴 생성하는 중첩 루프를 사용합니다. 입력이 운동에 어떻게 접근합니까? . (C)

A 

    ABA 

    ABCBA 

ABCDCBA 

ABCDEDCBA 

이 패턴은 문자로 확장해야합니다 예를 들어, 위의 패턴은 E의 입력 값에서 발생합니다. "

지금까지 나는 좋은 몇 시간 동안이 일을 봤는데와 알파벳을 통해 전달이 반복되는 경우 나 문자가 제대로 형식으로 '피라미드'를 받고 있어요 : 그러나

#include <stdio.h> 
int main(void) 
{ 
    char ch = 0; 
    char ch2 = 0; 
    int rows = 0; 
    printf("Enter a character: "); 
    scanf("%c", &ch); 
    rows = ch - 64; 
    while(rows > 0) 
    { 
     int spaces; 
     for(spaces = rows-1; spaces > 0; spaces--) 
     { 
      printf(" "); 
     } 
     ch2 = 65; 
     while(ch2 < (ch-(rows-2))) 
     { 
      printf("%c", ch2); 
      ch2++; 
     } 

     printf("\n"); 
     rows--; 
    } 
} 

, I 마치 벽돌 벽을 뒤집어 제대로 돌아 가게하려고 애쓰는 것처럼 느낍니다. 나는 을 알고 있어야한다.은 몇 가지 기본 루프가되어야한다. 그러나 나는 정말로 잘 붙어있다. 나는 그것이 쉽다라고 확신한다. .. 나는 내가 단지 그것을 너무나 오랫동안보고 있었다라고 생각한다. 아이디어?

+2

먼저 문자 리터럴 값을 사용하려고하는 경우, 문자 리터럴을 사용합니다. 'A'는 '65'보다 훨씬 명확하다. 하지만 알고리즘에 대해서는 전혀 도움이되지 않습니다. – JAB

+0

"ABCDCDA"의 패턴 변동에 대한 규칙은 무엇입니까? –

+0

나는 ABCDCDA가 ABCDCBA 여야한다고 생각한다. – Downvoter

답변

1

너무 가까이서 숨을들이 쉬면 너는 그것을 볼 수있다.

당신이 당신의 문자를 인쇄 할 때,이

이 부분

while(ch2 < (ch-(rows-2))) 
    { 
     printf("%c", ch2); 
     ch2++; 
    } 

후에 수행 할 또는 문자열의 끝에서 떨어지지 않습니다. 필요한 것은 마지막 문자가 인쇄 된 문자 아래에서 시작하는 또 다른 루프입니다. 'A'문자가 인쇄 될 때까지 문자를 인쇄하고 그 문자를 감소시켜야합니다.

숙제이기 때문에 정확한 세부 정보를 알려주기 전에 해당 루프를 작성할 기회를 제공 할 것입니다.

+0

그래, 그게 내가 여러 가지 루프로 어지러운 곳이야. 올바른 문자가 잘못된 순서로 인쇄되어 있습니다. – Anonymous

+0

글쎄, 새 줄'\ n '문자를 인쇄하기 전에 "같은"줄의 글자를 출력해야합니다. –

+0

알았습니다. :)./ 성취감 – Anonymous

1

이 코드는 더 명확하게 재 작성 될 수 있지만 가지고있는 것을 기반으로 작성 될 수 있습니다.이 경우는 현재 while 루프 바로 다음에서 작동 할 것입니다.

while (ch2 > 'A') 
{ 
    ch2--; 
    printf("%c", ch2); 
} 

코드를 명확하게하기 위해 리팩터링하는 것이 좋습니다. 의견에서 제안했듯이 원시 정수가 아닌 문자 리터럴을 사용하여 시작하십시오.

+0

글자를 쓰고 글을 썼다. 글쎄, 나는 ch2를 붙였다. – Anonymous

0

당신은 최대뿐만 아니라 아래로 반복 할 수

while(ch2 >= 'A') 
{ 
    printf("%c", ch2);   
    ch2--;   
} 
0

이 시도 : 모든

#include <stdio.h> 

int main (int argc, const char * argv[]) 
{ 
    char ch; 

    printf("Enter a character: "); 
    scanf("%c", &ch); 
    if(ch<'A' || ch>'Z'){ 
     printf("Character must be between 'A' and 'Z'\n"); 
     return 1; 
    } 

    for(int rows = ch - 'A'; rows >= 0; rows--) 
    { 
     char ch2; 
     for(int spaces = rows; spaces > 0; spaces--) 
      printf(" "); 

     for(ch2='A'; ch2 < (ch-(rows-1)); ch2++) 
      printf("%c", ch2); 

     for(ch2=ch2-2;ch2>='A';ch2--) 
      printf("%c", ch2); 

     printf("\n"); 
    } 
    return 0; 
} 
관련 문제