instituto federal de educação, ciência e tecnologia do rio ... · e-mail: [email protected]...

13
Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte Lista de Exercícios para a Terceira Unidade Disciplina: PEOO Professor: Eberton da Silva Marinho e-mail: [email protected] Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados Java Operadores Processo lógico de programação Estruturas de desvio condicional Variáveis É inerente às linguagens de programação a necessidade de armazenar e manipular valores, e no caso das orientadas a objetos, objetos. Uma variável é um endereço de uma posição na memória onde podemos armazenar informação. Por conveniência, utilizamos apelidos, um nome, para as variáveis. Assim, nós podemos entender mais facilmente qual a finalidade de cada uma. Java é uma linguagem fortemente tipada. Isso quer dizer que todas as variáveis têm tipos, conjunto de valores que ela pode assumir, bem definidos e a conversão entre tipos é restrita. De outra forma, a manipulação de dados se dá com o conhecimento da faixa de valores e de seus possíveis estados já na especificação dos programas. Tipos de dados são modelos que representam conjuntos de valores que podemos utilizar ou manipular. Antes de utilizar uma variável, temos de declará-la juntamente com o seu tipo. Abaixo temos alguns exemplos de declaração de variáveis. int i; char letra1, letra2; float num1; double salario; Os nomes das variáveis devem seguir uma regra para que o compilador possa identifica-las corretamente. Elas devem iniciar com uma letra, cifrão ($) ou sublinhado/underscore (_). Após o primeiro caractere podem ter qualquer combinação de letras, caracteres e números sem limite de tamanho. O compilador possui algumas palavras que são específicas que possuem significado em sua interpretação de código chamadas de palavras reservadas. Elas não podem ser utilizadas como identificadores no código, pelo motivo obvio que o compilador não saberia quando a mesma teria a finalidade função de uma variável ou a implementação inicial do compilador. Identificadores são case-sensitive isto é, sensíveis a maiúscula ou minúscula, logo, “Nome” e “nome” são identificadores diferentes. A Figura 1 abaixo mostra uma lista de palavras reservadas que não podem ser utilizadas como identificadores.

Upload: others

Post on 27-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte Lista de Exercícios para a Terceira Unidade

Disciplina: PEOO Professor: Eberton da Silva Marinho e-mail: [email protected] Data: 25/02/2019 Data de entrega: Exercícios

Objetivos:

Variáveis

Tipos de Dados Java

Operadores

Processo lógico de programação

Estruturas de desvio condicional

Variáveis

É inerente às linguagens de programação a necessidade de armazenar e manipular valores, e

no caso das orientadas a objetos, objetos. Uma variável é um endereço de uma posição na memória onde podemos armazenar informação. Por conveniência, utilizamos apelidos, um nome, para as variáveis. Assim, nós podemos entender mais facilmente qual a finalidade de cada uma.

Java é uma linguagem fortemente tipada. Isso quer dizer que todas as variáveis têm tipos, conjunto de valores que ela pode assumir, bem definidos e a conversão entre tipos é restrita. De outra forma, a manipulação de dados se dá com o conhecimento da faixa de valores e de seus possíveis estados já na especificação dos programas. Tipos de dados são modelos que representam conjuntos de valores que podemos utilizar ou manipular. Antes de utilizar uma variável, temos de declará-la juntamente com o seu tipo. Abaixo temos alguns exemplos de declaração de variáveis.

int i;

char letra1, letra2;

float num1;

double salario;

Os nomes das variáveis devem seguir uma regra para que o compilador possa identifica-las corretamente. Elas devem iniciar com uma letra, cifrão ($) ou sublinhado/underscore (_). Após o primeiro caractere podem ter qualquer combinação de letras, caracteres e números sem limite de tamanho. O compilador possui algumas palavras que são específicas que possuem significado em sua interpretação de código chamadas de palavras reservadas. Elas não podem ser utilizadas como identificadores no código, pelo motivo obvio que o compilador não saberia quando a mesma teria a finalidade função de uma variável ou a implementação inicial do compilador. Identificadores são case-sensitive isto é, sensíveis a maiúscula ou minúscula, logo, “Nome” e “nome” são identificadores diferentes. A Figura 1 abaixo mostra uma lista de palavras reservadas que não podem ser utilizadas como identificadores.

Page 2: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Figura 1. Palavras reservadas em Java.

Algumas convenções são adotadas pelos programadores Java para facilitar o entendimento do código. Algumas delas são:

Classes e interfaces: A primeira letra deve ser maiúscula e, caso o nome seja formado por mais de uma palavra, as demais palavras devem ter sua primeira letra maiúscula também (exemplo: PrimeiroProgramaJava);

Métodos: A primeira letra deve ser minúscula e após devemos usar a primeira letra maiúscula para cada palavra (exemplo: primeiraVariavelJava);

Variáveis: Da mesma forma que métodos;

Constantes: Todas as letras do nome devem ser maiúsculas e caso seja formada por mais de uma palavra separada por underscore.

A Tabela 1 abaixo mostra exemplos de alguns identificadores válidos adotando a convenção citada anteriormente.

Tabela 1. Exemplos de identificadores Java.

Tipos de Dados Java

Em Java temos duas classificações de tipos de dados, os tipos primitivos, e os tipos definidos pelo usuário. Os tipos primitivos são especificações que a própria linguagem trás para manipular dados como inteiros, ponto flutuante, caracter, etc. Já os tipos definidos pelo usuário são as classes que o programador cria. Abaixo, na Tabela 1, há a os tipos primitivos na linguagem Java, a descrição de cada um e os valores permitidos para cada tipo.

Page 3: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Tabela 2. Tipos primitivos em Java.

Tipo Descrição Mínimo Máximo

boolean Ocupa 1 bit. Assume os valores true ou false.

char Caractere em notação Unicode de 16 bits. Serve para armazenar dados alfanuméricos. Também pode ser usado como um dado inteiro.

0 65535

byte Inteiro de 8 bits em notação de complemento de dois. -128 127

short Inteiro de 16 bits em notação de complemento de dois. -32768 32767

int Inteiro de 32 bits em notação de complemento de dois. 2147483648 2147483647

long Inteiro de 64 bits em notação de complemento de dois. -263 263-1

float Representa números em notação de ponto flutuante normalizada em precisão simples de 32 bits em conformidade com a norma IEEE 754-1985. 4 bytes de tamanho e 23 dígitos

binários de precisão.

1.40239846e-46

3.40282347e+38

double Representa números em notação de ponto flutuante

normalizada em precisão dupla de 64 bits em conformidade com a norma IEEE 754-1985. 8 bytes de tamanho e 52 dígitos binários de precisão.

4.940656458

41246544e-324

1.79769313486

23157e+308

Apesar de Java ser uma linguagem fortemente tipada, alguns tipos primitivos diferentes podem ser manipulados e convertidos entre si sem perda de informação. A Figura 1 mostra uma ilustração de quais conversões são permitidas na linguagem Java, seguindo a seta azul.

Um byte pode ser convertido em um short, int, long, float ou double

Um short pode ser convertido em um int, long, float ou double

Um char pode ser convertido em um int, long, float ou double

Um int pode ser convertido em um long, float ou double

Um long pode ser convertido em um float ou double

Um float pode ser convertido em um double

Figura 2.

Page 4: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Após a declaração, podemos utilizar as variáveis para armazenar informação, para isso, o

atributo de atribuição ‘=’ indica ao compilador qual valor colocar na variável. Abaixo temos alguns exemplos de como fazer a atribuição a variáveis.

int x;

x = 1;

int contador = 0;

double salario1 = 2000.0, salario2 = 3500.0;

int a = b = c = d = 0;

O tipo char permite a representação de caracteres individuais no formato UNICODE. Alguns caracteres são considerados especiais e não possuem representação visual, sendo a maioria caracteres de controle cujo uso é reservado pela linguagem. Tais caracteres podem ser especificados dentro dos programas como indicado na Tabela 1 abaixo, ou seja, precedidos do ‘\’.

Tabela 3. Caracteres especiais em Java.

Representação Significado

\n Pula linha

\r Retorno de carro

\b Retrocesso

\t Tabulação

\f Nova página

\’ Apóstrofo

\” Aspas

\\ Barra invertida

Criar programas é uma tarefa artesanal e por isso, a solução de um problema pode ser encontrada de várias formas. Essa variedade de formatos que cada programador pode desenvolver dificulta o entendimento do código. Para isso, existe na maioria das linguagens de programação a possibilidade de se colocar comentários no próprio código que explicam o que representam os identificadores, o que ele faz e como faz. Em Java os comentários são expressos através de duas barras (//) e barras com asteriscos (/* ... */). Geralmente o comentário de documentação é posicionado imediatamente antes do elemento a ser documentado. Abaixo temos alguns exemplos:

// Comentário de uma linha

// Tudo após as duas barras é considerado comentário

/* comentário de

múltiplas linhas */

/** comentário de documentação

Page 5: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

/* que também pode ser de múltiplas linhas

*/

Operadores

A linguagem Java possui um conjunto amplo de operadores que podem ser utilizados destinados a operações aritméticas, lógicas, relacionais e de atribuição. A Tabela 4, 5 e 6 mostram respectivamente os operadores aritméticos, relacionais e lógicos Java.

Tabela 4. Operadores aritméticos Java.

Operador Significado Exemplo

+ Adição a + b

- Subtração a – b

* Multiplicação a * b

/ Divisão a / b

% Resto da divisão inteira a % b

- Sinal negativo -a

+ Sinal positivo +a

++ Incremento unitário ++a ou a++

-- Decremento unitário --a ou a--

+= Soma a variável a += b a = a + b

-= Subtrai da variável a -= b a = a - b

*= Multiplica a variável a *= b a = a * b

/= Divide da variável a /= b a = a / b

Tabela 5. Operadores Relacionais Java.

Operador Significado Exemplo

== Igual a == b

!= Diferente a != b

Page 6: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

> Maior que a > b

>= Maior ou igual a >= b

< Menor que a < b

<= Menor ou igual a a <= b

Tabela 6. Operadores Lógicos.

Operador Significado Exemplo

&& E lógico (and) a && b

|| Ou Lógico (or) a || b

! Negação (not) !a

Assim como na matemática, os operadores possuem uma ordem de precedência, o que determina a ordem de avaliação dos mesmos em uma expressão. A Tabela 7 mostra a ordem de precedência de operadores da maior precedência para a menor.

Tabela 7.Ordem de precedência dos operadores Java.

Nível Operadores Nível Operadores

1 . (seletor) [ ] ( ) 8 &

2 ++ -- ~ instanceof new clone

– (unário)

9 ^

3 * / % 10 |

4 + - 11 &&

5 << >> >>> 12 ||

6 < > <= >= 13 ? :

7 == != 14 =

15 ,

Processo Lógico de Programação

O processo de resolver um problema através de uma solução computacional, um programa, envolve diversas habilidades necessárias para se atingir o objetivo. Antes mesmo de sentarmos em

Page 7: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

frente ao computador para escrever o código que possivelmente irá resolver nosso problema, temos

que organizar o raciocínio para desenvolver uma solução que cubra todas as possibilidades de resposta a partir das entradas, inclusive as erradas. O programa deve ser robusto o suficiente para prever casos errados e informar ao usuário sobre o erro.

Para organizarmos nossa lógica de criação de programas, sugiro que você siga o algoritmo abaixo que consiste em:

1. Ler e entender o problema: É obvio que antes de resolver um problema, devemos entendê-lo e buscar na literatura no que consiste e como resolvê-lo sem uma ferramenta

computacional; 2. Definir as entradas e as saídas do programa: Tendo entendido o problema, defina as

entradas e saídas do programa e o tipo de cada uma; 3. Dadas as entradas, resolver o problema em um ambiente fora da programação. Neste

momento também são definidas as variáveis necessárias no processo de resolução; 4. Escolher um caso de teste e solucione o problema sem o computador. Encontre os valores

de saída com base nas entradas teste; 5. Traduzir a solução do problema em código. A tradução deve ser:

1. Declarar todas as variáveis do programa 2. Inicializar TODAS as variáveis 3. Escrever o código que solucione o problema 4. Escrever o código que imprimir a saída do programa

6. Executar o programa com o caso de teste como entrada e verificar se a saída é igual ao do item 4.

Exemplo:

Estudo de caso: Você foi escolhido para criar um programa que solucione uma equação do segundo grau na forma: ax2 + bx + c = 0.

1 - A primeira coisa que temos que fazer é entender qual o problema. Entendido o é pedido no problema, vamos ao segundo passo.

2 – As entrada para o programa são três valores que representam a, b e c na equação do segundo grau.

3 - A resolução de uma equação do segundo grau pode ser realizada pela fórmula de Bhaskara que tem as seguintes definições:

delta = �� 4��

Se delta >= 0

x1 =���√�����

��

x2 =���√�����

��

Se delta < 0, não existem raízes reais

Variáveis utilizadas na resolução: delta, x1 e x2

4 – O caso de teste escolhido foi dadas

Entradas: a = 1, b = 5 e c = 4

Saídas: x1 = -1 e x2 = -4

Page 8: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

5 – Implementar a solução do problema em código Java

1. Declarar todas as variáveis do programa

2. Inicializar TODAS as variáveis

3. Escrever o código que solucione o problema

4. Escrever o código que imprima a saída do programa

6 - Executar o programa com o caso de teste do item 4 e comparar as saídas.

Como resultado temos o programa abaixo:

Page 9: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Estruturas de Controle

Até agora vimos comandos para criar algoritmos em Java que segue uma sequência linear, porém a maioria dos programas que faremos não segue uma estrutura linear, eles serão cheios de desvios ou repetições que dependerão de escolhas de usuário ou de variáveis outras que estejam

public class ProgEquacao2Grau {

public static void main(String args[]){

// Entradas da equação

// ax^2 + bx + c = 0

int a, b, c;

// delta = (b*b - 4 * a * c)

int delta;

// x1 = (-b + Math.sqrt(delta)) / (2 * a)

// x2 = (-b - Math.sqrt(delta)) / (2 * a)

double x1, x2;

// Inicialização das variáveis

a = 1;

b = 5;

c = 4;

// Calculo de Delta, usando o método de Bhaskara

delta = (b*b - 4 * a * c);

if(delta >= 0 ){

x1 = (-b + Math.sqrt(delta)) / (2 * a);

x2 = (-b - Math.sqrt(delta)) / (2 * a);

// Saída do programa caso haja raízes reais

System.out.println(x1);

System.out.println(x2);

}else{

System.out.println("Para as dadas entradas, não existe raízes reais.");

}

}

}

Código 1. Programa ProgEquacao2Grau.

Page 10: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

especificadas no programa. Java permite utilizar duas estruturas de controle mediante uma certa

condição, são elas o desvio condicional ou repetição. Além dessas estruturas existem ainda mecanismos de modularização e estruturas de controle de erros.

Estruturas de modularização são aqueles que nos permitem a construção de funções e procedimentos (dentro do paradigma procedural) ou métodos (dentro do paradigma de orientação a objetos). Já estruturas de controle de erros constituem uma importante contribuição a programação pois simplifica bastante a inclusão e construção de rotinas de tratamento de erros dentro do código.

Estrutura de Desvio Condicional

O Java dispôs de duas estruturas de desvio conforme a avaliação de uma expressão, são elas if e switch. A estrutura if é de propósito geral e avalia uma expressão que sempre terá como resultado um valor verdadeiro (true) ou falso (false). Se a expressão for verdadeira, os comandos dentro do bloco if serão executados, e ao término do bloco, a próxima instrução executada estará depois da instrução if. Caso a expressão seja falsa, será avaliada a próxima instrução, se houver.

Já a instrução switch é de propósito mais específico e só pode ser utilizado para avaliação de expressões que retornam um número inteiro.

Instrução de desvio condicional if

A Figura 3 mostra uma o fluxo da instrução if . Se a expressão avaliada for verdadeira, o fluxo do programa deve seguir a esquerda, caso contrário, a expressão é falsa, a direita.

Figura 3. Ilustração do fluxo da instrução if.

comandos comandos

Page 11: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Há algumas formas de escrever a estrutura if. Abaixo há algumas:

Cada caixa na ilustração acima indica o escopo de um bloco de comandos. Há 4 exemplos de código usando o if. A primeira forma eu não recomendo que seja utilizada, apesar de ser permitida ela pode causar confusões de interpretação, isso porque, apenas o comando1 é executado na expressão if. O comando2 é executado independente da avaliação. Recomento utilizar a segunda forma, mesmo que haja apenas um comando.

A primeira e segunda forma possuem apenas uma instrução if. Na terceira forma, além do if, há o seu complemento, o else. O bloco de comandos em else é obrigatoriamente executado se a expressão for falsa. No quarto trecho de código, temos um comando else if, que só será avaliado se a expressão1 for falsa, e o else só será executado se a expressão1 e a expressão2 forem falsas.

A instrução if também pode ser aninhada com outros if , ou seja, podemos colocar um bloco if dentro de outro bloco if. A instrução if interna ao bloco if só será avaliada se a mais externa for verdadeira. O código abaixo ilustra o aninhamento de ifs.

Estrutura de desvio condicional switch

O switch é usado para casos onde temos valores inteiros bem definidos. A expressão a ser avaliada retorna um valor inteiro que é comparado com os valores nas declarações case. Caso o valor

if(expressão) comando1; comando2; if(expressão){ comando1; comando2; } if(expressão){ comando1; } else{ comando2; }

Bloco de comandos

if(expressão1){ comando1; } else if(expressão2){ comando2; } else{ comando3; }

1

2

3

4

if(expressão1){

comando1;

if(expressão2){

comando2;

}

}

else if(expressão3){

comando3;

if(expressão4){

comando4;

}

}

Estruturas ifs aninhadas

Page 12: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

da expressão corresponda a um dos cases, os comandos deste bloco são executados até que se encontre

a palavra reservada break. Um erro de programação é esquecer de declarar a palavra break. Isso faz com que as outras declarações case sejam executadas, mesmo sem a devida correspondência. Ao final das declarações case, podemos colocar a declaração default, que funciona com o else da instrução if, ou seja, ela só será executada se nenhum das declarações case tiver sido. Abaixo há um exemplo de instrução switch.

switch(expressao){

case valor1:

comandos1;

break;

case valor2:

comandos2;

break;

case valor2:

comandos3;

break;

default:

comandos4;

}

Operador ( ? : )

O operador condicional utiliza três operandos. O operador pode ter um de dois valores baseados em uma condição. A sintaxe é: condição ? valor1 : valor2. Se condição for verdadeira, o operador terá o valor de valor1. Caso contrário, terá o valor de valor2. Você pode utilizar o operador condicional em qualquer lugar onde utilizaria um operador padrão. Por exemplo: se o valor da variável a for maior que a de b, o valor 50 será atribuído a variável x, senão o valor 100;

int x = (a > b ? 50: 100);

Complementos

No site da disciplina há um arquivo TiposPrimitivos.java para baixar. Execute-o e estude o código com ajuda dos comentários. O que você aprendeu?

Dicas do dia

Defina variáveis com nomes sugestivos, e que indiquem o que a variável se destina armazenar. Evite nomes muito curtos ou muito abreviados que dificultem o entendimento do código.

Quando usar estruturas de desvio de fluxo, verifique se as condições cobrem todo o escopo do que se deseja cobrir, e não há sobreposição de faixa de valores.

O comando break impede que os outros cases sejam executados após a primeira confirmação.

O comando default funciona com o else da estrutura if.

Page 13: Instituto Federal de Educação, Ciência e Tecnologia do Rio ... · e-mail: ebertonsm@gmail.com Data: 25/02/2019 Data de entrega: Exercícios Objetivos: Variáveis Tipos de Dados

Exercícios

1. O que é uma variável?

_______________________________________________________________________________________________________________________________________________________________.

2. O que significa dizer que Java é fortemente tipada?

_______________________________________________________________________________________________________________________________________________________________.

3. Quais os tipos de dados Java? Qual o perigo de utilizarmos operações entre tipos de dados diferentes, um tipo de dados double em um int, por exemplo?

_______________________________________________________________________________________________________________________________________________________________.

4. Por que devemos comentar o código de programação?

_______________________________________________________________________________________________________________________________________________________________.

5. Qual a diferença entre as declarações ++a e a++? Cite um exemplo.

_______________________________________________________________________________________________________________________________________________________________.

6. Quais as formas de desvio condicional em Java e quais as diferenças entre elas?

_______________________________________________________________________________________________________________________________________________________________.