Free Essay

Lógica de Programação

In: Computers and Technology

Submitted By thaisneves
Words 57401
Pages 230
TREINAMENTOS

Lógica de Programação

Lógica de Programação

16 de setembro de 2013 As apostilas atualizadas estão disponíveis em www.k19.com.br

Esta apostila contém: • 238 exercícios de fixação. • 82 exercícios complementares. • 4 desafios. • 61 questões de prova.

i

Sumário Sobre a K19 Seguro Treinamento Termo de Uso Cursos 1 Introdução 1.1 O que é um Computador? . . . . . . . 1.2 Formato Binário . . . . . . . . . . . . . 1.3 Unidades . . . . . . . . . . . . . . . . . 1.4 Arquiteturas de Processadores . . . . . 1.5 O que é um Programa? . . . . . . . . . 1.6 Linguagem de Máquina . . . . . . . . 1.7 Linguagem de Programação . . . . . . 1.8 Compilador . . . . . . . . . . . . . . . . 1.9 Máquinas Virtuais . . . . . . . . . . . . 1.10 Hello World em Java . . . . . . . . . . . 1.11 Hello World em C# . . . . . . . . . . . . 1.12 Método Main . . . . . . . . . . . . . . . 1.13 Exercícios de Fixação Com Java . . . . 1.14 Exibindo mensagens . . . . . . . . . . 1.15 Comentários . . . . . . . . . . . . . . . 1.16 Indentação . . . . . . . . . . . . . . . . 1.17 Engenharia Reversa (Conteúdo Extra) 1.18 Ofuscadores (Conteúdo Extra) . . . . . 1.19 Exercícios de Fixação Com Java . . . . 1.20 Erro: Não Fechar os Blocos . . . . . . . 1.21 Erro: Trocar Maiúsculas e Minúsculas 1.22 Erro: Esquecer o Ponto e Vírgula . . . 1.23 Erro: Esquecer o Main . . . . . . . . . 1.24 Exercícios de Fixação Com C# . . . . . 1.25 Exercícios Complementares . . . . . . 1.26 Desafios . . . . . . . . . . . . . . . . . . 1.27 Resumo do Capítulo . . . . . . . . . . . 1.28 Prova . . . . . . . . . . . . . . . . . . . .

ii 1 2 3 4 1 1 3 4 5 7 7 7 8 9 10 11 13 13 15 16 16 17 17 17 18 19 20 21 22 23 24 24 26 31 31 31 33 33 35 35 35 36 37

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

Algoritmos 2.1 O que é um Algoritmo? . . . . . . . . . . . . . 2.2 Como um algoritmo pode ser representado? 2.3 Exercícios de Fixação . . . . . . . . . . . . . . 2.4 Desafios . . . . . . . . . . . . . . . . . . . . . . Variáveis 3.1 O que é uma Variável? . . . . . . . . . 3.2 Declarando variáveis em Java ou C# 3.3 Tipos de Básicos . . . . . . . . . . . . 3.4 String . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

ii

www.k19.com.br

iii

S UMÁRIO

3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22 3.23 3.24 3.25 3.26 4

Data e Hora (Conteúdo Extra) . . . . . . . . . . . . . . . . . Valores Literais . . . . . . . . . . . . . . . . . . . . . . . . . . Números Aleatórios . . . . . . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversão de string . . . . . . . . . . . . . . . . . . . . . . . Convenções de nomenclatura . . . . . . . . . . . . . . . . . Regras de nomenclatura . . . . . . . . . . . . . . . . . . . . Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatação . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatação de Data e Hora (Conteúdo Extra) . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . Erro: Variáveis com nomes repetidos . . . . . . . . . . . . . Erro: Esquecer a inicialização de uma variável local . . . . Erro: Trocar aspas simples por aspas duplas ou vice-versa Erro: Utilizar o separador decimal errado . . . . . . . . . . Erro: Valores incompatíveis com os tipos das variáveis . . Exercícios de Fixação Com C# . . . . . . . . . . . . . . . . . Exercícios Complementares . . . . . . . . . . . . . . . . . . Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumo do Capítulo . . . . . . . . . . . . . . . . . . . . . . . Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

38 39 43 44 45 47 48 50 51 51 53 54 55 56 57 58 59 60 63 64 64 65

Operadores 4.1 Tipos de Operadores . . . . . . . . . . . . . . . . 4.2 Operadores Aritméticos . . . . . . . . . . . . . . 4.3 Divisão Inteira . . . . . . . . . . . . . . . . . . . . 4.4 Concatenação de Strings . . . . . . . . . . . . . . 4.5 Exercícios de Fixação Com Java . . . . . . . . . . 4.6 Operadores de Atribuição . . . . . . . . . . . . . 4.7 Operadores Relacionais . . . . . . . . . . . . . . . 4.8 Operadores Lógicos . . . . . . . . . . . . . . . . . 4.9 Exercícios de Fixação Com Java . . . . . . . . . . 4.10 Operador ternário “?:” . . . . . . . . . . . . . . 4.11 Operador “!” . . . . . . . . . . . . . . . . . . . . 4.12 Pré e Pós Incremento ou Pré e Pós Decremento 4.13 Exercícios de Fixação Com Java . . . . . . . . . . 4.14 Operações com Strings . . . . . . . . . . . . . . . 4.15 Operações com Data e Hora (Conteúdo Extra) . 4.16 Exercícios de Fixação Com Java . . . . . . . . . . 4.17 Erro: Utilizar operadores incompatíveis . . . . . 4.18 Exercícios de Fixação Com C# . . . . . . . . . . . 4.19 Exercícios Complementares . . . . . . . . . . . . 4.20 Resumo do Capítulo . . . . . . . . . . . . . . . . . 4.21 Prova . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

69 . 69 . 69 . 70 . 71 . 72 . 74 . 76 . 76 . 79 . 81 . 82 . 82 . 84 . 85 . 88 . 89 . 90 . 92 . 98 . 104 . 105 111 111 111 114 iii 5

Controle de Fluxo 5.1 Instruções de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Instrução if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Instrução else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . www.facebook.com/k19treinamentos S UMÁRIO

iv

5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 6

Instruções de Decisão Encadeadas . . . Exercícios de Fixação Com Java . . . . . Instruções de Repetição . . . . . . . . . Instrução while . . . . . . . . . . . . . . . Instrução for . . . . . . . . . . . . . . . . Instruções de Repetição Encadeadas . . Exercícios de Fixação Com Java . . . . . Instrução break . . . . . . . . . . . . . . Instrução continue . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . Blocos Sem Chaves . . . . . . . . . . . . “Laços Infinitos” . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . Erro: Não utilizar condições booleanas Erro: Excesso de “;” . . . . . . . . . . . . Exercícios de Fixação Com C# . . . . . . Exercícios Complementares . . . . . . . Resumo do Capítulo . . . . . . . . . . . . Prova . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

117 118 123 123 128 132 133 136 144 148 150 151 151 152 153 153 164 174 175 181 181 182 182 183 183 185 186 187 193 193 199 203 204 207 208 209 210 215 216 217 223 230 230

Array 6.1 O que é um Array? . . . . . . . . . . . . 6.2 Como declarar e inicializar um array? 6.3 Inserindo valores de um array . . . . . 6.4 Acessando os valores de um array . . . 6.5 Percorrendo um array . . . . . . . . . . 6.6 Array de arrays . . . . . . . . . . . . . . 6.7 Percorrendo um array de arrays . . . . 6.8 Exercícios de Fixação Com Java . . . . 6.9 Erro: Acessar uma posição inexistente 6.10 Exercícios de Fixação Com C# . . . . . 6.11 Exercícios Complementares . . . . . . 6.12 Resumo do Capítulo . . . . . . . . . . . 6.13 Prova . . . . . . . . . . . . . . . . . . . . Funções ou Métodos 7.1 Parâmetros . . . . . . . . . . . . 7.2 Resposta . . . . . . . . . . . . . 7.3 Exercícios de Fixação Com Java 7.4 Erro: Parâmetros incompatíveis 7.5 Erro: Resposta incompatível . . 7.6 Exercícios de Fixação Com C# . 7.7 Exercícios Complementares . . 7.8 Resumo do Capítulo . . . . . . . 7.9 Prova . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

7

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

A Problemas 235 A.1 Encontrar o maior ou o menor elemento de um array . . . . . . . . . . . . . . . . . . . . 235 A.2 Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 A.3 Calcular a soma dos elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . 237 iv www.k19.com.br

v

S UMÁRIO

A.4 A.5 A.6 A.7 A.8 A.9 A.10 A.11 A.12 A.13 A.14 A.15 A.16 A.17 A.18 A.19 A.20 A.21

Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Calcular a média dos elementos de um array . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Trocar as posições de dois elementos de um array . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Escolher aleatoriamente um número inteiro dentro de um intervalo Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Gerar apostas da Mega-Sena . . . . . . . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Embaralhar os elementos de um array . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Ordenar os elementos de um array . . . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Inverter o posicionamento dos elementos de um array . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Números em formato binário . . . . . . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com Java . . . . . . . . . . . . . . . . . . . . . . Exercícios de Fixação Com C# . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

238 239 240 240 241 242 243 244 247 248 249 250 250 251 252 253 254 255 265

B Respostas

www.facebook.com/k19treinamentos

v

S UMÁRIO

vi

vi

www.k19.com.br

1

S UMÁRIO

Sobre a K19
A K19 é uma empresa especializada na capacitação de desenvolvedores de software. Sua equipe é composta por profissionais formados em Ciência da Computação pela Universidade de São Paulo (USP) e que possuem vasta experiência em treinamento de profissionais para área de TI. O principal objetivo da K19 é oferecer treinamentos de máxima qualidade e relacionados às principais tecnologias utilizadas pelas empresas. Através desses treinamentos, seus alunos tornam-se capacitados para atuar no mercado de trabalho. Visando a máxima qualidade, a K19 mantém as suas apostilas em constante renovação e melhoria, oferece instalações físicas apropriadas para o ensino e seus instrutores estão sempre atualizados didática e tecnicamente.

www.facebook.com/k19treinamentos

1

S UMÁRIO

2

Seguro Treinamento
Na K19 o aluno faz o curso quantas vezes quiser! Comprometida com o aprendizado e com a satisfação dos seus alunos, a K19 é a única que possui o Seguro Treinamento. Ao contratar um curso, o aluno poderá refazê-lo quantas vezes desejar mediante a disponibilidade de vagas e pagamento da franquia do Seguro Treinamento. As vagas não preenchidas até um dia antes do início de uma turma da K19 serão destinadas ao alunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treinamento é 10% do valor total do curso.

2

www.k19.com.br

3

S UMÁRIO

Termo de Uso
Termo de Uso
Todo o conteúdo desta apostila é propriedade da K19 Treinamentos. A apostila pode ser utilizada livremente para estudo pessoal . Além disso, este material didático pode ser utilizado como material de apoio em cursos de ensino superior desde que a instituição correspondente seja reconhecida pelo MEC (Ministério da Educação) e que a K19 seja citada explicitamente como proprietária do material. É proibida qualquer utilização desse material que não se enquadre nas condições acima sem o prévio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido está sujeito às medidas legais cabíveis.

www.facebook.com/k19treinamentos

3

S UMÁRIO

4

TR

S TO EN AM EIN TREINAMENTOS TR EIN AM EN TO S

Conheça os nossos cursos
K01- Lógica de Programação K02 - Desenvolvimento Web com HTML, CSS e JavaScript K03 - SQL e Modelo Relacional K11 - Orientação a Objetos em Java K12 - Desenvolvimento Web com JSF2 e JPA2 K21 - Persistência com JPA2 e Hibernate K22 - Desenvolvimento Web Avançado com JFS2, EJB3.1 e CDI K23 - Integração de Sistemas com Webservices, JMS e EJB K41 - Desenvolvimento Mobile com Android K51 - Design Patterns em Java K52 - Desenvolvimento Web com Struts K31 - C# e Orientação a Objetos K32 - Desenvolvimento Web com ASP.NET MVC

www.k19.com.br/cursos

4

www.k19.com.br

CAPÍTULO
Registradores

I NTRODUÇÃO

1

O que é um Computador?
Atualmente, os computadores estão presentes no cotidiano da maioria das pessoas. Você, provavelmente, já está acostumado a utilizar computadores no seu dia a dia. Mas, será que você conhece o funcionamento básico de um computador? A seguir, listaremos os principais elementos de um computador e suas respectivas funções.

ULA + UC

Figura 1.1: Principais elementos de um computador

CPU (Unidade Central de Processamento - Processador): A CPU é o “cérebro” que controla o funcionamento dos outros componentes do computador e realiza todo o processamento necessário. Esse processamento consiste basicamente na realização de operações matemáticas e operações de armazenamento ou recuperação de dados. Registradores: Os registradores armazenam os dados que estão sendo processados pela CPU. O acesso ao conteúdo dos registradores é extremamente rápido. Por outro lado, eles não possuem muito espaço. Dessa forma, não é possível armazenar uma grande quantidade de informação Memória RAM: Os dados utilizados pelos programas que estão abertos são armazenados na memória RAM. O acesso ao conteúdo da memória RAM é rápido porém mais lento do que o acesso ao conteúdo dos registradores. Por outro lado, o espaço da memória RAM é bem maior do que o espaço dos registradores. www.facebook.com/k19treinamentos CPU

HD Memória RAM

1

I NTRODUÇÃO

2

Disco Rígido: Os dados armazenados nos registradores e na memória RAM são descartados quando o computador é desligado. O conteúdo que não pode ser descartado ao desligar o computador deve ser armazenado no disco rígido. O acesso ao disco rígido é bem mais lento do que o acesso a memória RAM mas, em geral, o espaço é bem maior. Os computadores são capazes se comunicar com dispositivos periféricos como teclado, mouse, monitor, caixa de som, impressoras, projetores, entre outros. Eles também são capazes de se comunicar com outros computadores. Essa comunicação é realizada através das diversas portas físicas que os computadores possuem. A seguir listaremos algumas portas físicas e as suas respectivas funções. Ethernet: Utilizada para conectar um computador a uma rede local de computadores. Através dessa porta, um computador pode enviar e receber dados de outros computadores.

Figura 1.2: Porta Ethernet

Paralela: Essa porta foi criada conectar um computador a uma impressora. Hoje, é utilizada também para conectar computadores a scanners, câmeras de vídeo, entre outros dispositivos.

Figura 1.3: Porta Paralela

PS/2: Teclados e mouses antigos são conectados aos computadores através dessa porta.

Figura 1.4: Porta PS/2

USB: Atualmente, é a porta mais utilizada. Diversos dispositivos são conectados aos computadores através das portas USB. Por exemplo, teclados, mouses, impressoras, celulares, HDs externos, entre outros.

Figura 1.5: Porta USB

2

www.k19.com.br

3

I NTRODUÇÃO

HDMI: Essa porta é utilizada para transmissão digital de áudio e vídeo.

Figura 1.6: Porta HDMI

Para resumir, podemos dizer que um computador é uma máquina que executa comandos matemáticos e armazena dados. Você deve estar se perguntando, como os computadores conseguem realizar tarefas tão sofisticadas se eles apenas executam comandos matemáticos e armazenam dados? A resposta é simples. Os computadores são programados por pessoas e essas pessoas conseguem criar programas que realizam tarefas sofisticadas a partir dos recursos básicos oferecidos pelos computadores. Da mesma forma que pessoas são capazes de produzir pinturas sofisticadas utilizando apenas tinta, pincel e quadro.

Analogia
M A D K P B 0O K X E 8 T 80 E 1 B Y K 19

class Xpto{ private int xpto; private String lala; public Xpto(int x, String l){ this.xpto = xpto; this.lala = lala; }

}

Figura 1.7: Analogia entre programar e pintar

Formato Binário
Os computadores são capazes de receber, armazenar e enviar dados. Contudo, esses dados são definidos em um formato que não é comum no dia a dia das pessoas. Eles são definidos em formato binário. Por exemplo, as pessoas estão acostumadas a lidar com os números em formato decimal. Por outro lado, os computadores trabalham com números em formato binário. Veja a seguir, a representação decimal e binária de alguns números. www.facebook.com/k19treinamentos 3

I NTRODUÇÃO

4

Decimal 0 1 2 3 4 5 6 7 8 9 10

Binário 0 1 10 11 100 101 110 111 1000 1001 1010

Decimal 11 12 13 14 15 16 17 18 19 20 21

Binário 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101

Decimal 22 23 24 25 26 27 28 29 30 31 32

Binário 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 100000

Tabela 1.1: Representação decimal e binária

Os textos também são manipulados pelos computadores em formato binário. Normalmente, cada caractere de um texto corresponde a uma sequência de oito 0s e 1s. Os caracteres são mapeados para formato binário através de padrões como ASCII (http://pt.wikipedia.org/wiki/ASCII) e Unicode (http://pt.wikipedia.org/wiki/Unicode). Veja a seguir, a representação binária de alguns caracteres de acordo com o padrão ASCII. Caractere A B C D E F G H I J K Binário 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 Caractere L M N O P Q R S T U V Binário 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 Caractere W X Y Z a b c d e f g Binário 01010111 01011000 01011001 01011010 01100001 01100010 01100011 01100100 01100101 01100110 01100111

Tabela 1.2: Representação binária de caracteres seguindo o padrão ASCII

Como vimos, os números e os caracteres de um texto são facilmente representados em formato binário. Contudo, os computadores também são capazes de manipular imagens, áudio e vídeo. Para esses tipos de dados, a transformação para formato binário é bem mais complicada. Pesquise por PNG, MP3 e AVI que são formatos binários de imagens, áudios e vídeos através dos seguinte endereços: • PNG - http://www.w3.org/TR/PNG/ • MP3 - http://en.wikipedia.org/wiki/MP3 • AVI - http://en.wikipedia.org/wiki/Audio_Video_Interleave

Unidades
4
www.k19.com.br

5

I NTRODUÇÃO

É importante ser capaz de mensurar a quantidade de dados que um computador pode armazenar ou transmitir. Essa mensuração pode ser realizada com ajuda das unidades de medida. A unidade de medida básica é o Bit. Cada 0 ou 1 que um computador armazena ou transmite é um Bit. Além dessa unidade básica, existem várias outras. Veja a seguir, algumas delas.

Byte (B)
• 8 Bits

Quilobyte (kB)
• 1024 B • 8192 Bits

Megabyte (MB)
• 1024 kB • 1048576 B • 8388608 Bits

Gigabyte (GB)
• 1024 MB • 1048576 kB • 1073741824 B • 8589934592 Bits

Terabyte (TB)
• 1024 GB • 1048576 MB • 1073741824 kB • 1099511627776 B • 8796093022208 Bits

Arquiteturas de Processadores
Os comandos que os processadores dos computadores executam são definidos em formato binário. Considere o exemplo fictício a seguir com algumas instruções para um determinado processador. www.facebook.com/k19treinamentos 5

I NTRODUÇÃO

6

001001010011 001010001011 010001010011 011011000000
Figura 1.8: Instruções de processador

GRAVA REG-1

19

GRAVA REG-2

11

SOMA

REG-1 REG-2 REG-3

EXIBE

REG-3

A primeira instrução indica ao processador que o valor 19 deve ser armazenado no registrador 1. A segunda instrução indica que o valor 11 deve ser armazenado no registrador 2. Já a terceira instrução determina a realização da soma dos valores anteriormente armazenados nos registradores 1 e 2 além de indicar que o resultado seja armazenado no registrador 3. Por último, a quarta instrução determina ao processador que o valor do registrador 3 deve ser exibido na tela. Não há um padrão universal para o formato das instruções que os processadores podem executar. Consequentemente, as mesmas operações podem ser definidas de formas diferentes em dois processadores distintos. Considere o exemplo fictício a seguir com algumas instruções para dois processadores de tipos diferentes.

Arquitetura X

0110001100100001 010001010011
Figura 1.9: Instruções de processadores diferentes

SOMA

REG-3

REG-2

REG-1

SOMA

REG-1 REG-2 REG-3

Arquitetura Y

Observe que as duas instruções indicam aos processadores que o valor do registrador 1 deve ser somado ao valor do registrador 2 e o resultado deve ser armazenado no registrador 3. Contudo, as sequências binárias dessas instruções são diferentes porque os processadores são de arquiteturas diferentes. As instruções que um processador pode executar são definidas pela arquitetura do seu processador. As principais arquiteturas de processadores são: • x86 • x86_64 • ARM
6
www.k19.com.br

7

I NTRODUÇÃO

O que é um Programa?
Os comandos que os processadores dos computadores oferecem são extremamente básicos. Normalmente, são comandos para realizar operações aritméticas como soma, subtração, divisão e multiplicação. Qualquer tarefa mais complexa deve ser resolvida através de uma sequência desses comandos básicos. Por exemplo, para calcular a média aritmética dos números 10, 15 e 20, devemos obter o valor da somatória desses números através de operações básicas de soma. Depois, podemos utilizar uma operação básica de divisão para dividir o valor dessa somatória por 3 e assim obter o valor 15 que é a média dos números. Uma sequência de comandos básicos de processador que resolve uma determinada tarefa recebe o nome de programa. Os programas são armazenados em arquivos comumente chamados de executáveis. Na prática, os programas são formados por instruções que dependem da arquitetura do processador e do sistema operacional. Consequentemente, um mesmo programa pode não funcionar em sistemas operacionais diferentes ou em processadores de arquiteturas diferentes.

Linguagem de Máquina
Como vimos anteriormente, o formato dos comandos que um computador pode executar depende basicamente da arquitetura do seu processador. Como existem diversas arquiteturas diferentes, um mesmo comando pode funcionar em um computador e não funcionar em outro. O formato dos comandos que funcionam em um determinado processador define a linguagem de máquina ou código de máquina desse processador. Comandos definidos em linguagem de máquina são perfeitos para os computadores processarem. Por outro lado, eles são extremamente complexos para as pessoas entenderem. Podemos verificar essa complexidade, observando o trecho de comandos em linguagem de máquina da figura abaixo:
000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010000000000100000000 000000000000111000011111101110100000111000000000101101000000100 111001101001000011011100000000001010011001100110100100001010101 000110100001101001011100110010000001110000011100100110111101100 111011100100110000101101101001000000110001101100001011011100110 111001101111011101000010000001100010011001010010000001110010011
Figura 1.10: Trecho do programa Chrome em binário

Linguagem de Programação
Devido a complexidade, escrever um programa em linguagem de máquina é inviável. Para tornar viável o desenvolvimento de programas, existem as linguagens de programação que tentam se aproximar das linguagens humanas. Confira um trecho de código escrito com a linguagem de prowww.facebook.com/k19treinamentos

7

I NTRODUÇÃO

8

gramação Java:
1 while ( lineMeasurer . getPosition () < paragraphEnd ) { 2 TextLayout layout = lineMeasurer . nextLayout ( formatWidth ) ; 3 drawPosY += layout . getAscent () ; 4 float drawPosX ; 5 6 if ( layout . isLeftToRight () ) { 7 drawPosX = ; 8 } else { 9 drawPosX = formatWidth - layout . getAdvance () ; 1 } 11 }
Código Java 1.1: Exemplo de código em Java

Por enquanto, você não precisa se preocupar em entender o que está escrito no código acima. Apenas, observe que um programa escrito em linguagem de programação é bem mais fácil de ser lido do que um programa escrito em linguagem de máquina.

Mais Sobre
A maioria das linguagens de programação são case sensitive. Isso significa que elas diferenciam as letras maiúsculas das minúsculas. Portanto, ao escrever o código de um programa, devemos tomar cuidado para não trocar uma letra maiúscula por uma letra minúscula ou vice-versa.

Compilador
Vimos que os computadores são capazes de processar o código escrito em linguagem de máquina. Também vimos que é inviável desenvolver um programa em linguagem de máquina. Por isso, existem as linguagens de programação. Daí surge uma pergunta: se os computadores entendem apenas comandos em linguagem de máquina, como eles podem executar código escrito em linguagem de programação? Na verdade, os computadores não executam código escrito em linguagem de programação. Esse código que é denominado código fonte deve ser traduzido para código em linguagem de máquina. Essa tradução é realizada por programas especiais chamados compiladores. while(true){ if(x < 1){ return 0; } return 1; }

CÓDIGO FONTE

PROCESSADOR

NÃO EXECUTA

while(true){ if(x < 1){ return 0; } return 1; }

CÓDIGO FONTE

COMPILADOR

CÓDIGO DE MÁQUINA

PROCESSADOR

EXECUTA

Figura 1.11: Processo de compilação e execução de um programa

8

www.k19.com.br

9

I NTRODUÇÃO

Máquinas Virtuais
Como vimos anteriormente, o código fonte de um programa deve ser compilado para que esse programa possa ser executado por um computador. Além disso, vimos que os compiladores geram executáveis específicos para um determinado sistema operacional e uma determinada arquitetura de processador. Qual é o impacto disso para quem desenvolve sistemas para múltiplas plataformas? A empresa que deseja ter uma aplicação disponível para diversos sistemas operacionais (Windows, Linux, Mac OS X, etc) e arquiteturas de processadores (Intel, ARM, PowerPC, etc) deverá desenvolver e manter um código fonte para cada plataforma (sistema operacional + arquitetura de processador). Consequentemente, os custos dessa empresa seriam altos.

PROGRAMA 1

PLATAFORMA 1

EXECUTA

PROGRAMA 2

PLATAFORMA 2

EXECUTA

PROGRAMA 2

PLATAFORMA 3

NÃO EXECUTA

Figura 1.12: Ilustração mostrando que cada plataforma necessita de um executável específico.

Para diminuir os custos e aumentar a produtividade, podemos utilizar máquinas virtuais. Em um ambiente que utiliza máquina virtual, quando o código fonte é compilado, ele é traduzido para um código escrito na linguagem da máquina virtual. A linguagem da máquina virtual também pode ser considerada uma linguagem de máquina. Na execução, a máquina virtual traduz os comandos em linguagem de máquina virtual para comandos em linguagem de máquina correspondente à plataforma utilizada. www.facebook.com/k19treinamentos 9

I NTRODUÇÃO
MÁQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTA

10

PROGRAMA

MÁQUINA VIRTUAL 2

PLATAFORMA 2

EXECUTA

MÁQUINA VIRTUAL 3

PLATAFORMA 3

EXECUTA

Figura 1.13: Ilustração do funcionamento da máquina virtual.

Tudo parece estar perfeito agora, porém, olhando atentamente a figura acima, percebemos que existe a necessidade de uma máquina virtual para cada plataforma. Alguém poderia dizer que, de fato, não resolvemos o problema. A diferença é que implementar a máquina virtual não é tarefa dos programadores que desenvolvem as aplicações que serão executados nas máquinas virtuais. A implementação da máquina virtual é responsabilidade de terceiros que geralmente são empresas bem conceituadas ou projetos de código aberto que envolvem programadores do mundo inteiro. Os maiores exemplos são a Oracle JVM (Java Virtual Machine), OpenJDK JVM, Microsoft CLR (Common Language Runtime) e Mono CLR. A máquina virtual não funciona apenas como um mero adaptador. Ela normalmente traz recursos como o gerenciamento de memória, otimização do código em tempo de execução entre outros.

Hello World em Java
Vamos escrever o nosso primeiro programa para entendermos como funciona o processo de escrita de código fonte, compilação e execução de um programa.

Importante
Antes de compilar e executar um programa escrito em Java, é necessário que você tenha instalado e configurado em seu computador o JDK (Java Development Kit). Consulte o artigo da K19, http://www.k19.com.br/artigos/ instalando-o-jdk-java-development-kit/.

Dentro de um editor de texto, escreva o seguinte código e salve o arquivo com o nome HelloWorld.java.

10

www.k19.com.br

11
1 class HelloWorld { 2 public static void main ( String [] args ) { 3 System . out . println ( " Hello World " ) ; 4 } 5 }
Código Java 1.2: HelloWorld.java

I NTRODUÇÃO

Em seguida abra um terminal ou, no caso do Windows, o Prompt de Comando e entre na pasta em que você salvou o arquivo HelloWorld.java. Feito isso, digite o seguinte comando no terminal: k19$ javac HelloWorld . java

Terminal 1.1: Compilando o arquivo HelloWorld.java

Esse comando compilará o arquivo HelloWorld.java. O programa javac é o compilador do Java. Após compilarmos o arquivo HelloWorld.java, nosso programa já estará pronto para ser executado. Porém, antes de executá-lo, digite no terminal o comando ls ou o comando dir no Prompt de Comando. Um arquivo chamado HelloWorld.class deverá aparecer na listagem de arquivos. Esse arquivo contém o código em linguagem de máquina virtual Java. k19$ ls HelloWorld . class HelloWorld . java

Terminal 1.2: Listagem do diretório

Agora vamos executar o nosso programa através do comando java: k19$ java HelloWorld Hello World

Terminal 1.3: Executando o programa HelloWorld

Para executar o conteúdo do arquivo HelloWorld.class, a extensão .class não deve ser utilizada. Seguindo os passos acima, você terá um resultado semelhante ao mostrado abaixo: k19$ javac HelloWorld . java k19$ ls HelloWorld . class HelloWorld . java k19$ java HelloWorld Hello World

Terminal 1.4: Compilação e execução do programa HelloWorld

Hello World em C#
Agora, vamos utilizar outra linguagem de programação para criar o programa semelhante ao visto anteriormente.

Importante
Para compilar um programa escrito em C# é necessário ter o .NET Framework instalado em seu computador. As versões mais recentes do sistema operacional Windows já vêm com o framework instalado.

www.facebook.com/k19treinamentos

11

I NTRODUÇÃO

12

Se você utiliza os sistemas operacionais Linux ou Mac OS X, pode compilar e executar programas em C# utilizando a plataforma Mono (http://www.mono-project.com/).

Dentro de um editor de texto, escreva o seguinte código e salve o arquivo com o nome HelloWorld.cs.
1 class HelloWorld 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Hello World " ) ; 6 } 7 }
Código C# 1.1: HelloWorld.cs

Em seguida abra o Prompt de Comando do Windows e entre na pasta em que você salvou o arquivo HelloWorld.cs. Feito isso, digite o seguinte comando no Prompt de Comando:
C :\ Users \ K19 \ Desktop \ logica - de - programacao > csc HelloWorld . cs

Terminal 1.5: Compilando o programa HelloWorld

Esse comando compilará o arquivo HelloWorld.cs. O programa csc é o compilador do C#. Após compilarmos o arquivo HelloWorld.cs, o programa estará pronto para ser executado. Porém, antes de executá-lo, digite no Prompt de Comando o comando dir. Um arquivo chamado HelloWorld.exe deverá aparecer na listagem de arquivos. Esse arquivo é o executável gerado pelo compilador do C#.
C :\ Users \ K19 \ Desktop \ logica - de - programacao > dir O volume na unidade C não tem nome . O Número de Série do Volume é 4 EF -8653 Pasta de C :\ Users \ K19 \ Desktop \ logica - de - programacao 2/ 2/ 2/ 2/ 3/2 3/2 3/2 3/2 13 13 13 13 21: 7 . 21: 7 .. 2 :58 9 HelloWorld . cs 21: 7 3.584 HelloWorld . exe 2 arquivo ( s ) 3.674 bytes 2 pasta ( s ) 22.5 8.589. 56 bytes disponíveis

Terminal 1.6: Listagem do diretório

Agora vamos executar o nosso programa:
C :\ Users \ K19 \ Desktop \ logica - de - programacao > HelloWorld . exe Hello World

Terminal 1.7: Executando o programa HelloWorld

Seguindo os passos acima, você terá um resultado semelhante ao mostrado abaixo:
Microsoft Windows [ versão 6.1.76 ] Copyright ( c ) 2 9 Microsoft Corporation . Todos os direitos reservados . C :\ Users \ K19 > cd Desktop \ logica - de - programacao C :\ Users \ K19 \ Desktop \ logica - de - programacao > csc HelloWorld . cs Microsoft ( R ) Visual C # Compiler versão 4. .3 319.17929 para Microsoft ( R ) . NET Framework 4.5 Copyright ( C ) Microsoft Corporation . Todos os direitos reservados .

12

www.k19.com.br

13
C :\ Users \ K19 \ Desktop \ logica - de - programacao > dir O volume na unidade C não tem nome . O Número de Série do Volume é 4 EF -8653 Pasta de C :\ Users \ K19 \ Desktop \ logica - de - programacao 3/ 3/ 2/ 3/ 4/2 4/2 4/2 4/2 13 13 13 13 16:5 . 16:5 .. 2 :58 9 HelloWorld . cs 16:5 3.584 HelloWorld . exe 2 arquivo ( s ) 3.674 bytes 2 pasta ( s ) 22.362.529.792 bytes disponíveis

I NTRODUÇÃO

C :\ Users \ K19 \ Desktop \ logica - de - programacao > HelloWorld . exe Hello World C :\ Users \ K19 \ Desktop \ logica - de - programacao >

Terminal 1.8: Compilação e execução do programa HelloWorld

Método Main
Como vimos anteriormente, um programa é basicamente uma sequência de instruções. As instruções de um programa escrito em Java devem ser definidas dentro do método main.
1 class Programa { 2 public static void main ( String [] args ) { 3 PRIMEIRA INSTRUÇÃO 4 SEGUNDA INSTRUÇÃO 5 TERCEIRA INSTRUÇÃO 6 ... 7 } 8 }
Código Java 1.3: Método main

Podemos dizer que o “ponto de partida” de um programa em Java é a primeira instrução do método main. As demais instruções são executas na mesma ordem que estão definidas no código. Eventualmente, durante a execução das instruções, algum erro pode ocorrer e interromper o fluxo do processamento. Analogamente, as instruções de um programa escrito em C# também devem ser definidas dentro do método Main. Contudo, a estrutura da linguagem Java e um pouco diferente da estrutura da linguagem C#.
1 class Programa 2 { 3 static void Main () 4 { 5 PRIMEIRA INSTRUÇÃO 6 SEGUNDA INSTRUÇÃO 7 TERCEIRA INSTRUÇÃO 8 ... 9 } 1 }
Código C# 1.2: Método Main

Exercícios de Fixação Com Java www.facebook.com/k19treinamentos 13

I NTRODUÇÃO

14

Abra um terminal e crie uma pasta com o seu nome. Você deve salvar os seus exercícios nessa pasta.
1
K19$ mkdir rafael K19$ cd rafael K19 / rafael$

Terminal 1.9: Criando a pasta de exercícios

Mais Sobre
Nos exercícios com Java, vamos assumir a utilização de um sistema operacional da família Unix. Em sistemas dessa família, o comando mkdir (make directory) é utilizado para criar pastas no terminal, o comando cd (change directory) é utilizado para trocar a pasta atual do terminal e o comando ls (list) é utilizado para listar os arquivos e diretórios da pasta atual do terminal. Se você estiver utilizando o sistema operacional Windows, os comandos correspondentes ao mkdir e ls são md e dir respectivamente. O comando cd possui a mesma função em ambiente Unix ou Windows.
C :\ Users \ K19 > md rafael C :\ Users \ K19 > cd rafael C :\ Users \ K19 \ rafael >

Terminal 1.10: Criando a pasta de exercícios

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao1.zip

Dentro da sua pasta de exercícios, crie uma pasta para os arquivos desenvolvidos nesse capítulo chamada introducao.
2
K19 / rafael$ mkdir introducao K19 / rafael$ cd introducao K19 / rafael / introducao$

Terminal 1.11: Criando a pasta dos exercícios desse capítulo no Linux

C :\ Users \ K19 \ rafael > md introducao C :\ Users \ K19 \ rafael > cd introducao C :\ Users \ K19 \ rafael \ introducao >

Terminal 1.12: Criando a pasta dos exercícios desse capítulo no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k
14

1-introducao-fixacao2.zip

www.k19.com.br

15
3

I NTRODUÇÃO

Utilize um editor de texto e implemente um programa utilizando a linguagem programação Java. Crie um arquivo chamado HelloWorld.java na pasta introducao.
1 class HelloWorld { 2 public static void main ( String [] args ) { 3 System . out . println ( " Hello World " ) ; 4 } 5 }
Código Java 1.4: HelloWorld.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao3.zip

Através do terminal, entre na pasta introducao; compile o arquivo HelloWorld.java; execute o programa.
4
K19 / rafael / introducao$ ls HelloWorld . java K19 / rafael / introducao$ javac HelloWorld . java K19 / rafael / introducao$ ls HelloWorld . class HelloWorld . java K19 / rafael / introducao$ java HelloWorld Hello World

Terminal 1.13: Compilando e Executando

Exibindo mensagens
Geralmente, as linguagens de programação possuem comandos para exibir mensagens para os usuários. Veja a seguir, a instrução da linguagem Java que permite exibir mensagens.
1 System . out . println ( " MENSAGEM " ) ;

Agora, na linguagem C#, o comando para exibir mensagens é:
1 System . Console . WriteLine ( " MENSAGEM " ) ;

Podemos utilizar as chamadas “sequências de escape” para indicar quebras de linhas ou tabulações nas mensagens. Uma quebra de linha é indicada com a sequência de escape “\n”. Uma tabulação com a sequência de escape “\t”.
1 System . out . println ( " Linha1 \ nLinha2 \ nLinha3 " ) ; 2 System . out . println ( " \ tTexto Tabulado " ) ;

1 System . Console . WriteLine ( " Linha1 \ nLinha2 \ nLinha3 " ) ; 2 System . Console . WriteLine ( " \ tTexto Tabulado " ) ;

Os comandos System.out.println e System.Console.WriteLine adicionam uma quebra de linha no final da mensagem exibida. Para exibir mensagens sem quebra de linha, podemos utilizar os comandos System.out.print e System.Console.Write nas linguagens Java e C# respectivamente.

www.facebook.com/k19treinamentos

15

I NTRODUÇÃO
1 System . out . print ( " MENSAGEM SEM QUEBRA DE LINHA " ) ;

16

1 System . Console . Write ( " MENSAGEM SEM QUEBRA DE LINHA " ) ;

Comentários
Podemos acrescentar comentários no código fonte. Geralmente, eles são utilizados para explicar a lógica do programa. Os compiladores ignoram os comentários inseridos no código fonte. Portanto, no código de máquina gerado pela compilação do código fonte, os comentários não são inseridos. Em Java ou C# para comentar uma linha, devemos utilizar a marcação //.
1 System . out . println ( " K19 " ) ; 2 // comentário de linha 3 System . out . println ( " Rafael Cosentino " ) ;

1 System . Console . WriteLine ( " K19 " ) ; 2 // comentário de linha 3 System . Console . WriteLine ( " Rafael Cosentino " ) ;

Em Java e C#, também é possível comentar um bloco com os marcadores /* e */.
1 2 3 4 5 System . out . println ( " K19 " ) ; /* comentário de bloco todo esse trecho está comentado */ System . out . println ( " Rafael Cosentino " ) ;

1 2 3 4 5

System . Console . WriteLine ( " K19 " ) ; /* comentário de bloco todo esse trecho está comentado */ System . Console . WriteLine ( " Rafael Cosentino " ) ;

Indentação
A organização do código fonte é fundamental para o entendimento da lógica de um programa. Cada linguagem de programação possui os seus próprios padrões de organização. Observe a organização padrão do código fonte nas linguagens Java e C#.
1 class Programa { 2 public static void main ( String [] args ) { 3 // instruções 4 } 5 }
Código Java 1.10: Programa.java

1 class Programa 2 { 3 static void Main ()

16

www.k19.com.br

17
4 { 5 // instruções 6 } 7 }
Código C# 1.8: Programa.cs

I NTRODUÇÃO

Para destacar a hierarquia dos blocos, o conteúdo de cada bloco deve ser indentado com tabulações ou espaços. Um código corretamente indentado é mais fácil de ler. Consequentemente, a manutenção das aplicações torna-se mais simples.

Engenharia Reversa (Conteúdo Extra)
Provavelmente, você já desmontou um brinquedo ou algum aparelho eletrônico para tentar descobrir como ele funciona. Ao fazer isso, mesmo sem saber, você praticou engenharia reversa. Muitas empresas praticam engenharia reversa para entender o funcionamento dos produtos dos concorrentes. Países também utilizam esse tipo de abordagem para avaliar a capacidade militar dos outros países. A engenharia reversa também é aplicada na área de software. As instruções do código de máquina de um programa podem ser traduzidas para alguma linguagem de programação através de programas especiais que são chamados de decompiladores. Normalmente, o código em linguagem de programação gerado a partir da decompilação do código de máquina de um programa não é fácil de entender. Geralmente, é possível, apesar de normalmente ser muito difícil, modificar o funcionamento de um programa para qualquer que seja o propósito utilizando a abordagem da engenharia reversa.

Ofuscadores (Conteúdo Extra)
Para dificultar o processo de engenharia reversa, podemos utilizar ferramentas que modificam o código fonte ou o código compilado com o intuito de prejudicar o processo de decompilação. Essas ferramentas são chamadas de Ofuscadores. Na maior parte dos casos, a utilização de ofuscadores torna inviável ou muito custosa a aplicação de engenharia reversa com intuito de “copiar” ou “piratear” um software.

Exercícios de Fixação Com Java

5

Crie um arquivo na pasta introducao chamado Triangulo.java com o seguinte conteúdo.

1 class Triangulo { 2 public static void main ( String [] args ) { 3 System . out . println ( " * " ) ; 4 System . out . println ( " ** " ) ; 5 System . out . println ( " *** " ) ; 6 System . out . println ( " **** " ) ;

www.facebook.com/k19treinamentos

17

I NTRODUÇÃO
7 System . out . println ( " ***** " ) ; 8 } 9 }
Código Java 1.11: Triangulo.java

18

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao5.zip

Através do terminal, entre na pasta introducao; compile o arquivo Triangulo.java; execute o programa.
6
K19 / rafael / introducao$ javac Triangulo . java K19 / rafael / introducao$ java Triangulo * ** *** **** *****

Terminal 1.14: Compilando e Executando

Crie um arquivo na pasta introducao chamado TrianguloComBarraN.java com o seguinte conteúdo.
7

1 class TrianguloComBarraN { 2 public static void main ( String [] args ) { 3 System . out . println ( " *\ n **\ n ***\ n ****\ n ***** " ) ; 4 } 5 }
Código Java 1.12: TrianguloComBarraN.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao7.zip

Através do terminal, entre na pasta introducao; compile o arquivo TrianguloComBarraN.java; execute o programa.
8
K19 / rafael / introducao$ javac TrianguloComBarraN . java K19 / rafael / introducao$ java TrianguloComBarraN * ** *** **** *****

Terminal 1.15: Compilando e Executando

Erro: Não Fechar os Blocos
Um erro de compilação comum em Java ou C# é esquecer de fechar os blocos com chave. Observe, nos exemplos a seguir, esse erro ocorrendo.
1 class Programa { 2 public static void main ( String [] args ) {

18

www.k19.com.br

19
3 4 } // instruções

I NTRODUÇÃO

Código Java 1.13: Programa.java

1 class Programa { 2 public static void main ( String [] args ) { 3 // instruções
Código Java 1.14: Programa.java

1 class Programa 2 { 3 static void Main () 4 { 5 // instruções 6 }
Código C# 1.9: Programa.cs

1 class Programa 2 { 3 static void Main () 4 { 5 // instruções
Código C# 1.10: Programa.cs

Veja a mensagem que o compilador do Java exibe quando um bloco não é fechado corretamente.
Programa . java :2: error : reached end of file while parsing public static void main ( String [] args ) { ^ 1 error

Terminal 1.16: Erro de compilação

Analogamente, veja a mensagem que o compilador do C# exibe quando um bloco não é fechado corretamente.
Microsoft ( R ) Visual C # Compiler version 4. .3 319.17929 for Microsoft ( R ) . NET Framework 4.5 Copyright ( C ) Microsoft Corporation . All rights reserved . Programa . cs (4 ,3): error CS1513 : } expected Programa . cs (4 ,3): error CS1513 : } expected

Terminal 1.17: Erro de compilação

Erro: Trocar Maiúsculas e Minúsculas
Um erro de compilação comum em Java ou C# é utilizar letras maiúsculas onde deveriam ser utilizadas letras minúsculas ou vice-versa. Nos exemplos a seguir, o identificador System foi escrito com “s”, porém o correto é com “S”.
1 class HelloWorld { 2 public static void main ( String [] args ) { 3 system . out . println ( " Hello World " ) ; 4 }

www.facebook.com/k19treinamentos

19

I NTRODUÇÃO
5 }
Código Java 1.15: HelloWorld.java

20

1 class HelloWorld 2 { 3 static void Main () 4 { 5 system . Console . WriteLine ( " Hello World " ) ; 6 } 7 }
Código C# 1.11: HelloWorld.cs

Veja as mensagens de erro do compilador do Java e do C# respectivamente.
HelloWorld . java :3: error : package system does not exist system . out . println (" Hello World "); ^ 1 error

Terminal 1.18: Erro de Compilação

Microsoft ( R ) Visual C # Compiler version 4. .3 319.17929 for Microsoft ( R ) . NET Framework 4.5 Copyright ( C ) Microsoft Corporation . All rights reserved . HelloWorld . cs (5 ,3): error CS 1 3 : The name ’ system ’ does not exist in the current context

Terminal 1.19: Erro de Compilação

Erro: Esquecer o Ponto e Vírgula
Para encerrar uma instrução, devemos utilizar o caractere “;”. Não inserir esse caractere no final das instruções gera erro de compilação. Veja, nos dois exemplos abaixo, esse erro ocorrendo.
1 class HelloWorld { 2 public static void main ( String [] args ) { 3 System . out . println ( " Hello World " ) 4 } 5 }
Código Java 1.16: HelloWorld.java

1 class HelloWorld 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Hello World " ) 6 } 7 }
Código C# 1.12: HelloWorld.cs

Veja as mensagens de erro do compilador do Java e do C# respectivamente.
HelloWorld . java :3: error : ’; ’ expected System . out . println (" Hello World ") ^ 1 error

20

www.k19.com.br

21

I NTRODUÇÃO

Terminal 1.20: Erro de Compilação

Microsoft ( R ) Visual C # Compiler version 4. .3 319.17929 for Microsoft ( R ) . NET Framework 4.5 Copyright ( C ) Microsoft Corporation . All rights reserved . HelloWorld . cs (5 ,42): error CS1 2 : ; expected

Terminal 1.21: Erro de Compilação

Erro: Esquecer o Main
Todo programa deve ter um “ponto de partida”. Em Java ou C#, todo programa precisa do método main. Nessas duas linguagens, se você esquecer de definir o método main obterá um erro. Em Java, o erro será de execução. Já em C#, o erro será de compilação. Veja o exemplo a seguir.
1 class HelloWorld { 2 public static void Main ( String [] args ) { 3 System . out . println ( " Hello World " ) ; 4 } 5 }
Código Java 1.17: HelloWorld.java

Observe que no código Java acima, o método main foi definido com letra maiúscula. Contudo, no Java, o correto é com minúscula. Ao compilar o código, nenhum erro ocorre. Mas, ao executar, o seguinte erro é exibido.
K19 / rafael$ javac HelloWorld . java K19 / rafael$ java HelloWorld Error : Main method not found in class HelloWorld , please define the main method as : public static void main ( String [] args )

Terminal 1.22: Erro de Execução

Agora, considere o exemplo a seguir em C#.
1 class HelloWorld 2 { 3 static void main () 4 { 5 System . Console . WriteLine ( " Hello World " ) ; 6 } 7 }
Código C# 1.13: HelloWorld.cs

Nesse caso, o método main foi definido com letra minúscula. Contudo, no C#, o correto é com maiúscula. Ao compilar o código, um erro semelhante ao exibido abaixo ocorrerá.
Microsoft ( R ) Visual C # Compiler version 4. .3 319.17929 for Microsoft ( R ) . NET Framework 4.5 Copyright ( C ) Microsoft Corporation . All rights reserved . error CS5 1 : Program ’c :\ Users \ cosen \ Desktop \ Rafael \ HelloWorld . exe ’ does not contain a static ’ Main ’ method suitable for an entry point

Terminal 1.23: Erro de Compilação

www.facebook.com/k19treinamentos

21

I NTRODUÇÃO

22

Exercícios de Fixação Com C#

Utilize um editor de texto e implemente um programa utilizando a linguagem programação C#. Crie um arquivo chamado HelloWorld.cs na pasta introducao.
9

1 class HelloWorld 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Hello World " ) ; 6 } 7 }
Código C# 1.14: HelloWorld.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao9.zip

Através do terminal, entre na pasta introducao; compile o arquivo HelloWorld.cs; execute o programa.
10
C :\ Users \ K19 \ rafael \ introducao > csc HelloWorld . cs C :\ Users \ K19 \ rafael \ introducao > HelloWorld . exe Hello World

Terminal 1.24: Compilando e Executando

11

Crie um arquivo na pasta introducao chamado Triangulo.cs com o seguinte conteúdo.

1 class Triangulo 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " * " ) ; 6 System . Console . WriteLine ( " ** " ) ; 7 System . Console . WriteLine ( " *** " ) ; 8 System . Console . WriteLine ( " **** " ) ; 9 System . Console . WriteLine ( " ***** " ) ; 1 } 11 }
Código C# 1.15: Triangulo.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao11.zip

Através do terminal, entre na pasta introducao; compile o arquivo Triangulo.cs; execute o programa.
12
C :\ Users \ K19 \ rafael \ introducao > csc Triangulo . cs C :\ Users \ K19 \ rafael \ introducao > Triangulo . exe * ** *** **** *****

22

www.k19.com.br

23

I NTRODUÇÃO

Terminal 1.25: Compilando e Executando

Crie um arquivo na pasta introducao chamado TrianguloComBarraN.cs com o seguinte conteúdo.
13

1 class TrianguloComBarraN 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " *\ n **\ n ***\ n ****\ n ***** " ) ; 6 } 7 }
Código Java 1.18: TrianguloComBarraN.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-fixacao13.zip

Através do terminal, entre na pasta introducao; compile o arquivo TrianguloComBarraN.cs; execute o programa.
14
C :\ Users \ K19 \ rafael \ introducao > csc TrianguloComBarraN . cs C :\ Users \ K19 \ rafael \ introducao > TrianguloComBarraN . exe * ** *** **** *****

Terminal 1.26: Compilando e Executando

Exercícios Complementares

1

Utilize a linguagem Java para implementar um programa que mostre a seguinte saída.

Hello World 1 Hello World 2

2

Utilize a linguagem C# para implementar um programa que mostre a seguinte saída.

Hello World 1 Hello World 2

3

Utilize a linguagem Java para implementar um programa que mostre a sua frase preferida. www.facebook.com/k19treinamentos 23

I NTRODUÇÃO
4

24

Utilize a linguagem C# para implementar um programa que mostre a sua frase preferida.

5

Utilize a linguagem Java para implementar um programa que mostre a seguinte saída.
# # # ##### # # ## # # # # # # # # ### # ###### # # # # # # # # # # # ##### #####

6

Utilize a linguagem C# para implementar um programa que mostre a seguinte saída.
# # # ##### # # ## # # # # # # # # ### # ###### # # # # # # # # # # # ##### #####

Desafios

1 Crie um programa em Java ou C# para exibir o seu nome de forma semelhante ao mostrado abaixo.
______ __ _ | ___ \ / _| | | | |_/ / __ _ | | _ __ _ ___ | | | // _ ‘ | _ / _ ‘ |/ _ \ | | |\ \ (_| | || ( _ | | __ / | \_| \_\__ ,_ | _ | \ __ , _ |\ ___ | _ | _____ _ _ / __ \ | | (_) | / \/ ___ ___ ___ _ __ | | _ _ _ __ ___ | | / _ \/ __ |/ _ \ ’_ \| __ | | ’_ \ / _ \ | \ __ /\ ( _) \ __ \ __ / | | | | _ | | | | | ( _ ) | \ ____ /\ ___ /| ___ /\ ___ | _ | | _ |\ __ | _ | _ | | _ |\ ___ /

2

Pesquise na internet sobre ASCII Art. Crie programas para exibir imagens em ASCII Art.

Resumo do Capítulo

1

Os principais elementos de um computador são: CPU, memória RAM e disco rígido.

2

A CPU é o responsável por executar as instruções dos programas.

3

Os dados dos programas abertos no computador são armazenados na memória RAM.

Os arquivos dos usuários e dados dos programas instalados no computador são armazenados no disco rígido.
24
www.k19.com.br

4

25
5

I NTRODUÇÃO

Os dados armazenados na memória RAM são perdidos se o computador for desligado.

6

Os dados armazenados no disco rígido não são perdidos se o computador for desligado.

Os computadores se comunicam com outros computadores ou com dispositivos periféricos através das suas portas físicas.

7

8

Os dados manipulados por um computador são definidos em formato binário.

As principais unidades de medida para dados binários são: Bit, Byte(B), Quilobyte(kB), Megabyte(MB), Gigabyte(GB) e Terabyte(TB).

9

10

Os comandos que um processador pode executar são definidos pela sua arquitetura.

11

Processadores de arquiteturas diferentes entendem comandos diferentes.

12

Um programa é uma sequência de instruções que resolve uma determinada tarefa.

As linguagens de programação são mais fáceis para pessoas entenderem do que as linguagens de máquina.

13

14

Os programas são definidos em linguagem de programação.

15

As principais linguagens de programação são case sensitive.

16

Os compiladores traduzem o código fonte de um programa para código de máquina.

17

As máquinas virtuais permitem a criação de programas portáveis.

Todo programa necessita de um “ponto de partida”. O ponto de partida dos programas escritos em Java ou C# é a primeira instrução do método main.

18

No código fonte de um programa em Java ou C#, comentários são inseridos com os marcadores //, /* e */.

19

20

A indentação melhora a legibilidade do código fonte.

www.facebook.com/k19treinamentos

25

I NTRODUÇÃO
21

26

Código escrito em linguagem Java deve ser armazenado em arquivos .java. Código escrito em linguagem C# deve ser armazenado em arquivos .cs

Os comandos System.out.println e System.Console.WriteLine são utilizados para exibir mensagens com quebra de linha nas linguagens Java e C# respectivamente.

22

Os comandos System.out.print e System.Console.Write são utilizados para exibir mensagens sem quebra de linha nas linguagens Java e C# respectivamente.

23

Prova

1

Qual alternativa está correta? a) A principal função dos processadores é armazenar dados. b) Os dados armazenados no disco rígido são perdidos quando o computador é desligado. c) O acesso aos dados armazenados na memória RAM é mais rápido do que o acesso aos dados armazenados nos registradores do processador. d) Geralmente, o espaço de armazenamento da memória RAM é menor do que o espaço de armazenamento do disco rígido. e) A memória RAM é a principal responsável pela execução das instruções de um programa.

2

Qual alternativa está correta? a) Um computador não pode transmitir dados para outro computador. b) A conexão entre os teclados e os computadores é realizada através da porta Ethernet. c) As portas USB são a única forma de estabelecer a comunicação dos computadores com os dispositivos periféricos. d) Atualmente, diversos dispositivos podem ser conectados aos computadores através das portas USB. e) Os mouses atuais são conectados aos computadores através das portas HDMI.

3

Qual é a representação binária do número 19? a) 00019 b) 10011

26

www.k19.com.br

27

I NTRODUÇÃO

c) 10101 d) 11001 e) 01101

4

Quantos Bits ocupa um arquivo de 19 kB? a) 19000 b) 19 c) 8192 d) 1048576 e) 155648

5

Qual alternativa está errada? a) x86 e x86_64 são arquiteturas de processador. b) Os comandos que um processador pode executar dependem da arquitetura desse processador. c) Processadores de arquiteturas diferentes executam comandos iguais. d) As instruções que os processadores executam são definidas em binário. e) Processadores executam código em linguagem de máquina.

6

Qual alternativa está correta? a) Java e C# são linguagens de programação. b) Java e C# são linguagens de máquina. c) Java é uma linguagem de programação e C# é uma linguagem de máquina. d) C# é uma linguagem de programação e Java é uma linguagem de máquina.

7

Qual é a função dos compiladores? a) Traduzir código de máquina para código fonte. b) Executar código de máquina. c) Executar código fonte. www.facebook.com/k19treinamentos 27

I NTRODUÇÃO

28

d) Armazenar os dados do computador. e) Traduzir código fonte para código de máquina.

8

Qual é a vantagem das linguagens de programação que utilizam máquinas virtuais? a) A criação de programas “portáveis”. b) Essas linguagens possuem mais comandos. c) Os programas desenvolvidos com essas linguagens são mais rápidos. d) A criação de programas específicos para um sistema operacional. e) Os programas desenvolvidos com essas linguagens consomem menos memória.

9

Qual alternativa possui apenas nomes válidos para arquivos de código fonte Java? a) “K19.java” e “Treinamentos.Java”. b) “K19.java” e “Treinamentos.java”. c) “K19.JAVA” e “Treinamentos.java”. d) “K19.JAVA” e “Treinamentos.JAVA”. e) “K19.Java” e “Treinamentos.Java”.

10

Qual alternativa possui apenas nomes válidos para arquivos de código fonte C#? a) “K19.cs” e “Treinamentos.cs”. b) “K19.csharp” e “Treinamentos.csharp”. c) “K19.cs” e “Treinamentos.csharp”. d) “K19.CS” e “Treinamentos.cs”. e) “K19.Csharp” e “Treinamentos.Cs”.

11

Qual alternativa declara corretamente o método main em Java? a) public static main(String[] args). b) public static void Main(String[] args). c) void main(String[] args).

28

www.k19.com.br

29

I NTRODUÇÃO

d) static void Main(). e) public static void main(String[] args).

12

Qual alternativa declara corretamente o método main em C#? a) public static main(String[] args). b) public static void main(). c) void Main(String[] args). d) static void Main(). e) public static void main(String[] args).

13

Qual código pode ser utilizado para exibir a mensagem “K19” em Java? a) system.out.println("K19"). b) System.out.println("K19"). c) System.Console.WriteLine("K19"). d) system.console.writeLine("K19"). e) print("K19").

14

Qual código pode ser utilizado para exibir a mensagem “K19” em C#? a) system.out.println("K19"). b) System.out.println("K19"). c) System.Console.WriteLine("K19"). d) system.console.writeLine("K19"). e) print("K19").

15

Quais são os marcadores utilizados para inserir comentários em Java ou C#? a) “//” e “%”. b) “#”, “//”, “/*” e “*/”. c) “//”, “/*” e “*/”. www.facebook.com/k19treinamentos 29

I NTRODUÇÃO

30

d) “”. e) “%” e “#”.

Minha Pontuação

Pontuação Mínima:

12

Pontuação Máxima:

15

30

www.k19.com.br

CAPÍTULO
1. --------2. --------3. ---------

A LGORITMOS

2

O que é um Algoritmo?
Um algoritmo é uma sequência de instruções que resolve uma determinada tarefa. Essas instruções podem ser executadas por um computador ou até mesmo por um ser humano. Um algoritmo pode ser comparado a uma receita de bolo, onde cada passo da preparação do bolo corresponde a uma instrução do algoritmo.

Figura 2.1: Preparação de um bolo seguindo os passos de uma receita (algoritmo)

Normalmente, desenvolver algoritmos eficientes não é uma tarefa simples. No meio acadêmico, diversas técnicas para o desenvolvimento de algoritmos mais eficientes são estudadas pela Ciência da Computação.

Como um algoritmo pode ser representado?
Nós podemos representar um algoritmo da maneira que acharmos melhor, desde que tal representação seja bem estruturada e organizada. Porém, as representações mais utilizadas são a de Fluxograma e de Pseudocódigo.

Fluxograma
O fluxograma é um dos métodos mais utilizados para se representar um algoritmo. Trata-se de uma espécie de diagrama e é utilizado para documentar processos (simples ou complexos). Tal tipo de diagrama ajuda o leitor a visualizar um processo, compreendê-lo mais facilmente e encontrar falhas ou problemas de eficiência. www.facebook.com/k19treinamentos 31

A LGORITMOS
PROCESSO CONECTOR

32

DECISÃO

TERMINAL

LEITURA

SETAS DE FLUXO

ESCRITA

Figura 2.2: Símbolos utilizados em um fluxograma

Vamos supor que seja necessário criar um algoritmo para sacar uma determinada quantia de dinheiro de um caixa eletrônico de um banco. Como ficaria o fluxograma desse algoritmo?

INÍCIO

ACESSAR A TELA DE SAQUE

VALOR DO SAQUE

SALDO INSUFICIENTE

NÃO

SALDO SUFICIENTE?

SIM

SALDO - VALOR DO SAQUE

MENSAGEM, SALDO

FIM

Figura 2.3: Exemplo de fluxograma para a operação de saque em um caixa eletrônico de um banco

32

www.k19.com.br

33

A LGORITMOS

Para entender o algoritmo que um fluxograma representa, é necessário conhecer o significado de cada símbolo.

Pseudocódigo
Escrever um algoritmo em pseudocódigo é outra forma muito utilizada por autores de livros que tratam de algoritmos, pois dessa forma o leitor não precisa ter o conhecimento prévio de nenhuma linguagem de programação. Nos países cujo idioma principal é o português, muitos se referem ao pseudocódigo como portugol. Vamos ver como ficaria o exemplo anterior escrito em pseudocódigo:
1 INICIO 2 LER ( ValorDoSaque ) 3 SE ValorDoSaque > E ValorDoSaque md variaveis C :\ Users \ K19 \ rafael > cd variaveis C :\ Users \ K19 \ rafael \ variaveis >

Terminal 3.2: Criando a pasta variaveis no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao1.zip

Na pasta variaveis, implemente um programa em Java que declare uma variável do tipo int chamada idade. Essa variável deve ser inicializada com o valor da sua idade. Por fim, exiba o valor da variável.
2

1 class TestaVariavel { 2 public static void main ( String [] args ) { 3 int idade ; 4 5 idade = 27; 6 7 System . out . println ( idade ) ; 8 } 9 }
Código Java 3.20: TestaVariavel.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao2.zip

3

Compile e execute a classe TestaVariavel.
K19 / rafael / variaveis$ javac TestaVariavel . java K19 / rafael / variaveis$ java TestaVariavel 27

Terminal 3.3: Compilando e executando a classe TestaVariavel

Na pasta variaveis, implemente um programa em Java que gere um número real aleatório entre 0 e 100. Esse número deve ser armazenado em uma variável do tipo double chamada numeroAleatorio. Por fim, exiba o valor da variável.
4

44

www.k19.com.br

45
1 class TestaNumeroAleatorio { 2 public static void main ( String [] args ) { 3 double numeroAleatorio ; 4 5 numeroAleatorio = Math . random () * 1 ; 6 7 System . out . println ( numeroAleatorio ) ; 8 } 9 }
Código Java 3.21: TestaNumeroAleatorio.java

VARIÁVEIS

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao4.zip

5

Compile e execute a classe TestaNumeroAleatorio.
K19 / rafael / variaveis$ javac TestaNumeroAleatorio . java K19 / rafael / variaveis$ java TestaNumeroAleatorio 19.7751722 48 3429

Terminal 3.4: Compilando e executando a classe TestaNumeroAleatorio

6 Na pasta variaveis, implemente um programa em Java que declare uma variável do tipo String chamada nome. Essa variável deve ser inicializada com o seu nome. Por fim, exiba o valor da variável.

1 class TestaString { 2 public static void main ( String [] args ) { 3 String nome ; 4 5 nome = " Rafael Cosentino " ; 6 7 System . out . println ( nome ) ; 8 } 9 }
Código Java 3.22: TestaString.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao6.zip

7

Compile e execute a classe TestaString.
K19 / rafael / variaveis$ javac TestaString . java K19 / rafael / variaveis$ java TestaString Rafael Cosentino

Terminal 3.5: Compilando e executando a classe TestaString

Casting
Considere um valor dentro do intervalo de valores do tipo int. Tanto no Java quanto no C#, esse valor pode ser armazenado em uma variável do tipo long, pois todos os valores que estão no intervalo do tipo int também estão no intervalo do tipo long. www.facebook.com/k19treinamentos 45

VARIÁVEIS

46

Por causa disso, essas duas linguagens de programação permitem que qualquer valor armazenado em uma variável do tipo int possa ser copiado para uma variável do tipo long. Veja o exemplo a seguir.
1 int a = 19; 2 long b = a ;
Código Java 3.23: Compatibilidade

1 int a = 19; 2 long b = a ;
Código C# 3.19: Compatibilidade

Agora, considere um valor dentro do intervalo de valores do tipo long. Não podemos garantir que esse valor possa ser armazenado em uma variável do tipo int porque o intervalo do tipo long é mais abrangente do que o intervalo do tipo int. Por exemplo, o número 2147483648 está no intervalo do tipo long mas não está no intervalo do tipo int. Por causa disso, as linguagens Java e C# não permitem que o valor de uma variável do tipo long seja copiado para uma variável do tipo int. A tentativa de realizar esse tipo de cópia gera erro de compilação mesmo que o valor armazenado na variável do tipo long seja compatível com int. Veja o exemplo a seguir.
1 long a = 19; 2 int b = a ;
Código Java 3.24: Erro de compilação - Incompatibilidade

1 long a = 19; 2 int b = a ;
Código C# 3.20: Erro de compilação - Incompatibilidade

Nesses casos, podemos aplicar uma operação de conversão também chamada de operação de casting. Veja como essa operação é aplicada.
1 long a = 19; 2 int b = ( int ) a ;
Código Java 3.25: Conversão - Casting

1 long a = 19; 2 int b = ( int ) a ;
Código C# 3.21: Conversão - Casting

Operações de casting podem gerar resultados bem indesejados. Considere que uma variável do tipo long armazena o valor 2147483648. Se uma operação de casting for aplicada para copiar esse valor para uma variável do tipo int ocorrerá perda de precisão e o valor obtido na cópia será -2147483648 tanto em Java quanto em C#.
1 long a = 2147483648 L ; 2 int b = ( int ) a ; // b = -2147483648
Código Java 3.26: Casting - Perdendo precisão

46

www.k19.com.br

47
1 long a = 2147483648 L ; 2 int b = ( int ) a ; // b = -2147483648
Código C# 3.22: Casting - Perdendo precisão

VARIÁVEIS

Em geral, quando há o risco de perder precisão, os compiladores exigem a operação de casting. Isso funciona como um alerta para o programador. Contudo, em alguns casos, mesmo com o risco de perder precisão, os compiladores não exigem a operação de casting. Considere os exemplos a seguir.
1 long a = 9223372 368547758 7 L ; 2 float b = a ; // b = 9223372
Código Java 3.27: Não precisa de casting mas tem perda de precisão

1 long a = 9223372 368547758 7 L ;; 2 float b = a ; // b = 9223372
Código C# 3.23: Não precisa de casting mas tem perda de precisão

Nos exemplos acima, a variável do tipo long armazena o valor 9223372036854775807. Ao copiar o conteúdo dessa variável para uma variável do tipo float, há uma perda precisão e o valor obtido é 9223372000000000000 tanto no Java quanto no C#.

Conversão de string
Considere uma variável do tipo string contendo o valor “19”. Não podemos copiar o valor dessa variável para uma variável do tipo int, pois um erro de compilação seria gerado.
1 String a = " 19 " ; 2 int b = a ;
Código Java 3.28: Erro de compilação - Incompatibilidade

1 string a = " 19 " ; 2 int b = a ;
Código C# 3.24: Erro de compilação - Incompatibilidade

Nesses casos, é necessário realizar uma conversão de string para int. Em Java, essa conversão pode ser realizada da seguinte forma:
1 String a = " 19 " ; 2 int b = Integer . parseInt ( a ) ;
Código Java 3.29: Conversão de string para int

Em C#, essa conversão pode ser realizada da seguinte forma:
1 string a = " 19 " ; 2 int b = System . Convert . ToInt32 ( a ) ;
Código C# 3.25: Conversão de string para int

www.facebook.com/k19treinamentos

47

VARIÁVEIS

48

A tabela a seguir mostra como as conversões são realizadas em Java e C#. Java Byte.parseByte() Short.parseShort() Integer.parseInt() Long.parseLong() Float.parseFloat() Double.parseDouble() Boolean.parseBoolean()

byte short int long float double boolean

Tabela 3.3: Conversão em Java

sbyte byte short ushort int uint long ulong float double decimal bool

C# System.Convert.ToSByte() System.Convert.ToByte() System.Convert.ToInt16() System.Convert.ToUInt16() System.Convert.ToInt32() System.Convert.ToUInt32() System.Convert.ToInt64() System.Convert.ToUInt64() System.Convert.ToSingle() System.Convert.ToDouble() System.Convert.ToDecimal() System.Convert.ToBoolean()
Tabela 3.4: Conversão em C#

Convenções de nomenclatura
Os nomes das variáveis são fundamentais para o entendimento do código fonte. Considere o exemplo a seguir:
1 int j ; 2 int f ; 3 int m ;

Você consegue deduzir quais dados serão armazenados nas variáveis j, f e m? Provavelmente, não. Vamos melhorar um pouco os nomes dessas variáveis.
1 int jan ; 2 int fev ; 3 int mar ;

Agora, talvez, você tenha uma vaga ideia. Vamos melhorar mais um pouco os nomes dessas variáveis.
48
www.k19.com.br

49
1 int janeiro ; 2 int fevereiro ; 3 int marco ;

VARIÁVEIS

Agora sim! Você já sabe para que servem essas variáveis? Se você parar para pensar ainda não sabe muita coisa. Então, é importante melhorar mais uma vez o nome dessas variáveis.
1 int numeroDePedidosEmJaneiro ; 2 int numeroDePedidosEmFevereiro ; 3 int numeroDePedidosEmMarco ;

Finalmente, os nomes das variáveis conseguem expressar melhor a intenção delas. Consequentemente, a leitura e o entendimento do código fonte seria mais fácil. Geralmente, bons nomes de variáveis são compostos por várias palavras como no exemplo a seguir.
1 int numeroDeCandidatosAprovados ;

Quando o nome de uma variável é composto, é fundamental adotar alguma convenção para identificar o início e o termino das palavras. A separação natural das palavras na língua portuguesa são os espaços. Contudo, os nomes das variáveis em Java ou C# não podem possuir espaços. Não adotar nenhuma convenção de nomenclatura para identificar o início e o termino das palavras é como escrever um texto em português sem espaços entre as palavras. Em alguns casos, o leitor não saberia como separar as palavras. Considere o exemplo abaixo.

salamesadia
O que está escrito no texto acima? A resposta depende da divisão das palavras. Você pode ler como “sala mesa dia” ou “salame sadia”. Dessa forma, fica claro a necessidade deixar visualmente explícito a divisão das palavras. Em algumas linguagens de programação, delimitadores são utilizados para separar as palavras que formam o nome de uma variável.

numero_de_candidatos_aprovados; numero-de-candidatos-aprovados;
Em outras linguagens de programação, letras maiúsculas e minúsculas são utilizadas para separar as palavras.

NumeroDeCandidatosAprovados; numeroDeCandidatosAprovados;
Em Java ou em C#, a convenção de nomenclatura adotada para separar as palavras que formam o nome de uma variável é o Camel Case, que consiste em escrever o nome da variável com a primeira letra de cada palavra em maiúscula com exceção da primeira letra da primeira palavra. www.facebook.com/k19treinamentos 49

VARIÁVEIS
1 int numeroDaConta ; 2 int NumeroDaConta ; // não segue a convenção
Código Java 3.35: Convenção para a escrita dos nomes das variáveis em Java e C#.

50

Também devemos nos lembrar que as duas linguagens são Case Sensitive. Dessa forma, numeroDaConta e NumeroDaConta são consideradas variáveis diferentes pelo fato do nome da primeira começar com letra minúscula e o da segunda com maiúscula.

Regras de nomenclatura
As linguagens Java e C# possuem regras técnicas muito parecidas a respeito da nomenclatura das variáveis. O nome de uma variável:

1. Não deve começar com um dígito; 2. Não pode ser igual a uma palavra reservada; 3. Não pode conter espaço(s); 4. Pode ser uma palavra de qualquer tamanho; 5. Pode conter letras, dígitos e _ (underscore). 6. Em Java, pode conter também o caractere $.

1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23

// válido int numeroDaConta ; // inválido pois o nome de uma variável não pode começar com um dígito int 2 outraVariavel ; // inválido pois o nome de uma variável não pode ser igual a uma palavra reservada double double ; // inválido pois o nome de uma variável não pode conter espaços double saldo da conta ; // válido int umaVariavelComUmNomeSuperHiperMegaUltraGigante ; // válido int numeroDaContaCom8Digitos_semPontos ; // válido somente em Java int valorDoProdutoEmR$; // inválido pois o nome de uma variável não pode conter o caractere # int # telefone ;
Código Java 3.36: Exemplos de nomes de variáveis válidos e inválidos

As linguagens Java e C# permitem a criação de nomes de variáveis em qualquer idioma, pois elas aceitam qualquer caractere Unicode UTF-16. Portanto são válidas as variáveis escritas com as acentuações do português, assim como as variáveis escritas em japonês, por exemplo.
50
www.k19.com.br

51

VARIÁVEIS

Apesar de ser possível o uso de caracteres especiais, assim como o uso dos caracteres $ (cifrão) e _ (underscore), não é recomendável utilizá-los. Não utilizar tais caracteres é uma boa prática de programação. Essa prática facilita a leitura do código fonte em qualquer editor de texto.

Keywords
Toda linguagem de programação possui um conjunto de palavras reservadas. Em geral, essas palavras representam os comandos da linguagem. Abaixo você pode visualizar as palavras reservadas do Java e do C#. abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for if goto implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while

Tabela 3.5: Keywords do Java

abstract byte class delegate event fixed if internal new override readonly short struct try unsafe volatile

as case const do explicit float implicit in is null params ref sizeof switch typeof ushort while

base catch continue double extern for int lock object private return stackalloc this uint using

bool char decimal else false foreach interface long operator protected sbyte static throw ulong virtual

break checked default enum finally goto namespace out public sealed string true unchecked void

Tabela 3.6: Keywords do C#

Formatação www.facebook.com/k19treinamentos 51

VARIÁVEIS

52

Considere uma variável que armazena o preço de um produto. Geralmente, preços possuem casas decimais. Dessa forma, devemos escolher um tipo que permita o armazenamento de números reais. Por exemplo, podemos escolher o tipo double no Java ou no C#. Veja os exemplos a seguir.
1 double preco = Math . random () * 1 ;

Código Java 3.37: Preço de um produto

1 System . Random gerador = new System . Random () ; 2 double preco = gerador . NextDouble () * 1 ;
Código C# 3.26: Preço de um produto

Nos exemplos anteriores, os preços dos produtos foram gerados aleatoriamente. Com alta probabilidade, esses valores possuirão mais do que duas casas decimais. Contudo, provavelmente, seria mais conveniente exibir os preços apenas com duas casas decimais. Isso pode ser feito facilmente em Java ou C# através das máscaras de formatação.
1 System . out . printf ( " %.2 f " , preco ) ;
Código Java 3.38: Exibindo números formatados em Java

1 System . Console . WriteLine ( " { : F2 } " , preco ) ;
Código C# 3.27: Exibindo números formatados em C#

Podemos inserir diversos parâmetros nas máscaras de formatação. Em Java, cada parâmetro deve ser indicado com o caractere “%”.
1 System . out . printf ( " %1 $s tem %2 $d anos e pesa %3 $ .2 f " , " Jonas " , 3 , 49.459) ;
Código Java 3.39: Parâmetros na máscara de formatação

No exemplo, o trecho “%1$s” indica que o primeiro parâmetro da máscara é uma string. Já o trecho “%2$d” indica que o segundo parâmetro é um número inteiro. Por fim, o trecho “%3$.2f” indica que o terceiro parâmetro é um número real formatado com duas casas decimais. S ou s: string D ou d: número inteiro decimal X ou x: número inteiro decimal f: número real Em C#, os parâmetros são definidos com chaves (“{}”).
1 System . Console . WriteLine ( " { } tem {1: D } anos e pesa {2: F2 } " , " Jonas " , 3 , 49.459) ;
Código C# 3.28: Parâmetros na máscara de formatação

No exemplo, o trecho “{0}” indica onde o primeiro parâmetro deve ser inserido. Já o trecho “{1:D}” indica que o segundo parâmetro é um número inteiro. Por fim, o trecho “{2:F2}” indica que o terceiro parâmetro é um número real formatado com duas casas decimais.
52
www.k19.com.br

53

VARIÁVEIS

D ou d: número inteiro decimal X ou x: número inteiro hexadecimal F ou f: número real

Formatação de Data e Hora (Conteúdo Extra)
Normalmente, o formato padrão para exibir data e hora varia de país para país. ou de região para região. Por exemplo, os brasileiros estão mais acostumados com o formato de data “dia/mês/ano”. Por outro lado, os americanos costumam utilizar o formato “mês/dia/ano”. Tanto em Java quanto em C#, podemos formatar data e hora facilmente. No código Java abaixo, a formatação “dia/mês/ano hora:minutos:segundos” está sendo aplicada.
1 java . util . Calendar fundacaoK19 = 2 new java . util . GregorianCalendar (2 1 , 7 , 27 , 1 , 32 , 15) ; 3 4 java . text . SimpleDateFormat sdf = 5 new java . text . SimpleDateFormat ( " dd / MM / yyyy HH : mm : ss " ) ; 6 7 String fundacaoK19Formatada = sdf . format ( fundacaoK19 . getTime () ) ;
Código Java 3.40: Aplicando o formado "dia/mês/ano hora:minutos:segundos”

Na máscara de formatação, devemos utilizar os caracteres especiais para definir o formato desejado. Veja o que cada caractere indica.

d: dia M: mês y: ano H: hora m: minutos s: segundos

Quando o caractere d é utilizado de forma simples na máscara de formatação, os dias de 1 até 9 são formatados com apenas um dígito. Quando utilizamos dd, os dias de 1 até 9 são formatados com apenas dois dígitos (01, 02, 03, ..., 09). Analogamente, para o mês, ano, hora, minutos e segundos. Agora, veremos a formatação de data e hora no C#. Veja o exemplo a seguir.
1 System . DateTime fundacaoK19 = 2 new System . DateTime (2 1 , 7 , 27 , 1 , 32 , 15) ; 3 4 string fundacaoK19Formatada = fundacaoK19 . ToString ( " dd / MM / yyyy HH : mm : ss " ) ;
Código C# 3.29: Aplicando o formado "dia/mês/ano hora:minutos:segundos”

www.facebook.com/k19treinamentos

53

VARIÁVEIS

54

A máscara de formatação de data e hora do C# funciona de forma muito semelhante a do Java.

Exercícios de Fixação Com Java

Na pasta variaveis, implemente um programa em Java para exibir os valores formatados de algumas variáveis.
8

1 class TestaFormatacao { 2 public static void main ( String [] args ) { 3 String nome = " Jonas Hirata " ; 4 int idade = 3 ; 5 double peso = 49.7345; 6 7 System . out . printf ( " O %1 $s tem %2 $d anos e pesa %3 $ .2 f kg \ n " , nome , idade , peso ) ; 8 } 9 }
Código Java 3.41: TestaFormatacao.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao8.zip

9

Compile e execute a classe TestaFormatacao.
K19 / rafael / variaveis$ javac TestaFormatacao . java K19 / rafael / variaveis$ java TestaFormatacao O Jonas Hirata tem 3 anos e pesa 49.73

Terminal 3.6: Compilando e executando a classe TestaFormatacao

10

Na pasta variaveis, implemente um programa em Java que realiza uma operação de casting.

1 class TestaCasting { 2 public static void main ( String [] args ) { 3 long a = 2147483648 L ; 4 5 int b = ( int ) a ; 6 7 System . out . println ( a ) ; 8 System . out . println ( b ) ; 9 } 1 }
Código Java 3.42: TestaCasting.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao1 .zip

11

Compile e execute a classe TestaCasting.
K19 / rafael / variaveis$ javac TestaCasting . java K19 / rafael / variaveis$ java TestaCasting 2147483648 -2147483648

Terminal 3.7: Compilando e executando a classe TestaCasting

54

www.k19.com.br

55
12

VARIÁVEIS

Na pasta variaveis, implemente um programa em Java que realiza uma operação de conversão de string.
1 class TestaConversao { 2 public static void main ( String [] args ) { 3 String s = " 19. 9 " ; 4 5 double d = Double . parseDouble ( s ) ; 6 7 System . out . println ( d ) ; 8 } 9 }
Código Java 3.43: TestaConversao.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao12.zip

13

Compile e execute a classe TestaConversao.
K19 / rafael / variaveis$ javac TestaConversao . java K19 / rafael / variaveis$ java TestaConversao 19. 9

Terminal 3.8: Compilando e executando a classe TestaConversao

Erro: Variáveis com nomes repetidos
Um erro de compilação comum em Java ou C# ocorre quando duas ou mais variáveis são declaradas com nome repetido em um mesmo bloco. Veja um exemplo de programa em Java com esse problema.
1 class Programa { 2 public static void main ( String [] args ) { 3 int a = 1 ; 4 5 double a = 1 .7; 6 7 int a = 5; 8 } 9 }
Código Java 3.44: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :5: error : variable a is already defined in method main ( String []) double a = 1 .7; ^ Programa . java :7: error : variable a is already defined in method main ( String []) int a = 5; ^ 2 errors

Terminal 3.9: Erro de compilação

Agora, veja um exemplo de programa em C# com esse problema.
1 class Programa

www.facebook.com/k19treinamentos

55

VARIÁVEIS
2 { 3 static void Main () 4 { 5 int a = 1 ; 6 7 double a = 1 .7; 8 9 int a = 5; 1 } 11 }
Código C# 3.30: Programa.cs

56

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . cs (7 ,1 ): error CS 128 : A local variable named ’a ’ is already defined in this scope Programa . cs (7 ,14): error CS 266 : Cannot implicitly convert type ’ double ’ to ’int ’. An explicit conversion exists ( are you missing a cast ?) Programa . cs (9 ,7): error CS 128 : A local variable named ’a ’ is already defined in this scope

Terminal 3.10: Erro de compilação

Erro: Esquecer a inicialização de uma variável local
Outro erro de compilação comum em Java ou C# ocorre quando utilizamos uma variável local não inicializada. Veja um exemplo de programa em Java com esse problema.
1 class Programa { 2 public static void main ( String [] args ) { 3 int a ; 4 5 System . out . println ( a ) ; 6 } 7 }
Código Java 3.45: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :5: error : variable a might not have been initialized System . out . println ( a ); ^ 1 error

Terminal 3.11: Erro de compilação

Agora, veja um exemplo de programa em C# com esse problema.
1 class Programa 2 { 3 static void Main () 4 { 5 int a ; 6 7 System . Console . WriteLine ( a ) ; 8 } 9 }
Código C# 3.31: Programa.cs

56

www.k19.com.br

57

VARIÁVEIS

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . cs (7 ,42): error CS 165 : Use of unassigned local variable ‘a ’

Terminal 3.12: Erro de compilação

Erro: Trocar aspas simples por aspas duplas ou vice-versa
Mais um erro comum em Java ou C# ocorre quando utilizamos aspas simples onde deveria ser aspas duplas ou vice-versa. Veja um exemplo de programa em Java que utiliza aspas duplas onde deveria ser aspas simples.
1 class Programa { 2 public static void main ( String [] args ) { 3 char c = " A " ; 4 } 5 }
Código Java 3.46: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :3: error : incompatible types char c = " A "; ^ required : char found : String 1 error

Terminal 3.13: Erro de compilação

Agora, veja um exemplo de programa em Java que utiliza aspas simples onde deveria ser aspas duplas.
1 class Programa { 2 public static void main ( String [] args ) { 3 String s = ’ K19 Treinamentos ’; 4 } 5 }
Código Java 3.47: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :3: error : unclosed character literal String s = ’ K19 Treinamentos ’; ^ Programa . java :3: error : not a statement String s = ’ K19 Treinamentos ’; ^ Programa . java :3: error : ’; ’ expected String s = ’ K19 Treinamentos ’; ^ Programa . java :3: error : unclosed character literal String s = ’ K19 Treinamentos ’; ^ Programa . java :3: error : not a statement String s = ’ K19 Treinamentos ’; ^ 5 errors

Terminal 3.14: Erro de compilação

www.facebook.com/k19treinamentos

57

VARIÁVEIS

58

Agora, veja um exemplo de programa em C# que utiliza aspas duplas onde deveria ser aspas simples.
1 class Programa 2 { 3 static void Main () 4 { 5 char c = " A " ; 6 } 7 }
Código C# 3.32: Programa.cs

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . cs (5 ,22): error CS 29 : Cannot implicitly convert type ‘ string ’ to ‘ char ’

Terminal 3.15: Erro de compilação

Agora, veja um exemplo de programa em C# que utiliza aspas simples onde deveria ser aspas duplas.
1 class Programa 2 { 3 static void Main () 4 { 5 string s = ’ K19 Treinamentos ’; 6 } 7 }
Código C# 3.33: Programa.cs

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . cs (5 ,3 ): error CS1 12 : Too many characters in character literal

Terminal 3.16: Erro de compilação

Erro: Utilizar o separador decimal errado
Outro erro de compilação comum em Java ou C# ocorre quando não utilizamos o separador decimal correto. Veja um exemplo de programa em Java com esse problema.
1 class Programa { 2 public static void main ( String [] args ) { 3 double d = 19 , 9; 4 } 5 }
Código Java 3.48: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :3: error : < identifier > expected double d = 19 , 9; ^ 1 error

58

www.k19.com.br

59

VARIÁVEIS

Terminal 3.17: Erro de compilação

Agora, veja um exemplo de programa em C# com esse problema.
1 class Programa 2 { 3 static void Main () 4 { 5 double d = 19 , 9; 6 } 7 }
Código C# 3.34: Programa.cs

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . cs (5 ,17): error CS1 1 : Identifier Expected

Terminal 3.18: Erro de compilação

Erro: Valores incompatíveis com os tipos das variáveis
Também é um erro de compilação comum em Java ou C# atribuir valores incompatíveis com os tipos das variáveis. Veja um exemplo de programa em Java com esse problema.
1 class Programa { 2 public static void main ( String [] args ) { 3 int a = 19. 9; 4 } 5 }
Código Java 3.49: Programa.java

A mensagem de erro de compilação seria semelhante a apresentada abaixo.
Programa . java :3: error : possible loss of precision int a = 19. 9; ^ required : int found : double 1 error

Terminal 3.19: Erro de compilação

Agora, veja um exemplo de programa em C# com esse problema.
1 class Programa 2 { 3 static void Main () 4 { 5 int a = 19. 9; 6 } 7 }
Código C# 3.35: Programa.cs

A mensagem de erro de compilação seria semelhante a apresentada abaixo. www.facebook.com/k19treinamentos 59

VARIÁVEIS
Programa . cs (5 ,11): error CS 266 : Cannot implicitly convert type ’ double ’ to ’int ’. An explicit conversion exists ( are you missing a cast ?)

60

Terminal 3.20: Erro de compilação

Exercícios de Fixação Com C#

Na pasta variaveis, implemente um programa em C# que declare uma variável do tipo int chamada idade. Essa variável deve ser inicializada com o valor da sua idade. Por fim, exiba o valor da variável.
14

1 class TestaVariavel 2 { 3 static void Main () 4 { 5 int idade ; 6 7 idade = 27; 8 9 System . Console . WriteLine ( idade ) ; 1 } 11 }
Código C# 3.36: TestaVariavel.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao14.zip

15

Compile e execute a classe TestaVariavel.
C :\ Users \ K19 \ rafael \ variaveis > csc TestaVariavel . cs C :\ Users \ K19 \ rafael \ variaveis > TestaVariavel . exe 27

Terminal 3.21: Compilando e executando a classe TestaVariavel

Na pasta variaveis, implemente um programa em C# que gere um número real aleatório entre 0 e 100. Esse número deve ser armazenado em uma variável do tipo double chamada numeroAleatorio. Por fim, exiba o valor da variável.
16

1 class TestaNumeroAleatorio 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double numeroAleatorio = gerador . NextDouble () * 1 8 9 System . Console . WriteLine ( numeroAleatorio ) ; 1 } 11 }

;

Código C# 3.37: TestaNumeroAleatorio.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k
60

1-variaveis-fixacao16.zip

www.k19.com.br

61
17

VARIÁVEIS

Compile e execute a classe TestaNumeroAleatorio.
C :\ Users \ K19 \ rafael \ variaveis > csc TestaNumeroAleatorio . cs C :\ Users \ K19 \ rafael \ variaveis > TestaNumeroAleatorio . exe 19.1 94 67459 4

Terminal 3.22: Compilando e executando a classe TestaVariavel

18 Na pasta variaveis, implemente um programa em C# que declare uma variável do tipo string chamada nome. Essa variável deve ser inicializada com o seu nome. Por fim, exiba o valor da variável.

1 class TestaString 2 { 3 static void Main () 4 { 5 string nome ; 6 7 nome = " Rafael Cosentino " ; 8 9 System . Console . WriteLine ( nome ) ; 1 } 11 }
Código C# 3.38: TestaString.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao18.zip

19

Compile e execute a classe TestaString.
C :\ Users \ K19 \ rafael \ variaveis > csc TestaString . cs C :\ Users \ K19 \ rafael \ variaveis > TestaString Rafael Cosentino

Terminal 3.23: Compilando e executando a classe TestaString

Na pasta variaveis, implemente um programa em C# para exibir os valores de algumas variáveis formatados.
20

1 class TestaFormatacao 2 { 3 static void Main () 4 { 5 string nome = " Jonas Hirata " ; 6 int idade = 3 ; 7 double peso = 49.7345; 8 9 System . Console . WriteLine ( " O { } tem {1} anos e pesa {2: F2 } kg " , nome , idade , peso ) ; 1 } 11 }
Código C# 3.39: TestaFormatacao.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao2 .zip

21

Compile e execute a classe TestaFormatacao.

www.facebook.com/k19treinamentos

61

VARIÁVEIS
K19 / rafael / variaveis$ javac TestaFormatacao . java K19 / rafael / variaveis$ java TestaFormatacao O Jonas Hirata tem 3 anos e pesa 49.73

62

Terminal 3.24: Compilando e executando a classe TestaFormatacao

22

Na pasta variaveis, implemente um programa em C# que realiza uma operação de casting.

1 class TestaCasting 2 { 3 static void Main () 4 { 5 long a = 2147483648 L ; 6 7 int b = ( int ) a ; 8 9 System . Console . WriteLine ( a ) ; 1 System . Console . WriteLine ( b ) ; 11 } 12 }
Código C# 3.40: TestaCasting.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao22.zip

23

Compile e execute a classe TestaCasting.
C :\ Users \ K19 \ rafael \ variaveis > csc TestaCasting . cs C :\ Users \ K19 \ rafael \ variaveis > TestaCasting . exe 2147483648 -2147483648

Terminal 3.25: Compilando e executando a classe TestaCasting

Na pasta variaveis, implemente um programa em C# que realiza uma operação de conversão de string.
24

1 class TestaConversao 2 { 3 static void Main () 4 { 5 string s = " 19. 9 " ; 6 7 double d = System . Convert . ToDouble ( s ) ; 8 9 System . Console . WriteLine ( d ) ; 1 } 11 }
Código Java 3.50: TestaConversao.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-fixacao24.zip

25

Compile e execute a classe TestaConversao.
C :\ Users \ K19 \ rafael \ variaveis > csc TestaConversao . cs

62

www.k19.com.br

63
C :\ Users \ K19 \ rafael \ variaveis > TestaConversao . exe 19. 9

VARIÁVEIS

Terminal 3.26: Compilando e executando a classe TestaConversao

Exercícios Complementares

1

Indique os tipos adequados da linguagem Java e C# para cada valor da lista abaixo.

1. “Bom dia” 2. 3 3. 235.13 4. true 5. -135 6. 256.23F 7. ‘A’ 8. 6463275245745L

Na pasta variaveis, implemente um programa em Java que declare uma variável do tipo double chamada peso. Essa variável deve ser inicializada com o valor do seu peso. Exiba o valor dessa variável.
2 3 Na pasta variaveis, implemente um programa em Java que declare uma variável de cada um dos tipos básicos vistos nesse capítulo. Essas variáveis devem ser inicializadas com valores adequados. Por fim, exiba os valores dessas variáveis.

Na pasta variaveis, implemente um programa em Java que declare uma variável do tipo string e inicialize-a com o valor “1571.11”. Depois, com uma conversão, copie esse valor para uma variável do tipo double.
4

Na pasta variaveis, implemente um programa em Java que declare uma variável do tipo java.util.Calendar e inicialize-a com a data e a hora atuais. Depois, declare uma outra variável do tipo java.util.Calendar e inicialize-a com a data “27 de Agosto de 2010” e hora “10:32:15”. Por fim, formate e exiba essas datas.
5

Na pasta variaveis, implemente um programa em C# que declare uma variável do tipo double chamada peso. Essa variável deve ser inicializada com o valor do seu peso. Exiba o valor dessa variável.
6

www.facebook.com/k19treinamentos

63

VARIÁVEIS
7

64

Na pasta variaveis, implemente um programa em C# que declare uma variável de cada um dos tipos básicos vistos nesse capítulo. Essas variáveis devem ser inicializadas com valores adequados. Por fim, exiba os valores dessas variáveis.

8 Na pasta variaveis, implemente um programa em C# que declare uma variável do tipo string e inicialize-a com o valor “1571.11”. Depois, com uma conversão, copie esse valor para uma variável do tipo double.

Na pasta variaveis, implemente um programa em C# que declare uma variável do tipo System.DateTime e inicialize-a com a data e a hora atuais. Depois, declare uma outra variável do tipo System.DateTime e inicialize-a com a data “27 de Agosto de 2010” e hora “10:32:15”. Por fim, formate e exiba essas datas.
9

Considere um sistema de gerenciamento de mercadorias de uma loja. Implemente um programa que declare variáveis para representar os seguintes dados: número do pedido, código do produto, quantidade e valor total da compra. Inicialize essas variáveis com valores apropriados. Por fim, exiba os valores armazenados.
10

Desafios

Olhando para a solução dada nos exercícios complementares, você faria alguma alteração caso estivéssemos desenvolvendo o sistema para uma loja pequena? E se fosse para uma grande rede de lojas? Quais seriam as alterações e quais as implicações?
1

Resumo do Capítulo

1

A função de uma variável é armazenar uma informação (dado).

2

Toda variável possui um nome (identificador).

3

Em Java ou C#, toda variável está associada a um tipo.

4

Para armazenar um valor em uma variável, esse valor deve ser compatível com o tipo da variá-

vel.

5

Em Java ou C#, as variáveis devem ser inicializadas antes de serem utilizadas.

6

Uma variável do tipo string, pode armazenar uma sequência de caracteres. www.k19.com.br 64

65
7

VARIÁVEIS

No Java, as datas e horas podem ser armazenadas em variáveis do tipo java.util.Calendar.

8

No C#, as datas e horas podem ser armazenadas em variáveis do tipo System.DateTime.

9

O separador de casas decimais em Java ou C# é o “.”(ponto).

10

Em Java ou C#, os valores literais booleanos são true e false.

11

Strings literais são definidas dentro de aspas duplas no Java e no C#.

12

Operações de casting podem gerar resultados bem diferentes dos desejados.

As convenções de nomenclatura de variáveis são importantes para melhorar a legibilidade do código.

13

No Java e no C#, as convenções de nomenclatura de variáveis são baseadas em letras maiúsculas e minúsculas.

14

15

Podemos gerar números aleatórios em Java com o método Math.random().

16

Podemos gerar números aleatórios em C# com a classe System.Random.

Prova

1

Qual é a função das variáveis?

a) Exibir as mensagens dos programas. b) Gerar números aleatórios. c) Formatar números com casas decimais. d) Armazenar dados. e) Realizar cálculos matemáticos.

2

O que ocorre quando uma variável não inicializada é utilizada? www.facebook.com/k19treinamentos 65

VARIÁVEIS

66

a) Um erro de compilação. b) Um erro de execução. c) A variável é inicializada com 0. d) A variável é inicializada com um valor aleatório. e) A variável é inicializada com null.

3

Qual alternativa apresenta os tipos básicos do Java para números reais?

a) byte e double b) int e float c) float e double d) real e long e) single e double

4

Qual alternativa apresenta os tipos básicos do C# para números reais?

a) byte, long e double b) float, double e decimal c) float e double d) float e real e) double e decimal

5

Considere as linguagens Java e C#, qual alternativa declara corretamente um caractere literal?

a) ’K’ b) ’KK’ c) "K" d) "KK" e) K f) KK

66

www.k19.com.br

67
6

VARIÁVEIS

No Java e no C#, quais palavras representam os valores literais booleanos?

a) verdadeiro e falso b) True e False c) True e false d) true ou verdadeiro e false ou falso e) true e false

7

Em Java, quais são as formas de definir os valores literais numéricos inteiros?

a) decimal e hexadecimal b) binário e decimal c) octal e decimal d) binário, decimal e hexadecimal e) binário, octal, decimal e hexadecimal

8

Em C#, quais são as formas de definir os valores literais numéricos inteiros?

a) decimal e hexadecimal b) binário e decimal c) octal e decimal d) binário, decimal e hexadecimal e) binário, octal, decimal e hexadecimal

9

Considere as linguagens Java e C#, como são definidas as strings?

a) Dentro de aspas simples. b) Dentro de aspas duplas. c) Dentro de aspas simples ou aspas duplas.

10

Qual afirmação sobre casting está correta? www.facebook.com/k19treinamentos 67

VARIÁVEIS

68

a) As linguagens Java e C# não permitem operações de casting. b) Operações de casting são utilizadas para copiar valores entre variáveis do mesmo tipo. c) Operações de casting são perigosas pois podem gerar valores indesejados. d) Nas linguagens Java e C#, as operações de casting são utilizadas para transformar strings em números. e) Nas linguagens Java e C#, as operações de casting são utilizadas para transformar números em strings.

11

Qual nome de variável segue a convenção de nomenclatura do Java e do C#?

a) idadeDoMarcelo b) idadedomarcelo c) idade_do_marcelo d) idade-do-marcelo e) idade do marcelo

12

Qual nome de variável segue as regras de nomeclatura do Java e do C#?

a) 90pesoMinimoDoMarcelo b) int c) pesoDoMarceloEstaAcimaDe90 d) peso.do.marcelo e) peso do marcelo

Minha Pontuação

Pontuação Mínima:

9

Pontuação Máxima:

12

68

www.k19.com.br

CAPÍTULO
/ -= < % *= %= >= ++ --

O PERADORES

4

Tipos de Operadores
Para manipular as variáveis de uma aplicação, devemos utilizar os operadores oferecidos pela linguagem de programação que estamos utilizando. As linguagens Java e C# possuem diversos operadores. Os principais operadores dessas linguagens são: • Aritmético: • Atribuição: • Relacional: • Lógico: & + = == | ˆ += != *

&&

Operadores Aritméticos
Os operadores aritméticos funcionam de forma muito semelhante aos operadores da matemática. Os operadores aritméticos são: • Adição + • Subtração • Multiplicação * • Divisão / • Módulo %
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 int umMaisUm = 1 + 1; // umMaisUm = 2 int tresVezesDois = 3 * 2; // tresVezesDois = 6 int quatroDivididoPorDois = 4 / 2; // quatroDivididoPorDois = 2 int seisModuloCinco = 6 % 5; // seisModuloCinco = 1 int x = 7; x = x + 1 * 2; // x = 9 x = x - 4; // x = 5

www.facebook.com/k19treinamentos

69

O PERADORES
21 x = x / (6 - 2 + (3 * 5) /(16 - 1) ) ; 22 // x = 1
Código Java 4.1: Exemplo de uso dos operadores aritméticos.

70

Importante
O módulo de um número x, na matemática, é o valor numérico de x desconsiderando o seu sinal (valor absoluto). Na matemática, expressamos o módulo da seguinte forma: | − 2| = 2. Em linguagens de programação, o módulo de um número é o resto da divisão desse número por outro. No exemplo acima, o resto da divisão de 6 por 5 é igual a 1. Além disso, lemos a expressão “6%5” da seguinte forma: seis módulo cinco.

Importante
As operações aritméticas em Java e C# obedecem as mesmas regras da matemática com relação à precedência dos operadores e parênteses. Portanto, o cálculo começa com as operações definidas nos parênteses mais internos até os mais externos. As operações de multiplicação, divisão e módulo são resolvidas antes das operações de subtração e adição.

Mais Sobre
As operações de potenciação e raiz quadrada podem ser realizadas através dos métodos Math.pow e Math.sqrt em Java ou através dos métodos Math.Pow e Math.Sqrt em C#. Veja alguns exemplos.
1 2 3 4 5 double a = Math . pow (3 , 5) ; // a = 243 double b = Math . sqrt (9) ; // b = 3
Código Java 4.2: Potenciação e raiz quadrada

1 2 3 4 5

double a = Math . Pow (3 , 5) ; // a = 243 double b = Math . Sqrt (9) ; // b = 3
Código C# 4.1: Potenciação e raiz quadrada

Divisão Inteira
Considere uma operação de divisão entre valores inteiros. Por exemplo, uma divisão entre valores do tipo básico int.
1 int a = 5; 2 int b = 2;

70

www.k19.com.br

71
3 System . out . println ( a / b ) ;
Código Java 4.3: Divisão inteira

O PERADORES

1 int a = 5; 2 int b = 2; 3 System . Console . WriteLine ( a / b ) ;
Código C# 4.2: Divisão inteira

Matematicamente, o resultado da operação “5 / 2” é “2.5”. Contudo, nos exemplos acima, o valor obtido na divisão “a / b” é 2. Em Java ou C#, quando ocorre uma divisão entres dois valores inteiros, a parte fracionária é descartada. Podemos, explicitamente, converter um dos valores envolvidos na divisão ou até mesmo os dois para algum tipo numérico real. Dessa forma, a divisão não seria inteira e a parte fracionária não seria descartada. Essas conversões podem ser realizadas com operações de casting. Nos exemplos a seguir, o resultado das operações de divisão é 2.5.
1 2 3 4 5 6 7 8 9 1 11 int a = 5; int b = 2; // convertendo apenas o " a " System . out . println (( double ) a / b ) ; // convertendo apenas o " b " System . out . println ( a / ( double ) b ) ; // convertendo apenas o " a " e o " b " System . out . println (( double ) a / ( double ) b ) ;
Código Java 4.4: Castings

1 2 3 4 5 6 7 8 9 1 11

int a = 5; int b = 2; // convertendo apenas o " a " System . Console . WriteLine (( double ) a / b ) ; // convertendo apenas o " b " System . Console . WriteLine (( double ) a / ( double ) b ) ; // convertendo apenas o " a " e o " b " System . Console . WriteLine (( double ) a / ( double ) b ) ;
Código C# 4.3: Castings

Pare para pensar...
Considerando o que foi discutido anteriormente a respeito de divisão inteira e casting. Qual é o resultado da operação do exemplo a seguir?
1 double d = ( double ) (5 / 2) ;

Concatenação de Strings www.facebook.com/k19treinamentos 71

O PERADORES

72

Como vimos anteriormente, o operador + é utilizado para realizar soma aritmética. Mas, ele também pode ser utilizado para concatenar strings tanto no Java quanto no C#. Veja alguns exemplos.
1 2 3 4 5 6 String s1 = " Marcelo " ; String s2 = " " ; String s3 = " Martins " ; // " Marcelo Martins " String s4 = s1 + s2 + s3 ;

1 2 3 4 5 6

string s1 = " Marcelo " ; string s2 = " " ; string s3 = " Martins " ; // " Marcelo Martins " string s4 = s1 + s2 + s3 ;

Considere os exemplos a seguir.
1 2 3 4 5 String s1 = " Idade : " ; int idade = 3 ; // " Idade : 3 " String s2 = s1 + idade ;

1 2 3 4 5

string s1 = " Idade : " ; int idade = 3 ; // " Idade : 3 " string s2 = s1 + idade ;

Observe que o operador + foi aplicado a valores do tipo int e do tipo string. Nesses casos, os valores do tipo int são, automaticamente, convertidos para string e a concatenação é realizada. Analogamente, essa conversão ocorrerá toda vez que o operador + for aplicado a valores não string com valores do tipo string.

Pare para pensar...
As expressões são avaliadas da esquerda para a direita. Dessa forma, considere os seguintes exemplos:
1 System . out . println (1 + 2 + 3 + " testando " ) ; 2 System . out . println ( " testando " + 1 + 2 + 3) ;

1 System . Console . WriteLine (1 + 2 + 3 + " testando " ) ; 2 System . Console . WriteLine ( " testando " + 1 + 2 + 3) ;

O que seria exibido nesses exemplos?

Exercícios de Fixação Com Java

72

www.k19.com.br

73
1

O PERADORES

Abra um terminal; Entre na pasta com o seu nome e crie uma pasta chamada operadores para os arquivos desenvolvidos nesse capítulo.
K19 / rafael$ mkdir operadores K19 / rafael$ cd operadores K19 / rafael / operadores$

Terminal 4.1: Criando a pasta operadores

C :\ Users \ K19 \ rafael > md operadores C :\ Users \ K19 \ rafael > cd operadores C :\ Users \ K19 \ rafael \ operadores >

Terminal 4.2: Criando a pasta variaveis no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao1.zip

2

Na pasta operadores, implemente um programa em Java que utilize os operadores aritméticos.

1 class TestaOperadoresAritmeticos { 2 public static void main ( String [] args ) { 3 int a = 1 + 1; 4 int b = 1 - 2; 5 int c = 2 * 3; 6 int d = 25 / 5; 7 int e = 1 % 4; 8 9 System . out . println ( a ) ; 1 System . out . println ( b ) ; 11 System . out . println ( c ) ; 12 System . out . println ( d ) ; 13 System . out . println ( e ) ; 14 } 15 }
Código Java 4.10: TestaOperadoresAritmeticos.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao2.zip

3

Compile e execute a classe TestaOperadoresAritmeticos.
K19 / rafael / operadores$ javac TestaOperadoresAritmeticos . java K19 / rafael / operadores$ java TestaOperadoresAritmeticos 2 8 6 5 2

Terminal 4.3: Compilando e executando a classe TestaOperadoresAritmeticos

Na pasta operadores, implemente um programa em Java que realize operações de divisão inteira e de casting.
4

1 class TestaDivisaoInteira { 2 public static void main ( String [] args ) {

www.facebook.com/k19treinamentos

73

O PERADORES
3 4 5 6 7 8 9 1 11 } 12 } int a = 5; int b = 2; System . out . println ( a / b ) ; System . out . println (( double ) a / b ) ; System . out . println ( a / ( double ) b ) ; System . out . println (( double ) a / ( double ) b ) ; System . out . println (( double ) ( a / 2) ) ;

74

Código Java 4.11: TestaDivisaoInteira.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao4.zip

5

Compile e execute a classe TestaDivisaoInteira.
K19 / rafael / operadores$ javac TestaDivisaoInteira . java K19 / rafael / operadores$ java TestaDivisaoInteira 2 2.5 2.5 2.5 2.

Terminal 4.4: Compilando e executando a classe TestaDivisaoInteira

6 Na pasta operadores, implemente um programa em Java que realize operações de concatenação de strings.

1 class TestaConcatenacao { 2 public static void main ( String [] args ) { 3 String s1 = " K19 " ; 4 String s2 = " Treinamentos " ; 5 6 System . out . println ( s1 + " " + s2 ) ; 7 } 8 }
Código Java 4.12: TestaConcatenacao.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao6.zip

7

Compile e execute a classe TestaConcatenacao.
K19 / rafael / operadores$ javac TestaConcatenacao . java K19 / rafael / operadores$ java TestaConcatenacao K19 Treinamentos

Terminal 4.5: Compilando e executando a classe TestaConcatenacao

Operadores de Atribuição
Nos capítulos anteriores, utilizamos o principal operador de atribuição, o operador = (igual). Os outros operadores de atribuição são:
74
www.k19.com.br

75

O PERADORES

• Simples = • Incremental += • Decremental -= • Multiplicativa *= • Divisória /= • Modular %= • Incremento ++ • Decremento -1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 int valor = 1; // valor = 1 valor += 2; // valor = 3 valor -= 1; // valor = 2 valor *= 6; // valor = 12 valor /= 3; // valor = 4 valor %= 3; // valor = 1 valor ++; // valor = 2 valor - -; // valor = 1
Código Java 4.13: Exemplo de uso dos operadores de atribuição.

As instruções acima poderiam ser escritas de outra forma:
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 int valor = 1; // valor = 1 valor = valor + 2; // valor = 3 valor = valor - 1; // valor = 2 valor = valor * 6; // valor = 12 valor = valor / 3; // valor = 4 valor = valor % 3; // valor = 1 valor = valor + 1; // valor = 2 valor = valor - 1; // valor = 1
Código Java 4.14: O mesmo exemplo anterior utilizando os operadores aritméticos.

www.facebook.com/k19treinamentos

75

O PERADORES

76

Como podemos observar, os operadores de atribuição, exceto o simples (=), reduzem a quantidade de código escrito. Podemos dizer que esses operadores funcionam como “atalhos” para as operações que utilizam os operadores aritméticos.

Operadores Relacionais
Muitas vezes precisamos determinar a equivalência entre duas variáveis ou a relação de grandeza (se é maior ou menor) em relação à outra variável ou valor. Nessas situações, utilizamos os operadores relacionais. As operações realizadas com os operadores relacionais devolvem valores do tipo boolean em Java ou bool em C#. Os operadores relacionais são: • Igualdade == • Desigualdade != • Menor < • Menor ou igual • Maior ou igual >=
1 2 3 4 5 6 7 8 int valor = 2; boolean t = false ; t = ( valor == 2) ; t = ( valor != 2) ; t = ( valor < 2) ; t = ( valor 1) ; t = ( valor >= 1) ;

// // // // // //

t t t t t t

= = = = = =

true false false true true true

Código Java 4.15: Exemplo de uso dos operadores relacionais em Java.

1 2 3 4 5 6 7 8

int valor = 2; bool t = false ; t = ( valor == 2) ; t = ( valor != 2) ; t = ( valor < 2) ; t = ( valor 1) ; t = ( valor >= 1) ;

// // // // // //

t t t t t t

= = = = = =

true false false true true true

Código C# 4.6: Exemplo de uso dos operadores relacionais em C#.

Operadores Lógicos
As linguagens Java e C# permitem verificar duas condições booleanas através de operadores lógicos. Esses operadores devolvem valores do tipo boolean em Java ou bool em C#. A seguir descreveremos o funcionamento desses operadores. • Os operadores “&”(E simples) e “&&”(E duplo) devolvem true se e somente se as duas condições forem true.
1 double a = Math . random () ;

76

www.k19.com.br

77
2 double b = Math . random () ; 3 4 System . out . println ( a > .2 & b < .8) ; 5 System . out . println ( a > .2 && b < .8) ;
Código Java 4.16: Exemplo de uso dos operadores & e &&

O PERADORES

1 2 3 4 5 6

System . Random gerador = new System . Random () ; double a = gerador . random () ; double b = gerador . random () ; System . Console . WriteLine ( a > System . Console . WriteLine ( a > .2 & b < .8) ; .2 && b < .8) ;

Código C# 4.7: Exemplo de uso dos operadores & e &&

A tabela verdade é uma forma prática de visualizar o resultado dos operadores lógicos. Veja a seguir a tabela verdade dos operadores & e &&.

a > 0.2 V V F F

b < 0.8 V F V F

a > 0.2 & b < 0.8 V F F F

a > 0.2 && b < 0.8 V F F F

Figura 4.1: Tabela verdade dos operadores & e &&

• Os operadores “|”(OU simples) e “||”(OU duplo) devolvem true se pelo menos uma das condições for true.
1 2 3 4 5 double a = Math . random () ; double b = Math . random () ; System . out . println ( a > System . out . println ( a > .2 | b < .8) ; .2 || b < .8) ;
Código Java 4.17: Exemplo de uso dos operadores | e ||

1 2 3 4 5 6

System . Random gerador = new System . Random () ; double a = gerador . random () ; double b = gerador . random () ; System . Console . WriteLine ( a > System . Console . WriteLine ( a > .2 | b < .8) ; .2 || b < .8) ;

Código C# 4.8: Exemplo de uso dos operadores | e ||

Também, podemos utilizar a tabela verdade para visualizar o resultado dos operadores | e ||.

a > 0.2 V V F F

b < 0.8 V F V F

a > 0.2 | b < 0.8 V V V F

a > 0.2 || b < 0.8 V V V F

Figura 4.2: Tabela verdade dos operadores | e ||

www.facebook.com/k19treinamentos

77

O PERADORES

78

• O operador “ˆ”(OU exclusivo) devolve true se apenas uma das condições for true.
1 double a = Math . random () ; 2 double b = Math . random () ; 3 4 System . out . println ( a > .2 ^ b <

.8) ;

Código Java 4.18: Exemplo de uso do operador ˆ

1 2 3 4 5

System . Random gerador = new System . Random () ; double a = gerador . NextDouble () ; double b = gerador . NextDouble () ; System . Console . WriteLine ( a > .2 ^ b < .8) ;

Código C# 4.9: Exemplo de uso do operador ˆ

Vamos visualizar resultado do operador ˆ através da tabela verdade.

a > 0.2 V V F F

b < 0.8 V F V F

a > 0.2 ˆ b < 0.8 F V V F

Figura 4.3: Tabela verdade do operador ˆ

Os operadores “&” e “&&” produzem o mesmo resultado lógico. Então, qual é a diferença entre eles? O operador “&” sempre avalia as duas condições. Por outro lado, o operador “&&” não avalia a segunda condição se o valor da primeira condição for falso. De fato, esse comportamento é plausível pois se o valor da primeira condição for falso o resultado lógico da operação é falso independentemente do valor da segunda condição. Dessa forma, podemos simplificar a tabela verdade do operador “&&”.

a > 0.2 V V F

b < 0.8 V F ?

a > 0.2 && b < 0.8 V F F

Figura 4.4: Tabela verdade do operador &&

Analogamente, podemos deduzir a diferença entre os operadores “|” e “||”. As duas condições sempre são avaliadas quando utilizamos o operador “|”. Agora, quando utilizamos o operador “||” a segunda condição é avaliada somente se o valor da primeira condição for verdadeiro. Realmente, esse comportamento é aceitável pois o resultado lógico da operação é verdadeiro quando o valor da primeira condição for verdadeiro independentemente do valor da segunda condição. Dessa forma, podemos simplificar a tabela verdade do operador “||”.
78
www.k19.com.br

79

O PERADORES

a > 0.2 V F F

b < 0.8 ? V F

a > 0.2 || b < 0.8 V V F

Figura 4.5: Tabela verdade do operador ||

Pare para pensar...
Considerando o comportamento dos operadores lógicos “&”, “&&”, “|” e “||”. O que seria exibido com as seguintes instruções?
1 2 3 4 5 int i = 1 ; System . out . println ( i > 1 && i ++ < 5 ) ; System . out . println ( i > || i ++ < 5 ) ; System . out . println ( i ) ;

1 2 3 4 5

int i = 1 ; System . Console . WriteLine ( i > 1 && i ++ < 5 ) ; System . Console . WriteLine ( i > || i ++ < 5 ) ; System . Console . WriteLine ( i ) ;

Pare para pensar...
As linguagens Java e C# possuem os operadores lógicos “&” e “&&”. Também possuem os operadores “|” e “||”. Agora, a pergunta que não quer calar: por que não existe o operador “ˆˆ”?

Exercícios de Fixação Com Java

8

Na pasta operadores, implemente um programa em Java que utilize os operadores de atribuição.

1 class TestaOperadoresDeAtribuicao { 2 public static void main ( String [] args ) { 3 int a = 1; 4 System . out . println ( a ) ; 5 6 a += 2; 7 System . out . println ( a ) ; 8 9 a -= 1; 1 System . out . println ( a ) ; 11 12 a *= 3; 13 System . out . println ( a ) ; 14 15 a /= 2; 16 System . out . println ( a ) ; 17

www.facebook.com/k19treinamentos

79

O PERADORES
18 19 2 21 22 23 24 25 26 } 27 } a %= 2; System . out . println ( a ) ; a ++; System . out . println ( a ) ; a - -; System . out . println ( a ) ;

80

Código Java 4.20: TestaOperadoresDeAtribuicao.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao8.zip

9

Compile e execute a classe TestaOperadoresDeAtribuicao.
K19 / rafael / operadores$ javac TestaOperadoresDeAtribuicao . java K19 / rafael / operadores$ java TestaOperadoresDeAtribuicao 1 3 2 6 3 1 2 1

Terminal 4.6: Compilando e executando a classe TestaOperadoresDeAtribuicao

10

Na pasta operadores, implemente um programa em Java que utilize os operadores relacionais.

1 class TestaOperadoresRelacionais { 2 public static void main ( String [] args ) { 3 int a = 1; 4 int b = 2; 5 6 System . out . println ( a > b ) ; 7 System . out . println ( a >= b ) ; 8 System . out . println ( a < b ) ; 9 System . out . println ( a b | c < d ) ; 9 System . out . println ( a > b || c < d ) ; 1 System . out . println ( a > b & c < d ) ; 11 System . out . println ( a > b && c < d ) ; 12 System . out . println ( a > b ^ c < d ) ; 13 } 14 }
Código Java 4.22: TestaOperadoresLogicos.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao12.zip

13

Compile e execute a classe TestaOperadoresLogicos.
K19 / rafael / operadores$ javac TestaOperadoresLogicos . java K19 / rafael / operadores$ java TestaOperadoresLogicos true true false false true

Terminal 4.8: Compilando e executando a classe TestaOperadoresLogicos

Operador ternário “?:”
Considere um programa que controla as notas dos alunos de uma escola. Para exemplificar, vamos gerar a nota de um aluno aleatoriamente.
1 double nota = Math . random () ;

1 System . Random gerador = new System . Random () ; 2 double nota = gerador . NextDouble () ;

O programa deve exibir a mensagem “aprovado” se nota de um aluno for maior ou igual a 0.5 e “reprovado” se a nota for menor do que 0.5. Esse problema pode ser resolvido com o operador ternário do Java e do C#. nota >= 0.5 ? “aprovado” : “reprovado”
Condição Valor 1 Valor 2

Figura 4.6: Operador ternário

Quando a condição(nota >= 0.5) é verdadeira, o operador ternário devolve o primeiro resultado www.facebook.com/k19treinamentos 81

O PERADORES

82

(“aprovado”). Caso contrário, devolve o segundo resultado(“reprovado”). Podemos guardar o resultado do operador ternário em uma variável ou simplesmente exibi-lo.
1 String resultado = nota >= 2 System . out . println ( nota >= .5 ? " aprovado " : " reprovado " ; .5 ? " aprovado " : " reprovado " ) ;

1 string resultado = nota >= .5 ? " aprovado " : " reprovado " ; 2 System . Console . WriteLine ( nota >= .5 ? " aprovado " : " reprovado " ) ;

Nos exemplos anteriores, o operador ternário foi utilizado com valores do tipo string. Contudo, podemos utilizá-lo com qualquer tipo de valor. Veja o exemplo a seguir.
1 int i = nota >= .5 ? 1 : 2; 2 double d = nota >= .5 ? .1 : .2;

1 int i = nota >= .5 ? 1 : 2; 2 double d = nota >= .5 ? .1 :

.2;

Operador “!”
Valores booleanos podem ser invertidos com o operador de “!” (negação). Por exemplo, podemos verificar se uma variável do tipo double armazena um valor maior do que 0.5 de duas formas diferentes.
1 d > .5

1 !( d = b K19 / rafael / operadores$ java TestaOperadorTernario a >= b K19 / rafael / operadores$ java TestaOperadorTernario a < b K19 / rafael / operadores$ java TestaOperadorTernario a < b

Terminal 4.9: Compilando e executando a classe TestaOperadorTernario

16

Na pasta operadores, implemente um programa em Java que utilize o operador de negação.

1 class TestaOperadorNegacao { 2 public static void main ( String [] args ) { 3 int a = 1 ; 4 int b = 2 ; 5 6 System . out . println (!( a < b ) ) ; 7 } 8 }
Código Java 4.34: TestaOperadorNegacao.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao16.zip

17

Compile e execute a classe TestaOperadorNegacao.
K19 / rafael / operadores$ javac TestaOperadorNegacao . java

84

www.k19.com.br

85
K19 / rafael / operadores$ java TestaOperadorNegacao false

O PERADORES

Terminal 4.10: Compilando e executando a classe TestaOperadorNegacao

18 Na pasta operadores, implemente um programa em Java que utilize o operador “++” na forma de pré e pós incremento. Analogamente, utilize o “--” na forma de pré e pós decremento.

1 class TestaPrePosIncrementoDecremento { 2 public static void main ( String [] args ) { 3 int a = 1; 4 5 System . out . println ( a ++) ; 6 System . out . println (++ a ) ; 7 System . out . println (a - -) ; 8 System . out . println ( - - a ) ; 9 } 1 }
Código Java 4.35: TestaPrePosIncrementoDecremento.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao18.zip

19

Compile e execute a classe TestaPrePosIncrementoDecremento.
K19 / rafael / operadores$ javac TestaPrePosIncrementoDecremento . java K19 / rafael / operadores$ java TestaPrePosIncrementoDecremento 1 3 3 1

Terminal 4.11: Compilando e executando a classe TestaPrePosIncrementoDecremento

Operações com Strings
Algumas operações são específicas para valores do tipo string. A seguir, apresentaremos algumas dessas operações. • Descobrir a quantidade de caracteres de uma string.
1 String s = " Rafael Cosentino " ; 2 3 int length = s . length () ; 4 5 System . out . println ( length ) ;

1 string s = " Rafael Cosentino " ; 2 3 int length = s . Length ; 4 5 System . Console . WriteLine ( length ) ;

• Recuperar um caractere de acordo com a sua posição na string.

www.facebook.com/k19treinamentos

85

O PERADORES
1 String s = " Rafael Cosentino " ; 2 3 char c = s . charAt ( ) ; 4 5 System . out . println ( c ) ;

86

1 string s = " Rafael Cosentino " ; 2 3 char c = s [ ]; 4 5 System . Console . WriteLine ( c ) ;

• Podemos verificar se uma determinada sequência de caracteres está contida em uma string.
1 2 3 4 5 6 7 8 9 1 String s = " K11 - Orientação a Objetos em Java " ; boolean resultado1 = s . contains ( " Java " ) ; boolean resultado2 = s . contains ( " C # " ) ; // true System . out . println ( resultado1 ) ; // false System . out . println ( resultado2 ) ;

1 2 3 4 5 6 7 8 9 1

string s = " K31 - C # e Orientação a Objetos " ; bool resultado1 = s . Contains ( " Java " ) ; bool resultado2 = s . Contains ( " C # " ) ; // True System . Console . WriteLine ( resultado1 ) ; // False System . Console . WriteLine ( resultado2 ) ;

• Podemos verificar se uma string termina com uma determinada sequência de caracteres.
1 2 3 4 5 6 7 8 9 1 String s = " K11 - Orientação a Objetos em Java " ; boolean resultado1 = s . endsWith ( " Java " ) ; boolean resultado2 = s . endsWith ( " Objetos " ) ; // true System . out . println ( resultado1 ) ; // false System . out . println ( resultado2 ) ;

1 2 3 4 5 6 7 8 9 1

string s = " K31 - C # e Orientação a Objetos " ; bool resultado1 = s . EndsWith ( " C # " ) ; bool resultado2 = s . EndsWith ( " Objetos " ) ; // False System . Console . WriteLine ( resultado1 ) ; // True System . Console . WriteLine ( resultado2 ) ;

• Podemos verificar se uma string começa com uma determinada sequência de caracteres.
1 String s = " K11 - Orientação a Objetos em Java " ;

86

www.k19.com.br

87
2 3 4 5 6 7 8 9 1

O PERADORES

boolean resultado1 = s . startsWith ( " Java " ) ; boolean resultado2 = s . startsWith ( " K11 " ) ; // false System . out . println ( resultado1 ) ; // true System . out . println ( resultado2 ) ;

1 2 3 4 5 6 7 8 9 1

string s = " K31 - C # e Orientação a Objetos " ; bool resultado1 = s . StartsWith ( " C # " ) ; bool resultado2 = s . StartsWith ( " K31 " ) ; // False System . Console . WriteLine ( resultado1 ) ; // True System . Console . WriteLine ( resultado2 ) ;

• Podemos realizar substituições em uma string.
1 2 3 4 5 6 String s1 = " K19 - Treinamentos " ; String s2 = s1 . replaceAll ( " Treinamentos " , " Cursos " ) ; // K19 - Cursos System . out . println ( s2 ) ;

1 2 3 4 5 6

string s1 = " K19 - Treinamentos " ; string s2 = s1 . Replace ( " Treinamentos " , " Cursos " ) ; // K19 - Cursos System . Console . WriteLine ( s2 ) ;

• Podemos extrair um trecho de uma string.
1 2 3 4 5 6 7 8 9 1 String s1 = " Rafael Cosentino " ; String s2 = s1 . substring (7) ; String s3 = s1 . substring ( , 6) ; // Cosentino System . out . println ( s2 ) ; // Rafael System . out . println ( s3 ) ;

1 2 3 4 5 6 7 8 9 1

string s1 = " Rafael Cosentino " ; string s2 = s1 . Substring (7) ; string s3 = s1 . Substring ( , 6) ; // Cosentino System . Console . WriteLine ( s2 ) ; // Rafael System . Console . WriteLine ( s3 ) ;

• Podemos transformar em maiúsculas todas as letras contidas em uma string.

www.facebook.com/k19treinamentos

87

O PERADORES
1 2 3 4 5 6 String s1 = " Rafael Cosentino " ; String s2 = s1 . toUpperCase () ; // RAFAEL COSENTINO System . out . println ( s2 ) ;

88

1 2 3 4 5 6

string s1 = " Rafael Cosentino " ; string s2 = s1 . ToUpper () ; // RAFAEL COSENTINO System . Console . WriteLine ( s2 ) ;

• Podemos transformar em minúsculas todas as letras contidas em uma string.
1 2 3 4 5 6 String s1 = " Rafael Cosentino " ; String s2 = s1 . toLowerCase () ; // rafael cosentino System . out . println ( s2 ) ;

1 2 3 4 5 6

string s1 = " Rafael Cosentino " ; string s2 = s1 . ToLower () ; // rafael cosentino System . Console . WriteLine ( s2 ) ;

• Podemos eliminar os espaços em branco do começo e do término de uma string.
1 2 3 4 5 6 String s1 = " Rafael Cosentino ";

String s2 = s1 . trim () ; // " Rafael Cosentino " System . out . println ( s2 ) ;

1 2 3 4 5 6

string s1 = "

Rafael Cosentino

";

string s2 = s1 . Trim () ; // " Rafael Cosentino " System . Console . WriteLine ( s2 ) ;

Operações com Data e Hora (Conteúdo Extra)
Algumas operações são específicas para data e hora. A seguir, apresentaremos algumas dessas operações. • Podemos modificar uma data e hora acrescentando ou subtraindo uma quantidade nos campos que definem essa data e hora.
1 java . util . Calendar c = new java . util . GregorianCalendar (2 1 , 7 , 27) ; 2 3 // Acrescentando 14 dias 4 c . add ( java . util . Calendar . DAY_OF_MONTH , 14 ) ;

88

www.k19.com.br

89
5 6 7 8 9 1

O PERADORES

// Subtraindo 2 anos c . add ( java . util . Calendar . YEAR , -2) ; // Acrescentando 2 segundos c . add ( java . util . Calendar . SECOND , 2 ) ;

1 2 3 4 5 6 7 8 9 1

System . DateTime dt = new System . DateTime (2 1 , 8 , 27) ; // Acrescentando 14 dias dt = dt . AddDays (14 ) ; // Subtraindo 2 anos dt = dt . AddYears ( -2) ; // Acrescentando 2 segundos dt = dt . AddSeconds (2 ) ;

Observe, nos exemplos acima, que 140 dias foram adicionados a data “27 de Agosto de 2010”. Automaticamente, o mês e o ano serão atualizados e a data passará a ser “14 de Janeiro de 2009”. • Podemos comparar a ordem das datas e horas.
1 2 3 4 5 6 7 8 java . util . Calendar c1 = new java . util . GregorianCalendar (2 1 , 7 , 27) ; java . util . Calendar c2 = java . util . Calendar . getInstance () ; // true System . out . println ( c1 . before ( c2 ) ) ; // false System . out . println ( c1 . after ( c2 ) ) ;

1 2 3 4 5 6 7 8

System . DateTime dt1 = new System . DateTime (2 1 , 8 , 27) ; System . DateTime dt2 = System . DateTime . Now ; // True System . Console . WriteLine ( dt1 < dt2 ) ; // False System . Console . WriteLine ( dt1 > dt2 ) ;

Exercícios de Fixação Com Java

20 Na pasta operadores, implemente um programa em Java que utilize as principais operações de strings.

1 class TestaOperacoesString { 2 public static void main ( String [] args ) { 3 String s = " Rafael Cosentino " ; 4 5 System . out . println ( s . charAt (7) ) ; 6 7 System . out . println ( s . contains ( " Cosentino " ) ) ; 8 System . out . println ( s . contains ( " Hirata " ) ) ; 9 1 System . out . println ( s . endsWith ( " Cosentino " ) ) ; 11 System . out . println ( s . endsWith ( " Hirata " ) ) ; 12

www.facebook.com/k19treinamentos

89

O PERADORES
13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 } 31 } System . out . println ( s . startsWith ( " Rafael " ) ) ; System . out . println ( s . startsWith ( " Marcelo " ) ) ; s = s . replaceAll ( " Rafael " , " Jonas " ) ; System . out . println ( s ) ; System . out . println ( s . substring (6) ) ; System . out . println ( s . substring ( , 5) ) ; s = s . toUpperCase () ; System . out . println ( s ) ; s = s . toLowerCase () ; System . out . println ( s ) ; s = " K19 Treinamentos System . out . println ( s . trim () ) ; ";

90

Código Java 4.48: TestaOperacoesString.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao2 .zip

21

Compile e execute a classe TestaOperacoesString.
K19 / rafael / operadores$ javac TestaOperacoesString . java K19 / rafael / operadores$ java TestaOperacoesString C true false true false true false Jonas Cosentino Cosentino Jonas JONAS COSENTINO jonas cosentino K19 Treinamentos

Terminal 4.12: Compilando e executando a classe TestaOperacoesString

Erro: Utilizar operadores incompatíveis
Um erro de compilação comum em Java ou C# ocorre quando um operador é aplicado a valores incompatíveis. Veja alguns exemplos de programas em Java com esse problema.
1 class Programa { 2 public static void main ( String [] args ) { 3 String s1 = " K19 " ; 4 String s2 = " Treinamentos " ; 5 6 System . out . println ( s1 - s2 ) ; 7 } 8 }
Código Java 4.49: Programa.java

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
90
www.k19.com.br

91
Programa . java :6: error : bad operand types for binary operator ’-’ System . out . println ( s1 - s2 ); ^ first type : String second type : String 1 error

O PERADORES

Terminal 4.13: Erro de compilação

1 class Programa { 2 public static void main ( String [] args ) { 3 boolean b1 = true ; 4 boolean b2 = false ; 5 6 System . out . println ( b1 > b2 ) ; 7 } 8 }
Código Java 4.50: Programa.java

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
Programa . java :6: error : bad operand types for binary operator ’>’ System . out . println ( b1 > b2 ); ^ first type : boolean second type : boolean 1 error

Terminal 4.14: Erro de compilação

1 class Programa { 2 public static void main ( String [] args ) { 3 int i = 1; 4 5 System . out . println (! i ) ; 6 } 7 }
Código Java 4.51: Programa.java

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
Programa . java :5: error : bad operand type int for unary operator ’! ’ System . out . println (! i ); ^ 1 error

Terminal 4.15: Erro de compilação

Agora, veja alguns exemplos de programas em C# com esse problema.
1 class Programa 2 { 3 static void Main () 4 { 5 string s1 = " K19 " ; 6 string s2 = " Treinamentos " ; 7 8 System . Console . WriteLine ( s1 - s2 ) ; 9 } 1 }
Código C# 4.29: Programa.cs

www.facebook.com/k19treinamentos

91

O PERADORES

92

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
Programa . cs (8 ,28): error CS 19 : Operator ‘-’ cannot be applied to operands of type ‘ string ’ and ‘ string ’

Terminal 4.16: Erro de compilação

1 class Programa 2 { 3 static void Main () 4 { 5 bool b1 = true ; 6 bool b2 = false ; 7 8 System . Console . WriteLine ( b1 > b2 ) ; 9 } 1 }
Código C# 4.30: Programa.cs

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
Programa . cs (8 ,28): error CS 19 : Operator ‘>’ cannot be applied to operands of type ‘ bool ’ and ‘ bool ’

Terminal 4.17: Erro de compilação

1 class Programa 2 { 3 static void Main () 4 { 5 int i = 1; 6 7 System . Console . WriteLine (! i ) ; 8 } 9 }
Código C# 4.31: Programa.cs

A mensagem de erro de compilação seria semelhante a apresenta abaixo.
Programa . cs (7 ,28): error CS 23 : The ‘! ’ operator cannot be applied to operand of type ‘int ’

Terminal 4.18: Erro de compilação

Exercícios de Fixação Com C#

22

Na pasta operadores, implemente um programa em C# que utilize os operadores aritméticos.

1 class TestaOperadoresAritmeticos 2 { 3 static void Main () 4 { 5 int a = 1 + 1; 6 int b = 1 - 2; 7 int c = 2 * 3; 8 int d = 25 / 5; 9 int e = 1 % 4; 1 11 System . Console . WriteLine ( a ) ;

92

www.k19.com.br

93
12 13 14 15 16 } 17 } System . Console . WriteLine ( b ) ; System . Console . WriteLine ( c ) ; System . Console . WriteLine ( d ) ; System . Console . WriteLine ( e ) ;

O PERADORES

Código C# 4.32: TestaOperadoresAritmeticos.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao22.zip

23

Compile e execute a classe TestaOperadoresAritmeticos.
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperadoresAritmeticos . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadoresAritmeticos . exe 2 8 6 5 2

Terminal 4.19: Compilando e executando a classe TestaOperadoresAritmeticos

Na pasta operadores, implemente um programa em C# que realize operações de divisão inteira e de casting.
24

1 class TestaDivisaoInteira 2 { 3 static void Main () 4 { 5 int a = 5; 6 int b = 2; 7 8 System . Console . WriteLine ( a / b ) ; 9 System . Console . WriteLine (( double ) a / b ) ; 1 System . Console . WriteLine ( a / ( double ) b ) ; 11 System . Console . WriteLine (( double ) a / ( double ) b ) ; 12 System . Console . WriteLine (( double ) ( a / 2) ) ; 13 } 14 }
Código C# 4.33: TestaDivisaoInteira.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao24.zip

25

Compile e execute a classe TestaDivisaoInteira.
C :\ Users \ K19 \ rafael \ operadores > csc TestaDivisaoInteira . cs C :\ Users \ K19 \ rafael \ operadores > TestaDivisaoInteira . exe 2 2.5 2.5 2.5 2

Terminal 4.20: Compilando e executando a classe TestaDivisaoInteira

26

Na pasta operadores, implemente um programa em C# que realize operações de concatenação www.facebook.com/k19treinamentos 93

O PERADORES

94

de strings.
1 class TestaConcatenacao 2 { 3 static void Main () 4 { 5 string s1 = " K19 " ; 6 string s2 = " Treinamentos " ; 7 8 System . Console . WriteLine ( s1 + " " + s2 ) ; 9 } 1 }
Código C# 4.34: TestaConcatenacao.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao26.zip

27

Compile e execute a classe TestaConcatenacao.
C :\ Users \ K19 \ rafael \ operadores > csc TestaConcatenacao . cs C :\ Users \ K19 \ rafael \ operadores > TestaConcatenacao . exe K19 Treinamentos

Terminal 4.21: Compilando e executando a classe TestaConcatenacao

28

Na pasta operadores, implemente um programa em C# que utilize os operadores de atribuição.

1 class TestaOperadoresDeAtribuicao 2 { 3 static void Main () 4 { 5 int a = 1; 6 System . Console . WriteLine ( a ) ; 7 8 a += 2; 9 System . Console . WriteLine ( a ) ; 1 11 a -= 1; 12 System . Console . WriteLine ( a ) ; 13 14 a *= 3; 15 System . Console . WriteLine ( a ) ; 16 17 a /= 2; 18 System . Console . WriteLine ( a ) ; 19 2 a %= 2; 21 System . Console . WriteLine ( a ) ; 22 } 23 }
Código C# 4.35: TestaOperadoresDeAtribuicao.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao28.zip

29

Compile e execute a classe TestaOperadoresDeAtribuicao.
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperadoresDeAtribuicao . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadoresDeAtribuicao . exe

94

www.k19.com.br

95
1 3 2 6 3 1

O PERADORES

Terminal 4.22: Compilando e executando a classe TestaOperadoresDeAtribuicao

30

Na pasta operadores, implemente um programa em C# que utilize os operadores relacionais.

1 class TestaOperadoresRelacionais 2 { 3 static void Main () 4 { 5 int a = 1; 6 int b = 2; 7 8 System . Console . WriteLine ( a > b ) ; 9 System . Console . WriteLine ( a >= b ) ; 1 System . Console . WriteLine ( a < b ) ; 11 System . Console . WriteLine ( a csc TestaOperadoresRelacionais . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadoresRelacionais . exe False False True True False True

Terminal 4.23: Compilando e executando a classe TestaOperadoresRelacionais

32

Na pasta operadores, implemente um programa em C# que utilize os operadores lógicos.

1 class TestaOperadoresLogicos 2 { 3 static void Main () 4 { 5 int a = 1; 6 int b = 2; 7 int c = 3; 8 int d = 4; 9 1 System . Console . WriteLine ( a 11 System . Console . WriteLine ( a 12 System . Console . WriteLine ( a 13 System . Console . WriteLine ( a 14 System . Console . WriteLine ( a 15 } 16 }

> > > > >

b b b b b

| c < d); || c < d ) ; & c < d); && c < d ) ; ^ c < d);

www.facebook.com/k19treinamentos

95

O PERADORES

96

Código C# 4.37: TestaOperadoresLogicos.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao32.zip

33

Compile e execute a classe TestaOperadoresLogicos.
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperadoresLogicos . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadoresLogicos . exe True True False False True

Terminal 4.24: Compilando e executando a classe TestaOperadoresLogicos

34

Na pasta operadores, implemente um programa em C# que utilize o operador ternário.

1 class TestaOperadorTernario 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 int a = ( int ) ( gerador . NextDouble () * 1 ) ; 7 int b = ( int ) ( gerador . NextDouble () * 1 ) ; 8 9 System . Console . WriteLine ( a < b ? " a < b " : " a >= b " ) ; 1 } 11 }
Código C# 4.38: TestaOperadorTernario.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao34.zip

Compile uma vez e execute várias vezes a classe TestaOperadorTernario. Você obterá um resultado semelhante ao apresentado a seguir.
35
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperadorTernario . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadorTernario . exe a < b C :\ Users \ K19 \ rafael \ operadores > TestaOperadorTernario . exe a >= b C :\ Users \ K19 \ rafael \ operadores > TestaOperadorTernario . exe a >= b C :\ Users \ K19 \ rafael \ operadores > TestaOperadorTernario . exe a < b C :\ Users \ K19 \ rafael \ operadores > TestaOperadorTernario . exe a < b

Terminal 4.25: Compilando e executando a classe TestaOperadorTernario

36

Na pasta operadores, implemente um programa em C# que utilize o operador de negação.

96

www.k19.com.br

97
1 class TestaOperadorNegacao 2 { 3 static void Main () 4 { 5 int a = 1 ; 6 int b = 2 ; 7 8 System . Console . WriteLine (!( a < b ) ) ; 9 } 1 }
Código C# 4.39: TestaOperadorNegacao.cs

O PERADORES

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao36.zip

37

Compile e execute a classe TestaOperadorNegacao.
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperadorNegacao . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperadorNegacao . exe False

Terminal 4.26: Compilando e executando a classe TestaOperadorNegacao

38 Na pasta operadores, implemente um programa em C# que utilize o operador “++” na forma de pré e pós incremento. Analogamente, utilize o “--” na forma de pré e pós decremento.

1 class TestaPrePosIncrementoDecremento 2 { 3 static void Main () 4 { 5 int a = 1; 6 7 System . Console . WriteLine ( a ++) ; 8 System . Console . WriteLine (++ a ) ; 9 System . Console . WriteLine (a - -) ; 1 System . Console . WriteLine ( - - a ) ; 11 } 12 }
Código C# 4.40: TestaPrePosIncrementoDecremento.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao38.zip

39

Compile e execute a classe TestaPrePosIncrementoDecremento.
C :\ Users \ K19 \ rafael \ operadores > csc TestaPrePosIncrementoDecremento . cs C :\ Users \ K19 \ rafael \ operadores > TestaPrePosIncrementoDecremento . exe 1 3 3 1

Terminal 4.27: Compilando e executando a classe TestaPrePosIncrementoDecremento

Na pasta operadores, implemente um programa em C# que utilize as principais operações de strings.
40

www.facebook.com/k19treinamentos

97

O PERADORES
1 class TestaOperacoesString 2 { 3 static void Main () 4 { 5 string s = " Rafael Cosentino " ; 6 7 System . Console . WriteLine ( s [7]) ; 8 9 System . Console . WriteLine ( s . Contains ( " Cosentino " ) ) ; 1 System . Console . WriteLine ( s . Contains ( " Hirata " ) ) ; 11 12 System . Console . WriteLine ( s . EndsWith ( " Cosentino " ) ) ; 13 System . Console . WriteLine ( s . EndsWith ( " Hirata " ) ) ; 14 15 System . Console . WriteLine ( s . StartsWith ( " Rafael " ) ) ; 16 System . Console . WriteLine ( s . StartsWith ( " Marcelo " ) ) ; 17 18 s = s . Replace ( " Rafael " , " Jonas " ) ; 19 System . Console . WriteLine ( s ) ; 2 21 System . Console . WriteLine ( s . Substring (6) ) ; 22 System . Console . WriteLine ( s . Substring ( , 5) ) ; 23 24 s = s . ToUpper () ; 25 System . Console . WriteLine ( s ) ; 26 27 s = s . ToLower () ; 28 System . Console . WriteLine ( s ) ; 29 3 s = " K19 Treinamentos "; 31 System . Console . WriteLine ( s . Trim () ) ; 32 } 33 }
Código C# 4.41: TestaOperacoesString.cs

98

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-fixacao4 .zip

41

Compile e execute a classe TestaOperacoesString.
C :\ Users \ K19 \ rafael \ operadores > csc TestaOperacoesString . cs C :\ Users \ K19 \ rafael \ operadores > TestaOperacoesString . exe C True False True False True False Jonas Cosentino Cosentino Jonas JONAS COSENTINO jonas cosentino K19 Treinamentos

Terminal 4.28: Compilando e executando a classe TestaOperacoesString

Exercícios Complementares

1

Na pasta operadores, crie uma classe Java chamada UseOperadoresAritmeticos. Complete o www.k19.com.br 98

99

O PERADORES

código a seguir com os operadores aritméticos: +, -, *, / e %. O programa deve exibir os números 11, 4, 12, 4 e 1 nessa ordem.
1 class UseOperadoresAritmeticos { 2 public static void main ( String [] args ) { 3 int x = 3 8; 4 int y = 7 3; 5 int z = 4 3; 6 int q = 8 2; 7 int w = 9 4; 8 9 System . out . println ( x ) ; 1 System . out . println ( y ) ; 11 System . out . println ( z ) ; 12 System . out . println ( q ) ; 13 System . out . println ( w ) ; 14 } 15 }
Código Java 4.52: UseOperadoresAritmeticos.java

Utilizando os operadores aritméticos, crie um programa em Java que mostre a idade média de três pessoas: Rafael Cosentino = 27; Jonas Hirata = 29; Marcelo Martins = 27.
2

Na pasta operadores, crie uma classe Java chamada UseDivisaoCasting. Complete o código a seguir com operações de divisão e operações de casting. O programa deve exibir os números 20 e 20.5 nessa ordem. Utilize as variáveis x e y.
3

1 class UseDivisaoCasting { 2 public static void main ( String [] args ) { 3 int x = 41; 4 int y = 2; 5 6 System . out . println ( 7 System . out . println ( 8 } 9 }

); );

Código Java 4.55: UseDivisaoCasting.java

Na pasta operadores, crie uma classe Java chamada UseConcatenacao. Complete o código a seguir com operações de concatenação. O programa deve exibir as strings “Rafael Cosentino”, “Jonas Hirata” e “Marcelo Martins” nessa ordem. Utilize as variáveis s1, s2, s3, s4, s5 e s6.
4

1 class UseConcatenacao { 2 public static void main ( String [] args ) { 3 String s1 = " Rafael " ; 4 String s2 = " Jonas " ; 5 String s3 = " Marcelo " ; 6 String s4 = " Cosentino " ; 7 String s5 = " Hirata " ; 8 String s6 = " Martins " ; 9 1 System . out . println ( ); 11 System . out . println ( ); 12 System . out . println ( ); 13 } 14 }

www.facebook.com/k19treinamentos

99

O PERADORES

100

Código Java 4.57: UseConcatenacao.java

Na pasta operadores, crie uma classe Java chamada UseOperadoresAtribuicao. Complete o código a seguir com operadores de atribuição: =, +=, -=, *=, /=, %=, ++ e --. O programa deve exibir os números 5, 15, 12, 48, 6, 1, 2 e 1 nessa ordem.
5

1 class UseOperadoresAtribuicao { 2 public static void main ( String [] args ) { 3 int x 5; 4 System . out . println ( x ) ; 5 x 1 ; 6 System . out . println ( x ) ; 7 x 3; 8 System . out . println ( x ) ; 9 x 4; 1 System . out . println ( x ) ; 11 x 8; 12 System . out . println ( x ) ; 13 x 5; 14 System . out . println ( x ) ; 15 x ; 16 System . out . println ( x ) ; 17 x ; 18 System . out . println ( x ) ; 19 } 2 }
Código Java 4.59: UseOperadoresAtribuicao.java

6 Crie um programa em Java que aplique os operadores de atribuição no seguinte telefone: 23873791. Esses operadores devem ser aplicados na seguinte ordem: incrementação, decrementação, divisão, multiplicação, módulo e incrementação. Inicie com o valor “23”, e a cada dígito do telefone, utilize um operador.

Na pasta operadores, crie uma classe Java chamada UseOperadoresRelacionais. Complete o código a seguir com operadores relacionais: >, =, w e < 9 System . out . println ( q > r e < 1 System . out . println ( q > e w < 11 System . out . println ( q > w r < 12 System . out . println ( q > w e < 13 } 14 }

{

r); w); r); e); r);

Código Java 4.65: UseOperadoresLogicos.java

Na pasta operadores, crie uma classe Java chamada UseTernarioNegacaoIncrementoDecremento. Complete o código a seguir utilizando o operador ternário, o operador de negação e os operadores “++” e “--”. O programa deve exibir 8, “Marcelo”, 9 e 10 nessa ordem. Não é necessário preencher todas as caixas.
10

1 class UseTernarioNegacaoIncrementoDecremento { 2 public static void main ( String [] args ) { 3 int a = 1 ; 4 int b = 8; 5 6 System . out . println ( (a < b) a b); 7 System . out . println ( (a < b) " Marcelo " " Jonas " ) ; 8 System . out . println ( (a < b) a b); 9 System . out . println ( ( a == b ) a b + 1) ; 1 } 11 }
Código Java 4.67: UseTernarioNegacaoIncrementoDecremento.java

Na pasta operadores, crie um programa em Java que exiba as datas de vencimento das parcelas de uma casa. A data de vencimento da primeira parcela é “15 de Agosto de 2015”. As outras três parcelas devem vencer exatamente 30, 60 e 90 dias após a primeira.
11

Na pasta operadores, crie uma classe C# chamada UseOperadoresAritmeticos. Complete o código a seguir com os operadores aritméticos: +, -, *, / e %. O programa deve exibir os números 11, 4, 12, 4 e 1 nessa ordem.
12

1 class UseOperadoresAritmeticos 2 { 3 static void Main () 4 { 5 int x = 3 8;

www.facebook.com/k19treinamentos

101

O PERADORES
6 7 8 9 1 11 12 13 14 15 16 } 17 } int int int int y z q w = = = = 7 4 8 9 3; 3; 2; 4;

102

System . Console . WriteLine ( x ) ; System . Console . WriteLine ( y ) ; System . Console . WriteLine ( z ) ; System . Console . WriteLine ( q ) ; System . Console . WriteLine ( w ) ;

Código C# 4.42: UseOperadoresAritmeticos.cs

Utilizando os operadores aritméticos, crie um programa em C# que mostre a idade média de três pessoas: Rafael Cosentino = 27; Jonas Hirata = 29; Marcelo Martins = 27.
13

Na pasta operadores, crie uma classe C# chamada UseDivisaoCasting. Complete o código a seguir com operações de divisão e operações de casting. O programa deve exibir os números 20 e 20.5 nessa ordem. Utilize as variáveis x e y.
14

1 class UseDivisaoCasting 2 { 3 static void Main () 4 { 5 int x = 41; 6 int y = 2; 7 8 System . Console . WriteLine ( 9 System . Console . WriteLine ( 1 } 11 }

); );

Código C# 4.45: UseDivisaoCasting.cs

Na pasta operadores, crie uma classe C# chamada UseConcatenacao. Complete o código a seguir com operações de concatenação. O programa deve exibir as strings “Rafael Cosentino”, “Jonas Hirata” e “Marcelo Martins” nessa ordem. Utilize as variáveis s1, s2, s3, s4, s5 e s6.
15

1 class UseConcatenacao 2 { 3 static void Main () 4 { 5 string s1 = " Rafael " ; 6 string s2 = " Jonas " ; 7 string s3 = " Marcelo " ; 8 string s4 = " Cosentino " ; 9 string s5 = " Hirata " ; 1 string s6 = " Martins " ; 11 12 System . Console . WriteLine ( 13 System . Console . WriteLine ( 14 System . Console . WriteLine ( 15 } 16 }

); ); );

Código C# 4.47: UseConcatenacao.cs

102

www.k19.com.br

103
16

O PERADORES

Na pasta operadores, crie uma classe C# chamada UseOperadoresAtribuicao. Complete o código a seguir com operadores de atribuição: =, +=, -=, *=, /=, %=, ++ e --. O programa deve exibir os números 5, 15, 12, 48, 6, 1, 2 e 1 nessa ordem.
1 class UseOperadoresAtribuicao 2 { 3 static void Main () 4 { 5 int x 5; 6 System . Console . WriteLine ( x ) ; 7 x 1 ; 8 System . Console . WriteLine ( x ) ; 9 x 3; 1 System . Console . WriteLine ( x ) ; 11 x 4; 12 System . Console . WriteLine ( x ) ; 13 x 8; 14 System . Console . WriteLine ( x ) ; 15 x 5; 16 System . Console . WriteLine ( x ) ; 17 x ; 18 System . Console . WriteLine ( x ) ; 19 x ; 2 System . Console . WriteLine ( x ) ; 21 } 22 }
Código C# 4.48: UseOperadoresAtribuicao.cs

Crie um programa em Java que aplique os operadores de atribuição no seguinte telefone: 23873791. Esses operadores devem ser aplicados na seguinte ordem: incrementação, decrementação, divisão, multiplicação, módulo e incrementação. Inicie com o valor “23”, e a cada dígito do telefone, utilize um operador.
17

18 Na pasta operadores, crie uma classe C# chamada UseOperadoresRelacionais. Complete o código a seguir com operadores relacionais: >, =, > > > >

w r e w w

e e w r e

< < < < <

r); w); r); e); r);

Código C# 4.54: UseOperadoresLogicos.cs

Na pasta operadores, crie uma classe C# chamada UseTernarioNegacaoIncrementoDecremento. Complete o código a seguir utilizando o operador ternário, o operador de negação e os operadores “++” e “--”. O programa deve exibir 8, “Marcelo”, 9 e 10 nessa ordem. Não é necessário preencher todas as caixas.
21

1 class UseTernarioNegacaoIncrementoDecremento 2 { 3 static void Main () 4 { 5 int a = 1 ; 6 int b = 8; 7 8 System . Console . WriteLine ( (a < b) a b); 9 System . Console . WriteLine ( (a < b) " Marcelo " " Jonas " ) ; 1 System . Console . WriteLine ( (a < b) a b); 11 System . Console . WriteLine ( ( a == b ) a b + 1) ; 12 } 13 }
Código C# 4.56: UseTernarioNegacaoIncrementoDecremento.cs

Na pasta operadores, crie um programa em C# que exiba as datas de vencimento das parcelas de uma casa. A data de vencimento da primeira parcela é “15 de Agosto de 2015”. As outras três parcelas devem vencer exatamente 30, 60 e 90 dias após a primeira.
22

Resumo do Capítulo

1

Os operadores são utilizados para manipular os valores armazenados nas variáveis ou valores www.k19.com.br 104

105

O PERADORES

literais.

As operações aritméticas de soma, subtração, multiplicação, divisão e resto são realizadas respectivamente através dos operadores: + - * / %

2

3

A divisão entre valores inteiros desconsidera a parte fracionária do resultado.

4

O operador + também é utilizado para realizar a concatenação de strings.

O conteúdo de uma variável pode ser modificado através dos operadores de atribuição: = += -= *= /= %= ++ --.

5

Podemos comparar o conteúdo das variáveis ou os valores literais através dos operadores relacionais: == != < >=.

6

7

Operadores relacionais devolvem valores booleanos.

As operações lógicas E, OU e OU EXCLUSIVO são realizadas através dos operadores: & | ˆ && ||.

8

9

O primeiro argumento do operador ternário ?: deve ser um valor booleano.

10

O operador de negação ! inverte os valores booleanos.

11

O operador “++” pode ser utilizado na forma de pré e pós incremento.

12

O operador “--” pode ser utilizado na forma de pré e pós decremento.

Prova

1

Qual é o resultado da operação abaixo?

5%2
a) 2 b) 2.5 www.facebook.com/k19treinamentos 105

O PERADORES

106

c) 0.1 d) 1 e) 5.1

2

Quais são os resultados das operações abaixo?

5/2 5. /2 (double)5/2
a) 2, 2 e 2 b) 2.5, 2.5 e 2.5 c) 2, 2.5 e 2.5 d) 2, 2 e 2.5 e) 2, 2.5 e 2

3

Quais são os resultados das operações baixo?

(double)(5/2) (double)5/2 5/(double)2
a) 2.5, 2.5 e 2.5 b) 2, 2 e 2 c) 2, 2 e 2.5 d) 2.5, 2.5 e 2 e) 2, 2.5 e 2.5

4

Qual é o resultado da operação abaixo?

1 + 2 + "rafael" + 3 + 4
a) 12rafael34 b) 3rafael34
106
www.k19.com.br

107

O PERADORES

c) 3rafael7 d) 12rafael7 e) ocorrerá um erro

5

Qual é o valor armazenado na variável i depois das seguintes operações?

int i = 1 ; i++; i += 1 ; --i; i %= 3;
a) 2 b) 10 c) 3 d) 5 e) 0

6

Qual é o tipo dos valores devolvidos pelos operadores relacionais?

a) números inteiros b) números reais c) caracteres d) string e) booleanos

7

Quais são os resultados das operações baixo?

1 1 1 1

> > < <

5 5 5 5

& & & &

7 7 7 7

< > < >

1 1 1 1

a) true, true, true e true b) true, true, true e false www.facebook.com/k19treinamentos 107

O PERADORES

108

c) true, false, true e false d) true, false, false e false e) false, true, true e false

8

Quais são os resultados das operações abaixo?

1 1 1 1

> > < <

5 5 5 5

| | | |

7 7 7 7

< > < >

1 1 1 1

a) true, true, true e true b) true, true, true e false c) true, false, true e false d) true, false, false e false e) false, true, true e false

9

Quais são os resultados das operações abaixo?

1 1 1 1

> > < <

5 5 5 5

^ ^ ^ ^

7 7 7 7

< > < >

1 1 1 1

a) true, true, true e true b) true, true, true e false c) true, false, true e false d) true, false, false e false e) false, true, true e false

10

Quais são os resultados das operações abaixo?

1 > 5 ? 1 : 5 !(1 > 5) ? 1 : 5 (1 < 5) ? "k 1" : "k 2"
108
www.k19.com.br

109

O PERADORES

a) 10, 10, k01 b) 5, 5, k02 c) 10, 5, k02 d) 10, 5, k01 e) 5, 10, k02

11

O que é exibido com o código Java a seguir? int i = 1 ; System . out . println ( i ++) ; System . out . println (++ i ) ; System . out . println (i - -) ; System . out . println ( - - i ) ;

1 2 3 4 5

a) 10, 12, 12 e 10 b) 11, 12, 11, 10 c) 10, 11, 11, 10 d) 10, 10, 10, 10 e) 11, 11, 11, 10

Minha Pontuação

Pontuação Mínima:

8

Pontuação Máxima:

11

www.facebook.com/k19treinamentos

109

O PERADORES

110

110

www.k19.com.br

CAPÍTULO

C ONTROLE DE F LUXO

5

Neste capítulo, mostraremos instruções que permitem controlar o fluxo de um programa. Essas instruções aumentam a “inteligência” do código. Basicamente, as linguagens de programação oferecem dois tipos de instruções para controlar o fluxo de execução dos programas: instruções de decisão e de repetição.

Instruções de Decisão
Considere um parque de diversões como os da Disney. Nesses parques, para garantir a segurança, alguns brinquedos possuem restrições de acesso. Em geral, essas restrições estão relacionadas à altura dos visitantes. Em alguns parques, a altura do visitante é obtida por sensores instalados na entrada dos brinquedos e um programa de computador libera ou bloqueia o acesso de acordo com altura obtida. Então, o programa deve decidir se executa um trecho de código de acordo com uma condição. Essa decisão pode ser realizada através das instruções de decisão oferecidas pelas linguagens de programação. Nos exemplos vistos nos capítulos anteriores, a ordem da execução das linhas de um programa é exatamente a ordem na qual elas foram definidas no código fonte. As instruções de decisão proporcionarão uma forma de decidirmos se queremos executar um bloco de código ou não, ou seja, se desejamos pular um trecho de código ou não. As instruções de decisão são capazes de criar um “desvio” no fluxo de execução de um programa.

Instrução if
A instrução if (se), é utilizada quando queremos testar uma condição antes de executarmos um ou mais comandos. A sintaxe da instrução if é a seguinte:
1 2 3 4 5 6 7 if ( condição ) // comando // comando // comando } // comando 4 // comando 5 { 1 2 3

Como funciona a instrução if? Se a condição na linha 1 for verdadeira, os comandos das linhas 2, 3 e 4 serão executadas e depois o fluxo de execução do programa segue normalmente e executa a partir da linha 6 em diante. Por outro lado, se a condição for falsa, as linhas 2, 3 e 4 não serão executadas e o fluxo de execução do programa “pula” direto para a linha 6.

www.facebook.com/k19treinamentos

111

C ONTROLE DE F LUXO

112

Pare para pensar...
O que é essa tal condição? A condição é qualquer expressão válida em Java ou C# que devolva um valor booleano. Por exemplo, a expressão “1 < 2” é uma expressão que devolve o valor true. Já a expressão “8%3 == 0” devolve o valor false

Simulação - Debug
A altura mínima para o ingresso na atração “The Barnstormer” do parque temático da Disney “Magic Kingdom” é 0.89 metros. Vamos simular a execução do programa que controla o acesso dos visitantes a essa atração.

1 Na linha 1, um número aleatório do tipo double é gerado com o trecho de código Math.random(). Vamos utilizar esse número para representar a altura de um visitante que deseja ingressar na atração “The Barnstormer”. Esse valor é armazenado na variável altura. Suponha que o valor 0.75 foi gerado.

1 2 3 4 5 6

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;

Variáveis altura = 0.75

2

Na linha 2, o valor armazenado na variável altura é exibido no terminal. double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75

1 2 3 4 5 6

Variáveis altura = 0.75

Na linha 3, a comparação da condição do if devolve true pois o valor da variável altura é menor do que 0.89.
3

1 2 3 4 5 6

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75

Variáveis altura = 0.75

112

www.k19.com.br

113
4

C ONTROLE DE F LUXO

A linha 4 é executada porque a condição do if da linha 3 é verdadeira. Dessa forma, a mensagem “Acesso bloqueado” é exibida no terminal.
1 2 3 4 5 6 double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75 Acesso bloqueado

Variáveis altura = 0.75

5

Por fim, a linha 6 é executada e a mensagem “The Barnstormer” é exibida no terminal. double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75 Acesso bloqueado The Barnstormer

1 2 3 4 5 6

Variáveis altura = 0.75

Simulação - Debug

Na linha 1, um número aleatório do tipo double é gerado com o trecho de código Math.random(). Vamos utilizar esse número para representar a altura de um visitante que deseja ingressar na atração “The Barnstormer”. Esse valor é armazenado na variável altura. Suponha que o valor 0.97 foi gerado.
1

1 2 3 4 5 6

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;

Variáveis altura = 0.97

2

Na linha 2, o valor armazenado na variável altura é exibido no terminal. double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97

1 2 3 4 5 6

Variáveis altura = 0.97

Na linha 3, a comparação da condição do if devolve false pois o valor da variável altura não é menor do que 0.89.
3

www.facebook.com/k19treinamentos

113

C ONTROLE DE F LUXO

114

1 2 3 4 5 6

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97

Variáveis altura = 0.97

4 A linha 4 não é executada porque a condição do if da linha 3 é falsa. Dessa forma, o fluxo de execução vai direto para a linha 6 e a mensagem “The Barnstormer” é exibida no terminal.

1 2 3 4 5 6

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97 The Barnstormer

Variáveis altura = 0.97

Instrução else
Muitas vezes, queremos executar um bloco de comandos caso uma condição seja verdadeira e outro bloco de comandos caso essa condição seja falsa. Para isso, podemos utilizar as instruções if e else. Veja abaixo, a estrutura dessas instruções.
1 2 3 4 5 6 7 8 9 1 if ( condição ) // comando // comando // comando } else { // comando // comando // comando } // comando 7 { 1 2 3 4 5 6

No exemplo acima, se a condição na linha 1 for verdadeira, as linhas 2, 3 e 4 serão executadas e depois o fluxo de execução do programa segue para a linha 10. Por outro lado, se a condição na linha 1 for falsa, as linhas 6, 7 e 8 serão executadas e depois o fluxo de execução do programa segue para a linha 10. A instrução else não pode aparecer sozinha no código sem estar vinculada a uma instrução if. A instrução else pode ser traduzida em português para “senão”. Em português, assim como em Java e C#, não podemos dizer “senão” sem antes ter dito “se”. Por isso, não podemos utilizar a instrução else sem antes ter utilizado a instrução if.

Simulação - Debug

114

www.k19.com.br

115

C ONTROLE DE F LUXO

A altura mínima para o ingresso na atração “The Barnstormer” do parque temático da Disney “Magic Kingdom” é 0.89 metros. Vamos simular a execução do programa que controla o acesso dos visitantes a essa atração.

Na linha 1, um número aleatório do tipo double é gerado com o trecho de código Math.random(). Vamos utilizar esse número para representar a altura de um visitante que deseja ingressar na atração “The Barnstormer”. Esse valor é armazenado na variável altura. Suponha que o valor 0.75 foi gerado.
1

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;

Variáveis altura = 0.75

2

Na linha 2, o valor armazenado na variável altura é exibido no terminal. double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75

1 2 3 4 5 6 7 8

Variáveis altura = 0.75

3 Na linha 3, a comparação da condição do if devolve true pois o valor da variável altura é menor do que 0.89.

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75

Variáveis altura = 0.75

4 A linha 4 é executada porque a condição do if da linha 3 é verdadeira. Dessa forma, a mensagem “Acesso bloqueado” é exibida no terminal.

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;

Variáveis altura = 0.75

www.facebook.com/k19treinamentos

115

C ONTROLE DE F LUXO
.75 Acesso bloqueado

116

Por fim, o fluxo de execução “pula” para a linha 8 e a mensagem “The Barnstormer” é exibida no terminal.
5

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.75 Acesso bloqueado The Barnstormer

Variáveis altura = 0.75

Simulação - Debug

Na linha 1, um número aleatório do tipo double é gerado com o trecho de código Math.random(). Vamos utilizar esse número para representar a altura de um visitante que deseja ingressar na atração “The Barnstormer”. Esse valor é armazenado na variável altura. Suponha que o valor 0.97 foi gerado.
1

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;

Variáveis altura = 0.97

2

Na linha 2, o valor armazenado na variável altura é exibido no terminal. double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97

1 2 3 4 5 6 7 8

Variáveis altura = 0.97

Na linha 3, a comparação da condição do if devolve false pois o valor da variável altura não é menor do que 0.89.
3

116

www.k19.com.br

117

C ONTROLE DE F LUXO

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97

Variáveis altura = 0.97

A linha 4 não é executada porque a condição do if da linha 3 é falsa. Dessa forma, o fluxo de execução vai direto para a linha 6 e a mensagem “Acesso liberado” é exibida no terminal.
4

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97 Acesso liberado

Variáveis altura = 0.97

Por fim, o fluxo de execução continua e a linha 10 é executada exibindo a mensagem “The Barnstormer”.
5

1 2 3 4 5 6 7 8

double altura = Math . random () ; System . out . println ( altura ) ; if ( altura < .89) { System . out . println ( " Acesso bloqueado " ) ; } else { System . out . println ( " Acesso liberado " ) ; } System . out . println ( " The Barnstormer " ) ;
.97 Acesso liberado The Barnstormer

Variáveis altura = 0.97

Instruções de Decisão Encadeadas
Considere um programa de computador que controla os saques efetuados nos caixas eletrônicos de um banco. Nesse banco, os saques efetuados das 6 horas até as 22 horas não podem ser superiores a R$ 5.000,00. Por outro lado, os saques efetuados depois das 22 horas e antes das 6 horas não podem ser superiores a R$ 400,00. Podemos implementar essa lógica utilizando as instruções de decisão oferecidas pelas linguagens de programação.
1 if ( hora >= 6 && hora

Terminal 5.17: Criando a pasta controle-de-fluxo no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao1.zip

2

Na pasta controle-de-fluxo, crie um arquivo chamado AprovadoReprovado.java.

1 class AprovadoReprovado { 2 public static void main ( String [] args ) { 3 double nota = Math . random () * 1 ; 4 5 System . out . println ( " A nota do aluno é : " + nota ) ; 6 7 if ( nota < 6) { 8 System . out . println ( " REPROVADO " ) ; 9 } else { 1 System . out . println ( " APROVADO " ) ; 11 } 12 } 13 }
Código Java 5.23: AprovadoReprovado.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao2.zip

3

Compile e execute algumas vezes a classe AprovadoReprovado.
K19 / rafael / controle - de - fluxo$ javac AprovadoReprovado . java K19 / rafael / controle - de - fluxo$ java AprovadoReprovado A nota do aluno é : .2638522892234163 REPROVADO

118

www.k19.com.br

119
K19 / rafael / controle - de - fluxo$ java AprovadoReprovado A nota do aluno é : 6.9795477244629 8 APROVADO K19 / rafael / controle - de - fluxo$ java AprovadoReprovado A nota do aluno é : 9.817359518391823 APROVADO K19 / rafael / controle - de - fluxo$ java AprovadoReprovado A nota do aluno é : 1.193578174 3141 REPROVADO K19 / rafael / controle - de - fluxo$ java AprovadoReprovado A nota do aluno é : 9.18215894 64294 APROVADO

C ONTROLE DE F LUXO

Terminal 5.18: Compilando e executando a classe AprovadoReprovado

4

Na pasta controle-de-fluxo, crie um arquivo chamado VerificaValorProduto.java.

1 class VerificaValorProduto { 2 public static void main ( String [] args ) { 3 double precoDoProduto1 = Math . random () * 1 ; 4 double precoDoProduto2 = Math . random () * 1 ; 5 6 System . out . println ( " O preço do produto 1 é : " + precoDoProduto1 ) ; 7 System . out . println ( " O preço do produto 2 é : " + precoDoProduto2 ) ; 8 9 if ( precoDoProduto1 < precoDoProduto2 ) { 1 System . out . println ( " O produto 1 é o mais barato " ) ; 11 } else { 12 if ( precoDoProduto2 < precoDoProduto1 ) { 13 System . out . println ( " O produto 2 é o mais barato " ) ; 14 } else { 15 System . out . println ( " Os preços dos dois produtos são iguais " ) ; 16 } 17 } 18 } 19 }
Código Java 5.24: VerificaValorProduto.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao4.zip

5

Compile e execute algumas vezes a classe VerificaValorProduto.
K19 / rafael / controle - de - fluxo$ javac VerificaValorProduto . java K19 / rafael / controle - de - fluxo$ java VerificaValorProduto O preço do produto 1 é : 4 7. 6292168 3149 O preço do produto 2 é : 47 . 9 65 26412986 O produto 1 é o mais barato K19 / rafael / controle - de - fluxo$ java VerificaValorProduto O preço do produto 1 é : 822.5829453982788 O preço do produto 2 é : 462.3926 76619123 O produto 2 é o mais barato K19 / rafael / controle - de - fluxo$ java VerificaValorProduto O preço do produto 1 é : 939.8 7523 341649 O preço do produto 2 é : 883.5996 3 373839 O produto 2 é o mais barato K19 / rafael / controle - de - fluxo$ java VerificaValorProduto O preço do produto 1 é : 992.427819296529 O preço do produto 2 é : 992.427819296529 Os preços dos dois produtos são iguais K19 / rafael / controle - de - fluxo$ java VerificaValorProduto

www.facebook.com/k19treinamentos

119

C ONTROLE DE F LUXO
O preço do produto 1 é : 45 . 919 821815 5 O preço do produto 2 é : 95 . 5644529133 O produto 1 é o mais barato

120

Terminal 5.19: Compilando e executando a classe VerificaValorProduto

6

Na pasta controle-de-fluxo, crie um arquivo chamado EscolheCaminho.java.

1 class EscolheCaminho { 2 public static void main ( String [] args ) { 3 double valor = Math . random () ; 4 5 System . out . println ( " VALOR : " + valor ) ; 6 7 if ( valor < .5) { 8 System . out . println ( " Vire à esquerda " ) ; 9 1 valor = Math . random () ; 11 12 System . out . println ( " VALOR : " + valor ) ; 13 14 if ( valor < .5) { 15 System . out . println ( " Vire à esquerda " ) ; 16 } else { 17 System . out . println ( " Vire à direita " ) ; 18 } 19 2 } else { 21 System . out . println ( " Vire à direita " ) ; 22 23 valor = Math . random () ; 24 25 System . out . println ( " VALOR : " + valor ) ; 26 27 if ( valor < .5) { 28 System . out . println ( " Vire à esquerda " ) ; 29 } else { 3 System . out . println ( " Vire à direita " ) ; 31 } 32 } 33 } 34 }
Código Java 5.25: EscolheCaminho.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao6.zip

7

Compile e execute algumas vezes a classe EscolheCaminho.
K19 / rafael / controle - de - fluxo$ javac EscolheCaminho . java K19 / rafael / controle - de - fluxo$ java EscolheCaminho VALOR : .3 17715862415762 Vire à esquerda VALOR : .9 112717 976 2 7 Vire à direita K19 / rafael / controle - de - fluxo$ java EscolheCaminho VALOR : .98845471 858677 Vire à direita VALOR : .4 831595313 5627 Vire à esquerda K19 / rafael / controle - de - fluxo$ java EscolheCaminho VALOR : .6411 95634177562 Vire à direita VALOR : .9297619245394584

120

www.k19.com.br

121
Vire à direita

C ONTROLE DE F LUXO

Terminal 5.20: Compilando e executando a classe EscolheCaminho

8

Na pasta controle-de-fluxo, crie um arquivo chamado EscolheRoupa.java.

1 class EscolheRoupa { 2 public static void main ( String [] args ) { 3 double valor = Math . random () ; 4 5 if ( valor < .5) { 6 System . out . println ( " camiseta preta " ) ; 7 } else { 8 System . out . println ( " camiseta vermelha " ) ; 9 } 1 11 valor = Math . random () ; 12 13 if ( valor < .5) { 14 System . out . println ( " calça jeans " ) ; 15 } else { 16 System . out . println ( " bermuda " ) ; 17 } 18 19 valor = Math . random () ; 2 21 if ( valor < .5) { 22 System . out . println ( " tênis " ) ; 23 } else { 24 System . out . println ( " sapato " ) ; 25 } 26 27 valor = Math . random () ; 28 29 if ( valor < .5) { 3 System . out . println ( " boné " ) ; 31 } else { 32 System . out . println ( " óculos " ) ; 33 } 34 } 35 }
Código Java 5.26: EscolheRoupa.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao8.zip

9

Compile e execute algumas vezes a classe EscolheRoupa.
K19 / rafael / controle - de - fluxo$ javac EscolheRoupa . java K19 / rafael / controle - de - fluxo$ java EscolheRoupa camiseta vermelha bermuda sapato óculos K19 / rafael / controle - de - fluxo$ java EscolheRoupa camiseta preta calça jeans tênis óculos K19 / rafael / controle - de - fluxo$ java EscolheRoupa camiseta preta bermuda tênis boné

www.facebook.com/k19treinamentos

121

C ONTROLE DE F LUXO

122

Terminal 5.21: Compilando e executando a classe EscolheRoupa

10 Na pasta controle-de-fluxo, crie um arquivo chamado ADivisivelPorB.java. Implemente um programa em Java que guarde dois valores numéricos: a e b. Imprima na tela a mensagem “É divisível” quando a for divisível por b ou a mensagem “Não é divisível”, caso contrário.

1 class ADivisivelPorB { 2 public static void main ( String [] args ) { 3 int a = ( int ) ( Math . random () * 1 ); 4 int b = ( int ) ( Math . random () * 2 ) ; 5 6 System . out . println ( " a : " + a ) ; 7 System . out . println ( " b : " + b ) ; 8 9 if ( a % b == ) { 1 System . out . println ( " É divisível " ) ; 11 } else { 12 System . out . println ( " Não é divisível " ) ; 13 } 14 } 15 }
Código Java 5.27: ADivisivelPorB.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao1 .zip

11

Compile e execute algumas vezes a classe ADivisivelPorB.
K19 / rafael / controle - de - fluxo$ javac ADivisivelPorB . java K19 / rafael / controle - de - fluxo$ java ADivisivelPorB a: 779 b: 16 Não é divisível K19 / rafael / controle - de - fluxo$ java ADivisivelPorB a: 784 b: 16 É divisível K19 / rafael / controle - de - fluxo$ java ADivisivelPorB a: 2 b: 1 É divisível K19 / rafael / controle - de - fluxo$ java ADivisivelPorB a: 628 b: 9 Não é divisível K19 / rafael / controle - de - fluxo$ java ADivisivelPorB a: 615 b: 11 Não é divisível

Terminal 5.22: Compilando e executando a classe ADivisivelPorB

12 Na pasta controle-de-fluxo, crie um arquivo chamado Saudacao.java. Implemente um programa em Java que contenha uma variável chamada hora. Essa variável deve armazenar a hora do dia. Esse programa deve imprimir a mensagem “Bom dia” se a hora estiver no intervalo [0, 11], “Boa tarde” se a hora estiver no intervalo [12, 17] ou “Boa noite” se a hora estiver no intervalo [18, 23].

122

www.k19.com.br

123
1 class Saudacao { 2 public static void main ( String [] args ) { 3 double hora = Math . random () * 24; 4 5 if ( hora >= && hora < 12) { 6 System . out . println ( " Bom dia " ) ; 7 } else if ( hora >= 12 && hora < 18) { 8 System . out . println ( " Boa tarde " ) ; 9 } else if ( hora >= 18 && hora < 24) { 1 System . out . println ( " Boa noite " ) ; 11 } 12 } 13 }
Código Java 5.28: Saudacao.java

C ONTROLE DE F LUXO

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-fixacao12.zip

13

Compile e execute a classe Saudacao.
K19 / rafael / controle - de - fluxo$ javac Saudacao . java K19 / rafael / controle - de - fluxo$ java Saudacao Boa noite K19 / rafael / controle - de - fluxo$ java Saudacao Boa tarde K19 / rafael / controle - de - fluxo$ java Saudacao Boa noite K19 / rafael / controle - de - fluxo$ java Saudacao Boa dia K19 / rafael / controle - de - fluxo$ java Saudacao Boa tarde

Terminal 5.23: Compilando e executando a classe Saudacao

Instruções de Repetição
Considere um programa que gera bilhetes de loteria. O número do primeiro bilhete é 1000, do segundo 1001, do terceiro 1002 e assim por diante até o último bilhete numerado com 9999. Para esse tipo de tarefa, podemos utilizar as instruções de repetição oferecidas pelas linguagens de programação. Basicamente, as instruções de decisão permitem que um determinado trecho de código seja executado ou não. Em algumas situações, é necessário repetir a execução de um determinado trecho de código. Nessas situações, devemos utilizar as instruções de repetição.

Instrução while
A instrução while indica o início de um laço e recebe como parâmetro uma condição. Essa condição é chamada de condição de parada, pois quando ela for falsa, o laço é interrompido. A estrutura ou sintaxe da instrução while é a seguinte:
1 while ( condição de parada ) {

www.facebook.com/k19treinamentos

123

C ONTROLE DE F LUXO
2 // comando 1 3 // comando 2 4 // comando 3 5 }

124

Se traduzirmos para o português a instrução while como enquanto, fica mais fácil entender o seu funcionamento. O código acima poderia ser lido da seguinte forma: “Enquanto a condição de parada for verdadeira, execute comando 1, comando 2 e comando 3.” Considere um programa que exibe na tela cem mensagens de acordo com o seguinte padrão:
Mensagem número 1 Mensagem número 2 Mensagem número 3 ...

Terminal 5.24: Programa que exibe mensagens

Esse programa poderia ser implementado em Java ou C# de uma forma não prática. Veja os exemplos abaixo.
1 2 3 4 5 System . out . println ( " Mensagem System . out . println ( " Mensagem System . out . println ( " Mensagem ... System . out . println ( " Mensagem número 1 " ) ; número 2 " ) ; número 3 " ) ; número 1 ");

Código Java 5.30: Imprimindo a frase “Mensagem número x”.

1 2 3 4 5

System . Console . WriteLine ( " Mensagem System . Console . WriteLine ( " Mensagem System . Console . WriteLine ( " Mensagem ... System . Console . WriteLine ( " Mensagem

número 1 " ) ; número 2 " ) ; número 3 " ) ; número 1 ");

Código C# 5.1: Imprimindo a frase “Mensagem número x”.

Contudo, utilizando a instrução while o código fica bem mais simples. Observe.
1 2 3 4 5 6 7 // Contador de vezes que a mensagem foi impressa . int i = 1; while ( i --b ) a = 13; else { a = 14; }

1 2 3 4 5 6 7 8 9 1 11 12 13 14 15

Ao final desse código, qual é o valor da variável a.

a) 10 b) 11 c) 12 d) 13 e) 14
176
www.k19.com.br

177
5

C ONTROLE DE F LUXO

Qual alternativa está correta? a) if e else são instruções de repetição. b) if e while são instruções de repetição. c) else e while são instruções de repetição. d) while e for são instruções de repetição. e) if e for são instruções de repetição.

6

Qual alternativa está correta? a) No while e for, a condição só pode ser um valor numérico. b) No while e for, a condição pode ser um valor booleano ou numérico. c) No while e for, a condição pode ser uma string ou um valor numérico. d) No while e for, a condição pode ser qualquer coisa. e) No while e for, a condição só pode ser um valor booleano.

7

Considere o seguinte código.

1 int a = 1; 2 3 while ( a > 1 ) { 4 a ++; 5 }

Ao final desse código, qual é o valor da variável a. a) 1 b) 2 c) 9 d) 10 e) 11

8

Considere o seguinte código.

1 int a = 1; 2 3 for ( int i = 1 ; i > 4 a += 2; 5 }

; i - -) {

www.facebook.com/k19treinamentos

177

C ONTROLE DE F LUXO

178

Ao final desse código, qual é o valor da variável a.

a) 1 b) 11 c) 12 d) 21 e) 23

9

Considere o seguinte código.

1 int a = ; 2 3 for ( int i = 1; i < 1 ; i ++) { 4 if ( i == 3 || i == 5) { 5 continue ; 6 } 7 8 if ( i == 9) { 9 break ; 1 } 11 12 a += i ; 13 }

Ao final desse código, qual é o valor da variável a.

a) 0 b) 3 c) 8 d) 28 e) 36

10

Considere o seguinte código.

1 int a = ; 2 for ( int i = ; i < 1 ; i ++) { 3 for ( int j = ; j < 1 ; j ++) { 4 a ++; 5 } 6 }

Ao final desse código, qual é o valor da variável a.

a) 9
178
www.k19.com.br

179

C ONTROLE DE F LUXO

b) 10 c) 18 d) 20 e) 100

11

Considere o seguinte código.

1 int a = ; 2 for ( int i = ; i < 1 ; i ++) { 3 for ( int j = ; j < 1 ; j ++) { 4 if ( i == j ) { 5 continue ; 6 } 7 a ++; 8 } 9 }

Ao final desse código, qual é o valor da variável a.

a) 18 b) 50 c) 90 d) 99 e) 100

Minha Pontuação

Pontuação Mínima:

8

Pontuação Máxima:

11

www.facebook.com/k19treinamentos

179

C ONTROLE DE F LUXO

180

180

www.k19.com.br

CAPÍTULO
3 2 1 0

A RRAY

6

Considere um programa de computador que realizará cálculos matemáticos com os preços dos produtos de um supermercado. Por exemplo, esse programa deverá calcular a média dos preços ou encontrar o produto mais barato. Para manipular os preços dos produtos, dentro de um programa, esses valores devem ser armazenados em variáveis.
1 2 3 4 double preco1 ; double preco2 ; double preco3 ; ...

Como uma variável do tipo double armazena somente um valor de cada vez, seria necessário uma variável para cada produto. Considerando a existência de uma grande quantidade de produtos, essa abordagem será pouco prática. Nesses casos, podemos utilizar os chamados arrays ou vetores.

O que é um Array?
Um array ou vetor é uma estrutura de dados utilizada para armazenar uma coleção de itens. Cada item é identificado através de um índice. Podemos imaginar um array como sendo um armário com um determinado número de gavetas e cada gaveta possui um rótulo com um número de identificação.

Figura 6.1: Abstração de array como um armário com gavetas

Quando criamos um array, devemos informar qual o tipo de dado pretendemos armazenar em cada posição. Na analogia com armário, seria como se tivéssemos que definir o que o é permitido guardar em cada gaveta. Por exemplo, se definirmos que um armário deve guardar livros, então somente livros podem ser armazenados nas gavetas desse armário. Não poderemos guardar revistas ou jornais. www.facebook.com/k19treinamentos 181

A RRAY

182

REVISTA

3

2

LIVRO

1

0

Figura 6.2: Um armário de livros não pode guardar revistas

Como declarar e inicializar um array?
Para utilizarmos um array, devemos criar uma variável para guardar a referência desse array. A declaração dessa variável é semelhante à declaração das variáveis que vimos até agora.
1 int [] nomeDoArray ;
Código Java 6.2: Declaração de um array

Lembre-se que sempre devemos inicializar as variáveis para não ocorrer um erro de compilação. Portanto, vamos inicializar o nosso array:
1 int [] nomeDoArray = new int [1 ];
Código Java 6.3: Declaração e inicialização de um array

A inicialização de um array se dá através da instrução new tanto em Java quanto em C#. No exemplo acima, criamos um array de tamanho 10, ou seja, teremos 10 posições para armazenar valores do tipo int. A instrução new é abordada com mais detalhes nos cursos “K11 - Orientação a Objetos em Java” e “K31 - C# e Orientação a Objetos”.
TIPO DE DADO QUE SERÁ ARMAZENADO PELO ARRAY IDENTIFICADOR DA VARIÁVEL INFORMA O TIPO DO NOVO OBJETO

int[]

nomeDoArray

=

new
INSTANCIA UM NOVO OBJETO

int[10];
INFORMA A QUANTIDADE DE POSIÇÕES DO ARRAY

INFORMA QUE A VARIÁVEL SERÁ UM ARRAY

Figura 6.3: Declaração e inicialização de um array

Inserindo valores de um array
182
www.k19.com.br

183

A RRAY

Existem diversas formas de inserirmos valores em um array. A forma mais comum é a seguinte:
1 2 3 4 int [] a = new int [3]; a [ ] = 124; a [1] = 43; a [2] = 1 23;
Código Java 6.4: Inserindo valores em um array

Na linha 1 declaramos e inicializamos um array do tipo int com três posições. Nas linhas 2, 3 e 4 inserimos no array os valores 124, 43 e 1023 nas posições 0, 1 e 2 respectivamente. Repare que a numeração dos índices de um array começa pelo número zero. As outras formas de se inserir valores em um array fazem muito mais do que simplesmente inserir tais valores. Na verdade essas formas declaram, inicializam e inserem os valores, tudo em apenas uma linha de código.
1 int [] b = new int [] {1 , 62 , 923 , 15}; 2 int [] c = {125 , 76432 , 23};
Código Java 6.5: Outras formas de se inserir valores em um array

1 int [] b = new int [] {1 , 62 , 923 , 15}; 2 int [] c = {125 , 76432 , 23}; 3 int [] d = new int [2] {634 , 5};
Código C# 6.1: Outras formas de se inserir valores em um array

Repare que, no momento da criação dos arrays acima, os valores de cada posição devem ser definidos. Já na primeira forma apresentada, esses valores poderiam ser definidos depois.

Acessando os valores de um array
Para acessarmos o valor armazenado em uma das posições de um array, basta conhecermos o índice de tal posição. Veja o exemplo abaixo:
1 int [] a = new int [] {3215 , 754 , 23}; 2 3 System . out . println ( " Valor na posição de índice : " + a [ ]) ; 4 System . out . println ( " Valor na posição de índice 2: " + a [2]) ;
Código Java 6.6: Acessando os valores de um array

1 int [] a = new int [] {3215 , 754 , 23}; 2 3 System . Console . WriteLine ( " Valor na posição de índice : " + a [ ]) ; 4 System . Console . WriteLine ( " Valor na posição de índice 2: " + a [2]) ;
Código C# 6.2: Acessando os valores de um array.

Percorrendo um array www.facebook.com/k19treinamentos 183

A RRAY

184

Quando trabalhamos com arrays, uma das tarefas mais comuns é acessarmos todas ou algumas de suas posições sistematicamente. Geralmente, fazemos isso para resgatar todos ou alguns dos valores armazenados e realizar algum processamento sobre tais valores. Para percorrermos um array utilizaremos a instrução de repetição for. Podemos utilizar a instrução while também, porém logo perceberemos que a sintaxe da instrução for é mais apropriada quando estamos trabalhando com arrays.
1 2 3 4 5 6 7 8 9 int [] numeros = new int [1 ];

for ( int i = ; i < 1 ; i ++) { numeros [ i ] = i * 2; } for ( int i = ; i < 1 ; i ++) { System . out . println ( numeros [ i ]) ; }
Código Java 6.7: Percorrendo um array para inserir e acessar valores

1 2 3 4 5 6 7 8 9 1 11

int [] numeros = new int [1

];

for ( int i = ; i < 1 ; i ++) { numeros [ i ] = i * 2; } for ( int i = ; i < 1 ; i ++) { System . Console . WriteLine ( numeros [ i ]) ; }
Código C# 6.3: Percorrendo um array para inserir e acessar valores

Imagine que exista uma grande quantidade de linhas de código entre as linhas destacadas no exemplo acima, ou seja, entre a inicialização do array numeros e o for que o percorre. Além disso, imagine também que o código tenha que ser modificado, mais especificamente, a quantidade de posições deve ser alterada de 100 para 1000. Seria muito fácil esquecermos de atualizar os argumentos da instrução for para que o laço considere o intervalo de 0 a 1000 e não o intervalo de 0 a 100. Para evitar esse tipo de problema, uma boa prática é utilizar o atributo length dos arrays da linguagem Java ou a propriedade Length dos arrays da linguagem C# para descobrir qual a sua dimensão (tamanho) do array. Veja como ficaria o exemplo com essas modificações.
1 2 3 4 5 6 7 8 9 int [] numeros = new int [1 ];

for ( int i = ; i < numeros . length ; i ++) { numeros [ i ] = i *2; } for ( int i = ; i < numeros . length ; i ++) { System . out . println ( numeros [ i ]) ; }
Código Java 6.8: Utilizando o atributo length do array

1 int [] numeros = new int [1 ]; 2 3 for ( int i = ; i < numeros . Length ; i ++) 4 { 5 numeros [ i ] = i * 2;

184

www.k19.com.br

185
6 7 8 9 1 11 } for ( int i = ; i < numeros . Length ; i ++) { System . Console . WriteLine ( numeros [ i ]) ; }
Código C# 6.4: Utilizando a propriedade Length do array

A RRAY

Array de arrays
Até agora trabalhamos com arrays de uma dimensão. Porém, tanto em Java como em C#, podemos criar arrays com mais de uma dimensão (arrays multidimensionais). Isso nos permite trabalhar com arrays para representar tabelas, matrizes ou até um tabuleiro de batalha naval. Voltando à analogia que fizemos com um armário cheio de gavetas, seria como se pudéssemos guardar dentro da gaveta de um armário um outro armário com gavetas. Veja a figura abaixo:

3
3

2

2

1

0

1 0
Figura 6.4: Abstração de um array multidimensional

Importante
Em Java, array multidimensional é sinônimo de array de arrays. Em C#, jagged arrays é sinônimo de array de arrays. Em C# a denominação array multidimensional referese a um outro tipo de array. Um array multidimensional em C# é assunto do curso “K31 - C# e Orientação a Objetos”. Neste curso, para evitarmos confusões, sempre utilizaremos a denominação array de arrays.

A declaração de um array de arrays é muito semelhante à declaração e inicialização de um array simples. www.facebook.com/k19treinamentos 185

A RRAY
1 2 3 4 5 6 int [][] arrays = new int [4][]; arrays [ ] arrays [1] arrays [2] arrays [3] = = = = new new new new int [1]; int [3]; int [2]; int [7];
Código Java 6.9: Declarando um array de arrays

186

Em cada posição do nosso array de arrays, devemos criar um novo array. Por esse motivo, ele recebe o nome array de arrays. Além disso, repare que podemos criar arrays de diferentes tamanhos em cada posição. Assim como nos arrays unidimensionais, para inserir ou acessar valores de um array de arrays, devemos utilizar os índices de cada posição. Podemos pensar nos índices como um esquema de coordenadas. Por exemplo, se quiséssemos representar um gráfico no sistema cartesiano de eixos x y através de um array de arrays, a coordenada de cada ponto do gráfico seria equivalente ao par de índices do nosso array de arrays (supondo que no gráfico seja permitido apenas coordenadas inteiras).
1 2 3 4 5 6 7 8 9 1 11 12 boolean [][] pontosDoGrafico = new boolean [1 ][]; for ( int i = ; i < pontosDoGrafico . length ; i ++) { pontosDoGrafico [ i ] = new boolean [1 ]; } pontosDoGrafico [ ][ ] pontosDoGrafico [1][1] pontosDoGrafico [2][1] pontosDoGrafico [2][2] pontosDoGrafico [3][2] pontosDoGrafico [4][1] = = = = = = true ; true ; true ; true ; true ; true ;

Código Java 6.10: Conjunto de pontos de um gráfico de eixos x y armazenados em um array de arrays

1 2 3 4 5 6 7 8 9 1 11 12 13

bool [][] pontosDoGrafico = new bool [1 ][]; for ( int i = ; i < pontosDoGrafico . Length ; i ++) { pontosDoGrafico [ i ] = new bool [1 ]; } pontosDoGrafico [ ][ ] pontosDoGrafico [1][1] pontosDoGrafico [2][1] pontosDoGrafico [2][2] pontosDoGrafico [3][2] pontosDoGrafico [4][1] = = = = = = true ; true ; true ; true ; true ; true ;

Código C# 6.5: Conjunto de pontos de um gráfico de eixos x y armazenados em um array de arrays

Percorrendo um array de arrays
Para percorrer um array de arrays, utilizaremos novamente as instruções de repetição while e for. Porém, como estamos trabalhando com arrays com mais de uma dimensão, teremos uma ou mais laços encadeados.

186

www.k19.com.br

187
1 2 3 4 5 6 7 8 9 1 11 int [][] tabelaDeNumeros = new int [5][]; for ( int i = ; i < tabelaDeNumeros . length ; i ++) { tabelaDeNumeros [ i ] = new int [5]; } for ( int i = ; i < tabelaDeNumeros . length ; i ++) { for ( int j = ; j < tabelaDeNumeros [ i ]. length ; j ++) { tabelaDeNumeros [ i ][ j ] = i * j ; } }
Código Java 6.11: Percorrendo um array de arrays com instruções for aninhadas

A RRAY

Exercícios de Fixação Com Java

Abra um terminal; Entre na pasta dos seus exercícios e crie uma pasta chamada arrays para os arquivos desenvolvidos nesse capítulo.
1
K19 / rafael$ mkdir arrays K19 / rafael$ cd arrays K19 / rafael / arrays$

Terminal 6.1: Criando a pasta arrays no Linux

C :\ Users \ K19 \ rafael > md arrays C :\ Users \ K19 \ rafael > cd arrays C :\ Users \ K19 \ rafael \ arrays >

Terminal 6.2: Criando a pasta arrays no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao1.zip

Na pasta arrays, crie um arquivo chamado SequenciaQualquer.java. Implemente um programa em Java que armazene 10 números inteiros em um array. Todas as posições do array devem ser preenchidas e o valor armazenado fica à sua escolha. Após preencher o array, exiba os seus valores no terminal.
2

1 class SequenciaQualquer { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 array [ ] = 57; 6 array [1] = 436; 7 array [2] = 724; 8 array [3] = 564; 9 array [4] = 245; 1 array [5] = 47; 11 array [6] = 34; 12 array [7] = 1; 13 array [8] = 347735; 14 array [9] = 83; 15 16 for ( int i = ; i < array . length ; i ++) { 17 System . out . println ( array [ i ]) ;

www.facebook.com/k19treinamentos

187

A RRAY
18 } 19 } 2 }
Código Java 6.12: SequenciaQualquer.java

188

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao2.zip

3

Compile e execute a classe SequenciaQualquer.
K19 / rafael / arrays$ javac SequenciaQualquer . java K19 / rafael / arrays$ java SequenciaQualquer 57 436 724 564 245 47 34 1 347735 83

Terminal 6.3: Compilando e executando a classe SequenciaQualquer

Na pasta arrays, crie um arquivo chamado SequenciaCrescente.java. Implemente um programa em Java que armazene 10 números inteiros em um array. Preencha todas as posições do array com valores sequenciais. Ao final, exiba no terminal esse valores.
4

1 class SequenciaCrescente { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 for ( int i = ; i < array . length ; i ++) { 6 array [ i ] = i ; 7 } 8 9 for ( int i = ; i < array . length ; i ++) { 1 System . out . println ( array [ i ]) ; 11 } 12 } 13 }
Código Java 6.13: SequenciaCrescente.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao4.zip

5

Compile e execute a classe SequenciaCrescente.
K19 / rafael / arrays$ javac SequenciaCrescente . java K19 / rafael / arrays$ java SequenciaCrescente 1 2 3 4 5 6 7 8 9

188

www.k19.com.br

189

A RRAY

Terminal 6.4: Compilando e executando a classe SequenciaCrescente

6 Na pasta arrays, crie um arquivo chamado SequenciaDecrescente.java. Implemente um programa em Java que armazene 10 números inteiros em um array. Preencha todas as posições do array com valores sequenciais decrescentes. Ao final, exiba no terminal esse valores.

1 class SequenciaDecrescente { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 for ( int i = ; i < array . length ; i ++) { 6 array [ i ] = array . length - 1 - i ; 7 } 8 9 for ( int i = ; i < array . length ; i ++) { 1 System . out . println ( array [ i ]) ; 11 } 12 } 13 }
Código Java 6.14: SequenciaDecrescente.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao6.zip

7

Compile e execute a classe SequenciaDecrescente.
K19 / rafael / arrays$ javac SequenciaDecrescente . java K19 / rafael / arrays$ java SequenciaDecrescente 9 8 7 6 5 4 3 2 1

Terminal 6.5: Compilando e executando a classe SequenciaDecrescente

Na pasta arrays, crie um arquivo chamado SequenciaImpar.java. Implemente um programa em Java que armazene 10 números inteiros ímpares em um array. Ao final, exiba no terminal esse valores.
8

1 class SequenciaImpar { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 for ( int i = ; i < array . length ; i ++) { 6 array [ i ] = 2 * i + 1; 7 } 8 9 for ( int i = ; i < array . length ; i ++) { 1 System . out . println ( array [ i ]) ; 11 } 12 } 13 }

www.facebook.com/k19treinamentos

189

A RRAY

190

Código Java 6.15: SequenciaImpar.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao8.zip

9

Compile e execute a classe SequenciaImpar.
K19 / rafael / arrays$ javac SequenciaImpar . java K19 / rafael / arrays$ java SequenciaImpar 1 3 5 7 9 11 13 15 17 19

Terminal 6.6: Compilando e executando a classe SequenciaImpar

Na pasta arrays, crie um arquivo chamado SequenciaAleatoria.java. Implemente um programa em Java que armazene 10 números inteiros aleatórios em um array. Ao final, exiba no terminal esse valores.
10

1 class SequenciaAleatoria { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 for ( int i = ; i < array . length ; i ++) { 6 array [ i ] = ( int ) ( Math . random () * 1 ) ; 7 } 8 9 for ( int i = ; i < array . length ; i ++) { 1 System . out . println ( array [ i ]) ; 11 } 12 } 13 }
Código Java 6.16: SequenciaAleatoria.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao1 .zip

11

Compile e execute a classe SequenciaAleatoria.
K19 / rafael / arrays$ javac SequenciaAleatoria . java K19 / rafael / arrays$ java SequenciaAleatoria 2 76 88 45 39 91 33 25 18 7

Terminal 6.7: Compilando e executando a classe SequenciaAleatoria

190

www.k19.com.br

191
12

A RRAY

Na pasta arrays, crie um arquivo chamado TabelaQualquer.java. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
1 class TabelaQualquer { 2 public static void main ( String [] args ) { 3 int [][] array = new int [3][3]; 4 5 array [ ][ ] = 19; 6 array [ ][1] = 22; 7 array [ ][2] = 31; 8 array [1][ ] = 2; 9 array [1][1] = 51; 1 array [1][2] = 12; 11 array [2][ ] = 41; 12 array [2][1] = 11; 13 array [2][2] = 3; 14 15 16 for ( int i = ; i < array . length ; i ++) { 17 for ( int j = ; j < array [ i ]. length ; j ++) { 18 System . out . println ( array [ i ][ j ]) ; 19 } 2 } 21 } 22 }
Código Java 6.17: TabelaQualquer.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao12.zip

13

Compile e execute a classe TabelaQualquer.
K19 / rafael / arrays$ javac TabelaQualquer . java K19 / rafael / arrays$ java TabelaQualquer 19 22 31 2 51 12 41 11 3

Terminal 6.8: Compilando e executando a classe TabelaQualquer

Na pasta arrays, crie um arquivo chamado TabelaAleatoria.java. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
14

1 class TabelaAleatoria { 2 public static void main ( String [] args ) { 3 int [][] array = new int [3][3]; 4 5 for ( int i = ; i < array . length ; i ++) { 6 for ( int j = ; j < array [ i ]. length ; j ++) { 7 array [ i ][ j ] = ( int ) ( Math . random () * 1 ) ; 8 } 9 } 1 11 for ( int i = ; i < array . length ; i ++) { 12 for ( int j = ; j < array [ i ]. length ; j ++) { 13 System . out . println ( array [ i ][ j ]) ; 14 } 15 }

www.facebook.com/k19treinamentos

191

A RRAY
16 } 17 }
Código Java 6.18: TabelaAleatoria.java

192

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao14.zip

15

Compile e execute a classe TabelaAleatoria.
K19 / rafael / arrays$ javac TabelaAleatoria . java K19 / rafael / arrays$ java TabelaAleatoria 35 72 13 47 6 74 47 3 27

Terminal 6.9: Compilando e executando a classe TabelaAleatoria

Na pasta arrays, crie um arquivo chamado Tabuada.java. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
16

1 class Tabuada { 2 public static void main ( String [] args ) { 3 int [][] tabuada = new int [1 ][1 ]; 4 5 for ( int i = ; i < tabuada . length ; i ++) 6 for ( int j = ; j < tabuada [ i ]. length ; 7 tabuada [ i ][ j ] = ( i + 1) * ( j + 1) ; 8 } 9 } 1 11 for ( int i = ; i < tabuada . length ; i ++) 12 for ( int j = ; j < tabuada [ i ]. length ; 13 System . out . println (( i + 1) + " x " + 14 } 15 } 16 } 17 }

{ j ++) {

{ j ++) { ( j + 1) + " = " + tabuada [ i ][ j ]) ;

Código Java 6.19: Tabuada.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao16.zip

17

Compile e execute a classe Tabuada.
K19 / rafael / arrays$ javac Tabuada . java K19 / rafael / arrays$ java Tabuada 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 ... 1 x 8 = 8 1 x 9 = 9 1 x 1 = 1

Terminal 6.10: Compilando e executando a classe Tabuada

192

www.k19.com.br

193

A RRAY

Erro: Acessar uma posição inexistente
Um erro de execução comum em Java ou C# ocorre quando tentamos acessar uma posição que não existe em array.
1 class Programa { 2 public static void main ( String [] args ) { 3 int [] array = new int [1 ]; 4 5 array [1 ] = 1 ; 6 } 7 }
Código Java 6.20: Programa.java

A mensagem de erro de execução seria semelhante a apresenta abaixo.
Exception in thread " main " java . lang . ArrayIndexOutOfBoundsException : 1 at Programa . main ( Programa . java :5)

Terminal 6.11: Erro de execução

Agora, veja um exemplo de programa em C# com esse problema.
1 class Programa 2 { 3 static void Main () 4 { 5 int [] array = new int [1 ]; 6 7 array [1 ] = 1 ; 8 } 9 }
Código C# 6.6: Programa.cs

A mensagem de erro de execução seria semelhante a apresenta abaixo.
Unhandled Exception : System . IndexOutOfRangeException : Index was outside the bounds of the array . at Programa . Main ()

Terminal 6.12: Erro de execução

Exercícios de Fixação Com C#

18 Na pasta arrays, crie um arquivo chamado SequenciaQualquer.cs. Implemente um programa em Java que armazene 10 números inteiros em um array. Todas as posições do array devem ser preenchidas e o valor armazenado fica à sua escolha. Após preencher o array, exiba os seus valores no terminal.

1 class SequenciaQualquer 2 { 3 static void Main () 4 {

www.facebook.com/k19treinamentos

193

A RRAY
5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 } 23 } int [] array = new int [1 ]; array [ ] array [1] array [2] array [3] array [4] array [5] array [6] array [7] array [8] array [9] = = = = = = = = = = 57; 436; 724; 564; 245; 47; 34; 1; 347735; 83;

194

for ( int i = ; i < array . Length ; i ++) { System . Console . WriteLine ( array [ i ]) ; }

Código C# 6.7: SequenciaQualquer.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao18.zip

19

Compile e execute a classe SequenciaQualquer.
C :\ Users \ K19 \ rafael \ arrays > csc SequenciaQualquer . cs C :\ Users \ K19 \ rafael \ arrays > SequenciaQualquer . exe 57 436 724 564 245 47 34 1 347735 83

Terminal 6.13: Compilando e executando a classe SequenciaQualquer

Na pasta arrays, crie um arquivo chamado SequenciaCrescente.cs. Implemente um programa em Java que armazene 10 números inteiros em um array. Preencha todas as posições do array com valores sequenciais. Ao final, exiba no terminal esse valores.
20

1 class SequenciaCrescente 2 { 3 static void Main () 4 { 5 int [] array = new int [1 ]; 6 7 for ( int i = ; i < array . Length ; i ++) 8 { 9 array [ i ] = i ; 1 } 11 12 for ( int i = ; i < array . Length ; i ++) 13 { 14 System . Console . WriteLine ( array [ i ]) ; 15 } 16 } 17 }
Código C# 6.8: SequenciaCrescente.cs

194

www.k19.com.br

195

A RRAY
1-arrays-fixacao2 .zip

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

21

Compile e execute a classe SequenciaCrescente.
C :\ Users \ K19 \ rafael \ arrays > csc SequenciaCrescente . cs C :\ Users \ K19 \ rafael \ arrays > SequenciaCrescente . exe 1 2 3 4 5 6 7 8 9

Terminal 6.14: Compilando e executando a classe SequenciaCrescente

Na pasta arrays, crie um arquivo chamado SequenciaDecrescente.cs. Implemente um programa em Java que armazene 10 números inteiros em um array. Preencha todas as posições do array com valores sequenciais descrescentes. Ao final, exiba no terminal esse valores.
22

1 class SequenciaDecrescente 2 { 3 static void Main () 4 { 5 int [] array = new int [1 ]; 6 7 for ( int i = ; i < array . Length ; i ++) 8 { 9 array [ i ] = array . Length - 1 - i ; 1 } 11 12 for ( int i = ; i < array . Length ; i ++) 13 { 14 System . Console . WriteLine ( array [ i ]) ; 15 } 16 } 17 }
Código C# 6.9: SequenciaDecrescente.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao22.zip

23

Compile e execute a classe SequenciaDecrescente.
C :\ Users \ K19 \ rafael \ arrays > csc SequenciaDecrescente . cs C :\ Users \ K19 \ rafael \ arrays > SequenciaDecrescente . exe 9 8 7 6 5 4 3 2 1

Terminal 6.15: Compilando e executando a classe SequenciaDecrescente

www.facebook.com/k19treinamentos

195

A RRAY
24

196

Na pasta arrays, crie um arquivo chamado SequenciaImpar.cs. Implemente um programa em Java que armazene 10 números inteiros ímpares em um array. Ao final, exiba no terminal esse valores.
1 class SequenciaImpar 2 { 3 static void Main () 4 { 5 int [] array = new int [1 ]; 6 7 for ( int i = ; i < array . Length ; i ++) 8 { 9 array [ i ] = 2 * i + 1; 1 } 11 12 for ( int i = ; i < array . Length ; i ++) 13 { 14 System . Console . WriteLine ( array [ i ]) ; 15 } 16 } 17 }
Código C# 6.10: SequenciaImpar.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao24.zip

25

Compile e execute a classe SequenciaImpar.
C :\ Users \ K19 \ rafael \ arrays > csc SequenciaImpar . cs C :\ Users \ K19 \ rafael \ arrays > SequenciaImpar . exe 1 3 5 7 9 11 13 15 17 19

Terminal 6.16: Compilando e executando a classe SequenciaImpar

Na pasta arrays, crie um arquivo chamado SequenciaAleatoria.cs. Implemente um programa em Java que armazene 10 números inteiros aleatórios em um array. Ao final, exiba no terminal esse valores.
26

1 class SequenciaAleatoria 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 int [] array = new int [1 ]; 8 9 for ( int i = ; i < array . Length ; i ++) 1 { 11 array [ i ] = ( int ) ( gerador . NextDouble () * 1 ) ; 12 } 13 14 for ( int i = ; i < array . Length ; i ++) 15 { 16 System . Console . WriteLine ( array [ i ]) ; 17 }

196

www.k19.com.br

197
18 } 19 }
Código C# 6.11: SequenciaAleatoria.cs

A RRAY

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao26.zip

27

Compile e execute a classe SequenciaAleatoria.
C :\ Users \ K19 \ rafael \ arrays > csc SequenciaAleatoria . cs C :\ Users \ K19 \ rafael \ arrays > SequenciaAleatoria . exe 2 76 88 45 39 91 33 25 18 7

Terminal 6.17: Compilando e executando a classe SequenciaAleatoria

Na pasta arrays, crie um arquivo chamado TabelaQualquer.cs. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
28

1 class TabelaQualquer 2 { 3 static void Main () 4 { 5 int [][] array = new int [3][]; 6 7 for ( int i = ; i < array . Length ; i ++) 8 { 9 array [ i ] = new int [3]; 1 } 11 12 array [ ][ ] = 19; 13 array [ ][1] = 22; 14 array [ ][2] = 31; 15 array [1][ ] = 2; 16 array [1][1] = 51; 17 array [1][2] = 12; 18 array [2][ ] = 41; 19 array [2][1] = 11; 2 array [2][2] = 3; 21 22 23 for ( int i = ; i < array . Length ; i ++) 24 { 25 for ( int j = ; j < array [ i ]. Length ; j ++) 26 { 27 System . Console . WriteLine ( array [ i ][ j ]) ; 28 } 29 } 3 } 31 }
Código C# 6.12: TabelaQualquer.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k www.facebook.com/k19treinamentos 1-arrays-fixacao28.zip

197

A RRAY
29

198

Compile e execute a classe TabelaQualquer.
C :\ Users \ K19 \ rafael \ arrays > csc TabelaQualquer . cs C :\ Users \ K19 \ rafael \ arrays > TabelaQualquer . exe 19 22 31 2 51 12 41 11 3

Terminal 6.18: Compilando e executando a classe TabelaQualquer

Na pasta arrays, crie um arquivo chamado TabelaAleatoria.cs. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
30

1 class TabelaAleatoria 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 int [][] array = new int [3][]; 8 9 for ( int i = ; i < array . Length ; i ++) 1 { 11 array [ i ] = new int [3]; 12 for ( int j = ; j < array [ i ]. Length ; j ++) 13 { 14 array [ i ][ j ] = ( int ) ( gerador . NextDouble () * 1 15 } 16 } 17 18 for ( int i = ; i < array . Length ; i ++) 19 { 2 for ( int j = ; j < array [ i ]. Length ; j ++) 21 { 22 System . Console . WriteLine ( array [ i ][ j ]) ; 23 } 24 } 25 } 26 }
Código C# 6.13: TabelaAleatoria.cs

);

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao3 .zip

31

Compile e execute a classe TabelaAleatoria.
C :\ Users \ K19 \ rafael \ arrays > csc TabelaAleatoria . cs C :\ Users \ K19 \ rafael \ arrays > TabelaAleatoria . exe 2 76 88 45 39 91 33 25 18 7

198

www.k19.com.br

199

A RRAY

Terminal 6.19: Compilando e executando a classe TabelaAleatoria

Na pasta arrays, crie um arquivo chamado Tabuada.cs. Implemente um programa em Java que armazene números inteiros em um array de arrays. Ao final, exiba no terminal esse valores.
32

1 class Tabuada 2 { 3 static void Main () 4 { 5 int [][] tabuada = new int [1 ][]; 6 7 for ( int i = ; i < tabuada . Length ; i ++) 8 { 9 tabuada [ i ] = new int [1 ]; 1 for ( int j = ; j < tabuada [ i ]. Length ; j ++) 11 { 12 tabuada [ i ][ j ] = ( i + 1) * ( j + 1) ; 13 } 14 } 15 16 for ( int i = ; i < tabuada . Length ; i ++) 17 { 18 for ( int j = ; j < tabuada [ i ]. Length ; j ++) 19 { 2 System . Console . WriteLine (( i + 1) + " x " + ( j + 1) + " = " + tabuada [ i ][ j ]) ; 21 } 22 } 23 } 24 }
Código C# 6.14: Tabuada.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-fixacao32.zip

33

Compile e execute a classe Tabuada.
C :\ Users \ K19 \ rafael \ arrays > csc Tabuada . cs C :\ Users \ K19 \ rafael \ arrays > Tabuada . exe 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 ... 1 x 8 = 8 1 x 9 = 9 1 x 1 = 1

Terminal 6.20: Compilando e executando a classe Tabuada

Exercícios Complementares

1 Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar em um array o gabarito de uma prova. Implemente um programa em Java que gere aleatoriamente o gabarito de uma prova com 10 questões de múltipla escolha. Considere que cada questão possui três alternativas numeradas de 1 a 3. Complete o código a seguir.

www.facebook.com/k19treinamentos

199

A RRAY
1 class GeraradorDeGabarito { 2 public static void main ( String [] args ) { 3 4 } 5 }
Código Java 6.21: GeraradorDeGabarito.java

200

Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar as respostas dos alunos em uma tabela (um array de arrays). Na primeira linha dessa tabela, devem ser armazenadas as respostas do primeiro aluno. Na segunda linha, as notas do segundo aluno. E assim por diante. Implemente um programa em Java que preencha uma tabela com respostas aleatórias. Para implementar esse programa, considere que a prova tenha 10 questões de múltipla escolha com 3 alternativas cada numeradas de 1 a 3. Além disso, considere que que 5 alunos realizaram essa prova. Complete o código a seguir.
2

1 class GeraradorDeRespostasAleatorias { 2 public static void main ( String [] args ) { 3 4 } 5 }
Código Java 6.23: GeraradorDeRespostasAleatorias.java

Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar em um array o gabarito da prova. As respostas dos alunos devem ser armazenadas em uma tabela (um array de arrays). Na primeira linha dessa tabela, devem ser armazenadas as respostas do primeiro aluno. Na segunda linha, as notas do segundo aluno. E assim por diante. O programa deve exibir a quantidade de acertos de cada aluno. Implemente um programa em Java para realizar a correção dessas provas. Complete o código a seguir.
3

1 class CorretorDeProva { 2 public static void main ( String [] args ) { 3 int [] gabarito = new int [1 ]; 4 5 for ( int i = ; i < gabarito . length ; i ++) { 6 gabarito [ i ] = ( int ) ( Math . random () * 3 + 1) ; 7 System . out . print ( gabarito [ i ] + " " ) ; 8 } 9 System . out . println ( " gabarito " ) ; 1 11 int [][] respostas = new int [5][1 ]; 12 13 for ( int i = ; i < respostas . length ; i ++) { 14 for ( int j = ; j < respostas [ i ]. length ; j ++) { 15 respostas [ i ][ j ] = ( int ) ( Math . random () * 3 + 1) ; 16 System . out . print ( respostas [ i ][ j ] + " " ) ; 17 } 18 System . out . println ( " aluno " + ( i + 1) ) ; 19 } 2 21 22 } 23 }
Código Java 6.25: CorretorDeProva.java

200

www.k19.com.br

201
4

A RRAY

Considere um programa de computador que controla as vagas de um estacionamento. Esse programa deve armazenar em uma tabela (array de arrays) a situação das vagas (ocupada ou livre) por andar. Implemente um programa em Java que defina aleatoriamente a situação das vagas de um estacionamento de quatro andares numerados de 1 a 4. Considere que a capacidade de cada andar é de 10 vagas. Complete o código a seguir.
1 class ControleDeVagas { 2 public static void main ( String [] args ) { 3 4 } 5 }
Código Java 6.27: ControleDeVagas.java

Considere um programa de computador que controla as vagas de um estacionamento. Esse programa deve armazenar em uma tabela (array de arrays) a situação das vagas (ocupada ou livre). Implemente um programa em Java que exiba no terminal a quantidade de vagas livres por andar. Complete o código a seguir.
5

1 class Estacionamento { 2 public static void main ( String [] args ) { 3 boolean [][] vagas = new boolean [4][1 ]; 4 for ( int i = ; i < vagas . length ; i ++) { 5 for ( int j = ; j < vagas [ i ]. length ; j ++) { 6 vagas [ i ][ j ] = Math . random () < .5; 7 System . out . print ( vagas [ i ][ j ] ? " - " : " X " ) ; 8 } 9 System . out . println ( " andar " + ( i + 1) ) ; 1 } 11 12 13 } 14 }
Código Java 6.29: Estacionamento.java

Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar em um array o gabarito de uma prova. Implemente um programa em Java que gere aleatoriamente o gabarito de uma prova com 10 questões de múltipla escolha. Considere que cada questão possui três alternativas numeradas de 1 a 3. Complete o código a seguir.
6

1 class GeraradorDeGabarito 2 { 3 static void Main () 4 { 5 6 } 7 }
Código C# 6.15: GeraradorDeGabarito.cs

7 Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar as respostas dos alunos em uma tabela (um array de arrays). Na primeira linha dessa tabela, devem ser armazenadas as respostas do primeiro aluno. Na segunda linha, as notas do segundo aluno. E assim por diante. Implemente um programa em Java que preencha uma tabela

www.facebook.com/k19treinamentos

201

A RRAY

202

com respostas aleatórias. Para implementar esse programa, considere que a prova tenha 10 questões de múltipla escolha com 3 alternativas cada numeradas de 1 a 3. Além disso, considere que que 5 alunos realizaram essa prova. Complete o código a seguir.
1 class GeraradorDeRespostasAleatorias 2 { 3 static void Main () 4 { 5 6 } 7 }
Código C# 6.17: GeraradorDeRespostasAleatorias.cs

8 Considere um programa de computador que corrige provas de múltipla escolha. Esse programa deve armazenar em um array o gabarito da prova. As respostas dos alunos devem ser armazenadas em uma tabela (um array de arrays). Na primeira linha dessa tabela, devem ser armazenadas as respostas do primeiro aluno. Na segunda linha, as notas do segundo aluno. E assim por diante. O programa deve exibir a quantidade de acertos de cada aluno. Implemente um programa em Java para realizar a correção dessas provas. Complete o código a seguir.

1 class CorretorDeProva 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 int [] gabarito = new int [1 ]; 8 9 for ( int i = ; i < gabarito . Length ; i ++) 1 { 11 gabarito [ i ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; 12 System . Console . Write ( gabarito [ i ] + " " ) ; 13 } 14 System . Console . WriteLine ( " gabarito " ) ; 15 16 int [][] respostas = new int [5][]; 17 18 for ( int i = ; i < respostas . Length ; i ++) 19 { 2 respostas [ i ] = new int [1 ]; 21 for ( int j = ; j < respostas [ i ]. Length ; j ++) 22 { 23 respostas [ i ][ j ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; 24 System . Console . Write ( respostas [ i ][ j ] + " " ) ; 25 } 26 System . Console . WriteLine ( " aluno " + ( i + 1) ) ; 27 } 28 29 3 } 31 }
Código C# 6.19: CorretorDeProva.cs

9 Considere um programa de computador que controla as vagas de um estacionamento. Esse programa deve armazenar em uma tabela (array de arrays) a situação das vagas (ocupada ou livre) por andar. Implemente um programa em Java que defina aleatoriamente a situação das vagas de um estacionamento de quatro andares numerados de 1 a 4. Considere que a capacidade de cada andar

202

www.k19.com.br

203

A RRAY

é de 10 vagas. Complete o código a seguir.
1 class ControleDeVagas 2 { 3 static void Main () 4 { 5 6 } 7 }
Código C# 6.21: ControleDeVagas.cs

10 Considere um programa de computador que controla as vagas de um estacionamento. Esse programa deve armazenar em uma tabela (array de arrays) a situação das vagas (ocupada ou livre). Implemente um programa em Java que exiba no terminal a quantidade de vagas livres por andar. Complete o código a seguir.

1 class Estacionamento 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 bool [][] vagas = new bool [4][]; 7 for ( int i = ; i < vagas . Length ; i ++) 8 { 9 vagas [ i ] = new bool [1 ]; 1 for ( int j = ; j < vagas [ i ]. Length ; j ++) 11 { 12 vagas [ i ][ j ] = gerador . NextDouble () < .5; 13 System . Console . Write ( vagas [ i ][ j ] ? " - " : " X " ) ; 14 } 15 System . Console . WriteLine ( " andar " + ( i + 1) ) ; 16 } 17 18 19 } 2 }
Código C# 6.23: Estacionamento.cs

Resumo do Capítulo

Os arrays são estruturas de dados simples que permitem o armazenamento sequencial de dados.

1

2

As posições de um array são numeradas sequencialmente iniciando com 0.

3

Em Java, a capacidade de um array pode ser obtida através do atributo length.

4

Em C#, a capacidade de um array pode ser obtida através da propriedade Length. www.facebook.com/k19treinamentos 203

A RRAY
5

204

Na tentativa de acesso à uma posição inexistente de um array, um erro de execução é gerado tanto no Java quanto no C#.

Prova

1

Qual alternativa está correta?

a) As posições de um array são numeradas iniciando no 0. b) As posições de um array são numeradas iniciando no 1. c) Um array pode ter no máximo 100 posições. d) Os arrays armazenam apenas números inteiros. e) As posições de um array são acessadas com chaves.

2

Considere o seguinte código.

1 int [] array = new int [1 ]; 2 array [1 ] = 1 ;

Qual alternativa está correta?

a) Nesse código, há um erro de compilação. b) Nesse código, há um erro de execução. c) Não há nada de errado nesse código. d) O valor 10 será exibido no terminal. e) O valor 0 será exibido no terminal.

3

Em Java, como a capacidade de um array é recuperada?

a) Através da propriedade Length. b) Através da propriedade Size. c) Através do atributo capacity. d) Através do atributo size. e) Através do atributo length.

204

www.k19.com.br

205
4

A RRAY

Em C#, como a capacidade de um array é recuperada?

a) Através da propriedade Length. b) Através da propriedade Size. c) Através do atributo capacity. d) Através do atributo size. e) Através do atributo length.

5

Em Java ou C#, qual é a forma correta de acessar a quinta posição de um array?

a) array[5]. b) array{5}. c) array(5). d) array[4]. e) array{4}.

6

Considere o seguinte código.

1 int [] array = new int [1 ]; 2 3 for ( int i = ; i < 1 ; i ++) { 4 array [ i ] = i ; 5 }

Qual alternativa está correta?

a) Na compilação, um erro ocorrerá. b) Na execução, as 100 posições do array serão preenchidas. c) Na compilação, as 100 posições do array serão preenchidas. d) Na execução, todos os valores armazenados no array serão exibidos no terminal. e) Na execução, um erro ocorrerá.

Minha Pontuação

Pontuação Mínima:

4

Pontuação Máxima:

6

www.facebook.com/k19treinamentos

205

A RRAY

206

206

www.k19.com.br

CAPÍTULO

F UNÇÕES OU M ÉTODOS

7

Considere uma empresa que precisa gerar diversos tipos de documentos como recibos, atestados ou relatórios. Os dados da empresa devem aparecer no cabeçalho dos documentos. Para automatizar a criação desses documentos, podemos implementar um programa de computador.
1 System . out . println ( " ------------ K19 Treinamentos ------------" ) ; 2 System . out . println ( " ----------- contato@k19 . com . br -----------" ) ;

O trecho de código acima exibe no terminal o cabeçalho que deve aparecer nos documentos. Toda vez que um documento for exibido no terminal, as linhas acima serão adicionadas no código. Dessa forma, esse trecho de código se repetirá muitas vezes. Agora, considere uma mudança simples no cabeçalho dos documentos, o telefone da empresa deve aparecer depois do email. Essa pequena alteração implicará em modificações em muitos pontos do código fonte. Na verdade, qualquer alteração no cabeçalho implicará em modificações em muitos lugares do código fonte. Para facilitar eventuais modificações no cabeçalho, podemos utilizar o conceito de função ou método.

Importante
Linguagens Orientadas a Objetos como Java ou C# utilizam o termo método e não o termo função. Contudo, nesse momento, não discutiremos as diferenças conceituais entre métodos e funções pois essa discussão está totalmente fora do escopo desse treinamento.

Então, definiremos um método para exibir o cabeçalho dos documentos no terminal e reaproveitálo toda vez que for necessário.
1 static void exibeCabecalho () { 2 System . out . println ( " ------------ K19 Treinamentos ------------" ) ; 3 System . out . println ( " ----------- contato@k19 . com . br -----------" ) ; 4 }

Quando necessário, um método pode ser chamado através do seu nome. Observe, no código abaixo, que o método exibeCabecalho foi chamado duas vezes.
1 class Programa { 2 public static void main ( String [] args ) { 3 // chamando a função exibeCabecalho 4 exibeCabecalho () ; 5 System . out . println ( " Recibo : R$ 545 , " ) ; 6 7 System . out . println () ; 8 9 // chamando a função exibeCabecalho 1 exibeCabecalho () ; 11 System . out . println ( " Atestado de Matrícula : Jonas Keizo Hirata " ) ; 12 }

www.facebook.com/k19treinamentos

207

F UNÇÕES OU M ÉTODOS
13 14 static void exibeCabecalho () { 15 System . out . println ( " ------------ K19 Treinamentos ------------" ) ; 16 System . out . println ( " ----------- contato@k19 . com . br -----------" ) ; 17 } 18 }

208

K19$ java Programa ------------ K19 Treinamentos ---------------------- contato@k19 . com . br ----------Recibo : R$ 545 , ------------ K19 Treinamentos ---------------------- contato@k19 . com . br ----------Atestado de Matrícula : Jonas Keizo Hirata

Agora, acrescentar o telefone da empresa no cabeçalho dos documentos é muito fácil. Basta alterar o código da função exibeCabecalho.
1 static void exibeCabecalho () { 2 System . out . println ( " ------------ K19 Treinamentos ------------" ) ; 3 System . out . println ( " ----------- contato@k19 . com . br -----------" ) ; 4 System . out . println ( " -------------- 11 2387 -3791 --------------" ) ; 5 }

Parâmetros
Considere um programa de computador que realiza operações financeiras como o cálculo de juros simples por exemplo. Para evitar repetição de código, podemos definir um método para realizar esse cálculo e reutilizá-lo todo vez que for necessário.
1 static void calculaJurosSimples () { 2 double juros = 1 * . 15 * 12; 3 }

Observe que o método acima considera um capital fixo de R$ 10.000,00, uma taxa de juros fixa de 1,5% e um período fixo de 12 meses. De fato, esse método não é muito útil porque toda vez que ele for chamado, ele realizará o cálculo com esses valores fixos. Para tornar o método calculaJurosSimples mais útil, devemos parametrizá-lo. Um parâmetro é basicamente um valor que um método recebe antes de ser executado.
1 static void calculaJurosSimples ( double capital , double taxa , int periodo ) { 2 double juros = capital * taxa * periodo ; 3 }

No código acima, três parâmetros foram definidos para o método calculaJurosSimples. O primeiro parâmetro é do tipo double e será armazenado na variável capital. O segundo é do tipo double e será armazenado na variável taxa. O terceiro é do tipo int e será armazenado na variável periodo. Agora, nas chamadas do método calculaJurosSimples, devemos passar os três parâmetros necessários para o cálculo do juros simples. No exemplo a seguir, o método main chama o método calculaJurosSimples duas vezes. Na primeira chamada, os valores passados como parâmetro são: 10000, 0.015 e 12. Na segunda chamada, os valores passados como parâmetro são: 25400, 0.02 e 30.

208

www.k19.com.br

209

F UNÇÕES OU M ÉTODOS

1 class Programa { 2 public static void main ( String [] args ) { 3 calculaJurosSimples (1 , . 15 , 12) ; 4 5 calculaJurosSimples (254 , . 2 , 3 ) ; 6 7 } 8 9 static void calculaJurosSimples ( double capital , double taxa , int periodo ) { 1 double juros = capital * taxa * periodo ; 11 } 12 }

Resposta
O valor calculado dentro do método calculaJurosSimples é armazenado em uma variável local. Essa variável não pode ser acessada dentro do método main. Em outras palavras, o método main não tem acesso ao juros que foi calculado dentro do método calculaJurosSimples. Todo método pode, ao final do seu processamento, devolver uma resposta para que o chamou. Nas linguagens Java e C#, a instrução return indica o valor de resposta de um método.
1 static double calculaJurosSimples ( double capital , double taxa , int periodo ) { 2 double juros = capital * taxa * periodo ; 3 return juros ; 4 }

Observe as duas modificações realizadas no método calculaJurosSimples. A primeira alteração é a retirada da palavra reservada void e a inserção da palavra reservada double em seu lugar. A palavra void indicava que o método não devolvia nenhuma resposta ao final do seu processamento. A palavra double indica que o método devolverá um valor do tipo double ao final do seu processamento. A segunda modificação é a utilização do comando return para devolver como resposta o valor do juros que é um valor do tipo double. Agora, a resposta pode ser recuperada no método main é armazenada em uma variável.
1 class Programa { 2 public static void main ( String [] args ) { 3 double resposta1 = calculaJurosSimples (1 , . 15 , 12) ; 4 5 double resposta2 = calculaJurosSimples (254 , . 2 , 3 ) ; 6 7 System . out . println ( " Juros : " + resposta1 ) ; 8 System . out . println ( " Juros : " + resposta2 ) ; 9 } 1 11 static double calculaJurosSimples ( double capital , double taxa , int periodo ) { 12 double juros = capital * taxa * periodo ; 13 return juros ; 14 } 15 }

Um método pode devolver outros tipos de valores. Para isso, basta modificar a marcação de retorno definindo o tipo de valor que o método devolverá. Veja alguns exemplos.
1 static int metodo () {

www.facebook.com/k19treinamentos

209

F UNÇÕES OU M ÉTODOS
2 // corpo de um método que devolve int 3 }

210

1 static char metodo () { 2 // corpo de um método que devolve char 3 }

1 static float metodo () { 2 // corpo de um método que devolve float 3 }

Exercícios de Fixação Com Java

Abra um terminal; Entre na pasta dos seus exercícios e crie uma pasta chamada funcoes-oumetodos para os arquivos desenvolvidos nesse capítulo.
1
K19 / rafael$ mkdir funcoes - ou - metodos K19 / rafael$ cd funcoes - ou - metodos K19 / rafael / funcoes - ou - metodos$

Terminal 7.2: Criando a pasta funcoes-ou-metodos no Linux

C :\ Users \ K19 \ rafael > md funcoes - ou - metodos C :\ Users \ K19 \ rafael > cd funcoes - ou - metodos C :\ Users \ K19 \ rafael \ funcoes - ou - metodos >

Terminal 7.3: Criando a pasta funcoes-ou-metodos no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-fixacao1.zip

Na pasta funcoes-ou-metodos, crie um arquivo chamado ConsumoDeCombustivel.java. Implemente um programa em Java definindo um método que realize o cálculo do consumo de combustível de um veículo.
2

1 class ConsumoDeCombustivel { 2 public static void main ( String [] args ) { 3 double reposta1 = calculaConsumoLitroKilometro (131.679 , 13.5) ; 4 double reposta2 = calculaConsumoLitroKilometro (251.856 , 21.6) ; 5 6 System . out . println ( " Consumo : " + reposta1 ) ; 7 System . out . println ( " Consumo : " + reposta2 ) ; 8 } 9 1 static double calculaConsumoLitroKilometro ( double distancia , double combustivel ) { 11 double consumo = distancia / combustivel ; 12 return consumo ; 13 } 14 }
Código Java 7.13: ConsumoDeCombustivel.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k
210

1-funcoes-ou-metodos-fixacao2.zip

www.k19.com.br

211
3

F UNÇÕES OU M ÉTODOS

Compile e execute a classe ConsumoDeCombustivel.
K19 / rafael / funcoes - ou - metodos$ javac ConsumoDeCombustivel . java K19 / rafael / funcoes - ou - metodos$ java ConsumoDeCombustivel Consumo : 9.754 Consumo : 11.659999999999998

Terminal 7.4: Compilando e executando a classe ConsumoDeCombustivel

Na pasta funcoes-ou-metodos, crie um arquivo chamado JurosComposto.java. Implemente um programa em Java definindo um método que realize o cálculo do montante obtido com a aplicação de juros compostos.
4

1 class JurosComposto { 2 public static void main ( String [] args ) { 3 double reposta1 = calculaJurosComposto (1 , .1 , 6) ; 4 double reposta2 = calculaJurosComposto (2 , . 5 , 6) ; 5 6 System . out . println ( " Montante : " + reposta1 ) ; 7 System . out . println ( " Montante : " + reposta2 ) ; 8 } 9 1 static double calculaJurosComposto ( double capital , double taxa , int periodo ) { 11 double montante = capital * Math . pow (1 + taxa , periodo ) ; 12 return montante ; 13 } 14 }
Código Java 7.14: JurosComposto.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-fixacao4.zip

5

Compile e execute a classe JurosComposto.
K19 / rafael / funcoes - ou - metodos$ javac JurosComposto . java K19 / rafael / funcoes - ou - metodos$ java JurosComposto Montante : 17715.61 8 Montante : 268 1.9128125 1

Terminal 7.5: Compilando e executando a classe JurosComposto

Na pasta funcoes-ou-metodos, crie um arquivo chamado IRPF.java. Implemente um programa em Java definindo um método que realize o cálculo do imposto de renda pessoa física.
6

1 class IRPF { 2 public static void main ( String [] args ) { 3 double reposta1 = calculaIRPF (135 .57) ; 4 double reposta2 = calculaIRPF (215 .37) ; 5 double reposta3 = calculaIRPF (3378.98) ; 6 double reposta4 = calculaIRPF (3956.12) ; 7 double reposta5 = calculaIRPF (62 .15) ; 8 9 System . out . println ( " IRPF 1: " + reposta1 ) ; 1 System . out . println ( " IRPF 2: " + reposta2 ) ; 11 System . out . println ( " IRPF 3: " + reposta3 ) ; 12 System . out . println ( " IRPF 4: " + reposta4 ) ; 13 System . out . println ( " IRPF 5: " + reposta5 ) ; 14 } 15

www.facebook.com/k19treinamentos

211

F UNÇÕES OU M ÉTODOS
16 static double calculaIRPF ( double renda ) { 17 if ( renda JurosComposto . exe Montante : 17715.61 Montante : 268 1.9128125

Terminal 7.15: Compilando e executando a classe JurosComposto

218

www.k19.com.br

219
18

F UNÇÕES OU M ÉTODOS

Na pasta funcoes-ou-metodos, crie um arquivo chamado IRPF.cs. Implemente um programa em Java definindo um método que realize o cálculo do imposto de renda pessoa física.
1 class IRPF 2 { 3 static void Main () 4 { 5 double reposta1 = calculaIRPF (135 .57) ; 6 double reposta2 = calculaIRPF (215 .37) ; 7 double reposta3 = calculaIRPF (3378.98) ; 8 double reposta4 = calculaIRPF (3956.12) ; 9 double reposta5 = calculaIRPF (62 .15) ; 1 11 System . Console . WriteLine ( " IRPF 1: " + reposta1 ) ; 12 System . Console . WriteLine ( " IRPF 2: " + reposta2 ) ; 13 System . Console . WriteLine ( " IRPF 3: " + reposta3 ) ; 14 System . Console . WriteLine ( " IRPF 4: " + reposta4 ) ; 15 System . Console . WriteLine ( " IRPF 5: " + reposta5 ) ; 16 } 17 18 static double calculaIRPF ( double renda ) 19 { 2 if ( renda IMC . exe Amanda IMC : 2 .2924269896995 - Peso normal Joyce IMC : 21.3994699576757 - Peso normal

Terminal 7.17: Compilando e executando a classe IMC

220

www.k19.com.br

221
22

F UNÇÕES OU M ÉTODOS

Na pasta funcoes-ou-metodos, crie um arquivo chamado Arrays.cs. Implemente um programa em Java definindo um método que preencha um array com números inteiros aleatórios no intervalo de 0 a 99 e outro que exiba no terminal os valores armazenados em um array.
1 class Arrays 2 { 3 static void Main () 4 { 5 int [] array1 = new int [5]; 6 int [] array2 = new int [1 ]; 7 8 preencheArray ( array1 ) ; 9 preencheArray ( array2 ) ; 1 11 exibeArray ( array1 ) ; 12 exibeArray ( array2 ) ; 13 } 14 15 static void preencheArray ( int [] array ) 16 { 17 System . Random gerador = new System . Random () ; 18 for ( int i = ; i < array . Length ; i ++) 19 { 2 array [ i ] = ( int ) ( gerador . NextDouble () * 1 ) ; 21 } 22 } 23 24 static void exibeArray ( int [] array ) 25 { 26 System . Console . WriteLine ( " Array : " ) ; 27 for ( int i = ; i < array . Length ; i ++) 28 { 29 System . Console . WriteLine ( " array [ " + i + " ] = " + array [ i ]) ; 3 } 31 System . Console . WriteLine ( " ------------------------------------" ) ; 32 } 33 }
Código C# 7.7: Arrays.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-fixacao22.zip

23

Compile e execute a classe Arrays.
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc Arrays . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > Arrays . exe Array : array [ ] = 8 array [1] = 74 array [2] = 26 array [3] = 3 array [4] = 8 -----------------------------------Array : array [ ] = 92 array [1] = 63 array [2] = 79 array [3] = 88 array [4] = 19 array [5] = 44 array [6] = 4 array [7] = 36 array [8] = 85 array [9] = 23 ------------------------------------

Terminal 7.18: Compilando e executando a classe Arrays

www.facebook.com/k19treinamentos

221

F UNÇÕES OU M ÉTODOS
24

222

Acrescente um método na classe Arrays para contar a quantidade números pares de um array.

1 class Arrays 2 { 3 static void Main () 4 { 5 int [] array1 = new int [5]; 6 int [] array2 = new int [1 ]; 7 8 preencheArray ( array1 ) ; 9 preencheArray ( array2 ) ; 1 11 exibeArray ( array1 ) ; 12 exibeArray ( array2 ) ; 13 14 int pares1 = contaPar ( array1 ) ; 15 int pares2 = contaPar ( array2 ) ; 16 17 System . Console . WriteLine ( " Quantidade de pares do primeiro array : " + pares1 ) ; 18 System . Console . WriteLine ( " Quantidade de pares do segundo array : " + pares2 ) ; 19 } 2 21 static int contaPar ( int [] array ) 22 { 23 int pares = ; 24 for ( int i = ; i < array . Length ; i ++) 25 { 26 if ( array [ i ] % 2 == ) 27 { 28 pares ++; 29 } 3 } 31 return pares ; 32 } 33 34 static void preencheArray ( int [] array ) 35 { 36 System . Random gerador = new System . Random () ; 37 for ( int i = ; i < array . Length ; i ++) 38 { 39 array [ i ] = ( int ) ( gerador . NextDouble () * 1 ) ; 4 } 41 } 42 43 static void exibeArray ( int [] array ) 44 { 45 System . Console . WriteLine ( " Array : " ) ; 46 for ( int i = ; i < array . Length ; i ++) 47 { 48 System . Console . WriteLine ( " array [ " + i + " ] = " + array [ i ]) ; 49 } 5 System . Console . WriteLine ( " ------------------------------------" ) ; 51 } 52 }
Código C# 7.8: ArraysPreencheContaPar.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-fixacao24.zip

25

Compile e execute a classe Arrays.
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc Arrays . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > Arrays . exe Array : array [ ] = 95 array [1] = 16 array [2] = 65

222

www.k19.com.br

223 array [3] = 2 array [4] = 2 -----------------------------------Array : array [ ] = 9 array [1] = 13 array [2] = 32 array [3] = 16 array [4] = 54 array [5] = 56 array [6] = 53 array [7] = 66 array [8] = 13 array [9] = 8 -----------------------------------Quantidade de pares do primeiro array : 3 Quantidade de pares do segundo array : 6

F UNÇÕES OU M ÉTODOS

Terminal 7.19: Compilando e executando a classe Arrays

Exercícios Complementares

1 Implemente um método que determina se um ano é ou não é bissexto. As regras para determinar se um ano é bissexto são:

1. Anos múltiplos de 4 são bissextos. 2. Anos múltiplos de 100 não são bissextos. 3. Anos múltiplos de 400 são bissextos. 4. As últimas regras prevalecem sobre as primeiras. Complete o código a seguir.
1 class AnoBissexto { 2 public static void main ( String [] args ) { 3 boolean b = bissexto (2 ); 4 System . out . println ( " 2 " + b); 5 6 b = bissexto (2 12) ; 7 System . out . println ( " 2 12 " + b ) ; 8 9 b = bissexto (2 25) ; 1 System . out . println ( " 2 25 " + b ) ; 11 12 b = bissexto (21 ) ; 13 System . out . println ( " 21 " + b); 14 } 15 16 }
Código Java 7.21: AnoBissexto.java

2 Implemente um método que verifica se uma determinada data é válida ou não. Lembre-se que Janeiro, Março, Maio, Julho, Agosto, Outubro e Dezembro possuem 31 dias; Abril, Junho, Setembro e Novembro possuem 30 dias; e Fevereiro possui 28 dias em anos não bissextos e 29 dias em anos bissextos. Complete o código a seguir.

www.facebook.com/k19treinamentos

223

F UNÇÕES OU M ÉTODOS
1 class VerificaDatas { 2 public static void main ( String [] args ) { 3 boolean b = verificaData (29 , 2 , 2 ); 4 5 System . out . println ( " 29/ 2/2 - " + b); 6 7 b = verificaData (29 , 2 , 2 4) ; 8 9 System . out . println ( " 29/ 2/2 4 - " + b ) ; 1 11 b = verificaData (31 , 4 , 2 ); 12 13 System . out . println ( " 31/ 4/2 - " + b); 14 } 15 16 static boolean bissexto ( int ano ) { 17 return ano % 4 == || ( ano % 1 != && ano % 4 == 18 } 19 2 21 }
Código Java 7.23: VerificaDatas.java

224

);

3 A Páscoa é um evento religioso que ocorre todo ano e pode cair em uma data entre 22 de Março e 25 de Abril. O astrônomo Jean Baptiste Joseph Delambre desenvolveu um algoritmo para calcular a data da Páscoa para qualquer ano após 1583. Veja as operações necessárias para realizar esse cálculo.

1 2 3 4 5 6 7 8 9 1 11 12 13 14 15

a b c d e f g h i k l m

= = = = = = = = = = = =

ano MOD 19 ano / 1 ano MOD 1 b / 4 b MOD 4 ( b + 8) / 25 ( b - f + 1) / 3 (19 * a + b -d - g + 15) MOD 3 c / 4 c MOD 4 (32 + 2 * e + 2 * i - h - k ) MOD 7 ( a + 11 * h + 22 * l ) / 451

mes = ( h + 1 - 7 * m + 114) / 31 dia (( h + 1 - 7 * m + 114) MOD 31) + 1

Implemente um método que determina a data da Páscoa de um determinado ano posterior a 1583. Complete o código a seguir.
1 class Pascoa { 2 public static void main ( String [] 3 String s = pascoa (2 ); 4 System . out . println ( " Páscoa " + 5 6 s = pascoa (2 12) ; 7 System . out . println ( " Páscoa " + 8 9 s = pascoa (2 25) ; 1 System . out . println ( " Páscoa " + 11 12 s = pascoa (21 ) ; 13 System . out . println ( " Páscoa " + 14 } 15 16 } args ) { s);

s);

s);

s);

224

www.k19.com.br

225

F UNÇÕES OU M ÉTODOS

Código Java 7.26: Pascoa.java

4 Implemente um método que determina a partir de uma data (dia, mês e ano) qual será o dia da semana (domingo, segunda, terça, quarta, quinta, sexta e sábado). Há diversos algoritmos para resolver esse problema. Claus Tondering descreve em http://www.faqs.org/faqs/calendars/faq/ part1/ uma forma bem simples de solucionar esse problema. A solução utiliza operações matemáticas básicas.

1 2 3 4 5

a y m q d

= = = = =

(14 ano mes + dia + q MOD

mes ) / 12; a; 12 * a - 2; 31 * m / 12 + y + y / 4 - y / 1 7;

+ y / 4

;

O valor d indica o dia da semana de acordo com a seguinte correspondência. d 0 1 2 3 4 5 6 dia da semana Domingo Segunda Terça Quarta Quinta Sexta Sábado

Complete o código a seguir.
1 class DiaDaSemana { 2 public static void main ( String [] args ) 3 int d1 = diaDaSemana (3 , 1 , 1984) ; 4 5 int d2 = diaDaSemana (2 , 4 , 1985) ; 6 7 int d3 = diaDaSemana (12 , 12 , 1982) ; 8 9 String [] dias = { 1 " domingo " , 11 " segunda " , 12 " terça " , 13 " quarta " , 14 " quinta " , 15 " sexta " , 16 " sábado " 17 }; 18 19 System . out . println ( " 3 /1 /1984 foi " 2 21 System . out . println ( " 2/4/1985 foi " + 22 23 System . out . println ( " 12/12/1982 foi " 24 } 25 26 } {

+ dias [ d1 ]) ; dias [ d2 ]) ; + dias [ d3 ]) ;

Código Java 7.29: DiaDaSemana.java

www.facebook.com/k19treinamentos

225

F UNÇÕES OU M ÉTODOS
5

226

Implemente um método que dado um mês e um ano exiba no terminal o calendário de forma semelhante ao exemplo a seguir.
Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31

Complete o código a seguir.
1 class ExibeCalendario { 2 public static void main ( String [] args ) { 3 4 exibeCalendario (1 , 1984) ; 5 6 exibeCalendario (4 , 1985) ; 7 8 exibeCalendario (12 , 1982) ; 9 1 exibeCalendario (2 , 2 ); 11 12 } 13 14 static boolean bissexto ( int ano ) { 15 return ano % 4 == || ( ano % 1 != && ano % 4 == ) ; 16 } 17 18 static int diaDaSemana ( int dia , int mes , int ano ) { 19 int a = (14 - mes ) / 12; 2 int y = ano - a ; 21 int m = mes + 12 * a - 2; 22 int q = dia + 31 * m / 12 + y + y / 4 - y / 1 + y / 4 ; 23 int d = q % 7; 24 25 return d ; 26 } 27 28 }
Código Java 7.31: ExibeCalendario.java

Implemente um método que determina se um ano é ou não é bissexto. As regras para determinar se um ano é bissexto são:
6

1. Anos múltiplos de 4 são bissextos. 2. Anos múltiplos de 100 não são bissextos. 3. Anos múltiplos de 400 são bissextos. 4. As últimas regras prevalecem sobre as primeiras.

Complete o código a seguir.
1 class AnoBissexto 2 { 3 static void Main () 4 { 5 bool b = bissexto (2

);

226

www.k19.com.br

227
6 7 8 9 1 11 12 13 14 15 16 } 17 18 } System . Console . WriteLine ( " 2 " + b);

F UNÇÕES OU M ÉTODOS

b = bissexto (2 12) ; System . Console . WriteLine ( " 2 12 " + b ) ; b = bissexto (2 25) ; System . Console . WriteLine ( " 2 25 " + b ) ; b = bissexto (21 ) ; System . Console . WriteLine ( " 21

" + b);

Código C# 7.9: AnoBissexto.cs

Implemente um método que verifica se uma determinada data é válida ou não. Lembre-se que Janeiro, Março, Maio, Julho, Agosto, Outubro e Dezembro possuem 31 dias; Abril, Junho, Setembro e Novembro possuem 30 dias; e Fevereiro possui 28 dias em anos não bissextos e 29 dias em anos bissextos. Complete o código a seguir.
7

1 class VerificaDatas 2 { 3 static void Main () 4 { 5 bool b = verificaData (29 , 2 , 2 ); 6 7 System . Console . WriteLine ( " 29/ 2/2 - " + b); 8 9 b = verificaData (29 , 2 , 2 4) ; 1 11 System . Console . WriteLine ( " 29/ 2/2 4 - " + b ) ; 12 13 b = verificaData (31 , 4 , 2 ); 14 15 System . Console . WriteLine ( " 31/ 4/2 - " + b); 16 } 17 18 static bool bissexto ( int ano ) 19 { 2 return ano % 4 == || ( ano % 1 != && ano % 4 == 21 } 22 23 24 }
Código C# 7.11: VerificaDatas.cs

);

A Páscoa é um evento religioso que ocorre todo ano e pode cair em uma data entre 22 de Março e 25 de Abril. O astrônomo Jean Baptiste Joseph Delambre desenvolveu um algoritmo para calcular a data da Páscoa para qualquer ano após 1583. Veja as operações necessárias para realizar esse cálculo.
8

1 2 3 4 5 6 7 8 9 1

a b c d e f g h i k

= = = = = = = = = =

ano MOD 19 ano / 1 ano MOD 1 b / 4 b MOD 4 ( b + 8) / 25 ( b - f + 1) / 3 (19 * a + b -d - g + 15) MOD 3 c / 4 c MOD 4

www.facebook.com/k19treinamentos

227

F UNÇÕES OU M ÉTODOS
11 12 13 14 15 l = (32 + 2 * e + 2 * i - h - k ) MOD 7 m = ( a + 11 * h + 22 * l ) / 451 mes = ( h + 1 - 7 * m + 114) / 31 dia (( h + 1 - 7 * m + 114) MOD 31) + 1

228

Implemente um método que determina a data da Páscoa de um determinado ano posterior a 1583. Complete o código a seguir.
1 class Pascoa 2 { 3 static void Main () 4 { 5 String s = pascoa (2 ); 6 System . Console . WriteLine ( " Páscoa 7 8 s = pascoa (2 12) ; 9 System . Console . WriteLine ( " Páscoa 1 11 s = pascoa (2 25) ; 12 System . Console . WriteLine ( " Páscoa 13 14 s = pascoa (21 ) ; 15 System . Console . WriteLine ( " Páscoa 16 } 17 18 }

" + s);

" + s);

" + s);

" + s);

Código C# 7.14: Pascoa.cs

Implemente um método que determina a partir de uma data (dia, mês e ano) qual será o dia da semana (domingo, segunda, terça, quarta, quinta, sexta e sábado). Há diversos algoritmos para resolver esse problema. Claus Tondering descreve em http://www.faqs.org/faqs/calendars/faq/ part1/ uma forma bem simples de solucionar esse problema. A solução utiliza operações matemáticas básicas.
9

1 2 3 4 5

a y m q d

= = = = =

(14 ano mes + dia + q MOD

mes ) / 12; a; 12 * a - 2; 31 * m / 12 + y + y / 4 - y / 1 7;

+ y / 4

;

O valor d indica o dia da semana de acordo com a seguinte correspondência. d 0 1 2 3 4 5 6 dia da semana Domingo Segunda Terça Quarta Quinta Sexta Sábado

Complete o código a seguir.
1 class DiaDaSemana 2 {

228

www.k19.com.br

229
3 static void Main () 4 { 5 int d1 = diaDaSemana (3 , 1 , 1984) ; 6 7 int d2 = diaDaSemana (2 , 4 , 1985) ; 8 9 int d3 = diaDaSemana (12 , 12 , 1982) ; 1 11 String [] dias = 12 { 13 " domingo " , 14 " segunda " , 15 " terça " , 16 " quarta " , 17 " quinta " , 18 " sexta " , 19 " sábado " 2 }; 21 22 System . Console . WriteLine ( " 3 /1 /1984 foi " + dias [ d1 ]) ; 23 24 System . Console . WriteLine ( " 2/4/1985 foi " + dias [ d2 ]) ; 25 26 System . Console . WriteLine ( " 12/12/1982 foi " + dias [ d3 ]) ; 27 } 28 29 }
Código C# 7.17: DiaDaSemana.cs

F UNÇÕES OU M ÉTODOS

Implemente um método que dado um mês e um ano exiba no terminal o calendário de forma semelhante ao exemplo a seguir.
10
Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31

Complete o código a seguir.
1 class ExibeCalendario 2 { 3 static void Main () 4 { 5 6 exibeCalendario (1 , 1984) ; 7 8 exibeCalendario (4 , 1985) ; 9 1 exibeCalendario (12 , 1982) ; 11 12 exibeCalendario (2 , 2 ); 13 14 } 15 16 static bool bissexto ( int ano ) 17 { 18 return ano % 4 == || ( ano % 1 != && ano % 4 == 19 } 2 21 static int diaDaSemana ( int dia , int mes , int ano ) 22 { 23 int a = (14 - mes ) / 12; 24 int y = ano - a ;

);

www.facebook.com/k19treinamentos

229

F UNÇÕES OU M ÉTODOS
25 26 27 28 29 3 } 31 32 } int m = mes + 12 * a - 2; int q = dia + 31 * m / 12 + y + y / 4 - y / 1 int d = q % 7; return d ;

230

+ y / 4

;

Código C# 7.19: ExibeCalendario.cs

Resumo do Capítulo

Para evitar a repetição de um determinado trecho de código, podemos criar uma função ou um método.

1

2

Em Java ou C#, a palavra reservada void é utilizada em métodos que não devolvem resposta.

3

Devemos definir um tipo de retorno para criar funções ou métodos que devolvem respostas.

Em Java ou C#, a palavra reservada return é utilizada, no corpo dos métodos, para devolver uma resposta.

4

5

Uma função ou um método pode ter 0 ou mais parâmetros.

6

Um parâmetro é uma variável local de uma função ou de um método.

Prova

1

Qual alternativa está correta? a) Uma função pode ter vários tipos de retorno. b) Obrigatoriamente, os métodos precisam ter parâmetros. c) Um método definido com void não devolve resposta. d) Em linguagens orientadas a objetos, utilizamos o termo função e não o termo método. e) A palavra return é utilizada para guardar a resposta de uma função.

2

Considere o seguinte método. www.k19.com.br 230

231
1 static void teste () { 2 int a = 1; 3 }

F UNÇÕES OU M ÉTODOS

Qual alternativa está correta?

a) O método teste não devolve resposta. b) O método teste sempre devolve o valor 1. c) O método teste recebe um valor do tipo int como parâmetro. d) O método teste não compila pois faltou o comando return. e) O método teste devolve valores do tipo int.

3

Considere o seguinte método.

1 static double teste ( int a , double b ) { 2 return a + b ; 3 }

Qual chamada a esse método está correta?
1 // I 2 int a = teste (1. , 1. ) ;

1 // II 2 double a = teste (1. , 1. ) ;

1 // III 2 int a = teste (1 , 1. ) ;

1 // IV 2 double a = teste (1. , 1) ;

1 // V 2 double a = teste (1 , 1) ;

a) I b) II c) III d) IV e) V

www.facebook.com/k19treinamentos

231

F UNÇÕES OU M ÉTODOS
4

232

Considere o seguinte método.

1 static int teste ( int a , int b ) { 2 return a + b ; 3 }

Quais chamadas a esse método estão corretas?
1 // I 2 int a = teste (1. , 1. ) ;

1 // II 2 double a = teste (1 , 1) ;

1 // III 2 int a = teste (1 , 1) ;

1 // IV 2 int a = teste (1) ;

1 // V 2 int a = teste (1; 1) ;

a) Todas b) I, II e III c) II e IV d) II e III e) Nenhuma

5

Considere o seguinte método.

1 static double teste ( int a , int b ) { 2 return a + b ; 3 }

Qual alternativa está correta?

a) O método teste não devolve resposta. b) O método teste não compila pois métodos que devolvem double não podem devolver valores do tipo int. c) O método teste não compila pois métodos não podem receber dois parâmetros. d) O método teste não compila pois ele deveria ser void. e) O método teste não possui nenhum problema.
232
www.k19.com.br

233
6

F UNÇÕES OU M ÉTODOS

Considere o seguinte método em Java.

1 static String teste ( int a , int b ) { 2 return a + b ; 3 }

Qual alternativa está correta?

a) O método teste não devolve resposta. b) O método teste não compila pois métodos que devolvem String não podem devolver valores do tipo int. c) O método teste não compila pois ele deveria receber duas strings como parâmetro. d) O método teste compilaria com uma operação de casting. e) O método teste não possui nenhum problema.

Minha Pontuação

Pontuação Mínima:

4

Pontuação Máxima:

6

www.facebook.com/k19treinamentos

233

F UNÇÕES OU M ÉTODOS

234

234

www.k19.com.br

APÊNDICE

P ROBLEMAS

A

Para exercitar todo o conteúdo desse treinamento, resolveremos alguns problemas desenvolvendo programas de computador.

Encontrar o maior ou o menor elemento de um array
Considere um array que armazena os preços dos produtos de uma loja. A nossa tarefa é desenvolver um método que encontre a posição do maior elemento desse array e outro método para encontrar a posição do menor. Vamos considerar apenas arrays com pelo menos um elemento. Vamos começar definido o esqueleto desses métodos. Podemos focar apenas no método que encontra o maior elemento de um array pois o outro método será praticamente igual. Esse método deve receber como parâmetro um array de números e deve devolver como resposta a posição do maior número armazenado nesse array.
1 public static int maior ( double [] array ) { 2 3 }

Na nossa estratégia para encontrar o maior elemento de um array de números, o ponto de partida é assumir que o primeiro elemento do array é o maior. Observe no código a seguir que a variável posicaoDoMaior é inicializada com o valor 0. Esse valor indica justamente que estamos assumindo que o primeiro elemento do array é o maior.
1 public static int maior ( double [] array ) { 2 int posicaoDoMaior = ; 3 }

Depois, devemos comparar o elemento que assumimos ser o maior com os outros valores armazenados no array. Observe que o laço, no código abaixo, inicia na posição 1, ou seja, na segunda posição do array e vai até a última posição. A cada iteração, o elemento que supostamente é o maior elemento do array é comparado com um dos outros valores do array.
1 public static int maior ( double [] array ) { 2 int posicaoDoMaior = ; 3 4 for ( int i = 1; i < array . length ; i ++) { 5 if ( array [ posicaoDoMaior ] < array [ i ]) { 6 } 7 } 8 }

Durante o laço, se um valor superior ao valor que consideramos ser o maior for encontrado assumiremos esse novo valor como sendo o maior e descartaremos o anterior. Observe a atualização da www.facebook.com/k19treinamentos 235

P ROBLEMAS

236

variável posicaoDoMaior quando um valor “melhor” é encontrado.
1 public static int maior ( double [] array ) { 2 int posicaoDoMaior = ; 3 4 for ( int i = 1; i < array . length ; i ++) { 5 if ( array [ posicaoDoMaior ] < array [ i ]) { 6 posicaoDoMaior = i ; 7 } 8 } 9 }

Ao final do laço, todos os valores foram comparados e a variável posicaoDoMaior armazena a posição do maior elemento do array. Então, basta devolver como resposta esse valor.
1 public static int maior ( double [] array ) { 2 int posicaoDoMaior = ; 3 4 for ( int i = 1; i < array . length ; i ++) { 5 if ( array [ posicaoDoMaior ] < array [ i ]) { 6 posicaoDoMaior = i ; 7 } 8 } 9 return posicaoDoMaior ; 1 }

Para encontrar o menor elemento, basta inverter a comparação realizada na condição da instrução if.

Exercícios de Fixação Com Java

Abra um terminal; Entre na pasta dos seus exercícios e crie uma pasta chamada problemas para os arquivos desenvolvidos nesse capítulo.
1
K19 / rafael$ mkdir problemas K19 / rafael$ cd problemas K19 / rafael / problemas$

Terminal A.1: Criando a pasta problemas no Linux

C :\ Users \ K19 \ rafael > md problemas C :\ Users \ K19 \ rafael > cd problemas C :\ Users \ K19 \ rafael \ problemas >

Terminal A.2: Criando a pasta problemas no Windows

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao1.zip

2

Na pasta problemas, crie um arquivo chamado AchaMaiorOuMenor.java.

1 class AchaMaiorOuMenor { 2 public static void main ( String [] args ) { 3 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9};

236

www.k19.com.br

237
4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 }

P ROBLEMAS

int posicaoDoMaior = maior ( array ) ; System . out . println ( " O maior valor do array é : " + array [ posicaoDoMaior ]) ; System . out . println ( " Esse valor está na posição : " + posicaoDoMaior ) ; int posicaoDoMenor = menor ( array ) ; System . out . println ( " O menor valor do array é : " + array [ posicaoDoMenor ]) ; System . out . println ( " Esse valor está na posição : " + posicaoDoMenor ) ; } public static int maior ( double [] array ) { int posicaoDoMaior = ; for ( int i = 1; i < array . length ; i ++) { if ( array [ posicaoDoMaior ] < array [ i ]) { posicaoDoMaior = i ; } } return posicaoDoMaior ; } public static int menor ( double [] array ) { int posicaoDoMenor = ; for ( int i = 1; i < array . length ; i ++) { if ( array [ posicaoDoMenor ] > array [ i ]) { posicaoDoMenor = i ; } } return posicaoDoMenor ; }

Código Java A.6: AchaMaiorOuMenor.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao2.zip

3

Compile e execute a classe AchaMaiorOuMenor.
K19 / rafael / problemas$ javac AchaMaiorOuMenor . java K19 / rafael / problemas$ java AchaMaiorOuMenor O maior valor do array é : 1 1.1 Esse valor está na posição : 2 O menor valor do array é : -1 .7 Esse valor está na posição :

Terminal A.3: Compilando e executando a classe AchaMaiorOuMenor

Calcular a soma dos elementos de um array
Considere um array que armazena a quantidade de pontos que uma equipe de basquete efetuou nos jogos de um campeonato. A primeira posição do array armazena a quantidade de pontos efetuados no primeiro jogo. A segunda posição armazena a quantidade de pontos efetuados no segundo jogo. E assim por diante. A nossa tarefa é calcular quantos pontos essa equipe fez no campeonato todo. Então, vamos implementar um método que calcule a soma dos elementos de um array. Esse método pode receber como parâmetro os elementos que devem ser somados e devolver como resposta www.facebook.com/k19treinamentos 237

P ROBLEMAS

238

a soma propriamente.
1 public static double soma ( double [] array ) { 2 3 }

A ideia é somar um elemento de cada vez. O primeiro passo da nossa estratégia é declarar uma variável para acumular os valores armazenados no array. Essa variável deve ser inicializada com o número 0 para não interferir no resultado final.
1 public static double soma ( double [] array ) { 2 double soma = ; 3 }

Na sequência, os elementos serão adicionados na variável soma um a um.
1 public static double soma ( double [] array ) { 2 double soma = ; 3 4 for ( int i = ; i < array . length ; i ++) { 5 soma += array [ i ]; 6 } 7 }

Ao final do laço, a valor da variável soma é justamente a somatória dos valores contidos no array. Então, para finalizar, basta devolver esse valor.
1 public static double soma ( double [] array ) { 2 double soma = ; 3 4 for ( int i = ; i < array . length ; i ++) { 5 soma += array [ i ]; 6 } 7 8 return soma ; 9 }

Exercícios de Fixação Com Java

4

Na pasta problemas, crie um arquivo chamado Soma.java.

1 class Soma { 2 public static void main ( String [] args ) { 3 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9}; 4 5 double soma = soma ( array ) ; 6 7 System . out . println ( " A soma dos elementos do array é : " + soma ) ; 8 } 9 1 public static double soma ( double [] array ) { 11 double soma = ; 12 13 for ( int i = ; i < array . length ; i ++) { 14 soma += array [ i ]; 15 } 16

238

www.k19.com.br

239
17 return soma ; 18 } 19 }
Código Java A.11: Soma.java

P ROBLEMAS

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao4.zip

5

Compile e execute a classe Soma.
K19 / rafael / problemas$ javac Soma . java K19 / rafael / problemas$ java Soma A soma dos elementos do array é : 151.29999999999998

Terminal A.4: Compilando e executando a classe Soma

Calcular a média dos elementos de um array
Considere um array que armazena a quantidade de pontos que uma equipe de basquete efetuou nos jogos de um campeonato. A primeira posição do array armazena a quantidade de pontos efetuados no primeiro jogo. A segunda posição armazena a quantidade de pontos efetuados no segundo jogo. E assim por diante. A nossa tarefa é calcular quantos pontos em média essa equipe efetua por partida. O cálculo da média pode ser realizado em duas etapas. Na primeira, somamos os valores armazenados no array. Na segunda, dividimos essa soma pela quantidade de elementos do array. A soma pode ser realizada com o método criado anteriormente. O método que efetuará o cálculo da média deverá receber como parâmetro o array com os valores que devem ser considerados nesse cálculo.
1 public static double media ( double [] array ) { 2 3 }

O método media pode chamar o método soma para obter a somatória dos elementos do array.
1 public static double media ( double [] array ) { 2 double soma = soma ( array ) ; 3 }

Com o valor da somatória armazenado na variável soma, a média é obtida com uma divisão.
1 public static double media ( double [] array ) { 2 double soma = soma ( array ) ; 3 double media = soma / array . length ; 4 }

Por fim, basta devolver o valor armazenado na variável media.
1 public static double media ( double [] array ) { 2 double soma = soma ( array ) ; 3 double media = soma / array . length ;

www.facebook.com/k19treinamentos

239

P ROBLEMAS
4 return media ; 5 }

240

Exercícios de Fixação Com Java

6

Na pasta problemas, crie um arquivo chamado Media.java.

1 class Media { 2 public static void main ( String [] args ) { 3 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9}; 4 5 double media = media ( array ) ; 6 7 System . out . println ( " A média dos elementos do array é : " + media ) ; 8 } 9 1 public static double media ( double [] array ) { 11 double soma = soma ( array ) ; 12 double media = soma / array . length ; 13 return media ; 14 } 15 16 public static double soma ( double [] array ) { 17 double soma = ; 18 19 for ( int i = ; i < array . length ; i ++) { 2 soma += array [ i ]; 21 } 22 23 return soma ; 24 } 25 }
Código Java A.16: Media.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao6.zip

7

Compile e execute a classe Media.
K19 / rafael / problemas$ javac Media . java K19 / rafael / problemas$ java Media A média dos elementos do array é : 3 .259999999999998

Terminal A.5: Compilando e executando a classe Media

Trocar as posições de dois elementos de um array
Considere a distribuição das vagas da garagem de um condomínio. Essas vagas foram numeradas de 1 a 100 e cada vaga está associada ao número do apartamento que a utilizará. Podemos utilizar um array de números inteiros para armazenar essas associações. Vamos assumir que a posição 0 desse array corresponde à vaga número 1, a posição 1 à vaga número 2 e assim por diante. O número do apartamento que utilizará uma determinada vaga deve ser armazenado na
240
www.k19.com.br

241

P ROBLEMAS

posição correspondente a essa vaga. Por exemplo, considere o array {12, 34, 11, 22}. De acordo com as informações contidas nesse array, podemos deduzir que a vaga 1 pertence ao apartamento 12, a vaga 2 ao apartamento 34, a vaga 3 ao apartamento 11 e a vaga 4 ao apartamento 22. De acordo com o interesse dos moradores, as vagas podem ser trocadas entre os apartamentos. implemente um método que realize a troca dos valores contidos em duas posições de um array. Vamos começar definindo o esqueleto do método que realizará essas trocas. Podemos definir três parâmetros para esse método. O primeiro é o array que contém os elementos que serão trocados. O segundo é a posição de um dos dois elementos que serão trocados e o terceiro é a posição do outro elemento.
1 public static void troca ( int [] array , int i , int j ) { 2 3 }

Basicamente, o elemento da posição j deve ser armazenado na posição i e vice versa. Considere o seguinte código.
1 public static void troca ( int [] array , int i , int j ) { 2 array [ i ] = array [ j ]; 3 }

Na atribuição em destaque, guardamos o elemento da posição j na posição i. Nessa operação, perderemos o valor antigo da posição i. Dessa forma, não poderemos guardá-lo na posição j. Para solucionar esse problema, basta armazenar esse elemento em uma variável auxiliar antes dessa atribuição.
1 public static void troca ( int [] array , int i , int j ) { 2 int auxiliar = array [ i ]; 3 array [ i ] = array [ j ]; 4 }

Agora, o valor da posição i é armazenado na variável auxiliar. Depois, o valor da posição j é armazenado na posição i. Por fim, devemos armazenar o valor da variável auxiliar (antigo valor da posição i) na posição j.
1 public static void troca ( int [] array , int i , int j ) { 2 int auxiliar = array [ i ]; 3 array [ i ] = array [ j ]; 4 array [ j ] = auxiliar ; 5 }

Exercícios de Fixação Com Java

8

Na pasta problemas, crie um arquivo chamado Troca.java.

1 class Troca { 2 public static void main ( String [] args ) { 3 System . out . println ( " Original " ) ;

www.facebook.com/k19treinamentos

241

P ROBLEMAS
4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 } int [] array = { -1 , 37 , 1 1 , 28 , -4}; exibeArray ( array ) ; System . out . println ( " \ nTroca troca ( array , , 2) ; exibeArray ( array ) ; e 2");

242

System . out . println ( " \ nTroca 1 e 3 " ) ; troca ( array , 1 , 3) ; exibeArray ( array ) ; } public static void troca ( int [] array , int i , int j ) { int auxiliar = array [ i ]; array [ i ] = array [ j ]; array [ j ] = auxiliar ; } public static void exibeArray ( int [] array ) { System . out . print ( " { " ) ; for ( int i = ; i < array . length - 1; i ++) { System . out . print ( array [ i ] + " , " ) ; } System . out . println ( array [ array . length - 1] + " } " ) ; }

Código Java A.21: Troca.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao8.zip

9

Compile e execute a classe Troca.
K19 / rafael / problemas$ javac Troca . java K19 / rafael / problemas$ java Troca Original { -1 , 37 , 1 1 , 28 , -4} Troca e 2 {1 1 , 37 , -1 , 28 , -4} Troca 1 e 3 {1 1 , 28 , -1 , 37 , -4}

Terminal A.6: Compilando e executando a classe Troca

Escolher aleatoriamente um número inteiro dentro de um intervalo
Considere o sorteio de um premio entre os participantes de uma determinada palestra. Os números de 100 a 300 foram distribuídos a esses participantes na entrada da palestra. Implemente um método que escolha aleatoriamente um número inteiro dentro de um determinado intervalo. Novamente, vamos começar definindo o esqueleto do método desejado. Os parâmetros definem o intervalo que deve ser considerado na escolha aleatória. O primeiro define o início do intervalo e o segundo o término. Vamos considerar que o primeiro parâmetro é menor do que o segundo. Além disso, a resposta desse método será número sorteado.
1 public static int aleatorio ( int i , int j ) {

242

www.k19.com.br

243
2 }

P ROBLEMAS

O trecho de código “Math.random()” gera um número do tipo double maior ou igual a 0 e menor do que 1. Podemos utilizá-lo como base para gerar um número inteiro em um determinado intervalo. A quantidade de elementos no intervalo [i, j] é j - i + 1. Multiplicando esse valor pelo número gerado com o “Math.random()”, obteremos um número do tipo double maior ou igual a 0 e menor do que j - i + 1.
1 public static int aleatorio ( int i , int j ) { 2 double a = Math . random () * ( j - i + 1) ; 3 }

Como o objetivo é o obter um número inteiro, podemos realizar uma operação de casting. Com isso teremos um número inteiro maior ou igual a 0 e menor do que j - i + 1.
1 public static int aleatorio ( int i , int j ) { 2 double a = Math . random () * ( j - i + 1) ; 3 int b = ( int ) a ; 4 }

Na sequência, podemos realizar uma operação de soma para ajustar o número obtido aos limites do intervalo desejado.
1 public static int aleatorio ( int i , int j ) { 2 double a = Math . random () * ( j - i + 1) ; 3 int b = ( int ) a ; 4 int c = b + i ; 5 }

Com a soma em destaque, obteremos um número inteiro maior ou igual a i (0 + i) e menor do que j + 1 (j - i + 1 + i). Em outras palavras, obteremos um número inteiro maior ou igual a i e menor ou igual a j. Para finalizar, basta devolver esse valor.
1 public static int aleatorio ( int i , int j ) { 2 double a = Math . random () * ( j - i + 1) ; 3 int b = ( int ) a ; 4 int c = b + i ; 5 return c ; 6 }

Podemos simplificar o código do método aleatorio.
1 public static int aleatorio ( int i , int j ) { 2 return ( int ) ( Math . random () * ( j - i + 1) ) + i ; 3 }

Exercícios de Fixação Com Java

10

Na pasta problemas, crie um arquivo chamado Aleatorio.java.

www.facebook.com/k19treinamentos

243

P ROBLEMAS
1 class Aleatorio { 2 public static void main ( String [] args ) { 3 System . out . println ( " Sorteando no intervalo [ , 1 ] " ) ; 4 for ( int i = ; i < 1 ; i ++) { 5 int numero = aleatorio ( , 1 ) ; 6 System . out . println ( numero ) ; 7 } 8 9 System . out . println ( " \ nSorteando no intervalo [ -25 , 1 ] " ) ; 1 for ( int i = ; i < 1 ; i ++) { 11 int numero = aleatorio ( -25 , 1 ) ; 12 System . out . println ( numero ) ; 13 } 14 } 15 16 public static int aleatorio ( int i , int j ) { 17 return ( int ) ( Math . random () * ( j - i + 1) ) + i ; 18 } 19 }
Código Java A.28: Aleatorio.java

244

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao1 .zip

11

Compile e execute a classe Aleatorio.
K19 / rafael / problemas$ javac Aleatorio . java K19 / rafael / problemas$ java Aleatorio Sorteando no intervalo [ , 1 ] 6 1 4 2 3 7 9 8 1 2 Sorteando no intervalo [ -25 , 1 ] 4 3 -1 -11 -14 -7 -2 -25 9 -22

Terminal A.7: Compilando e executando a classe Aleatorio

Gerar apostas da Mega-Sena
Você não quer perder tempo escolhendo os números que utilizará para apostar na Mega-Sena. Implemente um programa que gere aleatoriamente apostas da Mega-Sena com 6 números. Para gerar apostas da Mega-Sena, devemos escolher aleatoriamente 6 números entre 1 e 60. Considere o seguinte método.
1 public static int [] geraApostaMegaSena () { 2 }

244

www.k19.com.br

245

P ROBLEMAS

Toda vez que for chamado, o método geraApostaMegaSena devolverá um array de int com 6 números. Esses números são justamente os que formam a aposta da Mega-Sena. Podemos começar a implementação do método geraApostaMegaSena, armazenando em um array os números de 1 a 60. Esses são os números que podem ser sorteados.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 }

Depois, devemos escolher aleatoriamente uma das posições do array numeros. O valor armazenado nessa posição será o primeiro número da aposta. Para realizar essa escolha, podemos utilizar o método aleatorio que foi desenvolvido anteriormente.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 int j = aleatorio ( , numeros . length - 1) ; 8 aposta [ ] = numeros [ j ]; 9 }

Antes de escolher aleatoriamente o segundo número da aposta, para não correr o risco de sortear o mesmo número duas vezes, realizaremos uma troca entre o primeiro número sorteado e o primeiro elemento do array numeros. Para isso, podemos utilizar o método troca que foi criado anteriormente.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 int j = aleatorio ( , numeros . length - 1) ; 8 aposta [ ] = numeros [ j ]; 9 troca ( numeros , , j ) ; 1 }

Agora, o próximo passo é sortear mais um elemento do array numeros só que devemos desconsiderando o primeiro pois esse já foi sorteado. O número sorteado dessa vez será o segundo número da aposta que está sendo definida.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 int j = aleatorio ( , numeros . length - 1) ; 8 aposta [ ] = numeros [ j ]; 9 troca ( numeros , , j ) ; 1 11 j = aleatorio (1 , numeros . length - 1) ; 12 aposta [1] = numeros [ j ]; 13 }

www.facebook.com/k19treinamentos

245

P ROBLEMAS

246

Novamente, para não ser escolhido duas vezes, o último elemento sorteado será trocado com o segundo elemento do array numeros.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 int j = aleatorio ( , numeros . length - 1) ; 8 aposta [ ] = numeros [ j ]; 9 troca ( numeros , , j ) ; 1 11 j = aleatorio (1 , numeros . length - 1) ; 12 aposta [1] = numeros [ j ]; 13 troca ( numeros , 1 , j ) ; 14 }

Analogamente, os outros 4 números que formam a aposta podem ser definidos.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 int j = aleatorio ( , numeros . length - 1) ; 8 aposta [ ] = numeros [ j ]; 9 troca ( numeros , , j ) ; 1 11 j = aleatorio (1 , numeros . length - 1) ; 12 aposta [1] = numeros [ j ]; 13 troca ( numeros , 1 , j ) ; 14 15 j = aleatorio (2 , numeros . length - 1) ; 16 aposta [2] = numeros [ j ]; 17 troca ( numeros , 2 , j ) ; 18 19 j = aleatorio (3 , numeros . length - 1) ; 2 aposta [3] = numeros [ j ]; 21 troca ( numeros , 3 , j ) ; 22 23 j = aleatorio (4 , numeros . length - 1) ; 24 aposta [4] = numeros [ j ]; 25 troca ( numeros , 4 , j ) ; 26 27 j = aleatorio (5 , numeros . length - 1) ; 28 aposta [5] = numeros [ j ]; 29 troca ( numeros , 5 , j ) ; 3 }

Observe a formação de um padrão no código. Sorteamos um número; armazenamos no array aposta; e realizamos uma troca. Dado esse padrão, podemos utilizar um laço para sortear os 6 números da aposta.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 for ( int i = ; i < aposta . length ; i ++) { 8 int j = aleatorio (i , numeros . length - 1) ; 9 aposta [ i ] = numeros [ j ]; 1 troca ( numeros , i , j ) ;

246

www.k19.com.br

247
11 } 12 }

P ROBLEMAS

Para finalizar, o método geraApostaMegaSena deve devolver a aposta gerada.
1 public static int [] geraApostaMegaSena () { 2 int [] numeros = new int [6 ]; 3 for ( int i = ; i < numeros . length ; i ++) { 4 numeros [ i ] = i + 1; 5 } 6 7 for ( int i = ; i < aposta . length ; i ++) { 8 int j = aleatorio (i , numeros . length - 1) ; 9 aposta [ i ] = numeros [ j ]; 1 troca ( numeros , i , j ) ; 11 } 12 13 return aposta ; 14 }

Exercícios de Fixação Com Java

12

Na pasta problemas, crie um arquivo chamado GeraApostaMegaSena.java.

1 class GeraApostaMegaSena { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 1 ; i ++) { 4 int [] array = geraApostaMegaSena () ; 5 System . out . print ( " Aposta " + ( i + 1) + " : " ) ; 6 exibeArray ( array ) ; 7 } 8 } 9 1 public static int [] geraApostaMegaSena () { 11 int [] numeros = new int [6 ]; 12 for ( int i = ; i < numeros . length ; i ++) { 13 numeros [ i ] = i + 1; 14 } 15 16 int [] aposta = new int [6]; 17 for ( int i = ; i < aposta . length ; i ++) { 18 int j = aleatorio (i , numeros . length - 1) ; 19 aposta [ i ] = numeros [ j ]; 2 troca ( numeros , i , j ) ; 21 } 22 23 return aposta ; 24 } 25 26 public static int aleatorio ( int i , int j ) { 27 return ( int ) ( Math . random () * ( j - i + 1) ) + i ; 28 } 29 3 public static void troca ( int [] array , int i , int j ) { 31 int auxiliar = array [ i ]; 32 array [ i ] = array [ j ]; 33 array [ j ] = auxiliar ; 34 } 35 36 public static void exibeArray ( int [] array ) { 37 System . out . print ( " { " ) ; 38

www.facebook.com/k19treinamentos

247

P ROBLEMAS
39 for ( int i = ; i < array . length - 1; i ++) { 4 System . out . print ( array [ i ] + " , " ) ; 41 } 42 43 System . out . println ( array [ array . length - 1] + " } " ) ; 44 } 45 }
Código Java A.38: GeraApostaMegaSena.java

248

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao12.zip

13

Compile e execute a classe GeraApostaMegaSena.
K19 / rafael / problemas$ javac GeraApostaMegaSena . java K19 / rafael / problemas$ java GeraApostaMegaSena Aposta 1: {18 , 46 , 55 , 42 , 22 , 34} Aposta 2: {26 , 38 , 1 , 28 , 25 , 49} Aposta 3: {2 , 35 , 59 , 42 , 45 , 51} Aposta 4: {22 , 21 , 7 , 15 , 34 , 27} Aposta 5: {11 , 4 , 17 , 21 , 32 , 48} Aposta 6: {32 , 6 , 7 , 25 , 4 , 16} Aposta 7: {4 , 5 , 39 , 49 , 43 , 35} Aposta 8: {16 , 59 , 15 , 27 , 13 , 43} Aposta 9: {4 , 28 , 7 , 1 , 29 , 59} Aposta 1 : {1 , 29 , 2 , 17 , 43 , 53}

Terminal A.8: Compilando e executando a classe GeraApostaMegaSena

Embaralhar os elementos de um array
Considere a distribuição das vagas da garagem de um condomínio. Essas vagas foram numeradas de 1 a 100 e cada vaga está associada ao número do apartamento que a utilizará. Podemos utilizar um array de números inteiros para armazenar essas associações. Vamos assumir que a posição 0 desse array corresponde à vaga número 1, a posição 1 à vaga número 2 e assim por diante. O número do apartamento que utilizará uma determinada vaga deve ser armazenado na posição correspondente a essa vaga. Por exemplo, considere o array 12, 34, 11, 22. De acordo com as informações contidas nesse array, podemos deduzir que a vaga 1 pertence ao apartamento 12, a vaga 2 ao apartamento 34, a vaga 3 ao apartamento 11 e a vaga 4 ao apartamento 22. No final de cada semestre, as vagas são redistribuídas de forma aleatória. Implemente um método que embaralhe os elementos de um array para simular essa redistribuição. Podemos utilizar uma estratégia muito parecida com a utilizada para gerar apostas de 6 números da Mega-Sena. Basicamente, temos que continuar o processo de sorteio até o último elemento do array. Outra diferença é que o array pode possuir elementos fora do intervalo de 1 a 60, mas essa diferença não atrapalha a nossa estratégia.
1 public static void embaralha ( int [] array ) { 2 for ( int i = ; i < array . length ; i ++) { 3 int j = aleatorio (i , array . length - 1) ; 4 troca ( array , i , j ) ; 5 } 6 }

248

www.k19.com.br

249

P ROBLEMAS

Exercícios de Fixação Com Java

14

Na pasta problemas, crie um arquivo chamado Embaralha.java.

1 class Embaralha { 2 public static void main ( String [] args ) { 3 System . out . println ( " Original " ) ; 4 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 5 exibeArray ( array ) ; 6 7 System . out . println ( " \ nEmbaralhando ... " ) ; 8 embaralha ( array ) ; 9 exibeArray ( array ) ; 1 11 System . out . println ( " \ nEmbaralhando ... " ) ; 12 embaralha ( array ) ; 13 exibeArray ( array ) ; 14 15 System . out . println ( " \ nEmbaralhando ... " ) ; 16 embaralha ( array ) ; 17 exibeArray ( array ) ; 18 } 19 2 public static void embaralha ( int [] array ) { 21 for ( int i = ; i < array . length ; i ++) { 22 int j = aleatorio (i , array . length - 1) ; 23 troca ( array , i , j ) ; 24 } 25 } 26 27 public static int aleatorio ( int i , int j ) { 28 return ( int ) ( Math . random () * ( j - i + 1) ) + i ; 29 } 3 31 public static void troca ( int [] array , int i , int j ) { 32 int auxiliar = array [ i ]; 33 array [ i ] = array [ j ]; 34 array [ j ] = auxiliar ; 35 } 36 37 public static void exibeArray ( int [] array ) { 38 System . out . print ( " { " ) ; 39 4 for ( int i = ; i < array . length - 1; i ++) { 41 System . out . print ( array [ i ] + " , " ) ; 42 } 43 44 System . out . println ( array [ array . length - 1] + " } " ) ; 45 } 46 }
Código Java A.40: Embaralha.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao14.zip

15

Compile e execute a classe Embaralha.
K19 / rafael / problemas$ javac Embaralha . java K19 / rafael / problemas$ java Embaralha Original { -1 , 37 , 1 1 , 28 , -4}

www.facebook.com/k19treinamentos

249

P ROBLEMAS
Embaralhando ... { -4 , 28 , 1 1 , 37 , -1 } Embaralhando ... {37 , 1 1 , 28 , -1 , -4} Embaralhando ... { -4 , 1 1 , 37 , -1 , 28}

250

Terminal A.9: Compilando e executando a classe Embaralha

Ordenar os elementos de um array
Considere um array contendo os preços dos produtos de uma loja. Esse valores não estão ordenados. Implemente um método para ordenar esse elementos do menor para o maior. Por mais contraditório que pareça, podemos ordenar um array com uma pequena alteração no método que embaralha. A alteração consiste em selecionar a cada iteração o menor elemento do array ao invés de um elemento aleatório.
1 public static void ordena ( int [] array ) { 2 for ( int i = ; i < array . length ; i ++) { 3 int menor = menor ( array , i ) ; 4 troca ( array , i , menor ) ; 5 } 6 }

Exercícios de Fixação Com Java

16

Na pasta problemas, crie um arquivo chamado Ordena.java.

1 class Ordena { 2 public static void main ( String [] args ) { 3 System . out . println ( " Original " ) ; 4 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 5 exibeArray ( array ) ; 6 7 System . out . println ( " \ nOrdenando ... " ) ; 8 ordena ( array ) ; 9 exibeArray ( array ) ; 1 } 11 12 public static void ordena ( int [] array ) { 13 for ( int i = ; i < array . length ; i ++) { 14 int menor = menor ( array , i ) ; 15 troca ( array , i , menor ) ; 16 } 17 } 18 19 public static int menor ( int [] array , int inicio ) { 2 int menor = inicio ; 21 22 for ( int i = inicio + 1; i < array . length ; i ++) { 23 if ( array [ menor ] > array [ i ]) { 24 menor = i ; 25 } 26 } 27

250

www.k19.com.br

251
28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 43 44 45 46 } return menor ; } public static void troca ( int [] array , int i , int j ) { int auxiliar = array [ i ]; array [ i ] = array [ j ]; array [ j ] = auxiliar ; } public static void exibeArray ( int [] array ) { System . out . print ( " { " ) ; for ( int i = ; i < array . length - 1; i ++) { System . out . print ( array [ i ] + " , " ) ; } System . out . println ( array [ array . length - 1] + " } " ) ; }

P ROBLEMAS

Código Java A.42: Ordena.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao16.zip

17

Compile e execute a classe Ordena.
K19 / rafael / problemas$ javac Ordena . java K19 / rafael / problemas$ java Ordena Original { -1 , 37 , 1 1 , 28 , -4} Ordenando ... { -1 , -4, 28 , 37 , 1 1}

Terminal A.10: Compilando e executando a classe Ordena

Inverter o posicionamento dos elementos de um array
Considere um jogo de cartas no qual o posicionamento das cartas deve ser invertido. Implemente um método que inverta os elementos de um array de números. Depois da inversão, o antigo primeiro deve ser o novo último, o antigo segundo deve se o novo penúltimo e assim por diante. Para começar, vamos definir o esqueleto do método que realizará a inversão dos elementos de um array. Esse método deve receber como parâmetro o array que armazena os elementos que serão invertidos.
1 public static void inverte ( double [] array ) { 2 }

O primeiro passo da nossa estratégia para inverter os elementos de um array é realizar uma troca entre o primeiro e o último elemento.
1 public static void inverte ( double [] array ) { 2 troca ( array , , array . length - 1) ; 3 }

O próximo passo é realizar a troca do segundo e do penúltimo elemento. www.facebook.com/k19treinamentos 251

P ROBLEMAS
1 public static void inverte ( double [] array ) { 2 troca ( array , , array . length - 1) ; 3 troca ( array , 1 , array . length - 2) ; 4 }

252

Analogamente, no próximo passo, devemos trocar o terceiro e o antepenúltimo.
1 public static void inverte ( double [] array ) { 2 troca ( array , , array . length - 1) ; 3 troca ( array , 1 , array . length - 2) ; 4 troca ( array , 2 , array . length - 3) ; 5 }

Você já pode deduzir quais seriam os próximos passos. Observe a existência de uma padrão nesse código. Dessa forma, podemos utilizar um laço.
1 public static void inverte ( double [] array ) { 2 int i = ; 3 int j = array . length - 1; 4 5 while ( i < j ) { 6 troca ( array , i , j ) ; 7 i ++; 8 j - -; 9 } 1 }

Exercícios de Fixação Com Java

18

Na pasta problemas, crie um arquivo chamado Inverte.java.

1 class Inverte { 2 public static void main ( String [] args ) { 3 System . out . println ( " Original " ) ; 4 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 5 exibeArray ( array ) ; 6 7 System . out . println ( " \ nInvertendo ... " ) ; 8 inverte ( array ) ; 9 exibeArray ( array ) ; 1 } 11 12 public static void inverte ( int [] array ) { 13 int i = ; 14 int j = array . length - 1; 15 16 while ( i < j ) { 17 troca ( array , i , j ) ; 18 i ++; 19 j - -; 2 } 21 } 22 23 public static void troca ( int [] array , int i , int j ) { 24 int auxiliar = array [ i ]; 25 array [ i ] = array [ j ]; 26 array [ j ] = auxiliar ; 27 } 28

252

www.k19.com.br

253
29 public static void exibeArray ( int [] array ) { 3 System . out . print ( " { " ) ; 31 32 for ( int i = ; i < array . length - 1; i ++) { 33 System . out . print ( array [ i ] + " , " ) ; 34 } 35 36 System . out . println ( array [ array . length - 1] + " } " ) ; 37 } 38 }
Código Java A.48: Inverte.java

P ROBLEMAS

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao18.zip

19

Compile e execute a classe Inverte.
K19 / rafael / problemas$ javac Inverte . java K19 / rafael / problemas$ java Inverte Original { -1 , 37 , 1 1 , 28 , -4} Invertendo ... { -4 , 28 , 1 1 , 37 , -1 }

Terminal A.11: Compilando e executando a classe Inverte

Números em formato binário
Estamos acostumados a lidar com os números em formato decimal. Os computadores trabalham com números em formato binário. Implemente um método que devolva um número inteiro em formato binário. O algoritmo para gerar o formato binário de um número inteiro é muito simples. Devemos realizar sucessivas divisões inteiras por 2 sempre armazenando o resto dessas operações. O número em binário é formado pela concatenação desses restos. O último resto é o primeiro dígito do número; o penúltimo resto é o segundo dígito; o antepenúltimo resto é o terceiro dígito; e assim por diante. Vamos definir o esqueleto do método que gera a representação binária dos números inteiros. Esse método deve receber como parâmetro o número inteiro e devolver como resposta a representação binária desse número.
1 public static String decimalParaBinario ( int x ) { 2 }

Aplicando o algoritmo descrito acima, podemos definir o seguinte código.
1 public static String binario ( int x ) { 2 String y = " " ; 3 4 // último dígito 5 y = x % 2 + y; 6 x = x / 2; 7 8 // penúltimo dígito 9 y = x % 2 + y; 1 x = x / 2;

www.facebook.com/k19treinamentos

253

P ROBLEMAS
11 12 13 14 15 16 17 18 }

254

// antepenúltimo dígito y = x % 2 + y; x = x / 2; ... return y ;

Você pode observar um padrão ocorrendo na implementação acima. Nesse caso, podemos utilizar um laço com a condição de parada é “x > 0”.
1 public static String binario ( int x ) { 2 String y = " " ; 3 while ( x > ) { 4 y = x % 2 + y; 5 x = x / 2; 6 } 7 return y ; 8 }

Exercícios de Fixação Com Java

20

Na pasta problemas, crie um arquivo chamado Binario.java.

1 class Binario { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i < 1 ; i ++) { 4 String s = binario ( i ) ; 5 System . out . println ( i + " em binário " + s ) ; 6 } 7 } 8 9 public static String binario ( int x ) { 1 String y = " " ; 11 while ( x > ) { 12 y = x % 2 + y; 13 x = x / 2; 14 } 15 return y ; 16 } 17 }
Código Java A.52: Binario.java

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao2 .zip

21

Compile e execute a classe Binario.
K19 / rafael / problemas$ javac Binario . java K19 / rafael / problemas$ java Binario 1 em binário 1 2 em binário 1 3 em binário 11 ... 97 em binário 11 1 98 em binário 11 1 99 em binário 11 11

254

www.k19.com.br

255

P ROBLEMAS

Terminal A.12: Compilando e executando a classe Binario

Exercícios de Fixação Com C#

22

Na pasta problemas, crie um arquivo chamado AchaMaiorOuMenor.cs.

1 class AchaMaiorOuMenor 2 { 3 static void Main () 4 { 5 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9}; 6 7 int posicaoDoMaior = maior ( array ) ; 8 System . Console . WriteLine ( " O maior valor do array é : " 9 System . Console . WriteLine ( " Esse valor está na posição : 1 11 int posicaoDoMenor = menor ( array ) ; 12 System . Console . WriteLine ( " O menor valor do array é : " 13 System . Console . WriteLine ( " Esse valor está na posição : 14 } 15 16 static int maior ( double [] array ) 17 { 18 int posicaoDoMaior = ; 19 2 for ( int i = 1; i < array . Length ; i ++) 21 { 22 if ( array [ posicaoDoMaior ] < array [ i ]) 23 { 24 posicaoDoMaior = i ; 25 } 26 } 27 28 return posicaoDoMaior ; 29 } 3 31 static int menor ( double [] array ) 32 { 33 int posicaoDoMenor = ; 34 35 for ( int i = 1; i < array . Length ; i ++) 36 { 37 if ( array [ posicaoDoMenor ] > array [ i ]) 38 { 39 posicaoDoMenor = i ; 4 } 41 } 42 43 return posicaoDoMenor ; 44 } 45 }
Código C# A.1: AchaMaiorOuMenor.cs

+ array [ posicaoDoMaior ]) ; " + posicaoDoMaior ) ;

+ array [ posicaoDoMenor ]) ; " + posicaoDoMenor ) ;

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao22.zip

23

Compile e execute a classe AchaMaiorOuMenor.
C :\ Users \ K19 \ rafael \ problemas > csc AchaMaiorOuMenor . cs

www.facebook.com/k19treinamentos

255

P ROBLEMAS
C :\ Users \ K19 \ rafael \ problemas > AchaMaiorOuMenor . exe O maior valor do array é : 1 1.1 Esse valor está na posição : 2 O menor valor do array é : -1 .7 Esse valor está na posição :

256

Terminal A.13: Compilando e executando a classe AchaMaiorOuMenor

24

Na pasta problemas, crie um arquivo chamado Soma.cs.

1 class Soma 2 { 3 static void Main () 4 { 5 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9}; 6 7 double valor = soma ( array ) ; 8 9 System . Console . WriteLine ( " A soma dos elementos do array é : " + valor ) ; 1 } 11 12 static double soma ( double [] array ) 13 { 14 double soma = ; 15 16 for ( int i = ; i < array . Length ; i ++) 17 { 18 soma += array [ i ]; 19 } 2 21 return soma ; 22 } 23 }
Código C# A.2: Soma.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao24.zip

25

Compile e execute a classe Soma.
C :\ Users \ K19 \ rafael \ problemas > csc Soma . cs C :\ Users \ K19 \ rafael \ problemas > Soma . exe A soma dos elementos do array é : 151.3

Terminal A.14: Compilando e executando a classe Soma

26

Na pasta problemas, crie um arquivo chamado Media.cs.

1 class Media 2 { 3 static void Main () 4 { 5 double [] array = { -1 .7 , 37.8 , 1 1.1 , 28 , -4.9}; 6 7 double valor = media ( array ) ; 8 9 System . Console . WriteLine ( " A média dos elementos do array é : " + valor ) ; 1 } 11 12 static double media ( double [] array )

256

www.k19.com.br

257
13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 } { double valor = soma ( array ) ; double media = valor / array . Length ; return media ; } static double soma ( double [] array ) { double soma = ; for ( int i = ; i < array . Length ; i ++) { soma += array [ i ]; } return soma ; }

P ROBLEMAS

Código C# A.3: Media.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao26.zip

27

Compile e execute a classe Media.
C :\ Users \ K19 \ rafael \ problemas > csc Media . cs C :\ Users \ K19 \ rafael \ problemas > Media . exe A média dos elementos do array é : 3 .26

Terminal A.15: Compilando e executando a classe Media

28

Na pasta problemas, crie um arquivo chamado Troca.cs.

1 class Troca 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Original " ) ; 6 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 7 exibeArray ( array ) ; 8 9 System . Console . WriteLine ( " \ nTroca e 2"); 1 troca ( array , , 2) ; 11 exibeArray ( array ) ; 12 13 System . Console . WriteLine ( " \ nTroca 1 e 3 " ) ; 14 troca ( array , 1 , 3) ; 15 exibeArray ( array ) ; 16 } 17 18 static void troca ( int [] array , int i , int j ) 19 { 2 int auxiliar = array [ i ]; 21 array [ i ] = array [ j ]; 22 array [ j ] = auxiliar ; 23 } 24 25 static void exibeArray ( int [] array ) 26 { 27 System . Console . Write ( " { " ) ; 28 29 for ( int i = ; i < array . Length - 1; i ++) 3 { 31 System . Console . Write ( array [ i ] + " , " ) ;

www.facebook.com/k19treinamentos

257

P ROBLEMAS
32 } 33 34 System . Console . WriteLine ( array [ array . Length - 1] + " } " ) ; 35 } 36 }
Código C# A.4: Troca.cs

258

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao28.zip

29

Compile e execute a classe Troca.
C :\ Users \ K19 \ rafael \ problemas > csc Troca . cs C :\ Users \ K19 \ rafael \ problemas > Troca . exe Original { -1 , 37 , 1 1 , 28 , -4} Troca e 2 {1 1 , 37 , -1 , 28 , -4} Troca 1 e 3 {1 1 , 28 , -1 , 37 , -4}

Terminal A.16: Compilando e executando a classe Troca

30

Na pasta problemas, crie um arquivo chamado Aleatorio.cs.

1 class Aleatorio 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Sorteando no intervalo [ , 1 ] " ) ; 6 for ( int i = ; i < 1 ; i ++) 7 { 8 int numero = aleatorio ( , 1 ) ; 9 System . Console . WriteLine ( numero ) ; 1 } 11 12 System . Console . WriteLine ( " \ nSorteando no intervalo [ -25 , 1 ] " ) ; 13 for ( int i = ; i < 1 ; i ++) 14 { 15 int numero = aleatorio ( -25 , 1 ) ; 16 System . Console . WriteLine ( numero ) ; 17 } 18 } 19 2 static int aleatorio ( int i , int j ) 21 { 22 System . Random gerador = new System . Random () ; 23 return ( int ) ( gerador . NextDouble () * ( j - i + 1) ) + i ; 24 } 25 }
Código C# A.5: Aleatorio.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao3 .zip

31

Compile e execute a classe Aleatorio.
C :\ Users \ K19 \ rafael \ problemas > csc Aleatorio . cs C :\ Users \ K19 \ rafael \ problemas > Aleatorio . exe

258

www.k19.com.br

259
Sorteando no intervalo [ , 1 ] 6 1 4 2 3 7 9 8 1 2 Sorteando no intervalo [ -25 , 1 ] 4 3 -1 -11 -14 -7 -2 -25 9 -22

P ROBLEMAS

Terminal A.17: Compilando e executando a classe Aleatorio

32

Na pasta problemas, crie um arquivo chamado GeraApostaMegaSena.cs.

1 class GeraApostaMegaSena 2 { 3 static void Main () 4 { 5 for ( int i = ; i < 1 ; i ++) 6 { 7 int [] array = geraApostaMegaSena () ; 8 System . Console . Write ( " Aposta " + ( i + 1) + " : " ) ; 9 exibeArray ( array ) ; 1 } 11 } 12 13 static int [] geraApostaMegaSena () 14 { 15 int [] numeros = new int [6 ]; 16 for ( int i = ; i < numeros . Length ; i ++) 17 { 18 numeros [ i ] = i + 1; 19 } 2 21 int [] aposta = new int [6]; 22 for ( int i = ; i < aposta . Length ; i ++) 23 { 24 int j = aleatorio (i , numeros . Length - 1) ; 25 aposta [ i ] = numeros [ j ]; 26 troca ( numeros , i , j ) ; 27 } 28 29 return aposta ; 3 } 31 32 static int aleatorio ( int i , int j ) 33 { 34 System . Random gerador = new System . Random () ; 35 return ( int ) ( gerador . NextDouble () * ( j - i + 1) ) + i ; 36 } 37 38 static void troca ( int [] array , int i , int j ) 39 { 4 int auxiliar = array [ i ]; 41 array [ i ] = array [ j ]; 42 array [ j ] = auxiliar ; 43 }

www.facebook.com/k19treinamentos

259

P ROBLEMAS
44 45 static void exibeArray ( int [] array ) 46 { 47 System . Console . Write ( " { " ) ; 48 49 for ( int i = ; i < array . Length - 1; i ++) 5 { 51 System . Console . Write ( array [ i ] + " , " ) ; 52 } 53 54 System . Console . WriteLine ( array [ array . Length - 1] + " } " ) ; 55 } 56 }
Código C# A.6: GeraApostaMegaSena.cs

260

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao32.zip

33

Compile e execute a classe GeraApostaMegaSena.
C :\ Users \ K19 \ rafael \ problemas > csc GeraApostaMegaSena . cs C :\ Users \ K19 \ rafael \ problemas > GeraApostaMegaSena . exe Aposta 1: {18 , 46 , 55 , 42 , 22 , 34} Aposta 2: {26 , 38 , 1 , 28 , 25 , 49} Aposta 3: {2 , 35 , 59 , 42 , 45 , 51} Aposta 4: {22 , 21 , 7 , 15 , 34 , 27} Aposta 5: {11 , 4 , 17 , 21 , 32 , 48} Aposta 6: {32 , 6 , 7 , 25 , 4 , 16} Aposta 7: {4 , 5 , 39 , 49 , 43 , 35} Aposta 8: {16 , 59 , 15 , 27 , 13 , 43} Aposta 9: {4 , 28 , 7 , 1 , 29 , 59} Aposta 1 : {1 , 29 , 2 , 17 , 43 , 53}

Terminal A.18: Compilando e executando a classe GeraApostaMegaSena

34

Na pasta problemas, crie um arquivo chamado Embaralha.cs.

1 class Embaralha 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Original " ) ; 6 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 7 exibeArray ( array ) ; 8 9 System . Console . WriteLine ( " \ nEmbaralhando ... " ) ; 1 embaralha ( array ) ; 11 exibeArray ( array ) ; 12 13 System . Console . WriteLine ( " \ nEmbaralhando ... " ) ; 14 embaralha ( array ) ; 15 exibeArray ( array ) ; 16 17 System . Console . WriteLine ( " \ nEmbaralhando ... " ) ; 18 embaralha ( array ) ; 19 exibeArray ( array ) ; 2 } 21 22 static void embaralha ( int [] array ) 23 { 24 for ( int i = ; i < array . Length ; i ++) 25 { 26 int j = aleatorio (i , array . Length - 1) ; 27 troca ( array , i , j ) ; 28 }

260

www.k19.com.br

261
29 3 31 32 33 34 35 36 37 38 39 4 41 42 43 44 45 46 47 48 49 5 51 52 53 54 55 } } static int aleatorio ( int i , int j ) { System . Random gerador = new System . Random () ; return ( int ) ( gerador . NextDouble () * ( j - i + 1) ) + i ; } static void troca ( int [] array , int i , int j ) { int auxiliar = array [ i ]; array [ i ] = array [ j ]; array [ j ] = auxiliar ; } static void exibeArray ( int [] array ) { System . Console . Write ( " { " ) ; for ( int i = ; i < array . Length - 1; i ++) { System . Console . Write ( array [ i ] + " , " ) ; } System . Console . WriteLine ( array [ array . Length - 1] + " } " ) ; }

P ROBLEMAS

Código C# A.7: Embaralha.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao34.zip

35

Compile e execute a classe Embaralha.
C :\ Users \ K19 \ rafael \ problemas > csc Embaralha . cs C :\ Users \ K19 \ rafael \ problemas > Embaralha . exe Original { -1 , 37 , 1 1 , 28 , -4} Embaralhando ... { -4 , 28 , 1 1 , 37 , -1 } Embaralhando ... {37 , 1 1 , 28 , -1 , -4} Embaralhando ... { -4 , 1 1 , 37 , -1 , 28}

Terminal A.19: Compilando e executando a classe Embaralha

36

Na pasta problemas, crie um arquivo chamado Ordena.cs.

1 class Ordena 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Original " ) ; 6 int [] array = { -1 , 37 , 1 1 , 28 , -4}; 7 exibeArray ( array ) ; 8 9 System . Console . WriteLine ( " \ nOrdenando ... " ) ; 1 ordena ( array ) ; 11 exibeArray ( array ) ; 12 } 13

www.facebook.com/k19treinamentos

261

P ROBLEMAS
14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 43 44 45 46 47 48 49 5 51 52 53 54 55 56 } static void ordena ( int [] array ) { for ( int i = ; i < array . Length ; i ++) { int posicaoDoMenor = menor ( array , i ) ; troca ( array , i , posicaoDoMenor ) ; } } static int menor ( int [] array , int inicio ) { int menor = inicio ; for ( int i = inicio + 1; i < array . Length ; i ++) { if ( array [ menor ] > array [ i ]) { menor = i ; } } return menor ; } static void troca ( int [] array , int i , int j ) { int auxiliar = array [ i ]; array [ i ] = array [ j ]; array [ j ] = auxiliar ; } static void exibeArray ( int [] array ) { System . Console . Write ( " { " ) ; for ( int i = ; i < array . Length - 1; i ++) { System . Console . Write ( array [ i ] + " , " ) ; } System . Console . WriteLine ( array [ array . Length - 1] + " } " ) ; }

262

Código C# A.8: Ordena.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao36.zip

37

Compile e execute a classe Ordena.
C :\ Users \ K19 \ rafael \ problemas > csc Ordena . cs C :\ Users \ K19 \ rafael \ problemas > java Ordena . exe Original { -1 , 37 , 1 1 , 28 , -4} Ordenando ... { -1 , -4, 28 , 37 , 1 1}

Terminal A.20: Compilando e executando a classe Ordena

38

Na pasta problemas, crie um arquivo chamado Inverte.cs.

1 class Inverte 2 {

262

www.k19.com.br

263
3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 43 44 45 } static void Main () { System . Console . WriteLine ( " Original " ) ; int [] array = { -1 , 37 , 1 1 , 28 , -4}; exibeArray ( array ) ; System . Console . WriteLine ( " \ nInvertendo ... " ) ; inverte ( array ) ; exibeArray ( array ) ; } static void inverte ( int [] array ) { int i = ; int j = array . Length - 1; while ( i < j ) { troca ( array , i , j ) ; i ++; j - -; } } static void troca ( int [] array , int i , int j ) { int auxiliar = array [ i ]; array [ i ] = array [ j ]; array [ j ] = auxiliar ; } static void exibeArray ( int [] array ) { System . Console . Write ( " { " ) ; for ( int i = ; i < array . Length - 1; i ++) { System . Console . Write ( array [ i ] + " , " ) ; } System . Console . WriteLine ( array [ array . Length - 1] + " } " ) ; }

P ROBLEMAS

Código C# A.9: Inverte.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao38.zip

39

Compile e execute a classe Inverte.
C :\ Users \ K19 \ rafael \ problemas > csc Inverte . cs C :\ Users \ K19 \ rafael \ problemas > Inverte . exe Original { -1 , 37 , 1 1 , 28 , -4} Invertendo ... { -4 , 28 , 1 1 , 37 , -1 }

Terminal A.21: Compilando e executando a classe Inverte

40

Na pasta problemas, crie um arquivo chamado Binario.cs.

1 class Binario 2 {

www.facebook.com/k19treinamentos

263

P ROBLEMAS
3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 } static void Main () { for ( int i = 1; i < 1 ; i ++) { string s = binario ( i ) ; System . Console . WriteLine ( i + " em binário " + s ) ; } } static string binario ( int x ) { string y = " " ; while ( x > ) { y = x % 2 + y; x = x / 2; } return y ; }

264

Código C# A.10: Binario.cs

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-problemas-fixacao4 .zip

41

Compile e execute a classe Binario.
C :\ Users \ K19 \ rafael \ problemas > csc Binario . cs C :\ Users \ K19 \ rafael \ problemas > Binario . exe 1 em binário 1 2 em binário 1 3 em binário 11 ... 97 em binário 11 1 98 em binário 11 1 99 em binário 11 11

Terminal A.22: Compilando e executando a classe Binario

264

www.k19.com.br

APÊNDICE
Código Java 1.19: DuasMensagens.java Terminal 1.27: Compilando e Executando

R ESPOSTAS

B

Exercício Complementar 1.1 Crie um arquivo chamado DuasMensagens.java na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class DuasMensagens { 2 public static void main ( String [] args ) { 3 System . out . println ( " Hello World 1 " ) ; 4 System . out . println ( " Hello World 2 " ) ; 5 } 6 }

K19 / rafael / introducao$ javac DuasMensagens . java K19 / rafael / introducao$ java DuasMensagens Hello World 1 Hello World 2

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-complementar1.zip

Exercício Complementar 1.2 Crie um arquivo chamado DuasMensagens.cs na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class DuasMensagens 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Hello World 1 " ) ; 6 System . Console . WriteLine ( " Hello World 2 " ) ; 7 } 8 }
Código C# 1.16: DuasMensagens.cs

C :\ Users \ K19 \ rafael \ introducao > csc HelloWorld2 . java C :\ Users \ K19 \ rafael \ introducao > HelloWorld2 . exe Hello World 1 Hello World 2

Terminal 1.28: Compilando e Executando

Arquivo: https://github.com/K19/K19-Exercicios/archive/k www.facebook.com/k19treinamentos 1-introducao-complementar2.zip

265

R ESPOSTAS

266

Exercício Complementar 1.3 Crie um arquivo chamado FrasePreferida.java na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class FrasePreferida { 2 public static void main ( String [] args ) { 3 System . out . println ( " Lorem ipsum dolor sit amet " ) ; 4 } 5 }
Código Java 1.20: FrasePreferida.java

K19 / rafael / introducao$ javac FrasePreferida . java K19 / rafael / introducao$ java FrasePreferida Lorem ipsum dolor sit amet

Terminal 1.29: Compilando e executando a classe FrasePreferida

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-complementar3.zip

Exercício Complementar 1.4 Crie um arquivo chamado FrasePreferida.cs na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class FrasePreferida 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Lorem ipsum dolor sit amet " ) ; 6 } 7 }
Código C# 1.17: FrasePreferida.cs

K19 / rafael / introducao$ mcs FrasePreferida . cs K19 / rafael / introducao$ mono FrasePreferida . exe Lorem ipsum dolor sit amet

Terminal 1.30: Compilando e executando a classe FrasePreferida

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-complementar4.zip

Exercício Complementar 1.5 Crie um arquivo chamado K19.java na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class K19 { 2 public static void main ( String [] args ) { 3 System . out . println ( " # # # ##### " ) ; 4 System . out . println ( " # # ## # #"); 5 System . out . println ( " # # # # # #"); 6 System . out . println ( " ### # ###### " ) ;

266

www.k19.com.br

267
7 System . out . println ( " # 8 System . out . println ( " # 9 System . out . println ( " # 1 } 11 } # # # #"); # # #"); # ##### ##### " ) ;

R ESPOSTAS

Código Java 1.21: K19.java

K19 / rafael / introducao$ javac K19 . java K19 / rafael / introducao$ java K19

Terminal 1.32: Compilando e executando a classe K19

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-complementar5.zip

Exercício Complementar 1.6 Crie um arquivo chamado K19.cs na pasta introducao. Depois utilize o terminal para compilar e executar.
1 class K19 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " # # # ##### " ) ; 6 System . Console . WriteLine ( " # # ## # #"); 7 System . Console . WriteLine ( " # # # # # #"); 8 System . Console . WriteLine ( " ### # ###### " ) ; 9 System . Console . WriteLine ( " # # # #"); 1 System . Console . WriteLine ( " # # # # #"); 11 System . Console . WriteLine ( " # # ##### ##### " ) ; 12 } 13 }
Código C# 1.18: K19.cs

K19 / rafael / introducao$ mcs K19 . cs K19 / rafael / introducao$ mono K19 . exe

Terminal 1.34: Compilando e executando a classe K19

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-introducao-complementar6.zip

Questão 1.1 d Questão 1.2 d Questão 1.3 www.facebook.com/k19treinamentos 267

R ESPOSTAS

268

b Questão 1.4 e Questão 1.5 c Questão 1.6 a Questão 1.7 e Questão 1.8 a Questão 1.9 b Questão 1.10 a Questão 1.11 e Questão 1.12 d Questão 1.13 b

268

www.k19.com.br

269

R ESPOSTAS

Questão 1.14 c Questão 1.15 c Exercício de Fixação 2.1

www.facebook.com/k19treinamentos

269

R ESPOSTAS
INÍCIO

270

ACESSAR TELA DE DEPÓSITO

AGÊNCIA, CONTA CORRENTE, VALOR

DADOS INCORRETOS

NÃO

CONFIRMA DEPÓSITO?

CONFERIR DADOS

SIM

SEM ENVELOPE

NÃO

INSERIU ENVELOPE?

INSERIR ENVELOPE

SIM

DEPÓSITO EFETUADO COM SUCESSO

FIM

NÃO

OUTRO DEPÓSITO?

SIM

Figura 2.4: Resolução do exercício.

Exercício de Fixação 2.2

270

www.k19.com.br

271

R ESPOSTAS

INÍCIO

NOME DO ALUNO OU EX-ALUNO

É ALUNO OU EX-ALUNO?

NÃO

SIM SOMA 5% AO TOTAL DE DESCONTOS

NOME DO INDICADO

INDICADO É ALUNO OU EX-ALUNO?

SIM

NÃO

SOMA 5% AO TOTAL DE DESCONTOS

SIM

INDICAR MAIS ALGUÉM?

INDICADO É ALUNO OU EX-ALUNO

NÃO

TOTAL DE DESCONTOS

FIM

Figura 2.5: Resolução do exercício.

Desafio 2.1 www.facebook.com/k19treinamentos 271

R ESPOSTAS

272

NÃO

INÍCIO

PERSONAGEM 1

ENVIAR PARA O OUTRO LADO DO RIO?

SIM

É PAI, MÃE OU POLICIAL?

SIM NÃO SIM PERSONAGEM 2 LEVAR MAIS ALGUÉM?

NÃO ENVIAR

SIM

PAI SOZINHO COM A(S) FILHA(S)

NÃO

SIM

MÃE SOZINHA COM O(S) FILHO(S)

NÃO

SIM

BANDIDO SOZINHO COM ALGUÉM DA FAMÍLIA?

NÃO ATRAVESSAR O RIO

SIM

SOBROU ALGUÉM NO LADO ESQUERDO DO RIO?

NÃO FIM

Figura 2.6: Resolução do desafio.

272

www.k19.com.br

273

R ESPOSTAS

Exercício Complementar 3.1

Em Java: 1. “Bom dia” -> String 2. 3 -> byte, short, int ou long 3. 235.13 -> double 4. true -> boolean 5. -135 -> short, int ou long 6. 256.23F -> float 7. ‘A’ -> char 8. 6463275245745L -> long Em C#: 1. “Bom dia” -> string 2. 3 -> sbyte, byte, short, ushort, int, uint, long ou ulong 3. 235.13 -> double 4. true -> bool 5. -135 -> short, int ou long 6. 256.23F -> float 7. ‘A’ -> char 8. 6463275245745L -> long

Exercício Complementar 3.2

1 class TestaVariavelPeso { 2 public static void main ( String [] args ) { 3 double peso ; 4 5 peso = 88.2 ; 6 7 System . out . println ( peso ) ; 8 } 9 }
Código Java 3.51: TestaVariavelPeso.java

www.facebook.com/k19treinamentos

273

R ESPOSTAS

274

Compile e execute a classe TestaVariavelPeso
K19 / rafael / variaveis$ javac TestaVariavelPeso . java K19 / rafael / variaveis$ java TestaVariavelPeso 88.2

Terminal 3.27: Compilando e executando a classe TestaVariavelPeso

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar2.zip

Exercício Complementar 3.3

1 class TestaTiposBasicos { 2 public static void main ( String [] args ) { 3 byte b = 1; 4 short s = 2; 5 int i = 3; 6 long l = 4; 7 float f = 5.5 F ; 8 double d = 6.6; 9 char c = ’K ’; 1 boolean v = true ; 11 12 System . out . println ( b ) ; 13 System . out . println ( s ) ; 14 System . out . println ( i ) ; 15 System . out . println ( l ) ; 16 System . out . println ( f ) ; 17 System . out . println ( d ) ; 18 System . out . println ( c ) ; 19 System . out . println ( v ) ; 2 } 21 }
Código Java 3.52: TestaTiposBasicos.java

Compile e execute a classe TestaTiposBasicos
K19 / rafael / variaveis$ javac TestaTiposBasicos . java K19 / rafael / variaveis$ java TestaTiposBasicos 1 2 3 4 5.5 6.6 K true

Terminal 3.28: Compilando e executando a classe TestaTiposBasicos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar3.zip

Exercício Complementar 3.4

1 class TestaConversaoDouble {

274

www.k19.com.br

275
2 public static void main ( String [] args ) { 3 String s = " 1571.11 " ; 4 5 double d = Double . parseDouble ( s ) ; 6 7 System . out . println ( d ) ; 8 } 9 }
Código Java 3.53: TestaConversaoDouble.java

R ESPOSTAS

Compile e execute a classe TestaConversaoDouble
K19 / rafael / variaveis$ javac TestaConversaoDouble . java K19 / rafael / variaveis$ java TestaConversaoDouble 1571.11

Terminal 3.29: Compilando e executando a classe TestaConversaoDouble

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar4.zip

Exercício Complementar 3.5

1 class TestaCalendar { 2 public static void main ( String [] args ) { 3 java . util . Calendar exatamenteAgora = java . util . Calendar . getInstance () ; 4 java . util . Calendar fundacaoK19 = 5 new java . util . GregorianCalendar (2 1 , 7 , 27 , 1 , 32 , 15) ; 6 7 java . text . SimpleDateFormat sdf = 8 new java . text . SimpleDateFormat ( " dd / MM / yyyy HH : mm : ss " ) ; 9 1 String exatamenteAgoraFormatada = sdf . format ( exatamenteAgora . getTime () ) ; 11 String fundacaoK19Formatada = sdf . format ( fundacaoK19 . getTime () ) ; 12 13 System . out . println ( exatamenteAgoraFormatada ) ; 14 System . out . println ( fundacaoK19Formatada ) ; 15 } 16 }
Código Java 3.54: TestaCalendar.java

Compile e execute a classe TestaCalendar
K19 / rafael / variaveis$ javac TestaCalendar . java K19 / rafael / variaveis$ java TestaCalendar 3/ 8/2 13 14:38:21 27/ 8/2 1 1 :32:15

Terminal 3.30: Compilando e executando a classe TestaCalendar

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar5.zip

Exercício Complementar 3.6

www.facebook.com/k19treinamentos

275

R ESPOSTAS
1 class TestaVariavelPeso 2 { 3 static void Main () 4 { 5 double peso ; 6 7 peso = 88.2 ; 8 9 System . Console . WriteLine ( peso ) ; 1 } 11 }
Código C# 3.41: TestaVariavelPeso.cs

276

C :\ Users \ K19 \ rafael \ variaveis > csc TestaVariavelPeso . cs C :\ Users \ K19 \ rafael \ variaveis > TestaVariavelPeso . exe 88.2

Terminal 3.31: Compilando e executando a classe TestaVariavelPeso

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar6.zip

Exercício Complementar 3.7

1 class TestaTiposBasicos 2 { 3 static void Main () 4 { 5 sbyte sb = 1; 6 byte b = 2; 7 short s = 3; 8 ushort us = 4; 9 int i = 5; 1 uint ui = 6; 11 long l = 7; 12 ulong ul = 8; 13 float f = 5.5 F ; 14 double d1 = 6.6; 15 decimal d2 = 7.7 M ; 16 char c = ’K ’; 17 bool v = true ; 18 19 System . Console . WriteLine ( sb ) ; 2 System . Console . WriteLine ( b ) ; 21 System . Console . WriteLine ( s ) ; 22 System . Console . WriteLine ( us ) ; 23 System . Console . WriteLine ( i ) ; 24 System . Console . WriteLine ( ui ) ; 25 System . Console . WriteLine ( l ) ; 26 System . Console . WriteLine ( ul ) ; 27 System . Console . WriteLine ( f ) ; 28 System . Console . WriteLine ( d1 ) ; 29 System . Console . WriteLine ( d2 ) ; 3 System . Console . WriteLine ( c ) ; 31 System . Console . WriteLine ( v ) ; 32 } 33 }
Código C# 3.42: TestaTiposBasicos.cs

Compile e execute a classe TestaTiposBasicos
276
www.k19.com.br

277
C :\ Users \ K19 \ rafael \ variaveis > csc TestaTiposBasicos . cs C :\ Users \ K19 \ rafael \ variaveis > TestaTiposBasicos 1 2 3 4 5 6 7 8 5.5 6.6 7.7 K True

R ESPOSTAS

Terminal 3.32: Compilando e executando a classe TestaTiposBasicos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar7.zip

Exercício Complementar 3.8

1 class TestaConversaoDouble 2 { 3 static void Main () 4 { 5 string s = " 1571.11 " ; 6 7 double d = System . Convert . ToDouble ( s ) ; 8 9 System . Console . WriteLine ( d ) ; 1 } 11 }
Código C# 3.43: TestaConversaoDouble.cs

Compile e execute a classe TestaConversaoDouble
C :\ Users \ K19 \ rafael \ variaveis > csc TestaConversaoDouble . cs C :\ Users \ K19 \ rafael \ variaveis > TestaConversaoDouble . exe 1571.11

Terminal 3.33: Compilando e executando a classe TestaConversaoDouble

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar8.zip

Exercício Complementar 3.9

1 class TestaDateTime 2 { 3 static void Main () 4 { 5 System . DateTime exatamenteAgora = System . DateTime . Now ; 6 System . DateTime fundacaoK19 = 7 new System . DateTime (2 1 , 7 , 27 , 1 , 32 , 15) ; 8

www.facebook.com/k19treinamentos

277

R ESPOSTAS
9 string exatamenteAgoraFormatada = exatamenteAgora . ToString ( " dd / MM / yyyy HH : mm : ss " ) ← ; string fundacaoK19Formatada = fundacaoK19 . ToString ( " dd / MM / yyyy HH : mm : ss " ) ;

278

1 11 12 System . Console . WriteLine ( exatamenteAgoraFormatada ) ; 13 System . Console . WriteLine ( fundacaoK19Formatada ) ; 14 } 15 }
Código C# 3.44: TestaDateTime.cs

Compile e execute a classe TestaDateTime
C :\ Users \ K19 \ rafael \ variaveis > csc TestaDateTime . cs C :\ Users \ K19 \ rafael \ variaveis > TestaDateTime . exe 3/ 8/2 13 14:38:21 27/ 8/2 1 1 :32:15

Terminal 3.34: Compilando e executando a classe TestaDateTime

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar9.zip

Exercício Complementar 3.10 Em Java:
1 class SistemaMercadorias { 2 public static void main ( String [] args ) { 3 int numeroDoPedido = 1523; 4 int codigoDoProduto = 845732; 5 short quantidade = 2 ; 6 double valorTotalDaCompra = 62373.5; 7 8 System . out . println ( numeroDoPedido ) ; 9 System . out . println ( codigoDoProduto ) ; 1 System . out . println ( quantidade ) ; 11 System . out . println ( valorTotalDaCompra ) ; 12 } 13 }
Código Java 3.55: SistemaMercadorias.java

Em C#:
1 class SistemaMercadorias 2 { 3 static void Main () 4 { 5 int numeroDoPedido = 1523; 6 int codigoDoProduto = 845732; 7 short quantidade = 2 ; 8 double valorTotalDaCompra = 62373.5; 9 1 System . Console . WriteLine ( numeroDoPedido ) ; 11 System . Console . WriteLine ( codigoDoProduto ) ; 12 System . Console . WriteLine ( quantidade ) ; 13 System . Console . WriteLine ( valorTotalDaCompra ) ; 14 } 15 }
Código C# 3.45: SistemaMercadorias.cs

278

www.k19.com.br

279

R ESPOSTAS

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-variaveis-complementar1 .zip

Desafio 3.1

Se estivéssemos trabalhando com uma loja bem pequena, com um baixo volume de vendas, assim como uma pequena variedade de produtos, poderíamos alterar as variáveis numeroDoPedido e codigoDoProduto para o tipo short. Dessa forma reduziríamos em 50% a quantidade de memória necessária para armazenarmos essas variáveis. Caso estivéssemos trabalhando com uma grande rede de lojas, o tipo mais apropriado seria long. Consequentemente estaríamos aumentando em 50% a quantidade de memória necessária para armazenarmos essas variáveis. Questão 3.1 d Questão 3.2 a Questão 3.3 c Questão 3.4 b Questão 3.5 a Questão 3.6 e Questão 3.7 e

www.facebook.com/k19treinamentos

279

R ESPOSTAS

280

Questão 3.8 a Questão 3.9 b Questão 3.10 c Questão 3.11 a Questão 3.12 c Exercício Complementar 4.1

1 class UseOperadoresAritmeticos { 2 public static void main ( String [] args ) { 3 int x = 3 + 8; 4 int y = 7 - 3; 5 int z = 4 * 3; 6 int q = 8 / 2; 7 int w = 9 % 4; 8 9 System . out . println ( x ) ; 1 System . out . println ( y ) ; 11 System . out . println ( z ) ; 12 System . out . println ( q ) ; 13 System . out . println ( w ) ; 14 } 15 }
Código Java 4.53: UseOperadoresAritmeticos.java

Compile e execute a classe UseOperadoresAritmeticos
K19 / rafael / operadores$ javac UseOperadoresAritmeticos . java K19 / rafael / operadores$ java UseOperadoresAritmeticos 11 4 12 4 1

Terminal 4.29: Compilando e executando a classe UseOperadoresAritmeticos

280

www.k19.com.br

281

R ESPOSTAS

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar1.zip

Exercício Complementar 4.2

1 class IdadeMedia { 2 public static void main ( String [] args ) { 3 double idadeDoRafael = 27; 4 double idadeDoJonas = 29; 5 double idadeDoMarcelo = 27; 6 7 double idadeMedia = ( idadeDoRafael + idadeDoJonas + idadeDoMarcelo ) /3; 8 9 System . out . println ( " Idade Média : " + idadeMedia ) ; 1 } 11 }
Código Java 4.54: IdadeMedia.java

Compile e execute a classe IdadeMedia
K19 / rafael / operadores$ javac IdadeMedia . java K19 / rafael / operadores$ java IdadeMedia Idade Média : 27.666666666666668

Terminal 4.30: Compilando e executando a classe IdadeMedia

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar2.zip

Exercício Complementar 4.3

1 class UseDivisaoCasting { 2 public static void main ( String [] args ) { 3 int x = 41; 4 int y = 2; 5 6 System . out . println ( x / y ) ; 7 System . out . println (( double ) x / y ) ; 8 } 9 }
Código Java 4.56: UseDivisaoCasting.java

Compile e execute a classe UseDivisaoCasting
K19 / rafael / operadores$ javac UseDivisaoCasting . java K19 / rafael / operadores$ java UseDivisaoCasting 2 2 .5

Terminal 4.31: Compilando e executando a classe UseDivisaoCasting

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar3.zip

www.facebook.com/k19treinamentos

281

R ESPOSTAS

282

Exercício Complementar 4.4

1 class UseConcatenacao { 2 public static void main ( String [] args ) { 3 String s1 = " Rafael " ; 4 String s2 = " Jonas " ; 5 String s3 = " Marcelo " ; 6 String s4 = " Cosentino " ; 7 String s5 = " Hirata " ; 8 String s6 = " Martins " ; 9 1 System . out . println ( s1 + " " + s4 ) ; 11 System . out . println ( s2 + " " + s5 ) ; 12 System . out . println ( s3 + " " + s6 ) ; 13 } 14 }
Código Java 4.58: UseConcatenacao.java

Compile e execute a classe UseConcatenacao
K19 / rafael / operadores$ javac UseConcatenacao . java K19 / rafael / operadores$ java UseConcatenacao Rafael Cosentino Jonas Hirata Marcelo Martins

Terminal 4.32: Compilando e executando a classe UseConcatenacao

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar4.zip

Exercício Complementar 4.5

1 class UseOperadoresAtribuicao { 2 public static void main ( String [] args ) { 3 int x = 5; 4 System . out . println ( x ) ; 5 x += 1 ; 6 System . out . println ( x ) ; 7 x -= 3; 8 System . out . println ( x ) ; 9 x *= 4; 1 System . out . println ( x ) ; 11 x /= 8; 12 System . out . println ( x ) ; 13 x %= 5; 14 System . out . println ( x ) ; 15 x ++; 16 System . out . println ( x ) ; 17 x - -; 18 System . out . println ( x ) ; 19 } 2 }
Código Java 4.60: UseOperadoresAtribuicao.java

Compile e execute a classe UseOperadoresAtribuicao
282
www.k19.com.br

283
K19 / rafael / operadores$ javac UseOperadoresAtribuicao . java K19 / rafael / operadores$ java UseOperadoresAtribuicao 5 15 12 48 6 1 2 1

R ESPOSTAS

Terminal 4.33: Compilando e executando a classe UseOperadoresAtribuicao

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar5.zip

Exercício Complementar 4.6

1 class NumeroTelefone { 2 public static void main ( String [] args ) { 3 int x = 23; 4 x += 8; 5 System . out . println ( x ) ; 6 x -= 7; 7 System . out . println ( x ) ; 8 x /= 3; 9 System . out . println ( x ) ; 1 x *= 7; 11 System . out . println ( x ) ; 12 x %= 9; 13 System . out . println ( x ) ; 14 x += 1; 15 System . out . println ( x ) ; 16 } 17 }
Código Java 4.61: NumeroTelefone.java

Compile e execute a classe NumeroTelefone
K19 / rafael / operadores$ javac NumeroTelefone . java K19 / rafael / operadores$ java NumeroTelefone 31 24 8 56 2 3

Terminal 4.34: Compilando e executando a classe NumeroTelefone

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar6.zip

Exercício Complementar 4.7

1 class UseOperadoresRelacionais { 2 public static void main ( String [] args ) {

www.facebook.com/k19treinamentos

283

R ESPOSTAS
3 4 5 6 7 8 9 1 11 12 } 13 } int x = 2 ; int y = 15; System . out . println System . out . println System . out . println System . out . println System . out . println System . out . println (x (x (x (x (x (x > y); >= y ) ; < y); = ( anoMichaelJackson +129) /5) ; 7 } 8 }
Código Java 4.64: VerificaValores.java

Compile e execute a classe VerificaValores
K19 / rafael / operadores$ javac VerificaValores . java K19 / rafael / operadores$ java VerificaValores true

Terminal 4.36: Compilando e executando a classe VerificaValores

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar8.zip

Exercício Complementar 4.9

284

www.k19.com.br

285
1 class UseOperadoresLogicos { 2 public static void main ( String [] args ) { 3 int q = 1 ; 4 int w = 5; 5 int e = 8; 6 int r = 11; 7 8 System . out . println ( q > w | e < r ) ; 9 System . out . println ( q > r || e < w ) ; 1 System . out . println ( q > e & w < r ) ; 11 System . out . println ( q > w && r < e ) ; 12 System . out . println ( q > w ^ e < r ) ; 13 } 14 }
Código Java 4.66: UseOperadoresLogicos.java

R ESPOSTAS

Compile e execute a classe UseOperadoresLogicos
K19 / rafael / operadores$ javac UseOperadoresLogicos . java K19 / rafael / operadores$ java UseOperadoresLogicos true false true false false

Terminal 4.37: Compilando e executando a classe UseOperadoresLogicos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar9.zip

Exercício Complementar 4.10

1 class UseTernarioNegacaoIncrementoDecremento { 2 public static void main ( String [] args ) { 3 int a = 1 ; 4 int b = 8; 5 6 System . out . println (( a < b ) ? a : b ) ; 7 System . out . println (!( a < b ) ? " Marcelo " : " Jonas " ) ; 8 System . out . println (( a < b ) ? a : ++ b ) ; 9 System . out . println (!( - - a == b ) ? a : b + 1) ; 1 } 11 }
Código Java 4.68: UseTernarioNegacaoIncrementoDecremento.java

Compile e execute a classe UseTernarioNegacaoIncrementoDecremento
K19 / rafael / operadores$ javac UseTernarioNegacaoIncrementoDecremento . java K19 / rafael / operadores$ java UseTernarioNegacaoIncrementoDecremento 8 Marcelo 9 1

Terminal 4.38: Compilando e executando a classe UseTernarioNegacaoIncrementoDecremento

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar1 .zip

www.facebook.com/k19treinamentos

285

R ESPOSTAS

286

Exercício Complementar 4.11

1 class GeraParcelas { 2 public static void main ( String [] args ) { 3 java . text . SimpleDateFormat sdf = new java . text . SimpleDateFormat ( " dd / MM / yyyy " ) ; 4 5 java . util . Calendar p = new java . util . GregorianCalendar (2 15 , 7 , 15) ; 6 System . out . println ( sdf . format ( p . getTime () ) ) ; 7 8 p . add ( java . util . Calendar . DAY_OF_MONTH , 3 ) ; 9 System . out . println ( sdf . format ( p . getTime () ) ) ; 1 11 p . add ( java . util . Calendar . DAY_OF_MONTH , 3 ) ; 12 System . out . println ( sdf . format ( p . getTime () ) ) ; 13 14 p . add ( java . util . Calendar . DAY_OF_MONTH , 3 ) ; 15 System . out . println ( sdf . format ( p . getTime () ) ) ; 16 } 17 }
Código Java 4.69: GeraParcelas.java

Compile e execute a classe GeraParcelas
K19 / rafael / operadores$ javac GeraParcelas . java K19 / rafael / operadores$ java GeraParcelas 15/ 8/2 15 14/ 9/2 15 14/1 /2 15 13/11/2 15

Terminal 4.39: Compilando e executando a classe GeraParcelas

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar11.zip

Exercício Complementar 4.12

1 class UseOperadoresAritmeticos 2 { 3 static void Main () 4 { 5 int x = 3 + 8; 6 int y = 7 - 3; 7 int z = 4 * 3; 8 int q = 8 / 2; 9 int w = 9 % 4; 1 11 System . Console . WriteLine ( x ) ; 12 System . Console . WriteLine ( y ) ; 13 System . Console . WriteLine ( z ) ; 14 System . Console . WriteLine ( q ) ; 15 System . Console . WriteLine ( w ) ; 16 } 17 }
Código C# 4.43: UseOperadoresAritmeticos.cs

Compile e execute a classe UseOperadoresAritmeticos
286
www.k19.com.br

287
C :\ Users \ K19 \ rafael \ operadores > csc UseOperadoresAritmeticos . cs C :\ Users \ K19 \ rafael \ operadores > UseOperadoresAritmeticos . exe 11 4 12 4 1

R ESPOSTAS

Terminal 4.40: Compilando e executando a classe UseOperadoresAritmeticos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar12.zip

Exercício Complementar 4.13

1 class IdadeMedia 2 { 3 static void Main () 4 { 5 double idadeDoRafael = 27; 6 double idadeDoJonas = 29; 7 double idadeDoMarcelo = 27; 8 9 double idadeMedia = ( idadeDoRafael + idadeDoJonas + idadeDoMarcelo ) /3; 1 11 System . Console . WriteLine ( " Idade Média : " + idadeMedia ) ; 12 } 13 }
Código C# 4.44: IdadeMedia.cs

Compile e execute a classe IdadeMedia
C :\ Users \ K19 \ rafael \ operadores > csc IdadeMedia . cs C :\ Users \ K19 \ rafael \ operadores > IdadeMedia . exe Idade Média : 27.6666666666667

Terminal 4.41: Compilando e executando a classeIdadeMedia

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar13.zip

Exercício Complementar 4.14

1 class UseDivisaoCasting 2 { 3 static void Main () 4 { 5 int x = 41; 6 int y = 2; 7 8 System . Console . WriteLine ( x / y ) ; 9 System . Console . WriteLine (( double ) x / y ) ; 1 } 11 }
Código C# 4.46: UseDivisaoCasting.cs

www.facebook.com/k19treinamentos

287

R ESPOSTAS

288

Compile e execute a classe UseDivisaoCasting
C :\ Users \ K19 \ rafael \ operadores > csc UseDivisaoCasting . cs C :\ Users \ K19 \ rafael \ operadores > UseDivisaoCasting . exe 2 2 .5

Terminal 4.42: Compilando e executando a classe UseDivisaoCasting

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar14.zip

Exercício Complementar 4.15

1 class UseConcatenacao 2 { 3 static void Main () 4 { 5 string s1 = " Rafael " ; 6 string s2 = " Jonas " ; 7 string s3 = " Marcelo " ; 8 string s4 = " Cosentino " ; 9 string s5 = " Hirata " ; 1 string s6 = " Martins " ; 11 12 System . Console . WriteLine ( s1 + " " + s4 ) ; 13 System . Console . WriteLine ( s2 + " " + s5 ) ; 14 System . Console . WriteLine ( s3 + " " + s6 ) ; 15 } 16 }
Código Java 4.70: UseConcatenacao.java

Compile e execute a classe UseConcatenacao
C :\ Users \ K19 \ rafael \ operadores > csc UseConcatenacao . cs C :\ Users \ K19 \ rafael \ operadores > UseConcatenacao . exe Rafael Cosentino Jonas Hirata Marcelo Martins

Terminal 4.43: Compilando e executando a classe UseConcatenacao

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar15.zip

Exercício Complementar 4.16

1 class UseOperadoresAtribuicao 2 { 3 static void Main () 4 { 5 int x = 5; 6 System . Console . WriteLine ( x ) ; 7 x += 1 ; 8 System . Console . WriteLine ( x ) ; 9 x -= 3;

288

www.k19.com.br

289
1 11 12 13 14 15 16 17 18 19 2 21 } 22 } System . Console . WriteLine ( x ) ; x *= 4; System . Console . WriteLine ( x ) ; x /= 8; System . Console . WriteLine ( x ) ; x %= 5; System . Console . WriteLine ( x ) ; x ++; System . Console . WriteLine ( x ) ; x - -; System . Console . WriteLine ( x ) ;

R ESPOSTAS

Código C# 4.49: UseOperadoresAtribuicao.cs

Compile e execute a classe UseOperadoresAtribuicao
C :\ Users \ K19 \ rafael \ operadores > csc UseOperadoresAtribuicao . cs C :\ Users \ K19 \ rafael \ operadores > UseOperadoresAtribuicao . exe 5 15 12 48 6 1 2 1

Terminal 4.44: Compilando e executando a classe UseOperadoresAtribuicao

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar16.zip

Exercício Complementar 4.17

1 class NumeroTelefone 2 { 3 static void Main () 4 { 5 int x = 23; 6 x += 8; 7 System . Console . WriteLine ( x ) ; 8 x -= 7; 9 System . Console . WriteLine ( x ) ; 1 x /= 3; 11 System . Console . WriteLine ( x ) ; 12 x *= 7; 13 System . Console . WriteLine ( x ) ; 14 x %= 9; 15 System . Console . WriteLine ( x ) ; 16 x += 1; 17 System . Console . WriteLine ( x ) ; 18 } 19 }
Código C# 4.50: NumeroTelefone.cs

Compile e execute a classe NumeroTelefone
C :\ Users \ K19 \ rafael \ operadores > csc NumeroTelefone . cs C :\ Users \ K19 \ rafael \ operadores > NumeroTelefone . exe

www.facebook.com/k19treinamentos

289

R ESPOSTAS
31 24 8 56 2 3

290

Terminal 4.45: Compilando e executando a classeNumeroTelefone

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar17.zip

Exercício Complementar 4.18

1 class UseOperadoresRelacionais 2 { 3 static void Main () 4 { 5 int x = 2 ; 6 int y = 15; 7 8 System . Console . WriteLine ( x 9 System . Console . WriteLine ( x 1 System . Console . WriteLine ( x 11 System . Console . WriteLine ( x 12 System . Console . WriteLine ( x 13 System . Console . WriteLine ( x 14 } 15 }

> y); >= y ) ; < y); csc UseOperadoresRelacionais . cs C :\ Users \ K19 \ rafael \ operadores > UseOperadoresRelacionais . exe True True False False False True

Terminal 4.46: Compilando e executando a classe UseOperadoresRelacionais

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar18.zip

Exercício Complementar 4.19

1 class VerificaValores 2 { 3 static void Main () 4 { 5 int anoTorreGemeas = 2 1; 6 int anoMichaelJackson = 2 9; 7 8 System . Console . WriteLine (( anoTorreGemeas +19) /4 >= ( anoMichaelJackson +129) /5) ; 9 }

290

www.k19.com.br

291
1 }
Código C# 4.53: VerificaValores.cs

R ESPOSTAS

Compile e execute a classe VerificaValores
C :\ Users \ K19 \ rafael \ operadores > csc VerificaValores . cs C :\ Users \ K19 \ rafael \ operadores > VerificaValores . exe True

Terminal 4.47: Compilando e executando a classeVerificaValores

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar19.zip

Exercício Complementar 4.20

1 class UseOperadoresLogicos 2 { 3 static void Main () 4 { 5 int q = 1 ; 6 int w = 5; 7 int e = 8; 8 int r = 11; 9 1 System . Console . WriteLine ( q 11 System . Console . WriteLine ( q 12 System . Console . WriteLine ( q 13 System . Console . WriteLine ( q 14 System . Console . WriteLine ( q 15 } 16 }

> > > > >

w r e w w

| e < r); || e < w ) ; & w < r); && r < e ) ; ^ e < r);

Código C# 4.55: UseOperadoresLogicos.cs

Compile e execute a classe UseOperadoresLogicos
C :\ Users \ K19 \ rafael \ operadores > csc UseOperadoresLogicos . cs C :\ Users \ K19 \ rafael \ operadores > UseOperadoresLogicos . exe True False True False False

Terminal 4.48: Compilando e executando a classe UseOperadoresLogicos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar2 .zip

Exercício Complementar 4.21

1 class UseTernarioNegacaoIncrementoDecremento 2 { 3 static void Main ()

www.facebook.com/k19treinamentos

291

R ESPOSTAS
4 { 5 int a = 1 ; 6 int b = 8; 7 8 System . Console . WriteLine (( a < b ) ? a : b ) ; 9 System . Console . WriteLine (!( a < b ) ? " Marcelo " : " Jonas " ) ; 1 System . Console . WriteLine (( a < b ) ? a : ++ b ) ; 11 System . Console . WriteLine (!( - - a == b ) ? a : b + 1) ; 12 } 13 }
Código C# 4.57: UseTernarioNegacaoIncrementoDecremento.cs

292

Compile e execute a classe UseTernarioNegacaoIncrementoDecremento
C :\ Users \ K19 \ rafael \ operadores > csc UseTernarioNegacaoIncrementoDecremento . cs C :\ Users \ K19 \ rafael \ operadores > UseTernarioNegacaoIncrementoDecremento . exe 8 Marcelo 9 1

Terminal 4.49: Compilando e executando a classe UseTernarioNegacaoIncrementoDecremento

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-operadores-complementar21.zip

Exercício Complementar 4.22

1 class GeraParcelas 2 { 3 static void Main () 4 { 5 System . DateTime p = new System . DateTime (2 15 , 8 , 15) ; 6 System . Console . WriteLine ( p . ToString ( " dd / MM / yyyy " ) ) ; 7 8 p = p . AddDays (3 ) ; 9 System . Console . WriteLine ( p . ToString ( " dd / MM / yyyy " ) ) ; 1 11 p = p . AddDays (3 ) ; 12 System . Console . WriteLine ( p . ToString ( " dd / MM / yyyy " ) ) ; 13 14 p = p . AddDays (3 ) ; 15 System . Console . WriteLine ( p . ToString ( " dd / MM / yyyy " ) ) ; 16 } 17 }
Código C# 4.58: GeraParcelas.cs

Compile e execute a classe GeraParcelas
C :\ Users \ K19 \ rafael \ operadores > csc GeraParcelas . cs C :\ Users \ K19 \ rafael \ operadores > GeraParcelas . exe 15/ 8/2 15 14/ 9/2 15 14/1 /2 15 13/11/2 15

Terminal 4.50: Compilando e executando a classe GeraParcelas

Arquivo: https://github.com/K19/K19-Exercicios/archive/k
292

1-operadores-complementar22.zip

www.k19.com.br

293

R ESPOSTAS

Questão 4.1 d Questão 4.2 c Questão 4.3 e Questão 4.4 b Questão 4.5 a Questão 4.6 e Questão 4.7 d Questão 4.8 b Questão 4.9 e Questão 4.10 c Questão 4.11

www.facebook.com/k19treinamentos

293

R ESPOSTAS

294

a Exercício Complementar 5.1

1 class ComparaValores { 2 public static void main ( String [] args ) { 3 double primeiro = Math . random () ; 4 double segundo = Math . random () ; 5 6 System . out . println ( " Primeiro : " + primeiro ) ; 7 System . out . println ( " Segundo : " + segundo ) ; 8 9 if ( primeiro < segundo ) { 1 System . out . println ( " Primeiro > Segundo " ) ; 11 } else if ( primeiro > segundo ) { 12 System . out . println ( " Segundo > Primeiro " ) ; 13 } else { 14 System . out . println ( " Primeiro = Segundo " ) ; 15 } 16 } 17 }
Código Java 5.119: ComparaValores.java

Compile e execute a classe ComparaValores
K19 / rafael / controle - de - fluxo$ javac ComparaValores . java K19 / rafael / controle - de - fluxo$ java ComparaValores Primeiro : .129763492443489 Segundo : . 5 6741 41553552 Primeiro > Segundo K19 / rafael / controle - de - fluxo$ java ComparaValores Primeiro : .16979575246475298 Segundo : .723 291214946 17 Segundo > Primeiro K19 / rafael / controle - de - fluxo$ java ComparaValores Primeiro : .8885443635299185 Segundo : .8885443635299185 Primeiro = Segundo

Terminal 5.91: Compilando e executando a classe ComparaValores

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar1.zip

Exercício Complementar 5.2

1 class BlocoDeAstericos { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 5; i ++) { 4 System . out . println ( " ***************** " ) ; 5 } 6 } 7 }
Código Java 5.121: BlocoDeAstericos.java

294

www.k19.com.br

295

R ESPOSTAS

Compile e execute a classe BlocoDeAstericos
K19 / rafael / controle - de - fluxo$ javac BlocoDeAstericos . java K19 / rafael / controle - de - fluxo$ java BlocoDeAstericos ***************** ***************** ***************** ***************** *****************

Terminal 5.92: Compilando e executando a classe BlocoDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar2.zip

Exercício Complementar 5.3

1 class TrianguloDeAstericos { 2 public static void main ( String [] args ) { 3 String s = " * " ; 4 for ( int i = ; i < 6; i ++) { 5 System . out . println ( s ) ; 6 s += " * " ; 7 } 8 } 9 }
Código Java 5.123: TrianguloDeAstericos.java

Compile e execute a classe TrianguloDeAstericos
K19 / rafael / controle - de - fluxo$ javac TrianguloDeAstericos . java K19 / rafael / controle - de - fluxo$ java TrianguloDeAstericos * ** *** **** ***** ******

Terminal 5.93: Compilando e executando a classe TrianguloDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar3.zip

Exercício Complementar 5.4

1 class TresTriangulosDeAstericos { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 3; i ++) { 4 String s = " * " ; 5 for ( int j = ; j < 6; j ++) { 6 System . out . println ( s ) ; 7 s += " * " ; 8 } 9 } 1 } 11 }

www.facebook.com/k19treinamentos

295

R ESPOSTAS

296

Código Java 5.125: TresTriangulosDeAstericos.java

Compile e execute a classe TresTriangulosDeAstericos
K19 / rafael / controle - de - fluxo$ javac TresTriangulosDeAstericos . java K19 / rafael / controle - de - fluxo$ java TresTriangulosDeAstericos * ** *** **** ***** ****** * ** *** **** ***** ****** * ** *** **** ***** ******

Terminal 5.94: Compilando e executando a classe TresTriangulosDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar4.zip

Exercício Complementar 5.5

1 class LosangoDeAstericos { 2 public static void main ( String [] args ) { 3 String s1 = " " ; 4 String s2 = " ********** " ; 5 for ( int i = ; i < 5; i ++) { 6 System . out . print ( s1 ) ; 7 System . out . println ( s2 ) ; 8 s1 += " " ; 9 } 1 } 11 }
Código Java 5.127: LosangoDeAstericos.java

Compile e execute a classe LosangoDeAstericos
K19 / rafael / controle - de - fluxo$ javac LosangoDeAstericos . java K19 / rafael / controle - de - fluxo$ java LosangoDeAstericos ********** ********** ********** ********** **********

Terminal 5.95: Compilando e executando a classe LosangoDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar5.zip

296

www.k19.com.br

297

R ESPOSTAS

Exercício Complementar 5.6

1 class TresLosangosDeAstericos { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 3; i ++) { 4 String s1 = " " ; 5 String s2 = " ********** " ; 6 for ( int j = ; j < 5; j ++) { 7 System . out . print ( s1 ) ; 8 System . out . println ( s2 ) ; 9 s1 += " " ; 1 } 11 } 12 } 13 }
Código Java 5.129: TresLosangosDeAstericos.java

Compile e execute a classe TresLosangosDeAstericos
K19 / rafael / controle - de - fluxo$ javac TresLosangosDeAstericos . java K19 / rafael / controle - de - fluxo$ java TresLosangosDeAstericos ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** ********** **********

Terminal 5.96: Compilando e executando a classe TresLosangosDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar6.zip

Exercício Complementar 5.7

1 class CartoesDeEstacionamento { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i Primeiro C :\ Users \ K19 \ rafael \ controle - de - fluxo > ComparaValores . exe Primeiro : .661 854177867 Segundo : .661 854177867 Primeiro = Segundo

Terminal 5.103: Compilando e executando a classe ComparaValores

302

www.k19.com.br

303

R ESPOSTAS
1-controle-de-fluxo-complementar13.zip

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

Exercício Complementar 5.14

1 class BlocoDeAstericos 2 { 3 static void Main () 4 { 5 for ( int i = ; i < 5; i ++) 6 { 7 System . Console . WriteLine ( " ***************** " ) ; 8 } 9 } 1 }
Código C# 5.23: BlocoDeAstericos.cs

Compile e execute a classe BlocoDeAstericos
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc BlocoDeAstericos . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > BlocoDeAstericos . exe ***************** ***************** ***************** ***************** *****************

Terminal 5.104: Compilando e executando a classe BlocoDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar14.zip

Exercício Complementar 5.15

1 class TrianguloDeAstericos 2 { 3 static void Main () 4 { 5 string s = " * " ; 6 for ( int i = ; i < 6; i ++) 7 { 8 System . Console . WriteLine ( s ) ; 9 s += " * " ; 1 } 11 } 12 }
Código C# 5.25: TrianguloDeAstericos.cs

Compile e execute a classe TrianguloDeAstericos
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc TrianguloDeAstericos . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > TrianguloDeAstericos . exe * ** ***

www.facebook.com/k19treinamentos

303

R ESPOSTAS
**** ***** ******

304

Terminal 5.105: Compilando e executando a classe TrianguloDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar15.zip

Exercício Complementar 5.16

1 2 3 4 5 6 7 8 9 1 11 12 13 14 15

class TresTriangulosDeAstericos { static void Main () { for ( int i = ; i < 3; i ++) { string s = " * " ; for ( int j = ; j < 6; j ++) { System . Console . WriteLine ( s ) ; s += " * " ; } } } }
Código C# 5.27: TresTriangulosDeAstericos.cs

Compile e execute a classe TresTriangulosDeAstericos
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc TresTriangulosDeAstericos . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > TresTriangulosDeAstericos . exe * ** *** **** ***** ****** * ** *** **** ***** ****** * ** *** **** ***** ******

Terminal 5.106: Compilando e executando a classe TresTriangulosDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar16.zip

Exercício Complementar 5.17

1 class LosangoDeAstericos 2 {

304

www.k19.com.br

305
3 static void Main () 4 { 5 string s1 = " " ; 6 string s2 = " ********** " ; 7 for ( int i = ; i < 5; i ++) 8 { 9 System . Console . Write ( s1 ) ; 1 System . Console . WriteLine ( s2 ) ; 11 s1 += " " ; 12 } 13 } 14 }
Código C# 5.29: LosangoDeAstericos.cs

R ESPOSTAS

Compile e execute a classe LosangoDeAstericos
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc LosangoDeAstericos . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > LosangoDeAstericos . exe ********** ********** ********** ********** **********

Terminal 5.107: Compilando e executando a classe LosangoDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar17.zip

Exercício Complementar 5.18

1 class TresLosangosDeAstericos 2 { 3 static void Main () 4 { 5 for ( int i = ; i < 3; i ++) 6 { 7 string s1 = " " ; 8 string s2 = " ********** " ; 9 for ( int j = ; j < 5; j ++) 1 { 11 System . Console . Write ( s1 ) ; 12 System . Console . WriteLine ( s2 ) ; 13 s1 += " " ; 14 } 15 } 16 } 17 }
Código C# 5.31: TresLosangosDeAstericos.cs

Compile e execute a classe TresLosangosDeAstericos
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc TresTriangulosDeAstericos . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > TresTriangulosDeAstericos . exe ********** ********** ********** ********** ********** **********

www.facebook.com/k19treinamentos

305

R ESPOSTAS
********** ********** ********** ********** ********** ********** ********** ********** **********

306

Terminal 5.108: Compilando e executando a classe TresLosangosDeAstericos

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar18.zip

Exercício Complementar 5.19

1 class CartoesDeEstacionamento 2 { 3 static void Main () 4 { 5 for ( int i = 1; i Piramide . exe * *** ***** *******

308

Terminal 5.111: Compilando e executando a classe Piramide

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar21.zip

Exercício Complementar 5.22

1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29

class ArvoreNatal { static void Main () { int baseMaior = 15; for ( int m = 7; m ArvoreNatal . exe * *** ***** ******* ***** ******* ********* *********** ********* *********** ************* ***************

Terminal 5.112: Compilando e executando a classe ArvoreNatal

308

www.k19.com.br

309

R ESPOSTAS
1-controle-de-fluxo-complementar22.zip

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

Exercício Complementar 5.23

1 class ContaUns 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double numero = gerador . NextDouble () ; 8 System . Console . WriteLine ( numero ) ; 9 1 string s = " " + numero ; 11 int resposta = ; 12 13 for ( int i = ; i < s . Length ; i ++) 14 { 15 if ( s [ i ] == ’1 ’) 16 { 17 resposta ++; 18 } 19 } 2 21 System . Console . WriteLine ( resposta ) ; 22 } 23 }
Código C# 5.41: ContaUns.cs

Compile e execute a classe ContaUns
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc ContaUns . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > ContaUns . exe .46 299824165814 5 2 C :\ Users \ K19 \ rafael \ controle - de - fluxo > ContaUns . exe .24 215 67547111 8 4 C :\ Users \ K19 \ rafael \ controle - de - fluxo > ContaUns . exe .9189156985811225 4

Terminal 5.113: Compilando e executando a classe ContaUns

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar23.zip

Exercício Complementar 5.24

1 class JogoDaSomaImpar 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 int soma = ; 7 int quantidadeDeSeis = ;

www.facebook.com/k19treinamentos

309

R ESPOSTAS
8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 { 36 37 38 39 4 41 42 43 44 45 } 46 }

310

for ( int i = ; i < 1 ; i ++) { int numero = ( int ) ( gerador . NextDouble () * 6 + 1) ; System . Console . WriteLine ( " Número : " + numero ) ; if ( numero == 1) { continue ; } if ( numero == 6) { quantidadeDeSeis ++; } if ( quantidadeDeSeis == 2) { System . Console . WriteLine ( " Dois seis ! Você perdeu ! " ) ; break ; } soma += numero ; } if ( quantidadeDeSeis != 2) System . Console . WriteLine ( " Soma : " + soma ) ; if ( soma % 2 != ) { System . Console . WriteLine ( " Soma ímpar ! Você ganhou " ) ; } else { System . Console . WriteLine ( " Soma par ! Você perdeu " ) ; } }

Código C# 5.43: JogoDaSomaImpar.cs

Compile e execute a classe JogoDaSomaImpar
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc JogoDaSomaImpar . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > JogoDaSomaImpar . exe Número : 5 Número : 3 Número : 2 Número : 5 Número : 2 Número : 6 Número : 5 Número : 6 Dois seis ! Você perdeu ! C :\ Users \ K19 \ rafael \ controle - de - fluxo > JogoDaSomaImpar . exe Número : 1 Número : 2 Número : 2 Número : 1 Número : 6 Número : 1 Número : 4 Número : 3 Número : 2 Número : 2 Soma : 21 Soma ímpar ! Você ganhou C :\ Users \ K19 \ rafael \ controle - de - fluxo > JogoDaSomaImpar . exe Número : 4

310

www.k19.com.br

311
Número : 4 Número : 2 Número : 4 Número : 3 Número : 5 Número : 5 Número : 3 Número : 6 Número : 2 Soma : 38 Soma par ! Você perdeu

R ESPOSTAS

Terminal 5.114: Compilando e executando a classe JogoDaSomaImpar

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-controle-de-fluxo-complementar24.zip

Questão 5.1 a Questão 5.2 c Questão 5.3 e Questão 5.4 d Questão 5.5 d Questão 5.6 e Questão 5.7 a Questão 5.8 d

www.facebook.com/k19treinamentos

311

R ESPOSTAS

312

Questão 5.9 d Questão 5.10 e Questão 5.11 c Exercício Complementar 6.1

1 class GeraradorDeGabarito { 2 public static void main ( String [] args ) { 3 int [] gabarito = new int [1 ]; 4 for ( int i = ; i < gabarito . length ; i ++) { 5 gabarito [ i ] = ( int ) ( Math . random () * 3 + 1) ; 6 System . out . print ( gabarito [ i ] + " " ) ; 7 } 8 System . out . println ( " gabarito " ) ; 9 } 1 }
Código Java 6.22: GeraradorDeGabarito.java

Compile e execute a classe GeraradorDeGabarito
K19 / rafael / arrays$ javac GeraradorDeGabarito . java K19 / rafael / arrays$ java GeraradorDeGabarito 3 3 2 3 1 3 3 2 2 1 gabarito

Terminal 6.21: Compilando e executando a classe GeraradorDeGabarito

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar1.zip

Exercício Complementar 6.2

1 class GeraradorDeRespostasAleatorias { 2 public static void main ( String [] args ) { 3 int [][] respostas = new int [5][1 ]; 4 for ( int i = ; i < respostas . length ; i ++) { 5 for ( int j = ; j < respostas [ i ]. length ; j ++) { 6 respostas [ i ][ j ] = ( int ) ( Math . random () * 3 + 1) ; 7 System . out . print ( respostas [ i ][ j ] + " " ) ; 8 } 9 System . out . println ( " aluno " + ( i + 1) ) ; 1 } 11 }

312

www.k19.com.br

313
12 }
Código Java 6.24: GeraradorDeRespostasAleatorias.java

R ESPOSTAS

Compile e execute a classe GeraradorDeRespostasAleatorias
K19 / rafael / arrays$ javac GeraradorDeRespostasAleatorias . java K19 / rafael / arrays$ java GeraradorDeRespostasAleatorias 1 1 1 1 3 1 3 3 3 1 aluno 1 2 3 3 1 3 2 3 1 2 1 aluno 2 1 1 3 1 3 3 3 2 1 3 aluno 3 3 2 1 2 3 1 3 3 2 1 aluno 4 2 3 2 2 3 2 3 3 2 1 aluno 5

Terminal 6.22: Compilando e executando a classe GeraradorDeRespostasAleatorias

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar2.zip

Exercício Complementar 6.3

1 class CorretorDeProva { 2 public static void main ( String [] args ) { 3 int [] gabarito = new int [1 ]; 4 5 for ( int i = ; i < gabarito . length ; i ++) { 6 gabarito [ i ] = ( int ) ( Math . random () * 3 + 1) ; 7 System . out . print ( gabarito [ i ] + " " ) ; 8 } 9 System . out . println ( " gabarito " ) ; 1 11 int [][] respostas = new int [5][1 ]; 12 13 for ( int i = ; i < respostas . length ; i ++) { 14 for ( int j = ; j < respostas [ i ]. length ; j ++) { 15 respostas [ i ][ j ] = ( int ) ( Math . random () * 3 + 1) ; 16 System . out . print ( respostas [ i ][ j ] + " " ) ; 17 } 18 System . out . println ( " aluno " + ( i + 1) ) ; 19 } 2 21 System . out . println ( " Resultado : " ) ; 22 for ( int i = ; i < respostas . length ; i ++) { 23 int acertos = ; 24 for ( int j = ; j < respostas [ i ]. length ; j ++) { 25 if ( gabarito [ j ] == respostas [ i ][ j ]) { 26 acertos ++; 27 } 28 } 29 System . out . println ( " Aluno " + ( i + 1) + " : " + acertos ) ; 3 } 31 } 32 }
Código Java 6.26: CorretorDeProva.java

Compile e execute a classe CorretorDeProva
K19 / rafael / arrays$ javac CorretorDeProva . java K19 / rafael / arrays$ java CorretorDeProva 3 3 2 3 1 3 3 2 2 1 gabarito 3 1 2 2 3 3 1 1 1 1 aluno 1

www.facebook.com/k19treinamentos

313

R ESPOSTAS
3 2 1 1 1 1 3 3 3 3 2 3 2 2 1 1 1 3 3 3 3 1 1 2 Resultado : Aluno 1: 4 Aluno 2: 4 Aluno 3: 4 Aluno 4: 3 Aluno 5: 5 3 2 2 1 2 1 1 2 1 3 1 1 2 3 1 1 aluno aluno aluno aluno 2 3 4 5

314

Terminal 6.23: Compilando e executando a classe CorretorDeProva

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar3.zip

Exercício Complementar 6.4

1 class ControleDeVagas { 2 public static void main ( String [] args ) { 3 boolean [][] vagas = new boolean [4][1 ]; 4 for ( int i = ; i < vagas . length ; i ++) { 5 for ( int j = ; j < vagas [ i ]. length ; j ++) { 6 vagas [ i ][ j ] = Math . random () < .5; 7 System . out . print ( vagas [ i ][ j ] ? " - " : " X " ) ; 8 } 9 System . out . println ( " andar " + ( i + 1) ) ; 1 } 11 } 12 }
Código Java 6.28: ControleDeVagas.java

Compile e execute a classe ControleDeVagas
K19 / rafael / arrays$ javac ControleDeVagas . java K19 / rafael / arrays$ java ControleDeVagas X X - X - - - X X - andar 1 X X - - - - X X - - andar 2 X - - - X - - - - X andar 3 X X - X X - - X X X andar 4

Terminal 6.24: Compilando e executando a classe ControleDeVagas

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar4.zip

Exercício Complementar 6.5

1 class Estacionamento { 2 public static void main ( String [] args ) { 3 boolean [][] vagas = new boolean [4][1 ]; 4 for ( int i = ; i < vagas . length ; i ++) { 5 for ( int j = ; j < vagas [ i ]. length ; j ++) { 6 vagas [ i ][ j ] = Math . random () < .5; 7 System . out . print ( vagas [ i ][ j ] ? " - " : " X " ) ; 8 } 9 System . out . println ( " andar " + ( i + 1) ) ; 1 }

314

www.k19.com.br

315
11 12 System . out . println ( " Vagas Livres " ) ; 13 for ( int i = ; i < vagas . length ; i ++) { 14 int vagasLivres = ; 15 for ( int j = ; j < vagas [ i ]. length ; j ++) { 16 if ( vagas [ i ][ j ]) { 17 vagasLivres ++; 18 } 19 } 2 System . out . println ( " Andar " + ( i + 1) + " : " + vagasLivres ) ; 21 } 22 } 23 }
Código Java 6.30: Estacionamento.java

R ESPOSTAS

Compile e execute a classe Estacionamento
K19 / rafael / arrays$ javac Estacionamento . java K19 / rafael / arrays$ java Estacionamento X X X X X X X - X X andar 1 X - X - X - X - X X andar 2 X X X - - X - X - - andar 3 - - X X X X - X - - andar 4 Vagas Livres Andar 1: 1 Andar 2: 4 Andar 3: 5 Andar 4: 5

Terminal 6.25: Compilando e executando a classe Estacionamento

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar5.zip

Exercício Complementar 6.6

1 class GeraradorDeGabarito 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 int [] gabarito = new int [1 ]; 7 for ( int i = ; i < gabarito . Length ; i ++) 8 { 9 gabarito [ i ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; 1 System . Console . Write ( gabarito [ i ] + " " ) ; 11 } 12 System . Console . WriteLine ( " gabarito " ) ; 13 } 14 }
Código C# 6.16: GeraradorDeGabarito.cs

Compile e execute a classe GeraradorDeGabarito
C :\ Users \ K19 \ rafael \ arrays > csc GeraradorDeGabarito . cs C :\ Users \ K19 \ rafael \ arrays > GeraradorDeGabarito . exe 3 3 2 3 1 3 3 2 2 1 gabarito

Terminal 6.26: Compilando e executando a classe GeraradorDeGabarito

www.facebook.com/k19treinamentos

315

R ESPOSTAS

316
1-arrays-complementar6.zip

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

Exercício Complementar 6.7

1 class GeraradorDeRespostasAleatorias 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 int [][] respostas = new int [5][]; 7 for ( int i = ; i < respostas . Length ; i ++) 8 { 9 respostas [ i ] = new int [1 ]; 1 for ( int j = ; j < respostas [ i ]. Length ; j ++) 11 { 12 respostas [ i ][ j ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; 13 System . Console . Write ( respostas [ i ][ j ] + " " ) ; 14 } 15 System . Console . WriteLine ( " aluno " + ( i + 1) ) ; 16 } 17 } 18 }
Código C# 6.18: GeraradorDeRespostasAleatorias.cs

Compile e execute a classe GeraradorDeRespostasAleatorias
C :\ Users \ K19 \ rafael \ arrays > csc GeraradorDeRespostasAleatorias . cs C :\ Users \ K19 \ rafael \ arrays > GeraradorDeRespostasAleatorias . exe 1 1 1 1 3 1 3 3 3 1 aluno 1 2 3 3 1 3 2 3 1 2 1 aluno 2 1 1 3 1 3 3 3 2 1 3 aluno 3 3 2 1 2 3 1 3 3 2 1 aluno 4 2 3 2 2 3 2 3 3 2 1 aluno 5

Terminal 6.27: Compilando e executando a classe GeraradorDeRespostasAleatorias

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar7.zip

Exercício Complementar 6.8

1 class CorretorDeProva 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 int [] gabarito = new int [1 ]; 8 9 for ( int i = ; i < gabarito . Length ; i ++) 1 { 11 gabarito [ i ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; 12 System . Console . Write ( gabarito [ i ] + " " ) ; 13 } 14 System . Console . WriteLine ( " gabarito " ) ; 15 16 int [][] respostas = new int [5][];

316

www.k19.com.br

317
17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 } 43 }

R ESPOSTAS

for ( int i = ; i < respostas . Length ; i ++) { respostas [ i ] = new int [1 ]; for ( int j = ; j < respostas [ i ]. Length ; j ++) { respostas [ i ][ j ] = ( int ) ( gerador . NextDouble () * 3 + 1) ; System . Console . Write ( respostas [ i ][ j ] + " " ) ; } System . Console . WriteLine ( " aluno " + ( i + 1) ) ; } System . Console . WriteLine ( " Resultado : " ) ; for ( int i = ; i < respostas . Length ; i ++) { int acertos = ; for ( int j = ; j < respostas [ i ]. Length ; j ++) { if ( gabarito [ j ] == respostas [ i ][ j ]) { acertos ++; } } System . Console . WriteLine ( " Aluno " + ( i + 1) + " : " + acertos ) ; }

Código C# 6.20: CorretorDeProva.cs

Compile e execute a classe CorretorDeProva
C :\ Users \ K19 \ rafael \ arrays > csc CorretorDeProva . cs C :\ Users \ K19 \ rafael \ arrays > CorretorDeProva . exe 3 3 2 3 1 3 3 2 2 1 gabarito 3 1 2 2 3 3 1 1 1 1 aluno 1 3 2 1 1 1 1 3 2 1 2 aluno 2 3 3 3 3 2 3 2 1 3 3 aluno 3 2 2 1 1 1 3 2 1 1 1 aluno 4 3 3 3 1 1 2 1 2 1 1 aluno 5 Resultado : Aluno 1: 4 Aluno 2: 4 Aluno 3: 4 Aluno 4: 3 Aluno 5: 5

Terminal 6.28: Compilando e executando a classe CorretorDeProva

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar8.zip

Exercício Complementar 6.9

1 class ControleDeVagas 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 bool [][] vagas = new bool [4][]; 7 for ( int i = ; i < vagas . Length ; i ++) 8 { 9 vagas [ i ] = new bool [1 ]; 1 for ( int j = ; j < vagas [ i ]. Length ; j ++) 11 {

www.facebook.com/k19treinamentos

317

R ESPOSTAS
12 vagas [ i ][ j ] = gerador . NextDouble () < .5; 13 System . Console . Write ( vagas [ i ][ j ] ? " - " : " X " ) ; 14 } 15 System . Console . WriteLine ( " andar " + ( i + 1) ) ; 16 } 17 } 18 }
Código C# 6.22: ControleDeVagas.cs

318

Compile e execute a classe ControleDeVagas
C :\ Users \ K19 \ rafael \ arrays > csc ControleDeVagas . cs C :\ Users \ K19 \ rafael \ arrays > ControleDeVagas . exe X X - X - - - X X - andar 1 X X - - - - X X - - andar 2 X - - - X - - - - X andar 3 X X - X X - - X X X andar 4

Terminal 6.29: Compilando e executando a classe ControleDeVagas

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar9.zip

Exercício Complementar 6.10

1 class Estacionamento 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 bool [][] vagas = new bool [4][]; 7 for ( int i = ; i < vagas . Length ; i ++) 8 { 9 vagas [ i ] = new bool [1 ]; 1 for ( int j = ; j < vagas [ i ]. Length ; j ++) 11 { 12 vagas [ i ][ j ] = gerador . NextDouble () < .5; 13 System . Console . Write ( vagas [ i ][ j ] ? " - " : " X " ) ; 14 } 15 System . Console . WriteLine ( " andar " + ( i + 1) ) ; 16 } 17 18 System . Console . WriteLine ( " Vagas Livres " ) ; 19 for ( int i = ; i < vagas . Length ; i ++) 2 { 21 int vagasLivres = ; 22 for ( int j = ; j < vagas [ i ]. Length ; j ++) 23 { 24 if ( vagas [ i ][ j ]) 25 { 26 vagasLivres ++; 27 } 28 } 29 System . Console . WriteLine ( " Andar " + ( i + 1) + " : " + vagasLivres ) ; 3 } 31 } 32 }
Código C# 6.24: Estacionamento.cs

Compile e execute a classe Estacionamento
318
www.k19.com.br

319
C :\ Users \ K19 \ rafael \ arrays > csc Estacionamento . cs C :\ Users \ K19 \ rafael \ arrays > Estacionamento . exe X X X X X X X - X X andar 1 X - X - X - X - X X andar 2 X X X - - X - X - - andar 3 - - X X X X - X - - andar 4 Vagas Livres Andar 1: 1 Andar 2: 4 Andar 3: 5 Andar 4: 5

R ESPOSTAS

Terminal 6.30: Compilando e executando a classe Estacionamento

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-arrays-complementar1 .zip

Questão 6.1 a Questão 6.2 b Questão 6.3 e Questão 6.4 a Questão 6.5 d Questão 6.6 e Exercício Complementar 7.1

1 class AnoBissexto { 2 public static void main ( String [] args ) { 3 boolean b = bissexto (2 ); 4 System . out . println ( " 2 " + b); 5

www.facebook.com/k19treinamentos

319

R ESPOSTAS
6 b = bissexto (2 12) ; 7 System . out . println ( " 2 12 " + b ) ; 8 9 b = bissexto (2 25) ; 1 System . out . println ( " 2 25 " + b ) ; 11 12 b = bissexto (21 ) ; 13 System . out . println ( " 21 " + b); 14 } 15 16 static boolean bissexto ( int ano ) { 17 return ano % 4 == || ( ano % 1 18 } 19 }

320

!=

&& ano % 4 ==

);

Código Java 7.22: AnoBissexto.java

Compile e execute a classe AnoBissexto
K19 / rafael / funcoes - ou - metodos$ javac AnoBissexto . java K19 / rafael / funcoes - ou - metodos$ java AnoBissexto 2 true 2 12 true 2 25 false 21 false

Terminal 7.20: Compilando e executando a classe AnoBissexto

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar1.zip

Exercício Complementar 7.2

1 class VerificaDatas { 2 public static void main ( String [] args ) { 3 boolean b = verificaData (29 , 2 , 21 ) ; 4 5 System . out . println ( " 29/ 2/21 - " + b); 6 7 b = verificaData (29 , 2 , 2 4) ; 8 9 System . out . println ( " 29/ 2/2 4 - " + b ) ; 1 11 b = verificaData (31 , 4 , 2 ); 12 13 System . out . println ( " 31/ 4/2 - " + b); 14 } 15 16 static boolean bissexto ( int ano ) { 17 return ano % 4 == || ( ano % 1 != && ano % 4 == ) ; 18 } 19 2 static boolean verificaData ( int dia , int mes , int ano ) { 21 int [] dias = {31 , 28 , 31 , 3 , 31 , 3 , 31 , 31 , 3 , 31 , 3 , 31}; 22 23 boolean b = bissexto ( ano ) ; 24 25 if ( b ) { 26 dias [1] = 29; 27 } 28 29 return ( dia >= 1 && dia = 1 && mes = 1; 3 }

320

www.k19.com.br

321
31 }
Código Java 7.24: VerificaDatas.java

R ESPOSTAS

Compile e execute a classe AnoBissexto
K19 / rafael / funcoes - ou - metodos$ javac VerificaDatas . java K19 / rafael / funcoes - ou - metodos$ java VerificaDatas 29/ 2/21 - false 29/ 2/2 4 - true 31/ 4/2 - false

Terminal 7.21: Compilando e executando a classe AnoBissexto

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar2.zip

Exercício Complementar 7.3

1 class Pascoa { 2 public static void main ( String [] args ) { 3 String s = pascoa (2 ); 4 System . out . println ( " Páscoa " + s ) ; 5 6 s = pascoa (2 12) ; 7 System . out . println ( " Páscoa " + s ) ; 8 9 s = pascoa (2 25) ; 1 System . out . println ( " Páscoa " + s ) ; 11 12 s = pascoa (21 ) ; 13 System . out . println ( " Páscoa " + s ) ; 14 } 15 16 static String pascoa ( int ano ) { 17 int a = ano % 19; 18 int b = ano / 1 ; 19 int c = ano % 1 ; 2 int d = b / 4; 21 int e = b % 4; 22 int f = ( b + 8) / 25; 23 int g = ( b - f + 1) / 3; 24 int h = (19 * a + b -d - g + 15) % 3 ; 25 int i = c / 4; 26 int k = c % 4; 27 int l = (32 + 2 * e + 2 * i - h - k ) % 7 ; 28 int m = ( a + 11 * h + 22 * l ) / 451; 29 3 int mes = ( h + l - 7 * m + 114) / 31; 31 int dia = (( h + l - 7 * m + 114) % 31) + 1; 32 33 return dia + " / " + mes + " / " + ano ; 34 } 35 }
Código Java 7.27: Pascoa.java

Compile e execute a classe Pascoa
K19 / rafael / funcoes - ou - metodos$ javac Pascoa . java K19 / rafael / funcoes - ou - metodos$ java Pascoa

www.facebook.com/k19treinamentos

321

R ESPOSTAS
Páscoa : Páscoa : Páscoa : Páscoa : 23/4/2 8/4/2 12 2 /4/2 25 28/3/21

322

Terminal 7.22: Compilando e executando a classe Pascoa

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar3.zip

Exercício Complementar 7.4

1 class DiaDaSemana { 2 public static void main ( String [] args ) { 3 int d1 = diaDaSemana (3 , 1 , 1984) ; 4 5 int d2 = diaDaSemana (2 , 4 , 1985) ; 6 7 int d3 = diaDaSemana (12 , 12 , 1982) ; 8 9 String [] dias = { 1 " domingo " , 11 " segunda " , 12 " terça " , 13 " quarta " , 14 " quinta " , 15 " sexta " , 16 " sábado " 17 }; 18 19 System . out . println ( " 3 /1 /1984 foi " + dias [ d1 ]) ; 2 21 System . out . println ( " 2/4/1985 foi " + dias [ d2 ]) ; 22 23 System . out . println ( " 12/12/1982 foi " + dias [ d3 ]) ; 24 } 25 26 static int diaDaSemana ( int dia , int mes , int ano ) { 27 int a = (14 - mes ) / 12; 28 int y = ano - a ; 29 int m = mes + 12 * a - 2; 3 int q = dia + 31 * m / 12 + y + y / 4 - y / 1 + y / 4 31 int d = q % 7; 32 33 return d ; 34 } 35 }
Código Java 7.30: Pascoa.java

;

Compile e execute a classe DiaDaSemana
K19 / rafael / funcoes - ou - metodos$ javac DiaDaSemana . java K19 / rafael / funcoes - ou - metodos$ java DiaDaSemana 3 /1 /1984 foi terça 2/4/1985 foi terça 12/12/1982 foi domingo

Terminal 7.23: Compilando e executando a classe DiaDaSemana

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar4.zip

322

www.k19.com.br

323

R ESPOSTAS

Exercício Complementar 7.5

1 class ExibeCalendario { 2 public static void main ( String [] args ) { 3 4 exibeCalendario (1 , 1984) ; 5 6 exibeCalendario (4 , 1985) ; 7 8 exibeCalendario (12 , 1982) ; 9 1 exibeCalendario (2 , 2 ); 11 12 } 13 14 static boolean bissexto ( int ano ) { 15 return ano % 4 == || ( ano % 1 != && ano % 4 == ) ; 16 } 17 18 static int diaDaSemana ( int dia , int mes , int ano ) { 19 int a = (14 - mes ) / 12; 2 int y = ano - a ; 21 int m = mes + 12 * a - 2; 22 int q = dia + 31 * m / 12 + y + y / 4 - y / 1 + y / 4 ; 23 int d = q % 7; 24 25 return d ; 26 } 27 28 static void exibeCalendario ( int mes , int ano ) { 29 int [] dias = {31 , 28 , 31 , 3 , 31 , 3 , 31 , 31 , 3 , 31 , 3 , 31}; 3 31 boolean b = bissexto ( ano ) ; 32 33 if ( b ) { 34 dias [1] = 29; 35 } 36 37 int d = diaDaSemana (1 , mes , ano ) ; 38 39 System . out . println ( " Dom Seg Ter Qua Qui Sex Sab " ) ; 4 41 // espaços da primeira semana 42 for ( int i = ; i < d ; i ++) { 43 System . out . print ( " "); 44 } 45 46 for ( int i = 1; i csc AnoBissexto . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > AnoBissexto . exe 2 True 2 12 True 2 25 False 21 False

R ESPOSTAS

Terminal 7.26: Compilando e executando a classe AnoBissexto

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar6.zip

Exercício Complementar 7.7

1 class VerificaDatas 2 { 3 static void Main () 4 { 5 bool b = verificaData (29 , 2 , 21 ) ; 6 7 System . Console . WriteLine ( " 29/ 2/21 - " + b); 8 9 b = verificaData (29 , 2 , 2 4) ; 1 11 System . Console . WriteLine ( " 29/ 2/2 4 - " + b ) ; 12 13 b = verificaData (31 , 4 , 2 ); 14 15 System . Console . WriteLine ( " 31/ 4/2 - " + b); 16 } 17 18 static bool bissexto ( int ano ) 19 { 2 return ano % 4 == || ( ano % 1 != && ano % 4 == ) ; 21 } 22 23 static bool verificaData ( int dia , int mes , int ano ) 24 { 25 int [] dias = {31 , 28 , 31 , 3 , 31 , 3 , 31 , 31 , 3 , 31 , 3 , 31}; 26 27 bool b = bissexto ( ano ) ; 28 29 if ( b ) 3 { 31 dias [1] = 29; 32 } 33 34 return ( dia >= 1 && dia = 1 && mes = 1; 35 } 36 }
Código C# 7.12: VerificaDatas.cs

Compile e execute a classe AnoBissexto
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc VerificaDatas . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > VerificaDatas . exe 29/ 2/21 - False 29/ 2/2 4 - True 31/ 4/2 - False

Terminal 7.27: Compilando e executando a classe AnoBissexto

www.facebook.com/k19treinamentos

325

R ESPOSTAS

326
1-funcoes-ou-metodos-complementar7.zip

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

Exercício Complementar 7.8

1 class Pascoa 2 { 3 static void Main () 4 { 5 string s = pascoa (2 ); 6 System . Console . WriteLine ( " Páscoa " + s ) ; 7 8 s = pascoa (2 12) ; 9 System . Console . WriteLine ( " Páscoa " + s ) ; 1 11 s = pascoa (2 25) ; 12 System . Console . WriteLine ( " Páscoa " + s ) ; 13 14 s = pascoa (21 ) ; 15 System . Console . WriteLine ( " Páscoa " + s ) ; 16 } 17 18 static string pascoa ( int ano ) 19 { 2 int a = ano % 19; 21 int b = ano / 1 ; 22 int c = ano % 1 ; 23 int d = b / 4; 24 int e = b % 4; 25 int f = ( b + 8) / 25; 26 int g = ( b - f + 1) / 3; 27 int h = (19 * a + b -d - g + 15) % 3 ; 28 int i = c / 4; 29 int k = c % 4; 3 int l = (32 + 2 * e + 2 * i - h - k ) % 7 ; 31 int m = ( a + 11 * h + 22 * l ) / 451; 32 33 int mes = ( h + l - 7 * m + 114) / 31; 34 int dia = (( h + l - 7 * m + 114) % 31) + 1; 35 36 return dia + " / " + mes + " / " + ano ; 37 } 38 }
Código C# 7.15: Pascoa.cs

Compile e execute a classe Pascoa
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc Pascoa . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > Pascoa . exe Páscoa : 23/4/2 Páscoa : 8/4/2 12 Páscoa : 2 /4/2 25 Páscoa : 28/3/21

Terminal 7.28: Compilando e executando a classe Pascoa

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar8.zip

Exercício Complementar 7.9
326
www.k19.com.br

327

R ESPOSTAS

1 class DiaDaSemana 2 { 3 static void Main () 4 { 5 int d1 = diaDaSemana (3 , 1 , 1984) ; 6 7 int d2 = diaDaSemana (2 , 4 , 1985) ; 8 9 int d3 = diaDaSemana (12 , 12 , 1982) ; 1 11 string [] dias = 12 { 13 " domingo " , 14 " segunda " , 15 " terça " , 16 " quarta " , 17 " quinta " , 18 " sexta " , 19 " sábado " 2 }; 21 22 System . Console . WriteLine ( " 3 /1 /1984 foi " + dias [ d1 ]) ; 23 24 System . Console . WriteLine ( " 2/4/1985 foi " + dias [ d2 ]) ; 25 26 System . Console . WriteLine ( " 12/12/1982 foi " + dias [ d3 ]) ; 27 } 28 29 static int diaDaSemana ( int dia , int mes , int ano ) 3 { 31 int a = (14 - mes ) / 12; 32 int y = ano - a ; 33 int m = mes + 12 * a - 2; 34 int q = dia + 31 * m / 12 + y + y / 4 - y / 1 + y / 4 35 int d = q % 7; 36 37 return d ; 38 } 39 }
Código C# 7.18: Pascoa.cs

;

Compile e execute a classe DiaDaSemana
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc DiaDaSemana . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > DiaDaSemana . exe 3 /1 /1984 foi terça 2/4/1985 foi terça 12/12/1982 foi domingo

Terminal 7.29: Compilando e executando a classe DiaDaSemana

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar9.zip

Exercício Complementar 7.10

1 class ExibeCalendario 2 { 3 static void Main () 4 {

www.facebook.com/k19treinamentos

327

R ESPOSTAS
5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 43 44 45 46 47 48 49 5 51 52 53 54 55 56 57 58 59 6 61 62 63 64 65 66 67 68 69 7 }

328

exibeCalendario (1 , 1984) ; exibeCalendario (4 , 1985) ; exibeCalendario (12 , 1982) ; exibeCalendario (2 , 2 } static bool bissexto ( int ano ) { return ano % 4 == || ( ano % 1 } );

!=

&& ano % 4 ==

);

static int diaDaSemana ( int dia , int mes , int ano ) { int a = (14 - mes ) / 12; int y = ano - a ; int m = mes + 12 * a - 2; int q = dia + 31 * m / 12 + y + y / 4 - y / 1 + y / 4 int d = q % 7; return d ; }

;

static void exibeCalendario ( int mes , int ano ) { int [] dias = {31 , 28 , 31 , 3 , 31 , 3 , 31 , 31 , 3 , 31 , 3 , 31}; bool b = bissexto ( ano ) ; if ( b ) { dias [1] = 29; } int d = diaDaSemana (1 , mes , ano ) ; System . Console . WriteLine ( " Dom Seg Ter Qua Qui Sex Sab " ) ; // espaços da primeira semana for ( int i = ; i < d ; i ++) { System . Console . Write ( " "); } for ( int i = 1; i csc ExibeCalendario . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > ExibeCalendario . exe Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 ---------------------------Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 ---------------------------Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 ---------------------------Dom Seg Ter Qua Qui Sex Sab 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 ----------------------------

Terminal 7.31: Compilando e executando a classe ExibeCalendario

Arquivo: https://github.com/K19/K19-Exercicios/archive/k

1-funcoes-ou-metodos-complementar1 .zip

Questão 7.1 c Questão 7.2 a Questão 7.3 e Questão 7.4 d Questão 7.5 e

www.facebook.com/k19treinamentos

329

R ESPOSTAS

330

Questão 7.6 b

330

www.k19.com.br

Similar Documents

Free Essay

Componentes vs Serviços

...regulamentações de mercado, globalização, outsourcing, novas tecnologias, etc.; No longo prazo, quase todos os aspectos de um negócio são suscetíveis a mudanças. 2 IBM Global CEO Study 2008 O conhecimento coletivo dos CEOs apontou para os principais desafios da “Empresa do Futuro” Sumário do resultado das 1.130 entrevistas: As organizações são bombardeadas por mudanças, e muitas delas estão lutando para sobreviver; Os CEOs vêem os clientes cada vez mais exigentes não como ameaças, mas como uma oportunidade para se diferenciarem; Quase todos os CEOs estão adaptando seus modelos de negócio. E dois terços estão implementando grandes inovações; Os CEOs estão mudando agressivamente para projetos globais de negócio, alterando profundamente as capacidades e criando parcerias mais amplas. 1 Ávida por mudanças 2 Mais inovadora que a imaginação dos clientes 3 Globalmente integrada 4 Desbravadora por natureza 5 Genuína, não apenas generosa 3 A necessidade de mudança nos processos de negócio Ex: Processo de pedido de compra Depto. 4 A necessidade de mudança nos processos de negócio Ex: Processo de pedido de compra Cliente Depto. Mudança: Entrada de pedido de cliente via Web 5 A necessidade de mudança nos processos de negócio Ex: Processo de pedido de compra Cliente Depto. Serviço Compartilhado Mudança: Serviço compartilhado – ex. marketing, faturamento, jurídico 6 A necessidade de mudança nos...

Words: 2472 - Pages: 10

Free Essay

Fuzzy

...Lógica Fuzzi Americana – 2014 Resumo Considerando os problemas reais que cercam a sociedade hoje tanto nas indústrias, no comércio ou mesmo no dia a dia das pessoas, fica claro a ausência de certezas absolutas quanto a alguns aspectos. Heisenberg em 1927 já falava sobre o princípio da incerteza que serviu como alicerce principal da teoria quântica. Este princípio mais tarde iria auxiliar no desenvolvimento da lógica fuzzy, onde sua forma de raciocinar é muito semelhante ao modelo de raciocínio humano, baseado em aproximações e cercado de incertezas e suposições. Esses algoritmos são amplamente utilizados atualmente em diversas áreas como: robótica, automação de linhas de produção, simulações financeiras entre outras. O sistema lógico apresentado pela lógica fuzzy quando aplicado vai além do raciocínio booleano, pois busca atribuir graus para os elementos em questão de forma que a resposta contido ou não contido somente, não satisfaz e busca-se saber o quão contido ou o quão não contido esta determinado elemento. Sumário Introdução...................................................................................................................................1 O que é Lógica Fuzzi..................................................................................................................2 Raciocínio Dedutivo...................................................................................................................4 Raciocínio Indedutivo.............

Words: 1452 - Pages: 6

Free Essay

Programation of Machines

...Programação de Operações em Máquinas Alunos: Leticia Peixoto Abranches Christiano Michel Fernandes Freitas Artigo Proposição de heurísticas para a minimização do makespan e dos tempos de setup em um ambiente flow shop. Catalão, março de 2013 1) Introdução: Com a evolução da indústria o termo competitividade vem sendo abordado e desenvolvido de forma minuciosa. Não basta produzir ou simplesmente desenvolver um bom produto, é preciso ir além e saber explorar ao máximo a produtividade, criando assim um bom relacionamento com a cadeia de produção do setor. Esta pesquisa apresenta um estudo relacionado ao sequenciamento da produção, que por sua vez é uma linha de estudos da Pesquisa Operacional. O sequenciamento da produção é a ordenação das tarefas em cada máquina e leva em consideração uma gama de objetivos, tais como: redução dos tempos de setup, redução de atrasos, melhoria de fluxo entre outros. De acordo com Slack et al. (2009), considerando a abordagem do carregamento finita ou infinita, quando o trabalho chega, deve-se tomar decisões sobre a ordem em que as tarefas serão executadas. Essa atividade pode ser chamada de sequenciamento. Para se definir qual a ordem de operações a serem realizadas, usam-se regras de prioridade, como por exemplo: a regra Last In First Out ( LIFO), First In First Out ( FIFO), entre outras. Liddell(2009) aponta as funções básicas de um bom sistema de sequenciamento, entre elas: i) A possibilidade de programar cada máquina...

Words: 3078 - Pages: 13

Free Essay

Desenvolvimento de Jogo Em Java

...FACULDADE DE TECNOLOGIA DA ZONA LESTE DAVI BALBI CARVALHO LOPES Desenvolvimento de um jogo na linguagem de programação Java São Paulo 2009 DAVI BALBI CARVALHO LOPES Desenvolvimento de um jogo na linguagem de programação Java Monografia apresentada à Faculdade de Tecnologia da Zona Leste como requisito parcial para obtenção do título de Tecnólogo em Informática para Gestão de Negócios. Área de Concentração: Programação de jogos Orientador: Prof. Carvalho Neto São Paulo 2009 Antonio Rodrigues Nome: LOPES, Davi Balbi Carvalho Título: Desenvolvimento de um jogo na linguagem de programação Java Monografia apresentada à Faculdade de Tecnologia da Zona Leste como requisito parcial para obtenção do título de Tecnólogo em Informática para Gestão de Negócios. Aprovado em: Banca Examinadora: Prof. Instituição: Julgamento: Assinatura: Prof. Instituição: Julgamento: Assinatura: Prof. Instituição: Julgamento: Assinatura: RESUMO LOPES, Davi Balbi Carvalho. Desenvolvimento de um jogo na linguagem de programação Java. 2009. 73 f. Monografia - Faculdade de Tecnologia da Zona Leste, São Paulo, 2009. A linguagem de programação Java não é tradicionalmente usada no desenvolvimento de jogos para computadores. Este trabalho busca demonstrar o uso da linguagem com esse propósito por meio da criação de um jogo. Pesquisa bibliográfica foi usada com o fim de expor os conceitos...

Words: 8451 - Pages: 34

Free Essay

Towards an Efficient Inference Procedure Through Syntax Based Relevance.

...Em Busca de Procedimentos de Inferência Eficientes via Relevância por Sintaxe Joselyto Riani Orientadora: Profa. Dra. Renata Wassermann Dissertação apresentada ao Instituto de Matemática e Estatística da Universidade de São Paulo como parte dos requisitos para obtenção do título de Mestre em Ciências na área de Computação. Área de Concentração: Inteligência Artificial São Paulo Março / 2004 Em Busca de Procedimentos de Inferência Eficientes via Relevância por Sintaxe Joselyto Riani Este exemplar corresponde à redação final da dissertação de mestrado devidamente corrigida e defendida por Joselyto Riani e aprovada pela comissão julgadora.. Banca examinadora: Profa. Dra. Renata Wassermann (Orientadora) Prof. Dr. Marcelo Finger (IME-USP) Prof. Dr. Marcos Castilho (UFPR) São Paulo Março / 2004 Dedicatória A minha querida tia Lúcia. Agradecimentos Agradeço a Renata pelas longas manhãs e tardes de discussões e esclarecimentos, livros emprestados, depurações realizadas no texto (das mais diversas naturezas) e também pela paciência diante de meus inúmeros imprevistos e improvisos; além dos imensos documentos .pdf enviados para sua caixa postal. Agradeço a Hyperion por ter concedido espaço em minha agenda de trabalho para que eu pudesse participar das atividades do IME. Agradeço ao Flávio Ribeiro pelas incontáveis mensagens respondidas e livros emprestados (nos dias e horários mais inusitados: fins de semana, madrugadas, sextafeira...

Words: 25342 - Pages: 102

Free Essay

Processos, Que Processos?

...do Departamento de Administração Geral e Recursos Humanos da EAESP/FGV e Consultor. E-mail: jernesto@fgvsp.br RESUMO Este texto, uma continuação do artigo “As empresas são grandes coleções de processos” (Gonçalves, 2000), resume as diferenças entre as organizações tradicionais e as empresas estruturadas por processos, mostra os principais estágios em que as empresas podem estar no seu caminho em direção a organizações por processos e como identificar em qual deles a empresa está, estabelece as vantagens da gestão por processos sobre modelos tradicionais e apresenta argumentos objetivos e critérios que podem orientar a decisão das empresas pela mudança da sua maneira de organizar. ABSTRACT This text, a sequel of a previously published article (Gonçalves, 2000), states the differences between traditional organizations and process organizations. It shows the main stages in which companies may be on their way towards process organizations and how to identify the particular stage a company currently is. Besides, this article sets the advantages of managing by processes and presents objective arguments and criteria that can guide companies to make decisions about their organizational model. PALAVRAS-CHAVE Processos empresariais, processos de negócio, gestão por processos, organização por processos, dono do processo. KEY WORDS Processes, business processes, managing by processes, process organizations, process owner. 8 RAE - Revista de Administração de Empresas • Out...

Words: 7190 - Pages: 29

Free Essay

Cidade: Fixos E Fluxos

...nos fixos da cidade Sons, cores, tons, cheiros, imagens, palavras, personagens, dramas e cenas. Essa é a alucinante experiência de diferentes sensações provocadas pela emergência do novo modo de produção inaugurado pela técnica e pela mecânica da Primeira Revolução Industrial e desenvolvida pela Revolução Industrial Eletroeletrônica. A cidade é o suporte daquela explosão sensível, mas sua realidade de adensamento populacional, produção, reprodução e consumo de bens faz dela uma mídia que é sempre renovada ou renascida, ainda que utilize, para isso, distintos apêndices ou suportes, tecnológicos ou não. No momento em que os ambientes estão cada vez mais técnicos e as ações se deixam modelar mecânica e eletronicamente, ler a cidade como texto da cultura é um imperativo social e científico. Nesse mundo de ações e objetos que se reproduzem e multiplicam, criam-se neologismos para designar o mega-mundo feito de espaços dentro de espaços, sentidos dentro de sentidos, cidades dentro de cidades. Globalização e mundialização são os novos nomes que designam o complexo de variáveis que atinge as cidades, transformando-as em metrópoles mediadas e produzidas pela relação de múltiplas características econômicas e sociais que se expandem em uma complexa Torre de Babel. Nessa metáfora concentra-se a absoluta necessidade de representar e dar forma estável ao circuito de imagens e, sobretudo, à pluralidade imaginária que decorre da cidade atual que, na sua inexorável e rápida mudança, não se deixa...

Words: 4969 - Pages: 20

Free Essay

Introdução À Gestão

...Gestão de Empresas 1º Ano Introdução à Gestão 1º CADERNO TEÓRICO 2002/2003 EQUIPA DOCENTE: Vítor Hugo Ferreira 0 Índice 1 – A GESTÃO 1.1 1.2 1.3 CONCEITO DE GESTÃO PORQUÊ ESTUDAR A GESTÃO FUNÇÕES DO GESTORES 2 – A EVOLUÇÃO DO PENSAMENTO EM GESTÃO 2.1 ABORDAGEM CLÁSSICA 2.1.1 TAYLOR 2.1.2 FAYOL 2.1.3 MAX WEBER 2.1.4 HENRY FORD 2.2 ABORDAGEM COMPORTAMEN TAL 2.2.1 ABORDAGEM DAS RELAÇÕES HUMANAS 2.2.1.1 EXPERIÊNCIA DE HAWTHORNE 2.2.1.2 CONFRONTO ENTRE A ABORDAGEM CLÁSSICA E A 2.2.2 ABORDAGEM CIENTÍFICA DO COMPORTAMENTO 2.3 ABORDAGEM CIENTÍFICA/QUANTITATIVA 2.4 INTEGRAÇÃO DAS DIFERENTES ABORDAGENS 2.4.1 ABORDAGEM SISTÉMICA 2.4.2 ABORDAGEM CONTIGENCIAL 2.5 ANEXO - 100 ANOS DE GESTÃO 3 3.1 3.2 – AS ORGANIZAÇÕES CONCEITO O AMBIENTE DAS ORGANIZAÇÕES 3.2.1 O AMBIENTE 3.2.1.1. AMBIENTE INTERNO 3.2.1.1.1 NÍVEIS DE GESTÃO 3.2.1.1.2 APTIDÕES DOS GESTORES 3.2.1.1.3 PAPEIS DOS GESTORES 3.2.1.2 AMBIENTE EXTERNO 3.2.1.2.1 TRANSACCIONAL 3.2.1.2.2 CONTEXTUAL 3.3 OBJECTIVOS DA S ORGANIZAÇÕES 3.3.1 IMPORTÂNCIA DOS OBJECTIVOS 3.3.2 CARACTERÍSTICAS DOS OBJECTIVOS 3.3.3 CLASSIFICAÇÃO DOS OBJECTIVOS TEORIA DAS RELAÇÕES HUMANAS 4 – FUNÇÕES DA GESTÃO: PLANEAR , ORGANIZAR , CONTROLAR E LIDERAR 4.1 PLANEAR 4.1.1 PLANEAMENTO 4.1.1.1 ELEMENTOS DO PLANEAMENTO 4.1.1.2 QUEM DEVE PLANEAR? 4.1.1.3 POQUÊ PLANEAR? 4.1.1.4 ELEMENTOS DO PLANEAMENTO – DESCRIÇÃO 4.1.2 O PLANEAMENTO ESTRATÉGICO 4.1.2.1 CRESCIMENTO DO PLANEAMENTO ESTRATÉGICO 4.1.2.2 PROCESSO DE PLANEAMENTO ESTRATÉGICO ESTRATÉGIA...

Words: 44877 - Pages: 180

Free Essay

Comportamento Organizacional

...Colecção: Ferramentas para o Empreendedor Impressão: Fevereiro de 2008 Produção Gráfica e Paginação: EduWeb Edição: ANJE - Associação Nacional de Jovens Empresários e EduWeb Promotor: Parceiro: Co-financiado por: UNIÃO EUROPEIA - FUNDO SOCIAL EUROPEU , ESTADO PORTUGUÊS, POEFDS Governo da República Portuguesa Comportamento Organizacional 3 Índice Índice 7 22 39 53 70 Capítulo 1 - Liderança Capítulo 2 - Comunicação Capítulo 3 - Negociação e Mediação nas Organizações Capítulo 4 - Aprendizagem e Inovação Capítulo 5 - Trabalho de equipa Comportamento Organizacional 4 Introdução As Organizações são sistemas cujo grau de complexidade sendo variável, carecem de uma análise aprofundada de maneira a conseguir obter-se uma razoável visão e compreensão das mesmas. Enquanto sistema, uma organização é composta por vários subsistemas os quais se inter-relacionam e interinfluenciam de forma que o todo é maior do que a soma das suas partes ou elementos. Este princípio chave da teoria sistémica tem implicações directas na forma como as organizações são abordadas, estudadas e compreendidas. As organizações enquanto entidades vivas e dinâmicas devem possuir algumas capacidades, como sejam a capacidade de se renovarem, inovarem, aprenderem, ajustaremse às mudanças internas e externas, transformar informação em conhecimento, resolver problemas, acrescentar valor. As organizações tal como as concebemos na sua maior parte, são dotadas de estruturas que funcionam como o hardware no qual “correm”...

Words: 31216 - Pages: 125

Free Essay

Form

...Ana Maria Nogueira, Ana Teresa Penim, Carlos Barbosa de Oliveira, Carlos Fonseca, Fernando Ferreira, J. M. Marques Apolinário, João Cotter Salvado, José Serpa de Vasconcelos, Maria João Ferreira, Nuno Gama de Oliveira Pinto, Ruben Eiras, Teresa Souto, Vanda Vieira e Vitalino José Santos REVISÃO Laurinda Brandão ILUSTRAÇÕES Paulo Cintra e Plinfo Informação, Lda. REDAÇÃO E ASSINATURAS Departamento de Formação Profissional Direção das revistas DIRIGIR&FORMAR Tel.: 21 861 41 00 Ext.: 662342, 662719 e 662106 Fax: 21 861 46 21 Rua de Xabregas, n.º 52 – 1949-003 Lisboa E-mail: dirigir@iefp.pt DATA DE PUBLICAÇÃO outubro de 2012 PERIODICIDADE 4 números/ano CONCEÇÃO GRÁFICA E PAGINAÇÃO Plinfo Informação, Lda. Tel.: 217 936 265 Fax: 217 942 074 plinfo@plinfo.pt CAPA Rita Henriques IMPRESSÃO PERES-SOCTIP Indústrias gráficas, S. A. TIRAGEM 20 000 exemplares CONDIÇÕES DE ASSINATURA Enviar carta com nome completo, data de nascimento, morada, função profissional, empresa onde trabalha e respetiva área de atividade para: Rua de Xabregas, n.º 52 – 1949-003 Lisboa REGISTO Anotada na Entidade Reguladora para a Comunicação Social DEPÓSITO LEGAL 348445/12 ISSN 2182-7532 Todos os artigos assinados são de exclusiva responsabilidade dos autores, não coincidindo necessariamente com as opiniões do Conselho Diretivo do IEFP. É permitida a reprodução dos artigos publicados, para fins não comerciais, desde que indicada a fonte e informada a Revista. TEMA DE CAPA 03...

Words: 36963 - Pages: 148

Free Essay

Estrategia

...ESTRATÉGIAS DE MARKETING MARKETING MIX ANÁLISE DE MERCADO EXERCÍCIOS PRÁTICOS # 10 ## MANUAL DO FORMANDO MARKETING ESTRATÉGICO PARA PME’s Formação Prática ESTRATÉGIAS DE MARKETING MARKETING MIX ANÁLISE DE MERCADO EXERCÍCIOS PRÁTICOS 10 MANUAL DO FORMANDO MARKETING ESTRATÉGICO PARA PME’S FORMANDO Ficha Técnica Título l Marketing Estratégico para PME’s Autor l Future Trends Coordenação Técnica l Mónica Montenegro Coordenação Pedagógica l António Jorge Costa Mónica Montenegro Direcção Editorial l Future Trends Concepção Gráfica e Revisão l Central de Informação Composição e Acabamentos l Central de Informação Capa e Contracapa l Central de Informação Data de Edição l Abril de 2005 3 IDENTIFICAÇÃO Área profissional Este curso destina-se a gestores e outros quadros superiores que intervenham ou possam intervir no processo de tomada de decisões nas empresas em que se encontram integrados. Curso/Saída profissional O curso de Marketing estratégico para PME’s serve essencialmente para fornecer competências a indivíduos que exerçam ou pretendam exercer funções que impliquem tomada de decisões nas áreas de planeamento, bem como possibilitar o desenvolvimento de estratégias de marketing adequadas às PME’s. Nível de formação/qualificação Para a frequência deste curso, os formandos deverão possuir formação de nível IV ou nível V. Os formandos deverão ainda ter conhecimentos de inglês. Componente de formação Este curso tem inerente uma componente de formação...

Words: 51786 - Pages: 208

Free Essay

50 Shades

...Traduzido e Editado por 50tonsversaogrey Capítulo 1 - À primeira vista. Acabei de despachar Claude Bastille, ele esta de pé na porta e diz ―golfe, essa semana, Grey‖, diz ele, esfregando na minha cara o fato de que ele pode chutar minha bunda no campo de golfe. Ele é um dos melhores instrutores de artes marciais que existe, e treina-me muito bem desde que eu lhe pague bem por suas instruções. Ele chuta minha bunda muitas vezes como se esperasse que eu fosse lhe dar uma corrida com seu dinheiro. Ele era um candidato olímpico. Eu tenho trabalhado com ele todos os dias nos últimos dois meses já que tenho que gastar minha energia em excesso. Embora ele usasse para chutar a minha bunda, cinco dias por semana antes. Eu reservo outros tipos de trabalho para os fins de semana. Se eu pudesse chutar sua bunda no chão uma vez ou duas vezes por semana, seria o ponto alto do meu dia. Apesar de eu não gostar do ritmo do golfe, é o jogo de empresários, eu me esforço para fazer certo, e como isso acontece, muitas vezes, negócios são fechados nos campos de golfe. Eu faço uma carranca e olho, pelas janelas que vão do chão ao teto, para fora do meu escritório no vigésimo andar. O tempo é cinza como o meu humor, intragável. Eu tenho tudo sob controle, mas tem sido uma existência comum para mim ultimamente. Eu não tive um desvio nos últimos dois meses. Nenhum desafio emocionante e nada capturou meu interesse. Tudo está em ordem, e todos os meus assuntos sob controle. Os zumbidos do telefone...

Words: 187572 - Pages: 751