Ir ao conteúdo
  • Cadastre-se

C Como criar um triângulo em C


Hello_World

Posts recomendados

Olá, estou tentando fazer um triângulo de altura n e base 2n - 1 de forma que ele pareça com isso, com n = 5:

 

    *

   ***

  *****

 *******

*********

Podem me ajudar? Eis até onde consegui fazer:

#include <stdio.h>

int main()
{
    int n, alt, lar;
    scanf("%d", &n);
    
    for (alt = 1; alt <= n; alt++)
    {
        for (lar = 1; lar <= (2*alt - 1); lar++)
        {
            printf("*  ");
        }
        printf("\n");
    }

    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

int main (void){
    int  altura_trian;
    int  base_trian;
    char graph;
    
    graph = '*';
    altura_trian = 7;
    base_trian = 2*altura_trian - 1;
    
    int metade_trian = base_trian/2;
    
    for (int a = 0; a < altura_trian; a += 1){
            for (int m = 0; m < metade_trian - a; m += 1)
                    putchar(' ');
                       
            for (int e = 0; e <= a; e += 1) /*lado esquerdo do triangulo     */
                    putchar (graph);
            
            /* [!] Observe que o lado direita começa com 1; esse é o truque. */
            for (int d = 1; d <= a; d += 1) /*lado direito  do triangulo     */
                    putchar (graph);
                
            putchar ('\n'); /*nova Linha*/
    }
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Outra coisa que percebi é que o número de gráficos na saída são todos n-ímpares com relação a altura; Ou seja

A(n), n = 5 --> 5º n-ímpar, então para todo xi...xn - 1 o número de gráfico por linha na saída é G(x): 2x + 1.

/* putchar_graph -- repete o valor gráfico n vezes na tela de saída           */
void putchar_graph(const char grafico, const int nvezes){
    for (int i = 0; i < nvezes; i += 1){
            putchar (grafico);
    }
    return;  /* esse return é simplesmente simbólico                          */
}
int main (void){
    int altura_tri = 10;
    int grafico0   = ' ';
    int grafico1   = '*';
    
    for (int a = 0; a < altura_tri; a += 1){
            putchar_graph (grafico0, altura_tri - (a + 1));
            putchar_graph (grafico1, a*2 + 1);
            putchar_graph ('\n', 1);
    }
    return 0;
}

 

adicionado 4 minutos depois

ou ainda assim, para essa parte: Considero essa a solução ideal!

    for (int a = 1; a <= altura_tri; a += 1){
            putchar_graph (grafico0, altura_tri - (a));
            putchar_graph (grafico1, a*2 - 1);
            putchar_graph (grafico0, altura_tri - (a));
            putchar_graph ('\n', 1);
    }

Pronto, aprenda o que cada comando faz

Obrigado pelo problema! Perguntas, dúvidas ou sugestões?

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Hello_World      você pode fazer um triangulo com uma melhor definição ,  experimente esse código  , e para isso crie um projeto do tipo windows aplication no dev c++   ou   win32GUI project no code blocks  :

#include <windows.h>
#include <math.h>
#include <tchar.h>
static int i;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow){
    static TCHAR szAppName[] = TEXT ("Connect") ;
    HWND janela ;
    MSG msg ;
    WNDCLASS wndclass ;
    wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc   = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance     = hInstance ;
    wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;
    if (!RegisterClass (&wndclass)){
        MessageBox (NULL, TEXT ("Program requires Windows NT!"),
        szAppName, MB_ICONERROR) ;
        return 0 ;
    }
    janela = CreateWindow (szAppName, TEXT ("Desenhar Um Triangulo"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL) ;
    ShowWindow (janela, iCmdShow) ;
    UpdateWindow (janela) ;
    while (GetMessage (&msg, NULL, 0, 0)){
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND janela, UINT message, WPARAM wParam, LPARAM lParam){
    HDC tela ;
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    PAINTSTRUCT ps ;
    int j;
    tela = GetDC (janela) ;
    switch (message){
        case WM_KEYDOWN:  //  se pressionar a tecla ESC
            if (wParam == VK_ESCAPE)
                PostQuitMessage (0) ;
        case WM_PAINT :
            tela = BeginPaint (janela, &ps) ;
            TextOut (tela, 650, 50, frase, _tcslen(frase));// escreve mensagem na tela
            MoveToEx(tela,  static_cast<int>(sin(i*3.141615/180)*100+700),
                            static_cast<int>(cos(i*3.141615/180)*100+250),NULL) ;//posição de inicio do triangulo
            for(j=1;j<4;j++)
                LineTo(tela,static_cast<int>(sin((i+ j*120+00)*3.141615/180)*100+700) ,
                            static_cast<int>(cos((i+ j*120+00)*3.141615/180)*100+250));//vai para essas posições
            i++;
            if(i>360)i=0;
            Sleep(50);
            InvalidateRect (janela, NULL, TRUE) ;//limpa a tela
            EndPaint (janela, &ps) ;
            return 0 ;
        case WM_DESTROY:     // se clicar no botão X vermelho da janela
            PostQuitMessage (0) ;
    }
    return DefWindowProc (janela, message, wParam, lParam) ;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

15 horas atrás, Hello_World disse:

Oi, @AnsiC! Muito obrigado pelas soluções! Vou testar todas e entender como elas funcionam.

Por nada, foi divertido escrever a solução em C. E é bem legal de entender, já que está tudo nos seus elementos mais básicos da linguagem C, como manda o figurino.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@giu_d    na internet mesmo ,  estou estudando lógica de programação aqui no senac , mas faço pesquisas sobre programação ,  e encontrei esse livro de programação , em formato pdf , usando a API do windows , com o nome de programing windows  do autor charles petzold , parece bom , mas ainda não tenho muito conhecimento desse tipo de código .

http://vulms.vu.edu.pk/Courses/CS410/Downloads/Charles Petzold - Programming Windows - 5th Ed.pdf

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