Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

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

 

 

  • Curtir 1
  • Obrigado 1

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






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

×