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

De GNU Octave
Ir para: navegação, pesquisa
(Edição de scripts (em Windows))
(Exercícios)
 
(Há 30 revisões intermédias de 3 utilizadores que não estão a ser apresentadas)
Linha 1: Linha 1:
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.
+
[[Ficheiro:Steve jobs how to think.png]]
  
Portanto, sempre que haja necessidade de repetir diversas vezes as mesmas operações, torna-se mais interessante juntar essas operações numa script.
+
Para resolver problemas mais ou menos complexos, em vez de se escreverem os comandos um a um, podemos agrupar esses mesmos comandos num '''programa'''. Na literatura inglesa do Octave (e do MATLAB) chamam ''scripts'' a estes programas. Ou seja, uma script é esta sequência de comandos guardados. Nesta documentação vamos usar o termo programa para designar uma 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.
+
Os comandos são guardados num documento com a extensão ''.m''. Tudo o que se escreve na linha de comandos do Octave, pode-se escrever num programa. Depois de prontos, os programas podem ser executados quantas vezes se quiser, e podem ser enviados para outros colegas, para executarem o mesmo programa.  
  
==== Exemplo ====
+
Portanto, sempre que haja necessidade de repetir diversas vezes as mesmas operações, torna-se mais interessante juntar essas operações num programa.
  
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 script muito simples.
+
Um programa é invocado pelo seu nome, sem a extensão ''.m''. Ao ser invocado, todas as instruções são processadas, como se tivessem sido lançadas na linha de comandos do Octave.
 +
 
 +
==== Para que queremos os programas ====
 +
 
 +
Os programas têm como vantagem o facto de se escreverem 1 vez e depois se poderem executar muitas vezes.
 +
 
 +
Imagine que pretende calcular a distância entre dois pontos '''P''' e '''Q''' à superfície da terra, sabendo as coordenadas dos mesmos (latitude e longitude).
 +
 
 +
[[Ficheiro:Illustration of great-circle distance.svg.png]]
 +
 
 +
Se for preciso calcular essa distância apenas uma vez, escreve-se uma sequência de comandos da seguinte forma:
 +
<syntaxhighlight>
 +
agueda = [40.5832343,-8.4542053];
 +
aveiro = [40.6393801,-8.6533827];
 +
 
 +
graus2radianos = pi/180.0;
 +
# phi = 90 - latitude
 +
phi1 = (90.0 - agueda(1))*graus2radianos;
 +
phi2 = (90.0 - aveiro(1))*graus2radianos;
 +
# theta = longitude
 +
theta1 = agueda(2)*graus2radianos;
 +
theta2 = aveiro(2)*graus2radianos;
 +
aux = sin(phi1)*sin(phi2)*cos(theta1-theta2) + cos(phi1)*cos(phi2);
 +
arco = acos(aux);
 +
metros = arco * 6378137
 +
</syntaxhighlight>
 +
 
 +
E se for preciso calcular a distância entre Braga e Vila Real? Escrevem-se de novo todos os comandos? E se for novamente preciso calcular a distância entre Viana do Castelo e Ponte de Lima?
 +
 
 +
Para reaproveitar as fórmulas que foram escritas, escreve-se um programa, uma única vez. Depois o mesmo é executado quantas vezes quiseremos, mas com dados diferentes. Isto é, sempre que corrermos o programa, pedimos aos utilizador que nos diga qual é o ponto de origem e destino.
 +
 
 +
Na prática, as instruções anteriores são transformadas no seguinte programa, que é guardado num documento '''distancia.m''':
 +
<syntaxhighlight>
 +
# ver as coordenadas no openstreetmap.org ou no maps.google.pt
 +
origem = input("Ponto de origem? (vetor [latitude, longitude]): ");
 +
destino = input("Ponto de chegada? (vetor [latitude, longitude]): ");
 +
grau2radianos = pi/180.0;
 +
# phi = 90 - latitude
 +
phi1 = (90.0 - origem(1))*grau2radianos;
 +
phi2 = (90.0 - destino(1))*grau2radianos;
 +
# theta = longitude
 +
theta1 = origem(2)*grau2radianos;
 +
theta2 = destino(2)*grau2radianos;
 +
aux = sin(phi1)*sin(phi2)*cos(theta1-theta2) + cos(phi1)*cos(phi2);
 +
arco = acos(aux);
 +
metros = arco * 6378137;
 +
printf("Distancia entre os pontos %.1f metros\n", metros);
 +
</syntaxhighlight>
 +
 
 +
Depois, pode-se executar o programa quantas vezes se quiser, da seguinte forma:
 +
<syntaxhighlight>
 +
>> distancia
 +
Ponto de origem? (vetor [latitude, longitude]): [41.5472695,-8.4464405]
 +
Ponto de chegada? (vetor [latitude, longitude]): [41.3018331,-7.7971441]
 +
Distancia entre os pontos 60694.1 metros
 +
>>
 +
</syntaxhighlight>
 +
 
 +
==== Primeiro programa ====
 +
 
 +
O exemplo anterior tem uma fórmula de cálculo complicada. Vamos começar com programas com cálculos mais simples.
 +
 
 +
O primeiro programa 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 um programa (uma script) muito pequeno.
  
 
<syntaxhighlight>
 
<syntaxhighlight>
# minha primeira script em octave
+
# calcula a area de um retangulo, dada a largura e o comprimento
# para executar a script, basta fazer no prompt do octave:
+
# para executar o programa, basta escrever:
 
# arearetangulo
 
# arearetangulo
 
#
 
#
Linha 17: Linha 79:
 
comprimento = input("Comprimento?\n");
 
comprimento = input("Comprimento?\n");
 
area = largura * comprimento;
 
area = largura * comprimento;
fprintf("A área é: %g\n", area);
+
printf("A área é: %g\n", area);
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
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.
 
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 [[Gestão de ficheiros | saber e mudar a pasta atual]]) inicia-se a mesma utilizando o nome (sem a extensão). Exemplo:
+
Depois de guardado o programa na pasta atual do Octave, executa-se o mesmo escrevendo apenas o nome (sem a extensão). Exemplo:
  
 
<syntaxhighlight>
 
<syntaxhighlight>
octave:2> arearetangulo
+
>> arearetangulo
 
Largura?
 
Largura?
 
90
 
90
Linha 33: Linha 95:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Edição de scripts (em Windows) ===
+
Se o programa não correr, confirme que o mesmo está a ser gravado com a extensão .m e está na pasta atual. Para tal, da mesma forma que temos os comandos <syntaxhighlight enclose="none">who</syntaxhighlight> e <syntaxhighlight enclose="none">whos</syntaxhighlight> para ver que variáveis estão definidas, temos um comando <syntaxhighlight enclose="none">what</syntaxhighlight> para saber que programas estão definidos.
 +
 
 +
<syntaxhighlight>
 +
>> what
 +
M-files in directory /home/jgr/Documentos/Aulas/13141S/OCV:
 +
 
 +
  arearetangulo.m      espiral.m            ocv.m
 +
  calculavelocidade.m  idade.m              unnamed2.m
 +
>>
 +
</syntaxhighlight>
 +
 
 +
Alternativamente, pode usar os comandos mais genéricos para saber qual a pasta atual (reveja a forma de [[Gestão de ficheiros | saber e mudar a pasta atual]]) e depois inspecionar os ficheiros .m da pasta fazendo:
  
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:
 
 
<syntaxhighlight>
 
<syntaxhighlight>
 
dir *.m
 
dir *.m
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Se quiser investir um pouco de tempo, explore a GUI existente em 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)''.
+
Se precisar, pode descarregar a versão deste programa <code>arearetangulo.m</code> disponível em http://octave.di.uminho.pt/images/files/.
 +
 
 +
===== Análise do código =====
 +
 
 +
Analisando o programa anterior, podemos desde já salientar alguns aspectos importantes.
 +
 
 +
# Pode-se (e deve-se!) acrescentar comentários. Os comentários são escritos após o símbolo '#' ou '%'. Após este símbolo e até ao fim da linha, é considerado comentário.
 +
# As variáveis são GLOBAIS. Isto é, NUNCA use o nome do programa para uma variável ou vice versa. Este perigo está explicado de forma detalhada na seção [[#Âmbito das variáveis]].
 +
# Dentro do programa, em cada instrução usa-se ';' no final para suprimir a apresentação dessa instrução. O mesmo acontece quando se usa a linha de comandos. Experimente a diferença entre usar ou não o ';' no fim das instruções.
 +
<syntaxhighlight>
 +
octave:1> b=10
 +
b =  10
 +
octave:2> b=b+20;
 +
octave:3>
 +
</syntaxhighlight>
 +
 
 +
===== Importância dos comentários =====
 +
 
 +
Os comentários incluídos nos programas são fundamentais. Todas as linguagens de programação incluem o suporte à inclusão de comentários porque... ''os programas geralmente são complexos e difíceis de ler!'' Os comentários são apenas para serem interpretados pelos humanos e não pelo computador. Por isso, devem ser legíveis e explicar o que faz o programa e como o faz.
 +
 
 +
Até os programadores têm dificuldade em ler o seu próprio código após algum tempo. Por isso, é fundamental escrever comentários na altura em que se escreve o código e justificar as decisões tomadas.
 +
 
 +
O Octave tira partido dos comentários para dar alguma informação sobre o que faz um programa.
 +
 
 +
Neste primeiro programa, começámos por por alguns comentários. Por isso, geralmente depois de usar o comando <syntaxhighlight enclose="none">what</syntaxhighlight> para saber que programas estão disponíveis, usamos o comando <syntaxhighlight enclose="none">help</syntaxhighlight> para saber o que faz um dado programa.
 +
 
 +
<syntaxhighlight>
 +
>> what
 +
M-files in directory /home/jgr/Documentos/Aulas/13141S/OCV:
 +
 
 +
  arearetangulo.m      espiral.m            ocv.m
 +
  calculavelocidade.m  idade.m              unnamed2.m
 +
>> help arearetangulo
 +
`arearetangulo' is a script from the file /home/jgr/Documentos/Aulas/13141S/OCV/arearetangulo.m
 +
 
 +
calcula a area de um retangulo, dada a largura e o comprimento
 +
para executar o programa, basta escrever:
 +
arearetangulo
 +
 
 +
 
 +
Additional help for built-in functions and operators is
 +
available in the on-line version of the manual.  Use the command
 +
`doc <topic>' to search the manual index.
 +
 
 +
Help and information about Octave is also available on the WWW
 +
at http://www.octave.org and via the help@octave.org
 +
mailing list.
 +
>>
 +
</syntaxhighlight>
 +
 
 +
Repare que o Octave mostra os comentários colocados no início do programa. Por isso, comece sempre os programas com alguns comentários.
 +
 
 +
<!--
 +
==== Octave GUI para Windows ====
 +
 
 +
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.
 
É 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.
  
 
[[Ficheiro:Octave gui com editor.png]]
 
[[Ficheiro:Octave gui com editor.png]]
 +
 +
==== QtOctave para Windows ====
 +
 +
Existe uma outra alternativa que é o QtOctave, que pode ser descarregado a partir do [http://www.outsch.org/2011/01/29/qtoctave-0-10-1-for-windows/ blog do autor].
 +
 +
Depois de descarregar o ficheiro qtoctave-0.10.1-win32.zip, com o rato sobre o mesmo, escolha a opção 'Extrair Todos...' para o descompactar.
 +
Destro da nova pasta, e dentro da pasta bin, execute o qtoctave.exe.
 +
 +
Pode criar um atalho no ambiente de trabalho. Escolher Enviar para -> Ambiente de trabalho (criar atalho).
 +
 +
Na primeira vez que é executado, é necessário definir onde está o octave. Para isso, tem que se ir Config->General configuration e depois selecionar Octave. O executável deverá estar em C:\Program Files\Octave-3.6.2\bin\octave-3.6.2.exe.
 +
 +
=== Edição de scripts (em Linux) ===
 +
 +
No Linux, sugere-se a utilização do QtOctave.
 +
 +
-->
 +
 +
=== Programa para gerar gráficos ===
 +
 +
Escreva o seguinte programa <syntaxhighlight enclose="none">grafico.m</syntaxhighlight>:
 +
 +
<syntaxhighlight>
 +
# perguntar o clube ao utilizador
 +
clube = input("Diga o nome do clube: ", "s")
 +
# perguntar os resultados
 +
vitorias = input ("Numero de vitorias: ")
 +
empates = input ("Numero de empates: ")
 +
derrotas = input ("Numero de derrotas: ")
 +
 +
contagem = [ vitorias, empates, derrotas]
 +
 +
resultados = {'Vitorias', 'Empates', 'Derrotas'}
 +
 +
# tres cores: dourado, rosa, vermelho
 +
# dourado: rgb(255,215,0) --> 255/255, 215/255, 0/255
 +
# rosa: rgb(255,192,203) --> 255/255, 192/255, 203/255
 +
# vermelho: rgb(255,0,0)
 +
colormap ([ 1,0.84314,0; 1,0.75294,0.79608; 1,0,0 ]);
 +
 +
# mostrar o grafico
 +
pie(contagem, resultados, [0,0,1])
 +
title(clube)
 +
 +
# perguntar se quer imprimir o grafico
 +
imprimir = yes_or_no("Quer imprimir (para PDF)? ")
 +
if (imprimir == 1)
 +
  print grafico.pdf
 +
endif
 +
</syntaxhighlight>
 +
  
 
=== Exercícios ===
 
=== Exercícios ===
 +
 +
==== velocidadekmh.m ====
 +
 +
Escreva um programa para calcular a velocidade de um veículo em Km/h, dada a distância percorrida em Km e o tempo em minutos.
 +
<syntaxhighlight>
 +
# quero calcular a velocidade sabendo a:
 +
# distancia (km)
 +
# tempo (minutos)
 +
distancia = input("Indique os Kms percorridos: ");
 +
tempo = input("Indique os minutos gastos: ");
 +
# preciso de transformar minutos em horas
 +
horas = tempo/60;
 +
velocidade = distancia/horas;
 +
printf("Os %d Km foram percorridos a %.2f Km/h\n", distancia, velocidade);
 +
</syntaxhighlight>
 +
 +
==== idadepessoa.m ====
 +
 +
Escreva um programa que calcula a idade de uma pessoa, sabendo o ano de nascimento. Sugestão: use <syntaxhighlight enclose="none">str2num(datestr(now, "YYYY"))</syntaxhighlight> para ir buscar o ano atual.
 +
 +
==== fahreneit2celcius.m ====
 +
 +
Dado o valor em Fahreneit, calcule a correspondente temperatura em Celcius, escrevendo um programa para o efeito.
 +
 +
==== polegadas2cm.m ====
 +
 +
Escreva um programa que realize a conversão de polegadas para centímetros.
 +
 +
==== libras2quilos.m ====
 +
 +
Dado um valor em libras, escreva uma script que calcule o valor correspondente em quilos.
 +
 +
==== maiusculas.m ====
 +
 +
Escreva um programa que receba uma palavra e coloque todos os caracteres da palavra em maiúsculas. Usar a função "toupper".
 +
 +
==== vogais.m ====
 +
 +
Desenvolva um programa que receba uma palavra como parâmetro e retorne o número de vogais desta palavra. Usar a função "regexpi".
 +
 +
=== Âmbito das variáveis ===
 +
 +
Na seguinte script <syntaxhighlight enclose="none">idade.m</syntaxhighlight>, utiliza-se uma variável <syntaxhighlight enclose="none">idade</syntaxhighlight> 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 <syntaxhighlight enclose="none">idade</syntaxhighlight> passa a ser uma referência para a variável e não para a script.
 +
 +
<syntaxhighlight>
 +
# 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);
 +
</syntaxhighlight>

Edição atual desde as 15h08min de 12 de dezembro de 2017

Steve jobs how to think.png

Para resolver problemas mais ou menos complexos, em vez de se escreverem os comandos um a um, podemos agrupar esses mesmos comandos num programa. Na literatura inglesa do Octave (e do MATLAB) chamam scripts a estes programas. Ou seja, uma script é esta sequência de comandos guardados. Nesta documentação vamos usar o termo programa para designar uma script.

Os comandos são guardados num documento com a extensão .m. Tudo o que se escreve na linha de comandos do Octave, pode-se escrever num programa. Depois de prontos, os programas podem ser executados quantas vezes se quiser, e podem ser enviados para outros colegas, para executarem o mesmo programa.

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

Um programa é invocado pelo seu nome, sem a extensão .m. Ao ser invocado, todas as instruções são processadas, como se tivessem sido lançadas na linha de comandos do Octave.

Para que queremos os programas

Os programas têm como vantagem o facto de se escreverem 1 vez e depois se poderem executar muitas vezes.

Imagine que pretende calcular a distância entre dois pontos P e Q à superfície da terra, sabendo as coordenadas dos mesmos (latitude e longitude).

Illustration of great-circle distance.svg.png

Se for preciso calcular essa distância apenas uma vez, escreve-se uma sequência de comandos da seguinte forma:

agueda = [40.5832343,-8.4542053];
aveiro = [40.6393801,-8.6533827];
 
graus2radianos = pi/180.0;
# phi = 90 - latitude
phi1 = (90.0 - agueda(1))*graus2radianos;
phi2 = (90.0 - aveiro(1))*graus2radianos;
# theta = longitude
theta1 = agueda(2)*graus2radianos;
theta2 = aveiro(2)*graus2radianos;
aux = sin(phi1)*sin(phi2)*cos(theta1-theta2) + cos(phi1)*cos(phi2);
arco = acos(aux);
metros = arco * 6378137

E se for preciso calcular a distância entre Braga e Vila Real? Escrevem-se de novo todos os comandos? E se for novamente preciso calcular a distância entre Viana do Castelo e Ponte de Lima?

Para reaproveitar as fórmulas que foram escritas, escreve-se um programa, uma única vez. Depois o mesmo é executado quantas vezes quiseremos, mas com dados diferentes. Isto é, sempre que corrermos o programa, pedimos aos utilizador que nos diga qual é o ponto de origem e destino.

Na prática, as instruções anteriores são transformadas no seguinte programa, que é guardado num documento distancia.m:

# ver as coordenadas no openstreetmap.org ou no maps.google.pt
origem = input("Ponto de origem? (vetor [latitude, longitude]): ");
destino = input("Ponto de chegada? (vetor [latitude, longitude]): ");
grau2radianos = pi/180.0;
# phi = 90 - latitude
phi1 = (90.0 - origem(1))*grau2radianos;
phi2 = (90.0 - destino(1))*grau2radianos;
# theta = longitude
theta1 = origem(2)*grau2radianos;
theta2 = destino(2)*grau2radianos;
aux = sin(phi1)*sin(phi2)*cos(theta1-theta2) + cos(phi1)*cos(phi2);
arco = acos(aux);
metros = arco * 6378137;
printf("Distancia entre os pontos %.1f metros\n", metros);

Depois, pode-se executar o programa quantas vezes se quiser, da seguinte forma:

>> distancia
Ponto de origem? (vetor [latitude, longitude]): [41.5472695,-8.4464405]
Ponto de chegada? (vetor [latitude, longitude]): [41.3018331,-7.7971441]
Distancia entre os pontos 60694.1 metros
>>

Primeiro programa

O exemplo anterior tem uma fórmula de cálculo complicada. Vamos começar com programas com cálculos mais simples.

O primeiro programa 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 um programa (uma script) muito pequeno.

# calcula a area de um retangulo, dada a largura e o comprimento
# para executar o programa, basta escrever:
# arearetangulo
#
largura = input("Largura?\n");
comprimento = input("Comprimento?\n");
area = largura * comprimento;
printf("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 guardado o programa na pasta atual do Octave, executa-se o mesmo escrevendo apenas o nome (sem a extensão). Exemplo:

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

Se o programa não correr, confirme que o mesmo está a ser gravado com a extensão .m e está na pasta atual. Para tal, da mesma forma que temos os comandos who e whos para ver que variáveis estão definidas, temos um comando what para saber que programas estão definidos.

>> what
M-files in directory /home/jgr/Documentos/Aulas/13141S/OCV:
 
   arearetangulo.m       espiral.m             ocv.m
   calculavelocidade.m   idade.m               unnamed2.m
>>

Alternativamente, pode usar os comandos mais genéricos para saber qual a pasta atual (reveja a forma de saber e mudar a pasta atual) e depois inspecionar os ficheiros .m da pasta fazendo:

dir *.m

Se precisar, pode descarregar a versão deste programa arearetangulo.m disponível em http://octave.di.uminho.pt/images/files/.

Análise do código

Analisando o programa anterior, podemos desde já salientar alguns aspectos importantes.

  1. Pode-se (e deve-se!) acrescentar comentários. Os comentários são escritos após o símbolo '#' ou '%'. Após este símbolo e até ao fim da linha, é considerado comentário.
  2. As variáveis são GLOBAIS. Isto é, NUNCA use o nome do programa para uma variável ou vice versa. Este perigo está explicado de forma detalhada na seção #Âmbito das variáveis.
  3. Dentro do programa, em cada instrução usa-se ';' no final para suprimir a apresentação dessa instrução. O mesmo acontece quando se usa a linha de comandos. Experimente a diferença entre usar ou não o ';' no fim das instruções.
octave:1> b=10
b =  10
octave:2> b=b+20;
octave:3>
Importância dos comentários

Os comentários incluídos nos programas são fundamentais. Todas as linguagens de programação incluem o suporte à inclusão de comentários porque... os programas geralmente são complexos e difíceis de ler! Os comentários são apenas para serem interpretados pelos humanos e não pelo computador. Por isso, devem ser legíveis e explicar o que faz o programa e como o faz.

Até os programadores têm dificuldade em ler o seu próprio código após algum tempo. Por isso, é fundamental escrever comentários na altura em que se escreve o código e justificar as decisões tomadas.

O Octave tira partido dos comentários para dar alguma informação sobre o que faz um programa.

Neste primeiro programa, começámos por por alguns comentários. Por isso, geralmente depois de usar o comando what para saber que programas estão disponíveis, usamos o comando help para saber o que faz um dado programa.

>> what
M-files in directory /home/jgr/Documentos/Aulas/13141S/OCV:
 
   arearetangulo.m       espiral.m             ocv.m
   calculavelocidade.m   idade.m               unnamed2.m
>> help arearetangulo
`arearetangulo' is a script from the file /home/jgr/Documentos/Aulas/13141S/OCV/arearetangulo.m
 
 calcula a area de um retangulo, dada a largura e o comprimento
 para executar o programa, basta escrever:
 arearetangulo
 
 
Additional help for built-in functions and operators is
available in the on-line version of the manual.  Use the command
`doc <topic>' to search the manual index.
 
Help and information about Octave is also available on the WWW
at http://www.octave.org and via the help@octave.org
mailing list.
>>

Repare que o Octave mostra os comentários colocados no início do programa. Por isso, comece sempre os programas com alguns comentários.


Programa para gerar gráficos

Escreva o seguinte programa grafico.m:

# perguntar o clube ao utilizador
clube = input("Diga o nome do clube: ", "s")
# perguntar os resultados
vitorias = input ("Numero de vitorias: ")
empates = input ("Numero de empates: ")
derrotas = input ("Numero de derrotas: ")
 
contagem = [ vitorias, empates, derrotas]
 
resultados = {'Vitorias', 'Empates', 'Derrotas'}
 
# tres cores: dourado, rosa, vermelho
# dourado: rgb(255,215,0) --> 255/255, 215/255, 0/255
# rosa: rgb(255,192,203) --> 255/255, 192/255, 203/255
# vermelho: rgb(255,0,0)
colormap ([ 1,0.84314,0; 1,0.75294,0.79608; 1,0,0 ]);
 
# mostrar o grafico
pie(contagem, resultados, [0,0,1])
title(clube)
 
# perguntar se quer imprimir o grafico
imprimir = yes_or_no("Quer imprimir (para PDF)? ")
if (imprimir == 1)
   print grafico.pdf
endif


Exercícios

velocidadekmh.m

Escreva um programa para calcular a velocidade de um veículo em Km/h, dada a distância percorrida em Km e o tempo em minutos.

# quero calcular a velocidade sabendo a:
# distancia (km)
# tempo (minutos)
distancia = input("Indique os Kms percorridos: ");
tempo = input("Indique os minutos gastos: ");
# preciso de transformar minutos em horas
horas = tempo/60;
velocidade = distancia/horas;
printf("Os %d Km foram percorridos a %.2f Km/h\n", distancia, velocidade);

idadepessoa.m

Escreva um programa que calcula a idade de uma pessoa, sabendo o ano de nascimento. Sugestão: use str2num(datestr(now, "YYYY")) para ir buscar o ano atual.

fahreneit2celcius.m

Dado o valor em Fahreneit, calcule a correspondente temperatura em Celcius, escrevendo um programa para o efeito.

polegadas2cm.m

Escreva um programa que realize a conversão de polegadas para centímetros.

libras2quilos.m

Dado um valor em libras, escreva uma script que calcule o valor correspondente em quilos.

maiusculas.m

Escreva um programa que receba uma palavra e coloque todos os caracteres da palavra em maiúsculas. Usar a função "toupper".

vogais.m

Desenvolva um programa que receba uma palavra como parâmetro e retorne o número de vogais desta palavra. Usar a função "regexpi".

Âmbito das variáveis

Na seguinte script idade.m, 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);