NONIUS
nš15 ISSN 0870-7669 Nov.-Dez. 1988 / Jan. 1989
Folha Informativa do Projecto "Computação no Ensino da Matemática"

QUESTÕES & RESPOSTAS

Nesta Secção o "nonius" tentará responder a todo o tipo de questões relacionados com a utilização dos computadores que qualquer interessado lhe envie.

P- Na secção "QUESTÕES & RESPOSTAS" do nº1 do nonius foi editado um artigo sobre usar o computador (spectrum) para representar gráficos de funções reais de variável real. Possuindo um PC compatível tentei fazer a adaptação do programa, escrevendo-o em GW-BASIC. Apesar de todos os esforços, não consegui que esta linguagem aceitasse a intrução DEF FN F(x) = VAL f$, isto é, embora a linha seja aceite, ao "correr" o programa ocorre a mensagem de erro "type mismatch" ao ser lida a linha que define y como variável dependente (por ex. 150 Y=e*FN F(x)). Constatei que o programa "corre" perfeitamente se a função for definida directamente, isto é, fazendo por ex. DEF FN F(x)=x^2-x+2.

R - Este tipo de problemas é frequente quando se utiliza uma versão da linguagem BASIC e se pretende adaptar um programa a uma versão diferente. Cada versão desta linguagem pretende oferecer características melhores que as outras e, para isso, definem instruções que não existem em mais nenhuma versão, ou que existem noutras versões mas executam uma tarefa completamente diferente, É o caso desta instrução VAL. No caso da versão utilizada no Spectrum, esta instrução calcula uma expressão dada como sendo carácter, como se fosse uma expressão numérica, substituindo todas as variáveis pelos valores que elas representem, aquando do seu cálculo, No entanto, no caso do GW-BASIC, esta instrução tem um desempenho bastante diferente. A instrução VAL neste caso apenas recupera uma expressão numérica, dentro de uma expressão carácter, se esta expressão numérica for de facto um número. Caso, na expressão carácter, figurem símbolos que não sejam números estes serão ignorados.

O único processo que se nos afigura possível para resolver este problema é construir uma gramática que será utilizada para interpelar a expressão carácter que foi fornecida pelo utilizador. Esta gramática deverá ser capaz de reconhecer as expressões matemáticas através de símbolos que essa gramática define. Por exemplo, sempre que na expressão carácter se encontre a letra s, isso significaria que se pretende calcular o sin(x) , sempre que se encontre a letra e, isso significaria que se pretende calcular o cos(x) etc,. Deste modo seria possível construir uma gramática rudimentar que permitiria analisar expressões simples. No entanto este processo tem limitações. A construção da gramática, apesar de ser uma ideia eficiente, levanta muitos problemas em BASIC. A análise de expressões com parêntesis é complexa. Em princípio a análise de expressões com parêntesis é feita recursivamente, isto é, a mesma gramática que detecta a presença de parêntesis é usada para analisar a expressão que está entre os parêntesis, esquecendo temporariamente a expressão total para tratar de apenas uma parte. Em BASIC isto não é permitido, pelo menos, não conhecemos nenhuma versão da linguagem BASIC que permita usar a recursividade, o que limita a eficiência deste processo,

Lançamos aqui um desafio: possivelmente os leitores encontraram outros processos de tornear esta dificuldade. Neste caso agradecemos que esses processos nos sejam enviados para que os possamos divulgar.

Finalmente, um comentário acerca do facto de o computador aceitar a expressão DEF FN F(x)=VAL f$. A versão GW-BASIC, ao contrário da versão que corre no Spectrum, não analisa a sintaxe das instruções quando as escrevemos, mas apenas aquando da sua execução, daí o facto de o computador aceitar esta instrução mas não ser capaz de a executar. Esta é mais uma das peculiaridades com que nos defrontamos quando se trabalha em BASIC e se muda de interpretador. Neste caso é necessário reaprendermos parte dos nossos hábitos de trabalho para não cairmos constantemente em erros.

 

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
voltar frente
[ Início do Número 15] [ Menu Principal ]