Ir ao conteúdo
  • Cadastre-se

C Losango e Triângulo em C


abcabc
Ir à solução Resolvido por devair1010,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!