Advertisement
apollw

programa_piramide

Mar 23rd, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.35 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. main(){
  4.  
  5. int n,i,total;/*O total define o número de repetições do laço de impressão e também o valor máximo de posições do vetor.*/
  6. int vetor[30],n_inicial,n_final;/*n_inicial e n_final representam, respectivamente, a 1ª e a última posições do vetor.*/
  7.  
  8. /*Primeiro definimos o número de alocações que o usuário quiser*/
  9.  
  10. puts("Entre com o numero desejado:\n");
  11.  
  12. scanf("%d",&n);
  13. puts("\n");
  14.  
  15. /*Veja que "total" é igual a "n"*/
  16.  
  17. total=n;
  18.  
  19. /*Esse número sera colocado no índice do vetor e gerará "n" alocações*/
  20. /*Agora geraremos automaticamente os elementos do vetor*/
  21.  
  22. for(i=1;i<=n;i++)
  23.     vetor[i]=i;
  24.  
  25. /*Agora, desenvolver o algoritmo para eliminar a primeira posição e a última do vetor. Devemos definir que vetor[1] é
  26. o elemento n-inicial.*/
  27.  
  28. n_inicial=vetor[1];
  29.  
  30. /*Definimos o elemento n-final, que é simplesmente o vetor [n]. Por exemplo, Uma entrada de 5 posições, o n_inicial,
  31. a partir do elemento 1, é o número 1, e o vetor[n] é igual ao elemento n_final, que é o 5. */
  32.  
  33. n_final=vetor[n];
  34.  
  35. /**Essa parte não aparecerá, apenas se for da vontade do programador de verificar essas variáveis**/
  36. /*
  37. puts("Vetor N-INICIAL");
  38. printf("%d\n",n_inicial);
  39. puts("\n");
  40.  
  41. puts("Vetor N-FINAL");
  42. printf("%d\n",n_final);
  43. puts("\n");*/
  44.  
  45. /**---------------Agora o algoritmo para imprimir o vetor sem o n_inicial e sem o n_final--------------------------**/
  46.  
  47. /*As condições são: "De n_inicial+1" até "n_final" sem incluir n_final. Ou seja, Sempre eliminará a primeira e
  48. a última posição do vetor.*/
  49.  
  50. /*Agora, a extensão que é mais importante:
  51. Primeiro, criamos um laço for que irá repetir o laço de impressão do vetor, com cada vez menos elementos.
  52. Teremos um valor n que servirá de índice de contagem para o laço que repete o algoritmo de redução.*/
  53.  
  54. /*Observe que o valor de n é igual ao valor de entrada do usuário. Porque assim podemos pegar exatamente
  55. o tamanho do vetor, aplicar isso na redução do vetor, que será a cada nova rodada do laço assim:
  56.  
  57. Suponha que o usuário definiu 10 elementos.
  58.  
  59. Ciclo 1 do laço de dentro imprime:
  60. 1 2 3 4 5 6 7 8 9 10
  61.  
  62. Observe que total vai até 10, ou seja, 10 elementos, ou 10 posições de memória.
  63. Queremos, no ciclo 2 do laço, reduzir o primeiro elemento e o último elemento. São eles, respectivamente,
  64. as variáveis n_inicial e n_final.
  65.  
  66. Ou seja, queremos que o laço agora tenha as condições: (de n+n_inicial+1), sendo que n começa de 0. Em passos, significa:
  67.  
  68. Ciclo 1: n=0 (com limite 10). Início é n+n_inicial (n_inicial, no caso, é 1) + 1 (ou seja, o elemento seguinte ao n_inicial).
  69. Isso dá: 0+1+1 (ou seja, começa do dois), e termina no n_final - n, ou seja, no ciclo 1, n_final é 10 - n (que é 0), e fica no 10.
  70.  
  71. Ciclo 2: n=1. n + n_inicial+1 = (1+1+1), ou seja, começa da posição 3. E terminaria na posição n_final - n, ou seja,
  72. na posição (10-1), a penúltima.
  73.  
  74. Ciclo 3: n=2. n+ n_inicial+1 = (2+1+1)=posição 4. E termina em n_final - 2=posição 8.
  75.  
  76. ......
  77. ......
  78. ......
  79.  
  80. Ciclo n: n=n=10. n+n_inicial+1 = 10+1+1, ou seja, sem início. E o fim é n_final - n= 0.
  81.  
  82. Assim se forma a pirâmide.
  83.  
  84. */
  85.  
  86. /*Agora imprimimos apenas a base da pirâmide*/
  87.  
  88. for(i=1;i<=n;i++)
  89.     printf("%d ",vetor[i]);
  90.     puts("\n");
  91.  
  92. /*E abaixo dela, imprimimos o restante do algoritmo de redução:*/
  93.  
  94. /*Vamos apenas definir um método de adicionar um "espaço" a cada nova repetição do algoritmo, para formar a figura da
  95. pirâmide.*/
  96.  
  97. /*Analisando os laços abaixo:
  98. O primeiro FOR é para repetir o algoritmo geral de redução. Ou seja, ele vai repetir n vezes, cada n vez diminuindo mais a
  99. pirâmide. Logo após ele, colocamos logo um printf vazio de dois espaços. Ou seja, ocorre isso:
  100.  
  101. ciclo 1: imprime printf, imprime ciclo 1;
  102.  
  103. Depois, criamos um printf com um laço de repetição pra ele mesmo, isso ainda fora do algoritmo de repetição em si. O laço dele
  104. deve ter o limite em n. O efeito é:
  105.  
  106. printf dois espaços, printf o primeiro ciclo; depois, a partir do primeiro ciclo, o segundo printf imprimirá cada vez mais
  107. espaços, o que ajustará a pirâmide perfeitamente.
  108. */
  109.  
  110. for(n=0;n<total;n++){
  111.     printf("  ");
  112.     for(i=0;i<n;i++){
  113.     printf("  ");}
  114.     for(i=n_inicial+n+1;i<n_final-n;i++){
  115.     printf("%d ",vetor[i]);}
  116.     puts("\n");
  117. }
  118. puts("\n");
  119.  
  120. system("pause");
  121. return 0;
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement