Soluções: Aula prática 10


Parte B.


6. Escreva um programa que  faz o desenho dum triângulo de Pascal com oito (8) linhas. Como se sabe, este triângulo tem muitas propriedades interessantes para as matemáticas e as estatísticas. Nele encontramos números primos, números triangulares, a serie de Fibonacci, combinatória, etc.
{-----------------------------------------------------}
program Tpascal;
{programa que constroi o triângulo de Pascal com 8 linhas. Pode ser adaptado
a qualquer tamanho. P.Serendero }
uses crt;
const max_col = 15;
      max_lin = 8;
var centro: word;
    a : array[1..max_lin, 1..max_col] of word;
{--------------------------------------------------------------------}
procedure limpar_array;
{procedimento que inicializa todo o arranjo com zeros }
var i,j : word;
begin
    for  i:= 1 to max_lin do
         for j:= 1 to max_col do
             a[i, j]:= 0;
end;
{------------------------------------------------------------------------}
function SomaDiag(lin, col: word):word;
{esta função calcula o valor a inserir numa posição, que corresponde a
soma dos valores existentes nas diagonais da linha precedente }
begin
    if (col+1 > max_col) then
       SomaDiag:= a[lin-1, col-1]
    else
       SomaDiag:= a[lin-1, col-1] + a[lin-1, col+1];
end;
{-------------------------------------------------------------------}
procedure imprimir;
{imprime o triangulo de Pascal. Cada posiçãoo que tem 0 ‚ impressa como
um espaço livre. }
var lin, col, i : word;
begin
  clrscr;
  for i:= 1 to 3 do writeln;

  for lin:= 1 to max_lin do
      begin
          write('             ');
          for col:= 1 to max_col do
              if (a[lin, col] = 0) then
                   write('  ')
              else write(a[lin, col]);
          writeln;
      end;
end;
{----------------------------------------------------------------}
function centro_linha: word;
{inserir um 1 no centro do array correspondente a primeira linha }
begin
     centro_linha:= (max_col div 2) + 1;
end;
{--------------------------------------------------------------------}
procedure constroi_triangulo(centro: integer);
{sen optimiza‡äes. Verifica todas as posições para construção do triângulo}
var lin, col, inicio : word;
begin
     a[1][centro]:= 1;           {no centro da primeira linha so um 1 }
     for lin:= 2 to max_lin do   {algoritmo para as restantes linhas }
        begin
            centro:= centro - 1;
            for col:= centro to max_col do
                a[lin, col]:= SomaDiag(lin, col);
        end;

end;
{--------------------------------------------------------------------}
begin
      limpar_array;
      centro:= centro_linha;
      constroi_triangulo(centro);
      imprimir;
      readln;
end.


7.
Escreva um programa que guarda a informação sobre 10 elementos a sua escolha da tabela periódica de elementos e que permita a sua consulta. (actualmente esta tabela tem 103 elementos como sabe.)
Para fazer, crie um array de registos (“record”) em Pascal onde vai armazenar toda a informação interessante para cada elemento: Número, Nome, Símbolo, camadas, massa, ponto ebulição, ponto de fusão, nome do(s) descobridor(es),  etc. Escolha pelo menos cinco informações distintas sobre cada elemento. Lembre-se que cada tipo de dado distinto merece também um tipo distinto em Pascal.
Uma vez carregada a tabela, faz uma função que quando é dado o número do elemento, a função devolve a posição (indice) na matriz onde está situado o elemento. Isto pela sua vez permite a um outro procedimento mostrar os dados armazenados no correspondente registo.

{--------------------------------------------------------------------------}
program tabelap;
Uses Crt;
type elemento = record
              numero     : integer;
              nome       : string[25];
              simbolo    : string[5];
              camadas    : real;
              massa      : real;
            end;

var  tabela:  array[1..10] of elemento;
     i : word; r: char;
{------------------------------------------}
procedure procura_mostra(n: integer);
begin
     writeln('      Elemento seleccionado: ');
     writeln('numero : ',tabela[n].numero);
     writeln('nome   : ',tabela[n].nome);
     writeln('simbolo: ',tabela[n].simbolo);
     writeln('camadas: ',tabela[n].camadas:0:4);
     writeln('massa  : ',tabela[n].massa:0:4);
     readln;
end;
{--------------------------------------------------------------}
procedure carrega_elemento(n:integer);
begin
     writeln('Favor entrar os dados dum elemento: ');
     write('numero : '); readln(tabela[n].numero);
     write('nome   : '); readln(tabela[n].nome);
     write('simbolo: '); readln(tabela[n].simbolo);
     write('camadas: '); readln(tabela[n].camadas);
     write('massa  : '); readln(tabela[n].massa);
end;
{---------------------------------------------------------------}
begin
    clrscr;
    for i:=1 to 10 do
        carrega_elemento(i);
    readln;
    clrscr;
    r:= 'x';

    while (r <> 'n') do
       begin
            write('Qual elemento quer ver? '); readln(i);
            procura_mostra(i);
            writeln; write('Deseja continuar? '); readln(r);
       end;
    writeln('vocˆ decidiu terminar. Adeus.');
    readln;
end.