Ir para conteúdo
Fórum Script Brasil
  • 0

Programa C


Lucas Fantin

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0

Gostei desse algoritmo aí, vou ajudar com o que eu consegui:

Primeiramente, a cada andar que a pirâmide decresce (isso mesmo, é bem mais didático calcular de cima para baixo) existe um padrão de incremento de blocos:

1 3 5 7...

(((1+3)+5)+7) ...

Essa é a primeira coisa a se observar. A partir desse padrão o problema se resolve.

Vamos ao que interessa, o código:

 

#include <stdio.h>
#include <stdlib.h>

typedef struct Piramide

    {

    int qtpedras, andares, altura;

    } Piramide;


int main ()

{

Piramide p;

int i, pedras_totais, pedras_sobraram, guarda_padrao, soma_padrao;

    do

        {

        printf ("Entre com a quantidade de pedras ~MAIOR do que 5~ : ");

        scanf ("%d", &pedras_totais);

        }while (pedras_totais<=5);

    /*Atribuindo valores que não atrapalharão o calculo. */

    guarda_padrao=1, soma_padrao=1, p.andares=0, p.qtpedras=0;

        for (i=1; soma_padrao<pedras_totais; i++)

            {


            p.andares+=1;

        /* Aqui o padrão é somado a quantidade anterior de blocos, como no padrão, o anterior é incrementado com o posterior*/

            guarda_padrao = ((i*2)+1);

            soma_padrao += guarda_padrao;

            if (soma_padrao > pedras_totais)

                {

                break;

                }



            else

                {

                p.qtpedras = soma_padrao;


                }


            }


        pedras_sobraram = pedras_totais - p.qtpedras;

        printf ("\nEssa piramide tem:\n");
        printf ("\nAndares+terreo: %d", p.andares);
        printf ("\nAltura: %f metros\n", p.andares*1.5);

        if (pedras_totais == p.qtpedras)

            {

            printf ("não sobraram pedras!\n");

            }

        else

        printf ("Sobraram %d pedras...\n", pedras_sobraram);

return 0;

}

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Apenas esse for precisa ser concertado para a contagem correta dos blocos, precisando de uma nova int para somar os blocos:

 for (i=1; soma_padrao<pedras_totais; i++)

            {

            p.andares++;

        /* Aqui o padrão é somado a quantidade anterior de blocos, como no padrão, o anterior é incrementado com o posterior*/

            guarda_padrao = (i+(i+1));

            soma_padrao = soma_padrao+guarda_padrao;

            padrao_bruto += soma_padrao;

             printf ("%d-", padrao_bruto);

            if (padrao_bruto > pedras_totais)

                {

                break;

                }



            else

                {

                p.qtpedras = padrao_bruto;


                }


            }

Fui

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...