Professional Documents
Culture Documents
Lgica de Programao
Lgica de Programao
Esta apostila contm: 238 exerccios de xao. 82 exerccios complementares. 4 desaos. 61 questes de prova.
Sumrio Sobre a K19 Seguro Treinamento Termo de Uso Cursos 1 Introduo 1.1 O que um Computador? . . . . . . . 1.2 Formato Binrio . . . . . . . . . . . . . 1.3 Unidades . . . . . . . . . . . . . . . . . 1.4 Arquiteturas de Processadores . . . . . 1.5 O que um Programa? . . . . . . . . . 1.6 Linguagem de Mquina . . . . . . . . 1.7 Linguagem de Programao . . . . . . 1.8 Compilador . . . . . . . . . . . . . . . . 1.9 Mquinas Virtuais . . . . . . . . . . . . 1.10 Hello World em Java . . . . . . . . . . . 1.11 Hello World em C# . . . . . . . . . . . . 1.12 Mtodo Main . . . . . . . . . . . . . . . 1.13 Exerccios de Fixao Com Java . . . . 1.14 Exibindo mensagens . . . . . . . . . . 1.15 Comentrios . . . . . . . . . . . . . . . 1.16 Indentao . . . . . . . . . . . . . . . . 1.17 Engenharia Reversa (Contedo Extra) 1.18 Ofuscadores (Contedo Extra) . . . . . 1.19 Exerccios de Fixao Com Java . . . . 1.20 Erro: No Fechar os Blocos . . . . . . . 1.21 Erro: Trocar Maisculas e Minsculas 1.22 Erro: Esquecer o Ponto e Vrgula . . . 1.23 Erro: Esquecer o Main . . . . . . . . . 1.24 Exerccios de Fixao Com C# . . . . . 1.25 Exerccios Complementares . . . . . . 1.26 Desaos . . . . . . . . . . . . . . . . . . 1.27 Resumo do Captulo . . . . . . . . . . . 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
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmos 2.1 O que um Algoritmo? . . . . . . . . . . . . . 2.2 Como um algoritmo pode ser representado? 2.3 Exerccios de Fixao . . . . . . . . . . . . . . 2.4 Desaos . . . . . . . . . . . . . . . . . . . . . . Variveis 3.1 O que uma Varivel? . . . . . . . . . 3.2 Declarando variveis em Java ou C# 3.3 Tipos de Bsicos . . . . . . . . . . . . 3.4 String . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
ii
www.k19.com.br
iii
S UMRIO
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 (Contedo Extra) . . . . . . . . . . . . . . . . . Valores Literais . . . . . . . . . . . . . . . . . . . . . . . . . . Nmeros Aleatrios . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Converso de string . . . . . . . . . . . . . . . . . . . . . . . Convenes de nomenclatura . . . . . . . . . . . . . . . . . Regras de nomenclatura . . . . . . . . . . . . . . . . . . . . Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formatao de Data e Hora (Contedo Extra) . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . Erro: Variveis com nomes repetidos . . . . . . . . . . . . . Erro: Esquecer a inicializao de uma varivel local . . . . Erro: Trocar aspas simples por aspas duplas ou vice-versa Erro: Utilizar o separador decimal errado . . . . . . . . . . Erro: Valores incompatveis com os tipos das variveis . . Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . Exerccios Complementares . . . . . . . . . . . . . . . . . . Desaos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . 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 Aritmticos . . . . . . . . . . . . . . 4.3 Diviso Inteira . . . . . . . . . . . . . . . . . . . . 4.4 Concatenao de Strings . . . . . . . . . . . . . . 4.5 Exerccios de Fixao Com Java . . . . . . . . . . 4.6 Operadores de Atribuio . . . . . . . . . . . . . 4.7 Operadores Relacionais . . . . . . . . . . . . . . . 4.8 Operadores Lgicos . . . . . . . . . . . . . . . . . 4.9 Exerccios de Fixao Com Java . . . . . . . . . . 4.10 Operador ternrio ?: . . . . . . . . . . . . . . 4.11 Operador ! . . . . . . . . . . . . . . . . . . . . 4.12 Pr e Ps Incremento ou Pr e Ps Decremento 4.13 Exerccios de Fixao Com Java . . . . . . . . . . 4.14 Operaes com Strings . . . . . . . . . . . . . . . 4.15 Operaes com Data e Hora (Contedo Extra) . 4.16 Exerccios de Fixao Com Java . . . . . . . . . . 4.17 Erro: Utilizar operadores incompatveis . . . . . 4.18 Exerccios de Fixao Com C# . . . . . . . . . . . 4.19 Exerccios Complementares . . . . . . . . . . . . 4.20 Resumo do Captulo . . . . . . . . . . . . . . . . . 4.21 Prova . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
Controle de Fluxo 5.1 Instrues de Deciso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Instruo if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Instruo else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
www.facebook.com/k19treinamentos
S UMRIO
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
Instrues de Deciso Encadeadas . . . Exerccios de Fixao Com Java . . . . . Instrues de Repetio . . . . . . . . . Instruo while . . . . . . . . . . . . . . . Instruo for . . . . . . . . . . . . . . . . Instrues de Repetio Encadeadas . . Exerccios de Fixao Com Java . . . . . Instruo break . . . . . . . . . . . . . . Instruo continue . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . Blocos Sem Chaves . . . . . . . . . . . . Laos Innitos . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . Erro: No utilizar condies booleanas Erro: Excesso de ; . . . . . . . . . . . . Exerccios de Fixao Com C# . . . . . . Exerccios Complementares . . . . . . . Resumo do Captulo . . . . . . . . . . . . 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 Exerccios de Fixao Com Java . . . . 6.9 Erro: Acessar uma posio inexistente 6.10 Exerccios de Fixao Com C# . . . . . 6.11 Exerccios Complementares . . . . . . 6.12 Resumo do Captulo . . . . . . . . . . . 6.13 Prova . . . . . . . . . . . . . . . . . . . . Funes ou Mtodos 7.1 Parmetros . . . . . . . . . . . . 7.2 Resposta . . . . . . . . . . . . . 7.3 Exerccios de Fixao Com Java 7.4 Erro: Parmetros incompatveis 7.5 Erro: Resposta incompatvel . . 7.6 Exerccios de Fixao Com C# . 7.7 Exerccios Complementares . . 7.8 Resumo do Captulo . . . . . . . 7.9 Prova . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
A Problemas 235 A.1 Encontrar o maior ou o menor elemento de um array . . . . . . . . . . . . . . . . . . . . 235 A.2 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 A.3 Calcular a soma dos elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . 237
iv
www.k19.com.br
S UMRIO
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
Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Calcular a mdia dos elementos de um array . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Trocar as posies de dois elementos de um array . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Escolher aleatoriamente um nmero inteiro dentro de um intervalo Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Gerar apostas da Mega-Sena . . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Embaralhar os elementos de um array . . . . . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Ordenar os elementos de um array . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Inverter o posicionamento dos elementos de um array . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Nmeros em formato binrio . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao 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
S UMRIO
vi
vi
www.k19.com.br
S UMRIO
Sobre a K19
A K19 uma empresa especializada na capacitao de desenvolvedores de software. Sua equipe composta por prossionais formados em Cincia da Computao pela Universidade de So Paulo (USP) e que possuem vasta experincia em treinamento de prossionais para rea de TI. O principal objetivo da K19 oferecer treinamentos de mxima qualidade e relacionados s principais tecnologias utilizadas pelas empresas. Atravs desses treinamentos, seus alunos tornam-se capacitados para atuar no mercado de trabalho. Visando a mxima qualidade, a K19 mantm as suas apostilas em constante renovao e melhoria, oferece instalaes fsicas apropriadas para o ensino e seus instrutores esto sempre atualizados didtica e tecnicamente.
www.facebook.com/k19treinamentos
S UMRIO
Seguro Treinamento
Na K19 o aluno faz o curso quantas vezes quiser! Comprometida com o aprendizado e com a satisfao 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 no preenchidas at um dia antes do incio de uma turma da K19 sero destinadas ao alunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treinamento 10% do valor total do curso.
www.k19.com.br
S UMRIO
Termo de Uso
Termo de Uso
Todo o contedo desta apostila propriedade da K19 Treinamentos. A apostila pode ser utilizada livremente para estudo pessoal . Alm disso, este material didtico pode ser utilizado como material de apoio em cursos de ensino superior desde que a instituio correspondente seja reconhecida pelo MEC (Ministrio da Educao) e que a K19 seja citada explicitamente como proprietria do material. proibida qualquer utilizao desse material que no se enquadre nas condies acima sem o prvio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido est sujeito s medidas legais cabveis.
www.facebook.com/k19treinamentos
S UMRIO
TR
www.k19.com.br/cursos
www.k19.com.br
CAPTULO
Registradores
I NTRODUO
O que um Computador?
Atualmente, os computadores esto 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 bsico de um computador? A seguir, listaremos os principais elementos de um computador e suas respectivas funes.
ULA + UC
CPU (Unidade Central de Processamento - Processador): A CPU o crebro que controla o funcionamento dos outros componentes do computador e realiza todo o processamento necessrio. Esse processamento consiste basicamente na realizao de operaes matemticas e operaes de armazenamento ou recuperao de dados. Registradores: Os registradores armazenam os dados que esto sendo processados pela CPU. O acesso ao contedo dos registradores extremamente rpido. Por outro lado, eles no possuem muito espao. Dessa forma, no possvel armazenar uma grande quantidade de informao Memria RAM: Os dados utilizados pelos programas que esto abertos so armazenados na memria RAM. O acesso ao contedo da memria RAM rpido porm mais lento do que o acesso ao contedo dos registradores. Por outro lado, o espao da memria RAM bem maior do que o espao dos registradores.
www.facebook.com/k19treinamentos
CPU
HD Memria RAM
I NTRODUO
Disco Rgido: Os dados armazenados nos registradores e na memria RAM so descartados quando o computador desligado. O contedo que no pode ser descartado ao desligar o computador deve ser armazenado no disco rgido. O acesso ao disco rgido bem mais lento do que o acesso a memria RAM mas, em geral, o espao bem maior. Os computadores so capazes se comunicar com dispositivos perifricos como teclado, mouse, monitor, caixa de som, impressoras, projetores, entre outros. Eles tambm so capazes de se comunicar com outros computadores. Essa comunicao realizada atravs das diversas portas fsicas que os computadores possuem. A seguir listaremos algumas portas fsicas e as suas respectivas funes. Ethernet: Utilizada para conectar um computador a uma rede local de computadores. Atravs dessa porta, um computador pode enviar e receber dados de outros computadores.
Paralela: Essa porta foi criada conectar um computador a uma impressora. Hoje, utilizada tambm para conectar computadores a scanners, cmeras de vdeo, entre outros dispositivos.
PS/2: Teclados e mouses antigos so conectados aos computadores atravs dessa porta.
USB: Atualmente, a porta mais utilizada. Diversos dispositivos so conectados aos computadores atravs das portas USB. Por exemplo, teclados, mouses, impressoras, celulares, HDs externos, entre outros.
www.k19.com.br
I NTRODUO
Para resumir, podemos dizer que um computador uma mquina que executa comandos matemticos e armazena dados. Voc deve estar se perguntando, como os computadores conseguem realizar tarefas to sosticadas se eles apenas executam comandos matemticos e armazenam dados? A resposta simples. Os computadores so programados por pessoas e essas pessoas conseguem criar programas que realizam tarefas sosticadas a partir dos recursos bsicos oferecidos pelos computadores. Da mesma forma que pessoas so capazes de produzir pinturas sosticadas 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; }
Formato Binrio
Os computadores so capazes de receber, armazenar e enviar dados. Contudo, esses dados so denidos em um formato que no comum no dia a dia das pessoas. Eles so denidos em formato binrio. Por exemplo, as pessoas esto acostumadas a lidar com os nmeros em formato decimal. Por outro lado, os computadores trabalham com nmeros em formato binrio. Veja a seguir, a representao decimal e binria de alguns nmeros.
www.facebook.com/k19treinamentos
I NTRODUO
Decimal 0 1 2 3 4 5 6 7 8 9 10
Decimal 11 12 13 14 15 16 17 18 19 20 21
Binrio 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101
Decimal 22 23 24 25 26 27 28 29 30 31 32
Binrio 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 100000
Os textos tambm so manipulados pelos computadores em formato binrio. Normalmente, cada caractere de um texto corresponde a uma sequncia de oito 0s e 1s. Os caracteres so mapeados para formato binrio atravs de padres como ASCII (http://pt.wikipedia.org/wiki/ASCII) e Unicode (http://pt.wikipedia.org/wiki/Unicode). Veja a seguir, a representao binria de alguns caracteres de acordo com o padro ASCII. Caractere A B C D E F G H I J K Binrio 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 Caractere L M N O P Q R S T U V Binrio 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 Caractere W X Y Z a b c d e f g Binrio 01010111 01011000 01011001 01011010 01100001 01100010 01100011 01100100 01100101 01100110 01100111
Como vimos, os nmeros e os caracteres de um texto so facilmente representados em formato binrio. Contudo, os computadores tambm so capazes de manipular imagens, udio e vdeo. Para esses tipos de dados, a transformao para formato binrio bem mais complicada. Pesquise por PNG, MP3 e AVI que so formatos binrios de imagens, udios e vdeos atravs dos seguinte endereos: 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
I NTRODUO
importante ser capaz de mensurar a quantidade de dados que um computador pode armazenar ou transmitir. Essa mensurao pode ser realizada com ajuda das unidades de medida. A unidade de medida bsica o Bit. Cada 0 ou 1 que um computador armazena ou transmite um Bit. Alm dessa unidade bsica, existem vrias 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 so denidos em formato binrio. Considere o exemplo ctcio a seguir com algumas instrues para um determinado processador.
www.facebook.com/k19treinamentos
I NTRODUO
GRAVA REG-1
19
GRAVA REG-2
11
SOMA
EXIBE
REG-3
A primeira instruo indica ao processador que o valor 19 deve ser armazenado no registrador 1. A segunda instruo indica que o valor 11 deve ser armazenado no registrador 2. J a terceira instruo determina a realizao da soma dos valores anteriormente armazenados nos registradores 1 e 2 alm de indicar que o resultado seja armazenado no registrador 3. Por ltimo, a quarta instruo determina ao processador que o valor do registrador 3 deve ser exibido na tela. No h um padro universal para o formato das instrues que os processadores podem executar. Consequentemente, as mesmas operaes podem ser denidas de formas diferentes em dois processadores distintos. Considere o exemplo ctcio a seguir com algumas instrues para dois processadores de tipos diferentes.
Arquitetura X
0110001100100001 010001010011
Figura 1.9: Instrues de processadores diferentes
SOMA
REG-3
REG-2
REG-1
SOMA
Arquitetura Y
Observe que as duas instrues 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 sequncias binrias dessas instrues so diferentes porque os processadores so de arquiteturas diferentes. As instrues que um processador pode executar so denidas pela arquitetura do seu processador. As principais arquiteturas de processadores so: x86 x86_64 ARM
6
www.k19.com.br
I NTRODUO
O que um Programa?
Os comandos que os processadores dos computadores oferecem so extremamente bsicos. Normalmente, so comandos para realizar operaes aritmticas como soma, subtrao, diviso e multiplicao. Qualquer tarefa mais complexa deve ser resolvida atravs de uma sequncia desses comandos bsicos. Por exemplo, para calcular a mdia aritmtica dos nmeros 10, 15 e 20, devemos obter o valor da somatria desses nmeros atravs de operaes bsicas de soma. Depois, podemos utilizar uma operao bsica de diviso para dividir o valor dessa somatria por 3 e assim obter o valor 15 que a mdia dos nmeros. Uma sequncia de comandos bsicos de processador que resolve uma determinada tarefa recebe o nome de programa. Os programas so armazenados em arquivos comumente chamados de executveis. Na prtica, os programas so formados por instrues que dependem da arquitetura do processador e do sistema operacional. Consequentemente, um mesmo programa pode no funcionar em sistemas operacionais diferentes ou em processadores de arquiteturas diferentes.
Linguagem de Mquina
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 no funcionar em outro. O formato dos comandos que funcionam em um determinado processador dene a linguagem de mquina ou cdigo de mquina desse processador. Comandos denidos em linguagem de mquina so perfeitos para os computadores processarem. Por outro lado, eles so extremamente complexos para as pessoas entenderem. Podemos vericar essa complexidade, observando o trecho de comandos em linguagem de mquina da gura abaixo:
000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010000000000100000000 000000000000111000011111101110100000111000000000101101000000100 111001101001000011011100000000001010011001100110100100001010101 000110100001101001011100110010000001110000011100100110111101100 111011100100110000101101101001000000110001101100001011011100110 111001101111011101000010000001100010011001010010000001110010011
Figura 1.10: Trecho do programa Chrome em binrio
Linguagem de Programao
Devido a complexidade, escrever um programa em linguagem de mquina invivel. Para tornar vivel o desenvolvimento de programas, existem as linguagens de programao que tentam se aproximar das linguagens humanas. Conra um trecho de cdigo escrito com a linguagem de prowww.facebook.com/k19treinamentos
I NTRODUO
gramao 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 }
Cdigo Java 1.1: Exemplo de cdigo em Java
Por enquanto, voc no precisa se preocupar em entender o que est escrito no cdigo acima. Apenas, observe que um programa escrito em linguagem de programao bem mais fcil de ser lido do que um programa escrito em linguagem de mquina.
Mais Sobre
A maioria das linguagens de programao so case sensitive. Isso signica que elas diferenciam as letras maisculas das minsculas. Portanto, ao escrever o cdigo de um programa, devemos tomar cuidado para no trocar uma letra maiscula por uma letra minscula ou vice-versa.
Compilador
Vimos que os computadores so capazes de processar o cdigo escrito em linguagem de mquina. Tambm vimos que invivel desenvolver um programa em linguagem de mquina. Por isso, existem as linguagens de programao. Da surge uma pergunta: se os computadores entendem apenas comandos em linguagem de mquina, como eles podem executar cdigo escrito em linguagem de programao? Na verdade, os computadores no executam cdigo escrito em linguagem de programao. Esse cdigo que denominado cdigo fonte deve ser traduzido para cdigo em linguagem de mquina. Essa traduo realizada por programas especiais chamados compiladores.
while(true){ if(x < 1){ return 0; } return 1; }
CDIGO FONTE
PROCESSADOR
NO EXECUTA
CDIGO FONTE
COMPILADOR
CDIGO DE MQUINA
PROCESSADOR
EXECUTA
www.k19.com.br
I NTRODUO
Mquinas Virtuais
Como vimos anteriormente, o cdigo fonte de um programa deve ser compilado para que esse programa possa ser executado por um computador. Alm disso, vimos que os compiladores geram executveis especcos para um determinado sistema operacional e uma determinada arquitetura de processador. Qual o impacto disso para quem desenvolve sistemas para mltiplas plataformas? A empresa que deseja ter uma aplicao disponvel para diversos sistemas operacionais (Windows, Linux, Mac OS X, etc) e arquiteturas de processadores (Intel, ARM, PowerPC, etc) dever desenvolver e manter um cdigo 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
NO EXECUTA
Figura 1.12: Ilustrao mostrando que cada plataforma necessita de um executvel especco.
Para diminuir os custos e aumentar a produtividade, podemos utilizar mquinas virtuais. Em um ambiente que utiliza mquina virtual, quando o cdigo fonte compilado, ele traduzido para um cdigo escrito na linguagem da mquina virtual. A linguagem da mquina virtual tambm pode ser considerada uma linguagem de mquina. Na execuo, a mquina virtual traduz os comandos em linguagem de mquina virtual para comandos em linguagem de mquina correspondente plataforma utilizada.
www.facebook.com/k19treinamentos
I NTRODUO
MQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTA
10
PROGRAMA
MQUINA VIRTUAL 2
PLATAFORMA 2
EXECUTA
MQUINA VIRTUAL 3
PLATAFORMA 3
EXECUTA
Tudo parece estar perfeito agora, porm, olhando atentamente a gura acima, percebemos que existe a necessidade de uma mquina virtual para cada plataforma. Algum poderia dizer que, de fato, no resolvemos o problema. A diferena que implementar a mquina virtual no tarefa dos programadores que desenvolvem as aplicaes que sero executados nas mquinas virtuais. A implementao da mquina virtual responsabilidade de terceiros que geralmente so empresas bem conceituadas ou projetos de cdigo aberto que envolvem programadores do mundo inteiro. Os maiores exemplos so a Oracle JVM (Java Virtual Machine), OpenJDK JVM, Microsoft CLR (Common Language Runtime) e Mono CLR. A mquina virtual no funciona apenas como um mero adaptador. Ela normalmente traz recursos como o gerenciamento de memria, otimizao do cdigo em tempo de execuo entre outros.
Importante
Antes de compilar e executar um programa escrito em Java, necessrio que voc tenha instalado e congurado 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 cdigo 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 }
Cdigo Java 1.2: HelloWorld.java
I NTRODUO
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
Esse comando compilar o arquivo HelloWorld.java. O programa javac o compilador do Java. Aps compilarmos o arquivo HelloWorld.java, nosso programa j estar pronto para ser executado. Porm, 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 contm o cdigo em linguagem de mquina virtual Java.
k19$ ls HelloWorld . class HelloWorld . java
Para executar o contedo do arquivo HelloWorld.class, a extenso .class no 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
Hello World em C#
Agora, vamos utilizar outra linguagem de programao para criar o programa semelhante ao visto anteriormente.
Importante
Para compilar um programa escrito em C# necessrio ter o .NET Framework instalado em seu computador. As verses mais recentes do sistema operacional Windows j vm com o framework instalado.
www.facebook.com/k19treinamentos
11
I NTRODUO
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 cdigo 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 }
Cdigo 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
Esse comando compilar o arquivo HelloWorld.cs. O programa csc o compilador do C#. Aps compilarmos o arquivo HelloWorld.cs, o programa estar pronto para ser executado. Porm, 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 executvel gerado pelo compilador do C#.
C :\ Users \ K19 \ Desktop \ logica - de - programacao > dir O volume na unidade C no tem nome . O Nmero de Srie 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 <DIR > . 21: 7 <DIR > .. 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 disponveis
12
www.k19.com.br
13
C :\ Users \ K19 \ Desktop \ logica - de - programacao > dir O volume na unidade C no tem nome . O Nmero de Srie 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 <DIR > . 16:5 <DIR > .. 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 disponveis
I NTRODUO
C :\ Users \ K19 \ Desktop \ logica - de - programacao > HelloWorld . exe Hello World C :\ Users \ K19 \ Desktop \ logica - de - programacao >
Mtodo Main
Como vimos anteriormente, um programa basicamente uma sequncia de instrues. As instrues de um programa escrito em Java devem ser denidas dentro do mtodo main.
1 class Programa { 2 public static void main ( String [] args ) { 3 PRIMEIRA INSTRUO 4 SEGUNDA INSTRUO 5 TERCEIRA INSTRUO 6 ... 7 } 8 }
Cdigo Java 1.3: Mtodo main
Podemos dizer que o ponto de partida de um programa em Java a primeira instruo do mtodo main. As demais instrues so executas na mesma ordem que esto denidas no cdigo. Eventualmente, durante a execuo das instrues, algum erro pode ocorrer e interromper o uxo do processamento. Analogamente, as instrues de um programa escrito em C# tambm devem ser denidas dentro do mtodo 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 INSTRUO 6 SEGUNDA INSTRUO 7 TERCEIRA INSTRUO 8 ... 9 } 1 }
Cdigo C# 1.2: Mtodo Main
13
I NTRODUO
14
Abra um terminal e crie uma pasta com o seu nome. Voc deve salvar os seus exerccios nessa pasta.
1
K19$ mkdir rafael K19$ cd rafael K19 / rafael$
Mais Sobre
Nos exerccios com Java, vamos assumir a utilizao de um sistema operacional da famlia Unix. Em sistemas dessa famlia, 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 diretrios da pasta atual do terminal. Se voc estiver utilizando o sistema operacional Windows, os comandos correspondentes ao mkdir e ls so md e dir respectivamente. O comando cd possui a mesma funo em ambiente Unix ou Windows.
C :\ Users \ K19 > md rafael C :\ Users \ K19 > cd rafael C :\ Users \ K19 \ rafael >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao1.zip
Dentro da sua pasta de exerccios, crie uma pasta para os arquivos desenvolvidos nesse captulo chamada introducao.
2
K19 / rafael$ mkdir introducao K19 / rafael$ cd introducao K19 / rafael / introducao$
C :\ Users \ K19 \ rafael > md introducao C :\ Users \ K19 \ rafael > cd introducao C :\ Users \ K19 \ rafael \ introducao >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
14
1-introducao-fixacao2.zip
www.k19.com.br
15
3
I NTRODUO
Utilize um editor de texto e implemente um programa utilizando a linguagem programao 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 }
Cdigo Java 1.4: HelloWorld.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao3.zip
Atravs 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
Exibindo mensagens
Geralmente, as linguagens de programao possuem comandos para exibir mensagens para os usurios. Veja a seguir, a instruo da linguagem Java que permite exibir mensagens.
1 System . out . println ( " MENSAGEM " ) ;
Podemos utilizar as chamadas sequncias de escape para indicar quebras de linhas ou tabulaes nas mensagens. Uma quebra de linha indicada com a sequncia de escape \n. Uma tabulao com a sequncia 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 nal 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 NTRODUO
1 System . out . print ( " MENSAGEM SEM QUEBRA DE LINHA " ) ;
16
Comentrios
Podemos acrescentar comentrios no cdigo fonte. Geralmente, eles so utilizados para explicar a lgica do programa. Os compiladores ignoram os comentrios inseridos no cdigo fonte. Portanto, no cdigo de mquina gerado pela compilao do cdigo fonte, os comentrios no so inseridos. Em Java ou C# para comentar uma linha, devemos utilizar a marcao //.
1 System . out . println ( " K19 " ) ; 2 // comentrio de linha 3 System . out . println ( " Rafael Cosentino " ) ;
1 System . Console . WriteLine ( " K19 " ) ; 2 // comentrio de linha 3 System . Console . WriteLine ( " Rafael Cosentino " ) ;
1 2 3 4 5
System . Console . WriteLine ( " K19 " ) ; /* comentrio de bloco todo esse trecho est comentado */ System . Console . WriteLine ( " Rafael Cosentino " ) ;
Indentao
A organizao do cdigo fonte fundamental para o entendimento da lgica de um programa. Cada linguagem de programao possui os seus prprios padres de organizao. Observe a organizao padro do cdigo fonte nas linguagens Java e C#.
1 class Programa { 2 public static void main ( String [] args ) { 3 // instrues 4 } 5 }
Cdigo Java 1.10: Programa.java
16
www.k19.com.br
17
4 { 5 // instrues 6 } 7 }
Cdigo C# 1.8: Programa.cs
I NTRODUO
Para destacar a hierarquia dos blocos, o contedo de cada bloco deve ser indentado com tabulaes ou espaos. Um cdigo corretamente indentado mais fcil de ler. Consequentemente, a manuteno das aplicaes torna-se mais simples.
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 NTRODUO
7 System . out . println ( " ***** " ) ; 8 } 9 }
Cdigo Java 1.11: Triangulo.java
18
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao5.zip
Atravs 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 * ** *** **** *****
1 class TrianguloComBarraN { 2 public static void main ( String [] args ) { 3 System . out . println ( " *\ n **\ n ***\ n ****\ n ***** " ) ; 4 } 5 }
Cdigo Java 1.12: TrianguloComBarraN.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao7.zip
Atravs 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 * ** *** **** *****
18
www.k19.com.br
19
3 4 } // instrues
I NTRODUO
Veja a mensagem que o compilador do Java exibe quando um bloco no fechado corretamente.
Programa . java :2: error : reached end of file while parsing public static void main ( String [] args ) { ^ 1 error
Analogamente, veja a mensagem que o compilador do C# exibe quando um bloco no 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
www.facebook.com/k19treinamentos
19
I NTRODUO
5 }
Cdigo Java 1.15: HelloWorld.java
20
1 class HelloWorld 2 { 3 static void Main () 4 { 5 system . Console . WriteLine ( " Hello World " ) ; 6 } 7 }
Cdigo C# 1.11: HelloWorld.cs
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
1 class HelloWorld 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " Hello World " ) 6 } 7 }
Cdigo C# 1.12: HelloWorld.cs
20
www.k19.com.br
21
I NTRODUO
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
Observe que no cdigo Java acima, o mtodo main foi denido com letra maiscula. Contudo, no Java, o correto com minscula. Ao compilar o cdigo, 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 )
Nesse caso, o mtodo main foi denido com letra minscula. Contudo, no C#, o correto com maiscula. Ao compilar o cdigo, 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
www.facebook.com/k19treinamentos
21
I NTRODUO
22
Utilize um editor de texto e implemente um programa utilizando a linguagem programao 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 }
Cdigo C# 1.14: HelloWorld.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao9.zip
Atravs 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
11
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 }
Cdigo C# 1.15: Triangulo.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao11.zip
Atravs 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 NTRODUO
1 class TrianguloComBarraN 2 { 3 static void Main () 4 { 5 System . Console . WriteLine ( " *\ n **\ n ***\ n ****\ n ***** " ) ; 6 } 7 }
Cdigo Java 1.18: TrianguloComBarraN.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-fixacao13.zip
Atravs 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 * ** *** **** *****
Exerccios Complementares
Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.
Utilize a linguagem Java para implementar um programa que mostre a sua frase preferida.
www.facebook.com/k19treinamentos
23
I NTRODUO
4
24
Utilize a linguagem C# para implementar um programa que mostre a sua frase preferida.
Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.
# # # ##### # # ## # # # # # # # # ### # ###### # # # # # # # # # # # ##### #####
Desaos
1 Crie um programa em Java ou C# para exibir o seu nome de forma semelhante ao mostrado abaixo.
______ __ _ | ___ \ / _| | | | |_/ / __ _ | | _ __ _ ___ | | | // _ | _ / _ |/ _ \ | | |\ \ (_| | || ( _ | | __ / | \_| \_\__ ,_ | _ | \ __ , _ |\ ___ | _ | _____ _ _ / __ \ | | (_) | / \/ ___ ___ ___ _ __ | | _ _ _ __ ___ | | / _ \/ __ |/ _ \ _ \| __ | | _ \ / _ \ | \ __ /\ ( _) \ __ \ __ / | | | | _ | | | | | ( _ ) | \ ____ /\ ___ /| ___ /\ ___ | _ | | _ |\ __ | _ | _ | | _ |\ ___ /
Pesquise na internet sobre ASCII Art. Crie programas para exibir imagens em ASCII Art.
Resumo do Captulo
Os arquivos dos usurios e dados dos programas instalados no computador so armazenados no disco rgido.
24
www.k19.com.br
25
5
I NTRODUO
Os computadores se comunicam com outros computadores ou com dispositivos perifricos atravs das suas portas fsicas.
As principais unidades de medida para dados binrios so: Bit, Byte(B), Quilobyte(kB), Megabyte(MB), Gigabyte(GB) e Terabyte(TB).
10
11
12
As linguagens de programao so mais fceis para pessoas entenderem do que as linguagens de mquina.
13
14
15
16
17
Todo programa necessita de um ponto de partida. O ponto de partida dos programas escritos em Java ou C# a primeira instruo do mtodo main.
18
No cdigo fonte de um programa em Java ou C#, comentrios so inseridos com os marcadores //, /* e */.
19
20
www.facebook.com/k19treinamentos
25
I NTRODUO
21
26
Cdigo escrito em linguagem Java deve ser armazenado em arquivos .java. Cdigo escrito em linguagem C# deve ser armazenado em arquivos .cs
Os comandos System.out.println e System.Console.WriteLine so utilizados para exibir mensagens com quebra de linha nas linguagens Java e C# respectivamente.
22
Os comandos System.out.print e System.Console.Write so utilizados para exibir mensagens sem quebra de linha nas linguagens Java e C# respectivamente.
23
Prova
Qual alternativa est correta? a) A principal funo dos processadores armazenar dados. b) Os dados armazenados no disco rgido so perdidos quando o computador desligado. c) O acesso aos dados armazenados na memria RAM mais rpido do que o acesso aos dados armazenados nos registradores do processador. d) Geralmente, o espao de armazenamento da memria RAM menor do que o espao de armazenamento do disco rgido. e) A memria RAM a principal responsvel pela execuo das instrues de um programa.
Qual alternativa est correta? a) Um computador no pode transmitir dados para outro computador. b) A conexo entre os teclados e os computadores realizada atravs da porta Ethernet. c) As portas USB so a nica forma de estabelecer a comunicao dos computadores com os dispositivos perifricos. d) Atualmente, diversos dispositivos podem ser conectados aos computadores atravs das portas USB. e) Os mouses atuais so conectados aos computadores atravs das portas HDMI.
26
www.k19.com.br
27
I NTRODUO
Qual alternativa est errada? a) x86 e x86_64 so 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 instrues que os processadores executam so denidas em binrio. e) Processadores executam cdigo em linguagem de mquina.
Qual alternativa est correta? a) Java e C# so linguagens de programao. b) Java e C# so linguagens de mquina. c) Java uma linguagem de programao e C# uma linguagem de mquina. d) C# uma linguagem de programao e Java uma linguagem de mquina.
Qual a funo dos compiladores? a) Traduzir cdigo de mquina para cdigo fonte. b) Executar cdigo de mquina. c) Executar cdigo fonte.
www.facebook.com/k19treinamentos
27
I NTRODUO
28
Qual a vantagem das linguagens de programao que utilizam mquinas virtuais? a) A criao de programas portveis. b) Essas linguagens possuem mais comandos. c) Os programas desenvolvidos com essas linguagens so mais rpidos. d) A criao de programas especcos para um sistema operacional. e) Os programas desenvolvidos com essas linguagens consomem menos memria.
Qual alternativa possui apenas nomes vlidos para arquivos de cdigo 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 vlidos para arquivos de cdigo 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 mtodo 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 NTRODUO
12
Qual alternativa declara corretamente o mtodo 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 cdigo 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 cdigo 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 so os marcadores utilizados para inserir comentrios em Java ou C#? a) // e %. b) #, //, /* e */. c) //, /* e */.
www.facebook.com/k19treinamentos
29
I NTRODUO
30
d) <!- - e - ->. e) % e #.
Minha Pontuao
Pontuao Mnima:
12
Pontuao Mxima:
15
30
www.k19.com.br
CAPTULO
1. --------2. --------3. ---------
A LGORITMOS
O que um Algoritmo?
Um algoritmo uma sequncia de instrues que resolve uma determinada tarefa. Essas instrues 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 preparao do bolo corresponde a uma instruo do algoritmo.
Normalmente, desenvolver algoritmos ecientes no uma tarefa simples. No meio acadmico, diversas tcnicas para o desenvolvimento de algoritmos mais ecientes so estudadas pela Cincia da Computao.
Fluxograma
O uxograma um dos mtodos mais utilizados para se representar um algoritmo. Trata-se de uma espcie 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 ecincia.
www.facebook.com/k19treinamentos
31
A LGORITMOS
PROCESSO CONECTOR
32
DECISO
TERMINAL
LEITURA
SETAS DE FLUXO
ESCRITA
Vamos supor que seja necessrio criar um algoritmo para sacar uma determinada quantia de dinheiro de um caixa eletrnico de um banco. Como caria o uxograma desse algoritmo?
INCIO
VALOR DO SAQUE
SALDO INSUFICIENTE
NO
SALDO SUFICIENTE?
SIM
MENSAGEM, SALDO
FIM
Figura 2.3: Exemplo de uxograma para a operao de saque em um caixa eletrnico de um banco
32
www.k19.com.br
33
A LGORITMOS
Para entender o algoritmo que um uxograma representa, necessrio conhecer o signicado de cada smbolo.
Pseudocdigo
Escrever um algoritmo em pseudocdigo outra forma muito utilizada por autores de livros que tratam de algoritmos, pois dessa forma o leitor no precisa ter o conhecimento prvio de nenhuma linguagem de programao. Nos pases cujo idioma principal o portugus, muitos se referem ao pseudocdigo como portugol. Vamos ver como caria o exemplo anterior escrito em pseudocdigo:
1 INICIO 2 LER ( ValorDoSaque ) 3 SE ValorDoSaque > E ValorDoSaque <= Saldo ENTO 4 Saldo = Saldo - ValorDoSaque ; 5 ESCREVER (" Saque efetuado com sucesso . Saldo atual : " , Saldo ) ; 6 SENO 7 ESCREVER (" Saldo Insuficiente .") ; 8 FIM SE 9 FIM
Pseudocdigo 2.1: Exemplo de pseudocdigo para a operao de saque em um caixa eletrnico.
A representao em pseudocdigo bem simples e na maioria dos casos suciente para se explicar um algoritmo. Existem alguns interpretadores de portugol como o VisuAlg e, no caso da lngua inglesa, temos algumas linguagens como Pascal e BASIC cuja sintaxe se assemelha muito com a sintaxe de um pseudocdigo em ingls.
Exerccios de Fixao
Escreva, utilizando um uxograma, um algoritmo para a operao de depsito em um caixa eletrnico de um banco.
1
Escreva, utilizando um uxograma, um algoritmo para calcular o desconto obtido por um aluno da K19 atravs do Programa Indicao Premiada (veja as regras no site).
2
Dica: faa com que o aluno que est indicando receba de incio 5% de desconto.
Desaos
Escreva, utilizando um uxograma, um possvel algoritmo para o jogo Travessia do Rio disponvel online em diversos sites (ex: http://www.aulavaga.com.br/jogos/raciocinio/travessia-do-rio/).
1
O jogo consiste em atravessar todos os personagens de uma margem outra do rio seguindo as seguintes regras: 1. Somente o pai, a me e o policial sabem pilotar o barco; 2. A me no pode car sozinha com os lhos;
www.facebook.com/k19treinamentos
33
A LGORITMOS
34
3. O pai no pode car sozinho com as lhas; 4. O prisioneiro no pode car com nenhum membro da famlia sem o policial; 5. O barco pode transportar, no mximo, duas pessoas por vez; 6. Voc pode fazer quantas viagens desejar.
34
www.k19.com.br
CAPTULO
numeroDaConta numeroDaConta = 4823
4823
VARIVEIS
MEMRIA RAM
MEMRIA RAM
Mais Sobre
Em Java ou C#, devemos informar, no cdigo fonte, o tipo de dado que uma varivel poder armazenar. Por isso, essas duas linguagens so estaticamente tipadas, ou seja, os tipos das variveis devem ser denidos em tempo de compilao.
www.facebook.com/k19treinamentos
35
VARIVEIS
36
Inicializao
Aps declararmos uma varivel e antes de utiliz-la, devemos inicializ-la para evitarmos um erro de compilao.
1 int numeroDaConta ; 2 numeroDaConta = 3466; 3 4 boolean contaAtiva = true ;
Cdigo Java 3.2: Declarao e inicializao de variveis em Java.
Como podemos observar, a inicializao das variveis feita atravs do operador =. Note tambm que podemos, em uma nica linha, declarar e inicializar uma varivel.
Tipos de Bsicos
As linguagens Java e C# possuem tipos bsicos de variveis. Esses tipos so os mais utilizados e servem como base para a criao de outros tipos. A seguir, veja os tipos bsicos da linguagem Java e da linguagem C#. Tipo byte short int long Descrio Valor inteiro entre -128 e 127 (inclusivo) Valor inteiro entre -32.768 e 32.767 (inclusivo) Valor inteiro entre -2.147.483.648 e 2.147.483.647 (inclusivo) Valor inteiro entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 (inclusivo) Tamanho (peso) 1 byte 2 bytes 4 bytes 8 bytes
36
www.k19.com.br
37
VARIVEIS
Tipo oat
Descrio Valor com ponto utuante entre 1, 40129846432481707 1045 e 3, 40282346638528860 1038 (positivo ou negativo) Valor com ponto utuante entre 4, 94065645841246544 10324 e 1, 79769313486231570 10308 (positivo ou negativo) true ou false Um nico caractere Unicode de 16 bits. Valor inteiro e positivo entre 0 (ou \u0000) e 65.535 (ou \uffff)
Tabela 3.1: Tipos de dados bsicos em Java.
Tipo sbyte byte short ushort int uint long ulong oat
Descrio Valor inteiro entre -128 e 127 (inclusivo) Valor inteiro entre 0 e 255 (inclusivo) Valor inteiro entre -32.768 e 32.767 (inclusivo) Valor inteiro entre 0 e 65.535 (inclusivo) Valor inteiro entre -2.147.483.648 e 2.147.483.647 (inclusivo) Valor inteiro entre 0 e 4.294.967.295 (inclusivo) Valor inteiro entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 (inclusivo) Valor inteiro entre 0 e 18.446.744.073.709.551.615 (inclusivo) Valor com ponto utuante entre 1, 40129846432481707 1045 e 3, 40282346638528860 1038 (positivo ou negativo) Valor com ponto utuante entre 4, 94065645841246544 10324 e 1, 79769313486231570 10308 (positivo ou negativo) Valor com ponto utuante entre 1, 0 1028 e 7, 9 1028 (positivo ou negativo) true ou false Um nico caractere Unicode de 16 bits. Valor inteiro e positivo entre 0 (ou \u0000) e 65.535 (ou \uffff)
Tabela 3.2: Tipos de dados bsicos em C#.
Tamanho (peso) 1 byte 1 byte 2 bytes 2 bytes 4 bytes 4 bytes 8 bytes 8 bytes 4 bytes
String
Tanto na linguagem Java quanto na linguagem C#, o tipo string um dos mais importantes e mais utilizados. O tipo string usado para o armazenamento de texto (sequncia de caracteres). Observe, nos exemplos abaixo, que o texto que deve ser armazenado nas variveis denido dentro de aspas duplas.
www.facebook.com/k19treinamentos
37
VARIVEIS
1 String texto = " K19 Treinamentos " ;
Cdigo Java 3.3: Tipo String em Java
38
Os caracteres que podem ser utilizados para formar o contedo de uma string so denidos pelo padro Unicode(http://www.unicode.org/). As plataformas Java e .NET utilizam o mapeamento UTF-16 do Unicode. O espao utilizado por uma string depende da quantidade de caracteres que ela possui. Cada caractere ocupa 16 Bits. Portanto, a string K19 Treinamentos que possui 16 caracteres (o espao tambm deve ser contabilizado) ocupa 256 Bits.
No cdigo acima, a data e hora atuais do computador so armazenadas na varivel exatamenteAgora. Tambm podemos denir data e hora especcas.
java.util.Calendar c = new java.util.GregorianCalendar( 1982 , 11 , 12 , 10 , 5 , 30 )
Figura 3.2: Data e Hora Especcas - Calendar
Ano Ms (0 ~ 11) Dia (1 ~ 31) Hora (0 ~ 23) Minuto (0 ~ 59) Segundo (0 ~ 59)
No exemplo acima, o primeiro parmetro dene o ano; o segundo o ms; o terceiro o dia; o quarto a hora; o quinto os minutos; e o sexto os segundos. O ms denido da seguinte forma: 0 janeiro, 1 fevereiro, 2 maro e assim por diante. Dessa forma, a data 12 de dezembro de 1982 e hora 10:05:30 foram armazenadas na varivel c. Em C#, normalmente, utilizamos o tipo DateTime.
1 System . DateTime exatamenteAgora = System . DateTime . Now ;
Cdigo C# 3.4: Data e Hora Atuais - DateTime
38
www.k19.com.br
39
VARIVEIS
No cdigo acima, a data e hora atuais do computador so armazenadas na varivel chamada exatamenteAgora. Tambm podemos denir data e hora especcas. Veja os exemplos a seguir.
System.DateTime dt = new System.DateTime( 1982 , 11 , 12 , 10 , 5 , 30 )
Figura 3.3: Data e Hora Especcas - DateTime
Ano Ms (1 ~ 12) Dia (1 ~ 31) Hora (0 ~ 23) Minuto (0 ~ 59) Segundo (0 ~ 59)
No exemplo acima, o primeiro parmetro dene o ano; o segundo o ms; o terceiro o dia; o quarto a hora; o quinto os minutos; e o sexto os segundos. Dessa forma, a data 12 de dezembro de 1982 e hora 10:05:30 foram armazenadas na varivel dt.
Valores Literais
Os valores inseridos diretamente no cdigo fonte so chamados valores literais.
Null
O valor nulo representado pelo literal null, tanto em Java quanto em C#. Esse valor no pode ser utilizado para os tipos bsicos numricos e booleanos apresentados anteriormente (lembrando que o tipo char um tipo numrico).
1 String nome = null ;
Cdigo Java 3.5: Inicializando uma string com null
Booleanos
Em Java ou C#, o valor verdadeiro representado pelo valor literal true e o valor falso pelo valor literal false.
1 boolean a = true ; 2 3 boolean b = false ;
Cdigo Java 3.6: Utilizando valores literais booleanos em Java
www.facebook.com/k19treinamentos
39
VARIVEIS
1 bool a = true ; 2 3 bool b = false ;
Cdigo C# 3.7: Utilizando valores literais booleanos em C#
40
Inteiros
Em Java, nmeros inteiros podem ser denidos de quatro formas diferentes: binrio, octal, decimal e hexadecimal. Para tanto, devemos seguir as seguintes regras: Se um nmero inteiro inicia com 0b ou 0B ele binrio; Se ele inicia com 0 octal; Se inicia com 0x ou 0X hexadecimal; Caso contrrio decimal.
1 2 3 4 5 6 7 8 9 1 11 // 19 em binrio int a = b1 11 ; // 19 em octal int b = 23; // 19 em decimal int c = 19; // 19 em hexadecimal int d = x13 ;
Cdigo Java 3.7: binrio | octal | decimal | hexadecimal
J em C#, esses nmeros podem ser denidos apenas em decimal ou hexadecimal. Se um nmero inteiro inicia com 0x ou 0X ele hexadecimal; Caso contrrio decimal.
1 2 3 4 5 // 19 em decimal int c = 1 ; // 19 em hexadecimal int d = x13 ;
Cdigo C# 3.8: decimal | hexadecimal
Mais Sobre
Como vimos, variveis do tipo int no armazenam valores maiores do que 2.147.483.647. Ento, considere o valor inteiro 2.147.483.648. Esse valor no pode ser armazenado em variveis do tipo int pois ultrapassa o limite de 2.147.483.647. Por outro lado, o valor 2.147.483.648 pode ser armazenado em variveis do tipo long j que esse tipo de varivel aceita valores at 9.223.372.036.854.775.807. Em Java, o seguinte cdigo gera erro de compilao.
40
www.k19.com.br
41
VARIVEIS
Reais
Em Java ou C#, valores literais reais so denidos com o separador de casas decimais .(ponto). Veja alguns exemplos:
1 double a = 19.19; 2 3 double b = .19; 4 5 double c = .19;
Cdigo Java 3.11: Valores literais reais
Mais Sobre
Em Java ou C#, por padro, independentemente da grandeza, os valores literais reais so tratados como double. Por exemplo, considere o valor 19.09. Esse valor poderia ser tratado como oat ou double. Contudo, por padro, ele ser tratado como double. Dessa forma, os cdigos a seguir geram erros de compilao.
1 float a = 19. 9;
Cdigo Java 3.12: Erro de compilao
1 float a = 19. 9;
Cdigo C# 3.10: Erro de compilao
www.facebook.com/k19treinamentos
41
VARIVEIS
42
Para resolver esse problema, devemos utilizar o suxo F ou f. Ao utilizar um desses suxos, indicamos ao compilador que o valor literal real deve ser tratado como oat.
1 float a = 19. 9 F ; 2 3 float b = 19. 9 f ;
Cdigo Java 3.13: Utilizando o suxo F e f em Java
Caracteres
Em Java ou C#, caracteres literais so denidos dentro de aspas simples. Veja alguns exemplos.
1 char a = K ;
Cdigo Java 3.14: Caracteres literais
1 char a = K ;
Cdigo C# 3.12: Caracteres literais
Nas inicializaes acima, o valor numrico associado ao caractere K armazenado nas variveis. Apenas um caractere pode ser denido dentro de aspas simples.
Strings literais
Em Java ou C#, strings literais so denidas dentro de aspas duplas. Veja alguns exemplos.
1 String a = " K19 Treinamentos " ;
Cdigo Java 3.15: Strings literais
Determinados caracteres so especiais e no podem ser inseridos diretamente dentro das aspas duplas. Por exemplo, os cdigos a seguir geram um erro de compilao pois utilizam o caractere especial \.
1 String a = " C :\ k19 \ rafael \ cosentino " ;
Cdigo Java 3.16: Erro de compilao
42
www.k19.com.br
43
VARIVEIS
Para solucionar esses erros, devemos utilizar o caractere \ imediatamente antes dos caracteres especiais.
1 String a = " C :\\ k19 \\ rafael \\ cosentino " ;
Cdigo Java 3.17: Tratando os caracteres especiais com \
Em C#, podemos utilizar o caractere @ no incio das strings. Dessa forma, todos os caracteres especiais dentro das aspas duplas sero considerados caracteres normais.
1 string a = @ " C :\ k19 \ rafael \ cosentino " ;
Cdigo C# 3.16: Tratando os caracteres especiais com @
Nmeros Aleatrios
Para realizar alguns exerccios ou mostrar alguns exemplos, utilizaremos nmeros aleatrios. Esses nmeros podem ser gerados facilmente com cdigo Java ou C#. No exemplo a seguir, utilizamos a classe Math e o mtodo random() do Java para gerar nmeros aleatrios do tipo double maiores ou iguais a 0 e menores do que 1.
1 double numero = Math . random () ;
Cdigo Java 3.18: Gerando nmeros aleatrios em Java
Podemos adaptar o intervalo dos nmeros gerados com algumas operaes matemticas. Por exemplo, para gerar nmeros maiores ou iguais a -50 e menores do que 50, basta realizar uma multiplicao e uma subtrao.
1 double numero = Math . random () * 1 - 5 ;
Em C#, para gerar nmeros aleatrios do tipo double maiores ou iguais a 0 e menores do que 1, devemos utilizar a classe System.Random e o mtodo NextDouble().
1 System . Random gerador = new System . Random () ; 2 double numero = gerador . NextDouble () ;
Cdigo C# 3.17: Gerando nmeros aleatrios em C#
Novamente, podemos adaptar o intervalo dos nmeros gerados com algumas operaes matemticas. Por exemplo, para gerar nmeros maiores ou iguais a -25 e menores do que 50, basta realizar uma multiplicao e uma subtrao.
1 System . Random gerador = new System . Random () ; 2 double numero = gerador . NextDouble () * 75 - 25;
Cdigo C# 3.18: Gerando nmeros aleatrios em C#
www.facebook.com/k19treinamentos
43
VARIVEIS
44
Abra um terminal; entre na pasta dos seus exerccios e crie uma pasta chamada variaveis para os arquivos desenvolvidos nesse captulo.
1
K19 / rafael$ mkdir variaveis K19 / rafael$ cd variaveis K19 / rafael / variaveis$
C :\ Users \ K19 \ rafael > md variaveis C :\ Users \ K19 \ rafael > cd variaveis C :\ Users \ K19 \ rafael \ variaveis >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao1.zip
Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo int chamada idade. Essa varivel deve ser inicializada com o valor da sua idade. Por m, exiba o valor da varivel.
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 }
Cdigo Java 3.20: TestaVariavel.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao2.zip
Na pasta variaveis, implemente um programa em Java que gere um nmero real aleatrio entre 0 e 100. Esse nmero deve ser armazenado em uma varivel do tipo double chamada numeroAleatorio. Por m, exiba o valor da varivel.
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 }
Cdigo Java 3.21: TestaNumeroAleatorio.java
VARIVEIS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao4.zip
6 Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo String chamada nome. Essa varivel deve ser inicializada com o seu nome. Por m, exiba o valor da varivel.
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 }
Cdigo Java 3.22: TestaString.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao6.zip
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 varivel do tipo long, pois todos os valores que esto no intervalo do tipo int tambm esto no intervalo do tipo long.
www.facebook.com/k19treinamentos
45
VARIVEIS
46
Por causa disso, essas duas linguagens de programao permitem que qualquer valor armazenado em uma varivel do tipo int possa ser copiado para uma varivel do tipo long. Veja o exemplo a seguir.
1 int a = 19; 2 long b = a ;
Cdigo Java 3.23: Compatibilidade
Agora, considere um valor dentro do intervalo de valores do tipo long. No podemos garantir que esse valor possa ser armazenado em uma varivel do tipo int porque o intervalo do tipo long mais abrangente do que o intervalo do tipo int. Por exemplo, o nmero 2147483648 est no intervalo do tipo long mas no est no intervalo do tipo int. Por causa disso, as linguagens Java e C# no permitem que o valor de uma varivel do tipo long seja copiado para uma varivel do tipo int. A tentativa de realizar esse tipo de cpia gera erro de compilao mesmo que o valor armazenado na varivel do tipo long seja compatvel com int. Veja o exemplo a seguir.
1 long a = 19; 2 int b = a ;
Cdigo Java 3.24: Erro de compilao - Incompatibilidade
Nesses casos, podemos aplicar uma operao de converso tambm chamada de operao de casting. Veja como essa operao aplicada.
1 long a = 19; 2 int b = ( int ) a ;
Cdigo Java 3.25: Converso - Casting
Operaes de casting podem gerar resultados bem indesejados. Considere que uma varivel do tipo long armazena o valor 2147483648. Se uma operao de casting for aplicada para copiar esse valor para uma varivel do tipo int ocorrer perda de preciso e o valor obtido na cpia ser -2147483648 tanto em Java quanto em C#.
1 long a = 2147483648 L ; 2 int b = ( int ) a ; // b = -2147483648
Cdigo Java 3.26: Casting - Perdendo preciso
46
www.k19.com.br
47
1 long a = 2147483648 L ; 2 int b = ( int ) a ; // b = -2147483648
Cdigo C# 3.22: Casting - Perdendo preciso
VARIVEIS
Em geral, quando h o risco de perder preciso, os compiladores exigem a operao de casting. Isso funciona como um alerta para o programador. Contudo, em alguns casos, mesmo com o risco de perder preciso, os compiladores no exigem a operao de casting. Considere os exemplos a seguir.
1 long a = 9223372 368547758 7 L ; 2 float b = a ; // b = 9223372
Cdigo Java 3.27: No precisa de casting mas tem perda de preciso
Nos exemplos acima, a varivel do tipo long armazena o valor 9223372036854775807. Ao copiar o contedo dessa varivel para uma varivel do tipo oat, h uma perda preciso e o valor obtido 9223372000000000000 tanto no Java quanto no C#.
Converso de string
Considere uma varivel do tipo string contendo o valor 19. No podemos copiar o valor dessa varivel para uma varivel do tipo int, pois um erro de compilao seria gerado.
1 String a = " 19 " ; 2 int b = a ;
Cdigo Java 3.28: Erro de compilao - Incompatibilidade
Nesses casos, necessrio realizar uma converso de string para int. Em Java, essa converso pode ser realizada da seguinte forma:
1 String a = " 19 " ; 2 int b = Integer . parseInt ( a ) ;
Cdigo Java 3.29: Converso de string para int
www.facebook.com/k19treinamentos
47
VARIVEIS
48
A tabela a seguir mostra como as converses so realizadas em Java e C#. Java Byte.parseByte() Short.parseShort() Integer.parseInt() Long.parseLong() Float.parseFloat() Double.parseDouble() Boolean.parseBoolean()
sbyte byte short ushort int uint long ulong oat 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: Converso em C#
Convenes de nomenclatura
Os nomes das variveis so fundamentais para o entendimento do cdigo fonte. Considere o exemplo a seguir:
1 int j ; 2 int f ; 3 int m ;
Voc consegue deduzir quais dados sero armazenados nas variveis j, f e m? Provavelmente, no. Vamos melhorar um pouco os nomes dessas variveis.
1 int jan ; 2 int fev ; 3 int mar ;
Agora, talvez, voc tenha uma vaga ideia. Vamos melhorar mais um pouco os nomes dessas variveis.
48
www.k19.com.br
49
1 int janeiro ; 2 int fevereiro ; 3 int marco ;
VARIVEIS
Agora sim! Voc j sabe para que servem essas variveis? Se voc parar para pensar ainda no sabe muita coisa. Ento, importante melhorar mais uma vez o nome dessas variveis.
1 int numeroDePedidosEmJaneiro ; 2 int numeroDePedidosEmFevereiro ; 3 int numeroDePedidosEmMarco ;
Finalmente, os nomes das variveis conseguem expressar melhor a inteno delas. Consequentemente, a leitura e o entendimento do cdigo fonte seria mais fcil. Geralmente, bons nomes de variveis so compostos por vrias palavras como no exemplo a seguir.
1 int numeroDeCandidatosAprovados ;
Quando o nome de uma varivel composto, fundamental adotar alguma conveno para identicar o incio e o termino das palavras. A separao natural das palavras na lngua portuguesa so os espaos. Contudo, os nomes das variveis em Java ou C# no podem possuir espaos. No adotar nenhuma conveno de nomenclatura para identicar o incio e o termino das palavras como escrever um texto em portugus sem espaos entre as palavras. Em alguns casos, o leitor no saberia como separar as palavras. Considere o exemplo abaixo.
salamesadia
O que est escrito no texto acima? A resposta depende da diviso das palavras. Voc pode ler como sala mesa dia ou salame sadia. Dessa forma, ca claro a necessidade deixar visualmente explcito a diviso das palavras. Em algumas linguagens de programao, delimitadores so utilizados para separar as palavras que formam o nome de uma varivel.
numero_de_candidatos_aprovados; numero-de-candidatos-aprovados;
Em outras linguagens de programao, letras maisculas e minsculas so utilizadas para separar as palavras.
NumeroDeCandidatosAprovados; numeroDeCandidatosAprovados;
Em Java ou em C#, a conveno de nomenclatura adotada para separar as palavras que formam o nome de uma varivel o Camel Case, que consiste em escrever o nome da varivel com a primeira letra de cada palavra em maiscula com exceo da primeira letra da primeira palavra.
www.facebook.com/k19treinamentos
49
VARIVEIS
1 int numeroDaConta ; 2 int NumeroDaConta ; // no segue a conveno
Cdigo Java 3.35: Conveno para a escrita dos nomes das variveis em Java e C#.
50
Tambm devemos nos lembrar que as duas linguagens so Case Sensitive. Dessa forma, numeroDaConta e NumeroDaConta so consideradas variveis diferentes pelo fato do nome da primeira comear com letra minscula e o da segunda com maiscula.
Regras de nomenclatura
As linguagens Java e C# possuem regras tcnicas muito parecidas a respeito da nomenclatura das variveis. O nome de uma varivel:
1. No deve comear com um dgito; 2. No pode ser igual a uma palavra reservada; 3. No pode conter espao(s); 4. Pode ser uma palavra de qualquer tamanho; 5. Pode conter letras, dgitos e _ (underscore). 6. Em Java, pode conter tambm 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
// vlido int numeroDaConta ; // invlido pois o nome de uma varivel no pode comear com um dgito int 2 outraVariavel ; // invlido pois o nome de uma varivel no pode ser igual a uma palavra reservada double double ; // invlido pois o nome de uma varivel no pode conter espaos double saldo da conta ; // vlido int umaVariavelComUmNomeSuperHiperMegaUltraGigante ; // vlido int numeroDaContaCom8Digitos_semPontos ; // vlido somente em Java int valorDoProdutoEmR$; // invlido pois o nome de uma varivel no pode conter o caractere # int # telefone ;
Cdigo Java 3.36: Exemplos de nomes de variveis vlidos e invlidos
As linguagens Java e C# permitem a criao de nomes de variveis em qualquer idioma, pois elas aceitam qualquer caractere Unicode UTF-16. Portanto so vlidas as variveis escritas com as acentuaes do portugus, assim como as variveis escritas em japons, por exemplo.
50
www.k19.com.br
51
VARIVEIS
Apesar de ser possvel o uso de caracteres especiais, assim como o uso dos caracteres $ (cifro) e _ (underscore), no recomendvel utiliz-los. No utilizar tais caracteres uma boa prtica de programao. Essa prtica facilita a leitura do cdigo fonte em qualquer editor de texto.
Keywords
Toda linguagem de programao 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 nal nally oat 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
abstract byte class delegate event xed if internal new override readonly short struct try unsafe volatile
as case const do explicit oat 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 nally goto namespace out public sealed string true unchecked void
Formatao
www.facebook.com/k19treinamentos
51
VARIVEIS
52
Considere uma varivel que armazena o preo de um produto. Geralmente, preos possuem casas decimais. Dessa forma, devemos escolher um tipo que permita o armazenamento de nmeros reais. Por exemplo, podemos escolher o tipo double no Java ou no C#. Veja os exemplos a seguir.
1 double preco = Math . random () * 1 ;
1 System . Random gerador = new System . Random () ; 2 double preco = gerador . NextDouble () * 1 ;
Cdigo C# 3.26: Preo de um produto
Nos exemplos anteriores, os preos dos produtos foram gerados aleatoriamente. Com alta probabilidade, esses valores possuiro mais do que duas casas decimais. Contudo, provavelmente, seria mais conveniente exibir os preos apenas com duas casas decimais. Isso pode ser feito facilmente em Java ou C# atravs das mscaras de formatao.
1 System . out . printf ( " %.2 f " , preco ) ;
Cdigo Java 3.38: Exibindo nmeros formatados em Java
Podemos inserir diversos parmetros nas mscaras de formatao. Em Java, cada parmetro 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) ;
Cdigo Java 3.39: Parmetros na mscara de formatao
No exemplo, o trecho %1$s indica que o primeiro parmetro da mscara uma string. J o trecho %2$d indica que o segundo parmetro um nmero inteiro. Por m, o trecho %3$.2f indica que o terceiro parmetro um nmero real formatado com duas casas decimais. S ou s: string D ou d: nmero inteiro decimal X ou x: nmero inteiro decimal f: nmero real Em C#, os parmetros so denidos com chaves ({}).
1 System . Console . WriteLine ( " { } tem {1: D } anos e pesa {2: F2 } " , " Jonas " , 3 , 49.459) ;
Cdigo C# 3.28: Parmetros na mscara de formatao
No exemplo, o trecho {0} indica onde o primeiro parmetro deve ser inserido. J o trecho {1:D} indica que o segundo parmetro um nmero inteiro. Por m, o trecho {2:F2} indica que o terceiro parmetro um nmero real formatado com duas casas decimais.
52
www.k19.com.br
53
VARIVEIS
Na mscara de formatao, devemos utilizar os caracteres especiais para denir o formato desejado. Veja o que cada caractere indica.
Quando o caractere d utilizado de forma simples na mscara de formatao, os dias de 1 at 9 so formatados com apenas um dgito. Quando utilizamos dd, os dias de 1 at 9 so formatados com apenas dois dgitos (01, 02, 03, ..., 09). Analogamente, para o ms, ano, hora, minutos e segundos. Agora, veremos a formatao 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 " ) ;
Cdigo C# 3.29: Aplicando o formado "dia/ms/ano hora:minutos:segundos
www.facebook.com/k19treinamentos
53
VARIVEIS
54
Na pasta variaveis, implemente um programa em Java para exibir os valores formatados de algumas variveis.
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 }
Cdigo Java 3.41: TestaFormatacao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao8.zip
10
Na pasta variaveis, implemente um programa em Java que realiza uma operao 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 }
Cdigo Java 3.42: TestaCasting.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao1 .zip
11
54
www.k19.com.br
55
12
VARIVEIS
Na pasta variaveis, implemente um programa em Java que realiza uma operao de converso 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 }
Cdigo Java 3.43: TestaConversao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao12.zip
13
www.facebook.com/k19treinamentos
55
VARIVEIS
2 { 3 static void Main () 4 { 5 int a = 1 ; 6 7 double a = 1 .7; 8 9 int a = 5; 1 } 11 }
Cdigo C# 3.30: Programa.cs
56
56
www.k19.com.br
57
VARIVEIS
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 }
Cdigo Java 3.47: Programa.java
www.facebook.com/k19treinamentos
57
VARIVEIS
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 }
Cdigo C# 3.32: Programa.cs
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 }
Cdigo C# 3.33: Programa.cs
58
www.k19.com.br
59
VARIVEIS
59
VARIVEIS
Programa . cs (5 ,11): error CS 266 : Cannot implicitly convert type double to int . An explicit conversion exists ( are you missing a cast ?)
60
Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo int chamada idade. Essa varivel deve ser inicializada com o valor da sua idade. Por m, exiba o valor da varivel.
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 }
Cdigo C# 3.36: TestaVariavel.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao14.zip
15
Na pasta variaveis, implemente um programa em C# que gere um nmero real aleatrio entre 0 e 100. Esse nmero deve ser armazenado em uma varivel do tipo double chamada numeroAleatorio. Por m, exiba o valor da varivel.
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 }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
60
1-variaveis-fixacao16.zip
www.k19.com.br
61
17
VARIVEIS
18 Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo string chamada nome. Essa varivel deve ser inicializada com o seu nome. Por m, exiba o valor da varivel.
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 }
Cdigo C# 3.38: TestaString.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao18.zip
19
Na pasta variaveis, implemente um programa em C# para exibir os valores de algumas variveis 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 }
Cdigo C# 3.39: TestaFormatacao.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao2 .zip
21
www.facebook.com/k19treinamentos
61
VARIVEIS
K19 / rafael / variaveis$ javac TestaFormatacao . java K19 / rafael / variaveis$ java TestaFormatacao O Jonas Hirata tem 3 anos e pesa 49.73
62
22
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 }
Cdigo C# 3.40: TestaCasting.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao22.zip
23
Na pasta variaveis, implemente um programa em C# que realiza uma operao de converso 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 }
Cdigo Java 3.50: TestaConversao.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-fixacao24.zip
25
62
www.k19.com.br
63
C :\ Users \ K19 \ rafael \ variaveis > TestaConversao . exe 19. 9
VARIVEIS
Exerccios Complementares
Indique os tipos adequados da linguagem Java e C# para cada valor da lista abaixo.
Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo double chamada peso. Essa varivel deve ser inicializada com o valor do seu peso. Exiba o valor dessa varivel.
2 3 Na pasta variaveis, implemente um programa em Java que declare uma varivel de cada um dos tipos bsicos vistos nesse captulo. Essas variveis devem ser inicializadas com valores adequados. Por m, exiba os valores dessas variveis.
Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo string e inicialize-a com o valor 1571.11. Depois, com uma converso, copie esse valor para uma varivel do tipo double.
4
Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo java.util.Calendar e inicialize-a com a data e a hora atuais. Depois, declare uma outra varivel do tipo java.util.Calendar e inicialize-a com a data 27 de Agosto de 2010 e hora 10:32:15. Por m, formate e exiba essas datas.
5
Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo double chamada peso. Essa varivel deve ser inicializada com o valor do seu peso. Exiba o valor dessa varivel.
6
www.facebook.com/k19treinamentos
63
VARIVEIS
7
64
Na pasta variaveis, implemente um programa em C# que declare uma varivel de cada um dos tipos bsicos vistos nesse captulo. Essas variveis devem ser inicializadas com valores adequados. Por m, exiba os valores dessas variveis.
8 Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo string e inicialize-a com o valor 1571.11. Depois, com uma converso, copie esse valor para uma varivel do tipo double.
Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo System.DateTime e inicialize-a com a data e a hora atuais. Depois, declare uma outra varivel do tipo System.DateTime e inicialize-a com a data 27 de Agosto de 2010 e hora 10:32:15. Por m, formate e exiba essas datas.
9
Considere um sistema de gerenciamento de mercadorias de uma loja. Implemente um programa que declare variveis para representar os seguintes dados: nmero do pedido, cdigo do produto, quantidade e valor total da compra. Inicialize essas variveis com valores apropriados. Por m, exiba os valores armazenados.
10
Desaos
Olhando para a soluo dada nos exerccios complementares, voc faria alguma alterao caso estivssemos desenvolvendo o sistema para uma loja pequena? E se fosse para uma grande rede de lojas? Quais seriam as alteraes e quais as implicaes?
1
Resumo do Captulo
Para armazenar um valor em uma varivel, esse valor deve ser compatvel com o tipo da vari-
vel.
64
65
7
VARIVEIS
10
11
12
13
14
15
16
Prova
a) Exibir as mensagens dos programas. b) Gerar nmeros aleatrios. c) Formatar nmeros com casas decimais. d) Armazenar dados. e) Realizar clculos matemticos.
65
VARIVEIS
66
a) Um erro de compilao. b) Um erro de execuo. c) A varivel inicializada com 0. d) A varivel inicializada com um valor aleatrio. e) A varivel inicializada com null.
a) byte e double b) int e oat c) oat e double d) real e long e) single e double
a) byte, long e double b) oat, double e decimal c) oat e double d) oat e real e) double e decimal
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
VARIVEIS
a) verdadeiro e falso b) True e False c) True e false d) true ou verdadeiro e false ou falso e) true e false
a) decimal e hexadecimal b) binrio e decimal c) octal e decimal d) binrio, decimal e hexadecimal e) binrio, octal, decimal e hexadecimal
a) decimal e hexadecimal b) binrio e decimal c) octal e decimal d) binrio, decimal e hexadecimal e) binrio, octal, decimal e hexadecimal
a) Dentro de aspas simples. b) Dentro de aspas duplas. c) Dentro de aspas simples ou aspas duplas.
10
67
VARIVEIS
68
a) As linguagens Java e C# no permitem operaes de casting. b) Operaes de casting so utilizadas para copiar valores entre variveis do mesmo tipo. c) Operaes de casting so perigosas pois podem gerar valores indesejados. d) Nas linguagens Java e C#, as operaes de casting so utilizadas para transformar strings em nmeros. e) Nas linguagens Java e C#, as operaes de casting so utilizadas para transformar nmeros em strings.
11
12
Minha Pontuao
Pontuao Mnima:
Pontuao Mxima:
12
68
www.k19.com.br
CAPTULO
/ -= < % *= <= || /= > %= >= ++ --
O PERADORES
Tipos de Operadores
Para manipular as variveis de uma aplicao, devemos utilizar os operadores oferecidos pela linguagem de programao que estamos utilizando. As linguagens Java e C# possuem diversos operadores. Os principais operadores dessas linguagens so: Aritmtico: Atribuio: Relacional: Lgico: & + = == | += != *
&&
Operadores Aritmticos
Os operadores aritmticos funcionam de forma muito semelhante aos operadores da matemtica. Os operadores aritmticos so: Adio + Subtrao Multiplicao * Diviso / Mdulo %
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
Cdigo Java 4.1: Exemplo de uso dos operadores aritmticos.
70
Importante
O mdulo de um nmero x, na matemtica, o valor numrico de x desconsiderando o seu sinal (valor absoluto). Na matemtica, expressamos o mdulo da seguinte forma: | 2| = 2. Em linguagens de programao, o mdulo de um nmero o resto da diviso desse nmero por outro. No exemplo acima, o resto da diviso de 6 por 5 igual a 1. Alm disso, lemos a expresso 6%5 da seguinte forma: seis mdulo cinco.
Importante
As operaes aritmticas em Java e C# obedecem as mesmas regras da matemtica com relao precedncia dos operadores e parnteses. Portanto, o clculo comea com as operaes denidas nos parnteses mais internos at os mais externos. As operaes de multiplicao, diviso e mdulo so resolvidas antes das operaes de subtrao e adio.
Mais Sobre
As operaes de potenciao e raiz quadrada podem ser realizadas atravs dos mtodos Math.pow e Math.sqrt em Java ou atravs dos mtodos 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
Cdigo Java 4.2: Potenciao e raiz quadrada
1 2 3 4 5
Diviso Inteira
Considere uma operao de diviso entre valores inteiros. Por exemplo, uma diviso entre valores do tipo bsico int.
1 int a = 5; 2 int b = 2;
70
www.k19.com.br
71
3 System . out . println ( a / b ) ;
Cdigo Java 4.3: Diviso inteira
O PERADORES
Matematicamente, o resultado da operao 5 / 2 2.5. Contudo, nos exemplos acima, o valor obtido na diviso a / b 2. Em Java ou C#, quando ocorre uma diviso entres dois valores inteiros, a parte fracionria descartada. Podemos, explicitamente, converter um dos valores envolvidos na diviso ou at mesmo os dois para algum tipo numrico real. Dessa forma, a diviso no seria inteira e a parte fracionria no seria descartada. Essas converses podem ser realizadas com operaes de casting. Nos exemplos a seguir, o resultado das operaes de diviso 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 ) ;
Cdigo 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 ) ;
Cdigo C# 4.3: Castings
Concatenao de Strings
www.facebook.com/k19treinamentos
71
O PERADORES
72
Como vimos anteriormente, o operador + utilizado para realizar soma aritmtica. Mas, ele tambm 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 ;
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 so, automaticamente, convertidos para string e a concatenao realizada. Analogamente, essa converso ocorrer toda vez que o operador + for aplicado a valores no string com valores do tipo string.
1 System . Console . WriteLine (1 + 2 + 3 + " testando " ) ; 2 System . Console . WriteLine ( " testando " + 1 + 2 + 3) ;
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 captulo.
K19 / rafael$ mkdir operadores K19 / rafael$ cd operadores K19 / rafael / operadores$
C :\ Users \ K19 \ rafael > md operadores C :\ Users \ K19 \ rafael > cd operadores C :\ Users \ K19 \ rafael \ operadores >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao1.zip
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 }
Cdigo Java 4.10: TestaOperadoresAritmeticos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao2.zip
Na pasta operadores, implemente um programa em Java que realize operaes de diviso inteira e de casting.
4
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao4.zip
6 Na pasta operadores, implemente um programa em Java que realize operaes de concatenao 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 }
Cdigo Java 4.12: TestaConcatenacao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao6.zip
Operadores de Atribuio
Nos captulos anteriores, utilizamos o principal operador de atribuio, o operador = (igual). Os outros operadores de atribuio so:
74
www.k19.com.br
75
O PERADORES
Simples = Incremental += Decremental -= Multiplicativa *= Divisria /= 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
Cdigo Java 4.13: Exemplo de uso dos operadores de atribuio.
www.facebook.com/k19treinamentos
75
O PERADORES
76
Como podemos observar, os operadores de atribuio, exceto o simples (=), reduzem a quantidade de cdigo escrito. Podemos dizer que esses operadores funcionam como atalhos para as operaes que utilizam os operadores aritmticos.
Operadores Relacionais
Muitas vezes precisamos determinar a equivalncia entre duas variveis ou a relao de grandeza (se maior ou menor) em relao outra varivel ou valor. Nessas situaes, utilizamos os operadores relacionais. As operaes realizadas com os operadores relacionais devolvem valores do tipo boolean em Java ou bool em C#. Os operadores relacionais so: Igualdade == Desigualdade != Menor < Menor ou igual <= Maior > 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 <= 2) ; t = ( valor > 1) ; t = ( valor >= 1) ;
// // // // // //
t t t t t t
= = = = = =
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 <= 2) ; t = ( valor > 1) ; t = ( valor >= 1) ;
// // // // // //
t t t t t t
= = = = = =
Operadores Lgicos
As linguagens Java e C# permitem vericar duas condies booleanas atravs de operadores lgicos. 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 condies 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) ;
Cdigo 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) ;
A tabela verdade uma forma prtica de visualizar o resultado dos operadores lgicos. Veja a seguir a tabela verdade dos operadores & e &&.
a > 0.2 V V F F
b < 0.8 V F V F
Os operadores |(OU simples) e ||(OU duplo) devolvem true se pelo menos uma das condies 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) ;
Cdigo 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) ;
Tambm, 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
www.facebook.com/k19treinamentos
77
O PERADORES
78
O operador (OU exclusivo) devolve true se apenas uma das condies for true.
1 double a = Math . random () ; 2 double b = Math . random () ; 3 4 System . out . println ( a > .2 ^ b <
.8) ;
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) ;
a > 0.2 V V F F
b < 0.8 V F V F
Os operadores & e && produzem o mesmo resultado lgico. Ento, qual a diferena entre eles? O operador & sempre avalia as duas condies. Por outro lado, o operador && no avalia a segunda condio se o valor da primeira condio for falso. De fato, esse comportamento plausvel pois se o valor da primeira condio for falso o resultado lgico da operao falso independentemente do valor da segunda condio. Dessa forma, podemos simplicar a tabela verdade do operador &&.
a > 0.2 V V F
b < 0.8 V F ?
Analogamente, podemos deduzir a diferena entre os operadores | e ||. As duas condies sempre so avaliadas quando utilizamos o operador |. Agora, quando utilizamos o operador || a segunda condio avaliada somente se o valor da primeira condio for verdadeiro. Realmente, esse comportamento aceitvel pois o resultado lgico da operao verdadeiro quando o valor da primeira condio for verdadeiro independentemente do valor da segunda condio. Dessa forma, podemos simplicar a tabela verdade do operador ||.
78
www.k19.com.br
79
O PERADORES
a > 0.2 V F F
b < 0.8 ? V F
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 ) ;
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao8.zip
10
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 ) ; 1 System . out . println ( a == b ) ; 11 System . out . println ( a != b ) ; 12 } 13 }
Cdigo Java 4.21: TestaOperadoresRelacionais.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao1 .zip
11
80
www.k19.com.br
81
12
O PERADORES
1 class TestaOperadoresLogicos { 2 public static void main ( String [] args ) { 3 int a = 1; 4 int b = 2; 5 int c = 3; 6 int d = 4; 7 8 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 }
Cdigo Java 4.22: TestaOperadoresLogicos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao12.zip
13
Operador ternrio ?:
Considere um programa que controla as notas dos alunos de uma escola. Para exemplicar, 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 ternrio do Java e do C#.
nota >= 0.5 ? aprovado : reprovado
Condio Valor 1 Valor 2
Quando a condio(nota >= 0.5) verdadeira, o operador ternrio devolve o primeiro resultado
www.facebook.com/k19treinamentos
81
O PERADORES
82
(aprovado). Caso contrrio, devolve o segundo resultado(reprovado). Podemos guardar o resultado do operador ternrio em uma varivel 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 ternrio 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;
.2;
Operador !
Valores booleanos podem ser invertidos com o operador de ! (negao). Por exemplo, podemos vericar se uma varivel do tipo double armazena um valor maior do que 0.5 de duas formas diferentes.
1 d > .5
1 !( d <=
.5)
Pr e Ps Incremento ou Pr e Ps Decremento
Os operadores ++ e -- podem ser utilizados de duas formas diferentes, antes ou depois de uma varivel numrica.
1 int i = 1 ; 2 i ++; 3 i - -;
1 int i = 1 ; 2 ++ i ; 3 --i ;
No primeiro exemplo, o operador ++ foi utilizado depois da varivel i. J no segundo exemplo, ele foi utilizado antes da varivel i. A primeira forma de utilizar o operador ++ chamada de ps incremento. A segunda chamada de pr incremento. Analogamente, o operador -- foi utilizado na forma de ps decremento no primeiro exemplo e pr decremento no segundo exemplo. Mas, qual a diferena entre pr incremento e ps incremento ou entre pr decremento e ps decremento? Vamos apresentar a diferena com alguns exemplos.
82
www.k19.com.br
83
1 int i = 1 ; 2 3 // true 4 System . out . println ( i ++ == 1 ) ;
O PERADORES
Observe que o operador ++ foi utilizado nas expresses dos exemplos acima em conjunto com o operador ==. Como dois operadores foram utilizados na mesma expresso, voc pode ter dvida em relao a ordem de execuo desses operadores. O incremento com o operador ++ ser realizado antes ou depois da comparao com o operador ==? Como o operador ++ foi utilizado na forma de ps incremento, a comparao ocorrer antes do incremento. Analogamente, a comparao ocorreria antes do decremento se o operador -- fosse utilizado na forma de ps decremento. Agora, considere a utilizao do operador ++ na forma de pr incremento.
1 int i = 1 ; 2 3 // false 4 System . out . println (++ i == 1 ) ;
Nesse ltimos exemplos, a comparao com o operador == realizada depois do incremento do operador ++. Analogamente, a comparao ocorreria depois do decremento se o operador -- fosse utilizado na forma de pr decremento.
www.facebook.com/k19treinamentos
83
O PERADORES
84
14
1 class TestaOperadorTernario { 2 public static void main ( String [] args ) { 3 int a = ( int ) ( Math . random () * 1 ) ; 4 int b = ( int ) ( Math . random () * 1 ) ; 5 6 System . out . println ( a < b ? " a < b " : " a >= b " ) ; 7 } 8 }
Cdigo Java 4.33: TestaOperadorTernario.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao14.zip
15 Compile uma vez e execute vrias vezes a classe TestaOperadorTernario. Voc obter um resultado semelhante ao apresentado a seguir.
K19 / rafael / operadores$ javac TestaOperadorTernario . java K19 / rafael / operadores$ java TestaOperadorTernario a < b K19 / rafael / operadores$ java TestaOperadorTernario a >= b K19 / rafael / operadores$ java TestaOperadorTernario a >= b K19 / rafael / operadores$ java TestaOperadorTernario a < b K19 / rafael / operadores$ java TestaOperadorTernario a < b
16
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 }
Cdigo Java 4.34: TestaOperadorNegacao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao16.zip
17
84
www.k19.com.br
85
K19 / rafael / operadores$ java TestaOperadorNegacao false
O PERADORES
18 Na pasta operadores, implemente um programa em Java que utilize o operador ++ na forma de pr e ps incremento. Analogamente, utilize o -- na forma de pr e ps 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 }
Cdigo Java 4.35: TestaPrePosIncrementoDecremento.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao18.zip
19
1 string s = " Rafael Cosentino " ; 2 3 int length = s . Length ; 4 5 System . Console . WriteLine ( length ) ;
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
Podemos vericar se uma determinada sequncia de caracteres est contida em uma string.
1 2 3 4 5 6 7 8 9 1 String s = " K11 - Orientao 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 Orientao a Objetos " ; bool resultado1 = s . Contains ( " Java " ) ; bool resultado2 = s . Contains ( " C # " ) ; // True System . Console . WriteLine ( resultado1 ) ; // False System . Console . WriteLine ( resultado2 ) ;
Podemos vericar se uma string termina com uma determinada sequncia de caracteres.
1 2 3 4 5 6 7 8 9 1 String s = " K11 - Orientao 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 Orientao a Objetos " ; bool resultado1 = s . EndsWith ( " C # " ) ; bool resultado2 = s . EndsWith ( " Objetos " ) ; // False System . Console . WriteLine ( resultado1 ) ; // True System . Console . WriteLine ( resultado2 ) ;
Podemos vericar se uma string comea com uma determinada sequncia de caracteres.
1 String s = " K11 - Orientao 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 Orientao a Objetos " ; bool resultado1 = s . StartsWith ( " C # " ) ; bool resultado2 = s . StartsWith ( " K31 " ) ; // False System . Console . WriteLine ( resultado1 ) ; // True System . Console . WriteLine ( resultado2 ) ;
1 2 3 4 5 6
string s1 = " K19 - Treinamentos " ; string s2 = s1 . Replace ( " Treinamentos " , " Cursos " ) ; // K19 - Cursos System . Console . WriteLine ( s2 ) ;
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 ) ;
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 ) ;
1 2 3 4 5 6
string s1 = " Rafael Cosentino " ; string s2 = s1 . ToLower () ; // rafael cosentino System . Console . WriteLine ( s2 ) ;
1 2 3 4 5 6
string s1 = "
Rafael Cosentino
";
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 ms e o ano sero 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 ) ;
20 Na pasta operadores, implemente um programa em Java que utilize as principais operaes 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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao2 .zip
21
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
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 }
Cdigo Java 4.50: Programa.java
1 class Programa { 2 public static void main ( String [] args ) { 3 int i = 1; 4 5 System . out . println (! i ) ; 6 } 7 }
Cdigo Java 4.51: Programa.java
www.facebook.com/k19treinamentos
91
O PERADORES
92
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 }
Cdigo C# 4.30: Programa.cs
22
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao22.zip
23
Na pasta operadores, implemente um programa em C# que realize operaes de diviso 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 }
Cdigo C# 4.33: TestaDivisaoInteira.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao24.zip
25
26
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 }
Cdigo C# 4.34: TestaConcatenacao.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao26.zip
27
28
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 }
Cdigo C# 4.35: TestaOperadoresDeAtribuicao.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao28.zip
29
94
www.k19.com.br
95
1 3 2 6 3 1
O PERADORES
30
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 <= b ) ; 12 System . Console . WriteLine ( a == b ) ; 13 System . Console . WriteLine ( a != b ) ; 14 } 15 }
Cdigo C# 4.36: TestaOperadoresRelacionais.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao3 .zip
31
32
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao32.zip
33
34
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 }
Cdigo C# 4.38: TestaOperadorTernario.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao34.zip
Compile uma vez e execute vrias 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
36
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 }
Cdigo C# 4.39: TestaOperadorNegacao.cs
O PERADORES
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao36.zip
37
38 Na pasta operadores, implemente um programa em C# que utilize o operador ++ na forma de pr e ps incremento. Analogamente, utilize o -- na forma de pr e ps 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 }
Cdigo C# 4.40: TestaPrePosIncrementoDecremento.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao38.zip
39
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 }
Cdigo C# 4.41: TestaOperacoesString.cs
98
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-fixacao4 .zip
41
Exerccios Complementares
98
99
O PERADORES
cdigo a seguir com os operadores aritmticos: +, -, *, / e %. O programa deve exibir os nmeros 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 }
Cdigo Java 4.52: UseOperadoresAritmeticos.java
Utilizando os operadores aritmticos, crie um programa em Java que mostre a idade mdia de trs pessoas: Rafael Cosentino = 27; Jonas Hirata = 29; Marcelo Martins = 27.
2
Na pasta operadores, crie uma classe Java chamada UseDivisaoCasting. Complete o cdigo a seguir com operaes de diviso e operaes de casting. O programa deve exibir os nmeros 20 e 20.5 nessa ordem. Utilize as variveis 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 }
); );
Na pasta operadores, crie uma classe Java chamada UseConcatenacao. Complete o cdigo a seguir com operaes de concatenao. O programa deve exibir as strings Rafael Cosentino, Jonas Hirata e Marcelo Martins nessa ordem. Utilize as variveis 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
Na pasta operadores, crie uma classe Java chamada UseOperadoresAtribuicao. Complete o cdigo a seguir com operadores de atribuio: =, +=, -=, *=, /=, %=, ++ e --. O programa deve exibir os nmeros 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 }
Cdigo Java 4.59: UseOperadoresAtribuicao.java
6 Crie um programa em Java que aplique os operadores de atribuio no seguinte telefone: 23873791. Esses operadores devem ser aplicados na seguinte ordem: incrementao, decrementao, diviso, multiplicao, mdulo e incrementao. Inicie com o valor 23, e a cada dgito do telefone, utilize um operador.
Na pasta operadores, crie uma classe Java chamada UseOperadoresRelacionais. Complete o cdigo a seguir com operadores relacionais: >, <, >=, <=, == e !=. O programa deve exibir os valores true, true, false, false, false e true nessa ordem.
7
1 class UseOperadoresRelacionais { 2 public static void main ( String [] args ) { 3 int x = 2 ; 4 int y = 15; 5 6 System . out . println ( x y); 7 System . out . println ( x y); 8 System . out . println ( x y); 9 System . out . println ( x y); 1 System . out . println ( x y); 11 System . out . println ( x y); 12 } 13 }
Cdigo Java 4.62: UseOperadoresRelacionais.java
Crie um programa em Java que verica se o valor do ano do atentado das Torres Gmeas somado
www.k19.com.br
100
101
O PERADORES
com 19 e dividido por 4 maior ou igual que o valor do ano em que o cantor Michael Jackson faleceu somado com 129 e dividido por 5.
Na pasta operadores, crie uma classe Java chamada UseOperadoresLogicos. Complete o cdigo a seguir com os operadores lgicos: , &, &&, | e ||. O programa deve exibir os valores true, false, true, false e false sejam exibidos nessa ordem. No utilize operadores repetidos.
9
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 < 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 }
Na pasta operadores, crie uma classe Java chamada UseTernarioNegacaoIncrementoDecremento. Complete o cdigo a seguir utilizando o operador ternrio, o operador de negao e os operadores ++ e --. O programa deve exibir 8, Marcelo, 9 e 10 nessa ordem. No necessrio 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 }
Cdigo 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 trs parcelas devem vencer exatamente 30, 60 e 90 dias aps a primeira.
11
Na pasta operadores, crie uma classe C# chamada UseOperadoresAritmeticos. Complete o cdigo a seguir com os operadores aritmticos: +, -, *, / e %. O programa deve exibir os nmeros 11, 4, 12, 4 e 1 nessa ordem.
12
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 ) ;
Utilizando os operadores aritmticos, crie um programa em C# que mostre a idade mdia de trs pessoas: Rafael Cosentino = 27; Jonas Hirata = 29; Marcelo Martins = 27.
13
Na pasta operadores, crie uma classe C# chamada UseDivisaoCasting. Complete o cdigo a seguir com operaes de diviso e operaes de casting. O programa deve exibir os nmeros 20 e 20.5 nessa ordem. Utilize as variveis 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 }
); );
Na pasta operadores, crie uma classe C# chamada UseConcatenacao. Complete o cdigo a seguir com operaes de concatenao. O programa deve exibir as strings Rafael Cosentino, Jonas Hirata e Marcelo Martins nessa ordem. Utilize as variveis 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 }
); ); );
102
www.k19.com.br
103
16
O PERADORES
Na pasta operadores, crie uma classe C# chamada UseOperadoresAtribuicao. Complete o cdigo a seguir com operadores de atribuio: =, +=, -=, *=, /=, %=, ++ e --. O programa deve exibir os nmeros 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 }
Cdigo C# 4.48: UseOperadoresAtribuicao.cs
Crie um programa em Java que aplique os operadores de atribuio no seguinte telefone: 23873791. Esses operadores devem ser aplicados na seguinte ordem: incrementao, decrementao, diviso, multiplicao, mdulo e incrementao. Inicie com o valor 23, e a cada dgito do telefone, utilize um operador.
17
18 Na pasta operadores, crie uma classe C# chamada UseOperadoresRelacionais. Complete o cdigo a seguir com operadores relacionais: >, <, >=, <=, == e !=. O programa deve exibir os valores True, True, False, False, False e True nessa ordem.
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 }
Crie um programa em C# que verica se o valor do ano do atentado das Torres Gmeas somado com 19 e dividido por 4 maior ou igual que o valor do ano em que o cantor Michael Jackson faleceu
19
www.facebook.com/k19treinamentos
103
O PERADORES
104
Na pasta operadores, crie uma classe C# chamada UseOperadoresLogicos. Complete o cdigo a seguir com os operadores lgicos: , &, &&, | e ||. O programa deve exibir os valores True, False, True, False e False sejam exibidos nessa ordem. No utilize operadores repetidos.
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 e w r e
Na pasta operadores, crie uma classe C# chamada UseTernarioNegacaoIncrementoDecremento. Complete o cdigo a seguir utilizando o operador ternrio, o operador de negao e os operadores ++ e --. O programa deve exibir 8, Marcelo, 9 e 10 nessa ordem. No necessrio 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 }
Cdigo 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 trs parcelas devem vencer exatamente 30, 60 e 90 dias aps a primeira.
22
Resumo do Captulo
104
105
O PERADORES
literais.
As operaes aritmticas de soma, subtrao, multiplicao, diviso e resto so realizadas respectivamente atravs dos operadores: + - * / %
O contedo de uma varivel pode ser modicado atravs dos operadores de atribuio: = += -= *= /= %= ++ --.
Podemos comparar o contedo das variveis ou os valores literais atravs dos operadores relacionais: == != < <= > >=.
As operaes lgicas E, OU e OU EXCLUSIVO so realizadas atravs dos operadores: & | && ||.
10
11
12
Prova
5%2
a) 2 b) 2.5
www.facebook.com/k19treinamentos
105
O PERADORES
106
c) 0.1 d) 1 e) 5.1
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
1 + 2 + "rafael" + 3 + 4
a) 12rafael34 b) 3rafael34
106
www.k19.com.br
107
O PERADORES
1 1 1 1
5 5 5 5
7 7 7 7
1 1 1 1
107
O PERADORES
108
c) true, false, true e false d) true, false, false e false e) false, true, true e false
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
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
109
O PERADORES
a) 10, 10, k01 b) 5, 5, k02 c) 10, 5, k02 d) 10, 5, k01 e) 5, 10, k02
11
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 Pontuao
Pontuao Mnima:
Pontuao Mxima:
11
www.facebook.com/k19treinamentos
109
O PERADORES
110
110
www.k19.com.br
CAPTULO
C ONTROLE DE F LUXO
Neste captulo, mostraremos instrues que permitem controlar o uxo de um programa. Essas instrues aumentam a inteligncia do cdigo. Basicamente, as linguagens de programao oferecem dois tipos de instrues para controlar o uxo de execuo dos programas: instrues de deciso e de repetio.
Instrues de Deciso
Considere um parque de diverses como os da Disney. Nesses parques, para garantir a segurana, alguns brinquedos possuem restries de acesso. Em geral, essas restries esto 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. Ento, o programa deve decidir se executa um trecho de cdigo de acordo com uma condio. Essa deciso pode ser realizada atravs das instrues de deciso oferecidas pelas linguagens de programao. Nos exemplos vistos nos captulos anteriores, a ordem da execuo das linhas de um programa exatamente a ordem na qual elas foram denidas no cdigo fonte. As instrues de deciso proporcionaro uma forma de decidirmos se queremos executar um bloco de cdigo ou no, ou seja, se desejamos pular um trecho de cdigo ou no. As instrues de deciso so capazes de criar um desvio no uxo de execuo de um programa.
Instruo if
A instruo if (se), utilizada quando queremos testar uma condio antes de executarmos um ou mais comandos. A sintaxe da instruo if a seguinte:
1 2 3 4 5 6 7 if ( condio ) // comando // comando // comando } // comando 4 // comando 5 { 1 2 3
Como funciona a instruo if? Se a condio na linha 1 for verdadeira, os comandos das linhas 2, 3 e 4 sero executadas e depois o uxo de execuo do programa segue normalmente e executa a partir da linha 6 em diante. Por outro lado, se a condio for falsa, as linhas 2, 3 e 4 no sero executadas e o uxo de execuo do programa pula direto para a linha 6.
www.facebook.com/k19treinamentos
111
C ONTROLE DE F LUXO
112
Simulao - Debug
A altura mnima para o ingresso na atrao The Barnstormer do parque temtico da Disney Magic Kingdom 0.89 metros. Vamos simular a execuo do programa que controla o acesso dos visitantes a essa atrao.
1 Na linha 1, um nmero aleatrio do tipo double gerado com o trecho de cdigo Math.random(). Vamos utilizar esse nmero para representar a altura de um visitante que deseja ingressar na atrao The Barnstormer. Esse valor armazenado na varivel 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 " ) ;
1 2 3 4 5 6
Na linha 3, a comparao da condio do if devolve true pois o valor da varivel 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
112
www.k19.com.br
113
4
C ONTROLE DE F LUXO
A linha 4 executada porque a condio 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
1 2 3 4 5 6
Simulao - Debug
Na linha 1, um nmero aleatrio do tipo double gerado com o trecho de cdigo Math.random(). Vamos utilizar esse nmero para representar a altura de um visitante que deseja ingressar na atrao The Barnstormer. Esse valor armazenado na varivel 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 " ) ;
1 2 3 4 5 6
Na linha 3, a comparao da condio do if devolve false pois o valor da varivel altura no 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
4 A linha 4 no executada porque a condio do if da linha 3 falsa. Dessa forma, o uxo de execuo 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
Instruo else
Muitas vezes, queremos executar um bloco de comandos caso uma condio seja verdadeira e outro bloco de comandos caso essa condio seja falsa. Para isso, podemos utilizar as instrues if e else. Veja abaixo, a estrutura dessas instrues.
1 2 3 4 5 6 7 8 9 1 if ( condio ) // comando // comando // comando } else { // comando // comando // comando } // comando 7 { 1 2 3 4 5 6
No exemplo acima, se a condio na linha 1 for verdadeira, as linhas 2, 3 e 4 sero executadas e depois o uxo de execuo do programa segue para a linha 10. Por outro lado, se a condio na linha 1 for falsa, as linhas 6, 7 e 8 sero executadas e depois o uxo de execuo do programa segue para a linha 10. A instruo else no pode aparecer sozinha no cdigo sem estar vinculada a uma instruo if. A instruo else pode ser traduzida em portugus para seno. Em portugus, assim como em Java e C#, no podemos dizer seno sem antes ter dito se. Por isso, no podemos utilizar a instruo else sem antes ter utilizado a instruo if.
Simulao - Debug
114
www.k19.com.br
115
C ONTROLE DE F LUXO
A altura mnima para o ingresso na atrao The Barnstormer do parque temtico da Disney Magic Kingdom 0.89 metros. Vamos simular a execuo do programa que controla o acesso dos visitantes a essa atrao.
Na linha 1, um nmero aleatrio do tipo double gerado com o trecho de cdigo Math.random(). Vamos utilizar esse nmero para representar a altura de um visitante que deseja ingressar na atrao The Barnstormer. Esse valor armazenado na varivel 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 " ) ;
1 2 3 4 5 6 7 8
3 Na linha 3, a comparao da condio do if devolve true pois o valor da varivel 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
4 A linha 4 executada porque a condio 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 " ) ;
www.facebook.com/k19treinamentos
115
C ONTROLE DE F LUXO
.75 Acesso bloqueado
116
Por m, o uxo de execuo 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
Simulao - Debug
Na linha 1, um nmero aleatrio do tipo double gerado com o trecho de cdigo Math.random(). Vamos utilizar esse nmero para representar a altura de um visitante que deseja ingressar na atrao The Barnstormer. Esse valor armazenado na varivel 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 " ) ;
1 2 3 4 5 6 7 8
Na linha 3, a comparao da condio do if devolve false pois o valor da varivel altura no 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
A linha 4 no executada porque a condio do if da linha 3 falsa. Dessa forma, o uxo de execuo 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
Por m, o uxo de execuo 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
");
www.facebook.com/k19treinamentos
117
C ONTROLE DE F LUXO
7 } else { 8 if ( valor <= 4 ) { 9 System . out . println ( " Saque efetuado com sucesso " ) ; 1 } else { 11 System . out . println ( " Valor mximo de saque R$ 4 , 12 } 13 }
118
");
Abra um terminal; Entre na pasta dos seus exerccios e crie uma pasta chamada controle-deuxo para os arquivos desenvolvidos nesse captulo.
1
K19 / rafael$ mkdir controle - de - fluxo K19 / rafael$ cd controle - de - fluxo K19 / rafael / controle - de - fluxo$
C :\ Users \ K19 \ rafael > md controle - de - fluxo C :\ Users \ K19 \ rafael > cd controle - de - fluxo C :\ Users \ K19 \ rafael \ controle - de - fluxo >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao1.zip
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 }
Cdigo Java 5.23: AprovadoReprovado.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao2.zip
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
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 preo do produto 1 : " + precoDoProduto1 ) ; 7 System . out . println ( " O preo 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 preos dos dois produtos so iguais " ) ; 16 } 17 } 18 } 19 }
Cdigo Java 5.24: VericaValorProduto.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao4.zip
www.facebook.com/k19treinamentos
119
C ONTROLE DE F LUXO
O preo do produto 1 : 45 . 919 821815 5 O preo do produto 2 : 95 . 5644529133 O produto 1 o mais barato
120
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 }
Cdigo Java 5.25: EscolheCaminho.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao6.zip
120
www.k19.com.br
121
Vire direita
C ONTROLE DE F LUXO
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 ( " cala jeans " ) ; 15 } else { 16 System . out . println ( " bermuda " ) ; 17 } 18 19 valor = Math . random () ; 2 21 if ( valor < .5) { 22 System . out . println ( " tnis " ) ; 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 }
Cdigo Java 5.26: EscolheRoupa.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao8.zip
www.facebook.com/k19treinamentos
121
C ONTROLE DE F LUXO
122
10 Na pasta controle-de-uxo, crie um arquivo chamado ADivisivelPorB.java. Implemente um programa em Java que guarde dois valores numricos: a e b. Imprima na tela a mensagem divisvel quando a for divisvel por b ou a mensagem No divisvel, caso contrrio.
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 ( " divisvel " ) ; 11 } else { 12 System . out . println ( " No divisvel " ) ; 13 } 14 } 15 }
Cdigo Java 5.27: ADivisivelPorB.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao1 .zip
11
12 Na pasta controle-de-uxo, crie um arquivo chamado Saudacao.java. Implemente um programa em Java que contenha uma varivel chamada hora. Essa varivel 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 }
Cdigo 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
Instrues de Repetio
Considere um programa que gera bilhetes de loteria. O nmero 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 instrues de repetio oferecidas pelas linguagens de programao. Basicamente, as instrues de deciso permitem que um determinado trecho de cdigo seja executado ou no. Em algumas situaes, necessrio repetir a execuo de um determinado trecho de cdigo. Nessas situaes, devemos utilizar as instrues de repetio.
Instruo while
A instruo while indica o incio de um lao e recebe como parmetro uma condio. Essa condio chamada de condio de parada, pois quando ela for falsa, o lao interrompido. A estrutura ou sintaxe da instruo while a seguinte:
1 while ( condio 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 portugus a instruo while como enquanto, ca mais fcil entender o seu funcionamento. O cdigo acima poderia ser lido da seguinte forma: Enquanto a condio 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 padro:
Mensagem nmero 1 Mensagem nmero 2 Mensagem nmero 3 ...
Esse programa poderia ser implementado em Java ou C# de uma forma no prtica. 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 nmero 1 " ) ; nmero 2 " ) ; nmero 3 " ) ; nmero 1 ");
1 2 3 4 5
System . Console . WriteLine ( " Mensagem System . Console . WriteLine ( " Mensagem System . Console . WriteLine ( " Mensagem ... System . Console . WriteLine ( " Mensagem
1 2 3 4 5 6 7
// Contador de vezes que a mensagem foi impressa . int i = 1; while ( i <= 1 ) { System . Console . WriteLine ( " Mensagem nmero " + i ) ; i ++; }
Cdigo C# 5.2: Imprimindo a frase Mensagem nmero x.
124
www.k19.com.br
125
C ONTROLE DE F LUXO
At agora, o uso da instruo while parece ser mais uma convenincia do que uma necessidade. Vamos mudar um pouco o exemplo anterior para vericar a importncia das instrues de repetio. Considere que a frase Mensagem nmero x tenha que ser impressa um nmero aleatrio de vezes. Dessa forma, durante a codicao, no sabemos quantas vezes a frase dever ser impressa. Um possvel cdigo para solucionar esse novo problema seria:
1 class ExemploWhile { 2 public static void main ( String [] args ) { 3 int i = 4 5 // nmero no intervalo [ ,99] 6 int numeroAleatorio = ( int ) ( Math . random () * 1 ) ; 7 8 while ( i < numeroAleatorio ) { 9 System . out . println ( " Mensagem nmero " + ( i + 1) ) ; 1 i ++; 11 } 12 } 13 }
Cdigo Java 5.32: Imprimindo a frase Mensagem nmero x um nmero aleatrio de vezes.
1 class ExemploWhile 2 { 3 static void Main () 4 { 5 int i = 6 7 System . Random gerador = new System . Random () ; 8 9 // nmero no intervalo [ ,99] 1 int numeroAleatorio = ( int ) ( gerador . NextDouble () * 1 11 12 while ( i < numeroAleatorio ) { 13 System . out . println ( " Mensagem nmero " + ( i + 1) ) ; 14 i ++; 15 } 16 } 17 }
);
A cada vez que executado, o programa acima pode imprimir uma quantidade diferente de mensagens. Esse comportamento seria possvel sem a utilizao de uma instruo de repetio?
Simulao - Debug
Vamos simular a execuo de um programa que gera bilhetes de loteria. Para no alongar muito a simulao, apenas 3 bilhetes sero gerados. Esses bilhetes devem ser numerados sequencialmente iniciando com o nmero 1000. Na linha 1, a varivel numero declarada e inicializada com o valor 1000.
www.facebook.com/k19treinamentos
125
C ONTROLE DE F LUXO
126
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Na linha 2, a condio de parada do while testada. Como o valor da varivel numero menor do que 1002, a condio numero <= 1002 devolve true.
2
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Como a condio da linha 2 devolveu true, o corpo do while ser executado. Ao executar a linha 3 a mensagem Bilhete 1000 exibida no terminal.
3
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1
1 2 3 4 5 6
5 O uxo de execuo volta para a linha 2 e a condio do while testada novamente. Mais uma vez, o valor da varivel numero menor do que 1002. Dessa forma, a condio numero <= 1002 devolve true.
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1
126
www.k19.com.br
127
C ONTROLE DE F LUXO
Como a condio da linha 2 devolveu true, o corpo do while ser executado. Ao executar a linha 3 a mensagem Bilhete 1001 exibida no terminal.
6
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 1
1 2 3 4 5 6
Agora, o uxo de execuo volta para a linha 2 e a condio do while testada novamente. O valor da varivel numero igual a 1002. Dessa forma, a condio numero <= 1002 ainda devolve true.
8
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 1
9 Como a condio da linha 2 devolveu true, o corpo do while ser executado. Ao executar a linha 3 a mensagem Bilhete 1002 exibida no terminal.
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 1 2
10
www.facebook.com/k19treinamentos
127
C ONTROLE DE F LUXO
128
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 1 2
Mais uma vez, o uxo de execuo volta para a linha 2 para testar a condio do while. Finalmente, o valor da varivel numero no menor ou igual a 1002. Dessa forma, a condio devolve false.
11
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 1 2
Como a condio da linha 2 falsa, o corpo do while no ser mais executado. Portanto, o lao interrompido e o uxo de execuo pula para a linha 6. Ao executar essa linha, a mensagem FIM exibida no terminal.
12
1 2 3 4 5 6
int numero = 1 ; while ( numero <= 1 2) { System . out . println ( " Bilhete " + numero ) ; numero ++; } System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 FIM 1 2
Instruo for
A instruo for uma outra instruo de repetio e tem a mesma nalidade da instruo while. Na maioria dos casos, podemos resolver questes que envolvem repeties com while ou for. A diferena que, geralmente, utilizamos a instruo for nos casos em que precisamos de um contador em nossa condio de parada. Para car mais claro, veja a estrutura ou sintaxe da instruo for:
1 for ( inicializao ; condio de parada ; atualizao ) { 2 // comandos 3 }
No lugar da inicializao, devemos inserir os comandos que sero executados antes do incio do lao. No lugar da atualizao, devemos inserir os comandos que sero executadas ao nal de cada
128
www.k19.com.br
129
C ONTROLE DE F LUXO
iterao(repetio).
Importante
O termo iterao utilizado quando nos referimos repetio de uma ou mais aes. Portanto, quando dizemos que algo deve ser executado a cada iterao de um lao estamos querendo dizer que a cada rodada desse lao algo deve ser executado.
Perceba que o cdigo cou mais compacto sem prejudicar a compreenso. Na linha em destaque, declaramos e inicializamos a varivel i (int i = 1); denimos a condio de parada (i <= 100) e denimos que ao nal de cada iterao devemos atualizar a varivel i (i++). Diferentemente do while, no for, a inicializao, a condio e a atualizao do lao so denidas na mesma linha.
Mais Sobre
Vimos que a instruo for possui 3 argumentos: inicializao, condio e atualizao. Esses argumentos podem ser mais complexos do que os utilizados anteriormente. Podemos declarar e/ou inicializar diversas variveis na inicializao. Podemos denir condies mais sosticadas com uso dos operadores lgicos. Podemos atualizar o valor de diversas variveis na atualizao. Veja um exemplo.
1 for ( int i = 1 , j = 2; i % 2 != 2 // comandos 3 } || j % 2 == ; i += j , j += i ) {
Mais Sobre
Os trs argumentos da instruo for (inicializao, condio e atualizao) so opcionais. Consequentemente, o seguinte cdigo vlido apesar de ser estranho no primeiro momento.
www.facebook.com/k19treinamentos
129
C ONTROLE DE F LUXO
130
Simulao - Debug
Novamente, vamos simular a execuo de um programa que gera bilhetes de loteria. S que agora utilizando a instruo de repetio for. Para no alongar muito a simulao, apenas 3 bilhetes sero gerados. Esses bilhetes devem ser numerados sequencialmente iniciando com o nmero 1000.
Na linha 1, a varivel numero declarada e inicializada com o valor 1000. Variveis numero = 1000
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Na linha 1, a condio de parada do for testada. Como o valor da varivel numero menor ou igual a 1002, a condio devolve true.
2
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
3 Como a condio da linha 1 devolveu true, o corpo do for ser executado e a mensagem Bilhete 1000 exibida no terminal.
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1
130
www.k19.com.br
131
4
C ONTROLE DE F LUXO
Agora, o uxo de execuo volta para a linha 1 e a atualizao do for executada. Dessa forma, a varivel numero incrementada para 1001.
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1
Depois da atualizao, a condio do for testada novamente. Mais uma vez, o valor da varivel numero menor ou igual a 1002. Dessa forma, a condio devolve true.
5
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1
Como a condio da linha 1 devolveu true, o corpo do for ser executado. Ao executar a linha 3 a mensagem Bilhete 1001 exibida no terminal.
6
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 1
Mais uma vez, o uxo de execuo volta para a atualizao do for da linha 1. Dessa forma, a varivel numero incrementada para 1002.
7
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 1
Agora, a condio do for testada novamente. O valor da varivel numero ainda menor ou igual a 1002. Dessa forma, a condio devolve true.
8
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 1
Como a condio da linha 1 devolveu true, o corpo do for ser executado. Ao executar a linha 3
131
www.facebook.com/k19treinamentos
C ONTROLE DE F LUXO
132
Mais uma vez, o uxo de execuo retorna para executar a atualizao do for da linha 1. Assim, a varivel numero incrementada para 1003.
10
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 1 2
11 Agora, a condio do for testada novamente. Finalmente, o valor da varivel numero no menor ou igual a 1002. Dessa forma, a condio devolve false.
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 1 2
Como a condio do for da linha 1 falsa, o lao interrompido e o uxo de execuo pula para a linha 4. Ao executar essa linha, a mensagem FIM exibida no terminal.
12
1 for ( int numero = 1 ; numero <= 1 2; numero ++) { 2 System . out . println ( " Bilhete " + numero ) ; 3 } 4 System . out . println ( " FIM " ) ;
Bilhete 1 Bilhete 1 Bilhete 1 FIM 1 2
132
www.k19.com.br
133
3 System . out . println ( " SETOR : " + i + " CADEIRA : " + j ) ; 4 } 5 }
C ONTROLE DE F LUXO
No exemplo acima, para cada iterao do lao externo, h 200 iteraes do lao interno. Portanto, o corpo do lao interno executa 800 vezes. Esse valor exatamente a quantidade de ingressos. Alm de encadear fors, podemos encadear whiles. Veja algumas variaes do exemplo anterior.
1 int i = 1; 2 while ( i <= 4) { 3 int j = 1; 4 while ( j <= 2 ) { 5 System . out . println ( " SETOR : " + i + " CADEIRA : " + j ) ; 6 j ++; 7 } 8 i ++; 9 }
1 int i = 1; 2 while ( i <= 4) { 3 int j = 1; 4 for ( int j = 1; j <= 2 ; j ++) { 5 System . out . println ( " SETOR : " + i + " CADEIRA : " + j ) ; 6 } 7 i ++; 8 }
1 for ( int i = 1; i <= 4; i ++) { 2 int j = 1; 3 while ( j <= 2 ) { 4 System . out . println ( " SETOR : " + i + " CADEIRA : " + j ) ; 5 j ++; 6 } 7 }
14 Na pasta controle-de-uxo, crie um arquivo chamado LoremIpsum.java. Implemente um programa que exiba no terminal a mensagem Lorem ipsum dolor sit amet cinco vezes.
1 class LoremIpsum { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 5; i ++) { 4 System . out . println ( " Lorem ipsum dolor sit amet " ) ; 5 } 6 } 7 }
Cdigo Java 5.67: LoremIpsum.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao14.zip
15
www.facebook.com/k19treinamentos
133
C ONTROLE DE F LUXO
K19 / rafael / controle - de - fluxo$ javac LoremIpsum . java K19 / rafael / controle - de - fluxo$ java LoremIpsum Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet
134
Na pasta controle-de-uxo, crie um arquivo chamado Imprime100.java. Implemente um programa que exiba no terminal os nmeros de 1 at 100.
16
1 class Imprime1 { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i <= 1 ; i ++) { 4 System . out . println ( i ) ; 5 } 6 } 7 }
Cdigo Java 5.68: Imprime100.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao16.zip
17
Na pasta controle-de-uxo, crie um arquivo chamado Imprime100ExcetoMultiplo3.java. Implemente um programa que exiba no terminal os nmeros de 1 at 100 exceto os nmeros mltiplos de 3.
18
1 class Imprime1 ExcetoMultiplo3 { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i <= 1 ; i ++) { 4 if ( i % 3 != ) { 5 System . out . println ( i ) ; 6 } 7 } 8 } 9 }
Cdigo Java 5.69: Imprime100ExcetoMultiplo3.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao18.zip
19
134
www.k19.com.br
135
K19 / rafael / controle - de - fluxo$ javac Imprime1 K19 / rafael / controle - de - fluxo$ java Imprime1 1 2 4 5 ... 1 ExcetoMultiplo3 . java ExcetoMultiplo3
C ONTROLE DE F LUXO
ExcetoMultiplo3
Na pasta controle-de-uxo, crie um arquivo chamado DivideMaiorInteiro.java. Implemente um programa que declare e inicialize uma varivel que receber o maior nmero possvel do tipo int. Divida o valor dessa varivel por 2 at que o resultado obtido seja inferior a 100 (no inclusivo). A cada iterao imprima o resultado.
20
1 class DivideMaiorInteiro { 2 public static void main ( String [] args ) { 3 int numero = 2147483647; 4 5 while ( numero >= 1 ) { 6 numero /= 2; 7 System . out . println ( numero ) ; 8 } 9 } 1 }
Cdigo Java 5.70: DivideMaiorInteiro.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao2 .zip
21
Na pasta controle-de-uxo, crie um arquivo chamado GeradorDeIngressos.java. Implemente um programa para gerar os ingressos das apresentaes de um teatro. Considere que esse teatro possui 4 setores e cada setor possui 20 lugares.
22
1 class GeradorDeIngressos { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i <= 4; i ++) { 4 for ( int j = 1; j <= 2 ; j ++) { 5 System . out . println ( " Setor : " + i + " Cadeira : " + j ) ; 6 } 7 } 8 } 9 }
Cdigo Java 5.71: GeradorDeIngressos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
www.facebook.com/k19treinamentos
1-controle-de-fluxo-fixacao22.zip
135
C ONTROLE DE F LUXO
23
136
Instruo break
Considere um jogo de dados no qual o jogador ganha quando a soma dos nmeros obtidos em lanamentos consecutivos de um dado ultrapassar um determinado valor. Antes de comear o jogo, necessrio denir a quantidade mxima de lanamentos e o valor que deve ser ultrapassado para obter a vitria. Eventualmente, se o valor desejado for ultrapassado antes do ltimo lanamento, no necessrio continuar jogando o dado pois a vitria j est garantida. Podemos implementar um programa de computador para simular a execuo desse jogo. Nesse programa, podemos utilizar a instruo break para interromper os lanamentos se o valor desejado for ultrapassado. A instruo break no uma instruo de repetio, mas est fortemente relacionada s instrues while e for. Ela utilizada para forar a parada de um lao. No exemplo abaixo, a lgica para simular o jogo descrito anteriormente considera que a quantidade mxima de lanamentos 100 e o valor desejado 360.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 int soma = ;
for ( int i = 1; i <= 1 ; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 36 ) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
O trecho (int)(Math.random() * 6 + 1) gera um nmero entre 1 e 6. Esse trecho simula o lanamento de um dado. A varivel soma acumula os nmeros gerados. A instruo if utilizada para vericar se a soma ultrapassou o valor desejado. Dentro do corpo do if, utilizamos o comando break para interromper as interaes do lao for pois, quando a soma ultrapassa 360, a vitria j est garantida.
Simulao - Debug
136
www.k19.com.br
137
C ONTROLE DE F LUXO
Vamos simular a execuo do jogo de dados descrito anteriormente. Para no alongar muito a simulao, considere que o nmero mximo de lanamentos 2 e o valor que deve ser ultrapassado 7. Na linha 1, a varivel soma declarada e inicializada com o valor 0.
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
Variveis soma = 0
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
Na linha 2, a condio de parada do for testada. Como o valor da varivel i menor ou igual a 2, a condio devolve true.
3
www.facebook.com/k19treinamentos
137
C ONTROLE DE F LUXO
138
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Como a condio da linha 2 devolveu true, o corpo do for ser executado. Ao executar a linha 3, a mensagem Lanamento: 1 exibida no terminal.
4
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1
Na sequncia, a linha 4 executada. Um nmero aleatrio entre 1 e 6 gerado e armazenado na varivel numero. Suponha que o nmero gerado foi 5.
5
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1
138
www.k19.com.br
139
6
C ONTROLE DE F LUXO
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
Adiante, a linha 7 executada e o valor da varivel numero incrementado na varivel soma. Dessa forma, a varivel soma passa a armazenar o valor 5.
7
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
www.facebook.com/k19treinamentos
139
C ONTROLE DE F LUXO
9
140
Prosseguindo, a linha 10 executada e a condio do if testada. Como o valor da varivel soma no maior do que 7, a condio devolve false.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5
Como a condio da linha 10 falsa, o corpo do if no ser executado e o uxo de execuo vai para a atualizao do for na linha 2. Dessa forma, a varivel i incrementada para 2.
10
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5
Novamente, na linha 2, a condio de parada do for testada. Como o valor da varivel i menor ou igual a 2, a condio devolve true.
11
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
140
www.k19.com.br
141
Lanamento : 1 Nmero : 5 Soma : 5
C ONTROLE DE F LUXO
12 Como a condio da linha 2 devolveu true, o corpo do for ser executado. Ao executar a linha 3, a mensagem Lanamento: 2 exibida no terminal.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2
Na sequncia, a linha 4 executada. Um nmero aleatrio entre 1 e 6 gerado e armazenado na varivel numero. Suponha que o nmero gerado foi 3.
13
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2
14
www.facebook.com/k19treinamentos
141
C ONTROLE DE F LUXO
142
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3
15 Adiante, a linha 7 executada e o valor da varivel numero incrementado na varivel soma. Dessa forma, a varivel soma passa a armazenar o valor 8.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3
16
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
142
www.k19.com.br
143
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3 Soma : 8
C ONTROLE DE F LUXO
17 Prosseguindo, a linha 10 executada e a condio do if testada. Como o valor da varivel soma maior do que 7, a condio devolve true.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3 Soma : 8
Como a condio da linha 10 verdadeira, o corpo do if ser executado. Ao executar a linha 11 a mensagem Voc ganhou com 2 lanamentos exibida no terminal.
18
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3 Soma : 8 Voc ganhou com 2 lanamentos
19
www.facebook.com/k19treinamentos
143
C ONTROLE DE F LUXO
144
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
int soma = ; for ( int i = 1; i <= 2; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 7) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ;
Lanamento : 1 Nmero : 5 Soma : 5 Lanamento : 2 Nmero : 3 Soma : 8 Voc ganhou com 2 lanamentos
20
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
Variveis soma = 8
Instruo continue
Considere uma variao do jogo de dados proposto anterioremente. Nessa nova verso, somente valores pares devem ser somados. Em outras palavras, os valores mpares devem ser descartados. Nesse caso, podemos utilizar a instruo continue. Essa instruo permite que, durante a execuo de um lao, uma determinada iterao seja abortada fazendo com que o uxo de execuo continue para a prxima iterao. O cdigo abaixo simula o jogo de dados discutido anteriormente com a variao proposta.
144
www.k19.com.br
145
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 int soma = ;
C ONTROLE DE F LUXO
for ( int i = 1; i <= 1 ; i ++) { System . out . println ( " Lanamento : " + i ) ; int numero = ( int ) ( Math . random () * 6 + 1) ; System . out . println ( " Nmero : " + numero ) ; if ( numero % 2 != continue ; } soma += numero ; System . out . println ( " Soma : " + soma ) ; if ( soma > 18 ) { System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; break ; } } System . out . println ( " Jogue Novamente " ) ; ) {
No trecho destacado, calculamos o resto da diviso do nmero gerado aleatoriamente por dois. Alm disso, na condio do if, vericamos se esse valor diferente de zero. Se essa condio for verdadeira signica que o nmero gerado aleatoriamente mpar e consequentemente deve ser descartado. No corpo do if, utilizamos a instruo continue para abortar a iterao atual.
Importante
Quando aplicada a laos while, a instruo continue pula para a condio. Por outro lado, quando aplicada a laos for, ela pula para a atualizao.
Simulao - Debug
Vamos simular a execuo de um programa que gera aleatoriamente 2 nmeros inteiros entre 1 e 100 e exibe no terminal apenas os mpares.
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
Variveis i=1
Na sequncia, a condio do for testada. Como valor da varivel i menor ou igual a 2, essa condio devolve true.
2
www.facebook.com/k19treinamentos
145
C ONTROLE DE F LUXO
146
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Variveis i=1
3 O corpo do for executado porque a condio da linha 1 devolveu true. Ao executar a linha 2, um nmero aleatrio entre 1 e 100 gerado e armazenado na varivel numero. Suponha que o valor gerado 38.
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Na linha 3, vericamos se o resto da diviso do valor da varivel numero por 2 igual a 0. Como essa varivel est armazenando o valor 38, a condio do if devolve true pois o resto da diviso de 38 por 2 0.
4
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Como a condio da linha 3 devolveu true, o corpo do if executado. Ao executar a linha 4, a instruo continue pula para a prxima iterao.
5
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Devido ao desvio causado pela instruo continue, o uxo de execuo vai para a atualizao do for na linha 1. Dessa forma, a varivel i incrementada para 2.
6
146
www.k19.com.br
147
C ONTROLE DE F LUXO
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Variveis i=2
7 Na sequncia, a condio do for testada. Como valor da varivel i menor ou igual a 2, essa condio devolve true.
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Variveis i=2
O corpo do for executado porque a condio da linha 1 devolveu true. Ao executar a linha 2, um nmero aleatrio entre 1 e 100 gerado e armazenado na varivel numero. Suponha que o valor gerado 97.
8
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
9 Na linha 3, vericamos se o resto da diviso do valor da varivel numero por 2 igual a 0. Como essa varivel est armazenando o valor 97, a condio do if devolve false pois o resto da diviso de 97 por 2 no 0.
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
+ 1) ;
Como a condio da linha 3 devolveu false, o corpo do if no executado. Dessa forma, o uxo de execuo vai direto para a linha 6 e o valor 97 exibido no terminal.
10
www.facebook.com/k19treinamentos
147
C ONTROLE DE F LUXO
148
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 7 }
97
+ 1) ;
Prosseguindo, o uxo de execuo vai para a atualizao do for na linha 1. Dessa forma, a varivel i incrementada para 3.
11
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 97 7 }
+ 1) ;
Variveis i=3
12 Na sequncia, a condio do for testada. Como valor da varivel i no menor ou igual a 2, essa condio devolve false. Dessa forma, o lao nalizado.
1 for ( int i = 1; i <= 2; i ++) { 2 int numero = ( int ) ( Math . random () * 1 3 if ( numero % 2 == ) { 4 continue ; 5 } 6 System . out . println ( i ) ; 97 7 }
+ 1) ;
Variveis i=2
Na pasta controle-de-uxo, crie um arquivo chamado JogoDeDado.java. Implemente um programa que simula a execuo de um jogo de dados, no qual so permitidos 5 lanamentos e o jogador ganha se a soma dos valores obtidos nos lanamentos ultrapassar 19.
24
1 class JogoDeDado { 2 public static void main ( String [] args ) { 3 int soma = ; 4 for ( int i = 1; i <= 5; i ++) { 5 System . out . println ( " Lanamento : " + i ) ; 6 int numero = ( int ) ( Math . random () * 6 + 1) ; 7 8 System . out . println ( " Nmero : " + numero ) ; 9 soma += numero ; 1 11 System . out . println ( " Soma : " + soma ) ;
148
www.k19.com.br
149
12 System . out . println ( " -----------------------" ) ; 13 14 if ( soma > 19) { 15 System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; 16 break ; 17 } 18 } 19 } 2 }
Cdigo Java 5.106: JogoDeDado.java
C ONTROLE DE F LUXO
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao24.zip
25
26 Na pasta controle-de-uxo, crie um arquivo chamado JogoDeDado2.java. Implemente um programa que simula a execuo de um jogo de dados, no qual so permitidos 4 lanamentos e o jogador ganha se a soma dos valores mpares obtidos nos lanamentos ultrapassar 9.
1 class JogoDeDado2 { 2 public static void main ( String [] args ) { 3 int soma = ; 4 for ( int i = 1; i <= 5; i ++) { 5 System . out . println ( " Lanamento : " + i ) ; 6 int numero = ( int ) ( Math . random () * 6 + 1) ; 7 8 System . out . println ( " Nmero : " + numero ) ; 9 1 if ( numero % 2 == ) { 11 System . out . println ( " -----------------------" ) ; 12 continue ; 13 } 14 15 soma += numero ; 16 17 System . out . println ( " Soma : " + soma ) ; 18 System . out . println ( " -----------------------" ) ; 19 2 if ( soma > 9) { 21 System . out . println ( " Voc ganhou com " + i + " lanamentos " ) ; 22 break ; 23 } 24 } 25 } 26 }
Cdigo Java 5.107: JogoDeDado2.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao26.zip
27
www.facebook.com/k19treinamentos
149
C ONTROLE DE F LUXO
K19 / rafael / controle - de - fluxo$ javac JogoDeDado2 . java K19 / rafael / controle - de - fluxo$ java JogoDeDado2 ...
150
1 while ( a < 1 ) 2 a = a * 2 + 1;
Lembre-se
Nas linguagens Java e C#, apenas blocos de cdigo com apenas um comando podem ser associados s instrues de deciso if e else ou s instrues de repetio while e for. Normalmente, no delimitar com chaves os blocos de cdigo com dois ou mais comandos gera erros de lgica ou at mesmo erros de compilao. Para evitar esses problemas, a utilizao das chaves mesmo em blocos com apenas um comando recomendada.
O trecho em destaque, apesar de conter diversas linhas de cdigo, considerado um comando nico. Dessa forma, podemos omitir as chaves que envolvem esse trecho. Reescrevendo o cdigo, teramos o seguinte resultado:
1 if ( a < 1 ) 2 a = a * 2 + 1; 3 else if ( a < 2 ) 4 a = a * 3 + 1;
150
www.k19.com.br
151
5 else 6 a = a * 4 + 1;
C ONTROLE DE F LUXO
Os leitores mais desavisados desse cdigo podem assumir a existncia da instruo else if. Contudo, essa instruo no existe nas linguagens Java e C#. Na verdade, nesse exemplo, o segundo if pertence ao corpo do primeiro else.
Laos Innitos
Um lao interrompido quando a condio de parada for falsa ou quando utilizamos a instruo break. Dessa forma, considere os seguintes laos.
1 int i = 1; 2 while ( i < 1 ) { 3 System . out . println ( " K19 " ) ; 4 }
Observe que a condio de parada nunca devolver o valor false. Dessa forma, os laos acima nunca sero interrompidos. Esses laos so chamados popularmente de Laos Innitos.
Na pasta controle-de-uxo, crie um arquivo chamado BartChalkboard.java. Implemente um programa para ajudar o Bart Simpson a cumprir o seu castigo.
28
1 class BartChalkboard { 2 public static void main ( String [] args ) { 3 for (;;) 4 System . out . println ( " I WILL NOT XEROX MY BUTT " ) ; 5 } 6 }
Cdigo Java 5.115: BartChalkboard.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao28.zip
29
www.facebook.com/k19treinamentos
151
C ONTROLE DE F LUXO
152
152
www.k19.com.br
153
C ONTROLE DE F LUXO
Erro: Excesso de ;
Um erro de compilao comum em Java ou C# ocorre quando o caractere ; adicionado em excesso.
1 class Programa { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 1 ; i ++) ; { 4 System . out . println ( " ************** " ) ; 5 } 6 } 7 }
Cdigo Java 5.117: Programa.java
Observe o caractere ; depois dos argumentos do for. Na verdade, no h erros de compilao nesse cdigo. Contudo, podemos considerar que h um erro de lgica pois o lao no tem corpo. O bloco depois do for executar apenas uma vez pois no est associado ao lao. Veja o resultado da execuo desse programa.
**************
30
153
C ONTROLE DE F LUXO
1 class AprovadoReprovado 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double nota = gerador . NextDouble () * 1 ; 8 9 System . Console . WriteLine ( " A nota do aluno : " + nota ) ; 1 11 if ( nota < 6) 12 { 13 System . Console . WriteLine ( " REPROVADO " ) ; 14 } 15 else 16 { 17 System . Console . WriteLine ( " APROVADO " ) ; 18 } 19 } 2 }
Cdigo C# 5.6: AprovadoReprovado.cs
154
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao3 .zip
31
32
1 class VerificaValorProduto 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double precoDoProduto1 = gerador . NextDouble () * 1 ; 8 double precoDoProduto2 = gerador . NextDouble () * 1 ; 9 1 System . Console . WriteLine ( " O preo do produto 1 : " + precoDoProduto1 ) ; 11 System . Console . WriteLine ( " O preo do produto 2 : " + precoDoProduto2 ) ; 12 13 if ( precoDoProduto1 < precoDoProduto2 ) 14 {
154
www.k19.com.br
155
15 16 17 18 19 2 21 22 23 24 25 26 27 28 } 29 }
C ONTROLE DE F LUXO
System . Console . WriteLine ( " O produto 1 o mais barato " ) ; } else { if ( precoDoProduto2 < precoDoProduto1 ) { System . Console . WriteLine ( " O produto 2 o mais barato " ) ; } else { System . Console . WriteLine ( " Os preos dos dois produtos so iguais " ) ; } }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao32.zip
33
34
1 class EscolheCaminho 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double valor = gerador . NextDouble () ; 8 9 System . Console . WriteLine ( " VALOR : " + valor ) ; 1 11 if ( valor < .5) 12 { 13 System . Console . WriteLine ( " Vire esquerda " ) ; 14 15 valor = gerador . NextDouble () ;
www.facebook.com/k19treinamentos
155
C ONTROLE DE F LUXO
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 }
156
System . Console . WriteLine ( " VALOR : " + valor ) ; if ( valor < .5) { System . Console . WriteLine ( " Vire esquerda " ) ; } else { System . Console . WriteLine ( " Vire direita " ) ; } } else { System . Console . WriteLine ( " Vire direita " ) ; valor = gerador . NextDouble () ; System . Console . WriteLine ( " VALOR : " + valor ) ; if ( valor < .5) { System . Console . WriteLine ( " Vire esquerda " ) ; } else { System . Console . WriteLine ( " Vire direita " ) ; } }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao34.zip
35
36
156
www.k19.com.br
157
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 } System . Random gerador = new System . Random () ; double valor = gerador . NextDouble () ; if ( valor < .5) { System . Console . WriteLine ( " camiseta preta " ) ; } else { System . Console . WriteLine ( " camiseta vermelha " ) ; } valor = gerador . NextDouble () ; if ( valor < .5) { System . Console . WriteLine ( " cala jeans " ) ; } else { System . Console . WriteLine ( " bermuda " ) ; } valor = gerador . NextDouble () ; if ( valor < .5) { System . Console . WriteLine ( " tnis " ) ; } else { System . Console . WriteLine ( " sapato " ) ; } valor = gerador . NextDouble () ; if ( valor < .5) { System . Console . WriteLine ( " bon " ) ; } else { System . Console . WriteLine ( " culos " ) ; }
C ONTROLE DE F LUXO
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao36.zip
37
www.facebook.com/k19treinamentos
157
C ONTROLE DE F LUXO
camiseta preta bermuda tnis bon
158
Na pasta controle-de-uxo, crie um arquivo chamado ADivisivelPorB.cs. Implemente um programa em Java que guarde dois valores numricos: a e b. Imprima na tela a mensagem divisvel quando a for divisvel por b ou a mensagem No divisvel, caso contrrio.
38
1 class ADivisivelPorB 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 int a = ( int ) ( gerador . NextDouble () * 1 ); 8 int b = ( int ) ( gerador . NextDouble () * 2 ) ; 9 1 System . Console . WriteLine ( " a : " + a ) ; 11 System . Console . WriteLine ( " b : " + b ) ; 12 13 if ( a % b == ) 14 { 15 System . Console . WriteLine ( " divisvel " ) ; 16 } 17 else 18 { 19 System . Console . WriteLine ( " No divisvel " ) ; 2 } 21 } 22 }
Cdigo C# 5.10: ADivisivelPorB.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao38.zip
39
158
www.k19.com.br
159
40
C ONTROLE DE F LUXO
Na pasta controle-de-uxo, crie um arquivo chamado Saudacao.cs. Implemente um programa em Java que contenha uma varivel chamada hora. Essa varivel 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].
1 class Saudacao 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double hora = gerador . NextDouble () * 24; 8 9 if ( hora >= && hora < 12) 1 { 11 System . Console . WriteLine ( " Bom dia " ) ; 12 } 13 else if ( hora >= 12 && hora < 18) 14 { 15 System . Console . WriteLine ( " Boa tarde " ) ; 16 } 17 else if ( hora >= 18 && hora < 24) 18 { 19 System . Console . WriteLine ( " Boa noite " ) ; 2 } 21 } 22 }
Cdigo C# 5.11: Saudacao.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao4 .zip
41
Na pasta controle-de-uxo, crie um arquivo chamado LoremIpsum.cs. Implemente um programa que exiba no terminal a mensagem Lorem ipsum dolor sit amet cinco vezes.
42
1 class LoremIpsum 2 { 3 static void Main () 4 { 5 for ( int i = ; i < 5; i ++) 6 { 7 System . Console . WriteLine ( " Lorem ipsum dolor sit amet " ) ; 8 }
www.facebook.com/k19treinamentos
159
C ONTROLE DE F LUXO
9 } 1 }
Cdigo C# 5.12: LoremIpsum.cs
160
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao42.zip
43
Na pasta controle-de-uxo, crie um arquivo chamado Imprime100.cs. Implemente um programa que exiba no terminal os nmeros de 1 at 100.
44
1 class Imprime1 2 { 3 static void Main () 4 { 5 for ( int i = 1; i <= 1 ; i ++) 6 { 7 System . Console . WriteLine ( i ) ; 8 } 9 } 1 }
Cdigo C# 5.13: Imprime100.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao44.zip
45
Na pasta controle-de-uxo, crie um arquivo chamado Imprime100ExcetoMultiplo3.cs. Implemente um programa que exiba no terminal os nmeros de 1 at 100 exceto os nmeros mltiplos de 3.
46
160
www.k19.com.br
161
5 for ( int i = 1; i <= 1 ; i ++) 6 { 7 if ( i % 3 != ) 8 { 9 System . Console . WriteLine ( i ) ; 1 } 11 } 12 } 13 }
Cdigo C# 5.14: Imprime100ExcetoMultiplo3.cs
C ONTROLE DE F LUXO
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao46.zip
47
ExcetoMultiplo3 . exe
ExcetoMultiplo3
Na pasta controle-de-uxo, crie um arquivo chamado DivideMaiorInteiro.cs. Implemente um programa que declare e inicialize uma varivel que receber o maior nmero possvel do tipo int. Divida o valor dessa varivel por 2 at que o resultado obtido seja inferior a 100 (no inclusivo). A cada iterao imprima o resultado.
48
1 class DivideMaiorInteiro 2 { 3 static void Main () 4 { 5 int numero = 2147483647; 6 7 while ( numero >= 1 ) 8 { 9 numero /= 2; 1 System . Console . WriteLine ( numero ) ; 11 } 12 } 13 }
Cdigo C# 5.15: DivideMaiorInteiro.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao48.zip
49
www.facebook.com/k19treinamentos
161
C ONTROLE DE F LUXO
50
162
Na pasta controle-de-uxo, crie um arquivo chamado GeradorDeIngressos.cs. Implemente um programa para gerar os ingressos das apresentaes de um teatro. Considere que esse teatro possui 4 setores e cada setor possui 20 lugares.
1 class GeradorDeIngressos 2 { 3 static void Main () 4 { 5 for ( int i = 1; i <= 4; i ++) 6 { 7 for ( int j = 1; j <= 2 ; j ++) 8 { 9 System . Console . WriteLine ( " Setor : " + i + " Cadeira : " + j ) ; 1 } 11 } 12 } 13 }
Cdigo C# 5.16: GeradorDeIngressos.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao5 .zip
51
Na pasta controle-de-uxo, crie um arquivo chamado JogoDeDado.cs. Implemente um programa que simula a execuo de um jogo de dados, no qual so permitidos 5 lanamentos e o jogador ganha se a soma dos valores obtidos nos lanamentos ultrapassar 19.
52
1 class JogoDeDado 2 { 3 static void Main () 4 { 5 int soma = ; 6 for ( int i = 1; i <= 5; i ++) 7 { 8 System . Random gerador = new System . Random () ; 9 1 System . Console . WriteLine ( " Lanamento : " + i ) ; 11 int numero = ( int ) ( gerador . NextDouble () * 6 + 1) ; 12 13 System . Console . WriteLine ( " Nmero : " + numero ) ; 14 soma += numero ; 15 16 System . Console . WriteLine ( " Soma : " + soma ) ; 17 System . Console . WriteLine ( " -----------------------" ) ; 18 19 if ( soma > 19) 2 { 21 System . Console . WriteLine ( " Voc ganhou com " + i + " lanamentos " ) ; 22 break ; 23 } 24 }
162
www.k19.com.br
163
25 } 26 }
Cdigo C# 5.17: JogoDeDado.cs
C ONTROLE DE F LUXO
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao52.zip
53
Na pasta controle-de-uxo, crie um arquivo chamado JogoDeDado2.cs. Implemente um programa que simula a execuo de um jogo de dados, no qual so permitidos 4 lanamentos e o jogador ganha se a soma dos valores mpares obtidos nos lanamentos ultrapassar 9.
54
1 class JogoDeDado2 2 { 3 static void Main () 4 { 5 int soma = ; 6 for ( int i = 1; i <= 5; i ++) 7 { 8 System . Random gerador = new System . Random () ; 9 1 System . Console . WriteLine ( " Lanamento : " + i ) ; 11 int numero = ( int ) ( gerador . NextDouble () * 6 + 1) ; 12 13 System . Console . WriteLine ( " Nmero : " + numero ) ; 14 15 if ( numero % 2 == ) 16 { 17 System . Console . WriteLine ( " -----------------------" ) ; 18 continue ; 19 } 2 21 soma += numero ; 22 23 System . Console . WriteLine ( " Soma : " + soma ) ; 24 System . Console . WriteLine ( " -----------------------" ) ; 25 26 if ( soma > 9) 27 { 28 System . Console . WriteLine ( " Voc ganhou com " + i + " lanamentos " ) ; 29 break ; 3 } 31 } 32 } 33 }
Cdigo C# 5.18: JogoDeDado2.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao54.zip
55
www.facebook.com/k19treinamentos
163
C ONTROLE DE F LUXO
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc JogoDeDado2 . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > JogoDeDado2 . exe ...
164
56 Na pasta controle-de-uxo, crie um arquivo chamado BartChalkboard.cs. Implemente um programa para ajudar o Bart Simpson a cumprir o seu castigo.
1 class BartChalkboard 2 { 3 static void Main () 4 { 5 for (;;) 6 System . Console . WriteLine ( " I WILL NOT XEROX MY BUTT " ) ; 7 } 8 }
Cdigo C# 5.19: BartChalkboard.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-fixacao56.zip
57
Exerccios Complementares
Crie um programa em Java que gere dois nmeros aleatrios e exiba o valor desses nmeros. Alm disso, esse programa deve exibir a mensagem Primeiro > Segundo se o primeiro nmero for maior do que o segundo, a mensagem Segundo > Primeiro se o segundo nmero for maior do que o primeiro e mensagem Primeiro = Segundo se o primeiro nmero for igual ao segundo. Complete o cdigo abaixo.
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 1 } 11 }
Cdigo Java 5.118: ComparaValores.java
164
www.k19.com.br
165
2
C ONTROLE DE F LUXO
165
C ONTROLE DE F LUXO
166
167
C ONTROLE DE F LUXO
Para controlar o estacionamento de um condomnio, devemos implementar um programa em Java para gerar os cartes das vagas dos moradores. Nos cartes, necessrio constar o nmero do bloco e o nmero do apartamento. Nesse condmino, h trs blocos numerados de 1 a 3. Em cada bloco, h 9 andares. Em cada andar, h 4 apartamentos. No primeiro andar, os nmeros dos apartamentos so: 11, 12, 13 e 14. No segundo andar, os nmeros dos apartamentos so: 21, 22, 23 e 24. Nos outros andares, a lgica de numerao a mesma. Complete o cdigo a seguir.
7
8 Escreva um programa em Java que exiba no terminal a tabuada dos nmeros de 1 a 10 de acordo com o padro abaixo.
www.facebook.com/k19treinamentos
167
C ONTROLE DE F LUXO
9
168
Escreva um programa que desenhe uma pirmide de asteriscos. A sada do seu programa deve seguir o padro abaixo:
10
Escreva um programa que imprime uma rvore de natal de acordo com o padro abaixo.
* *** ***** ******* ***** ******* ********* *********** ********* *********** ************* ***************
Complete o cdigo abaixo.
1 class ArvoreNatal { 2 public static void main ( String [] args ) { 3 4 } 5 }
Cdigo Java 5.136: ArvoreNatal.java
Crie um programa em Java que gere e exiba no terminal um nmero aleatrio. Alm disso, esse programa deve contabilizar a quantidade de dgitos 1 do nmero aleatrio e exibir essa quantidade no terminal. Complete o cdigo abaixo.
11
1 class ContaUns { 2 public static void main ( String [] args ) { 3 double numero = Math . random () ;
168
www.k19.com.br
169
4 5 6 7 8 9 1 11 12 } 13 } System . out . println ( numero ) ; String s = " " + numero ; int resposta = ;
C ONTROLE DE F LUXO
Considere um jogo no qual o jogador lana um dado 10 vezes. O jogador ganha se a soma dos valores obtidos nos lanamentos for mpar. Se o nmero 6 for sorteado 2 vezes o jogador perde imediatamente. O nmero 1 deve ser desconsiderado na somatria. Implemente um programa em Java para simular a execuo desse jogo.
12
Crie um programa em C# que gere dois nmeros aleatrios e exiba o valor desses nmeros. Alm disso, esse programa deve exibir a mensagem Primeiro > Segundo se o primeiro nmero for maior do que o segundo, a mensagem Segundo > Primeiro se o segundo nmero for maior do que o primeiro e mensagem Primeiro = Segundo se o primeiro nmero for igual ao segundo. Complete o cdigo abaixo.
13
1 class ComparaValores 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double primeiro = gerador . NextDouble () ; 8 double segundo = gerador . NextDouble () ; 9 1 System . Console . WriteLine ( " Primeiro : " + primeiro ) ; 11 System . Console . WriteLine ( " Segundo : " + segundo ) ; 12 13 14 } 15 }
Cdigo C# 5.20: ComparaValores.cs
14
169
C ONTROLE DE F LUXO
170
*****************
Utilize laos de repetio e complete o cdigo abaixo.
1 2 3 4 5 6 7 class BlocoDeAstericos { static void Main () { } }
Cdigo C# 5.22: BlocoDeAstericos.cs
15
16
171
C ONTROLE DE F LUXO
17
18
********** ********** ********** ********** ********** ********** ********** ********** ********** **********
www.facebook.com/k19treinamentos
171
C ONTROLE DE F LUXO
172
Para controlar o estacionamento de um condomnio, devemos implementar um programa em C# para gerar os cartes das vagas dos moradores. Nos cartes, necessrio constar o nmero do bloco e o nmero do apartamento. Nesse condmino, h trs blocos numerados de 1 a 3. Em cada bloco, h 9 andares. Em cada andar, h 4 apartamentos. No primeiro andar, os nmeros dos apartamentos so: 11, 12, 13 e 14. No segundo andar, os nmeros dos apartamentos so: 21, 22, 23 e 24. Nos outros andares, a lgica de numerao a mesma. Complete o cdigo a seguir.
19
Escreva um programa em C# que exiba no terminal a tabuada dos nmeros de 1 a 10 de acordo com o padro abaixo.
20
172
www.k19.com.br
173
5 6 } 7 }
Cdigo C# 5.34: Tabuada.cs
C ONTROLE DE F LUXO
Escreva um programa que desenhe uma pirmide de asteriscos. A sada do seu programa deve seguir o padro abaixo:
21
22
Escreva um programa que imprime uma rvore de natal de acordo com o padro abaixo.
* *** ***** ******* ***** ******* ********* *********** ********* *********** ************* ***************
Complete o cdigo abaixo.
1 class ArvoreNatal 2 { 3 static void Main () 4 { 5 6 } 7 }
Cdigo C# 5.38: ArvoreNatal.cs
www.facebook.com/k19treinamentos
173
C ONTROLE DE F LUXO
23
174
Crie um programa em C# que gere e exiba no terminal um nmero aleatrio. Alm disso, esse programa deve contabilizar a quantidade de dgitos 1 do nmero aleatrio e exibir essa quantidade no terminal. Complete o cdigo abaixo.
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 14 15 System . Console . WriteLine ( resposta ) ; 16 } 17 }
Cdigo C# 5.40: ContaUns.cs
Considere um jogo no qual o jogador lana um dado 10 vezes. O jogador ganha se a soma dos valores obtidos nos lanamentos for mpar. Se o nmero 6 for sorteado 2 vezes o jogador perde imediatamente. O nmero 1 deve ser desconsiderado na somatria. Implemente um programa em C# para simular a execuo desse jogo.
24
Resumo do Captulo
Os programas de computador utilizam as instrues de deciso para denir se um bloco de cdigo ser executado ou no de acordo com determinada condio.
Para utilizar a instruo de deciso if, devemos denir uma condio e um corpo. O corpo um bloco de cdigo executado somente se a condio for true.
Para utilizar a instruo else, devemos denir um corpo. Essa instruo sempre est relacionada instruo if. O corpo do else executado somente se a condio do if correspondente for false.
174
www.k19.com.br
175
4
C ONTROLE DE F LUXO
Instrues de deciso podem ser encadeadas. Em outra palavras, podemos denir ifs e elses dentro de ifs ou elses.
Os programas de computador utilizam as instrues de repetio para executar repetidas vezes um determinado bloco de cdigo.
Para utilizar a instruo de repetio while, devemos denir uma condio e um corpo. O corpo executado enquanto a condio for true. Toda vez, depois que o corpo executado, a condio reavaliada para decidir se o lao deve ou no continuar.
Para utilizar a instruo de repetio for, devemos denir uma inicializao, uma condio, uma atualizao e um corpo. O uxo de execuo comea pela inicializao e, enquanto a condio for true, ele executa de forma cclica a condio, o corpo e a atualizao nessa ordem.
Instrues de repetio podem ser encadeadas. Em outra palavras, podemos denir whiles e fors dentro de whiles ou fors.
A instruo continue interrompe a execuo de uma iterao. No while, o continue desvia o uxo de execuo para a condio. No for, o continue desvia o uxo de execuo para a atualizao.
10
Quando o corpo do if possui apenas um comando, ele no precisa ser delimitado com chaves. A mesma regra vale para o else, while e for.
11
Se a condio de um lao sempre true, o corpo desse lao ser executado repetidamente sem parar(laos innitos).
12
Prova
a) if e else so instrues de deciso. b) if e while so instrues de deciso. c) else e while so instrues de deciso. d) while e for so instrues de deciso. e) if e for so instrues de deciso.
www.facebook.com/k19treinamentos
175
C ONTROLE DE F LUXO
2
176
a) No if, a condio pode ser um valor booleano ou numrico. b) No if, a condio s pode ser um valor numrico. c) No if, a condio s pode ser um valor booleano. d) No if, a condio pode ser uma string ou um valor numrico. e) No if, a condio pode ser qualquer coisa.
a) Para cada if, tem que existir um else. b) O corpo do else executado quando a condio do if verdadeira. c) O corpo do if executado quando a condio falsa. d) No podemos denir ifs no corpo dos elses. e) Para cada else, tem que existir um if.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
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 so instrues de repetio. b) if e while so instrues de repetio. c) else e while so instrues de repetio. d) while e for so instrues de repetio. e) if e for so instrues de repetio.
Qual alternativa est correta? a) No while e for, a condio s pode ser um valor numrico. b) No while e for, a condio pode ser um valor booleano ou numrico. c) No while e for, a condio pode ser uma string ou um valor numrico. d) No while e for, a condio pode ser qualquer coisa. e) No while e for, a condio s pode ser um valor booleano.
; i - -) {
www.facebook.com/k19treinamentos
177
C ONTROLE DE F LUXO
178
a) 1 b) 11 c) 12 d) 21 e) 23
a) 0 b) 3 c) 8 d) 28 e) 36
10
1 int a = ; 2 for ( int i = ; i < 1 ; i ++) { 3 for ( int j = ; j < 1 ; j ++) { 4 a ++; 5 } 6 }
a) 9
178
www.k19.com.br
179
C ONTROLE DE F LUXO
b) 10 c) 18 d) 20 e) 100
11
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 }
a) 18 b) 50 c) 90 d) 99 e) 100
Minha Pontuao
Pontuao Mnima:
Pontuao Mxima:
11
www.facebook.com/k19treinamentos
179
C ONTROLE DE F LUXO
180
180
www.k19.com.br
CAPTULO
3 2 1 0
A RRAY
Considere um programa de computador que realizar clculos matemticos com os preos dos produtos de um supermercado. Por exemplo, esse programa dever calcular a mdia dos preos ou encontrar o produto mais barato. Para manipular os preos dos produtos, dentro de um programa, esses valores devem ser armazenados em variveis.
1 2 3 4 double preco1 ; double preco2 ; double preco3 ; ...
Como uma varivel do tipo double armazena somente um valor de cada vez, seria necessrio uma varivel para cada produto. Considerando a existncia de uma grande quantidade de produtos, essa abordagem ser pouco prtica. 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 coleo de itens. Cada item identicado atravs de um ndice. Podemos imaginar um array como sendo um armrio com um determinado nmero de gavetas e cada gaveta possui um rtulo com um nmero de identicao.
Quando criamos um array, devemos informar qual o tipo de dado pretendemos armazenar em cada posio. Na analogia com armrio, seria como se tivssemos que denir o que o permitido guardar em cada gaveta. Por exemplo, se denirmos que um armrio deve guardar livros, ento somente livros podem ser armazenados nas gavetas desse armrio. No poderemos guardar revistas ou jornais.
www.facebook.com/k19treinamentos
181
A RRAY
182
REVISTA
LIVRO
Lembre-se que sempre devemos inicializar as variveis para no ocorrer um erro de compilao. Portanto, vamos inicializar o nosso array:
1 int [] nomeDoArray = new int [1 ];
Cdigo Java 6.3: Declarao e inicializao de um array
A inicializao de um array se d atravs da instruo new tanto em Java quanto em C#. No exemplo acima, criamos um array de tamanho 10, ou seja, teremos 10 posies para armazenar valores do tipo int. A instruo new abordada com mais detalhes nos cursos K11 - Orientao a Objetos em Java e K31 - C# e Orientao a Objetos.
TIPO DE DADO QUE SER ARMAZENADO PELO ARRAY IDENTIFICADOR DA VARIVEL INFORMA O TIPO DO NOVO OBJETO
int[]
nomeDoArray
new
INSTANCIA UM NOVO OBJETO
int[10];
INFORMA A QUANTIDADE DE POSIES DO ARRAY
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;
Cdigo Java 6.4: Inserindo valores em um array
Na linha 1 declaramos e inicializamos um array do tipo int com trs posies. Nas linhas 2, 3 e 4 inserimos no array os valores 124, 43 e 1023 nas posies 0, 1 e 2 respectivamente. Repare que a numerao dos ndices de um array comea pelo nmero 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 cdigo.
1 int [] b = new int [] {1 , 62 , 923 , 15}; 2 int [] c = {125 , 76432 , 23};
Cdigo 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};
Cdigo C# 6.1: Outras formas de se inserir valores em um array
Repare que, no momento da criao dos arrays acima, os valores de cada posio devem ser denidos. J na primeira forma apresentada, esses valores poderiam ser denidos depois.
1 int [] a = new int [] {3215 , 754 , 23}; 2 3 System . Console . WriteLine ( " Valor na posio de ndice : " + a [ ]) ; 4 System . Console . WriteLine ( " Valor na posio de ndice 2: " + a [2]) ;
Cdigo 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 posies 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 instruo de repetio for. Podemos utilizar a instruo while tambm, porm logo perceberemos que a sintaxe da instruo 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 ]) ; }
Cdigo Java 6.7: Percorrendo um array para inserir e acessar valores
1 2 3 4 5 6 7 8 9 1 11
];
for ( int i = ; i < 1 ; i ++) { numeros [ i ] = i * 2; } for ( int i = ; i < 1 ; i ++) { System . Console . WriteLine ( numeros [ i ]) ; }
Cdigo C# 6.3: Percorrendo um array para inserir e acessar valores
Imagine que exista uma grande quantidade de linhas de cdigo entre as linhas destacadas no exemplo acima, ou seja, entre a inicializao do array numeros e o for que o percorre. Alm disso, imagine tambm que o cdigo tenha que ser modicado, mais especicamente, a quantidade de posies deve ser alterada de 100 para 1000. Seria muito fcil esquecermos de atualizar os argumentos da instruo for para que o lao considere o intervalo de 0 a 1000 e no o intervalo de 0 a 100. Para evitar esse tipo de problema, uma boa prtica utilizar o atributo length dos arrays da linguagem Java ou a propriedade Length dos arrays da linguagem C# para descobrir qual a sua dimenso (tamanho) do array. Veja como caria o exemplo com essas modicaes.
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 ]) ; }
Cdigo 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 ]) ; }
Cdigo C# 6.4: Utilizando a propriedade Length do array
A RRAY
Array de arrays
At agora trabalhamos com arrays de uma dimenso. Porm, tanto em Java como em C#, podemos criar arrays com mais de uma dimenso (arrays multidimensionais). Isso nos permite trabalhar com arrays para representar tabelas, matrizes ou at um tabuleiro de batalha naval. Voltando analogia que zemos com um armrio cheio de gavetas, seria como se pudssemos guardar dentro da gaveta de um armrio um outro armrio com gavetas. Veja a gura abaixo:
3
3
1 0
Figura 6.4: Abstrao de um array multidimensional
Importante
Em Java, array multidimensional sinnimo de array de arrays. Em C#, jagged arrays sinnimo de array de arrays. Em C# a denominao array multidimensional referese a um outro tipo de array. Um array multidimensional em C# assunto do curso K31 - C# e Orientao a Objetos. Neste curso, para evitarmos confuses, sempre utilizaremos a denominao array de arrays.
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];
Cdigo Java 6.9: Declarando um array de arrays
186
Em cada posio do nosso array de arrays, devemos criar um novo array. Por esse motivo, ele recebe o nome array de arrays. Alm disso, repare que podemos criar arrays de diferentes tamanhos em cada posio. Assim como nos arrays unidimensionais, para inserir ou acessar valores de um array de arrays, devemos utilizar os ndices de cada posio. Podemos pensar nos ndices como um esquema de coordenadas. Por exemplo, se quisssemos representar um grco no sistema cartesiano de eixos x y atravs de um array de arrays, a coordenada de cada ponto do grco seria equivalente ao par de ndices do nosso array de arrays (supondo que no grco 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 ;
Cdigo Java 6.10: Conjunto de pontos de um grco 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 ;
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 ; } }
Cdigo Java 6.11: Percorrendo um array de arrays com instrues for aninhadas
A RRAY
Abra um terminal; Entre na pasta dos seus exerccios e crie uma pasta chamada arrays para os arquivos desenvolvidos nesse captulo.
1
K19 / rafael$ mkdir arrays K19 / rafael$ cd arrays K19 / rafael / arrays$
C :\ Users \ K19 \ rafael > md arrays C :\ Users \ K19 \ rafael > cd arrays C :\ Users \ K19 \ rafael \ arrays >
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 nmeros inteiros em um array. Todas as posies do array devem ser preenchidas e o valor armazenado ca sua escolha. Aps 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 }
Cdigo Java 6.12: SequenciaQualquer.java
188
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao2.zip
Na pasta arrays, crie um arquivo chamado SequenciaCrescente.java. Implemente um programa em Java que armazene 10 nmeros inteiros em um array. Preencha todas as posies do array com valores sequenciais. Ao nal, 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 }
Cdigo Java 6.13: SequenciaCrescente.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao4.zip
188
www.k19.com.br
189
A RRAY
6 Na pasta arrays, crie um arquivo chamado SequenciaDecrescente.java. Implemente um programa em Java que armazene 10 nmeros inteiros em um array. Preencha todas as posies do array com valores sequenciais decrescentes. Ao nal, 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 }
Cdigo Java 6.14: SequenciaDecrescente.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao6.zip
Na pasta arrays, crie um arquivo chamado SequenciaImpar.java. Implemente um programa em Java que armazene 10 nmeros inteiros mpares em um array. Ao nal, 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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao8.zip
Na pasta arrays, crie um arquivo chamado SequenciaAleatoria.java. Implemente um programa em Java que armazene 10 nmeros inteiros aleatrios em um array. Ao nal, 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 }
Cdigo Java 6.16: SequenciaAleatoria.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao1 .zip
11
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 nmeros inteiros em um array de arrays. Ao nal, 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 }
Cdigo Java 6.17: TabelaQualquer.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao12.zip
13
Na pasta arrays, crie um arquivo chamado TabelaAleatoria.java. Implemente um programa em Java que armazene nmeros inteiros em um array de arrays. Ao nal, 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 }
Cdigo Java 6.18: TabelaAleatoria.java
192
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao14.zip
15
Na pasta arrays, crie um arquivo chamado Tabuada.java. Implemente um programa em Java que armazene nmeros inteiros em um array de arrays. Ao nal, 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 ++) {
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao16.zip
17
192
www.k19.com.br
193
A RRAY
18 Na pasta arrays, crie um arquivo chamado SequenciaQualquer.cs. Implemente um programa em Java que armazene 10 nmeros inteiros em um array. Todas as posies do array devem ser preenchidas e o valor armazenado ca sua escolha. Aps preencher o array, exiba os seus valores no terminal.
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 ]) ; }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao18.zip
19
Na pasta arrays, crie um arquivo chamado SequenciaCrescente.cs. Implemente um programa em Java que armazene 10 nmeros inteiros em um array. Preencha todas as posies do array com valores sequenciais. Ao nal, 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 }
Cdigo 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
Na pasta arrays, crie um arquivo chamado SequenciaDecrescente.cs. Implemente um programa em Java que armazene 10 nmeros inteiros em um array. Preencha todas as posies do array com valores sequenciais descrescentes. Ao nal, 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 }
Cdigo C# 6.9: SequenciaDecrescente.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao22.zip
23
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 nmeros inteiros mpares em um array. Ao nal, 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 }
Cdigo C# 6.10: SequenciaImpar.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao24.zip
25
Na pasta arrays, crie um arquivo chamado SequenciaAleatoria.cs. Implemente um programa em Java que armazene 10 nmeros inteiros aleatrios em um array. Ao nal, 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 }
Cdigo C# 6.11: SequenciaAleatoria.cs
A RRAY
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao26.zip
27
Na pasta arrays, crie um arquivo chamado TabelaQualquer.cs. Implemente um programa em Java que armazene nmeros inteiros em um array de arrays. Ao nal, 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 }
Cdigo 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
Na pasta arrays, crie um arquivo chamado TabelaAleatoria.cs. Implemente um programa em Java que armazene nmeros inteiros em um array de arrays. Ao nal, 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 }
Cdigo C# 6.13: TabelaAleatoria.cs
);
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao3 .zip
31
198
www.k19.com.br
199
A RRAY
Na pasta arrays, crie um arquivo chamado Tabuada.cs. Implemente um programa em Java que armazene nmeros inteiros em um array de arrays. Ao nal, 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 }
Cdigo C# 6.14: Tabuada.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-fixacao32.zip
33
Exerccios Complementares
1 Considere um programa de computador que corrige provas de mltipla 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 questes de mltipla escolha. Considere que cada questo possui trs alternativas numeradas de 1 a 3. Complete o cdigo a seguir.
www.facebook.com/k19treinamentos
199
A RRAY
1 class GeraradorDeGabarito { 2 public static void main ( String [] args ) { 3 4 } 5 }
Cdigo Java 6.21: GeraradorDeGabarito.java
200
Considere um programa de computador que corrige provas de mltipla 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 aleatrias. Para implementar esse programa, considere que a prova tenha 10 questes de mltipla escolha com 3 alternativas cada numeradas de 1 a 3. Alm disso, considere que que 5 alunos realizaram essa prova. Complete o cdigo a seguir.
2
Considere um programa de computador que corrige provas de mltipla 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 correo dessas provas. Complete o cdigo 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 }
Cdigo 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 situao das vagas (ocupada ou livre) por andar. Implemente um programa em Java que dena aleatoriamente a situao 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 cdigo a seguir.
1 class ControleDeVagas { 2 public static void main ( String [] args ) { 3 4 } 5 }
Cdigo 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 situao das vagas (ocupada ou livre). Implemente um programa em Java que exiba no terminal a quantidade de vagas livres por andar. Complete o cdigo 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 }
Cdigo Java 6.29: Estacionamento.java
Considere um programa de computador que corrige provas de mltipla 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 questes de mltipla escolha. Considere que cada questo possui trs alternativas numeradas de 1 a 3. Complete o cdigo a seguir.
6
7 Considere um programa de computador que corrige provas de mltipla 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 aleatrias. Para implementar esse programa, considere que a prova tenha 10 questes de mltipla escolha com 3 alternativas cada numeradas de 1 a 3. Alm disso, considere que que 5 alunos realizaram essa prova. Complete o cdigo a seguir.
1 class GeraradorDeRespostasAleatorias 2 { 3 static void Main () 4 { 5 6 } 7 }
Cdigo C# 6.17: GeraradorDeRespostasAleatorias.cs
8 Considere um programa de computador que corrige provas de mltipla 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 correo dessas provas. Complete o cdigo 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 }
Cdigo 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 situao das vagas (ocupada ou livre) por andar. Implemente um programa em Java que dena aleatoriamente a situao 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
10 Considere um programa de computador que controla as vagas de um estacionamento. Esse programa deve armazenar em uma tabela (array de arrays) a situao das vagas (ocupada ou livre). Implemente um programa em Java que exiba no terminal a quantidade de vagas livres por andar. Complete o cdigo 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 }
Cdigo C# 6.23: Estacionamento.cs
Resumo do Captulo
203
A RRAY
5
204
Na tentativa de acesso uma posio inexistente de um array, um erro de execuo gerado tanto no Java quanto no C#.
Prova
a) As posies de um array so numeradas iniciando no 0. b) As posies de um array so numeradas iniciando no 1. c) Um array pode ter no mximo 100 posies. d) Os arrays armazenam apenas nmeros inteiros. e) As posies de um array so acessadas com chaves.
a) Nesse cdigo, h um erro de compilao. b) Nesse cdigo, h um erro de execuo. c) No h nada de errado nesse cdigo. d) O valor 10 ser exibido no terminal. e) O valor 0 ser exibido no terminal.
a) Atravs da propriedade Length. b) Atravs da propriedade Size. c) Atravs do atributo capacity. d) Atravs do atributo size. e) Atravs do atributo length.
204
www.k19.com.br
205
4
A RRAY
a) Atravs da propriedade Length. b) Atravs da propriedade Size. c) Atravs do atributo capacity. d) Atravs do atributo size. e) Atravs do atributo length.
a) Na compilao, um erro ocorrer. b) Na execuo, as 100 posies do array sero preenchidas. c) Na compilao, as 100 posies do array sero preenchidas. d) Na execuo, todos os valores armazenados no array sero exibidos no terminal. e) Na execuo, um erro ocorrer.
Minha Pontuao
Pontuao Mnima:
Pontuao Mxima:
www.facebook.com/k19treinamentos
205
A RRAY
206
206
www.k19.com.br
CAPTULO
F UNES OU M TODOS
Considere uma empresa que precisa gerar diversos tipos de documentos como recibos, atestados ou relatrios. Os dados da empresa devem aparecer no cabealho dos documentos. Para automatizar a criao 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 cdigo acima exibe no terminal o cabealho que deve aparecer nos documentos. Toda vez que um documento for exibido no terminal, as linhas acima sero adicionadas no cdigo. Dessa forma, esse trecho de cdigo se repetir muitas vezes. Agora, considere uma mudana simples no cabealho dos documentos, o telefone da empresa deve aparecer depois do email. Essa pequena alterao implicar em modicaes em muitos pontos do cdigo fonte. Na verdade, qualquer alterao no cabealho implicar em modicaes em muitos lugares do cdigo fonte. Para facilitar eventuais modicaes no cabealho, podemos utilizar o conceito de funo ou mtodo.
Importante
Linguagens Orientadas a Objetos como Java ou C# utilizam o termo mtodo e no o termo funo. Contudo, nesse momento, no discutiremos as diferenas conceituais entre mtodos e funes pois essa discusso est totalmente fora do escopo desse treinamento.
Ento, deniremos um mtodo para exibir o cabealho dos documentos no terminal e reaproveitlo toda vez que for necessrio.
1 static void exibeCabecalho () { 2 System . out . println ( " ------------ K19 Treinamentos ------------" ) ; 3 System . out . println ( " ----------- contato@k19 . com . br -----------" ) ; 4 }
Quando necessrio, um mtodo pode ser chamado atravs do seu nome. Observe, no cdigo abaixo, que o mtodo exibeCabecalho foi chamado duas vezes.
1 class Programa { 2 public static void main ( String [] args ) { 3 // chamando a funo exibeCabecalho 4 exibeCabecalho () ; 5 System . out . println ( " Recibo : R$ 545 , " ) ; 6 7 System . out . println () ; 8 9 // chamando a funo exibeCabecalho 1 exibeCabecalho () ; 11 System . out . println ( " Atestado de Matrcula : Jonas Keizo Hirata " ) ; 12 }
www.facebook.com/k19treinamentos
207
F UNES 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 Matrcula : Jonas Keizo Hirata
Agora, acrescentar o telefone da empresa no cabealho dos documentos muito fcil. Basta alterar o cdigo da funo 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 }
Parmetros
Considere um programa de computador que realiza operaes nanceiras como o clculo de juros simples por exemplo. Para evitar repetio de cdigo, podemos denir um mtodo para realizar esse clculo e reutiliz-lo todo vez que for necessrio.
1 static void calculaJurosSimples () { 2 double juros = 1 * . 15 * 12; 3 }
Observe que o mtodo acima considera um capital xo de R$ 10.000,00, uma taxa de juros xa de 1,5% e um perodo xo de 12 meses. De fato, esse mtodo no muito til porque toda vez que ele for chamado, ele realizar o clculo com esses valores xos. Para tornar o mtodo calculaJurosSimples mais til, devemos parametriz-lo. Um parmetro basicamente um valor que um mtodo recebe antes de ser executado.
1 static void calculaJurosSimples ( double capital , double taxa , int periodo ) { 2 double juros = capital * taxa * periodo ; 3 }
No cdigo acima, trs parmetros foram denidos para o mtodo calculaJurosSimples. O primeiro parmetro do tipo double e ser armazenado na varivel capital. O segundo do tipo double e ser armazenado na varivel taxa. O terceiro do tipo int e ser armazenado na varivel periodo. Agora, nas chamadas do mtodo calculaJurosSimples, devemos passar os trs parmetros necessrios para o clculo do juros simples. No exemplo a seguir, o mtodo main chama o mtodo calculaJurosSimples duas vezes. Na primeira chamada, os valores passados como parmetro so: 10000, 0.015 e 12. Na segunda chamada, os valores passados como parmetro so: 25400, 0.02 e 30.
208
www.k19.com.br
209
F UNES 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 mtodo calculaJurosSimples armazenado em uma varivel local. Essa varivel no pode ser acessada dentro do mtodo main. Em outras palavras, o mtodo main no tem acesso ao juros que foi calculado dentro do mtodo calculaJurosSimples. Todo mtodo pode, ao nal do seu processamento, devolver uma resposta para que o chamou. Nas linguagens Java e C#, a instruo return indica o valor de resposta de um mtodo.
1 static double calculaJurosSimples ( double capital , double taxa , int periodo ) { 2 double juros = capital * taxa * periodo ; 3 return juros ; 4 }
Observe as duas modicaes realizadas no mtodo calculaJurosSimples. A primeira alterao a retirada da palavra reservada void e a insero da palavra reservada double em seu lugar. A palavra void indicava que o mtodo no devolvia nenhuma resposta ao nal do seu processamento. A palavra double indica que o mtodo devolver um valor do tipo double ao nal do seu processamento. A segunda modicao a utilizao do comando return para devolver como resposta o valor do juros que um valor do tipo double. Agora, a resposta pode ser recuperada no mtodo main armazenada em uma varivel.
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 mtodo pode devolver outros tipos de valores. Para isso, basta modicar a marcao de retorno denindo o tipo de valor que o mtodo devolver. Veja alguns exemplos.
1 static int metodo () {
www.facebook.com/k19treinamentos
209
F UNES OU M TODOS
2 // corpo de um mtodo que devolve int 3 }
210
Abra um terminal; Entre na pasta dos seus exerccios e crie uma pasta chamada funcoes-oumetodos para os arquivos desenvolvidos nesse captulo.
1
K19 / rafael$ mkdir funcoes - ou - metodos K19 / rafael$ cd funcoes - ou - metodos K19 / rafael / funcoes - ou - metodos$
C :\ Users \ K19 \ rafael > md funcoes - ou - metodos C :\ Users \ K19 \ rafael > cd funcoes - ou - metodos C :\ Users \ K19 \ rafael \ funcoes - ou - metodos >
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 denindo um mtodo que realize o clculo do consumo de combustvel de um veculo.
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 }
Cdigo 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 UNES OU M TODOS
Na pasta funcoes-ou-metodos, crie um arquivo chamado JurosComposto.java. Implemente um programa em Java denindo um mtodo que realize o clculo do montante obtido com a aplicao 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 }
Cdigo Java 7.14: JurosComposto.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao4.zip
Na pasta funcoes-ou-metodos, crie um arquivo chamado IRPF.java. Implemente um programa em Java denindo um mtodo que realize o clculo do imposto de renda pessoa fsica.
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 UNES OU M TODOS
16 static double calculaIRPF ( double renda ) { 17 if ( renda <= 171 .18) { 18 return ; 19 } else if ( renda <= 2563.91) { 2 return renda * . 75 - 128.31; 21 } else if ( renda <= 3418.59) { 22 return renda * .15 - 32 .6 ; 23 } else if ( renda <= 4271.59) { 24 return renda * .225 - 577. ; 25 } else { 26 return renda * .275 - 79 .58; 27 } 28 } 29 }
Cdigo Java 7.15: IRPF.java
212
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao6.zip
Na pasta funcoes-ou-metodos, crie um arquivo chamado IMC.java. Implemente um programa em Java denindo um mtodo que realize o clculo do ndice de massa corporal e outro que determina a situao da pessoa a partir desse ndice.
8
1 class IMC { 2 public static void main ( String [] args ) { 3 double amandaIMC = calculaIMC (52.6 , 1.61) ; 4 double joyceIMC = calculaIMC (54.1 , 1.59) ; 5 6 String amandaSituacao = calculaResultadoIMC ( amandaIMC ) ; 7 String joyceSituacao = calculaResultadoIMC ( joyceIMC ) ; 8 9 System . out . println ( " Amanda IMC : " + amandaIMC + " - " + amandaSituacao ) ; 1 System . out . println ( " Joyce IMC : " + joyceIMC + " - " + joyceSituacao ) ; 11 } 12 13 static double calculaIMC ( double peso , double altura ) { 14 return peso / ( altura * altura ) ; 15 } 16 17 static String calculaResultadoIMC ( double imc ) { 18 if ( imc < 17) { 19 return " Muito abaixo do peso " ; 2 } else if ( imc < 18.5) { 21 return " Abaixo do peso " ; 22 } else if ( imc < 25) { 23 return " Peso normal " ; 24 } else if ( imc < 3 ) { 25 return " Acima do peso " ; 26 } else if ( imc < 35) { 27 return " Obsesidade I " ; 28 } else if ( imc < 4 ) {
212
www.k19.com.br
213
29 return " Obsesidade II - severa " ; 3 } else { 31 return " Obsesidade III - mrbida " ; 32 } 33 } 34 }
Cdigo Java 7.16: IMC.java
F UNES OU M TODOS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao8.zip
Na pasta funcoes-ou-metodos, crie um arquivo chamado Arrays.java. Implemente um programa em Java denindo um mtodo que preencha um array com nmeros inteiros aleatrios no intervalo de 0 a 99 e outro que exiba no terminal os valores armazenados em um array.
10
1 class Arrays { 2 public static void main ( String [] args ) { 3 int [] array1 = new int [5]; 4 int [] array2 = new int [1 ]; 5 6 preencheArray ( array1 ) ; 7 preencheArray ( array2 ) ; 8 9 exibeArray ( array1 ) ; 1 exibeArray ( array2 ) ; 11 } 12 13 static void preencheArray ( int [] array ) { 14 for ( int i = ; i < array . length ; i ++) { 15 array [ i ] = ( int ) ( Math . random () * 1 ) ; 16 } 17 } 18 19 static void exibeArray ( int [] array ) { 2 System . out . println ( " Array : " ) ; 21 for ( int i = ; i < array . length ; i ++) { 22 System . out . println ( " array [ " + i + " ] = " + array [ i ]) ; 23 } 24 System . out . println ( " ------------------------------------" ) ; 25 } 26 }
Cdigo Java 7.17: Arrays.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao1 .zip
11
www.facebook.com/k19treinamentos
213
F UNES OU M TODOS
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 ------------------------------------
214
12
Acrescente um mtodo na classe Arrays para contar a quantidade nmeros pares de um array.
1 class Arrays { 2 public static void main ( String [] args ) { 3 int [] array1 = new int [5]; 4 int [] array2 = new int [1 ]; 5 6 preencheArray ( array1 ) ; 7 preencheArray ( array2 ) ; 8 9 exibeArray ( array1 ) ; 1 exibeArray ( array2 ) ; 11 12 int pares1 = contaPar ( array1 ) ; 13 int pares2 = contaPar ( array2 ) ; 14 15 System . out . println ( " Quantidade de pares do primeiro array : " + pares1 ) ; 16 System . out . println ( " Quantidade de pares do segundo array : " + pares2 ) ; 17 } 18 19 static int contaPar ( int [] array ) { 2 int pares = ; 21 for ( int i = ; i < array . length ; i ++) { 22 if ( array [ i ] % 2 == ) { 23 pares ++; 24 } 25 } 26 return pares ; 27 } 28 29 static void preencheArray ( int [] array ) { 3 for ( int i = ; i < array . length ; i ++) { 31 array [ i ] = ( int ) ( Math . random () * 1 ) ; 32 } 33 } 34 35 static void exibeArray ( int [] array ) { 36 System . out . println ( " Array : " ) ; 37 for ( int i = ; i < array . length ; i ++) { 38 System . out . println ( " array [ " + i + " ] = " + array [ i ]) ; 39 } 4 System . out . println ( " ------------------------------------" ) ; 41 } 42 }
Cdigo Java 7.18: Arrays.java
214
www.k19.com.br
215
F UNES OU M TODOS
1-funcoes-ou-metodos-fixacao12.zip
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
13
www.facebook.com/k19treinamentos
215
F UNES OU M TODOS
required : int , double , String found : String , String , String reason : actual argument String cannot be converted to int by method invocation conversion Programa . java :9: error : cannot return a value from method whose result type is void return a + b + c ; ^ 4 errors
216
216
www.k19.com.br
217
F UNES OU M TODOS
Na pasta funcoes-ou-metodos, crie um arquivo chamado ConsumoDeCombustivel.cs. Implemente um programa em Java denindo um mtodo que realize o clculo do consumo de combustvel de um veculo.
14
1 class ConsumoDeCombustivel 2 { 3 static void Main () 4 { 5 double reposta1 = calculaConsumoLitroKilometro (131.679 , 13.5) ; 6 double reposta2 = calculaConsumoLitroKilometro (251.856 , 21.6) ; 7
www.facebook.com/k19treinamentos
217
F UNES OU M TODOS
8 9 1 11 12 13 14 15 16 17 } System . Console . WriteLine ( " Consumo : " + reposta1 ) ; System . Console . WriteLine ( " Consumo : " + reposta2 ) ; } static double calculaConsumoLitroKilometro ( double distancia , double combustivel ) { double consumo = distancia / combustivel ; return consumo ; }
218
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao14.zip
15
Na pasta funcoes-ou-metodos, crie um arquivo chamado JurosComposto.cs. Implemente um programa em Java denindo um mtodo que realize o clculo do montante obtido com a aplicao de juros compostos.
16
1 class JurosComposto 2 { 3 static void Main () 4 { 5 double reposta1 = calculaJurosComposto (1 , .1 , 6) ; 6 double reposta2 = calculaJurosComposto (2 , . 5 , 6) ; 7 8 System . Console . WriteLine ( " Montante : " + reposta1 ) ; 9 System . Console . WriteLine ( " Montante : " + reposta2 ) ; 1 } 11 12 static double calculaJurosComposto ( double capital , double taxa , int periodo ) 13 { 14 double montante = capital * System . Math . Pow (1 + taxa , periodo ) ; 15 return montante ; 16 } 17 }
Cdigo C# 7.4: JurosComposto.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao16.zip
17
218
www.k19.com.br
219
18
F UNES OU M TODOS
Na pasta funcoes-ou-metodos, crie um arquivo chamado IRPF.cs. Implemente um programa em Java denindo um mtodo que realize o clculo do imposto de renda pessoa fsica.
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 <= 171 .18) 21 { 22 return ; 23 } 24 else if ( renda <= 2563.91) 25 { 26 return renda * . 75 - 128.31; 27 } 28 else if ( renda <= 3418.59) 29 { 3 return renda * .15 - 32 .6 ; 31 } 32 else if ( renda <= 4271.59) 33 { 34 return renda * .225 - 577. ; 35 } 36 else 37 { 38 return renda * .275 - 79 .58; 39 } 4 } 41 }
Cdigo C# 7.5: IRPF.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao18.zip
19
Na pasta funcoes-ou-metodos, crie um arquivo chamado IMC.cs. Implemente um programa em Java denindo um mtodo que realize o clculo do ndice de massa corporal e outro que determina
20
www.facebook.com/k19treinamentos
219
F UNES OU M TODOS
220
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao2 .zip
21
220
www.k19.com.br
221
22
F UNES OU M TODOS
Na pasta funcoes-ou-metodos, crie um arquivo chamado Arrays.cs. Implemente um programa em Java denindo um mtodo que preencha um array com nmeros inteiros aleatrios 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 }
Cdigo C# 7.7: Arrays.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao22.zip
23
www.facebook.com/k19treinamentos
221
F UNES OU M TODOS
24
222
Acrescente um mtodo na classe Arrays para contar a quantidade nmeros 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 }
Cdigo C# 7.8: ArraysPreencheContaPar.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-fixacao24.zip
25
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 UNES OU M TODOS
Exerccios Complementares
1 Implemente um mtodo que determina se um ano ou no bissexto. As regras para determinar se um ano bissexto so:
1. Anos mltiplos de 4 so bissextos. 2. Anos mltiplos de 100 no so bissextos. 3. Anos mltiplos de 400 so bissextos. 4. As ltimas regras prevalecem sobre as primeiras. Complete o cdigo 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 }
Cdigo Java 7.21: AnoBissexto.java
2 Implemente um mtodo que verica se uma determinada data vlida ou no. Lembre-se que Janeiro, Maro, Maio, Julho, Agosto, Outubro e Dezembro possuem 31 dias; Abril, Junho, Setembro e Novembro possuem 30 dias; e Fevereiro possui 28 dias em anos no bissextos e 29 dias em anos bissextos. Complete o cdigo a seguir.
www.facebook.com/k19treinamentos
223
F UNES 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 }
Cdigo Java 7.23: VericaDatas.java
224
);
3 A Pscoa um evento religioso que ocorre todo ano e pode cair em uma data entre 22 de Maro e 25 de Abril. O astrnomo Jean Baptiste Joseph Delambre desenvolveu um algoritmo para calcular a data da Pscoa para qualquer ano aps 1583. Veja as operaes necessrias para realizar esse clculo.
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
Implemente um mtodo que determina a data da Pscoa de um determinado ano posterior a 1583. Complete o cdigo a seguir.
1 class Pascoa { 2 public static void main ( String [] 3 String s = pascoa (2 ); 4 System . out . println ( " Pscoa " + 5 6 s = pascoa (2 12) ; 7 System . out . println ( " Pscoa " + 8 9 s = pascoa (2 25) ; 1 System . out . println ( " Pscoa " + 11 12 s = pascoa (21 ) ; 13 System . out . println ( " Pscoa " + 14 } 15 16 } args ) { s);
s);
s);
s);
224
www.k19.com.br
225
F UNES OU M TODOS
4 Implemente um mtodo que determina a partir de uma data (dia, ms e ano) qual ser o dia da semana (domingo, segunda, tera, quarta, quinta, sexta e sbado). 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 soluo utiliza operaes matemticas bsicas.
1 2 3 4 5
a y m q d
= = = = =
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 correspondncia. d 0 1 2 3 4 5 6 dia da semana Domingo Segunda Tera Quarta Quinta Sexta Sbado
www.facebook.com/k19treinamentos
225
F UNES OU M TODOS
5
226
Implemente um mtodo que dado um ms e um ano exiba no terminal o calendrio 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
Implemente um mtodo que determina se um ano ou no bissexto. As regras para determinar se um ano bissexto so:
6
1. Anos mltiplos de 4 so bissextos. 2. Anos mltiplos de 100 no so bissextos. 3. Anos mltiplos de 400 so bissextos. 4. As ltimas regras prevalecem sobre as primeiras.
);
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 UNES 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);
Implemente um mtodo que verica se uma determinada data vlida ou no. Lembre-se que Janeiro, Maro, Maio, Julho, Agosto, Outubro e Dezembro possuem 31 dias; Abril, Junho, Setembro e Novembro possuem 30 dias; e Fevereiro possui 28 dias em anos no bissextos e 29 dias em anos bissextos. Complete o cdigo 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 }
Cdigo C# 7.11: VericaDatas.cs
);
A Pscoa um evento religioso que ocorre todo ano e pode cair em uma data entre 22 de Maro e 25 de Abril. O astrnomo Jean Baptiste Joseph Delambre desenvolveu um algoritmo para calcular a data da Pscoa para qualquer ano aps 1583. Veja as operaes necessrias para realizar esse clculo.
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 UNES 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 mtodo que determina a data da Pscoa de um determinado ano posterior a 1583. Complete o cdigo a seguir.
1 class Pascoa 2 { 3 static void Main () 4 { 5 String s = pascoa (2 ); 6 System . Console . WriteLine ( " Pscoa 7 8 s = pascoa (2 12) ; 9 System . Console . WriteLine ( " Pscoa 1 11 s = pascoa (2 25) ; 12 System . Console . WriteLine ( " Pscoa 13 14 s = pascoa (21 ) ; 15 System . Console . WriteLine ( " Pscoa 16 } 17 18 }
" + s);
" + s);
" + s);
" + s);
Implemente um mtodo que determina a partir de uma data (dia, ms e ano) qual ser o dia da semana (domingo, segunda, tera, quarta, quinta, sexta e sbado). 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 soluo utiliza operaes matemticas bsicas.
9
1 2 3 4 5
a y m q d
= = = = =
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 correspondncia. d 0 1 2 3 4 5 6 dia da semana Domingo Segunda Tera Quarta Quinta Sexta Sbado
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 " tera " , 16 " quarta " , 17 " quinta " , 18 " sexta " , 19 " sbado " 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 }
Cdigo C# 7.17: DiaDaSemana.cs
F UNES OU M TODOS
Implemente um mtodo que dado um ms e um ano exiba no terminal o calendrio 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
);
www.facebook.com/k19treinamentos
229
F UNES 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
Resumo do Captulo
Para evitar a repetio de um determinado trecho de cdigo, podemos criar uma funo ou um mtodo.
Em Java ou C#, a palavra reservada void utilizada em mtodos que no devolvem resposta.
Devemos denir um tipo de retorno para criar funes ou mtodos que devolvem respostas.
Em Java ou C#, a palavra reservada return utilizada, no corpo dos mtodos, para devolver uma resposta.
Prova
Qual alternativa est correta? a) Uma funo pode ter vrios tipos de retorno. b) Obrigatoriamente, os mtodos precisam ter parmetros. c) Um mtodo denido com void no devolve resposta. d) Em linguagens orientadas a objetos, utilizamos o termo funo e no o termo mtodo. e) A palavra return utilizada para guardar a resposta de uma funo.
230
231
1 static void teste () { 2 int a = 1; 3 }
F UNES OU M TODOS
a) O mtodo teste no devolve resposta. b) O mtodo teste sempre devolve o valor 1. c) O mtodo teste recebe um valor do tipo int como parmetro. d) O mtodo teste no compila pois faltou o comando return. e) O mtodo teste devolve valores do tipo int.
1 // V 2 double a = teste (1 , 1) ;
a) I b) II c) III d) IV e) V
www.facebook.com/k19treinamentos
231
F UNES OU M TODOS
4
232
1 // II 2 double a = teste (1 , 1) ;
a) O mtodo teste no devolve resposta. b) O mtodo teste no compila pois mtodos que devolvem double no podem devolver valores do tipo int. c) O mtodo teste no compila pois mtodos no podem receber dois parmetros. d) O mtodo teste no compila pois ele deveria ser void. e) O mtodo teste no possui nenhum problema.
232
www.k19.com.br
233
6
F UNES OU M TODOS
a) O mtodo teste no devolve resposta. b) O mtodo teste no compila pois mtodos que devolvem String no podem devolver valores do tipo int. c) O mtodo teste no compila pois ele deveria receber duas strings como parmetro. d) O mtodo teste compilaria com uma operao de casting. e) O mtodo teste no possui nenhum problema.
Minha Pontuao
Pontuao Mnima:
Pontuao Mxima:
www.facebook.com/k19treinamentos
233
F UNES OU M TODOS
234
234
www.k19.com.br
APNDICE
P ROBLEMAS
Para exercitar todo o contedo desse treinamento, resolveremos alguns problemas desenvolvendo programas de computador.
Na nossa estratgia para encontrar o maior elemento de um array de nmeros, o ponto de partida assumir que o primeiro elemento do array o maior. Observe no cdigo a seguir que a varivel 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 lao, no cdigo abaixo, inicia na posio 1, ou seja, na segunda posio do array e vai at a ltima posio. A cada iterao, 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 lao, 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 atualizao da
www.facebook.com/k19treinamentos
235
P ROBLEMAS
236
Ao nal do lao, todos os valores foram comparados e a varivel posicaoDoMaior armazena a posio do maior elemento do array. Ento, 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 comparao realizada na condio da instruo if.
Abra um terminal; Entre na pasta dos seus exerccios e crie uma pasta chamada problemas para os arquivos desenvolvidos nesse captulo.
1
K19 / rafael$ mkdir problemas K19 / rafael$ cd problemas K19 / rafael / problemas$
C :\ Users \ K19 \ rafael > md problemas C :\ Users \ K19 \ rafael > cd problemas C :\ Users \ K19 \ rafael \ problemas >
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao1.zip
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 posio : " + posicaoDoMaior ) ; int posicaoDoMenor = menor ( array ) ; System . out . println ( " O menor valor do array : " + array [ posicaoDoMenor ]) ; System . out . println ( " Esse valor est na posio : " + 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 ; }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao2.zip
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 estratgia declarar uma varivel para acumular os valores armazenados no array. Essa varivel deve ser inicializada com o nmero 0 para no interferir no resultado nal.
1 public static double soma ( double [] array ) { 2 double soma = ; 3 }
Ao nal do lao, a valor da varivel soma justamente a somatria dos valores contidos no array. Ento, para nalizar, 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 }
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 }
Cdigo Java A.11: Soma.java
P ROBLEMAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao4.zip
O mtodo media pode chamar o mtodo soma para obter a somatria dos elementos do array.
1 public static double media ( double [] array ) { 2 double soma = soma ( array ) ; 3 }
Com o valor da somatria armazenado na varivel soma, a mdia obtida com uma diviso.
1 public static double media ( double [] array ) { 2 double soma = soma ( array ) ; 3 double media = soma / array . length ; 4 }
www.facebook.com/k19treinamentos
239
P ROBLEMAS
4 return media ; 5 }
240
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 mdia 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 }
Cdigo Java A.16: Media.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao6.zip
241
P ROBLEMAS
posio correspondente a essa vaga. Por exemplo, considere o array {12, 34, 11, 22}. De acordo com as informaes 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 mtodo que realize a troca dos valores contidos em duas posies de um array. Vamos comear denindo o esqueleto do mtodo que realizar essas trocas. Podemos denir trs parmetros para esse mtodo. O primeiro o array que contm os elementos que sero trocados. O segundo a posio de um dos dois elementos que sero trocados e o terceiro a posio do outro elemento.
1 public static void troca ( int [] array , int i , int j ) { 2 3 }
Basicamente, o elemento da posio j deve ser armazenado na posio i e vice versa. Considere o seguinte cdigo.
1 public static void troca ( int [] array , int i , int j ) { 2 array [ i ] = array [ j ]; 3 }
Na atribuio em destaque, guardamos o elemento da posio j na posio i. Nessa operao, perderemos o valor antigo da posio i. Dessa forma, no poderemos guard-lo na posio j. Para solucionar esse problema, basta armazenar esse elemento em uma varivel auxiliar antes dessa atribuio.
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 posio i armazenado na varivel auxiliar. Depois, o valor da posio j armazenado na posio i. Por m, devemos armazenar o valor da varivel auxiliar (antigo valor da posio i) na posio 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 }
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] + " } " ) ; }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao8.zip
242
www.k19.com.br
243
2 }
P ROBLEMAS
O trecho de cdigo Math.random() gera um nmero do tipo double maior ou igual a 0 e menor do que 1. Podemos utiliz-lo como base para gerar um nmero inteiro em um determinado intervalo. A quantidade de elementos no intervalo [i, j] j - i + 1. Multiplicando esse valor pelo nmero gerado com o Math.random(), obteremos um nmero 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 nmero inteiro, podemos realizar uma operao de casting. Com isso teremos um nmero 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 sequncia, podemos realizar uma operao de soma para ajustar o nmero 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 nmero inteiro maior ou igual a i (0 + i) e menor do que j + 1 (j - i + 1 + i). Em outras palavras, obteremos um nmero inteiro maior ou igual a i e menor ou igual a j. Para nalizar, 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 }
10
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 }
Cdigo Java A.28: Aleatorio.java
244
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao1 .zip
11
244
www.k19.com.br
245
P ROBLEMAS
Toda vez que for chamado, o mtodo geraApostaMegaSena devolver um array de int com 6 nmeros. Esses nmeros so justamente os que formam a aposta da Mega-Sena. Podemos comear a implementao do mtodo geraApostaMegaSena, armazenando em um array os nmeros de 1 a 60. Esses so os nmeros 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 posies do array numeros. O valor armazenado nessa posio ser o primeiro nmero da aposta. Para realizar essa escolha, podemos utilizar o mtodo 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 nmero da aposta, para no correr o risco de sortear o mesmo nmero duas vezes, realizaremos uma troca entre o primeiro nmero sorteado e o primeiro elemento do array numeros. Para isso, podemos utilizar o mtodo 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 prximo passo sortear mais um elemento do array numeros s que devemos desconsiderando o primeiro pois esse j foi sorteado. O nmero sorteado dessa vez ser o segundo nmero da aposta que est sendo denida.
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 no 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 }
Observe a formao de um padro no cdigo. Sorteamos um nmero; armazenamos no array aposta; e realizamos uma troca. Dado esse padro, podemos utilizar um lao para sortear os 6 nmeros 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
12
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 }
Cdigo Java A.38: GeraApostaMegaSena.java
248
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao12.zip
13
248
www.k19.com.br
249
P ROBLEMAS
14
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 }
Cdigo Java A.40: Embaralha.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao14.zip
15
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
16
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao16.zip
17
O primeiro passo da nossa estratgia 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 }
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
Voc j pode deduzir quais seriam os prximos passos. Observe a existncia de uma padro nesse cdigo. Dessa forma, podemos utilizar um lao.
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 }
18
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 }
Cdigo Java A.48: Inverte.java
P ROBLEMAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao18.zip
19
www.facebook.com/k19treinamentos
253
P ROBLEMAS
11 12 13 14 15 16 17 18 }
254
Voc pode observar um padro ocorrendo na implementao acima. Nesse caso, podemos utilizar um lao com a condio 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 }
20
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 binrio " + 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 }
Cdigo Java A.52: Binario.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao2 .zip
21
254
www.k19.com.br
255
P ROBLEMAS
22
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 posio : 1 11 int posicaoDoMenor = menor ( array ) ; 12 System . Console . WriteLine ( " O menor valor do array : " 13 System . Console . WriteLine ( " Esse valor est na posio : 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 }
Cdigo C# A.1: AchaMaiorOuMenor.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao22.zip
23
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 posio : 2 O menor valor do array : -1 .7 Esse valor est na posio :
256
24
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 }
Cdigo C# A.2: Soma.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao24.zip
25
26
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 mdia 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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao26.zip
27
28
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 }
Cdigo C# A.4: Troca.cs
258
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao28.zip
29
30
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 }
Cdigo C# A.5: Aleatorio.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao3 .zip
31
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
32
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 }
Cdigo C# A.6: GeraApostaMegaSena.cs
260
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao32.zip
33
34
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao34.zip
35
36
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao36.zip
37
38
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao38.zip
39
40
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 binrio " + s ) ; } } static string binario ( int x ) { string y = " " ; while ( x > ) { y = x % 2 + y; x = x / 2; } return y ; }
264
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-problemas-fixacao4 .zip
41
264
www.k19.com.br
APNDICE
Cdigo Java 1.19: DuasMensagens.java Terminal 1.27: Compilando e Executando
R ESPOSTAS
Exerccio 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
Exerccio 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 }
Cdigo 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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
www.facebook.com/k19treinamentos
1-introducao-complementar2.zip
265
R ESPOSTAS
266
Exerccio 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 }
Cdigo Java 1.20: FrasePreferida.java
K19 / rafael / introducao$ javac FrasePreferida . java K19 / rafael / introducao$ java FrasePreferida Lorem ipsum dolor sit amet
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-complementar3.zip
Exerccio 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 }
Cdigo C# 1.17: FrasePreferida.cs
K19 / rafael / introducao$ mcs FrasePreferida . cs K19 / rafael / introducao$ mono FrasePreferida . exe Lorem ipsum dolor sit amet
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-complementar4.zip
Exerccio 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
K19 / rafael / introducao$ javac K19 . java K19 / rafael / introducao$ java K19
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-complementar5.zip
Exerccio 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 }
Cdigo C# 1.18: K19.cs
K19 / rafael / introducao$ mcs K19 . cs K19 / rafael / introducao$ mono K19 . exe
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-introducao-complementar6.zip
267
R ESPOSTAS
268
b Questo 1.4 e Questo 1.5 c Questo 1.6 a Questo 1.7 e Questo 1.8 a Questo 1.9 b Questo 1.10 a Questo 1.11 e Questo 1.12 d Questo 1.13 b
268
www.k19.com.br
269
R ESPOSTAS
www.facebook.com/k19treinamentos
269
R ESPOSTAS
INCIO
270
DADOS INCORRETOS
NO
CONFIRMA DEPSITO?
CONFERIR DADOS
SIM
SEM ENVELOPE
NO
INSERIU ENVELOPE?
INSERIR ENVELOPE
SIM
FIM
NO
OUTRO DEPSITO?
SIM
270
www.k19.com.br
271
R ESPOSTAS
INCIO
ALUNO OU EX-ALUNO?
NO
NOME DO INDICADO
SIM
NO
SIM
NO
TOTAL DE DESCONTOS
FIM
Desao 2.1
www.facebook.com/k19treinamentos
271
R ESPOSTAS
272
NO
INCIO
PERSONAGEM 1
SIM
PAI, ME OU POLICIAL?
NO ENVIAR
SIM
NO
SIM
NO
SIM
NO ATRAVESSAR O RIO
SIM
NO FIM
272
www.k19.com.br
273
R ESPOSTAS
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
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 }
Cdigo Java 3.51: TestaVariavelPeso.java
www.facebook.com/k19treinamentos
273
R ESPOSTAS
274
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar2.zip
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 }
Cdigo Java 3.52: TestaTiposBasicos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar3.zip
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 }
Cdigo Java 3.53: TestaConversaoDouble.java
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar4.zip
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 }
Cdigo Java 3.54: TestaCalendar.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar5.zip
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 }
Cdigo C# 3.41: TestaVariavelPeso.cs
276
C :\ Users \ K19 \ rafael \ variaveis > csc TestaVariavelPeso . cs C :\ Users \ K19 \ rafael \ variaveis > TestaVariavelPeso . exe 88.2
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar6.zip
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 }
Cdigo C# 3.42: TestaTiposBasicos.cs
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar7.zip
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 }
Cdigo C# 3.43: TestaConversaoDouble.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar8.zip
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-variaveis-complementar9.zip
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 }
Cdigo 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
Desao 3.1
Se estivssemos trabalhando com uma loja bem pequena, com um baixo volume de vendas, assim como uma pequena variedade de produtos, poderamos alterar as variveis numeroDoPedido e codigoDoProduto para o tipo short. Dessa forma reduziramos em 50% a quantidade de memria necessria para armazenarmos essas variveis. Caso estivssemos trabalhando com uma grande rede de lojas, o tipo mais apropriado seria long. Consequentemente estaramos aumentando em 50% a quantidade de memria necessria para armazenarmos essas variveis. Questo 3.1 d Questo 3.2 a Questo 3.3 c Questo 3.4 b Questo 3.5 a Questo 3.6 e Questo 3.7 e
www.facebook.com/k19treinamentos
279
R ESPOSTAS
280
Questo 3.8 a Questo 3.9 b Questo 3.10 c Questo 3.11 a Questo 3.12 c Exerccio 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 }
Cdigo Java 4.53: UseOperadoresAritmeticos.java
280
www.k19.com.br
281
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar1.zip
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 Mdia : " + idadeMedia ) ; 1 } 11 }
Cdigo Java 4.54: IdadeMedia.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar2.zip
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 }
Cdigo Java 4.56: UseDivisaoCasting.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar3.zip
www.facebook.com/k19treinamentos
281
R ESPOSTAS
282
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 }
Cdigo Java 4.58: UseConcatenacao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar4.zip
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 }
Cdigo Java 4.60: UseOperadoresAtribuicao.java
283
K19 / rafael / operadores$ javac UseOperadoresAtribuicao . java K19 / rafael / operadores$ java UseOperadoresAtribuicao 5 15 12 48 6 1 2 1
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar5.zip
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 }
Cdigo Java 4.61: NumeroTelefone.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar6.zip
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); <= y ) ; == y ) ; != y ) ;
284
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar7.zip
1 class VerificaValores { 2 public static void main ( String [] args ) { 3 int anoTorreGemeas = 2 1; 4 int anoMichaelJackson = 2 9; 5 6 System . out . println (( anoTorreGemeas +19) /4 >= ( anoMichaelJackson +129) /5) ; 7 } 8 }
Cdigo Java 4.64: VericaValores.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar8.zip
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 }
Cdigo Java 4.66: UseOperadoresLogicos.java
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar9.zip
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 }
Cdigo Java 4.68: UseTernarioNegacaoIncrementoDecremento.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar1 .zip
www.facebook.com/k19treinamentos
285
R ESPOSTAS
286
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 }
Cdigo Java 4.69: GeraParcelas.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar11.zip
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 }
Cdigo C# 4.43: UseOperadoresAritmeticos.cs
287
C :\ Users \ K19 \ rafael \ operadores > csc UseOperadoresAritmeticos . cs C :\ Users \ K19 \ rafael \ operadores > UseOperadoresAritmeticos . exe 11 4 12 4 1
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar12.zip
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 Mdia : " + idadeMedia ) ; 12 } 13 }
Cdigo C# 4.44: IdadeMedia.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar13.zip
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 }
Cdigo C# 4.46: UseDivisaoCasting.cs
www.facebook.com/k19treinamentos
287
R ESPOSTAS
288
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar14.zip
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 }
Cdigo Java 4.70: UseConcatenacao.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar15.zip
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar16.zip
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 }
Cdigo C# 4.50: NumeroTelefone.cs
www.facebook.com/k19treinamentos
289
R ESPOSTAS
31 24 8 56 2 3
290
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar17.zip
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 }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar18.zip
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 }
Cdigo C# 4.53: VericaValores.cs
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar19.zip
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);
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar2 .zip
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 }
Cdigo C# 4.57: UseTernarioNegacaoIncrementoDecremento.cs
292
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-operadores-complementar21.zip
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 }
Cdigo C# 4.58: GeraParcelas.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
292
1-operadores-complementar22.zip
www.k19.com.br
293
R ESPOSTAS
Questo 4.1 d Questo 4.2 c Questo 4.3 e Questo 4.4 b Questo 4.5 a Questo 4.6 e Questo 4.7 d Questo 4.8 b Questo 4.9 e Questo 4.10 c Questo 4.11
www.facebook.com/k19treinamentos
293
R ESPOSTAS
294
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 }
Cdigo Java 5.119: ComparaValores.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar1.zip
1 class BlocoDeAstericos { 2 public static void main ( String [] args ) { 3 for ( int i = ; i < 5; i ++) { 4 System . out . println ( " ***************** " ) ; 5 } 6 } 7 }
Cdigo Java 5.121: BlocoDeAstericos.java
294
www.k19.com.br
295
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar2.zip
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 }
Cdigo Java 5.123: TrianguloDeAstericos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar3.zip
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar4.zip
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 }
Cdigo Java 5.127: LosangoDeAstericos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar5.zip
296
www.k19.com.br
297
R ESPOSTAS
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 }
Cdigo Java 5.129: TresLosangosDeAstericos.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar6.zip
1 class CartoesDeEstacionamento { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i <= 3; i ++) { 4 for ( int j = 1; j <= 9; j ++) { 5 for ( int k = 1; k <= 4; k ++) { 6 System . out . println ( " BLOCO : " + i + " APTO : " + ( j * 1 7 } 8 } 9 } 1 } 11 }
Cdigo Java 5.131: CartoesDeEstacionamento.java
+ k));
297
R ESPOSTAS
K19 / rafael / controle - de - fluxo$ javac CartoesDeEstacionamento . java K19 / rafael / controle - de - fluxo$ java CartoesDeEstacionamento BLOCO : 1 APTO : 11 BLOCO : 1 APTO : 12 BLOCO : 1 APTO : 13 BLOCO : 1 APTO : 14 BLOCO : 1 APTO : 21 BLOCO : 1 APTO : 22 BLOCO : 1 APTO : 23 BLOCO : 1 APTO : 24 ...
298
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar7.zip
1 class Tabuada { 2 public static void main ( String [] args ) { 3 for ( int i = 1; i <= 1 ; i ++) { 4 for ( int j = 1; j <= 1 ; j ++) { 5 System . out . println ( i + " x " + j + " = " + i * j ) ; 6 } 7 } 8 } 9 }
Cdigo Java 5.133: Tabuada.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar8.zip
1 class Piramide { 2 public static void main ( String [] args ) { 3 int baseMaior = 7; 4 5 for ( int i = 1; i <= baseMaior ; i += 2) { 6 int espacos = ( baseMaior - i ) / 2; 7 String linha = " " ; 8 9 for ( int j = ; j < espacos ; j ++) {
298
www.k19.com.br
299
1 11 12 13 14 15 16 17 18 } 19 } 2 } linha += " " ; } for ( int k = ; k < i ; k ++) { linha += " * " ; } System . out . println ( linha ) ;
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar9.zip
1 class ArvoreNatal { 2 public static void main ( String [] args ) { 3 int baseMaior = 15; 4 5 for ( int m = 7; m <= 15; m += 4) { 6 7 for ( int i = m - 6; i <= m ; i += 2) { 8 int espacos = ( baseMaior - i ) / 2; 9 String linha = " " ; 1 11 for ( int j = ; j < espacos ; j ++) { 12 linha += " " ; 13 } 14 15 for ( int k = ; k < i ; k ++) { 16 linha += " * " ; 17 } 18 19 System . out . println ( linha ) ; 2 } 21 } 22 } 23 }
Cdigo Java 5.137: ArvoreNatal.java
www.facebook.com/k19treinamentos
299
R ESPOSTAS
*** ***** ******* ***** ******* ********* *********** ********* *********** ************* ***************
300
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar1 .zip
1 class ContaUns { 2 public static void main ( String [] args ) { 3 double numero = Math . random () ; 4 System . out . println ( numero ) ; 5 6 String s = " " + numero ; 7 int resposta = ; 8 9 for ( int i = ; i < s . length () ; i ++) { 1 if ( s . charAt ( i ) == 1 ) { 11 resposta ++; 12 } 13 } 14 15 System . out . println ( resposta ) ; 16 } 17 }
Cdigo Java 5.139: ContaUns.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar11.zip
300
www.k19.com.br
301
1 class JogoDaSomaImpar { 2 public static void main ( String [] args ) { 3 int soma = ; 4 int quantidadeDeSeis = ; 5 6 for ( int i = ; i < 1 ; i ++) { 7 int numero = ( int ) ( Math . random () * 6 + 1) ; 8 9 System . out . println ( " Nmero : " + numero ) ; 1 11 if ( numero == 1) { 12 continue ; 13 } 14 15 if ( numero == 6) { 16 quantidadeDeSeis ++; 17 } 18 19 if ( quantidadeDeSeis == 2) { 2 System . out . println ( " Dois seis ! Voc perdeu ! " ) ; 21 break ; 22 } 23 24 soma += numero ; 25 } 26 27 if ( quantidadeDeSeis != 2) { 28 System . out . println ( " Soma : " + soma ) ; 29 if ( soma % 2 != ) { 3 System . out . println ( " Soma mpar ! Voc ganhou " ) ; 31 } else { 32 System . out . println ( " Soma par ! Voc perdeu " ) ; 33 } 34 } 35 } 36 }
Cdigo Java 5.141: JogoDaSomaImpar.java
R ESPOSTAS
www.facebook.com/k19treinamentos
301
R ESPOSTAS
Nmero : 3 Nmero : 5 Nmero : 5 Nmero : 3 Nmero : 6 Nmero : 2 Soma : 38 Soma par ! Voc perdeu
302
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar12.zip
1 class ComparaValores 2 { 3 static void Main () 4 { 5 System . Random gerador = new System . Random () ; 6 7 double primeiro = gerador . NextDouble () ; 8 double segundo = gerador . NextDouble () ; 9 1 System . Console . WriteLine ( " Primeiro : " + primeiro ) ; 11 System . Console . WriteLine ( " Segundo : " + segundo ) ; 12 13 if ( primeiro > segundo ) 14 { 15 System . Console . WriteLine ( " Primeiro > Segundo " ) ; 16 } 17 else if ( primeiro < segundo ) 18 { 19 System . Console . WriteLine ( " Segundo > Primeiro " ) ; 2 } 21 else 22 { 23 System . Console . WriteLine ( " Primeiro = Segundo " ) ; 24 } 25 } 26 }
Cdigo C# 5.21: ComparaValores.cs
302
www.k19.com.br
303
R ESPOSTAS
1-controle-de-fluxo-complementar13.zip
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1 class BlocoDeAstericos 2 { 3 static void Main () 4 { 5 for ( int i = ; i < 5; i ++) 6 { 7 System . Console . WriteLine ( " ***************** " ) ; 8 } 9 } 1 }
Cdigo C# 5.23: BlocoDeAstericos.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar14.zip
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 }
Cdigo C# 5.25: TrianguloDeAstericos.cs
www.facebook.com/k19treinamentos
303
R ESPOSTAS
**** ***** ******
304
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar15.zip
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 += " * " ; } } } }
Cdigo C# 5.27: TresTriangulosDeAstericos.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar16.zip
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 }
Cdigo C# 5.29: LosangoDeAstericos.cs
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar17.zip
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 }
Cdigo C# 5.31: TresLosangosDeAstericos.cs
www.facebook.com/k19treinamentos
305
R ESPOSTAS
********** ********** ********** ********** ********** ********** ********** ********** **********
306
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar18.zip
1 class CartoesDeEstacionamento 2 { 3 static void Main () 4 { 5 for ( int i = 1; i <= 3; i ++) 6 { 7 for ( int j = 1; j <= 9; j ++) 8 { 9 for ( int k = 1; k <= 4; k ++) 1 { 11 System . Console . WriteLine ( " BLOCO : " + i + " APTO : " + ( j * 1 12 } 13 } 14 } 15 } 16 }
Cdigo C# 5.33: CartoesDeEstacionamento.cs
+ k));
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar19.zip
306
www.k19.com.br
307
4 { 5 for ( int i = 1; i <= 1 ; i ++) 6 { 7 for ( int j = 1; j <= 1 ; j ++) 8 { 9 System . Console . WriteLine ( i + " x " + j + " = " + i * j ) ; 1 } 11 } 12 } 13 }
Cdigo C# 5.35: Tabuada.cs
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar2 .zip
1 class Piramide 2 { 3 static void Main () 4 { 5 int baseMaior = 7; 6 7 for ( int i = 1; i <= baseMaior ; i += 2) 8 { 9 int espacos = ( baseMaior - i ) / 2; 1 string linha = " " ; 11 12 for ( int j = ; j < espacos ; j ++) 13 { 14 linha += " " ; 15 } 16 17 for ( int k = ; k < i ; k ++) 18 { 19 linha += " * " ; 2 } 21 22 System . Console . WriteLine ( linha ) ; 23 } 24 } 25 }
Cdigo C# 5.37: Piramide.cs
www.facebook.com/k19treinamentos
307
R ESPOSTAS
C :\ Users \ K19 \ rafael \ controle - de - fluxo > csc Piramide . cs C :\ Users \ K19 \ rafael \ controle - de - fluxo > Piramide . exe * *** ***** *******
308
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar21.zip
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 <= 15; m += 4) { for ( int i = m - 6; i <= m ; i += 2) { int espacos = ( baseMaior - i ) / 2; string linha = " " ; for ( int j = ; j < espacos ; j ++) { linha += " " ; } for ( int k = ; k < i ; k ++) { linha += " * " ; } System . Console . WriteLine ( linha ) ; } } } }
Cdigo C# 5.39: ArvoreNatal.cs
308
www.k19.com.br
309
R ESPOSTAS
1-controle-de-fluxo-complementar22.zip
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
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 }
Cdigo C# 5.41: ContaUns.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar23.zip
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 ( " Nmero : " + 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 " ) ; } }
310
www.k19.com.br
311
Nmero : 4 Nmero : 2 Nmero : 4 Nmero : 3 Nmero : 5 Nmero : 5 Nmero : 3 Nmero : 6 Nmero : 2 Soma : 38 Soma par ! Voc perdeu
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-controle-de-fluxo-complementar24.zip
Questo 5.1 a Questo 5.2 c Questo 5.3 e Questo 5.4 d Questo 5.5 d Questo 5.6 e Questo 5.7 a Questo 5.8 d
www.facebook.com/k19treinamentos
311
R ESPOSTAS
312
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 }
Cdigo Java 6.22: GeraradorDeGabarito.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar1.zip
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 }
Cdigo Java 6.24: GeraradorDeRespostasAleatorias.java
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar2.zip
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 }
Cdigo Java 6.26: CorretorDeProva.java
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar3.zip
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 }
Cdigo Java 6.28: ControleDeVagas.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar4.zip
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 }
Cdigo Java 6.30: Estacionamento.java
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar5.zip
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 }
Cdigo C# 6.16: GeraradorDeGabarito.cs
www.facebook.com/k19treinamentos
315
R ESPOSTAS
316
1-arrays-complementar6.zip
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
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 }
Cdigo C# 6.18: GeraradorDeRespostasAleatorias.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar7.zip
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 ) ; }
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar8.zip
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 }
Cdigo C# 6.22: ControleDeVagas.cs
318
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar9.zip
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 }
Cdigo C# 6.24: Estacionamento.cs
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
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-arrays-complementar1 .zip
Questo 6.1 a Questo 6.2 b Questo 6.3 e Questo 6.4 a Questo 6.5 d Questo 6.6 e Exerccio 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 ==
);
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar1.zip
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 <= dias [ mes - 1]) && ( mes >= 1 && mes <= 12) && ano >= 1; 3 }
320
www.k19.com.br
321
31 }
Cdigo Java 7.24: VericaDatas.java
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar2.zip
1 class Pascoa { 2 public static void main ( String [] args ) { 3 String s = pascoa (2 ); 4 System . out . println ( " Pscoa " + s ) ; 5 6 s = pascoa (2 12) ; 7 System . out . println ( " Pscoa " + s ) ; 8 9 s = pascoa (2 25) ; 1 System . out . println ( " Pscoa " + s ) ; 11 12 s = pascoa (21 ) ; 13 System . out . println ( " Pscoa " + 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 }
Cdigo Java 7.27: Pascoa.java
www.facebook.com/k19treinamentos
321
R ESPOSTAS
Pscoa : Pscoa : Pscoa : Pscoa : 23/4/2 8/4/2 12 2 /4/2 25 28/3/21
322
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar3.zip
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 " tera " , 13 " quarta " , 14 " quinta " , 15 " sexta " , 16 " sbado " 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 }
Cdigo Java 7.30: Pascoa.java
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar4.zip
322
www.k19.com.br
323
R ESPOSTAS
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 // espaos da primeira semana 42 for ( int i = ; i < d ; i ++) { 43 System . out . print ( " "); 44 } 45 46 for ( int i = 1; i <= dias [ mes - 1]; i ++) { 47 String dia = " " + i ; 48 if ( i < 1 ) { 49 dia = " " + dia ; 5 } 51 52 System . out . print ( " " + dia + " " ) ; 53 54 if (( i + d ) % 7 == ) { 55 System . out . println () ; 56 } 57 } 58 System . out . println ( " \n - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ; 59 } 6 }
www.facebook.com/k19treinamentos
323
R ESPOSTAS
324
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar5.zip
1 class AnoBissexto 2 { 3 static void Main () 4 { 5 bool b = bissexto (2 ); 6 System . Console . WriteLine ( " 2 " + 7 8 b = bissexto (2 12) ; 9 System . Console . WriteLine ( " 2 12 " + 1 11 b = bissexto (2 25) ; 12 System . Console . WriteLine ( " 2 25 " + 13 14 b = bissexto (21 ) ; 15 System . Console . WriteLine ( " 21 " + 16 } 17 18 static bool bissexto ( int ano ) 19 { 2 return ano % 4 == || ( ano % 1 21 } 22 }
b);
b);
b);
b);
!=
&& ano % 4 ==
);
324
www.k19.com.br
325
C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > csc AnoBissexto . cs C :\ Users \ K19 \ rafael \ funcoes - ou - metodos > AnoBissexto . exe 2 True 2 12 True 2 25 False 21 False
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar6.zip
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 <= dias [ mes - 1]) && ( mes >= 1 && mes <= 12) && ano >= 1; 35 } 36 }
Cdigo C# 7.12: VericaDatas.cs
www.facebook.com/k19treinamentos
325
R ESPOSTAS
326
1-funcoes-ou-metodos-complementar7.zip
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1 class Pascoa 2 { 3 static void Main () 4 { 5 string s = pascoa (2 ); 6 System . Console . WriteLine ( " Pscoa " + s ) ; 7 8 s = pascoa (2 12) ; 9 System . Console . WriteLine ( " Pscoa " + s ) ; 1 11 s = pascoa (2 25) ; 12 System . Console . WriteLine ( " Pscoa " + s ) ; 13 14 s = pascoa (21 ) ; 15 System . Console . WriteLine ( " Pscoa " + 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 }
Cdigo C# 7.15: Pascoa.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar8.zip
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 " tera " , 16 " quarta " , 17 " quinta " , 18 " sexta " , 19 " sbado " 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 }
Cdigo C# 7.18: Pascoa.cs
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar9.zip
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 " ) ; // espaos da primeira semana for ( int i = ; i < d ; i ++) { System . Console . Write ( " "); } for ( int i = 1; i <= dias [ mes - 1]; i ++) { string dia = " " + i ; if ( i < 1 ) { dia = " " + dia ; } System . Console . Write ( " " + dia + " " ) ; if (( i + d ) % 7 == ) { System . Console . WriteLine () ; } } System . Console . WriteLine ( " \n - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ; }
328
www.k19.com.br
329
R ESPOSTAS
Arquivo: https://github.com/K19/K19-Exercicios/archive/k
1-funcoes-ou-metodos-complementar1 .zip
Questo 7.1 c Questo 7.2 a Questo 7.3 e Questo 7.4 d Questo 7.5 e
www.facebook.com/k19treinamentos
329
R ESPOSTAS
330
Questo 7.6 b
330
www.k19.com.br