K19 k01-logica-de-programacao

342

Click here to load reader

Transcript of K19 k01-logica-de-programacao

  • TREINAMENTOS

    Lgica de Programao

  • Lgica de Programao

    16 de setembro de 2013As apostilas atualizadas esto disponveis em www.k19.com.br

    Esta apostila contm:

    238 exerccios de fixao.

    82 exerccios complementares.

    4 desafios.

    61 questes de prova.

    i

  • Sumrio ii

    Sobre a K19 1

    Seguro Treinamento 2

    Termo de Uso 3

    Cursos 4

    1 Introduo 11.1 O que um Computador? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Formato Binrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Unidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Arquiteturas de Processadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 O que um Programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.6 Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.7 Linguagem de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.8 Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.9 Mquinas Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.10 Hello World em Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.11 Hello World em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.12 Mtodo Main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.13 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.14 Exibindo mensagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.15 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.16 Indentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.17 Engenharia Reversa (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.18 Ofuscadores (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.19 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.20 Erro: No Fechar os Blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.21 Erro: Trocar Maisculas e Minsculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.22 Erro: Esquecer o Ponto e Vrgula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.23 Erro: Esquecer o Main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.24 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.25 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.26 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.27 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.28 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2 Algoritmos 312.1 O que um Algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.2 Como um algoritmo pode ser representado? . . . . . . . . . . . . . . . . . . . . . . . . . 312.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.4 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3 Variveis 353.1 O que uma Varivel? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Declarando variveis em Java ou C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3 Tipos de Bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    ii www.k19.com.br

  • iii SUMRIO

    3.5 Data e Hora (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.6 Valores Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.7 Nmeros Aleatrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.8 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.9 Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.10 Converso de string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.11 Convenes de nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.12 Regras de nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.13 Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.14 Formatao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.15 Formatao de Data e Hora (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . . 533.16 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.17 Erro: Variveis com nomes repetidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.18 Erro: Esquecer a inicializao de uma varivel local . . . . . . . . . . . . . . . . . . . . . 563.19 Erro: Trocar aspas simples por aspas duplas ou vice-versa . . . . . . . . . . . . . . . . . 573.20 Erro: Utilizar o separador decimal errado . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.21 Erro: Valores incompatveis com os tipos das variveis . . . . . . . . . . . . . . . . . . . 593.22 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.23 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.24 Desafios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.25 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.26 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    4 Operadores 694.1 Tipos de Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.2 Operadores Aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.3 Diviso Inteira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704.4 Concatenao de Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714.5 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.6 Operadores de Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744.7 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.8 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.9 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794.10 Operador ternrio ?: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.11 Operador ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.12 Pr e Ps Incremento ou Pr e Ps Decremento . . . . . . . . . . . . . . . . . . . . . . . 824.13 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.14 Operaes com Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854.15 Operaes com Data e Hora (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . 884.16 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894.17 Erro: Utilizar operadores incompatveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.18 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.19 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.20 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044.21 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    5 Controle de Fluxo 1115.1 Instrues de Deciso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.2 Instruo if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.3 Instruo else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    www.facebook.com/k19treinamentos iii

  • SUMRIO iv

    5.4 Instrues de Deciso Encadeadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175.5 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185.6 Instrues de Repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235.7 Instruo while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235.8 Instruo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.9 Instrues de Repetio Encadeadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.10 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.11 Instruo break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.12 Instruo continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445.13 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.14 Blocos Sem Chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505.15 Laos Infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.16 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.17 Erro: No utilizar condies booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525.18 Erro: Excesso de ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535.19 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535.20 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645.21 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745.22 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

    6 Array 1816.1 O que um Array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816.2 Como declarar e inicializar um array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1826.3 Inserindo valores de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1826.4 Acessando os valores de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1836.5 Percorrendo um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1836.6 Array de arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1856.7 Percorrendo um array de arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1866.8 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1876.9 Erro: Acessar uma posio inexistente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1936.10 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1936.11 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1996.12 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2036.13 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    7 Funes ou Mtodos 2077.1 Parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2087.2 Resposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2097.3 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2107.4 Erro: Parmetros incompatveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2157.5 Erro: Resposta incompatvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2167.6 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2177.7 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2237.8 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2307.9 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

    A Problemas 235A.1 Encontrar o maior ou o menor elemento de um array . . . . . . . . . . . . . . . . . . . . 235A.2 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236A.3 Calcular a soma dos elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . 237

    iv www.k19.com.br

  • v SUMRIO

    A.4 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238A.5 Calcular a mdia dos elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . 239A.6 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240A.7 Trocar as posies de dois elementos de um array . . . . . . . . . . . . . . . . . . . . . . 240A.8 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241A.9 Escolher aleatoriamente um nmero inteiro dentro de um intervalo . . . . . . . . . . . 242A.10 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243A.11 Gerar apostas da Mega-Sena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244A.12 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247A.13 Embaralhar os elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248A.14 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249A.15 Ordenar os elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250A.16 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250A.17 Inverter o posicionamento dos elementos de um array . . . . . . . . . . . . . . . . . . . 251A.18 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252A.19 Nmeros em formato binrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253A.20 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254A.21 Exerccios de Fixao Com C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

    B Respostas 265

    www.facebook.com/k19treinamentos v

  • SUMRIO vi

    vi www.k19.com.br

  • 1 SUMRIO

    Sobre a K19

    A K19 uma empresa especializada na capacitao de desenvolvedores de software. Sua equipe composta por profissionais formados em Cincia da Computao pela Universidade de So Paulo(USP) e que possuem vasta experincia em treinamento de profissionais para rea de TI.

    O principal objetivo da K19 oferecer treinamentos de mxima qualidade e relacionados s prin-cipais tecnologias utilizadas pelas empresas. Atravs desses treinamentos, seus alunos tornam-secapacitados para atuar no mercado de trabalho.

    Visando a mxima qualidade, a K19 mantm as suas apostilas em constante renovao e melho-ria, oferece instalaes fsicas apropriadas para o ensino e seus instrutores esto sempre atualizadosdidtica e tecnicamente.

    www.facebook.com/k19treinamentos 1

  • SUMRIO 2

    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 pos-sui o Seguro Treinamento. Ao contratar um curso, o aluno poder refaz-lo quantas vezes desejarmediante 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 aoalunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treina-mento 10% do valor total do curso.

    2 www.k19.com.br

  • 3 SUMRIO

    Termo de UsoTermo de Uso

    Todo o contedo desta apostila propriedade da K19 Treinamentos. A apostila pode ser utilizadalivremente para estudo pessoal . Alm disso, este material didtico pode ser utilizado como materialde apoio em cursos de ensino superior desde que a instituio correspondente seja reconhecida peloMEC (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 semo prvio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido est sujeito smedidas legais cabveis.

    www.facebook.com/k19treinamentos 3

  • SUMRIO 4

    K01- Lgica de Programao

    K11 - Orientao a Objetos em Java

    K12 - Desenvolvimento Web com JSF2 e JPA2

    K21 - Persistncia com JPA2 e Hibernate

    K22 - Desenvolvimento Web Avanado com JFS2, EJB3.1 e CDI

    K23 - Integrao de Sistemas com Webservices, JMS e EJB

    K31 - C# e Orientao a Objetos

    K32 - Desenvolvimento Web com ASP.NET MVC

    TREINA

    MENT

    OS

    TREINAMENTOSTREINAMENTOS Conhea os nossos cursos

    www.k19.com.br/cursos

    K02 - Desenvolvimento Web com HTML, CSS e JavaScript

    K03 - SQL e Modelo Relacional

    K41 - Desenvolvimento Mobile com Android

    K51 - Design Patterns em Java

    K52 - Desenvolvimento Web com Struts

    4 www.k19.com.br

  • INTRODUO

    CA

    P

    TU

    LO

    1O que um Computador?

    Atualmente, os computadores esto presentes no cotidiano da maioria das pessoas. Voc, prova-velmente, j est acostumado a utilizar computadores no seu dia a dia. Mas, ser que voc conheceo funcionamento bsico de um computador? A seguir, listaremos os principais elementos de umcomputador e suas respectivas funes.

    ULA + UC

    Registradores

    CP

    UH

    DM

    emria R

    AM

    Figura 1.1: Principais elementos de um computador

    CPU (Unidade Central de Processamento - Processador): A CPU o crebro que controla o fun-cionamento dos outros componentes do computador e realiza todo o processamento neces-srio. Esse processamento consiste basicamente na realizao de operaes matemticas eoperaes de armazenamento ou recuperao de dados.

    Registradores: Os registradores armazenam os dados que esto sendo processados pela CPU. Oacesso ao contedo dos registradores extremamente rpido. Por outro lado, eles no pos-suem muito espao. Dessa forma, no possvel armazenar uma grande quantidade de infor-mao

    Memria RAM: Os dados utilizados pelos programas que esto abertos so armazenados na mem-ria RAM. O acesso ao contedo da memria RAM rpido porm mais lento do que o acessoao contedo dos registradores. Por outro lado, o espao da memria RAM bem maior do queo espao dos registradores.

    www.facebook.com/k19treinamentos 1

  • INTRODUO 2

    Disco Rgido: Os dados armazenados nos registradores e na memria RAM so descartados quandoo computador desligado. O contedo que no pode ser descartado ao desligar o computadordeve ser armazenado no disco rgido. O acesso ao disco rgido bem mais lento do que oacesso 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 comu-nicar com outros computadores. Essa comunicao realizada atravs das diversas portas fsicasque os computadores possuem. A seguir listaremos algumas portas fsicas e as suas respectivas fun-es.

    Ethernet: Utilizada para conectar um computador a uma rede local de computadores. Atravs dessaporta, um computador pode enviar e receber dados de outros computadores.

    Figura 1.2: Porta Ethernet

    Paralela: Essa porta foi criada conectar um computador a uma impressora. Hoje, utilizada tam-bm para conectar computadores a scanners, cmeras de vdeo, entre outros dispositivos.

    Figura 1.3: Porta Paralela

    PS/2: Teclados e mouses antigos so conectados aos computadores atravs dessa porta.

    Figura 1.4: Porta PS/2

    USB: Atualmente, a porta mais utilizada. Diversos dispositivos so conectados aos computadoresatravs das portas USB. Por exemplo, teclados, mouses, impressoras, celulares, HDs externos,entre outros.

    Figura 1.5: Porta USB

    2 www.k19.com.br

  • 3 INTRODUO

    HDMI: Essa porta utilizada para transmisso digital de udio e vdeo.

    Figura 1.6: Porta HDMI

    Para resumir, podemos dizer que um computador uma mquina que executa comandos mate-mticos e armazena dados. Voc deve estar se perguntando, como os computadores conseguem re-alizar tarefas to sofisticadas se eles apenas executam comandos matemticos e armazenam dados?A resposta simples. Os computadores so programados por pessoas e essas pessoas conseguemcriar programas que realizam tarefas sofisticadas a partir dos recursos bsicos oferecidos pelos com-putadores. Da mesma forma que pessoas so capazes de produzir pinturas sofisticadas utilizandoapenas tinta, pincel e quadro.

    KB 0-

    X8

    POKE

    T 801

    MADE

    BY

    K19

    Analogia

    class Xpto{ private int xpto; private String lala;

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

    Figura 1.7: Analogia entre programar e pintar

    Formato Binrio

    Os computadores so capazes de receber, armazenar e enviar dados. Contudo, esses dados sodefinidos em um formato que no comum no dia a dia das pessoas. Eles so definidos em formatobinrio. 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 repre-sentao decimal e binria de alguns nmeros.

    www.facebook.com/k19treinamentos 3

  • INTRODUO 4

    Decimal Binrio0 01 12 103 114 1005 1016 1107 1118 10009 100110 1010

    Decimal Binrio11 101112 110013 110114 111015 111116 1000017 1000118 1001019 1001120 1010021 10101

    Decimal Binrio22 1011023 1011124 1100025 1100126 1101027 1101128 1110029 1110130 1111031 1111132 100000

    Tabela 1.1: Representao decimal e binria

    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 mapea-dos 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 dealguns caracteres de acordo com o padro ASCII.

    Caractere BinrioA 01000001B 01000010C 01000011D 01000100E 01000101F 01000110G 01000111H 01001000I 01001001J 01001010K 01001011

    Caractere BinrioL 01001100M 01001101N 01001110O 01001111P 01010000Q 01010001R 01010010S 01010011T 01010100U 01010101V 01010110

    Caractere BinrioW 01010111X 01011000Y 01011001Z 01011010a 01100001b 01100010c 01100011d 01100100e 01100101f 01100110g 01100111

    Tabela 1.2: Representao binria de caracteres seguindo o padro ASCII

    Como vimos, os nmeros e os caracteres de um texto so facilmente representados em formatobinrio. Contudo, os computadores tambm so capazes de manipular imagens, udio e vdeo. Paraesses tipos de dados, a transformao para formato binrio bem mais complicada. Pesquise porPNG, MP3 e AVI que so formatos binrios de imagens, udios e vdeos atravs dos seguinte endere-os:

    PNG - http://www.w3.org/TR/PNG/

    MP3 - http://en.wikipedia.org/wiki/MP3

    AVI - http://en.wikipedia.org/wiki/Audio_Video_Interleave

    Unidades

    4 www.k19.com.br

  • 5 INTRODUO

    importante ser capaz de mensurar a quantidade de dados que um computador pode armazenarou transmitir. Essa mensurao pode ser realizada com ajuda das unidades de medida. A unidadede medida bsica o Bit. Cada 0 ou 1 que um computador armazena ou transmite um Bit. Almdessa 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 definidos em formato bi-nrio. Considere o exemplo fictcio a seguir com algumas instrues para um determinado proces-sador.

    www.facebook.com/k19treinamentos 5

  • INTRODUO 6

    0 0 1 0 0 1 0 1 0 0 1 10 0 1 0 1 0 0 0 1 0 1 10 1 0 0 0 1 0 1 0 0 1 10 1 1 0 1 1 0 0 0 0 0 0

    GRAVA 19

    11

    REG-1

    REG-2

    REG-2 REG-3REG-1

    REG-3

    GRAVA

    SOMA

    EXIBE

    Figura 1.8: Instrues de processador

    A primeira instruo indica ao processador que o valor 19 deve ser armazenado no registrador1. A segunda instruo indica que o valor 11 deve ser armazenado no registrador 2. J a terceirainstruo determina a realizao da soma dos valores anteriormente armazenados nos registradores1 e 2 alm de indicar que o resultado seja armazenado no registrador 3. Por ltimo, a quarta instruodetermina 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 execu-tar. Consequentemente, as mesmas operaes podem ser definidas de formas diferentes em doisprocessadores distintos. Considere o exemplo fictcio a seguir com algumas instrues para doisprocessadores de tipos diferentes.

    0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 1REG-2 REG-1REG-3SOMA

    Arquitetura X

    Arquitetura Y 0 1 0 0 0 1 0 1 0 0 1 1REG-2 REG-3REG-1SOMA

    Figura 1.9: Instrues de processadores diferentes

    Observe que as duas instrues indicam aos processadores que o valor do registrador 1 deve sersomado ao valor do registrador 2 e o resultado deve ser armazenado no registrador 3. Contudo, assequncias binrias dessas instrues so diferentes porque os processadores so de arquiteturasdiferentes.

    As instrues que um processador pode executar so definidas pela arquitetura do seu processa-dor. As principais arquiteturas de processadores so:

    x86

    x86_64

    ARM

    6 www.k19.com.br

  • 7 INTRODUO

    O que um Programa?

    Os comandos que os processadores dos computadores oferecem so extremamente bsicos. Nor-malmente, so comandos para realizar operaes aritmticas como soma, subtrao, diviso e mul-tiplicao. Qualquer tarefa mais complexa deve ser resolvida atravs de uma sequncia desses co-mandos bsicos.

    Por exemplo, para calcular a mdia aritmtica dos nmeros 10, 15 e 20, devemos obter o valorda somatria desses nmeros atravs de operaes bsicas de soma. Depois, podemos utilizar umaoperao bsica de diviso para dividir o valor dessa somatria por 3 e assim obter o valor 15 que amdia dos nmeros.

    Uma sequncia de comandos bsicos de processador que resolve uma determinada tarefa re-cebe o nome de programa. Os programas so armazenados em arquivos comumente chamados deexecutveis.

    Na prtica, os programas so formados por instrues que dependem da arquitetura do proces-sador e do sistema operacional. Consequentemente, um mesmo programa pode no funcionar emsistemas operacionais diferentes ou em processadores de arquiteturas diferentes.

    Linguagem de Mquina

    Como vimos anteriormente, o formato dos comandos que um computador pode executar de-pende basicamente da arquitetura do seu processador. Como existem diversas arquiteturas diferen-tes, um mesmo comando pode funcionar em um computador e no funcionar em outro. O formatodos comandos que funcionam em um determinado processador define a linguagem de mquina oucdigo de mquina desse processador.

    Comandos definidos em linguagem de mquina so perfeitos para os computadores processa-rem. Por outro lado, eles so extremamente complexos para as pessoas entenderem. Podemos ve-rificar essa complexidade, observando o trecho de comandos em linguagem de mquina da figuraabaixo:

    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000100000000000000000000111000011111101110100000111000000000101101000000100111001101001000011011100000000001010011001100110100100001010101000110100001101001011100110010000001110000011100100110111101100111011100100110000101101101001000000110001101100001011011100110111001101111011101000010000001100010011001010010000001110010011

    Figura 1.10: Trecho do programa Chrome em binrio

    Linguagem de Programao

    Devido a complexidade, escrever um programa em linguagem de mquina invivel. Para tor-nar vivel o desenvolvimento de programas, existem as linguagens de programao que tentam seaproximar das linguagens humanas. Confira um trecho de cdigo escrito com a linguagem de pro-

    www.facebook.com/k19treinamentos 7

  • INTRODUO 8

    gramao Java:

    1 while (lineMeasurer.getPosition () < paragraphEnd) {2 TextLayout layout = lineMeasurer.nextLayout(formatWidth);3 drawPosY += layout.getAscent ();4 float drawPosX;56 if (layout.isLeftToRight ()) {7 drawPosX = 0;8 } else {9 drawPosX = formatWidth - layout.getAdvance ();10 }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 serlido do que um programa escrito em linguagem de mquina.

    Mais SobreA maioria das linguagens de programao so case sensitive. Isso significa que elasdiferenciam 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 mins-cula ou vice-versa.

    Compilador

    Vimos que os computadores so capazes de processar o cdigo escrito em linguagem de m-quina. 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 ape-nas comandos em linguagem de mquina, como eles podem executar cdigo escrito em linguagemde programao?

    Na verdade, os computadores no executam cdigo escrito em linguagem de programao. Essecdigo 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;}

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

    return 1;}

    PROCESSADORCDIGO FONTE NO EXECUTA

    CDIGO FONTE COMPILADOR CDIGO DE MQUINA PROCESSADOR EXECUTA

    Figura 1.11: Processo de compilao e execuo de um programa

    8 www.k19.com.br

  • 9 INTRODUO

    Mquinas Virtuais

    Como vimos anteriormente, o cdigo fonte de um programa deve ser compilado para que esseprograma possa ser executado por um computador. Alm disso, vimos que os compiladores geramexecutveis especficos para um determinado sistema operacional e uma determinada arquiteturade processador. Qual o impacto disso para quem desenvolve sistemas para mltiplas plataformas?

    A empresa que deseja ter uma aplicao disponvel para diversos sistemas operacionais (Win-dows, Linux, Mac OS X, etc) e arquiteturas de processadores (Intel, ARM, PowerPC, etc) dever de-senvolver e manter um cdigo fonte para cada plataforma (sistema operacional + arquitetura de pro-cessador). Consequentemente, os custos dessa empresa seriam altos.

    PROGRAMA 1 PLATAFORMA 1 EXECUTA

    EXECUTAPROGRAMA 2 PLATAFORMA 2

    NO EXECUTAPROGRAMA 2 PLATAFORMA 3

    Figura 1.12: Ilustrao mostrando que cada plataforma necessita de um executvel especfico.

    Para diminuir os custos e aumentar a produtividade, podemos utilizar mquinas virtuais. Emum ambiente que utiliza mquina virtual, quando o cdigo fonte compilado, ele traduzido paraum cdigo escrito na linguagem da mquina virtual. A linguagem da mquina virtual tambm podeser considerada uma linguagem de mquina. Na execuo, a mquina virtual traduz os comandosem linguagem de mquina virtual para comandos em linguagem de mquina correspondente pla-taforma utilizada.

    www.facebook.com/k19treinamentos 9

  • INTRODUO 10

    MQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTA

    MQUINA VIRTUAL 2 EXECUTAPROGRAMA PLATAFORMA 2

    MQUINA VIRTUAL 3 EXECUTAPLATAFORMA 3

    Figura 1.13: Ilustrao do funcionamento da mquina virtual.

    Tudo parece estar perfeito agora, porm, olhando atentamente a figura acima, percebemos queexiste a necessidade de uma mquina virtual para cada plataforma. Algum poderia dizer que, defato, no resolvemos o problema.

    A diferena que implementar a mquina virtual no tarefa dos programadores que desenvol-vem 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 c-digo 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 recur-sos como o gerenciamento de memria, otimizao do cdigo em tempo de execuo entre outros.

    Hello World em Java

    Vamos escrever o nosso primeiro programa para entendermos como funciona o processo de es-crita de cdigo fonte, compilao e execuo de um programa.

    ImportanteAntes de compilar e executar um programa escrito em Java, necessrioque voc tenha instalado e configurado em seu computador o JDK (Java De-

    velopment 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 Hel-loWorld.java.

    10 www.k19.com.br

  • 11 INTRODUO

    1 class HelloWorld {2 public static void main(String [] args) {3 System.out.println("Hello World");4 }5 }

    Cdigo Java 1.2: HelloWorld.java

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

    k19$ javac HelloWorld.java

    Terminal 1.1: Compilando o arquivo HelloWorld.java

    Esse comando compilar o arquivo HelloWorld.java. O programa javac o compilador do Java.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 Co-mando. Um arquivo chamado HelloWorld.class dever aparecer na listagem de arquivos. Esse ar-quivo contm o cdigo em linguagem de mquina virtual Java.

    k19$ lsHelloWorld.class HelloWorld.java

    Terminal 1.2: Listagem do diretrio

    Agora vamos executar o nosso programa atravs do comando java:

    k19$ java HelloWorldHello World

    Terminal 1.3: Executando o programa HelloWorld

    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.javak19$ lsHelloWorld.class HelloWorld.javak19$ java HelloWorldHello World

    Terminal 1.4: Compilao e execuo do programa HelloWorld

    Hello World em C#

    Agora, vamos utilizar outra linguagem de programao para criar o programa semelhante aovisto anteriormente.

    ImportantePara compilar um programa escrito em C# necessrio ter o .NET Framework instaladoem seu computador. As verses mais recentes do sistema operacional Windows j vm

    com o framework instalado.

    www.facebook.com/k19treinamentos 11

  • INTRODUO 12

    Se voc utiliza os sistemas operacionais Linux ou Mac OS X, pode compilar e executar programasem 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 Hello-World.cs.

    1 class HelloWorld2 {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 oarquivo HelloWorld.cs. Feito isso, digite o seguinte comando no Prompt de Comando:

    C:\Users\K19\Desktop\logica -de-programacao >csc HelloWorld.cs

    Terminal 1.5: Compilando o programa HelloWorld

    Esse comando compilar o arquivo HelloWorld.cs. O programa csc o compilador do C#. Apscompilarmos o arquivo HelloWorld.cs, o programa estar pronto para ser executado. Porm, antesde execut-lo, digite no Prompt de Comando o comando dir. Um arquivo chamado HelloWorld.exedever aparecer na listagem de arquivos. Esse arquivo o executvel gerado pelo compilador do C#.

    C:\Users\K19\Desktop\logica -de-programacao >dirO volume na unidade C no tem nome.O Nmero de Srie do Volume 40EF -8653

    Pasta de C:\Users\K19\Desktop\logica -de-programacao

    02/03/2013 21:07 .02/03/2013 21:07 ..02/03/2013 20:58 90 HelloWorld.cs02/03/2013 21:07 3.584 HelloWorld.exe

    2 arquivo(s) 3.674 bytes2 pasta(s) 22.508.589.056 bytes disponveis

    Terminal 1.6: Listagem do diretrio

    Agora vamos executar o nosso programa:

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

    Terminal 1.7: Executando o programa HelloWorld

    Seguindo os passos acima, voc ter um resultado semelhante ao mostrado abaixo:

    Microsoft Windows [verso 6.1.7600]Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados.

    C:\Users\K19 >cd Desktop\logica -de-programacao

    C:\Users\K19\Desktop\logica -de-programacao >csc HelloWorld.csMicrosoft (R) Visual C# Compiler verso 4.0.30319.17929para Microsoft (R) .NET Framework 4.5

    Copyright (C) Microsoft Corporation. Todos os direitos reservados.

    12 www.k19.com.br

  • 13 INTRODUO

    C:\Users\K19\Desktop\logica -de-programacao >dirO volume na unidade C no tem nome.O Nmero de Srie do Volume 40EF -8653

    Pasta de C:\Users\K19\Desktop\logica -de-programacao

    03/04/2013 16:50 .03/04/2013 16:50 ..02/04/2013 20:58 90 HelloWorld.cs03/04/2013 16:50 3.584 HelloWorld.exe

    2 arquivo(s) 3.674 bytes2 pasta(s) 22.362.529.792 bytes disponveis

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

    C:\Users\K19\Desktop\logica -de-programacao >

    Terminal 1.8: Compilao e execuo do programa HelloWorld

    Mtodo Main

    Como vimos anteriormente, um programa basicamente uma sequncia de instrues. As ins-trues de um programa escrito em Java devem ser definidas dentro do mtodo main.

    1 class Programa {2 public static void main(String [] args) {3 PRIMEIRA INSTRUO4 SEGUNDA INSTRUO5 TERCEIRA INSTRUO6 ...7 }8 }

    Cdigo Java 1.3: Mtodo main

    Podemos dizer que o ponto de partida de um programa em Java a primeira instruo domtodo main. As demais instrues so executas na mesma ordem que esto definidas no cdigo.Eventualmente, durante a execuo das instrues, algum erro pode ocorrer e interromper o fluxodo processamento.

    Analogamente, as instrues de um programa escrito em C# tambm devem ser definidas dentrodo mtodo Main. Contudo, a estrutura da linguagem Java e um pouco diferente da estrutura dalinguagem C#.

    1 class Programa2 {3 static void Main()4 {5 PRIMEIRA INSTRUO6 SEGUNDA INSTRUO7 TERCEIRA INSTRUO8 ...9 }10 }

    Cdigo C# 1.2: Mtodo Main

    Exerccios de Fixao Com Java

    www.facebook.com/k19treinamentos 13

  • INTRODUO 14

    1 Abra um terminal e crie uma pasta com o seu nome. Voc deve salvar os seus exerccios nessapasta.

    K19$ mkdir rafael

    K19$ cd rafael

    K19/rafael$

    Terminal 1.9: Criando a pasta de exerccios

    Mais SobreNos exerccios com Java, vamos assumir a utilizao de um sistema operacional da fa-mlia Unix. Em sistemas dessa famlia, o comando mkdir (make directory) utili-

    zado para criar pastas no terminal, o comando cd (change directory) utilizado para trocara pasta atual do terminal e o comando ls (list) utilizado para listar os arquivos e diretrios dapasta atual do terminal.

    Se voc estiver utilizando o sistema operacional Windows, os comandos correspondentes aomkdir e ls so md e dir respectivamente. O comando cd possui a mesma funo em ambi-ente Unix ou Windows.

    C:\Users\K19 > md rafael

    C:\ Users\K19 > cd rafael

    C:\ Users\K19\rafael >

    Terminal 1.10: Criando a pasta de exerccios

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao1.zip

    2 Dentro da sua pasta de exerccios, crie uma pasta para os arquivos desenvolvidos nesse captulochamada introducao.

    K19/rafael$ mkdir introducao

    K19/rafael$ cd introducao

    K19/rafael/introducao$

    Terminal 1.11: Criando a pasta dos exerccios desse captulo no Linux

    C:\Users\K19\rafael > md introducao

    C:\ Users\K19\rafael > cd introducao

    C:\ Users\K19\rafael\introducao >

    Terminal 1.12: Criando a pasta dos exerccios desse captulo no Windows

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao2.zip

    14 www.k19.com.br

  • 15 INTRODUO

    3 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/k01-introducao-fixacao3.zip

    4 Atravs do terminal, entre na pasta introducao; compile o arquivo HelloWorld.java; execute oprograma.

    K19/rafael/introducao$ lsHelloWorld.java

    K19/rafael/introducao$ javac HelloWorld.java

    K19/rafael/introducao$ lsHelloWorld.class HelloWorld.java

    K19/rafael/introducao$ java HelloWorldHello World

    Terminal 1.13: Compilando e Executando

    Exibindo mensagens

    Geralmente, as linguagens de programao possuem comandos para exibir mensagens para osusurios. Veja a seguir, a instruo da linguagem Java que permite exibir mensagens.

    1 System.out.println("MENSAGEM");

    Agora, na linguagem C#, o comando para exibir mensagens :

    1 System.Console.WriteLine("MENSAGEM");

    Podemos utilizar as chamadas sequncias de escape para indicar quebras de linhas ou tabula-es nas mensagens. Uma quebra de linha indicada com a sequncia de escape \n. Uma tabula-o 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 linhano final da mensagem exibida. Para exibir mensagens sem quebra de linha, podemos utilizar oscomandos System.out.print e System.Console.Write nas linguagens Java e C# respectivamente.

    www.facebook.com/k19treinamentos 15

  • INTRODUO 16

    1 System.out.print("MENSAGEM SEM QUEBRA DE LINHA");

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

    Comentrios

    Podemos acrescentar comentrios no cdigo fonte. Geralmente, eles so utilizados para explicara 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 linha3 System.out.println("Rafael Cosentino");

    1 System.Console.WriteLine("K19");2 // comentrio de linha3 System.Console.WriteLine("Rafael Cosentino");

    Em Java e C#, tambm possvel comentar um bloco com os marcadores /* e */.

    1 System.out.println("K19");2 /* comentrio de bloco3 todo esse trecho4 est comentado */5 System.out.println("Rafael Cosentino");

    1 System.Console.WriteLine("K19");2 /* comentrio de bloco3 todo esse trecho4 est comentado */5 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 organi-zao padro do cdigo fonte nas linguagens Java e C#.

    1 class Programa {2 public static void main(String [] args) {3 // instrues4 }5 }

    Cdigo Java 1.10: Programa.java

    1 class Programa2 {3 static void Main()

    16 www.k19.com.br

  • 17 INTRODUO

    4 {5 // instrues6 }7 }

    Cdigo C# 1.8: Programa.cs

    Para destacar a hierarquia dos blocos, o contedo de cada bloco deve ser indentado com tabu-laes ou espaos. Um cdigo corretamente indentado mais fcil de ler. Consequentemente, amanuteno das aplicaes torna-se mais simples.

    Engenharia Reversa (Contedo Extra)

    Provavelmente, voc j desmontou um brinquedo ou algum aparelho eletrnico para tentar des-cobrir como ele funciona. Ao fazer isso, mesmo sem saber, voc praticou engenharia reversa.

    Muitas empresas praticam engenharia reversa para entender o funcionamento dos produtos dosconcorrentes. Pases tambm utilizam esse tipo de abordagem para avaliar a capacidade militar dosoutros pases.

    A engenharia reversa tambm aplicada na rea de software. As instrues do cdigo de m-quina de um programa podem ser traduzidas para alguma linguagem de programao atravs deprogramas especiais que so chamados de decompiladores.

    Normalmente, o cdigo em linguagem de programao gerado a partir da decompilao do c-digo de mquina de um programa no fcil de entender. Geralmente, possvel, apesar de nor-malmente ser muito difcil, modificar o funcionamento de um programa para qualquer que seja opropsito utilizando a abordagem da engenharia reversa.

    Ofuscadores (Contedo Extra)

    Para dificultar o processo de engenharia reversa, podemos utilizar ferramentas que modificam ocdigo fonte ou o cdigo compilado com o intuito de prejudicar o processo de decompilao. Essasferramentas so chamadas de Ofuscadores.

    Na maior parte dos casos, a utilizao de ofuscadores torna invivel ou muito custosa a aplicaode engenharia reversa com intuito de copiar ou piratear um software.

    Exerccios de Fixao Com Java

    5 Crie um arquivo na pasta introducao chamado Triangulo.java com o seguinte contedo.

    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

  • INTRODUO 18

    7 System.out.println("*****");8 }9 }

    Cdigo Java 1.11: Triangulo.java

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao5.zip

    6 Atravs do terminal, entre na pasta introducao; compile o arquivo Triangulo.java; execute oprograma.

    K19/rafael/introducao$ javac Triangulo.java

    K19/rafael/introducao$ java Triangulo***************

    Terminal 1.14: Compilando e Executando

    7 Crie um arquivo na pasta introducao chamado TrianguloComBarraN.java com o seguinte con-tedo.

    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/k01-introducao-fixacao7.zip

    8 Atravs do terminal, entre na pasta introducao; compile o arquivo TrianguloComBarraN.java;execute o programa.

    K19/rafael/introducao$ javac TrianguloComBarraN.java

    K19/rafael/introducao$ java TrianguloComBarraN***************

    Terminal 1.15: Compilando e Executando

    Erro: No Fechar os Blocos

    Um erro de compilao comum em Java ou C# esquecer de fechar os blocos com chave. Ob-serve, nos exemplos a seguir, esse erro ocorrendo.

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

    18 www.k19.com.br

  • 19 INTRODUO

    3 // instrues4 }

    Cdigo Java 1.13: Programa.java

    1 class Programa {2 public static void main(String [] args) {3 // instrues

    Cdigo Java 1.14: Programa.java

    1 class Programa2 {3 static void Main()4 {5 // instrues6 }

    Cdigo C# 1.9: Programa.cs

    1 class Programa2 {3 static void Main()4 {5 // instrues

    Cdigo C# 1.10: Programa.cs

    Veja a mensagem que o compilador do Java exibe quando um bloco no fechado corretamente.

    Programa.java :2: error: reached end of file while parsingpublic static void main(String [] args) {

    ^1 error

    Terminal 1.16: Erro de compilao

    Analogamente, veja a mensagem que o compilador do C# exibe quando um bloco no fechadocorretamente.

    Microsoft (R) Visual C# Compiler version 4.0.30319.17929for Microsoft (R) .NET Framework 4.5Copyright (C) Microsoft Corporation. All rights reserved.

    Programa.cs(4,3): error CS1513: } expectedPrograma.cs(4,3): error CS1513: } expected

    Terminal 1.17: Erro de compilao

    Erro: Trocar Maisculas e Minsculas

    Um erro de compilao comum em Java ou C# utilizar letras maisculas onde deveriam serutilizadas letras minsculas ou vice-versa. Nos exemplos a seguir, o identificador System foi escritocom s, porm o correto com S.

    1 class HelloWorld {2 public static void main(String [] args) {3 system.out.println("Hello World");4 }

    www.facebook.com/k19treinamentos 19

  • INTRODUO 20

    5 }

    Cdigo Java 1.15: HelloWorld.java

    1 class HelloWorld2 {3 static void Main()4 {5 system.Console.WriteLine("Hello World");6 }7 }

    Cdigo C# 1.11: HelloWorld.cs

    Veja as mensagens de erro do compilador do Java e do C# respectivamente.

    HelloWorld.java :3: error: package system does not existsystem.out.println ("Hello World ");

    ^1 error

    Terminal 1.18: Erro de Compilao

    Microsoft (R) Visual C# Compiler version 4.0.30319.17929for Microsoft (R) .NET Framework 4.5Copyright (C) Microsoft Corporation. All rights reserved.

    HelloWorld.cs(5,3): error CS0103: The name system does not exist in the current context

    Terminal 1.19: Erro de Compilao

    Erro: Esquecer o Ponto e Vrgula

    Para encerrar uma instruo, devemos utilizar o caractere ;. No inserir esse caractere no finaldas instrues gera erro de compilao. Veja, nos dois exemplos abaixo, esse erro ocorrendo.

    1 class HelloWorld {2 public static void main(String [] args) {3 System.out.println("Hello World")4 }5 }

    Cdigo Java 1.16: HelloWorld.java

    1 class HelloWorld2 {3 static void Main()4 {5 System.Console.WriteLine("Hello World")6 }7 }

    Cdigo C# 1.12: HelloWorld.cs

    Veja as mensagens de erro do compilador do Java e do C# respectivamente.

    HelloWorld.java :3: error: ; expectedSystem.out.println ("Hello World")

    ^1 error

    20 www.k19.com.br

  • 21 INTRODUO

    Terminal 1.20: Erro de Compilao

    Microsoft (R) Visual C# Compiler version 4.0.30319.17929for Microsoft (R) .NET Framework 4.5Copyright (C) Microsoft Corporation. All rights reserved.

    HelloWorld.cs(5 ,42): error CS1002: ; expected

    Terminal 1.21: Erro de Compilao

    Erro: Esquecer o Main

    Todo programa deve ter um ponto de partida. Em Java ou C#, todo programa precisa do mtodomain. Nessas duas linguagens, se voc esquecer de definir o mtodo main obter um erro. Em Java,o erro ser de execuo. J em C#, o erro ser de compilao. Veja o exemplo a seguir.

    1 class HelloWorld {2 public static void Main(String [] args) {3 System.out.println("Hello World");4 }5 }

    Cdigo Java 1.17: HelloWorld.java

    Observe que no cdigo Java acima, o mtodo main foi definido com letra maiscula. Contudo,no Java, o correto com minscula. Ao compilar o cdigo, nenhum erro ocorre. Mas, ao executar, oseguinte erro exibido.

    K19/rafael$ javac HelloWorld.javaK19/rafael$ java HelloWorldError: Main method not found in class HelloWorld , please define the main method as:

    public static void main(String [] args)

    Terminal 1.22: Erro de Execuo

    Agora, considere o exemplo a seguir em C#.

    1 class HelloWorld2 {3 static void main()4 {5 System.Console.WriteLine("Hello World");6 }7 }

    Cdigo C# 1.13: HelloWorld.cs

    Nesse caso, o mtodo main foi definido com letra minscula. Contudo, no C#, o correto commaiscula. Ao compilar o cdigo, um erro semelhante ao exibido abaixo ocorrer.

    Microsoft (R) Visual C# Compiler version 4.0.30319.17929for Microsoft (R) .NET Framework 4.5Copyright (C) Microsoft Corporation. All rights reserved.

    error CS5001: Program c:\Users\cosen\Desktop\Rafael\HelloWorld.exe doesnot contain a static Main method suitable for an entry point

    Terminal 1.23: Erro de Compilao

    www.facebook.com/k19treinamentos 21

  • INTRODUO 22

    Exerccios de Fixao Com C#

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

    1 class HelloWorld2 {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/k01-introducao-fixacao9.zip

    10 Atravs do terminal, entre na pasta introducao; compile o arquivo HelloWorld.cs; execute oprograma.

    C:\Users\K19\rafael\introducao > csc HelloWorld.cs

    C:\Users\K19\rafael\introducao > HelloWorld.exeHello World

    Terminal 1.24: Compilando e Executando

    11 Crie um arquivo na pasta introducao chamado Triangulo.cs com o seguinte contedo.

    1 class Triangulo2 {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("*****");10 }11 }

    Cdigo C# 1.15: Triangulo.cs

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao11.zip

    12 Atravs do terminal, entre na pasta introducao; compile o arquivo Triangulo.cs; execute o pro-grama.

    C:\Users\K19\rafael\introducao > csc Triangulo.cs

    C:\Users\K19\rafael\introducao > Triangulo.exe***************

    22 www.k19.com.br

  • 23 INTRODUO

    Terminal 1.25: Compilando e Executando

    13 Crie um arquivo na pasta introducao chamado TrianguloComBarraN.cs com o seguinte con-tedo.

    1 class TrianguloComBarraN2 {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/k01-introducao-fixacao13.zip

    14 Atravs do terminal, entre na pasta introducao; compile o arquivo TrianguloComBarraN.cs;execute o programa.

    C:\Users\K19\rafael\introducao > csc TrianguloComBarraN.cs

    C:\Users\K19\rafael\introducao > TrianguloComBarraN.exe***************

    Terminal 1.26: Compilando e Executando

    Exerccios Complementares

    1 Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.

    Hello World 1Hello World 2

    2 Utilize a linguagem C# para implementar um programa que mostre a seguinte sada.

    Hello World 1Hello World 2

    3 Utilize a linguagem Java para implementar um programa que mostre a sua frase preferida.

    www.facebook.com/k19treinamentos 23

  • INTRODUO 24

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

    5 Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.

    # # # ###### # ## # ## # # # # #### # ####### # # ## # # # ## # ##### #####

    6 Utilize a linguagem C# para implementar um programa que mostre a seguinte sada.

    # # # ###### # ## # ## # # # # #### # ####### # # ## # # # ## # ##### #####

    Desafios

    1 Crie um programa em Java ou C# para exibir o seu nome de forma semelhante ao mostradoabaixo.

    ______ __ _ _____ _ _| ___ \ / _| | | / __ \ | | (_)| |_/ /__ _| |_ __ _ ___| | | / \/ ___ ___ ___ _ __ | |_ _ _ __ ___| // _ | _/ _ |/ _ \ | | | / _ \/ __|/ _ \ _ \| __| | _ \ / _ \| |\ \ (_| | || (_| | __/ | | \__/\ (_) \__ \ __/ | | | |_| | | | | (_) |\_| \_\__,_|_| \__,_|\___|_| \____/\___/|___/\___|_| |_|\__|_|_| |_|\___/

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

    Resumo do Captulo

    1 Os principais elementos de um computador so: CPU, memria RAM e disco rgido.

    2 A CPU o responsvel por executar as instrues dos programas.

    3 Os dados dos programas abertos no computador so armazenados na memria RAM.

    4 Os arquivos dos usurios e dados dos programas instalados no computador so armazenadosno disco rgido.

    24 www.k19.com.br

  • 25 INTRODUO

    5 Os dados armazenados na memria RAM so perdidos se o computador for desligado.

    6 Os dados armazenados no disco rgido no so perdidos se o computador for desligado.

    7 Os computadores se comunicam com outros computadores ou com dispositivos perifricosatravs das suas portas fsicas.

    8 Os dados manipulados por um computador so definidos em formato binrio.

    9 As principais unidades de medida para dados binrios so: Bit, Byte(B), Quilobyte(kB), Me-gabyte(MB), Gigabyte(GB) e Terabyte(TB).

    10 Os comandos que um processador pode executar so definidos pela sua arquitetura.

    11 Processadores de arquiteturas diferentes entendem comandos diferentes.

    12 Um programa uma sequncia de instrues que resolve uma determinada tarefa.

    13 As linguagens de programao so mais fceis para pessoas entenderem do que as linguagensde mquina.

    14 Os programas so definidos em linguagem de programao.

    15 As principais linguagens de programao so case sensitive.

    16 Os compiladores traduzem o cdigo fonte de um programa para cdigo de mquina.

    17 As mquinas virtuais permitem a criao de programas portveis.

    18 Todo programa necessita de um ponto de partida. O ponto de partida dos programas escritosem Java ou C# a primeira instruo do mtodo main.

    19 No cdigo fonte de um programa em Java ou C#, comentrios so inseridos com os marcadores//, /* e */.

    20 A indentao melhora a legibilidade do cdigo fonte.

    www.facebook.com/k19treinamentos 25

  • INTRODUO 26

    21 Cdigo escrito em linguagem Java deve ser armazenado em arquivos .java. Cdigo escrito emlinguagem C# deve ser armazenado em arquivos .cs

    22 Os comandos System.out.println e System.Console.WriteLine so utilizados para exibir men-sagens com quebra de linha nas linguagens Java e C# respectivamente.

    23 Os comandos System.out.print e System.Console.Write so utilizados para exibir mensagenssem quebra de linha nas linguagens Java e C# respectivamente.

    Prova

    1 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 dadosarmazenados nos registradores do processador.

    d) Geralmente, o espao de armazenamento da memria RAM menor do que o espao de ar-mazenamento do disco rgido.

    e) A memria RAM a principal responsvel pela execuo das instrues de um programa.

    2 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 osdispositivos perifricos.

    d) Atualmente, diversos dispositivos podem ser conectados aos computadores atravs das portasUSB.

    e) Os mouses atuais so conectados aos computadores atravs das portas HDMI.

    3 Qual a representao binria do nmero 19?

    a) 00019

    b) 10011

    26 www.k19.com.br

  • 27 INTRODUO

    c) 10101

    d) 11001

    e) 01101

    4 Quantos Bits ocupa um arquivo de 19 kB?

    a) 19000

    b) 19

    c) 8192

    d) 1048576

    e) 155648

    5 Qual alternativa est errada?

    a) x86 e x86_64 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 definidas em binrio.

    e) Processadores executam cdigo em linguagem de mquina.

    6 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.

    7 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

  • INTRODUO 28

    d) Armazenar os dados do computador.

    e) Traduzir cdigo fonte para cdigo de mquina.

    8 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 especficos para um sistema operacional.

    e) Os programas desenvolvidos com essas linguagens consomem menos memria.

    9 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 INTRODUO

    d) static void Main().

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

    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

  • INTRODUO 30

    d) .

    e) % e #.

    Minha Pontuao Pontuao Mnima: 12 Pontuao Mxima: 15

    30 www.k19.com.br

  • ALGORITMOS

    CA

    P

    TU

    LO

    2O que um Algoritmo?

    Um algoritmo uma sequncia de instrues que resolve uma determinada tarefa. Essas instru-es podem ser executadas por um computador ou at mesmo por um ser humano. Um algoritmopode ser comparado a uma receita de bolo, onde cada passo da preparao do bolo corresponde auma instruo do algoritmo.

    1. ---------2. ---------3. ---------

    Figura 2.1: Preparao de um bolo seguindo os passos de uma receita (algoritmo)

    Normalmente, desenvolver algoritmos eficientes no uma tarefa simples. No meio acadmico,diversas tcnicas para o desenvolvimento de algoritmos mais eficientes so estudadas pela Cinciada Computao.

    Como um algoritmo pode ser representado?

    Ns podemos representar um algoritmo da maneira que acharmos melhor, desde que tal repre-sentao seja bem estruturada e organizada. Porm, as representaes mais utilizadas so a de Flu-xograma e de Pseudocdigo.

    Fluxograma

    O fluxograma um dos mtodos mais utilizados para se representar um algoritmo. Trata-se deuma espcie de diagrama e utilizado para documentar processos (simples ou complexos). Tal tipode diagrama ajuda o leitor a visualizar um processo, compreend-lo mais facilmente e encontrarfalhas ou problemas de eficincia.

    www.facebook.com/k19treinamentos 31

  • ALGORITMOS 32

    PROCESSO

    DECISO

    LEITURA

    ESCRITA

    CONECTOR

    TERMINAL

    SETAS DE FLUXO

    Figura 2.2: Smbolos utilizados em um fluxograma

    Vamos supor que seja necessrio criar um algoritmo para sacar uma determinada quantia dedinheiro de um caixa eletrnico de um banco. Como ficaria o fluxograma desse algoritmo?

    INCIO

    SALDOSUFICIENTE?

    MENSAGEM,SALDO

    FIM

    SIM

    NO

    VALOR DO SAQUE

    ACESSAR ATELA DE SAQUE

    SALDOINSUFICIENTE

    SALDO - VALOR DOSAQUE

    Figura 2.3: Exemplo de fluxograma para a operao de saque em um caixa eletrnico de um banco

    32 www.k19.com.br

  • 33 ALGORITMOS

    Para entender o algoritmo que um fluxograma representa, necessrio conhecer o significado decada smbolo.

    Pseudocdigo

    Escrever um algoritmo em pseudocdigo outra forma muito utilizada por autores de livros quetratam de algoritmos, pois dessa forma o leitor no precisa ter o conhecimento prvio de nenhumalinguagem de programao. Nos pases cujo idioma principal o portugus, muitos se referem aopseudocdigo como portugol. Vamos ver como ficaria o exemplo anterior escrito em pseudocdigo:

    1 INICIO2 LER(ValorDoSaque)3 SE ValorDoSaque > 0 E ValorDoSaque

  • ALGORITMOS 34

    3. O pai no pode ficar sozinho com as filhas;

    4. O prisioneiro no pode ficar 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

  • VARIVEIS

    CA

    P

    TU

    LO

    3O que uma Varivel?

    Os dados manipulados por um programa so armazenados em variveis. Normalmente, umavarivel associada a uma posio da memria RAM. Nas variveis possvel armazenar dados devrios tipos: numricos, strings (texto), booleanos (verdadeiro ou falso), referncias, entre outros.

    Toda varivel possui um nome (um identificador). Os nomes das variveis so utilizados paramanipular os dados contidos nelas. Como, normalmente, as variveis so associadas posies damemria RAM, os identificadores das variveis funcionam como nomes simblicos dos endereosda memria RAM.

    numeroDaConta = 4823

    numeroDaConta

    MEMRIA RAM

    numeroDaConta

    4823

    MEMRIA RAM

    Figura 3.1: Processo de atribuio do valor numrico 4823 varivel numeroDaConta.

    Declarando variveis em Java ou C#

    Para criar uma varivel em Java ou C#, necessrio declar-la. Nessas duas linguagens de pro-gramao, para declarar uma varivel necessrio informar o seu tipo e o seu nome (identificador).

    1 int numeroDaConta;2 double saldo;3 boolean contaAtiva;

    Cdigo Java 3.1: Declarao de variveis em Java.

    1 int numeroDaConta;2 double saldo;3 bool contaAtiva;

    Cdigo C# 3.1: Declarao de variveis em C#.

    Mais SobreEm Java ou C#, devemos informar, no cdigo fonte, o tipo de dado que uma varivelpoder armazenar. Por isso, essas duas linguagens so estaticamente tipadas, ou

    seja, os tipos das variveis devem ser definidos 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 umerro de compilao.

    1 int numeroDaConta;2 numeroDaConta = 3466;34 boolean contaAtiva = true;

    Cdigo Java 3.2: Declarao e inicializao de variveis em Java.

    1 int numeroDaConta;2 numeroDaConta = 3466;34 bool contaAtiva = true;

    Cdigo C# 3.2: Declarao e inicializao de variveis em C#.

    Como podemos observar, a inicializao das variveis feita atravs do operador =. Note tam-bm que podemos, em uma nica linha, declarar e inicializar uma varivel.

    Pare para pensar...O que aconteceria se o compilador Java ou C# permitisse utilizar uma varivel no ini-cializada?

    Um programador C (no C#), responderia essa pergunta facilmente, pois em C possvel utili-zar uma varivel sem inicializ-la. Quando uma varivel declarada, um espao na memriaram do computador reservado. Esse espao pode ter sido utilizado, anteriormente, por outroprograma e pode conter dados no mais utilizados. Dessa forma, se uma varivel no iniciali-zada for utilizada, o valor que estava no espao de memria correspondente a essa varivel serutilizado.

    Muitos programadores C esquecem de inicializar suas variveis com os valores adequados. Issoprovoca muitos erros de lgica. Em Java e C#, esse problema no existe pois as variveis devemsempre ser inicializadas antes de serem utilizadas.

    Tipos de Bsicos

    As linguagens Java e C# possuem tipos bsicos de variveis. Esses tipos so os mais utilizados eservem como base para a criao de outros tipos. A seguir, veja os tipos bsicos da linguagem Java eda linguagem C#.

    Tipo Descrio Tamanho (peso)byte Valor inteiro entre -128 e 127 (inclusivo) 1 byteshort Valor inteiro entre -32.768 e 32.767 (inclusivo) 2 bytes

    intValor inteiro entre -2.147.483.648 e 2.147.483.647 (inclu-sivo)

    4 bytes

    longValor inteiro entre -9.223.372.036.854.775.808 e9.223.372.036.854.775.807 (inclusivo)

    8 bytes

    36 www.k19.com.br

  • 37 VARIVEIS

    Tipo Descrio Tamanho (peso)

    floatValor com ponto flutuante entre 1,401298464324817071045 e 3,40282346638528860 1038 (positivo ou nega-tivo)

    4 bytes

    doubleValor com ponto flutuante entre 4,9406564584124654410324 e 1,7976931348623157010308 (positivo ou nega-tivo)

    8 bytes

    boolean true ou false 1 bit

    charUm nico caractere Unicode de 16 bits. Valor inteiro epositivo entre 0 (ou \u0000) e 65.535 (ou \uffff)

    2 bytes

    Tabela 3.1: Tipos de dados bsicos em Java.

    Tipo Descrio Tamanho (peso)sbyte Valor inteiro entre -128 e 127 (inclusivo) 1 bytebyte Valor inteiro entre 0 e 255 (inclusivo) 1 byteshort Valor inteiro entre -32.768 e 32.767 (inclusivo) 2 bytes

    ushort Valor inteiro entre 0 e 65.535 (inclusivo) 2 bytes

    intValor inteiro entre -2.147.483.648 e 2.147.483.647 (inclu-sivo)

    4 bytes

    uint Valor inteiro entre 0 e 4.294.967.295 (inclusivo) 4 bytes

    longValor inteiro entre -9.223.372.036.854.775.808 e9.223.372.036.854.775.807 (inclusivo)

    8 bytes

    ulongValor inteiro entre 0 e 18.446.744.073.709.551.615 (inclu-sivo)

    8 bytes

    floatValor com ponto flutuante entre 1,401298464324817071045 e 3,40282346638528860 1038 (positivo ou nega-tivo)

    4 bytes

    doubleValor com ponto flutuante entre 4,9406564584124654410324 e 1,7976931348623157010308 (positivo ou nega-tivo)

    8 bytes

    decimalValor com ponto flutuante entre 1,01028 e 7,91028(positivo ou negativo)

    16 bytes

    bool true ou false 1 bit

    charUm nico caractere Unicode de 16 bits. Valor inteiro epositivo entre 0 (ou \u0000) e 65.535 (ou \uffff)

    2 bytes

    Tabela 3.2: Tipos de dados bsicos em C#.

    String

    Tanto na linguagem Java quanto na linguagem C#, o tipo string um dos mais importantes emais 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 definido dentrode aspas duplas.

    www.facebook.com/k19treinamentos 37

  • VARIVEIS 38

    1 String texto = "K19 Treinamentos";

    Cdigo Java 3.3: Tipo String em Java

    1 string texto = "K19 Treinamentos";

    Cdigo C# 3.3: Tipo string em C#

    Os caracteres que podem ser utilizados para formar o contedo de uma string so definidos pelopadro Unicode(http://www.unicode.org/). As plataformas Java e .NET utilizam o mapeamentoUTF-16 do Unicode.

    O espao utilizado por uma string depende da quantidade de caracteres que ela possui. Cadacaractere ocupa 16 Bits. Portanto, a string K19 Treinamentos que possui 16 caracteres (o espaotambm deve ser contabilizado) ocupa 256 Bits.

    Data e Hora (Contedo Extra)

    As linguagens Java e C# possuem tipos especficos para armazenar data e hora. Em Java, muitocomum, utilizarmos o tipo Calendar.

    1 java.util.Calendar exatamenteAgora = java.util.Calendar.getInstance ();

    Cdigo Java 3.4: Data e Hora Atuais - Calendar

    No cdigo acima, a data e hora atuais do computador so armazenadas na varivel exatamente-Agora. Tambm podemos definir data e hora especficas.

    java.util.Calendar c = new java.util.GregorianCalendar( 1982 , 11 , 12 , 10 , 5 , 30 )

    Ano

    Dia (1 ~ 31)

    Minuto (0 ~ 59)

    Ms (0 ~ 11)

    Hora (0 ~ 23)

    Segundo (0 ~ 59)

    Figura 3.2: Data e Hora Especficas - Calendar

    No exemplo acima, o primeiro parmetro define o ano; o segundo o ms; o terceiro o dia; oquarto a hora; o quinto os minutos; e o sexto os segundos. O ms definido da seguinte forma: 0 janeiro, 1 fevereiro, 2 maro e assim por diante. Dessa forma, a data 12 de dezembro de 1982 ehora 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 chamadaexatamenteAgora. Tambm podemos definir data e hora especficas. Veja os exemplos a seguir.

    System.DateTime dt = new System.DateTime( 1982 , 11 , 12 , 10 , 5 , 30 )

    Ano

    Dia (1 ~ 31)

    Minuto (0 ~ 59)

    Ms (1 ~ 12)

    Hora (0 ~ 23)

    Segundo (0 ~ 59)

    Figura 3.3: Data e Hora Especficas - DateTime

    1 System.DateTime dt = new System.DateTime (1982, 12, 12, 10, 5, 30);

    Cdigo C# 3.5: Data e Hora Especficas - DateTime

    No exemplo acima, o primeiro parmetro define o ano; o segundo o ms; o terceiro o dia; oquarto a hora; o quinto os minutos; e o sexto os segundos. Dessa forma, a data 12 de dezembro de1982 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 podeser utilizado para os tipos bsicos numricos e booleanos apresentados anteriormente (lembrandoque o tipo char um tipo numrico).

    1 String nome = null;

    Cdigo Java 3.5: Inicializando uma string com null

    1 string nome = null;

    Cdigo C# 3.6: Inicializando uma string com null

    Booleanos

    Em Java ou C#, o valor verdadeiro representado pelo valor literal true e o valor falso pelovalor literal false.

    1 boolean a = true;23 boolean b = false;

    Cdigo Java 3.6: Utilizando valores literais booleanos em Java

    www.facebook.com/k19treinamentos 39

  • VARIVEIS 40

    1 bool a = true;23 bool b = false;

    Cdigo C# 3.7: Utilizando valores literais booleanos em C#

    Inteiros

    Em Java, nmeros inteiros podem ser definidos de quatro formas diferentes: binrio, octal, deci-mal 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 // 19 em binrio2 int a = 0b10011;34 // 19 em octal5 int b = 023;67 // 19 em decimal8 int c = 19;910 // 19 em hexadecimal11 int d = 0x13;

    Cdigo Java 3.7: binrio | octal | decimal | hexadecimal

    J em C#, esses nmeros podem ser definidos apenas em decimal ou hexadecimal.

    Se um nmero inteiro inicia com 0x ou 0X ele hexadecimal;

    Caso contrrio decimal.

    1 // 19 em decimal2 int c = 10;34 // 19 em hexadecimal5 int d = 0x13;

    Cdigo C# 3.8: decimal | hexadecimal

    Mais SobreComo vimos, variveis do tipo int no armazenam valores maiores do que2.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 queesse 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

    1 // erro de compilao2 long a = 2147483648;

    Cdigo Java 3.8: Erro de compilao

    Para resolver esse problema, devemos utilizar o sufixo L ou l.

    1 // valor literal inteiro do tipo long2 long a = 2147483648L;

    Cdigo Java 3.9: Utilizando o sufixo L em Java

    1 // valor literal inteiro do tipo long2 long b = 2147483648l;

    Cdigo Java 3.10: Utilizando o sufixo l em Java

    Reais

    Em Java ou C#, valores literais reais so definidos com o separador de casas decimais .(ponto).Veja alguns exemplos:

    1 double a = 19.19;23 double b = 0.19;45 double c = .19;

    Cdigo Java 3.11: Valores literais reais

    1 double a = 19.19;23 double b = 0.19;45 double c = .19;

    Cdigo C# 3.9: Valores literais reais

    Mais Sobre

    Em Java ou C#, por padro, independentemente da grandeza, os valores literais reaisso tratados como double. Por exemplo, considere o valor 19.09. Esse valor poderia ser tratadocomo float ou double. Contudo, por padro, ele ser tratado como double. Dessa forma, oscdigos a seguir geram erros de compilao.

    1 float a = 19.09;

    Cdigo Java 3.12: Erro de compilao

    1 float a = 19.09;

    Cdigo C# 3.10: Erro de compilao

    www.facebook.com/k19treinamentos 41

  • VARIVEIS 42

    Para resolver esse problema, devemos utilizar o sufixo F ou f. Ao utilizar um desses sufixos,indicamos ao compilador que o valor literal real deve ser tratado como float.

    1 float a = 19.09F;23 float b = 19.09f;

    Cdigo Java 3.13: Utilizando o sufixo F e f em Java

    1 float a = 19.09F;23 float b = 19.09f;

    Cdigo C# 3.11: Utilizando o sufixo F e f em C#

    Caracteres

    Em Java ou C#, caracteres literais so definidos 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 definido dentro de aspas simples.

    Strings literais

    Em Java ou C#, strings literais so definidas dentro de aspas duplas. Veja alguns exemplos.

    1 String a = "K19 Treinamentos";

    Cdigo Java 3.15: Strings literais

    1 string a = "K19 Treinamentos";

    Cdigo C# 3.13: Strings literais

    Determinados caracteres so especiais e no podem ser inseridos diretamente dentro das aspasduplas. Por exemplo, os cdigos a seguir geram um erro de compilao pois utilizam o caractereespecial \.

    1 String a = "C:\k19\rafael\cosentino";

    Cdigo Java 3.16: Erro de compilao

    1 string a = "C:\k19\rafael\cosentino";

    Cdigo C# 3.14: Erro de compilao

    42 www.k19.com.br

  • 43 VARIVEIS

    Para solucionar esses erros, devemos utilizar o caractere \ imediatamente antes dos caracteresespeciais.

    1 String a = "C:\\k19\\ rafael \\ cosentino";

    Cdigo Java 3.17: Tratando os caracteres especiais com \

    1 string a = "C:\\k19\\ rafael \\ cosentino";

    Cdigo C# 3.15: Tratando os caracteres especiais com \

    Em C#, podemos utilizar o caractere @ no incio das strings. Dessa forma, todos os caracteresespeciais 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. Es-ses nmeros podem ser gerados facilmente com cdigo Java ou C#. No exemplo a seguir, utilizamosa classe Math e o mtodo random() do Java para gerar nmeros aleatrios do tipo double maioresou 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. Porexemplo, para gerar nmeros maiores ou iguais a -50 e menores do que 50, basta realizar uma multi-plicao e uma subtrao.

    1 double numero = Math.random () * 100 - 50;

    Cdigo Java 3.19: Gerando nmeros aleatrios em Java

    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 mate-mticas. Por exemplo, para gerar nmeros maiores ou iguais a -25 e menores do que 50, basta realizaruma 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

    Exerccios de Fixao Com Java

    1 Abra um terminal; entre na pasta dos seus exerccios e crie uma pasta chamada variaveis paraos arquivos desenvolvidos nesse captulo.

    K19/rafael$ mkdir variaveis

    K19/rafael$ cd variaveis

    K19/rafael/variaveis$

    Terminal 3.1: Criando a pasta variaveis no Linux

    C:\Users\K19\rafael > md variaveis

    C:\ Users\K19\rafael > cd variaveis

    C:\ Users\K19\rafael\variaveis >

    Terminal 3.2: Criando a pasta variaveis no Windows

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao1.zip

    2 Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo intchamada idade. Essa varivel deve ser inicializada com o valor da sua idade. Por fim, exiba o valorda varivel.

    1 class TestaVariavel {2 public static void main(String [] args) {3 int idade;45 idade = 27;67 System.out.println(idade);8 }9 }

    Cdigo Java 3.20: TestaVariavel.java

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao2.zip

    3 Compile e execute a classe TestaVariavel.

    K19/rafael/variaveis$ javac TestaVariavel.java

    K19/rafael/variaveis$ java TestaVariavel27

    Terminal 3.3: Compilando e executando a classe TestaVariavel

    4 Na pasta variaveis, implemente um programa em Java que gere um nmero real aleatrio entre0 e 100. Esse nmero deve ser armazenado em uma varivel do tipo double chamada numeroAlea-torio. Por fim, exiba o valor da varivel.

    44 www.k19.com.br

  • 45 VARIVEIS

    1 class TestaNumeroAleatorio {2 public static void main(String [] args) {3 double numeroAleatorio;45 numeroAleatorio = Math.random () * 100;67 System.out.println(numeroAleatorio);8 }9 }

    Cdigo Java 3.21: TestaNumeroAleatorio.java

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao4.zip

    5 Compile e execute a classe TestaNumeroAleatorio.

    K19/rafael/variaveis$ javac TestaNumeroAleatorio.java

    K19/rafael/variaveis$ java TestaNumeroAleatorio19.775172204803429

    Terminal 3.4: Compilando e executando a classe TestaNumeroAleatorio

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

    1 class TestaString {2 public static void main(String [] args) {3 String nome;45 nome = "Rafael Cosentino";67 System.out.println(nome);8 }9 }

    Cdigo Java 3.22: TestaString.java

    Arquivo: https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao6.zip

    7 Compile e execute a classe TestaString.

    K19/rafael/variaveis$ javac TestaString.java

    K19/rafael/variaveis$ java TestaStringRafael Cosentino

    Terminal 3.5: Compilando e executando a classe TestaString

    Casting

    Considere um valor dentro do intervalo de valores do tipo int. Tanto no Java quanto no C#, essevalor pode ser armazenado em uma varivel do tipo long, pois todos os valores que esto no intervalodo 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 armaze-nado em uma varivel do tipo int possa ser copiado para uma varivel do tipo long. Veja o exemploa seguir.

    1 int a = 19;2 long b = a;

    Cdigo Java 3.23: Compatibilidade

    1 int a = 19;2 long b = a;

    Cdigo C# 3.19: Compatibilidade

    Agora, considere um valor dentro do intervalo de valores do tipo long. No podemos garantir queesse valor possa ser armazenado em uma varivel do tipo int porque o intervalo do tipo long maisabrangente do que o intervalo do tipo int. Por exemplo, o nmero 2147483648 est no intervalo dotipo 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 longseja copiado para uma varivel do tipo int. A tentativa de realizar esse tipo de cpia gera erro decompilao mesmo que o valor armazenado na varivel do tipo long seja compatvel com int. Veja oexemplo a seguir.

    1 long a = 19;2 int b = a;

    Cdigo Java 3.24: Erro de compilao - Incompatibilidade

    1 long a = 19;2 int b = a;

    Cdigo C# 3.20: Erro de compilao - Incompatibilidade

    Nesses casos, podemos aplicar uma operao de converso tambm chamada de operao decasting. Veja como essa operao aplicada.

    1 long a = 19;2 int b = (int)a;

    Cdigo Java 3.25: Converso - Casting

    1 long a = 19;2 int b = (int)a;

    Cdigo C# 3.21: Converso - Casting

    Operaes de casting podem gerar resultados bem indesejados. Considere que uma variveldo tipo long armazena o valor 2147483648. Se uma operao de casting for aplicada para copiaresse 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 = 2147483648L;2 int b = (int)a; // b = -2147483648

    Cdigo Java 3.26: Casting - Perdendo preciso

    46 www.k19.com.br

  • 47 VARIVEIS

    1 long a = 2147483648L;2 int b = (int)a; // b = -2147483648

    Cdigo C# 3.22: Casting - Perdendo preciso

    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 riscode perder preciso, os compiladores no exigem a operao de casting. Considere os exemplos aseguir.

    1 long a = 9223372036854775807L;2 float b = a; // b = 9223372000000000000

    Cdigo Java 3.27: No precisa de casting mas tem perda de preciso

    1 long a = 9223372036854775807L;;2 float b = a; // b = 9223372000000000000

    Cdigo C# 3.23: No precisa de casting mas tem perda de preciso

    Nos exemplos acima, a varivel do tipo long armazena o valor 922337203685