Ir ao conteúdo
  • Cadastre-se
Hello_World

C Como criar um triângulo em C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

***[ Olá, sou estudante de Ciências-Física, e tenho dialeto C ANSI como hobby, C'hobby rsrs!

      Meu contato com C/Python foi na matéria Introdução à Computação. ] 

 

O problema pede função para solução?

 

 

Editado por AnsiC
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
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 2

Compartilhar este post


Link para o post
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?

Editado por AnsiC
  • Curtir 1
  • Obrigado 2

Compartilhar este post


Link para o post
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 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Olá. Onde você anda estudando p aprender a fazer códigos como esse?

É por meio d algum livro? 

Editado por giu_d
  • Curtir 1

Compartilhar este post


Link para o post
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 2

Compartilhar este post


Link para o post
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

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Valeu! Já tinham me recomendado esse mesmo livro, pois eu tinha demonstrado interesse em aprender a respeito da API do Windows para criar códigos como esse seu. Obrigado!

Editado por giu_d
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×