O exemplo a seguir tem por objetivo ilustrar a forma do texto com que se parecerá os algoritmos a serem executados pelo interpretador Hall.
Proposição: O exemplo do Boi mais gordo e o boi mais magro. Num frigorífico existem 90 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Fazer um algoritmo que escreva o número e peso do boi mais gordo e do boi mais magro.
Breve descrição lógica
O processo consiste em ler os dados de cada boi até completar-se o número total de bois no frigorífico, no exemplo, 90. Percebe-se aqui, facilmente, uma estrutura de repetição com iteração de 1 (um) na variável de controle. Qualquer laço pode ser usado, por exemplo (enquanto, repita ou para).
Para cada boi lido é necessário descobrir se ele é mais pesado ou mais leve do que os bois que foram lidos antes dele. Para tanto, devemos testar se o peso do boi atual é maior do que o maior peso encontrado até então e, por outro lado, devemos testar se o peso do boi atual é menor do que o menor peso encontrado até então. Esses testes são realizados com instruções de decisão dentro do laço de leitura. A questão então é descobrir como comparar o peso do primeiro boi, uma vez que, não temos valores anteriores para comparação.
A solução é considerar o peso do primeiro boi lido como sendo o maior peso e o menor lido até então. Desse modo, precisamos de duas variáveis para guardarmos os resultados parciais das comparações, uma para armazenar o maior peso e outra para armazenar o menor peso. Assim, para cada boi que for lido, basta comparar-mos o seu peso com os valores atuais nessas variáveis.
Ao final do processo (90 bois) elas terão armazenado o maior e o menor peso.
Há duas formas de se atribuir o peso do primeiro boi a essas variáveis:
1 - Faz-se uma leitura inicial de apenas um boi e atribui-se os valores lidos a essas variáveis e incrementa-se o número de bois lidos em 1. O restante dos bois são então lidos pelo laço, ou então,
2 - Inicializa-se as variáveis com valores tais que, logo na leitura do primeiro boi elas sejam atualizadas para os valores adequados.
Vejamos, se a variável que irá armazenar o maior peso for inicializada com zero, então na primeira leitura ela será atualizada pois um boi sempre tem peso maior que zero. Por outro lado, se a variável que irá armazenar o menor peso for inicializada com um valor grande o suficiente, então também ela será atualizada na leitura do primeiro boi, pois o boi terá peso inferior a esse valor previamente escolhido.
Desse modo conseguimos inicializar essas variáveis e utilizamos apenas uma leitura, dentro do laço naturalmente.
No problema também é pedido que se informe o número de identificação do bois, neste caso, precisamos de mais duas variáveis que também estarão sendo atualizadas a cada leitura
Codificação do Algoritmo
algoritmo ( )
{
inteiro NBoi; // numero de identificacao do boi
inteiro qtdBois; // numero de bois
real PBoi; // peso do boi
real PMG; // peso do boi mais gordo
real pmm; // peso do boi mais magro
inteiro NMG; // identificacao do boi mais gordo
inteiro nmm; // identificacao do boi mais magro
qtdBois := 0;
PMG := 0;
pmm := 2000;
enquanto ( qtdBois <= 90 )
{
leia ( "informe o numero de identificacao: ", NBoi );
leia ( "informe o peso do boi: ", PBoi );
se ( PBoi > PMG )
{
PMG := PBoi;
NMG := NBoi;
}
se ( PBoi < pmm )
{
pmm := PBoi;
nmm := NBoi;
}
qtdBois := qtdBois + 1;
}
escreva ( "Boi mais gordo: ", NMG, " pesou ", PMG );
escreva ( "Boi mais magro: ", nmm, " pesou ", pmm );
}
Digite o texto acima e salve-o em um arquivo denominado por exemplo, BOI.HAL (o nome do arquivo deve seguir a orientação de nomes de seu sistema operacional) e execute-o com o interpretador. Basta digitar na linha de comando Hall BOI ou Hall Boi.hal e ...
Para testar, convém utilizar um número de bois menores do que o ditado pelo exercício, por exemplo 5, pois de outra forma a instrução repetitiva com 90 bois irá demorar demasiadamente.