DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INFORMÁTICA PARA A SAÚDE COMPUTADORES E PROGRAMAÇÃO Ano Lectivo 2012/2013 1º Semestre FOLHA 1 - INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA 1. Instruções detalhadas para o primeiro programa As instruções seguintes têm como objectivo auxiliar a escrita do seu primeiro programa em Java, e destinam-se a utilizadores de Sistemas Operativos Microsoft Windows. Para escrever o primeiro programa será necessário que as seguintes aplicações estejam instaladas: The Java TM 2 Platform, Standard Edition. É possível descarregá-la do seguinte endereço: http://www.oracle.com/technetwork/java/javase/downloads/index.html As instruções de instalação poderão ser consultadas no seguinte endereço: http://docs.oracle.com/javase/7/docs/webnotes/install/index.html Um editor de texto. Poder-se-á utilizar o Bloco de Notas, o editor incluído no Windows, que poderá ser acedido a partir do menu Iniciar, no sub menu Programas > Acessórios > Bloco de Notas. O ambiente das aulas práticas já se encontra devidamente preparado, pelo que não deverá ser necessário qualquer tipo de instalação. No entanto, e com a finalidade de verificar o seu correto funcionamento, selecione, a partir do menu Iniciar, no sub menu Programas > Acessórios, a aplicação Linha de Comandos. Introduza o comando javac e pressione a tecla Enter. Se for exibida a lista de opções do comando javac o ambiente de trabalho está, de facto, corretamente configurado. Caso seja devolvida uma mensagem de erro indicando que o comando ou nome do ficheiro é inválido, significa que o Windows não conseguiu encontrar o compilador Java, pelo que deverá atualizar a variável PATH do sistema. Instruções sobre como fazê-lo poderão ser consultadas no seguinte endereço: http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jdk-installationwindows.html#path 1 / 9
2. Criação da Primeira Aplicação (Hello World) O primeiro programa HelloWorldApp irá, simplesmente, imprimir na consola a saudação Hello world!. Para criar este programa será necessário: I. Criar o Ficheiro de Código Fonte (Source File). O Ficheiro de Código Fonte contém texto, escrito na linguagem de programação Java, e que todos os programadores deverão compreender. A sua extensão deverá ser.java. Pode editar-se um Ficheiro de Código Fonte com qualquer editor de texto. Sublinhe-se que este ficheiro não é executável. II. Compilar o Ficheiro Fonte para um Ficheiro de Bytecode (Bytecode File). O compilador traduz o texto do Ficheiro de Código Fonte para instruções que a Máquina Virtual do Java (Java VM) possa compreender e executar; traduz, portanto, o Ficheiro de Código Fonte para um Ficheiro de Bytecode. Este ficheiro terá a extensão.class. III. Correr o programa contido no Ficheiro de Bytecode. O interpretador Java instalado no computador implementa a Java VM; este interpretador executa as instruções contidas no Ficheiro de Bytecode, traduzindo-as para instruções que o computador possa compreender. Nota: quando se compila um programa escrito em Java, não são geradas instruções para uma plataforma específica; ao invés, é gerado bytecode, que é um conjunto instruções para a Java VM. Se a plataforma quer seja Windows, Unix, MacOS ou um browser tiver a Java VM instalada, compreenderá esses bytecodes e executará o programa. Eis a razão pela qual a linguagem Java é considerada write once, run anywhere. 2 / 9
2.1. Criar o Ficheiro de Código Fonte Deverá abrir o Bloco de Notas e digitar o seguinte código: /** * The HelloWorldApp class implements an application that * displays "Hello World!" to the standard output. */ public class HelloWorldApp { public static void main(string[] args) { // Display "Hello World!" System.out.println("Hello World!"); } } Guarde o código num ficheiro; o seu nome deverá, necessariamente, ter o mesmo nome da Classe HelloWorldApp e a extensão.java. Deverá, portanto, ser denominado HelloWorldApp.java. Refira-se, a propósito, que a linguagem Java diferencia maiúsculas/minúsculas (case-sensitive), pelo que HelloWorldApp é diferente de hellowordapp. 2.2. Compilar o Ficheiro de Código Fonte Na Linha de Comandos, selecione a diretoria onde gravou o ficheiro HelloWorldApp.java. Para compilar a aplicação, insira o seguinte comando: javac HelloWorldApp.java 3 / 9
2.3. Executar o programa contido no Ficheiro de Bytecode Na mesma diretoria, insira o seguinte comando: java HelloWorldApp O resultado deverá ser semelhante ao seguinte: 3. Explicação do código da aplicação Hello World Uma classe o bloco básico de uma linguagem de Programação Orientada a Objetos como o Java é um modelo que descreve os dados e os comportamentos associados com instâncias dessa classe. Quando se instancia uma classe, é criado um objecto que tem o mesmo comportamento de outras instâncias dessa mesma classe. Os dados associados a uma classe ou objecto são armazenados em variáveis; o comportamento associado a uma classe ou objecto é implementado com recurso a métodos. /** * The HelloWorldApp class implements an application that * displays "Hello World!" to the standard output. */ public class HelloWorldApp { public static void main(string[] args) { // Display "Hello World!" System.out.println("Hello World!"); } } A palavra-chave class inicia a definição da Classe, denominada HelloWorldApp. As variáveis e métodos da classe estão delimitados por chavetas no início e fim do bloco de definição. A aplicação Hello World não possui quaisquer variáveis, e tem um único método denominado main. Quando o interpretador Java executa uma aplicação através da invocação 4 / 9
da classe de controlo da aplicação começa por chamar o método main dessa classe. O método main chamará, então, os outros métodos necessários para executar a aplicação. Esta aplicação é um dos mais simples programas que podem ser escritos na linguagem de programação Java (e que, de facto, faça qualquer coisa). É precisamente devido à sua simplicidade que não é necessário definir quaisquer outras classes que não a classe HelloWorldApp. No entanto, esta aplicação usa, de facto, uma outra classe a classe System que é parte da API ( Application Programming Interface ) fornecida com o ambiente Java. Nesta linha de código é executada a instrução que imprime para o ecrã a mensagem Hello World!. 4. Problemas comuns no Compilador e no Interpretador 4.1. Problemas do Compilador 4.1.1. Erros de Sintaxe Caso se digite erroneamente uma parte de um programa, o compilador poderá emitir um erro de sintaxe. A mensagem indica, habitualmente, o número da linha onde o erro foi detectado, o código nessa linha, e a posição do erro no código. Segue-se o exemplo de um erro causado pela omissão de um ponto e vírgula (;) no fim de uma instrução: testing.java:14: `;' expected. System.out.println("Input has " + count + " chars.") 1 error Por vezes, o compilador não consegue identificar a intenção do programador, e imprime uma mensagem de erro algo confusa que se poderá propagar por várias linhas. Por exemplo, na seguinte secção de código foi omitido um ponto e vírgula (;) na linha a negrito: while (System.in.read()!= -1) count++ System.out.println("Input has " + count + " chars."); Ao processar este código, o compilador emite duas mensagens de erro: testing.java:13: Invalid type expression. count++ testing.java:14: Invalid declaration. System.out.println("Input has " + count + " chars."); 2 errors 5 / 9
O compilador emite duas mensagens de erro porque após processar count++, o estado do compilador indica que este se encontra no meio de uma expressão. Sem o ponto e vírgula, é impossível ao compilador saber se a instrução está completa. Caso sejam emitidos quaisquer erros de sintaxe, o programa não foi compilado com sucesso, pelo que o compilador não criou um ficheiro do tipo.class. Será, pois, necessário analisar cuidadosamente o programa, corrigir os erros detectados, e tentar de novo. 4.1.2. Erros de Semântica Além de analisar a correção sintáctica do programa, o compilador verifica outras incorreções básicas. Por exemplo, o compilador emite uma mensagem de erro de cada vez que uma variável não for iniciada: testing.java:13: Variable count may not have been initialized. count++ testing.java:14: Variable count may not have been initialized. System.out.println("Input has " + count + " chars."); 2 errors O programa não foi, mais uma vez, compilado, pelo que será necessário corrigir os erros e tentar outra vez. 4.2. Problemas do Interpretador Um erro comum é a tentativa de interpretar o ficheiro.class criado pelo compilador. Por exemplo, se se tentar interpretar o ficheiro HelloWorldApp.class em vez da classe HelloWorldApp, o interpretador exibirá a seguinte mensagem de erro: Can't find class HelloWorldApp.class O argumento para o interpretador Java é, portanto, o nome da classe que se pretende utilizar, e não o nome do ficheiro. Um outro erro relaciona-se com o facto de o interpretador Java necessitar que a classe a executar possua um método denominado main, precisamente porque precisa de saber onde começar. Se tentarmos executar uma classe que não tenha o método main, o interpretador mostrará a seguinte mensagem de erro: 6 / 9
In class classname: void main(string argv[]) is not defined 5. Exercícios 1. Escreva um programa na linguagem de programação Java que peça ao utilizador dois números inteiros e mostre o resultado da soma no ecrã. 2. Escreva um programa na linguagem de programação Java que peça ao utilizador a altura e largura de um triângulo e mostre o resultado da respectiva área do triângulo. 3. Escreva um programa na linguagem de programação Java que peça ao utilizador o raio de uma circunferência e mostre os valores respectivos da área e perímetro da circunferência. 4. Escreva um programa que troque o conteúdo de duas variáveis reais cujos valores são solicitados ao utilizador. 5. Altere o programa da questão anterior de modo a que os valores sejam mostrados como números inteiros. 6. Escreva um programa que leia a altura e o peso de uma pessoa e apresente o valor do seu índice de massa corporal (IMC). Nota: IMC = peso / altura 2 7. Escreva um programa, que calcule a distância de um ponto a uma circunferência. O ponto é definido pelas suas coordenadas X e Y e a circunferência é definida pelas coordenadas do centro Xc, Yc e pelo raio R. O valor do raio é fixo e igual a 3, os restantes valores devem ser pedidos ao utilizador. Nota: A distância d entre dois pontos de coordenadas (X1,Y1) e (X2,Y2) é dada pela 2 + Y1 2 expressão ( ) ( ) 2 d = X1 X 2 Y Para o cálculo da raiz quadrada use a função Math.sqrt(valor) que pertence à package java.lang.math. 8. Elabore um programa que leia um caracter do teclado e mostre o respectivo valor ASCII. 9. Elabore um algoritmo que obtenha a temperatura em graus celsius e que calcule o valor correspondente em graus Kelvin. Grau Kelvin = 273.15 + Celsius 10. Elabore um programa que leia a idade de uma pessoa expressa em anos, meses e dias e a mostre expressa apenas em horas. 7 / 9
11. a) Escreva um método que receba como parâmetro um valor expresso em Escudos e devolva o valor equivalente em. b) Suponha agora que pretende converter uma quantia expressa em libras para dólares americanos. Será que poderia utilizar o método escrito na alínea anterior? Escreva agora outro método que, dado um valor expresso numa qualquer divisa e uma taxa de câmbio, converta o valor recebido para outra divisa utilizando essa taxa. c) Escreva um programa que permita testar os dois métodos. 12. O arredondamento de um número pode ser realizado multiplicando o mesmo por uma potência de 10, somando-lhe 0.5, truncando-lhe a parte fraccionária e dividindo-o pela mesma potência de 10. Por exemplo, para arredondar 43.89765 às centésimas devemos fazer: 1. 43.89765 * 100 = 4389.765; 2. 4389.765 + 0.5 = 4390.265; 3. parte inteira de 4390.265 = 4390; 4. 4390 / 100 = 43.90. a) Escreva um método que permita arredondar um número ao factor 1/y em que y é múltiplo de 10. b) Escreva um programa que permita testar o método anterior. 13. Pretende-se um programa que calcule o prejuízo provocado pelas fugas de água numa habitação. Sabendo que, por minuto, perdem-se sensivelmente: Canalização - 0,00000000053 m3; Torneira - 0,000016 m 3 ; Autoclismo - 0,00023 m 3 ; a) Escreva um método que calcule a quantidade de água (m3) desperdiçada num ano, dado o respectivo valor por minuto. b) Utilizando o método escrito na alínea anterior, elabore um programa que calcule e apresente no ecrã o total de água desperdiçada pelas 3 componentes da habitação, bem como as respectivas percentagens. 8 / 9
9 / 9