Diferenças entre edições de "Programas"

De GNU Octave
Ir para: navegação, pesquisa
(Edição de scripts (em Windows))
(Edição de scripts (em Linux))
Linha 48: Linha 48:
 
=== Edição de scripts (em Linux) ===
 
=== Edição de scripts (em Linux) ===
  
No Linux, use o QtOctave.
+
No Linux, sugere-se a utilização do QtOctave.
  
 
=== Exercícios ===
 
=== Exercícios ===

Revisão das 17h56min de 4 de novembro de 2012

Para resolver problemas mais ou menos complexos, em vez de se escreverem os comandos no prompt do Octave, podemos escrever os mesmos numa script. Chama-se script a esta sequência de comandos guardados. Estão prontos a serem executados a qualquer momento e podem-se enviar para outros colegas, para executarem a mesma script. Os comandos são guardados num documento com a extensão .m. Tudo o que se escreve no prompt, pode-se escrever numa script.

Portanto, sempre que haja necessidade de repetir diversas vezes as mesmas operações, torna-se mais interessante juntar essas operações numa script.

Uma script é invocada pelo seu nome, sem a extensão .m. Ao ser invocada, todas as instruções são processadas, como se tivessem sido lançadas no prompt do Octave.

Exemplo

A primeira script que vamos escrever sistematiza o cálculo da área de um retângulo. Obviamente é um cálculo muito simples, mas a ideia é começar com uma script muito pequena.

# minha primeira script em octave
# para executar a script, basta fazer no prompt do octave:
# arearetangulo
#
largura = input("Largura?\n");
comprimento = input("Comprimento?\n");
area = largura * comprimento;
fprintf("A área é: %g\n", area);

Em primeiro lugar, é preciso escrever as instruções apresentadas num editor de texto qualquer. Qualquer editor serve, desde que guarde o documento em formato de texto. TEM QUE FICAR GUARDADO COM O NOME arearetangulo.m e obrigatoriamente na pasta onde está a executar o Octave.

Depois de guardada a script na pasta atual do Octave (reveja a forma de saber e mudar a pasta atual) inicia-se a mesma utilizando o nome (sem a extensão). Exemplo:

octave:2> arearetangulo
Largura?
90
Comprimento?
120
A área é: 10800

Edição de scripts (em Windows)

Para editar as scripts, use um editor simples como o Notepad em Windows. Confirme que as script estão a ser gravadas com a extensão .m. Confirme sempre, dentro do Octave que as scripts existem, fazendo:

dir *.m

Se quiser investir um pouco de tempo, explore a GUI (interface gráfica) existente para Windows. Em vez de arrancar o Octave com o atalho Octave 3.6.2, escolha no menu iniciar, dentro de Todos os Programas, e depois dentro de GNU Octave (3.6.2) a programa Octave 3.6.2 (Graphical User-Interface).

É uma interface ainda pouco robusta, mas que inclui um editor. Esse editor é sensível à sintaxe do Octave. Na imagem seguinte, mostra-se esta GUI, com o editor de scripts aberto.

Octave gui com editor.png

Edição de scripts (em Linux)

No Linux, sugere-se a utilização do QtOctave.

Exercícios

  1. Escreva uma script para calcular a velocidade de um veículo, dada a distância percorrida em Km e o tempo em minutos.
  2. Escreva uma script que calcula a idade de uma pessoa, sabendo o ano de nascimento
  3. Dado o valor em Fahreneit, calcule a correspondente temperatura em Celcius, escrevendo uma script para o efeito.

Âmbito das variáveis

Na seguinte script, utiliza-se uma variável idade que tem o mesmo nome que a script. Neste caso, temos uma sobreposição que é vivamente desaconselhada. No caso concreto, depois de correr a script, a mesma não poderá ser novamente executada, porque idade passa a ser uma referência para a variável e não para a script.

# idade.m
# script octave
# calcular a idade de uma pessoa
#
# ESTA SCRIPT TEM UM ERRO.
# Esta script usa uma variável global 'idade' que é igual ao nome da script 'idade.m'.
# Não se deve usar variáveis em scripts iguais aos nomes das scripts.
#
# Desta forma, só se consegue chamar a script uma vez
# Depois disso, 'idade' passa a ser uma referência para a variável e não para a script.
ano = input("Ano de nascimento?\n");
idade = 2012 - ano;
printf("Você tem %d anos de idade\n", idade);