Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Diutsu

Pirâmide de Números

Mensagens Recomendadas

Diutsu

Boas,

Tenho aqui um enunciado de um exercicio que é para fazer para a proxima aula prática, de IAED, e não percebo  o que é pedido. Ou seja não sei qual é o output pretendido, porque o enunciado não é muito explicito nesse ponto.

Não preciso de código nenhum, é só mesmo o output, o codigo faço eu dps.

O exercicio é o 11, mas ponho aqui o 9 e o 10 porque estão relacionados.

9. (Pirâmide de Números 1) Escreva um programa que desenhe uma pirâmide de números utilizando a função void piramide (int N);. O valor de N, dado pelo utilizador, deverá ser obrigatoriamente superior ou igual 2. A pirâmide apresentada é o exemplo para N = 5.

               

              1

            1  2  1

        1  2  3  2  1

    1  2  3  4  3  2  1

1  2  3  4  5  4  3  2  1

10. (Pirâmide Invertida) Altere o programa anterior para desenhar uma pirâmide de números invertida usando a função void piramideInvertida (int N);. A pirâmide apresentada é o exemplo para N = 5.

1  2  3  4  5  4  3  2  1

  1  2  3  4  3  2  1

      1  2  3  2  1

          1  2  1

              1

11. (Pirâmide de Números 2) Altere o programa anterior para que a função pirâmide utilize as funções void escreveCaracter (char c, int n); (escreve o caracter passado no primeiro parâmetro tantas vezes quantas forem passadas no segundo parâmetro); void escreveNumerosAsc (int a, int :P; (escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem crescente); e void escreveNumerosDesc (int a, int :P (escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem decrescente).

Cumps.


XX SINFO - Semana Informática

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Diutsu

Isso eu já sei, até porque o 9 e o 10 já estão feitos, mas por mais que leia o 11, não percebo qual é o objectivo.

Por outras palavras não estou a visualizar o resultado final.


XX SINFO - Semana Informática

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

A mim parece-me que a última é a mais fácil.

Na primeira função o que fazes é um for que escreve o caracter ou seja:

void escreveCaracter(char ch, int n) {
  int aux = 0;
  for(aux = 0; aux < n; aux++) {
    putchar(ch);
  }
}

As outras funções também utilizas um for, é a mesma ideia.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Diutsu

a ideia é fazer uma piramide de qq coisa

ou seja o resultado pretendido é algo como isto:

para esta função: escreveCaracter(c,10)

        c

      c c c

  c c c c c

c

para escreveNumerosAsc(3,9)

        3

      4 5 6

  7 8 9

e para escreveNumeroDes(2,12) é isto?

            12

      11 10 9

    8  7  6  5 4

3  2

É que se for isto fazer o código é bastante fácil, não tem lá grande sentido

enfim.

De qq maneira, obrigado pelas respostas.


XX SINFO - Semana Informática

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Ah, eu não tinha percebido isso do exercício. Então fazes o mesmo só que com o que te mostrei (fazes o mesmo que fizeste para o outro exericicio de contruir a piramide).


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Segundo entendi, não é bem isso o pretendido, é ainda mais simples ::)

O output das funções será:

escreveCaracter('c', 10)

cccccccccc

escreveNumerosAsc(3, 9)

3 4 5 6 7 8 9

escreveNumeroDes(12, 2)

12 11 10 9 8 7 6 5 4 3 2

sendo o objectivo, depois de as implementares, utilizares a função escreveCaracter para escrever os espaços antes de cada linha das pirâmides, e as outras duas para escrever os números de cada linha. Por exemplo, para escreveres a pirâmide

1 2 3 4 3 2 1

  1 2 3 2 1

    1 2 2

      1

utilizarias

/*escreveCaracter(' ', 0);*/ escreveNumerosAsc(1, 4); escreveNumerosAsc(3, 1);
escreveCaracter(' ', 2); escreveNumerosAsc(1, 3); escreveNumerosDes(2, 1);
escreveCaracter(' ', 4); escreveNumerosAsc(1, 2); escreveNumerosDes(1, 1);
escreveCaracter(' ', 6); escreveNumerosAsc(1, 1); /*escreveNumerosDes(0, 1);*/

O que está comentado não é necessário para utilização "por extenso", mas dá jeito para compreender o que utilizar dentro de um ciclo.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Diutsu

Antes de mais obrigado pelas ajudas.

Entretanto já tive a dita aula, e perguntei qual era o objectivo do exercicio, a resposta foi muito semelhante à dada pelo TheDark.

Deixo aqui o código do exercício se alguém estiver interessado:

void escreveCaracter(char c, int n)
{
int i;
for(i=0; i<n; i++)
{
	putchar(c);
}
}

void escreveNumeroAsc(int a, int b)
{
while(a<=b)
{
printf("%2d",a++);
}
}

void escreveNumeroDesc(int a, int b)
{
while(a>=b)
{
printf("%2d", a--);
}
}

void piramid_11 (int N)
{
int i=N;

while(N>=2 && i>=1)
{
	/*meter os espaços antes da linha*/
	escreveCaracter(' ', 2*(N-i));

	/*escrever primeira metade*/
	escreveNumeroAsc(1, i);

	/*escrever segunda metade*/
	escreveNumeroDesc(i-1, 1);

	/*decrementaaaaahhh!!*/
	i--;
	putchar('\n');

}
}

int main()
{
int n;
do
{
printf("Escrever a piramide para quantas linhas? ");
scanf("%d", &n);
printf("\n");
} while(n<2);
piramid_11(n);
return 0;
}
 

cumps


XX SINFO - Semana Informática

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jarsantos

void imprimeEspacos(int tamanho)
{
for(int i = tamanho; i > 0; i--)
	printf(" ");
}

void imprimeLinha(int tamanho)
{
int metade;

metade = (tamanho / 2) + 1;

for(int i = 1; i <= metade; i++)
	printf("%d ", i);

metade = tamanho - metade;

for(int i = metade; i > 1; i--)
	printf("%d ", i);

printf("1\n");
}


void piramide(int num_linhas)
{
int tamanhoUltimaLinha = (num_linhas * 2) - 1;

imprimeEspacos(2 * num_linhas - 2);
printf("1\n");

for(int i = 3, s = 2 * num_linhas - 4; i <= tamanhoUltimaLinha; i += 2, s -= 2)
{
	imprimeEspacos(s);
	imprimeLinha(i);
}
}

void piramideInversa(int num_linhas)
{
int tamanhoPrimeiraLinha = (num_linhas * 2) - 1;

for(int i = tamanhoPrimeiraLinha, s = 0; i > 1; i -= 2, s += 2)
{
	imprimeEspacos(s);
	imprimeLinha(i);
}

imprimeEspacos(2 * num_linhas - 2);
printf("1\n");
}


int main(array<System::String ^> ^args)
{
int num_linhas;

printf("Deseja uma piramide de quantas linhas? ");
scanf("%d", &num_linhas);

printf("\n");
piramide(num_linhas);

printf("\n");
piramideInversa(num_linhas);

scanf("%d", &num_linhas);
}

Atenção: fiz isto no visual studio como projecto de C++, mas acho que funciona para C...tirando a definição da estrutura para receber argumentos do main.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.