Soluções da aula prática 9



1.
PROGRAM Banco;

Var taxa: real;
    capital: real;
    i, ano1, ano2: integer;

begin
  Write('Capital : ');
  ReadLn(capital);
  Write('Taxa de juros: ');
  ReadLn(taxa);
  Write('ano comeco: ');
  ReadLn(ano1);
  Write('ano fim: ');
  ReadLn(ano2);
  WriteLn(i,'  ',capital:0:2);
  for i := ano1+1 to ano2 do
    begin
      capital := (1+taxa/100.0)*capital;
      WriteLn(i,'  ',capital:0:2);
    end;
end.



2.
Faz parte do trabalho pratico


3.
PROGRAM ContaAleat;

Var bins: array[1..10] of integer;
    i: integer;
    binnr: integer;
    aleat: real;

begin
   (* inicializar o array: *)
  for binnr := 1 to 10 do
    bins[binnr] := 0;
   (* gerar 1000 numeros: *)
  for i := 1 to 1000 do
    begin
        (* gerar um numero: *)
      aleat := Random;
        (* determinar o numero da caixa: *)
      binnr := Trunc(10*aleat)+1;
        (* aumentar o conteudo da caixa: *)
      bins[binnr] := bins[binnr] + 1;
    end;
   (* mostrar o resultado: *)
  for binnr := 1 to 10 do
    begin
      write((binnr-1)/10.0:0:1,'..',binnr/10.0:0:1,'   : ');
      writeln(bins[binnr]);
    end;
end.

possível output:
0.0..0.1   : 100
0.1..0.2   : 99
0.2..0.3   : 101
0.3..0.4   : 97
0.4..0.5   : 90
0.5..0.6   : 108
0.6..0.7   : 103
0.7..0.8   : 90
0.8..0.9   : 110
0.9..1.0   : 102



4.
PROGRAM Primos100;

Var primos: array[1..100] of integer;
    numero: integer;
    nprimos: integer;

FUNCTION IsPrimo(n: integer): boolean;
 (* retorna TRUE se n e numero primo *)
Var i: integer;
begin
  IsPrimo := TRUE;
  For i := 2 To n-1 Do
    if (n Mod i) = 0 then  (* a Mod b = 0 significa a e divisivel pelo b *)
      IsPrimo := FALSE;
end;

begin
  (* Nao sabemos quantos vezes temos de executar o ciclo *)
  (* no minimo uma vez: entao ciclo repeat-until *)
  (* mas tambem facilmente possivel com ciclo while-do *)
  (* Ao primeiro inicializar os parametros de controlo: *)
  nprimos := 0;   (* ainda nao temos nenhum primo *)
  numero := 1;    (* vamos comecar com determinar se 1 e primo *)
  repeat
    If IsPrimo(numero) then
      begin
         (* se numeor for primo, faz a administracao: *)
        nprimos := nprimos + 1;
        primos[nprimos] := numero;
      end;
    numero := numero + 1;
  until (nprimos=100);
    (* mostrar o resultado: *)
  for nprimos := 1 to 100 do
    Write('primo',nprimos,'=',primos[nprimos],' ');
end.

output (recortado):
primo1=1 primo2=2 primo3=3 primo4=5 primo5=7 primo6=11 primo7=13 ... primo100=523