Como as estruturas de controle originais de Fortran eram insuficientes?

8

Na minha classe de conceitos de linguagem de programação, foi mencionado que as estruturas de controle originais de Fortran eram insuficientes. Aludiu-se que eles eram muito semelhantes às instruções da máquina para o IBM 704. Foi esse o caso? O que exatamente os tornou insuficientes?

Engenheiro Mundial
fonte
O IF aritmético do FORTRAN era essencialmente uma otimização da operação de ignorar o IBM 704.
Yannis

Respostas:

10

Bem, vamos ver as primeiras versões do Fortran tinham IF GOTOe DO.

Houve várias variações no IF e GOTO, incluindo GOTOs atribuídos e GOTO computado, que foram como uma declaração CASE.

Portanto, além dos loops de DO, todas as instruções de controle eram variações no IF e GOTO envolvendo números de instrução codificados. O resultado foi mais aletria do que espaguete.

O próprio loop DO era problemático, pois era estritamente "faça até" com o teste na parte inferior do loop; portanto, não havia como ignorar a primeira iteração além de precedê-la com mais um "IF (cond) GOTO 9999" .

Portanto, como a maioria das estruturas de controle era "GOTO roupa número", qualquer alteração substancial no código envolveria muitas alterações suscetíveis a erros nos números das linhas de destino.

O loop DO precisava ser complementado com um GOTO para transformá-lo em um DO WHILE.

Os primeiros Fotrans tinham um "GOTO" do formulário.

IF (VAR) 100,200,300

O que significa que se VAR for <0, vá para a instrução 100. Se = 0, então, para a declaração 200, se> 0, para a instrução 300.

No geral, não foi uma tentativa tão ruim. O fato de você poder escrever fórmulas parecidas com as que o professor escreveu no quadro-negro era o principal recurso do FORTRAN; o fluxo do programa precisou esperar alguns anos para recuperar o atraso.

James Anderson
fonte
-1

O lado ruim do FORTRAN IV foi que todas as "estruturas" de controle (incluindo loops) dependiam dos rótulos. Então eles forneceram controle não estruturado. Eles eram muito poderosos. Que tal, por exemplo, ramificando-se em um rótulo dentro de um loop e, posteriormente, ramificando-se novamente ...

Richard John Botting
fonte