k19-k01-logica-de-programacao

344
TREINAMENTOS Lógica de Programação

description

k19-k01-logica-de-programacao

Transcript of k19-k01-logica-de-programacao

TREINAMENTOSLgica de ProgramaoLgica de Programao14 de junho de 2015As apostilas atualizadas esto disponveis em www.k19.com.brEsta apostila contm: 238 exerccios de xao. 82 exerccios complementares. 4 desaos. 61 questes de prova.iSumrio iiSobre a K19 1Seguro Treinamento 2Termo de Uso 3Cursos 4Preparao do ambiente 51 Introduo 11.1 O que um Computador? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Formato Binrio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Unidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4 Arquiteturas de Processadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 O que um Programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.7 Linguagem de Programao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.8 Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.9 Mquinas Virtuais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.10 Hello World em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.11 Hello World em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.12 Mtodo Main. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.13 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.14 Exibindo mensagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.15 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.16 Indentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.17 Engenharia Reversa (Contedo Extra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.24 Exerccios de Fixao Com C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.25 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.26 Desaos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.27 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.28 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Algoritmos 312.1 O que um Algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.2 Como um algoritmo pode ser representado? . . . . . . . . . . . . . . . . . . . . . . . . . 312.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.4 Desaos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Variveis 353.1 O que uma Varivel? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Declarando variveis em Java ou C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35ii www.k19.com.briii SUMRIO3.3 Tipos Bsicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.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 Desaos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.25 Resumo do Captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.26 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055 Controle de Fluxo 1115.1 Instrues de Deciso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111www.facebook.com/k19treinamentos iiiSUMRIO iv5.2 Instruo if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.3 Instruo else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145.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 Innitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1756 Array 1816.1 O que um Array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816.2 Como declarar e inicializar um array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1826.3 Inserindo valores em 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2047 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230A Problemas 235A.1 Encontrar o maior ou o menor elemento de um array. . . . . . . . . . . . . . . . . . . . 235iv www.k19.com.brv SUMRIOA.2 Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236A.3 Calcular a soma dos elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . 237A.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.10Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243A.11Gerar apostas da Mega-Sena. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244A.12Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247A.13Embaralhar os elementos de um array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248A.14Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249A.15Ordenar os elementos de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250A.16Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250A.17Inverter o posicionamento dos elementos de um array . . . . . . . . . . . . . . . . . . . 251A.18Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252A.19Nmeros em formato binrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253A.20Exerccios de Fixao Com Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254A.21Exerccios de Fixao Com C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255B Respostas 265www.facebook.com/k19treinamentos vSUMRIO vivi www.k19.com.br1 SUMRIOSobre a K19A 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.Oprincipal 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 1SUMRIO 2Seguro TreinamentoNa 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.br3 SUMRIOTermo de UsoTermo de UsoTodo 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 emcursos 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 3SUMRIO 4K01- Lgica de ProgramaoK11 - Orientao a Objetos em JavaK12 - Desenvolvimento Web com JSF2 e JPA2K21 - Persistncia com JPA2 e HibernateK22 - Desenvolvimento Web Avanado com JFS2, EJB3.1 e CDIK23 - Integrao de Sistemas com Webservices,JMS e EJBK31 - C# e Orientao a ObjetosK32 - Desenvolvimento Web com ASP.NET MVCTREINAMENTOSTREINAMENTOS TREINAMENTOSConhea os nossos cursoswww.k19.com.br/cursosK02 - Desenvolvimento Web com HTML, CSS e JavaScriptK03 - SQL e Modelo RelacionalK41 - Desenvolvimento Mobile com AndroidK51 - Design Patterns em JavaK52 - Desenvolvimento Web com Struts4 www.k19.com.br5 SUMRIOPreparao do ambientePara realizar os exerccios desta apostila, recomendamos que voc utilize um dos sistemas ope-racionais abaixo. Windows 7 (ou superior) Ubuntu 12.04 (ou superior)WindowsSe voc optar por utilizar o Windows, siga os tutoriais abaixo para preparar o seu ambiente. www.k19.com.br/artigos/como-instalar-o-jdk-7-no-windows-8 www.k19.com.br/artigos/como-instalar-o-notepad-plus-plusCaso opte por realizar os exerccios utilizando a linguagem de programao C#, siga os tutoriasabaixo. www.k19.com.br/artigos/como-instalar-o-visual-studio-express-2013-para-windows-desktop www.k19.com.br/artigos/o-compilador-c-sharp-e-a-variavel-de-ambiente-pathUbuntuSe voc optar por utilizar o Ubuntu, siga o tutorial abaixo para preparar o seu ambiente. www.k19.com.br/artigos/como-instalar-o-jdk-7-no-ubuntu-13-10www.facebook.com/k19treinamentos 5SUMRIO 66 www.k19.com.brINTRODUOCAPTULO1Oque umComputador?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 + UCRegistradoresCPUHDMemria RAMFigura 1.1: Principais elementos de um computadorCPU(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: OsregistradoresarmazenamosdadosqueestosendoprocessadospelaCPU.Oacesso ao contedo dos registradores extremamente rpido. Porm, eles no so capazesde armazenar uma grande quantidade de informao.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 1INTRODUO 2Disco Rgido: Os dados armazenados nos registradores e na memria RAMso descartados quandoo computador desligado. Ocontedo 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 memria RAM mas, em geral, o espao bem maior.Os computadores socapazes de se comunicar comdispositivos perifricos comoteclado, 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 umcomputador a uma rede local de computadores. Atravs dessaporta, um computador pode enviar e receber dados de outros computadores.Figura 1.2: Porta EthernetParalela: Essa porta foi criada para conectar um computador a uma impressora. Hoje, utilizadatambm para conectar computadores a scanners, cmeras de vdeo, entre outros dispositivos.Figura 1.3: Porta ParalelaPS/2: Teclados e mouses antigos so conectados aos computadores atravs dessa porta.Figura 1.4: Porta PS/2USB: 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 USB2 www.k19.com.br3 INTRODUOHDMI: Essa porta utilizada para transmisso digital de udio e vdeo.Figura 1.6: Porta HDMIPara resumir, podemos dizer que um computador uma mquina que executa comandos mate-mticos, armazena dados e comunica-se com outros dispositivos.KB 0-X8POKET 801MADE BY K19AnalogiaVoc deve estar se perguntando: como os computadores conseguemrealizar tarefas tososticadas se eles apenas executam comandos matemticos e armazenam dados? Aresposta simples. Da mesma forma que pintores so capazes de produzir pinturas sosticadasutilizando apenas tinta, pincel e quadro, programadores so capazes de criar programas sosti-cados a partir dos recursos bsicos oferecidos pelos computadores.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 pintarFormato BinrioOs computadores so capazes de receber, armazenar e enviar dados. Contudo, esses dados sodenidos emumformato que no comumno cotidiano das pessoas. As pessoas esto acostumadasa lidar com os nmeros em formato decimal. Os computadores, por outro lado, trabalham comnmeros em formato binrio. Veja a seguir, a representao decimal e binria de alguns nmeros.www.facebook.com/k19treinamentos 3INTRODUO 4Decimal Binrio0 01 12 103 114 1005 1016 1107 1118 10009 100110 1010Decimal Binrio11 101112 110013 110114 111015 111116 1000017 1000118 1001019 1001120 1010021 10101Decimal Binrio22 1011023 1011124 1100025 1100126 1101027 1101128 1110029 1110130 1111031 1111132 100000Tabela 1.1: Representao decimal e binriaOs 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 01001011Caractere BinrioL 01001100M 01001101N 01001110O 01001111P 01010000Q 01010001R 01010010S 01010011T 01010100U 01010101V 01010110Caractere BinrioW 01010111X 01011000Y 01011001Z 01011010a 01100001b 01100010c 01100011d 01100100e 01100101f 01100110g 01100111Tabela 1.2: Representao binria de caracteres seguindo o padro ASCIIComo 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_InterleaveResumidamente, para que umdado possa ser manipulado por umcomputador, ele deve ser con-4 www.k19.com.br5 INTRODUOvertidopara oformatobinriode acordocomalgumpadro.Unidades importante ser capaz de medir a quantidade de dados que um computador pode armazenarou transmitir. Essa mensurao pode ser realizada comajuda das unidades de medida. A unidade demedida bsica o bit. Cada 0 ou 1 que umcomputador armazena ou transmite umbit. Por padro,um byte corresponde a 8 bits. O smbolo utilizado para representar o byte a letra B. Em 2008, aComisso Eletrotcnica Internacional (International Electrotechnical Commission IEC) deniu asseguintes unidades de medida.Nome Smbolo Bytesbyte B 20kibibyte KiB 210mebibyte MiB 220gibibyte GiB 230tebibyte TiB 240pebibyte PiB 250exbibyte EiB 260zebibyte ZiB 270yobibyte YiB 280Tabela 1.3: Unidades de medida segundo o padro IEC 80000-13Arquiteturas de ProcessadoresOs comandos que os processadores dos computadores executam so denidos em formato bi-nrio. Considere o exemplo ctcio a seguir com algumas instrues para um determinado proces-sador.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 0GRAVA 1911REG-1REG-2REG-2 REG-3 REG-1REG-3GRAVASOMAEXIBEFigura 1.8: Instrues de processadorA 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 terceirawww.facebook.com/k19treinamentos 5INTRODUO 6instruo determina a realizao da soma dos valores anteriormente armazenados nos registradores1 e 2 almde 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 denidas de formas diferentes em doisprocessadores distintos. Considere o exemplo ctcio 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-1 REG-3 SOMAArquitetura XArquitetura Y0 1 0 0 0 1 0 1 0 0 1 1REG-2 REG-3 REG-1 SOMAFigura 1.9: Instrues de processadores diferentesObserve 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 umprocessador pode executar so denidas pela arquitetura do seu processa-dor. As principais arquiteturas de processadores so: x86 x86_64 ARMOque umPrograma?Os comandos que os processadores dos computadores oferecemsoextremamente 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 em6 www.k19.com.br7 INTRODUOsistemas operacionais diferentes ouemprocessadores de arquiteturas diferentes.Linguagemde MquinaComo 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 funcionamemumdeterminado processador dene a linguagemde mquina oucdigo de mquina desse processador.Comandos denidos em linguagem de mquina so perfeitos para os computadores processa-rem. Por outro lado, eles so extremamente complexos para as pessoas entenderem. Podemos ve-ricar essa complexidade, observando o trecho de comandos em linguagem de mquina da guraabaixo:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000100000000000000000000111000011111101110100000111000000000101101000000100111001101001000011011100000000001010011001100110100100001010101000110100001101001011100110010000001110000011100100110111101100111011100100110000101101101001000000110001101100001011011100110111001101111011101000010000001100010011001010010000001110010011Figura 1.10: Trecho do programa Chrome em binrioLinguagemde ProgramaoDevido 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. Conra um trecho de cdigo escrito com a linguagem de pro-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 JavaPor 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 signica que elasdiferenciam as letras maisculas das minsculas. Portanto, ao escrever o cdigo de umwww.facebook.com/k19treinamentos 7INTRODUO 8programa, devemos tomar cuidado para no trocar uma letra maiscula por uma letra mins-cula ou vice-versa.CompiladorVimos que os computadores so capazes de processar o cdigo escrito em linguagem de m-quina. Tambmvimos que invivel desenvolver umprograma emlinguagemde mquina. Por isso,existemas linguagens de programao. Da surge uma pergunta: se os computadores entendemape-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;}PROCESSADOR CDIGO FONTE NO EXECUTACDIGO FONTE COMPILADOR CDIGO DE MQUINA PROCESSADOR EXECUTAFigura 1.11: Processo de compilao e execuo de um programaMquinas VirtuaisComo 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 especcos 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 umcdigo fonte para cada plataforma (sistema operacional + arquitetura de pro-cessador). Consequentemente, os custos dessa empresa seriam altos.8 www.k19.com.br9 INTRODUOPROGRAMA 1 PLATAFORMA 1 EXECUTAEXECUTA PROGRAMA 2 PLATAFORMA 2NO EXECUTA PROGRAMA 2 PLATAFORMA 3Figura 1.12: Ilustrao mostrando que cada plataforma necessita de um executvel especco.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.MQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTAMQUINA VIRTUAL 2 EXECUTA PROGRAMA PLATAFORMA 2MQUINA VIRTUAL 3 EXECUTA PLATAFORMA 3Figura 1.13: Ilustrao do funcionamento da mquina virtual.Tudo parece estar perfeito agora, porm, olhando atentamente a gura acima, percebemos queexiste a necessidade de uma mquina virtual para cada plataforma. Algum poderia dizer que, defato, no resolvemos o problema.www.facebook.com/k19treinamentos 9INTRODUO 10A diferena que implementar a mquina virtual no tarefa dos programadores que desenvol-vemas aplicaes que sero executados nas mquinas virtuais. Aimplementao 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 emJavaVamos 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 congurado emseu computador o JDK (Java De-velopment Kit). Consulte o artigo da K19, http://www.k19.com.br/artigos/instalando-o-jdk-java-development-kit/.Dentrodeumeditordetexto, escrevaoseguintecdigoesalveoarquivocomonomeHel-loWorld.java.1 class HelloWorld {2 public static void main(String [] args) {3 System.out.println("Hello World");4 }5 }Cdigo Java 1.2: HelloWorld.javaEm 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.javaTerminal 1.1: Compilando o arquivo HelloWorld.javaEsse 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.javaTerminal 1.2: Listagem do diretrioAgora vamos executar o nosso programa atravs do comando java:10 www.k19.com.br11 INTRODUOk19$ java HelloWorldHello WorldTerminal 1.3: Executando o programa HelloWorldPara 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 WorldTerminal 1.4: Compilao e execuo do programa HelloWorldHello World emC#Agora, vamosutilizaroutralinguagemdeprogramaoparacriaroprogramasemelhanteaovisto anteriormente.ImportantePara compilar umprograma escrito emC# necessrio ter o .NET Framework instaladoem seu computador. As verses mais recentes do sistema operacional Windows j vmcom o framework instalado.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.csEmseguidaabraoPromptdeComandodoWindowseentrenapastaemquevocsalvouoarquivo HelloWorld.cs. Feito isso, digite o seguinte comando no Prompt de Comando:C:\Users\K19\Desktop\logica -de-programacao >csc HelloWorld.csTerminal 1.5: Compilando o programa HelloWorldEsse 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#.www.facebook.com/k19treinamentos 11INTRODUO 12C:\Users\K19\Desktop\logica -de-programacao >dirO volume na unidade C no tem nome.O Nmero de Srie do Volume 40EF -8653Pasta de C:\Users\K19\Desktop\logica -de-programacao02/03/2013 21:07 .02/03/2013 21:07 ..02/03/2013 20:58 90 HelloWorld.cs02/03/2013 21:07 3.584 HelloWorld.exe2 arquivo(s) 3.674 bytes2 pasta(s) 22.508.589.056 bytes disponveisTerminal 1.6: Listagem do diretrioAgora vamos executar o nosso programa:C:\Users\K19\Desktop\logica -de-programacao >HelloWorld.exeHello WorldTerminal 1.7: Executando o programa HelloWorldSeguindo 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-programacaoC:\Users\K19\Desktop\logica -de-programacao >csc HelloWorld.csMicrosoft (R) Visual C# Compiler verso 4.0.30319.17929para Microsoft (R) .NET Framework 4.5Copyright (C) Microsoft Corporation. Todos os direitos reservados.C:\Users\K19\Desktop\logica -de-programacao >dirO volume na unidade C no tem nome.O Nmero de Srie do Volume 40EF -8653Pasta de C:\Users\K19\Desktop\logica -de-programacao03/04/2013 16:50 .03/04/2013 16:50 ..02/04/2013 20:58 90 HelloWorld.cs03/04/2013 16:50 3.584 HelloWorld.exe2 arquivo(s) 3.674 bytes2 pasta(s) 22.362.529.792 bytes disponveisC:\Users\K19\Desktop\logica -de-programacao >HelloWorld.exeHello WorldC:\Users\K19\Desktop\logica -de-programacao >Terminal 1.8: Compilao e execuo do programa HelloWorldMtodo MainComo vimos anteriormente, um programa basicamente uma sequncia de instrues.As ins-trues 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 INSTRUO4 SEGUNDA INSTRUO5 TERCEIRA INSTRUO6 . . .7 }8 }12 www.k19.com.br13 INTRODUOCdigo Java 1.3: Mtodo mainPodemosdizerqueopontodepartidadeumprogramaemJavaaprimeirainstruodomtodo 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 uxodo processamento.Analogamente, as instrues de umprograma escrito emC# tambmdevemser denidas 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 MainExerccios de Fixao ComJava1Abra um terminal e crie uma pasta com o seu nome. Voc deve salvar os seus exerccios nessapasta.K19$ mkdir rafaelK19$ cd rafaelK19/rafael$Terminal 1.9: Criando a pasta de exerccioswww.facebook.com/k19treinamentos 13INTRODUO 14Mais 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.SevocestiverutilizandoosistemaoperacionalWindows, oscomandoscorrespondentesaomkdir e ls so md e dir respectivamente. O comando cd possui a mesma funo em ambi-ente Unix ou Windows.C:\Users\K19 > md rafaelC:\Users\K19 > cd rafaelC:\Users\K19\rafael >Terminal 1.10: Criando a pasta de exercciosArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao1.zip2Dentro da sua pasta de exerccios, crie uma pasta para os arquivos desenvolvidos nesse captulochamada introducao.K19/rafael$ mkdir introducaoK19/rafael$ cd introducaoK19/rafael/introducao$Terminal 1.11: Criando a pasta dos exerccios desse captulo no LinuxC:\Users\K19\rafael > md introducaoC:\Users\K19\rafael > cd introducaoC:\Users\K19\rafael\introducao >Terminal 1.12: Criando a pasta dos exerccios desse captulo no WindowsArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao2.zip3Utilize umeditor de texto e implemente umprograma utilizando a linguagemprogramao 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.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao3.zip14 www.k19.com.br15 INTRODUO4Atravs do terminal, entre na pasta introducao; compile o arquivo HelloWorld.java; execute oprograma.K19/rafael/introducao$ lsHelloWorld.javaK19/rafael/introducao$ javac HelloWorld.javaK19/rafael/introducao$ lsHelloWorld.class HelloWorld.javaK19/rafael/introducao$ java HelloWorldHello WorldTerminal 1.13: Compilando e ExecutandoExibindo mensagensGeralmente, 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 nal 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.1 System.out.print("MENSAGEM SEM QUEBRA DE LINHA");1 System.Console.Write("MENSAGEM SEM QUEBRA DE LINHA");ComentriosPodemos acrescentar comentrios no cdigo fonte. Geralmente, eles so utilizados para explicara lgica do programa. Os compiladores ignoramos comentrios inseridos no cdigo fonte. Portanto,no cdigo de mquina gerado pela compilao do cdigo fonte, os comentrios no so inseridos.www.facebook.com/k19treinamentos 15INTRODUO 16Em 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");IndentaoA organizao do cdigo fonte fundamental para o entendimento da lgica de um programa.Cada linguagemde 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.java1 class Programa2 {3 static void Main()4 {5 // instrues6 }7 }Cdigo C# 1.8: Programa.csPara destacar a hierarquia dos blocos, o contedo de cada bloco deve ser indentado com tabula-es ou espaos.Um cdigo corretamente indentado mais fcil de ler.Consequentemente, a ma-nutenodas aplicaes torna-se mais simples.Engenharia Reversa (Contedo Extra)Provavelmente, voc j desmontou umbrinquedo ou algumaparelho eletrnico para tentar des-16 www.k19.com.br17 INTRODUOcobrir como ele funciona. Ao fazer isso, mesmo sem saber, voc praticou engenharia reversa.Muitas empresas praticamengenharia 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 umprograma no fcil de entender. Geralmente, possvel, apesar de normal-mente ser muito difcil, modicar o funcionamento de umprograma para qualquer que seja o prop-sitoutilizandoa abordagemda engenharia reversa.Ofuscadores (Contedo Extra)Para dicultar o processo de engenharia reversa, podemos utilizar ferramentas que modicam 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 comintuitode copiar oupiratear umsoftware.Exerccios de Fixao ComJava5Crie 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("****");7 System.out.println("*****");8 }9 }Cdigo Java 1.11: Triangulo.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao5.zip6Atravs do terminal, entre na pasta introducao; compile o arquivo Triangulo.java; execute oprograma.K19/rafael/introducao$ javac Triangulo.javaK19/rafael/introducao$ java Triangulo***************Terminal 1.14: Compilando e Executandowww.facebook.com/k19treinamentos 17INTRODUO 187Crie umarquivo na pasta introducao chamado TrianguloComBarraN.java como 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.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao7.zip8Atravs do terminal, entre na pasta introducao; compile o arquivo TrianguloComBarraN.java;execute o programa.K19/rafael/introducao$ javac TrianguloComBarraN.javaK19/rafael/introducao$ java TrianguloComBarraN***************Terminal 1.15: Compilando e ExecutandoErro: No Fechar os BlocosUm 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) {3 // instrues4 }Cdigo Java 1.13: Programa.java1 class Programa {2 public static void main(String [] args) {3 // instruesCdigo Java 1.14: Programa.java1 class Programa2 {3 static void Main()4 {5 // instrues6 }Cdigo C# 1.9: Programa.cs1 class Programa2 {3 static void Main()4 {18 www.k19.com.br19 INTRODUO5 // instruesCdigo C# 1.10: Programa.csVeja a mensagemque o compilador do Java exibe quando umbloco no fechado corretamente.Programa.java :2: error: reached end of file while parsingpublic static void main(String [] args) {^1 errorTerminal 1.16: Erro de compilaoAnalogamente, 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: } expectedTerminal 1.17: Erro de compilaoErro: Trocar Maisculas e MinsculasUm erro de compilao comum em Java ou C# utilizar letras maisculas onde deveriam serutilizadas letras minsculas ou vice-versa. Nos exemplos a seguir, o identicador 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 }5 }Cdigo Java 1.15: HelloWorld.java1 class HelloWorld2 {3 static void Main()4 {5 system.Console.WriteLine("Hello World");6 }7 }Cdigo C# 1.11: HelloWorld.csVeja 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 errorTerminal 1.18: Erro de CompilaoMicrosoft (R) Visual C# Compiler version 4.0.30319.17929www.facebook.com/k19treinamentos 19INTRODUO 20for 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 contextTerminal 1.19: Erro de CompilaoErro: Esquecer o Ponto e VrgulaPara encerrar uma instruo, devemos utilizar o caractere ;. No inserir esse caractere no naldas 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.java1 class HelloWorld2 {3 static void Main()4 {5 System.Console.WriteLine("Hello World")6 }7 }Cdigo C# 1.12: HelloWorld.csVeja as mensagens de erro do compilador do Java e do C# respectivamente.HelloWorld.java :3: error: ; expectedSystem.out.println ("Hello World")^1 errorTerminal 1.20: Erro de CompilaoMicrosoft (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: ; expectedTerminal 1.21: Erro de CompilaoErro: Esquecer o MainTodo programa deve ter umponto de partida. EmJava ou C#, todo programa precisa do mtodomain. Nessas duas linguagens, se voc esquecer de denir 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 }20 www.k19.com.br21 INTRODUO5 }Cdigo Java 1.17: HelloWorld.javaObserve 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, 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 ExecuoAgora, 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.csNesse caso, o mtodo main foi denido 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 pointTerminal 1.23: Erro de CompilaoExerccios de Fixao ComC#9Utilize 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.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao9.zipwww.facebook.com/k19treinamentos 21INTRODUO 2210Atravs do terminal, entre na pasta introducao;compile o arquivo HelloWorld.cs;execute oprograma.C:\Users\K19\rafael\introducao > csc HelloWorld.csC:\Users\K19\rafael\introducao > HelloWorld.exeHello WorldTerminal 1.24: Compilando e Executando11Crie 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.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao11.zip12Atravs do terminal, entre na pasta introducao; compile o arquivo Triangulo.cs; execute o pro-grama.C:\Users\K19\rafael\introducao > csc Triangulo.csC:\Users\K19\rafael\introducao > Triangulo.exe***************Terminal 1.25: Compilando e Executando13Crie 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.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-introducao-fixacao13.zip14Atravs do terminal, entre na pasta introducao;compile o arquivo TrianguloComBarraN.cs;22 www.k19.com.br23 INTRODUOexecute o programa.C:\Users\K19\rafael\introducao > csc TrianguloComBarraN.csC:\Users\K19\rafael\introducao > TrianguloComBarraN.exe***************Terminal 1.26: Compilando e ExecutandoExerccios Complementares1Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.Hello World 1Hello World 22Utilize a linguagem C# para implementar um programa que mostre a seguinte sada.Hello World 1Hello World 23Utilize a linguagem Java para implementar um programa que mostre a sua frase preferida.4Utilize a linguagem C# para implementar um programa que mostre a sua frase preferida.5Utilize a linguagem Java para implementar um programa que mostre a seguinte sada.# # # ###### # ## # ## # # # # #### # ####### # # ## # # # ## # ##### #####6Utilize a linguagem C# para implementar um programa que mostre a seguinte sada.# # # ###### # ## # ## # # # # #### # ####### # # ## # # # ## # ##### #####www.facebook.com/k19treinamentos 23INTRODUO 24Desaos1Crie um programa em Java ou C# para exibir o seu nome de forma semelhante ao mostradoabaixo.______ __ _ _____ _ _| ___ \ / _| | | / __ \ | | (_)| |_/ /__ _| |_ __ _ ___| | | / \/ ___ ___ ___ _ __ | |_ _ _ __ ___| // _ | _/ _ |/ _ \ | | | / _ \/ __|/ _ \ _ \| __| | _ \ / _ \| |\ \ (_| | || (_| | __/ | | \__/\ (_) \__ \ __/ | | | |_| | | | | (_) |\_| \_\__,_|_| \__,_|\___|_| \____/\___/|___/\___|_| |_|\__|_|_| |_|\___/2Pesquise na internet sobre ASCII Art. Crie programas para exibir imagens em ASCII Art.Resumo do Captulo1Os principais elementos de um computador so: CPU, memria RAM e disco rgido.2A CPU o responsvel por executar as instrues dos programas.3Os dados dos programas abertos no computador so armazenados na memria RAM.4Os arquivos dos usurios e dados dos programas instalados no computador so armazenadosno disco rgido.5Os dados armazenados na memria RAM so perdidos se o computador for desligado.6Os dados armazenados no disco rgido no so perdidos se o computador for desligado.7Os computadores se comunicam com outros computadores ou com dispositivos perifricosatravs das suas portas fsicas.8Os dados manipulados por um computador so denidos em formato binrio.9As principais unidades de medida para dados binrios so:bit, byte (B), Kibibyte (KiB), Me-bibyte (MiB), Gibibyte (GiB) e Tebibyte (TiB).24 www.k19.com.br25 INTRODUO10Os comandos que um processador pode executar so denidos pela sua arquitetura.11Processadores de arquiteturas diferentes entendem comandos diferentes.12Um programa uma sequncia de instrues que resolve uma determinada tarefa.13As linguagens de programao so mais fceis para pessoas entenderemdo que as linguagensde mquina.14Os programas so denidos em linguagemde programao.15As principais linguagens de programao so case sensitive.16Os compiladores traduzem o cdigo fonte de um programa para cdigo de mquina.17As mquinas virtuais permitem a criao de programas portveis.18Todo programa necessita de umponto de partida. Oponto de partida dos programas escritosem Java ou C# a primeira instruo do mtodo main.19No cdigo fonte de umprograma emJava ou C#, comentrios so inseridos comos marcadores//, /* e */.20A indentao melhora a legibilidade do cdigo fonte.21Cdigo escrito em linguagem Java deve ser armazenado em arquivos .java. Cdigo escrito emlinguagem C# deve ser armazenado em arquivos .cs22Os comandos System.out.println e System.Console.WriteLine so utilizados para exibir men-sagens com quebra de linha nas linguagens Java e C# respectivamente.23Os comandos System.out.print e System.Console.Write so utilizados para exibir mensagenssem quebra de linha nas linguagens Java e C# respectivamente.Provawww.facebook.com/k19treinamentos 25INTRODUO 261Qual 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.2Qual 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 podemser conectados aos computadores atravs das portasUSB.e) Os mouses atuais so conectados aos computadores atravs das portas HDMI.3Qual a representao binria do nmero 19?a) 00019b) 10011c) 10101d) 11001e) 011014Quantos bits ocupa um arquivo de 19 KiB?a) 19000b) 19c) 819226 www.k19.com.br27 INTRODUOd) 1048576e) 1556485Qual alternativa est errada?a) x86 e x86_64 so arquiteturas de processador.b) Os comandos que umprocessador pode executar dependemda 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.6Qual 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.7Qual a funo dos compiladores?a) Traduzir cdigo de mquina para cdigo fonte.b) Executar cdigo de mquina.c) Executar cdigo fonte.d) Armazenar os dados do computador.e) Traduzir cdigo fonte para cdigo de mquina.8Qual 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.www.facebook.com/k19treinamentos 27INTRODUO 28e) Os programas desenvolvidos com essas linguagens consomem menos memria.9Qual 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.10Qual 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.11Qual 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).d) static void Main().e) public static void main(String[] args).12Qual 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().28 www.k19.com.br29 INTRODUOe) public static void main(String[] args).13Qual 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").14Qual 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").15Quais so os marcadores utilizados para inserir comentrios em Java ou C#?a) // e %.b) #, //, /* e */.c) //, /* e */.d) .e) % e #.Minha Pontuao Pontuao Mnima:12Pontuao Mxima:15www.facebook.com/k19treinamentos 29INTRODUO 3030 www.k19.com.brALGORITMOSCAPTULO2Oque umAlgoritmo?Umalgoritmo 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 ecientes no uma tarefa simples. No meio acadmico,diversas tcnicas para o desenvolvimento de algoritmos mais ecientes so estudadas pela Cinciada Computao.Como umalgoritmo 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.FluxogramaO uxograma 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 ecincia.www.facebook.com/k19treinamentos 31ALGORITMOS 32PROCESSODECISOLEITURAESCRITACONECTORTERMINALSETAS DE FLUXOFigura 2.2: Smbolos utilizados em um uxogramaVamos supor que seja necessrio criar um algoritmo para sacar uma determinada quantia dedinheiro de um caixa eletrnico de um banco. Como caria o uxograma desse algoritmo?INCIOSALDOSUFICIENTE?MENSAGEM,SALDOFIMSIMNOVALOR DO SAQUEACESSAR ATELA DE SAQUESALDOINSUFICIENTESALDO - VALOR DOSAQUEFigura 2.3: Exemplo de uxograma para a operao de saque em um caixa eletrnico de um banco32 www.k19.com.br33 ALGORITMOSPara entender o algoritmo que umuxograma representa, necessrio conhecer o signicado decada smbolo.PseudocdigoEscrever umalgoritmo empseudocdigo 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 caria o exemplo anterior escrito empseudocdigo:1 INICIO2 LER(ValorDoSaque)3 SE ValorDoSaque > 0 E ValorDoSaque md variaveisC:\Users\K19\rafael > cd variaveisC:\Users\K19\rafael\variaveis >Terminal 3.2: Criando a pasta variaveis no WindowsArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao1.zip2Na 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 m, 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.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao2.zip3Compile e execute a classe TestaVariavel.K19/rafael/variaveis$ javac TestaVariavel.javaK19/rafael/variaveis$ java TestaVariavel27Terminal 3.3: Compilando e executando a classe TestaVariavel4Na 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 m, exiba o valor da varivel.44 www.k19.com.br45 VARIVEIS1 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.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao4.zip5Compile e execute a classe TestaNumeroAleatorio.K19/rafael/variaveis$ javac TestaNumeroAleatorio.javaK19/rafael/variaveis$ java TestaNumeroAleatorio19.775172204803429Terminal 3.4: Compilando e executando a classe TestaNumeroAleatorio6Na pasta variaveis, implemente um programa em Java que declare uma varivel do tipo Stringchamada nome. Essa varivel deve ser inicializada comoseunome. Por m, exiba ovalor 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.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao6.zip7Compile e execute a classe TestaString.K19/rafael/variaveis$ javac TestaString.javaK19/rafael/variaveis$ java TestaStringRafael CosentinoTerminal 3.5: Compilando e executando a classe TestaStringCastingConsidere um valor dentro do intervalo de valores do tipo int. Tanto no Java quanto no C#, essevalor pode ser armazenado emuma 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 45VARIVEIS 46Por 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: Compatibilidade1 int a = 19;2 long b = a;Cdigo C# 3.19: CompatibilidadeAgora, considere umvalor 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 comint. Veja oexemplo a seguir.1 long a = 19;2 int b = a;Cdigo Java 3.24: Erro de compilao - Incompatibilidade1 long a = 19;2 int b = a;Cdigo C# 3.20: Erro de compilao - IncompatibilidadeNesses 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 - Casting1 long a = 19;2 int b = (int)a;Cdigo C# 3.21: Converso - CastingOperaesdecastingpodemgerarresultadosbemindesejados. Considerequeumavariveldo 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 = -2147483648Cdigo Java 3.26: Casting - Perdendo preciso46 www.k19.com.br47 VARIVEIS1 long a = 2147483648L;2 int b = (int)a; // b = -2147483648Cdigo C# 3.22: Casting - Perdendo precisoEm 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 = 9223372000000000000Cdigo Java 3.27: No precisa de casting mas tem perda de preciso1 long a = 9223372036854775807L;;2 float b = a; // b = 9223372000000000000Cdigo C# 3.23: No precisa de casting mas tem perda de precisoNos exemplos acima, a varivel do tipo long armazena o valor 9223372036854775807. Ao copiaro 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 stringConsidere uma varivel do tipo string contendo o valor 19. No podemos copiar o valor dessavarivel 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 - Incompatibilidade1 string a = "19";2 int b = a;Cdigo C# 3.24: Erro de compilao - IncompatibilidadeNesses casos, necessrio realizar uma converso de string para int. Em Java, essa conversopode ser realizada da seguinte forma:1 String a = "19";2 int b = Integer.parseInt(a);Cdigo Java 3.29: Converso de string para intEm C#, essa converso pode ser realizada da seguinte forma:1 string a = "19";2 int b = System.Convert.ToInt32(a);Cdigo C# 3.25: Converso de string para intwww.facebook.com/k19treinamentos 47VARIVEIS 48A tabela a seguir mostra como as converses so realizadas em Java e C#.Javabyte Byte.parseByte()short Short.parseShort()int Integer.parseInt()long Long.parseLong()oat Float.parseFloat()double Double.parseDouble()boolean Boolean.parseBoolean()Tabela 3.3: Converso em JavaC#sbyte System.Convert.ToSByte()byte System.Convert.ToByte()short System.Convert.ToInt16()ushort System.Convert.ToUInt16()int System.Convert.ToInt32()uint System.Convert.ToUInt32()long System.Convert.ToInt64()ulong System.Convert.ToUInt64()oat System.Convert.ToSingle()double System.Convert.ToDouble()decimal System.Convert.ToDecimal()bool System.Convert.ToBoolean()Tabela 3.4: Converso em C#Convenes de nomenclaturaOs nomes das variveis so fundamentais para o entendimento do cdigo fonte. Considere oexemplo 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, voctenha umavaga ideia. Vamos melhorarmais um poucoos nomes dessasvariveis.48 www.k19.com.br49 VARIVEIS1 int janeiro;2 int fevereiro;3 int marco;Agora sim! Voc j sabe para que servem essas variveis? Se voc parar para pensar ainda nosabe 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. Consequen-temente, a leitura e o entendimento do cdigo fonte seria mais fcil.Geralmente,bons nomes de variveis so compostos por vrias palavras como no exemplo aseguir.1 int numeroDeCandidatosAprovados;Quandoonomedeumavarivelcomposto, fundamentaladotaralgumaconvenoparaidenticar o incio e o termino das palavras.A separao natural das palavras na lngua portuguesaso os espaos. Contudo, os nomes das variveis em Java ou C# no podem possuir espaos. Noadotar 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 nosaberia como separar as palavras. Considere o exemplo abaixo.salamesadiaO que est escrito no texto acima? A resposta depende da diviso das palavras. Voc pode lercomo sala mesa dia ou salame sadia. Dessa forma, ca claro a necessidade deixar visualmenteexplcito a diviso das palavras.Em algumas linguagens de programao, delimitadores so utilizados para separar as palavrasque 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 sepa-rar as palavras.NumeroDeCandidatosAprovados;numeroDeCandidatosAprovados;Em Java ou em C#, a conveno de nomenclatura adotada para separar as palavras que formamo nome de uma varivel o Camel Case, que consiste emescrever o nome da varivel coma primeiraletra de cada palavra em maiscula com exceo da primeira letra da primeira palavra.www.facebook.com/k19treinamentos 49VARIVEIS 501 int numeroDaConta;2 int NumeroDaConta; // no segue a convenoCdigo Java 3.35: Conveno para a escrita dos nomes das variveis em Java e C#.Tambm devemos nos lembrar que as duas linguagens so Case Sensitive. Dessa forma, nume-roDaConta e NumeroDaConta so consideradas variveis diferentes pelo fato do nome da primeiracomear com letra minscula e o da segunda com maiscula.Regras de nomenclaturaAs linguagens Java e C# possuemregras tcnicas muito parecidas a respeito da nomenclatura dasvariveis. 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 // vlido2 int numeroDaConta;34 // invlido pois o nome de uma varivel no pode comear com um dgito5 int 2outraVariavel;67 // invlido pois o nome de uma varivel no pode ser igual a uma palavra reservada8 double double;910 // invlido pois o nome de uma varivel no pode conter espaos11 double saldo da conta;1213 // vlido14 int umaVariavelComUmNomeSuperHiperMegaUltraGigante;1516 // vlido17 int numeroDaContaCom8Digitos_semPontos;1819 // vlido somente em Java20 int valorDoProdutoEmR$;2122 // invlido pois o nome de uma varivel no pode conter o caractere #23 int #telefone;Cdigo Java 3.36: Exemplos de nomes de variveis vlidos e invlidosAs linguagens Java e C# permitem a criao de nomes de variveis em qualquer idioma,poiselas aceitam qualquer caractere Unicode UTF-16. Portanto so vlidas as variveis escritas com asacentuaes do portugus, assim como as variveis escritas em japons, por exemplo.50 www.k19.com.br51 VARIVEISApesar 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 deprogramao. Essa prtica facilita a leitura do cdigo fonte em qualquer editor de texto.KeywordsToda linguagem de programao possui um conjunto de palavras reservadas. Em geral, essaspalavras representamos comandos da linguagem. Abaixovoc pode visualizar as palavras reservadasdo Java e do C#.abstract continue for new switchassert default if package synchronizedboolean do goto private thisbreak double implements protected throwbyte else import public throwscase enum instanceof return transientcatch extends int short trychar nal interface static voidclass nally long strictfp volatileconst oat native super whileTabela 3.5: Keywords do Javaabstract as base bool breakbyte case catch char checkedclass const continue decimal defaultdelegate do double else enumevent explicit extern false nallyxed oat for foreach gotoif implicit in int interfaceinternal is lock long namespacenew null object operator outoverride params private protected publicreadonly ref return sbyte sealedshort sizeof stackalloc static stringstruct switch this throw truetry typeof uint ulong uncheckedunsafe ushort using virtual voidvolatile whileTabela 3.6: Keywords do C#FormataoConsidere uma varivel que armazena o preo de um produto. Geralmente,preos possuemcasas decimais. Dessa forma, devemos escolher umtipo que permita o armazenamento de nmeroswww.facebook.com/k19treinamentos 51VARIVEIS 52reais. Por exemplo, podemos escolher o tipo double no Java ou no C#. Veja os exemplos a seguir.1 double preco = Math.random () * 100;Cdigo Java 3.37: Preo de um produto1 System.Random gerador = new System.Random ();2 double preco = gerador.NextDouble () * 100;Cdigo C# 3.26: Preo de um produtoNos exemplos anteriores, os preos dos produtos foram gerados aleatoriamente. Com alta pro-babilidade, esses valores possuiro mais do que duas casas decimais. Contudo, provavelmente, seriamais conveniente exibir os preos apenas com duas casas decimais. Isso pode ser feito facilmenteem Java ou C# atravs das mscaras de formatao.1 System.out.printf("%.2f", preco);Cdigo Java 3.38: Exibindo nmeros formatados em Java1 System.Console.WriteLine("{0:F2}", preco);Cdigo C# 3.27: Exibindo nmeros formatados em C#Podemos inserir diversos parmetros nas mscaras de formatao. Em Java, cada parmetrodeve ser indicado com o caractere %.1 System.out.printf("%1$s tem %2$d anos e pesa %3$.2f", "Jonas" , 30, 49.459);Cdigo Java 3.39: Parmetros na mscara de formataoNo exemplo, o trecho %1$s indica que o primeiro parmetro da mscara uma string. J otrecho %2$d indica que o segundo parmetro um nmero inteiro. Por m, o trecho %3$.2findica que o terceiro parmetro um nmero real formatado com duas casas decimais.S ou s: stringDou d: nmero inteiro decimalX ou x: nmero inteiro hexadecimalf: nmero realEm C#, os parmetros so denidos com chaves ({}).1 System.Console.WriteLine("{0} tem {1:D} anos e pesa {2:F2}", "Jonas", 30, 49.459);Cdigo C# 3.28: Parmetros na mscara de formataoNoexemplo, otrecho{0}indicaondeoprimeiroparmetrodeveserinserido. Jotrecho{1:D} indica que o segundo parmetro um nmero inteiro. Por m, o trecho {2:F2} indica queo terceiro parmetro um nmero real formatado com duas casas decimais.52 www.k19.com.br53 VARIVEISDou d: nmero inteiro decimalX ou x: nmero inteiro hexadecimalF ou f: nmero realFormatao de Data e Hora (Contedo Extra)Normalmente, o formato padro para exibir data e hora varia de pas para pas. ou de regio pararegio. Por exemplo, os brasileiros esto mais acostumados com o formato de data dia/ms/ano.Por outro lado, os americanos costumam utilizar o formato ms/dia/ano.Tanto em Java quanto em C#, podemos formatar data e hora facilmente.No cdigo Java abaixo,a formatao dia/ms/ano hora:minutos:segundos est sendo aplicada.1 java.util.Calendar fundacaoK19 =2 new java.util.GregorianCalendar (2010, 7, 27, 10, 32, 15);34 java.text.SimpleDateFormat sdf =5 new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss");67 String fundacaoK19Formatada = sdf.format(fundacaoK19.getTime ());Cdigo Java 3.40: Aplicando o formado "dia/ms/ano hora:minutos:segundosNa mscara de formatao, devemos utilizar os caracteres especiais para denir o formato dese-jado. Veja o que cada caractere indica.d: diaM: msy: anoH: horam: minutoss: segundosQuando o caractere d utilizado de forma simples na mscara de formatao, os dias de 1 at 9so formatados comapenas umdgito. Quando utilizamos dd, os dias de 1 at 9 so formatados comapenas 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 (2010 , 7, 27, 10, 32, 15);34 string fundacaoK19Formatada = fundacaoK19.ToString("dd/MM/yyyy HH:mm:ss");Cdigo C# 3.29: Aplicando o formado "dia/ms/ano hora:minutos:segundoswww.facebook.com/k19treinamentos 53VARIVEIS 54A mscara de formatao de data e hora do C# funciona de forma muito semelhante a do Java.Exerccios de Fixao ComJava8Na pasta variaveis,implemente um programa em Java para exibir os valores formatados dealgumas variveis.1 class TestaFormatacao {2 public static void main(String [] args) {3 String nome = "Jonas Hirata";4 int idade = 30;5 double peso = 49.7345;67 System.out.printf("O %1$s tem %2$d anos e pesa %3$.2f kg\n", nome , idade , peso);8 }9 }Cdigo Java 3.41: TestaFormatacao.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao8.zip9Compile e execute a classe TestaFormatacao.K19/rafael/variaveis$ javac TestaFormatacao.javaK19/rafael/variaveis$ java TestaFormatacaoO Jonas Hirata tem 30 anos e pesa 49.73Terminal 3.6: Compilando e executando a classe TestaFormatacao10Na 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 = 2147483648L;45 int b = (int)a;67 System.out.println(a);8 System.out.println(b);9 }10 }Cdigo Java 3.42: TestaCasting.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao10.zip11Compile e execute a classe TestaCasting.K19/rafael/variaveis$ javac TestaCasting.javaK19/rafael/variaveis$ java TestaCasting2147483648-2147483648Terminal 3.7: Compilando e executando a classe TestaCasting54 www.k19.com.br55 VARIVEIS12Na pasta variaveis, implemente um programa em Java que realiza uma operao de conversode string.1 class TestaConversao {2 public static void main(String [] args) {3 String s = "19.09";45 double d = Double.parseDouble(s);67 System.out.println(d);8 }9 }Cdigo Java 3.43: TestaConversao.javaArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao12.zip13Compile e execute a classe TestaConversao.K19/rafael/variaveis$ javac TestaConversao.javaK19/rafael/variaveis$ java TestaConversao19.09Terminal 3.8: Compilando e executando a classe TestaConversaoErro: Variveis comnomes repetidosUm erro de compilao comum em Java ou C# ocorre quando duas ou mais variveis so decla-radas com nome repetido em um mesmo bloco. Veja um exemplo de programa em Java com esseproblema.1 class Programa {2 public static void main(String [] args) {3 int a = 10;45 double a = 10.7;67 int a = 5;8 }9 }Cdigo Java 3.44: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :5: error: variable a is already defined in method main(String [])double a = 10.7;^Programa.java :7: error: variable a is already defined in method main(String [])int a = 5;^2 errorsTerminal 3.9: Erro de compilaoAgora, veja um exemplo de programa em C# com esse problema.1 class Programawww.facebook.com/k19treinamentos 55VARIVEIS 562 {3 static void Main()4 {5 int a = 10;67 double a = 10.7;89 int a = 5;10 }11 }Cdigo C# 3.30: Programa.csA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.cs(7 ,10): error CS0128: A local variable named a is already defined in this scopePrograma.cs(7 ,14): error CS0266: Cannot implicitly convert type double to int .An explicit conversion exists (are you missing a cast?)Programa.cs(9,7): error CS0128: A local variable named a is already defined in this scopeTerminal 3.10: Erro de compilaoErro: Esquecer a inicializao de uma varivel localOutro erro de compilao comum em Java ou C# ocorre quando utilizamos uma varivel localno inicializada. Veja um exemplo de programa em Java com esse problema.1 class Programa {2 public static void main(String [] args) {3 int a;45 System.out.println(a);6 }7 }Cdigo Java 3.45: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :5: error: variable a might not have been initializedSystem.out.println(a);^1 errorTerminal 3.11: Erro de compilaoAgora, veja um exemplo de programa em C# com esse problema.1 class Programa2 {3 static void Main()4 {5 int a;67 System.Console.WriteLine(a);8 }9 }Cdigo C# 3.31: Programa.cs56 www.k19.com.br57 VARIVEISA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.cs(7 ,42): error CS0165: Use of unassigned local variable aTerminal 3.12: Erro de compilaoErro: Trocar aspas simples por aspas duplas ou vice-versaMais um erro comum em Java ou C# ocorre quando utilizamos aspas simples onde deveria seraspas duplas ou vice-versa. Veja um exemplo de programa em Java que utiliza aspas duplas ondedeveria ser aspas simples.1 class Programa {2 public static void main(String [] args) {3 char c = "A";4 }5 }Cdigo Java 3.46: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :3: error: incompatible typeschar c = "A";^required: charfound: String1 errorTerminal 3.13: Erro de compilaoAgora, veja um exemplo de programa em Java que utiliza aspas simples onde deveria ser aspasduplas.1 class Programa {2 public static void main(String [] args) {3 String s = K19 Treinamentos ;4 }5 }Cdigo Java 3.47: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :3: error: unclosed character literalString s = K19 Treinamentos ;^Programa.java :3: error: not a statementString s = K19 Treinamentos ;^Programa.java :3: error: ; expectedString s = K19 Treinamentos ;^Programa.java :3: error: unclosed character literalString s = K19 Treinamentos ;^Programa.java :3: error: not a statementString s = K19 Treinamentos ;^5 errorsTerminal 3.14: Erro de compilaowww.facebook.com/k19treinamentos 57VARIVEIS 58Agora, veja um exemplo de programa em C# que utiliza aspas duplas onde deveria ser aspassimples.1 class Programa2 {3 static void Main()4 {5 char c = "A";6 }7 }Cdigo C# 3.32: Programa.csA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.cs(5 ,22): error CS0029: Cannot implicitly convert type string to char Terminal 3.15: Erro de compilaoAgora, veja um exemplo de programa em C# que utiliza aspas simples onde deveria ser aspasduplas.1 class Programa2 {3 static void Main()4 {5 string s = K19 Treinamentos ;6 }7 }Cdigo C# 3.33: Programa.csA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.cs(5 ,30): error CS1012: Too many characters in character literalTerminal 3.16: Erro de compilaoErro: Utilizar o separador decimal erradoOutro erro de compilao comum em Java ou C# ocorre quando no utilizamos o separador de-cimal correto. Veja um exemplo de programa em Java com esse problema.1 class Programa {2 public static void main(String [] args) {3 double d = 19 ,09;4 }5 }Cdigo Java 3.48: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :3: error: expecteddouble d = 19,09;^1 error58 www.k19.com.br59 VARIVEISTerminal 3.17: Erro de compilaoAgora, veja um exemplo de programa em C# com esse problema.1 class Programa2 {3 static void Main()4 {5 double d = 19 ,09;6 }7 }Cdigo C# 3.34: Programa.csA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.cs(5 ,17): error CS1001: Identifier ExpectedTerminal 3.18: Erro de compilaoErro: Valores incompatveis comos tipos das variveisTambm um erro de compilao comum em Java ou C# atribuir valores incompatveis com ostipos das variveis. Veja um exemplo de programa em Java com esse problema.1 class Programa {2 public static void main(String [] args) {3 int a = 19.09;4 }5 }Cdigo Java 3.49: Programa.javaA mensagem de erro de compilao seria semelhante a apresentada abaixo.Programa.java :3: error: possible loss of precisionint a = 19.09;^required: intfound: double1 errorTerminal 3.19: Erro de compilaoAgora, veja um exemplo de programa em C# com esse problema.1 class Programa2 {3 static void Main()4 {5 int a = 19.09;6 }7 }Cdigo C# 3.35: Programa.csA mensagem de erro de compilao seria semelhante a apresentada abaixo.www.facebook.com/k19treinamentos 59VARIVEIS 60Programa.cs(5 ,11): error CS0266: Cannot implicitly convert type double to int .An explicit conversion exists (are you missing a cast?)Terminal 3.20: Erro de compilaoExerccios de Fixao ComC#14Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo int cha-mada idade. Essa varivel deve ser inicializada com o valor da sua idade. Por m, exiba o valor davarivel.1 class TestaVariavel2 {3 static void Main()4 {5 int idade;67 idade = 27;89 System.Console.WriteLine(idade);10 }11 }Cdigo C# 3.36: TestaVariavel.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao14.zip15Compile e execute a classe TestaVariavel.C:\Users\K19\rafael\variaveis > csc TestaVariavel.csC:\Users\K19\rafael\variaveis > TestaVariavel.exe27Terminal 3.21: Compilando e executando a classe TestaVariavel16Na pasta variaveis, implemente umprograma emC# que gere umnmero real aleatrio entre 0 e100. Esse nmero deve ser armazenado emuma varivel do tipo double chamada numeroAleatorio.Por m, exiba o valor da varivel.1 class TestaNumeroAleatorio2 {3 static void Main()4 {5 System.Random gerador = new System.Random ();67 double numeroAleatorio = gerador.NextDouble () * 100;89 System.Console.WriteLine(numeroAleatorio);10 }11 }Cdigo C# 3.37: TestaNumeroAleatorio.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao16.zip60 www.k19.com.br61 VARIVEIS17Compile e execute a classe TestaNumeroAleatorio.C:\Users\K19\rafael\variaveis > csc TestaNumeroAleatorio.csC:\Users\K19\rafael\variaveis > TestaNumeroAleatorio.exe19.1009406745904Terminal 3.22: Compilando e executando a classe TestaVariavel18Na pasta variaveis, implemente um programa em C# que declare uma varivel do tipo stringchamada nome. Essa varivel deve ser inicializada comoseunome. Por m, exiba ovalor da varivel.1 class TestaString2 {3 static void Main()4 {5 string nome;67 nome = "Rafael Cosentino";89 System.Console.WriteLine(nome);10 }11 }Cdigo C# 3.38: TestaString.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao18.zip19Compile e execute a classe TestaString.C:\Users\K19\rafael\variaveis > csc TestaString.csC:\Users\K19\rafael\variaveis > TestaStringRafael CosentinoTerminal 3.23: Compilando e executando a classe TestaString20Na pasta variaveis, implemente um programa em C# para exibir os valores de algumas variveisformatados.1 class TestaFormatacao2 {3 static void Main()4 {5 string nome = "Jonas Hirata";6 int idade = 30;7 double peso = 49.7345;89 System.Console.WriteLine("O {0} tem {1} anos e pesa {2:F2} kg", nome ,idade ,peso);10 }11 }Cdigo C# 3.39: TestaFormatacao.csArquivo:https://github.com/K19/K19-Exercicios/archive/k01-variaveis-fixacao20.zip21Compile e execute a classe TestaFormatacao.www.facebook.com/k19treinamentos 61VARIVEIS 62K19/rafael/variaveis$ javac TestaFormatacao.javaK19/rafael/variaveis$ java TestaFormatacaoO Jonas Hirata tem 30 anos e pesa 49.73Terminal 3.24: Compilando e executando a classe TestaFormatacao22Na pasta variaveis, implemente um programa em C# que realiza uma operao de casting.1 class TestaCasting2 {3 static void Main()4 {5 long a = 2147483648L;67 int b = (int)a;89 System.Console.WriteLine(a);10 System.Console.WriteLine(b);11 }12 }Cdigo C# 3.40: TestaCasting.csArquivo:https://github.com/K19/K19-Exercicios/archiv