Ir ao conteúdo

C Losango e Triângulo em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Consegui resolver o problema, entretanto a saída não fica "alinhada". Gostaria de saber um método para alinhar os '%' para formar os losangos.

 

#include<stdio.h>

int main(void)
{
    int l,k=0,op,j,i,p,s;
    char a='%';

    printf("Digite a opcao(1 ou 2) desejada:");
    scanf("%d",&op);

    printf("Digite o numero de linhas:");
    scanf("%d",&l);

    if(op==1)
    {
        if(l%2!=0)
        {

            for(i=1;i<=l/2;i++)
        {
            for(j=1;j<=i+k;j++)
            {
                printf("%c",a);
            }
            printf("\n");
            k+=3;
        }
        for(i=l-l/2;i>=1;i--)
        {
            for(j=i+k;j>0;j--)
            {
                printf("%c",a);
            }
            printf("\n");
            k-=3;
        }
        }

        if(l%2==0)
        {
            for(i=1;i<=l/2;i++)
        {
            for(j=1;j<=i+k;j++)
            {
                printf("%c",a);
            }
            printf("\n");
            k+=3;
        }
        for(i=l/2;i>=1;i--)
        {
            for(j=i+k-3;j>0;j--)
            {
                printf("%c",a);
            }
            printf("\n");
            k-=3;
        }

        }

        }


    if(op==2)
    {
        for(i=1;i<=l;i++)
        {
            for(j=1;j<=i+k;j++)
            {
                printf("%c",a);
            }
            printf("\n");
            k++;
        }
    }



    return 0;
}

 

  • Obrigado 1
  • Solução
Postado

@abcabc     você pode usar a função gotoxy , que vem da Linguagem PascaL , e adaptada para usar na Linguagem  C / C++ , que posiciona o cursor em uma posição da tela , onde escrever , e assim faz o alinhamento , e seu código com muitas modificações poderia ser assim  :

#define _CRT_SECURE_NO_WARNINGS  // para usar scanf e strcpy bem no visual studio
#define cls system("cls");
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<windows.h>
void Losango(char a, int);
void triangulo(char a, int l);
void gotoxy(int, int);
int main()
{
    int l, k = 0, op, j, i, p, s;
    char a = '%';
    char cop[4]; // array
    do
    {
        printf(" 1 - LosanGo\n");
        printf(" 2 - TrianGuLo\n");
        printf(" 3 - Sair do programa\n");
        printf("     Digite a opcao(1 ou 2) desejada: ");
        fgets(cop, 5, stdin);  // fgets se adapta melhor , pois mantém o Buffer do teclado Limpo
        op = atoi(cop); // atoi converte de array para inteiro 
        if( op == 3 )return 512;
        printf("Digite o numero de linhas:");
        fgets(cop, 5, stdin); // fgets se adapta melhor , pois mantém o Buffer do teclado Limpo
        l = atoi(cop); // atoi converte de array para inteiro 
        switch (op) // switch faz o mesmo que o  if e é mais compacto
        {
        case 1: // aqui é iguaL ao  IF
            Losango(a,l);// vai para a função adequada
            break; // no switch precisa para sinalizar o fim do case
        case 2 :
            triangulo(a,l);//envia as variáveis para a função por parâmetro
            break;
        case 3:
            printf("saindo do programa !\n\n\n"); // se não colocar esse case 3 o default consider que errou
            return 512; // sai do programa e volta para o windows
        default:// verifica se o valor de op corresponde a algum dos case's
            printf("opcao invaLida !\n");
        }
    } while (op != 3 );// aqui que realmente sairia do programa
    return 0;// e voltaria para o windows
}
void Losango(char a, int l)
{
    int q,w,k,j,i,lpc,lpb;
    w = l/2 + 1;
    lpc=w;
    lpb=w;
    cls
    gotoxy(0,w);
    for(j=0; j<w; j++)
    {
        gotoxy(j,lpc);
        printf("%c",a);
        gotoxy(j,lpb);
        printf("%c",a);
        lpc--;
        lpb++;
        Sleep(500);  // Obsewrvando o Movimento
    }
    for(j=0; j<w+1; j++)
    {
        gotoxy(j+w,lpc);
        printf("%c",a);
        gotoxy(j+w,lpb);
        printf("%c",a);
        lpc++;
        lpb--;
        Sleep(500);  // Obsewrvando o Movimento
    }
    int px,py,x;                              /* variáveis simples                                */
    HANDLE h;                                 /* controle dos dispositivos do pc                  */
    h = GetStdHandle(STD_OUTPUT_HANDLE);      /* pega a saída padrão                              */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela               */
    GetConsoleScreenBufferInfo(h, &SBInfo);   /* pega a posição do cursor do console              */
    px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
    gotoxy(0,py+w+2);
}
void triangulo(char a, int l)
{
    int j,i,k=0;
    for (i = 1; i <= l; i++)
    {
        for (j = 1; j <= i + k; j++)
        {
            printf("%c", a);
        }
        printf("\n");
        k++;
    }
}
void gotoxy(int coluna, int linha)
{
    COORD c;
    c.X = coluna;
    c.Y = linha;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...