Informática e Computação - Ficha de Trabalho nº10 - Exercício 1 - Proposta de resolução
Program totoloto;
{Calcula chaves do Totoloto e apresenta-as ordenadas}
uses wincrt;
var
vector:array [1..7] of integer;
aleatorio,n:integer;
sorteados_validos:integer;
existe:boolean;
procedure inserir_ordenadamente_no_vector(num:integer);
var
n,posicao_de_insercao:integer;
begin
{encontra a posicao de insercao correcta}
posicao_de_insercao:=1;
while ((num>vector[posicao_de_insercao]) and (vector[posicao_de_insercao]<>0))
do inc(posicao_de_insercao);
{desloca uma celula os valores existentes
para alocar espaco para a nova insercao}
for n:=6 downto posicao_de_insercao do vector[n]:=vector[n-1];
vector[posicao_de_insercao]:=num;
end;
{inicio do programa principal}
BEGIN
{inicializa o motor de geração de nºs aleatórios}
randomize;
repeat
{Gera uma numero aleatrio entre 1 e 49}
aleatorio:=random(49)+1;
if (sorteados_validos=0) then
begin
vector[1]:=aleatorio;
sorteados_validos:=sorteados_validos+1;
end
else
begin
existe:=false;
for n:=1 to 6 do if (vector[n]=aleatorio) then existe:=true;
if (existe=false) then
begin
if (sorteados_validos=6) then vector[7]:=aleatorio
else inserir_ordenadamente_no_vector(aleatorio);
sorteados_validos:=sorteados_validos+1;
end;
end;
until (sorteados_validos=7);
{visuaizar a chave}
for n:=1 to 6 do write(' ',vector[n]);
writeln(' Suplementar:',vector[7]);
END.
© 2003 Grupo de Informática da ESAB
Informática e Computação - Ficha de Trabalho nº11 - Exercício 2 - Proposta de resolução
Program quadrado_magico;
{Procura encontrar aleatoriamente quadrados mágicos}
uses wincrt;
const DIM=3; {dimensão do quadrado}
var
quadrado:array [1..DIM,1..DIM] of integer;
encontrou, linhas_constantes, colunas_constantes, diagonais_constantes:boolean;
n,linhas, colunas, linha, coluna, soma, soma_anterior:integer;
contador:longint;
Procedure preencher_quadrado_aleatoriamente;
var n,lin,col:integer;
begin
for n:=1 to (DIM*DIM) do
begin
repeat
lin:=random(DIM)+1;
col:=random(DIM)+1;
until (quadrado[lin, col]=0);
quadrado[lin, col] := n;
end;
end;
BEGIN
randomize;
encontrou:=false;
repeat
{inicializar matriz}
for linhas:=1 to DIM do
for colunas:= 1 to DIM do quadrado[linhas,colunas]:=0;
preencher_quadrado_aleatoriamente;
{testar se é mágico}
{verificar colunas}
colunas_constantes:=true;
for colunas:= 1 to DIM do
begin
soma:=0;
for linhas:= 1 to DIM do soma:=soma+quadrado[linhas,colunas];
if (colunas>1) then if (soma<>soma_anterior) then colunas_constantes:=false;
soma_anterior:=soma;
end;
{verificar linhas}
if (colunas_constantes=true) then
begin
linhas_constantes:=true;
for linhas:= 1 to DIM do
begin
soma:=0;
for colunas:= 1 to DIM do soma:=soma+quadrado[linhas,colunas];
if (soma<>soma_anterior) then linhas_constantes:=false;
soma_anterior:=soma;
end;
© 2003 Grupo de Informática da ESAB
end;
{verificar diagonais}
if (colunas_constantes=true) and (linhas_constantes=true) then
begin
soma:=0;
diagonais_constantes:=true;
for n:=1 to DIM do soma:=soma+quadrado[n,n];
if (soma<>soma_anterior) then diagonais_constantes:=false;
soma:=0;
for n:=1 to DIM do soma:=soma+quadrado[n,DIM+1-n];
if (soma<>soma_anterior) then diagonais_constantes:=false;
end;
{mostrar número de tentativas efectuadas de 10 mil em 10 mil}
contador:=contador+1;
if (contador mod 10000 = 0) then writeln('Tentativa nº ',contador);
{se for quadrado mágico parar e mostrar, senão continuar a procurar}
if((colunas_constantes=true) and (linhas_constantes=true) and
(diagonais_constantes=true)) then
begin
encontrou:=true;
for linhas:=1 to DIM do
begin
for colunas:=1 to DIM do write('|',quadrado[linhas, colunas]);
writeln('|');
end;
end;
until (encontrou=true);
writeln('Solução encontrada após ', contador, ' tentativas.');
END.
© 2003 Grupo de Informática da ESAB
Download

Considere que tem de efectuar pagamentos recorrendo apenas a