Laboratório de
Programação
Dr. Italo Santiago Vega
Curso de Graduação Ciência da Computação Pontifícia Universidade de São Paulo
Semana Data Tópico
1 2004-02-18 Apresentação: algoritmo e computação. Bibliografia básica. Critérios de Avaliação.
2 2004-02-25 Recesso: Carnaval
3 2004-03-03 Organização de programas. Ambiente de programação (Java). 4 2004-03-10 BlueJ: apresentação e computação com objetos.
Conteúdo
1 Variáveis: Fundamentos 2
1.1 Declaração de uma Variável . . . 4
1.2 Tipo de uma Variável . . . 7
1.3 Comando de Atribuição . . . 13
1.4 Modelo de uma Variável . . . 17
2 Operações Aritméticas 26
1
Variáveis: Fundamentos
Uma variável é um elemento de codificação capaz de arma-zenar um valor de um determinado tipo.
Variáveis são normalmente utilizadas para comunicar valores entre computações. Por exemplo, uma computação de entrada pode enviar valores para a computação de
processamento utilizando-se de variáveis.
Atribuição A armazenagem de valores em variáveis faz uso do comando de
atribuição. O comando de atribuição altera o valor armazenado em uma variável. O valor atribuído torna-se o novo valor da variável, substituindo o anterior.
1.1
Declaração de uma Variável
Para existir em uma aplicação, a variável precisa ser declarada e definida (criada). A declaração consiste de um tipo seguido por uma lista de variáveis. Cada variável
declarada na lista pode ser iniciada com o valor especificado por uma expressão ou, no caso de variáveis estruturadas, por um iniciador de arraya. Na presença do
modificador final, os identificadores de variáveis serão declarados como constantes,
ou seja, os valores associados aos identificadores não poderão ser alterados. Por uma questão de estilo, cada variável será declarada individualmente.
As seguintes regras são utilizadas para a declaração de variáveis: DecVariavel ¯ ±²final ± ¯ ° ² ° Tipo ²Variavel ± ², ± ¯ ° ¯ ° ; ² ± ¯ ° Variavel Ident ¯ ±²= ± ¯ °¯Expressao ±IniciadorDeArray ² ° ² °
Exemplo 5.1 São exemplos de declarações de variáveis:
int total;
double sala = 15; char codigo = ’X’; final int MAX = 100;
1.2
Tipo de uma Variável
Na declaração de uma variável deve-se informar qual o tipo dos valores que ela poderá armazenar. Normalmente serão encontradas duas categorias de tipos:
Tipo TipoConcreto ¯ ±TipoAbstrato ² °
Tipos Concretos Os tipos concretos (também conhecidos como básicos ou ainda primitivos) estabelecem conjuntos de valores diretamente armazenáveis nas variáveis. É comum a existência dos seguintes tipos:
• Tipo lógico: boolean
• Tipo numérico: byte, short, int, long, float, double.
Em termos de diagramas sintáticos: TipoConcreto Logico ¯ ±Numerico ±Texto ² ° ° Logico boolean ² ± ¯ ° Numerico byte ² ± ¯ ° ¯ ±²short ± ¯ ° ±²int ± ¯ ° ±²long ± ¯ ° ±²float ± ¯ ° ±²double ± ¯ ° ² ° ° ° ° ° Texto char ² ± ¯ ° ¯ ±²String ¯ ² °
Tipos Abstratos Os tipos abstratos (também conhecidos por tipos definidos pelo usuário) são definidos combinando-se tipos concretos e, eventualmente, outros tipos abstratos. No nível de programação, tipos abstratos podem ser codificados
utilizando-se o mecanismo classea .
Exemplo 5.2 O texto em Java a seguir, descreve como um objeto-piano deve mostrar a sua quantidade de teclas.
hPiano.javai≡
public class Piano {
public int teclas = 88; // <- declaração da variável "teclas" public void mostrar() {
System.out.println( "Um piano tem " + teclas + " teclas." ); }
}
A declaração da variável teclas indica que pode armazenar valores do tipo
(concreto) int. Isto é, tal variável armazena apenas valores do tipo int. A declaração
também inicia a variável com o valor 88.
A classe Piano é uma codificação de um tipo abstrato. Esta classe pode ser utilizada para criar variáveis do tipo Piano. ¨
Exercício 5.1
VARIÁVEIS E VALORESTarefa 5.1.1 Crie um novo projeto denominado “ex5.1”. Digite e salve a seguinte classe em um arquivo denominado Piano.java:
hPiano.javai≡
public class Piano {
public int teclas = 88; // <- declaração da variável "teclas" public void mostrar() {
System.out.println( "Um piano tem " + teclas + " teclas." ); }
}
Compile esta classe, crie o objeto p da classe Piano e solicite a realização da computação mostrar().
1.3
Comando de Atribuição
O comando de atribuição substitui o atual valor de uma variável por outro valor. A estrutura de um comando de atribuição é descrita como:
CmdAtribuicao Ident = ² ± ¯ °Expressao ; ² ± ¯ °
O identificador fica à esquerda do operador de atribuição, representado pelo sinal “=” no seu lado direito encontra-se uma expressão que, ao ser avaliada, produz o novo valor a ser armazenado na variável.
Exemplo 5.3 O seguinte texto ilustra o efeito do comando de atribuição.
hFiguras.javai≡
public class Figuras {
public int lados; // <- declaração da variável "lados" public void mostrar() {
lados = 7; // <- valor inicial da variável "lados"
System.out.println( "Um heptágono tem " + lados + " lados." ); lados = 10; // <- alteração do valor da variável
System.out.println( "Um decágono tem " + lados + " lados." ); lados = 12; // <- nova alteração do valor da variável
System.out.println( "Um dodecágono tem " + lados + " lados." ); }
}
Exercício 5.2
Tarefa 5.2.1 Crie um novo projeto denominado “ex5.2”. Digite e salve a seguinte classe em um arquivo denominado Figuras.java:
hFiguras.javai≡
public class Figuras {
public int lados; // <- declaração da variável "lados" public void mostrar() {
lados = 7; // <- valor inicial da variável "lados"
System.out.println( "Um heptágono tem " + lados + " lados." ); lados = 10; // <- alteração do valor da variável
System.out.println( "Um decágono tem " + lados + " lados." ); lados = 12; // <- nova alteração do valor da variável
System.out.println( "Um dodecágono tem " + lados + " lados." ); }
Compile esta classe, crie o objeto f da classe Figuras e solicite a realização da computação mostrar().
1.4
Modelo de uma Variável
Toda variável tem um nome, um tipo e um valor. O nome está associado a uma posição de memória do computador, enquanto que o tipo restringe os valores que podem ser armazenados.
Modelo com Tipo Concreto Uma variável com tipo concreto pode ser visualizada como mostrado na Figura a seguir.
nome : TipoConcreto = valor
A representação destaca o nome da variável, seu tipo e o particular valor armazenado em um determinado instante.
Exemplo 5.4 Seja uma variável com tipo concreto int, chamada salas e valor igual
a 5. A Figura a seguir ilustra duas vistas do seu modelo.
(a)
salas : int = 5
(b)
salas = 5
A representação com omissão de tipo pressupõe que a simples observação do valor é suficiente para determinar o tipo da variável. ¨
Exercício 5.3
Tarefa 5.3.1 Crie um novo projeto denominado “ex5.3”. Digite e salve a seguinte classe em um arquivo denominado Predio.java:
hPredio.javai≡
public class Predio {
public int salas = 30; public void mostrar() {
System.out.println( "Total de salas = " + salas ); }
}
Compile esta classe, crie o objeto k da classe Predio e solicite a realização da computação mostrar().
Tarefa 5.3.2 Qual o resultado desta computação?
Modelo com Tipo Abstrato Uma variável com tipo abstratoa pode ser visualizada como mostrado na Figura a seguir.
valorRef : TipoAbstrato
nome1 : Tipo1 = valor1
nome2 : Tipo2 = valor2
...
valorRef : TipoAbstrato
(b)
(a)
nome =
nome =
A representação (a) destaca o nome da variável, seu tipo e o objeto referenciado. A representação (b) destaca as variáveis internas do objeto referenciado.
Exemplo 5.5 Seja uma variável com tipo abstrato Aluno, chamada x, com
valor-referência igual a a. Este valor identifica o objeto referenciado pela variável x. A
Figura a seguir ilustra as vistas simples e detalhada do seu modelo.
a : Aluno
p1 : double = 7.8
t : Turma =
t11 : Turma
sala : String = “S 55”
x =
Neste caso, o objeto a contém duas variáveis internas: p1 e t. Partindo-se da variável
x, o valor destas variáveis internas pode ser alcançado escrevendo-se: x.p1 e x.t, respectivamente.
O valor de x é igual a a. O valor de x.p1 é igual a 7.8. Entretanto, o valor de x.t é
igual ao valor-referência t11. Este objeto (identificado por t11), por sua vez, possui
Exercício 5.4
MODELO COM TIPOS ABSTRATOSTarefa 5.4.1 Crie um novo projeto denominado “ex5.4”. Digite e salve a seguinte classe em um arquivo denominado Pessoa.java:
hPessoa.javai≡
public class Pessoa { public String nome;
public void mudarNome( String novo ) { nome = novo;
}
public int idade;
public void mudarIdade( int nova ) { nome = nova;
}
Compile esta classe e crie o objeto p da classe Pessoa e solicite a realização das computações mudarNome() e mudarIdade(). Para cada uma destas
computações, informe o seu nome e a sua idade.
Tarefa 5.4.2 Qual o resultado da computação p.mostrar()?
Tarefa 5.4.3 Faça uma representação gráfica do objeto p e das suas variáveis internas (bem como dos seus valores).
Tarefa 5.4.4 Altere o tipo da variável idade para String e recompile a classe Pessoa. O que acontece? Porquê?
Exercício 5.5
ALUNOS E TURMASTarefa 5.5.1 Crie um novo projeto denominado “ex5.5”. Digite e salve a seguinte classe em um arquivo denominado Aluno.java:
hAluno.javai≡
public class Aluno {
public double p1 = 7.8; public Turma t;
public void mudarTurma( Turma nova ) { t = nova;
}
public void mostrar() {
System.out.println( " p1= " + p1 ); System.out.println( " t= " + t ); }
Faça o mesmo para a classe Turma:
hTurma.javai≡
public class Turma {
public String sala = "S 55"; }
Compile estas classes e crie os objetos a da classe Aluno e t11 da classe Turma.
Tarefa 5.5.2 Qual o resultado da computação a.mostrar()?
Tarefa 5.5.3 Faça uma representação gráfica dos objetos a e t11, bem como das suas variáveis internas (e dos seus respectivos valores).
2
Operações Aritméticas
Uma expressão aritmética representa um valor. Este valor é obtido quando se avalia a expressão.
Do ponto de vista de estrutura, expressões aritméticas são compostas por operandos e operadores. É comum a existência dos seguintes operadores aritméticos:
OPERADOR SÍMBOLO EXPRESSÃO
SOMA + total + 2 SUBTRAÇÃO - saldo – total MULTIPLICAÇÃO * 2 * n
DIVISÃO / 7/ 4 MÓDULO % 7 % 4
Exemplo 5.6 Considere as expressões aritméticas da seguinte aplicação:
hlab/aritmetica/Expressao.javai≡
public class Expressao { public void avaliar() {
int total = 10;
System.out.println( "ADIÇÃO: " + (total + 2) ); System.out.println( "SUBTRAÇÃO: " + (total - 2) );
System.out.println( "MULTIPLICAÇÃO: " + (total * 2) ); System.out.println( "DIVISÃO: " + (7 / 4) ); System.out.println( "DIVISÃO: " + (17 / 5) ); System.out.println( "MÓDULO: " + (7 % 4) ); System.out.println( "MÓDULO: " + (17 % 5) ); } }
A execução desta aplicação produz os seguintes resultados: ADIÇÃO: 12 SUBTRAÇÃO: 8 MULTIPLICAÇÃO: 20 DIVISÃO: 1 DIVISÃO: 3 MÓDULO: 3 MÓDULO: 2
Observa-se que o operador de divisão provoca um truncamento do resultado, quanto este não é um número inteiro. Também, o operador módulo produz o resto da divisão dos seus operandos. ¨
3
Avaliação de Expressões
Regra de Avaliação Para a avaliação de uma expressão contendo diversos operadores, uma ordem de avaliação deve ser definida:
OPERADOR ORDEM DE AVALIAÇÃO
( ) ordem 1
aninhadas: de dentro para fora
*/% ordem 2
da esquerda para a direita
+- ordem 3
Exemplo 5.7 Considere a seguinte expressão aritmética:
z = p ∗ r %q + w /x − y
A ordem de aplicação dos operadores, segundo a regra de avaliação é:
z = p ∗ r % q + w / x − y
A ordem de avaliação desta expressão pode ser alterada com o uso dos parênteses. Por exemplo:
z = p ∗ r %(q + w )/x − y
Os parênteses forçam a avaliação da adição em primeiro lugar:
z = p ∗ r % ( q + w ) / x − y
6 2 3 1 4 5
Exercício 5.6
REGRA DE AVALIAÇÃO DE EXPRESSÕESa) Crie o projeto “ex5.6” e a classe Expressao:
hExpressao.javai≡
public class Expressao { public int x;
public void mudarX( int novo ) { x = novo;
}
public double avaliar() {
return x % x + x * x - x / x; }
Esta classe codifica a seguinte expressão aritmética:
x %x + x ∗ x − x /x
b) Quando x = 2, qual o resultado da computação avaliar()? c) Quando x = 10, qual o resultado da computação avaliar()?
d) Como estas computações se alteram, quando o tipo da variável x é alterado para
Exercício 5.7
OPERADORES DE MÓDULO E DE DIVISÃOa) Descreva uma computação que obtenha dois números inteiros do usuário e mostre a sua divisão e o seu módulo. (Sugestão: crie o projeto “ex5.7” e a classe
Expressao com as variáveis a e b, e os métodos obterInt(int novoA, int novoB):void e int avaliar(). Este último método contendo a expressão solicitada.)
b) Preencha a seguinte tabela:
a b a / b a % b
13 4
768 22
67000 1
Exercício 5.8
POLINÔMIO DO SEGUNDO GRAU Considere o seguintepolinômio do segundo grau:
y = ax2 + bx + c
A computação descrita pela classe a seguir calcula o valor de y para cada valor de x digitado pelo usuário:
public class Polinomio {
public int a = 2;
public int b = 3;
public int c = 7;
public int x;
public int y;
public void mudarX( int novo ) {
x = novo; }
public int avaliarY() {
y = a * x * x + b * x + c;
return y;
} }
b) Mostre a ordem de avaliação de cada operador, passo-a-passo.
c) Altere a ordem de avaliação (reeditando o método avaliarY()) com o uso de
parênteses:
y = (ax2) + (bx ) + c
Compile e execute a computação avaliarY() para x = 5. Este resultado é o mesmo da avaliação anterior?
Exercício 5.9
MODELO DE UM CÍRCULO Um círculo exibe diversaspropriedades, as quais podem ser definidas em termos do seu raio (Figura a seguir).
diâmetro
raio
Dentre estas propriedades, destacam-se:
circunferencia = 2π · raio diametro = 2 · raio
area = π · raio2
Exercício 5.10
DISTÂNCIA ENTRE 2 PONTOS Escreva uma aplicação que leiaas coordenadas (x , y) de dois pontos e calcule a distância entre eles usando a seguinte fórumula:
distancia = p(x2 − x1)2 + (y2 − y1)2
(Procure ajuda na biblioteca Java para calcular potências e raízes quadradas.)
Exercício 5.11
SEPARAÇÃO DE DÍGITOS Descreva uma computação que leiaum número com cinco dígitos, separe-o em seus dígitos constituintes, e mostre-os separados por ‘:”. Por exemplo, se o número digitado for 45331, a aplicação deverá mostrar 4 : 5 : 3 : 3 : 1. (Dica: use uma combinação dos operadores de divisão e módulo.)
Exercício 5.12
CÁLCULO DE FUNÇÕES Descreva uma computação quecalcule o quadrado e o cubo dos números de 0 a 10, mostrando os valores em uma tabela:
NÚMERO QUADRADO CUBO
0 0 0
1 1 1
2 4 8
Exercício 5.13
CRIPTOGRAFIA (Adaptado de Deitel & Deitel, ex. 4.31, p.155.) Uma empresa deseja transmitir dados via telefone, mas está preocupada com a possibilidade de existirem grampos telefônicos. Todos os seus dados são transmitidos como inteiros de quatro dígitos. Escreva uma aplicação que faça a seguinte criptografia de dados. Para cada grupo de quatro dígitos fornecidos pelo usuário, substitua cada dígito poela (soma deste dígito com 7) módulo 10. Em seguida, troque o primeiro
dígito com o terceiro, e troque o segundo dígito com o quarto. Este resultado deve ser mostrado para o usuário.
(Escreva outra aplicação que receba uma entrada criptografada e recupere o número original.)
Semana Data Tópico
1 2004-02-18 Apresentação: algoritmo e computação. Bibliografia básica. Critérios de Avaliação.
2 2004-02-25 Recesso: Carnaval
3 2004-03-03 Organização de programas. Ambiente de programação (Java). 4 2004-03-10 BlueJ: apresentação e computação com objetos.