Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 INFORMÁTICA LÓGICA ARITMÉTICA-1ª SÉRIE 1 LÓGICA E ARITMÉTICA INTRODUÇÃO Aritmética Palavra de origem grega, significando a aptidão de contar, tendo como propriedades fundamentais a Adição e Subtração. É o estudo dos números, das relações entre eles e das regras para combinações de dois ou mais números. Desenvolveu-se sob as pressões das necessidades práticas do comércio, das finanças e da astronomia. Este termo é usado não só para designar relações numéricas simples, mas também teorias mais complexas e abstratas. ALGARISMOS E NÚMEROS Algarismos são símbolos utilizados na composição dos números. Os algarismos utilizados são: 0,1, 2, 3, 4, 5, 6, 7, 8 e 9. Os algarismos têm seu valor próprio, quando estão escritos isoladamente. Por exemplo o algarismos ―7‖ tem o seu valor, sendo maior do que o algarismo ―3‖. Porém se estes mesmos algarismos estiverem sendo utilizados na composição de um número, o valor significativo de cada um será determinado pela posição que o mesmo ocupara na composição do número. (Lógica posicional) Assim, apesar do algarismo ―3‖ ter o valor próprio menor do que o algarismo ―7‖, no número 3753, ele apresentará dois valores distintos, sendo que o ―3‖ que ocupa a posição de milhar do número terá um valor significativo maior do que o ―7‖ que ocupa a posição de centena do número. Assim o número 3753, pode ser decomposto da seguinte maneira: 3 x 103 + 7 x 102 + 5 x 101 + 3 x 100 = 3 x 1000 + 7 x 100 + 5 x 10 + 3 x 1 = 3753 3 x 103 = 3 x 1000 = 3000 7 x 102 = 7 x 100 = 700 5 x 101 = 3 x 10 = 50 3 x 100 = 3 x 1 = 3 _____________________ 3753 2 OPERADORES ARITMÉTICOS É comum necessitarmos realizar cálculos matemáticos com as informações que estamos manipulando. Para isso, é necessário sabermos qual a representação dos símbolos de operações matemáticas. Vejamos: Usaremos o (*) asterístico como operador de multiplicação e a (/) barra como operador de divisão, símbolos normalmente utilizados em programação. Operador Operação Exemplo + Adição 10 + 15 - Subtração 20 – 10 * Multiplicação 3 * 5 / Divisão (o resultado será um número real) 5 / 2 = 2,5 \ ou DIV Divisão (o resultado será um inteiro) 10 div 2 = 5 7 div 2 = 3 % ou MOD Resto de uma divisão 7 mod 2 = 1 ^ ou exp (a, b) Exponenciação 5 ^ 2 ou exp(5, 2) Da mesma maneira que estudamos na escola, algumas operações têm prioridade sobre as outras. A potenciação tem a maior prioridade entre todos os operadores. Multiplicação e divisão devem ser operadas antes da adição e subtração. Assim, na expressão 3 + 2 * 5, primeiro operamos o 2 * 5, e somamos o resultado com 3 para obtermos 13. Para mudar a ordem das operações, usamos parênteses, o que estiver entre parênteses será operado primeiro. Por exemplo: (3 + 2) * 5, primeiro operamos o 3 + 2, porque está entre parênteses, e depois o resultado desta operação será multiplicado com 5 para obter 25. Quando na expressão só houverem operações com a mesma prioridade, a avaliação é feita normalmente da esquerda para a direita. 3 Exemplo: ( 3 + 5 ) * ( 4 * ( 10 -7 ) ) / 2 Opera-se o que estiver nos parênteses mais internos ( 3 + 5 ) * ( 4 * 3 ) / 2 Operam-se os dois parênteses que restaram 8 * 12 / 2 Só há * e / -, então opera-se da esquerda para a direita 96 / 2 48 Resultado final OPERADORES RELACIONAIS Além de operações matemáticas, é freqüente nossa necessidade em comparar informações. Por exemplo: Se média for maior ou igual a 7. Para isso, utilizamos operadores relacionais. Operador Relação == Igualdade =/= ou ou <> ou != Diferente > Maior que ou >= Maior ou igual que < Menor que ou <= Menor ou igual que Exemplo: Nome S ím b o lo Exemplos Resultado Igual a == 3 = 3 2 + 2 = 5 Verdadeiro Falso Diferente de <> ou != 140 <> 410 (10+5) <> (30/2) Verdadeiro Falso Maior que > 0 > -1 345 > ((3 +1)*100) Verdadeiro Falso Maior ou igual que >= 13 >= 7 + 6 Verdadeiro 4 77 >= 40 * 2 Falso Menor que < 3 < 7 77 < 20 * 2 Verdadeiro Falso Menor ou igual que <= 3 <= 7 - 4 77 <= 25 * 4 Verdadeiro Falso OPERADORES LÓGICOS É freqüente precisarmos analisar expressões lógicas, aquelas que só possuem dois valores possíveis: Verdadeiro ou Falso. Os operadores usados em expressões lógicas são os Operadores Lógicos. Veja: Operador Relação E (And) / && E lógico Ou (Or) || Ou lógico Não (Not) ! Negação lógica E RETORNA VERDADEIRO SE AMBAS AS PARTES FOREM VERDADEIRAS. OU BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO. NÃO INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICE- VERSA. OU-X RETORNA VERDADEIRO SE AS PARTES FOREM DIFERENTES E FALSO SE FOREM IGUAIS Tabela Verdade Veja a seguinte tabela para entender melhor os operadores lógicos. A B A e B A ou B NÃO A A ou-X B F F F F V F F V F V V V 5 V F F V F V V V V V V F EXPRESSÕES LÓGICAS As expressões compostas de relações sempre retornam um valor lógico. Exemplos: 2+5>4 Verdadeiro 3<>3Falso De acordo com a necessidade, as expressões podem ser unidas pelos operadores lógicos. Exemplos: 2+5>4 E 3<>3 Falso 2+5>4 OU 3<>3 Verdadeiro NÃO(3<>3) Verdadeiro V F F E V F V OU F V NÃO 6 PRIORIDADE DE OPERADORES: Durante a execução de uma expressão que envolve vários operadores, é necessário à existência de prioridades, caso contrário poderemos obter valores que não representam o resultado esperado. A maioria das linguagens de programação utiliza as seguintes prioridades de operadores: 1º - Efetuar operações embutidas em parênteses "mais internos" 2º - Efetuar Funções 3º - Efetuar multiplicação e/ou divisão 4º - Efetuar adição e/ou subtração 5º - Operadores Relacionais 6º - Operadores Lógicos OBS: O programador tem plena liberdade para incluir novas variáveis, operadores ou funções para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes devem ser compatíveis com a linguagem de programação a ser utilizada. EXERCÍCIO: 1) Com base no que mencionado acima, responda as perguntas a seguir: a) Na expressão A*B-C, qual será a seqüência de execução? b) Na expressão (A*B)-C, qual será a seqüência de execução? c) Na expressão A*(B-C), qual será a seqüência de execução? d) Na expressão (A*(B-C*(D/E))), qual será a seqüência de execução? A lógica para se montar uma expressão é ponto determinante na questão do resultado ser ou não verdadeiro, ou seja, de ser o resultado esperado. Exemplo: 6 * ( 9 + 3 * 2 ) / ( 2 * 4- 11 ) Operam-se as multiplicações nos parênteses 6 * ( 9 + 6 ) / ( 8 - 11 ) Operam-se os parênteses 6 * 15 / -3 Só há * e / - opera-se da esquerda para a direita 90 / -3 Observe o sinal negativo antes do 3... -30 Resultado final 7 LINEARIZAÇÃO DE EXPRESSÕES Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas. É importante também ressalvar a mudança dos operadores correspondentes da aritmética tradicional para a computacional. Exemplo: MODULARIZAÇÃO DE EXPRESSÕES A modularização é a divisão da expressão em partes, proporcionando maior compreensão e definindo prioridades para resolução da mesma. Como pode ser observado no exemplo anterior, em expressões computacionais usamos somente parênteses “( )” para modularização. Na informática podemos ter parênteses dentro de parênteses.Exemplos de prioridades: 1) (2+2)/2=2 2) 2+2/2=3 3) ((2+2)*(4+4))=32 4) 2+2*4+4=14 Exercícios: 1. Usando a lógica posicional, decomponha o número 17535. 2. De acordo com as prioridades de execução do operadores aritméticos, calcule a expressão 45 + 15 * 5 //10? 3. Os operadores aritméticos, relacionais e lógicos obedecem a uma determinada prioridade quando estão presentes na mesma expressão. Qual a ordem de prioridade desses operadores? 135 3 2 (2/3+(5-3))+1= Tradicional Computacional 8 4. Linearizar e resolver: A- 47+12x4/2-21 2+3x2 B – 21+37+21x4-29 4+3/5 C – 175/5+345/3-28 25/2+3,5+27 22/2+4 7 5. Resolva as expressões abaixo: a) 4 + 3 * 5 + 2 – 5 b) 10 + 5 * 2 = 30 c) V and F or V not V or F d) 25+45/3 < 40 AND 21x2 = 44-4/2 OR NOT F e) 27 = 13+27/3 OR NOT V AND 125/5 <> 25 AND NOT V f) F AND V OR NOT V OR F AND NOT F OR V OR F AND F OR NOT V SISTEMAS DE NUMERAÇÃO SISTEMA DECIMAL Para se compreender a estrutura de qualquer sistema de numeração podemos começar por rever o sistema decimal, por ser aquele que usamos diariamente quando efetuamos os cálculos mais elementares. O sistema decimal (ou sistema de base 10) utiliza 10 símbolos designados por algarismos para representar quantidades. São eles o 0, o 1, o 2, o 3, o 4, o 5, o 6, o 7, o 8 e o 9. De um modo geral, podemos dizer que a base de qualquer sistema de numeração é dada pelo número de símbolos diferentes que esse sistema utiliza. Um número decimal é formado por uma combinação de algarismos. Para determinar a quantidade representada por um número decimal é necessário multiplicar cada um dos algarismos que o constituem por uma potência de 10 de acordo com a posição que cada um dos algarismos ocupa no número, e somar os resultados. Por exemplo o número decimal 27315 pode ser escrito da seguinte forma: 20000+7000+300+10+5, o que é o mesmo que: 2*10000+7*1000+3*100+1*10+5, que por sua vez equivale a: 2*104+7*103+3*102+1*101+5*100 Também sabemos que, se o expoente de um número for menor que zero, então esse expoente indica as casas decimais desse número. Conseqüentemente concluímos 9 que podemos representar qualquer número decimal, inteiro ou fracionário, em desenvolvimento de potências de 10. 2*104+7*103+3*102+1*101+5*100+3x10-1+2x10-2 = 27315,32 SISTEMA BINÁRIO Todo o funcionamento de um computador digital é baseado no cálculo binário. O sistema de numeração binário (sistema de base 2) é formado por dois dígitos: o 0 e o 1. Os dígitos binários ―0‖ e ―1‖ são habitualmente designados por ―BITs‖. Um número binário constituído por 8 bits é designado por ―BYTE‖, um número binário de 16 bits é uma ―WORD‖, e um de 32 bits, uma ―DOUBLE WORD‖. Para contar em decimal, usamos intuitivamente um algoritmo muito simples: supondo que temos um contador por cada posição, todos inicializados em 0. Começamos a incrementá-los da direita para a esquerda. Quando o contador em qualquer posição ultrapassar o valor 9 (valor do símbolo mais elevado no caso do sistema decimal), o contador relativo a essa posição juntamente com todos os contadores à direita voltam a zero e o contador que ocupa a posição imediatamente à esquerda, é incrementado 1 unidade. Para contar em binário seguimos as mesmas regras, ou seja, obtemos a sequência: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, etc. SISTEMA HEXADECIMAL O sistema binário é muito pouco compacto, são necessários muitos dígitos para representar números relativamente pequenos, o que dificulta o trabalho das pessoas que programam os computadores. Para solucionar este problema usa-se freqüentemente o sistema de numeração hexadecimal, em vez do binário. O sistema hexadecimal, como o nome indica, é formado por 16 símbolos diferentes: o 0, o 1, o 2, o 3, o 4, o 5, o 6, o 7, o 8, o 9, o A, o B, o C, o D, o E e o F. As letras A, B, C, D, E e F correspondem aos valores 10, 11, 12, 13, 14 e 15 respectivamente. Como nos sistemas de numeração anteriormente estudados qualquer número do sistema hexadecimal pode ser desenvolvido em potências da sua base. Neste caso, a base é 16 uma vez que o número de dígitos utilizados são 16. SISTEMA OCTAL Um outro sistema de numeração é o octal. Utiliza os algarismos 0 a 7 na sua composição e serve como exemplo para demonstrar que podemos ter qualquer sistema de numeração. 10 CONVERSÃO DE SISTEMAS DE NUMERAÇÃO Conversão de um número decimal (base 10) para um número binário (base 2) Para converter números decimais em binários existem dois métodos possíveis. O primeiro consiste em extrair do número decimal a converter potências na base dois, até o resto ser igual a zero. Atribuímos de seguida ao número binário resultante um 1 para cada posição binária correspondente a cada potência de dois extraída. Outro método possível consiste em dividir o número decimal sucessivamente por dois até obter zero. Os restos de cada operação formam o novo número binário, sendo o valor do primeiro resto, o dígito menos significativo, e o último, o mais significativo. Conversão de um número binário (base 2) para um número decimal (base 10) Para converter um número binário para o número decimal equivalente basta multiplicar cada dígito pela potência de 2 relativa à posição por ele ocupada e somar os resultados. Assim por exemplo o número binário 101 equivale ao número 5 no sistema decimal. 101 = 1*22 + 0*21 + 1*20 = 1*4 + 0*2 + 1*1 = 4 + 0 + 1 = 5 Conversão da base hexadecimal para a base decimal Para converter um número hexadecimal para o número decimal equivalente basta multiplicar cada dígito pela potência de 16 relativa à posição por ele ocupada e somar os resultados. Conversão da base decimal para a base hexadecimal Para converter números decimais em hexadecimais usa-se um método semelhante ao que se utiliza para converter números decimais em binários. O método consiste em dividir o número decimal sucessivamente por dezesseis até obter zero. Os restos de cada operação formam o novo número hexadecimal, sendo o valor do primeiro resto o dígito menos significativo, e o último, o mais significativo. Conversão da base hexadecimal para a base binária As conversões da base 16 de e para a base binária são extremamente simples, daí ser o sistema hexadecimal o escolhido mais freqüentemente para substituir o sistema binário. Cada dígito hexadecimal equivale a quatro dígitos binários. Para converter um número binário para o sistema hexadecimal agrupam-se os dígitos binários em grupos de quatro da direita para a esquerda e substitui-se cada um destes grupos por um dígito hexadecimal de valor equivalente. 11 Para converter um número binário para o sistema hexadecimal o método é o inverso deste, ou seja, substitui-se cada dígito hexadecimal por um grupo de 4 dígitos binários com o valor equivalente. Exemplo: Converter o número 3547(10) para as bases (2), (8) e (16). Para a base 2, realizamos divisões sucessivas por dois. 3547 / 2 = 1773 resta 1 1773 / 2 = 886 resta 1 886 / 2= 443 resta 0 443 / 2 = 221 resta 1 221 / 2 = 110 resta 1 110 / 2 = 55 resta 0 55 / 2 = 27 resta 1 27 / 2 = 13 resta 1 13 / 2 = 6 resta 1 6 / 2 = 3 resta 0 3 / 2 = 1 resta 1 1 / 2 = 0 resta 1 Obs: O último quociente não pode ser dividido por 2. O número 3547 representado na base dois é igual aos valores obtidos nos restos das divisões em ordem inversa O algarismo mais significativo é o último resto (valor do quociente) e o menos significativo é o primeiro resto. Então o número na base dois é 110111011011. Para a base 8 realizamos divisões sucessivas por oito. 3547 / 8 = 443 resta 3 443 /8 = 55 resta 3 55 / 8 = 6 resta 7 6 / 8 = 0 resta 6 Obs: O último quociente não pode ser dividido por 8. O número 3547 representado na base oito é igual aos valores obtidos nos restos das divisões em ordem inversa. O algarismo mais significativo é o último resto (valor do quociente) e o menos significativo é o primeiro resto. Então o número na base oito é 6733. 12 Para a base 16 realizamos divisões sucessivas por dezesseis; 3547 / 16 = 221 resta 11 221 / 19 = 13 resta 13 13 / 16 = 0 resta 13 Obs: O último quociente não pode ser dividido por 16 O número 3547 representado na base dezesseis é igual aos valores obtidos nos restos das divisões em ordem inversa. O algarismo mais significativo é o ultimo resto (valor do quociente) e o menos significativo é o primeiro resto. Então o número na base dezesseis é 13 13 11 que representado pelas letras fica DDB. . Convertendo os números encontrados teremos novamente o número 3547 em decimal. Multiplica-se cada algarismo do numero pela base elevada a um expoente que será igual a zero para o algarismo menos significativo, sendo acrescido de uma unidade a cada algarismo mais representativo. Número binário: 110111011011 1 x 20 = 1 1 x 21 = 2 0 x 22 = 4 1 x 23 = 8 1 x 24 = 16 0 x 25 = 32 1 x 26 = 64 1 x 27 = 128 1 x 28 = 256 0 x 29 = 512 1 x 210 = 1024 1 x 211 = 2048 3547 Número octal: 6733 3 x 80 = 3 3 x 81 = 24 7 x 82 = 448 6 x 83 = 3072 3547 13 Número hexadecimal DDB 11 x 160 = 11 13 x 161 = 208 13 x 162 = 3328 3547 Exercícios: 1 – Converter para as novas bases: a – 1755(10) (2), (8), (16) b – 4523(8) (10) (16) c – ABA (16) (8) d – A5B2(16) (2), (8), (10) e – 10111001 (2) (8), (10), (16) f – 653(7) (10) APERFEIÇOAMENTO DA LÓGICA O QUE É LÓGICA 1.Não há consenso quanto à definição da lógica. Alguns autores definem-na como o estudo de processos válidos e gerais pelos quais atingimos a verdade, outros como a ciência das leis do pensamento, ou somente como o estudo dos princípios da inferência válida. Esta pluralidade de definições dá-nos conta da diversidade de estudos que são abrangidos pela Lógica. 2. A lógica foi criada por Aristóteles, no século IV a.C., como uma ciência autônoma que se dedica ao estudo dos atos do pensamento - Conceito, Juízo, Raciocínio, Demonstração do ponto de vista da sua estrutura ou forma lógica, sem ter em conta qualquer conteúdo material. É por esta razão que esta lógica aristotélica se designa também por lógica formal. 3. Em contraposição a este conceito de lógica formal, surgiu um outro - o de lógica material - para designar o estudo do raciocínio no que ele depende quanto ao seu conteúdo ou matéria. 4. Esta distinção entre lógica formal e lógica material permite-nos agora perceber porque: 14 Tendo em conta a sua forma, o raciocínio é correto ou incorreto ( válido ou invalido). Mas se atendermos à sua matéria, a conclusão pode ser verdadeira ou falsa. Exemplo: Nenhum homem sabe dançar Este dançarino é homem logo Este dançarino não sabe dançar Este raciocínio é formalmente correto, uma vez que a conclusão está corretamente deduzida. Mas a conclusão é falsa, uma vez que é falsa a primeira proposição ("Nenhum homem sabe dançar"). Estamos perante um raciocínio que tem validade formal, mas não tem validade material. Logo temos que concluir que é falso As pessoas utilizam lógica no cotidiano sem perceber; chegam mesmo a citá-la, sem entender direito o seu significado. Segundo o dicionário Aurélio, a lógica é a ―coerência de raciocínio, de idéias‖, ou ainda a ―seqüência coerente, regular e necessária de acontecimentos, de coisas‖. Você pode perceber isso nos exemplos a seguir: Ex: O número 3 é menor que o número 5. O número 7 é maior que o número 5. Logo, o número 3 é menor que os números 5 e 7. Quando chove não preciso regar as plantas do jardim. Hoje choveu. Logo, hoje não é preciso regar as plantas do jardim. Exercícios resolvidos: 1. Se eu passar no concurso, então irei trabalhar. Passei no concurso Logo, irei Trabalhar 2. Se ele me ama então casa comigo. Ele me ama Logo, ele casa comigo 3. Todos os brasileiros são humanos. Todos os paulistas são brasileiro. Logo, todos os paulistas são humanos 15 4. Se o Palmeiras ganhar o jogo, todos os jogadores receberão o bicho. Se o Palmeiras não ganhar o jogo, todos os jogadores receberão o bicho. Logo, todos os jogadores receberão o bicho 5. Todos os apartamentos são pequenos Todos os apartamentos são residências Logo, algumas residências são pequenas 6. O Flamengo é um bom time de futebol. O Palmeiras é um bom time de futebol. O Vasco é um bom time de futebol. O Cruzeiro é um bom time de futebol. Logo, todos os times brasileiros de futebol são bons (F) 7. Se num campeonato de futebol é verdade que ―quem não faz, leva‖, ou seja, time que não marca gol numa partida sofre ao menos um gol nessa mesma partida, então: a) em todos os jogos os dois times marcam gols b) nenhum jogo termina empatado c) o vencedor sempre faz um gol a mais que o vencido d) nenhum jogo termina 0 x 0, ou seja, sem gols e) resultados como 1 x 0, 2 x 0 ou 3 x 0 não são possíveis Solução: a) Se é verdade que ―quem não faz, leva‖, tem-se que o time que não marca qualquer gol leva pelo menos algum gol b) Logo, nenhuma partida termina sem gols, ou seja, 0 x 0 Gabarito: D 8. Se ―cada macaco fica no seu galho‖, então: a) tem mais macaco do que galho b) pode haver galho sem macaco c) dois macacos dividem um galho d) cada macaco fica em dois galhos e) dois galhos dividem um macaco Solução: a) Quando dizemos que cada macaco fica em seu galho, estamos afirmando que todo macaco fica em algum galho b) Não podemos dizer necessariamente que todo galho terá algum macaco pendurado. Logo, pode haver algum galho que fique sem macaco Gabarito: B 16 Exercícios: 1. Três alunos são suspeitos de não estarem matriculados no Curso de Raciocínio Lógico. O Aparecido entrevistou os três, para cobrar a matrícula, e obteve os seguintes depoimentos: AURO: ―Joaquim não pagou e Cláudia pagou‖ JOAQUIM: ―Se Auro não pagou, Cláudia também não pagou‖ CLÁUDIA: ―Eu paguei, mas pelo menos um dos outros não pagou‖ Pede-se: 1. Identificar os pagantes e os não pagantes, supondo que todos os depoimentos são verdadeiros 2. Identificar os mentirosos, supondo que todos pagaram as matrículas. 2. (ESAF) Se Beto briga com Glória, então Glória vai ao cinema. Se Glória vai ao cinema, então Carla fica em casa. Se Carla fica em casa, então Raul briga com Carla. Ora, Raul não briga com Carla. Logo. a. Carla não fica em casa e Beto não briga com Glória. b. Carla fica em casa e Glória vai ao cinema. c. Carla não fica em casa e Glória vai ao cinema. d. Glória vai ao cinema e Beto briga com Glória. e. Glória não vai ao cinema e Beto briga com Glória. 3. (ESAF) Se Carlos é mais velho do que Pedro, então Maria e Julia tem a mesma idade. Se Maria e Julia tem a mesma idade, então João é mais moço do que Pedro. Se João é mais moço do que Pedro, então Carlos é mais velho do que Maria. Ora, Carlos não é mais velho do que Maria. Então: a. Carlos não é mais velho do que Leila, e João é mais moço do que Pedro. b. Carlos é mais velho que Pedro, e Maria e Julia tem a mesma idade. c. Carlos e João são mais moços do que Pedro. d. Carlos é mais velho do que Pedro, e João é mais moço do que Pedro. e. Carlos não é mais velho do que Pedro, e Maria e Julia não tem a mesma idade. 4. (ESAF)José quer ir ao cinema assistir ao filme ―Fogo Contra Fogo‖, mas não tem certeza se o mesmo está sendo exibido. Seus amigos, Maria, Luis e Julio têm opiniões discordantes sobre se o filme está ou não em cartaz. Se Maria estiver certa, então Julio está enganado. Se Julio estiver enganado, então Luis está enganado. Se Luis estiver enganado, então o filme não está sendo exibido. Ora, ou o 17 filme ―Fogo contra Fogo‖ está sendo exibido, ou José não ira ao cinema. Verificou- se que Maria está certa. Logo, a. O filme ―Fogo contra Fogo‖ está sendo exibido. b. Luis e Julio não estão enganados. c. Julio está enganado, mas Luis não. d. Luis está enganado, mas Julio não. e. José não irá ao cinema. O texto abaixo refere aos exercícios de 5 a 8: Chapéuzinho Vermelho ao entrar na floresta, perdeu a noção dos dias da semana. A Raposa e o Lobo Mau eram duas estranhas criaturas que freqüentavam a floresta. A Raposa mentia às segundas, terças e quartas-feiras, e falava a verdade nos outros dias da semana. O Lobo Mau mentia às quintas, sextas e sábados, mas falava a verdade nos outro dias da semana. (Adaptado de Linguagem Lógica de Iole de Freitas Druck IME - USP - publicado na revista do professor de Matemática) 5. Um dia Chapeuzinho Vermelho encontrou o Raposa e o Lobo Mau descansando à sombra de uma árvore. Eles disseram: Raposa: Ontem foi um dos meus dias de mentir. Lobo Mau: Ontem foi um dos meus dias de mentir. A partir dessas afirmações, Chapéuzinho Vermelho descobriu qual era o dia da semana. Qual era? 6. Em outra ocasião Chapéuzinho Vermelho encontrou o Raposa sozinha. Ela fez as seguintes afirmações: Eu menti ontem. Eu mentirei daqui a 3 dias. Qual era o dia da semana? 7. Em qual dia da semana é possível a Raposa fazer as seguintes afirmações? Eu menti ontem. Eu mentirei amanhã. 8. Em que dias da semana é possível a Raposa fazer cada uma das seguintes afirmações: a) Eu menti ontem e eu mentirei amanhã. b) Eu menti ontem ou eu mentirei amanhã. c) Se menti ontem, então mentirei de novo amanhã. 18 9. Uma vela queima-se integralmente em três horas. Em quanto tempo se queimariam três velas do mesmo tamanho e acesas ao mesmo tempo? 10. O dobro do triplo do dobro de três. Que número é esse? 11. Trinta operários podem cavar trinta buracos em trinta dias. Assim sendo, em quantos dias poderão 12 operários cavar 12 buracos? 12. Um número multiplicado por 13, dá 65; dividido por ele mesmo,1; elevado ao cubo, 125. Qual é o número? 13. Qual dos números não pertence a série? a) 9 – 7 – 8 – 6 b) 7 – 5 – 6 - 3 14. Maria foi ao mesmo tempo a décima terceira melhor classificada e a décima terceira pior classificada de um concurso. Quantas eram as concorrentes? 15. Uma lesma deve subir um poste de 10 metros de altura. De dia sobe 2m e à noite desce 1m. Em quantos dias atingirá o topo do poste? 16. O pai do padre é filho do meu pai. O que eu sou do Padre? 17. Qual é o dobro da metade de dois? Sequência Lógica Sequência lógica são passos executados até atingir um objetivo ou solução de um problema. Às vezes o raciocínio funciona de forma desordenada. Quantas vezes você já ouviu as frases: ―E se acontecer aquilo?‖, ou ―É, mas eu não tinha pensado nisso!‖. Neste exemplo estão descritas ações de quem vai a um banco; entretanto, veja se seria possível retirar o dinheiro obedecendo à seqüência descrita abaixo: Ex: 1. Sair do banco. 2. Aguardar a vez de ser atendido. 3. Entrar na fila do caixa. 4. Digitar a senha. 19 5. Entrar no banco. 6. Informar o valor a ser retirado. 7.Procurar a fila do caixa. 8. Pegar o comprovante de saque, o cartão eletrônico e o dinheiro. 9. Entregar o cartão eletrônico ao funcionário que atende no caixa. 10. Conferir o valor em dinheiro. JOGOS E PASSATEMPOS 1) Que número fica diretamente acima de119 na seguinte disposição de números? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 . . . . . . . . . . 2) Um pequeno caminhão pode carregar 50 sacos de areia ou 400 tijolos. Se forem colocados no caminhão 32 sacos de areia. Quantos tijolos podem ainda ele carregar? 3) Rafael caiu no fundo de um poço com 30 metros de profundidade. Todos os dias ele sobe 3 metros e escorrega 2 metros. Neste ritmo, quando chegará em cima? 4) Se a média de cinco números inteiros consecutivos é 17, qual o maior dos 5 números? 5) O pai do meu neto é o neto do meu pai. Quantas pessoas estão envolvidas? 6) Em um restaurante, comprando-se 3 sanduíches a R$ 1,00 cada, se ganha um, de graça. Se quarenta e cinco sanduíches foram consumidos, quanto dinheiro foi pago? 7) Você precisa usar 4 litros de água numa receita. Use os jarros para conseguir a medida certa, sendo que suas capacidades são 5 e 3 litros. 8) Uma fita de vídeo pode gravar 2 horas na velocidade SP, 4 horas na velocidade LP e 6 horas na velocidade SLP. Após ter sido gravada durante 32 minutos na velocidade SP e durante 44 minutos na velocidade LP, durante quantos minutos a fita poderá ser gravada na velocidade SLP até o seu término? 20 9) Uma de nove moedas é mais pesada que as outras. Descubra qual, usando uma balança de dois pratos, apenas duas vezes. 10) Em 10 pilhas de tijolos, existe uma pilha onde os tijolos pesam metade dos tijolos das outras pilhas. Como podemos determinar qual das pilhas contém os tijolos mais leves, efetuando somente uma pesagem? 11) Qual dos cinco itens representa a melhor comparação? ―Arvore está para o chão assim como chaminé está para...‖ a) fumaça b) tijolo c) garagem d) céu e) casa 12) Depois de doar um quarto de sua mesada ao irmão e ganhar mais cinco reais, ele ficou com 20 reais. Qual era o valor de sua mesada? a) 10 reais b) 30 reais c) 20 reais d) 35 reais e) 25 reais 13) Uma das opções abaixo, não tem relação com as outras. a) pedreiro b) maratonista c) mecânico d) carpinteiro e) agricultor 14) Do ponto de vista do volume, como ficaria a ordem abaixo? a) kg chumbo; kg isopor; gr ouro; litro água; 1 moeda b) kg isopor; kg chumbo; gr ouro; litro água; 1 moeda c) kg chumbo; gr ouro; litro água; 1 moeda; kg isopor d) kg ouro; 1 moeda; kg chumbo; litro água; kg isopor e) kg ouro; litro agua; kg isopor; kg chumbo; 1 moeda 15) Segundo a cronologia, dentre as opções abaixo, qual o grupo com a ordem correta? a) ontem, amanhã, hoje, anteontem, depois de amanhã b) amanhã, ontem, hoje, anteontem, depois de amanhã c) anteontem, ontem, hoje, amanhã, depois de amanhã d) hoje, ontem, amanhã, anteontem, depois de amanhã e) ontem, hoje, anteontem, amanhã, depois de amanhã 16) Qual dos cinco itens se parece menos com os outros? a) tato b) sorriso c) paladar d) visão e) audição 21 CONSTRUÇÃO DE ALGORITMOS A automatização de tarefas é um aspecto marcante da sociedade moderna. O aperfeiçoamento tecnológico alcançado, com respeito a isto, teve como elementos fundamentais à análise e a obtenção de descrições da execução de tarefas em termos de ações simples o suficiente, tal que pudessem ser automatizadas por uma máquina especialmente desenvolvida para este fim, O COMPUTADOR. Em ciência da computação houve um processo de desenvolvimento simultâneo e interativo de máquinas (hardware) e dos elementos que gerenciam a execução automática (software) de uma dada tarefa. E essa descrição da execução de uma tarefa, como considerada acima, é chamada algoritmo. O objetivo dessa matéria é a Lógica de Programação dando uma base teórica e prática, suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de programação. Serámostrado também um grupo de algoritmos clássicos para tarefas cotidianas, tais como: ordenação e pesquisa. Definição de Algoritmo "O conceito central da programação e da Ciência da Computação é o conceito de algoritmos, isto é, programar é basicamente construir algoritmos." É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa. "O algoritmo pode ser usado como uma ferramenta genérica para representar a solução de tarefas independente do desejo de automatizá-las, mas em geral está associado ao processamento eletrônico de dados, onde representa o rascunho para programas (Software)." "Serve como modelo para programas, pois sua linguagem é intermediária à linguagem humana e às linguagens de programação, sendo então, uma boa ferramenta na validação da lógica de tarefas a serem automatizadas." "Um algoritmo é uma receita para um processo computacional e consiste de uma série de operações primitivas, interconectadas devidamente, sobre um conjunto de objetos. Os objetos manipulados por essas receitas são as variáveis." Atenção Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos. O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios. 22 Algoritmo não se aprende: - Copiando Algoritmo - Estudando Algoritmo Algoritmo só se aprende: - Construindo Algoritmo - Testando Algoritmo Características Todo algoritmo deve apresentar algumas características básicas: Ter fim; Não dar margem à dupla interpretação; Capacidade de receber dados de entrada; Poder gerar informações de saída; Ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis em um tempo finito). Conceitos Algoritmo É uma seqüência finita de ações que descrevem como um problema pode ser resolvido. Instrução São frases que indicam as ações a serem executadas. São compostas de um verbo no imperativo/infinitivo mais um complemento. Ex. Bata(bater) duas claras em neve Ligue (ligar) os faróis Abra (abrir) a porta Programa Ações de um algoritmo obedecendo à sintaxe de uma linguagem de programação. Identação/Indentação É o deslocamento para a direita de uma instrução, significa que tais instruções estão subordinadas a instrução anterior. FORMAS DE REPRESENTAÇÃO Algoritmos podem ser representados, dentre outras maneiras, por: 23 1. Descrição narrativa Faz-se uso do português para descrever algoritmos. Ex: Receita de bolo: 1 Providencie manteiga, ovos, 2 kg de massa etc. 2 Misture os ingredientes 3 Despeje a mistura na forma de bolo 4 Leve a forma ao forno 5 Espere 20 minutos 6 Retire a forma do forno 7 Deixe esfriar 8 Prove Vantagens: O português é bastante conhecido por nós. Desvantagens Imprecisão; Pouca confiabilidade; Extensão (normalmente escreve-se muito para dizer pouca coisa). 2. Fluxograma Utilização de símbolos gráficos para representar algoritmos. No fluxograma existem símbolos padronizados para início, entrada de dados, cálculos, saída de dados, fim etc. Processamento Entrada de dados Decisão Saída de dados Início/Fim 24 Temos ainda um símbolo conhecido como conector, que é utilizado quando for preciso dividir o diagrama, colocando uma letra ou um número no símbolo para identificar os pares da conexão. Conector na mesma página Conector entre páginas Vantagens: Uma das ferramentas mais conhecidas; Figuras dizem muito mais que palavras; Padrão mundial. Desvantagens Pouca atenção aos dados, não oferecendo recursos para descrevê-los ou representá-los; Complica-se à medida que o algoritmo cresce. Ex: Inicio NUM NUM = NUM * 2 NUM Fim 25 3. Linguagem algorítmica Consiste na definição de uma pseudolinguagem de programação, cujos comandos são em português. Ex: num, dobro INTEIRO LEIA num dobro = num * 2 ESCREVA dobro Vantagens: Usa o português como base; Podem-se definir quais e como os dados vão estar estruturados; Passagem quase imediata do algoritmo para uma linguagem de programação qualquer. Desvantagens Exige a definição de uma linguagem não real para o trabalho; Não padronizado. Fases de um Algoritmos Quando temos um problema e vamos utilizar um computador para resolvê-lo inevitavelmente temos que passar pelas seguintes etapas: a) Definir o problema. b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema. c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que deverá a princípio, resolver o problema. d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser retornado para a fase de estudo para descobrir onde está a falha. TIPOS DE DADOS Os dados são representados pelas informações a serem processadas por um computador. Estas informações estão caracterizadas por quatro tipos de dados: inteiros, reais, caracteres e lógicos. Tipo Inteiro Dados numéricos positivos ou negativos, excluindo-se qualquer número fracionário. Ex. 35, 0, -56 26 Tipo Real Dados numéricos positivos, negativos e números fracionários. Ex. 1.2,-45.897 Tipo Caractere São tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas. Sendo também conhecido como: alfanumérico, string, literal ou cadeia. Ex. ―PROGRAMAÇÃO‖, ―Rua Alfa, 52 apto 1‖, ―7‖, ―249-4455‖ Tipo Lógico São tipos lógicos ou booleanos, os dados com valores: verdadeiro e falso, sendo que este tipo poderá representar um dos dois valores. Ex: 4+5<7 = F VARIÁVEL Uma variável pode ser vista como uma caixa com um rótulo ou nome colado a ela, que num dado instante guarda um determinado objeto. O conteúdo desta caixa não é algo fixo, permanente. Na verdade, essa caixa pode ter seu conteúdo alterado diversas vezes. Contudo, o conteúdo deve ser sempre do mesmo tipo. Por exemplo caso tenhamos uma caixa (variável) rotulada com FATOR que contém o valor 5. Como seu tipo é inteiro, em um determinado instante essa caixa poderá conter qualquer valor numérico (inteiro, positivo, negativo ou zero). Entretanto, em um determinado instante, ela conterá um, e somente um valor. Variáveis são palavras que tem um significado bem específico em um algoritmo. Para que o computador possa executar comandos que envolvem variáveis da maneira correta, ele deve conhecer os detalhes das variáveis que pretendemos usar. Esses detalhes são: o identificador desta variável e o tipo de valores que essa variável irá conter. Precisamos assim, de uma maneira de especificar esses detalhes e comunicá-los ao computador. Para isso devemos declarar nossas variáveis logo no início do algoritmo. A identificação ou nomeação de variáveis segue algumas regras: a. nomes de variáveis não podem ser iguais a palavras reservadas; b. nomes de variáveis devem possuir como primeiro caractere uma letra ou sublinhado '_' (os outros caracteres podem ser letras, números e sublinhado); c. Nomes de variáveis não podem conter espaços em branco; d. Nomes de variáveis não podem conter caracteres especiais; e. Devem apresentar uma noção do que está sendo armazenado. Exemplo:27 Identificadores válidos: NOME, TELEFONE, IDADE_FILHO, IdadeFilho, NOTA1, Est_Civil Identificadores inválidos: 3Endereco, Estado Civil, endereço, while, numero/complemento Você deve estar se perguntando por que a palavra ―while e if‖ são identificadores inválidos. Eles são inválidos, pois são palavras reservadas da linguagem. A Programação de computadores é uma das competências básicas de qualquer profissional que lide com computadores. Surge, portanto a necessidade da aprendizagem de linguagens de programação para o desenvolvimento desta competência. Qualquer linguagem de programação é um ambiente de desenvolvimento de algoritmos que visa o desenvolvimento do raciocínio algorítmico através de um ambiente simples contendo ferramentas visuais para desenvolvimento e depuração dos algoritmos desenvolvidos. Neste ambiente privilegiamos o desenvolvimento de algoritmos ao invés do desenvolvimento de programas. Bons Algoritmos. Diferenças entre compiladores e interpretadores Compiladores e interpretadores são formas de tradução de um código geralmente de alto nível para um código que o computador (a máquina) interprete. Este tradutor tem a função de traduzir uma linguagem abstrata para uma linguagem binária. Compilador Compilador é um programa ou um grupo de programas que transformam um código escrito em uma linguagem de programação (código-fonte) em outro código que é interpretado pelo computador. Este código compilado é chamado de código objeto, podendo ser um arquivo executável que é reproduzido em um sistema operacional, por exemplo. Este tipo de tradutor é um dos mais utilizados. Os compiladores analisam o código em três partes, de forma sintática ou hierárquica, análise léxica ou linear e análise semântica. Alguns compiladores contam com um pré-processamento. Este pré- processamento é responsável por modificar o código-fonte conforme necessidades que o compilador identifique que sejam necessárias, por exemplo, otimização de código. Vantagens: O código compilado é mais rápido de ser acessado; 28 Impossibilita ou pelo menos dificulta ser quebrado e visualizado o código-fonte original; Permite otimização do código por parte do compilador; Compila o código somente se estiver sem algum erro. Desvantagens: Para ser utilizado o código precisa passar por muitos níveis de compilação; Assim como vantagem a possibilidade de não poder visualizar o código-fonte, pode ser uma desvantagem; Processo de correção ou alteração do código requer que ele seja novamente recompilado. Interpretador O interpretador ao contrário do compilador roda o código-fonte escrito como sendo o código objeto, ele traduz o programa linha a linha, o programa vai sendo utilizado na medida em que vai sendo traduzido. Cada execução do programa ele precisa ser novamente traduzido e interpretado. O interpretador analisa sintaticamente e semanticamente o código, se estas duas etapas forem realizadas e executadas de forma correta o código está pronto para funcionar. Vantagens: Correções e alterações são mais rápidas de serem realizadas; Código não precisa ser compilado para ser executado; Consomem menos memória. Desvantagens: Execução é mais lenta do programa; Necessita sempre ser lido o código original para ser executado A linguagem C# (C Sharp) C# (pronunciada ‖C Sharp‖), é uma linguagem de programação da Plataforma .NET, derivada de C/C++ orientada `a objetos. É a linguagem nativa para .NET Common Language Runtime(CLR), mecanismo de execução da plataforma .NET. Isso possibilita a convivência com várias outras linguagens especificadas pela Common Language Subset(CLS). Por exemplo, uma classe base pode ser escrita em C#, derivada em Visual Basic e novamente derivada em C#. Características do C# Simplicidade: os projetistas de C# costumam dizer que essa linguagem é tão poderosa quanto o C++ e tão simples quanto o Visual Basic. Completamente orientada a objetos: em C#, qualquer variável tem de fazer parte de uma classe. Fortemente tipada: isso ajuda a evitar erros por manipulação imprópria de tipos, atribuições incorretas etc. Gera código gerenciado: assim como o ambiente .NET é gerenciado, assim também é a linguagem C#. 29 Tudo é um objeto: System. Object é a classe base de todo o sistema de tipos de C#. Controle de versões: cada assembly gerado, seja como EXE ou DLL, tem informação sobre a versão do código, permitindo a coexistência de dois assemblies homônimos, mas de versões diferentes no mesmo ambiente. Suporte a código legado: o C# pode interagir com código legado de objetos COM e DLLs escritas em uma linguagem não gerenciada. Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver código não gerenciado, chamado ‖ênfase‖. Linguagem gerenciada: os programas desenvolvidos em C# executam num ambiente gerenciado, o que significa que todo o gerenciamento de memória é feito pelo runtime via o GC (Garbage Collector), e não diretamente pelo programador, reduzindo as chances de cometer erros comuns a linguagens de programação onde o gerenciamento da memória é feito diretamente pelo programador. CSC (Compilador C#) Muitos acreditam que a única forma de criar programas utilizando a linguagem de programação Csharp é tendo o mesmo instalado no computador. No entanto quando a plataforma .NET Framework foi introduzida houve a inclusão do compilador do Csharp na sua instalação, ou seja, basta ter o Framework (gratuito) instalado na máquina para poder fazer uso do CSC (Compilador do C Sharp) Passo a passo para a utilização do CSC em máquinas com o Windows Em primeiro lugar é necessário ter o Framework instalado. Ele é gratuito e pode ser baixado do site da Microsoft (normalmente já vem instalado na máquina com Windows; No passo seguinte é preciso localizar o arquivo CSC.EXE. É possível usar o recurso de Pesquisa do Windows para essa finalidade; Ao final da pesquisa, na lista apresentada, clique com o botão direito sobre o arquivo CSC.EXE e escolha a opção Propriedades. Ao abrir a caixa de diálogo selecione o conteúdo do campo Local e pressione CTRL+C; Clique com o botão direito sobre o item Meu computador e no menu de atalho escolha a opção Propriedades. Na caixa de diálogo que irá surgir, clique na aba Avançado e em seguida no botão Variáveis de ambiente; Na seção Variáveis de ambiente localize o item Path e sobre ele clique duas vezes; No campo Valor da variável, sem apagar o que já está preenchido, adicione ―;‖ e pressione CTRL+V. Esse procedimento servirá para indicar ao Windows que ele deverá procurar no local acrescentado determinado programa quando ele for executado; Obs: Dependendo da versão do Windows, a rotina de atualização do Path será diferente. Após os procedimentos acima serem executados, basta criar o seu programa usando qualquer editor de textos simples, ou seja, que não possua recursos de formatação como por exemplo o Bloco de notas (Notepad++) e salvar o arquivo no local desejado (área de trabalho), a partir daí basta abrir o prompt de comando digitar CSC seguido do local onde o código-fonte foi salvo (área de trabalho) e o nome do arquivo. As mensagens que serão exibidas a seguir são mensagens do compilador e se houver algum erro na estrutura do código-fonte você será informado. Primeiro programa O pequeno trecho de código a seguir implementa o clássico programa ―Olá mundo‖: using System; namespace Tarefa { class HelloWorld { static void Main( ) { // escrevendo no console Console.WriteLine("Hello World !!!"); Console.ReadLine( ); } } } O Cabeçalho do programa A primeira linha do nosso programa, que escreve no console ―Olá mundo em C#‖, contém a informação do namespace System, que contém as classesprimitivas necessárias para ter acesso ao console do ambiente. NET. Para incluir um namespace em C#, utilizamos a cláusula using seguida do nome do namespace. A cláusula using referencia as classes a serem utilizadas, System atua como namespace das classes. O namespace System contém muitas classes, uma delas é a Console. WriteLine O método WriteLine, simplesmente emite a string no console. Main O método Main é o ponto de entrada de execução do seu programa. A classe que será executada inicialmente possui embutida a função estática Main. Uma ou mais classes podem conter a função Main, entretanto, apenas uma será o ponto de entrada, indicada na compilação pelo parâmetro /main:<tipo>, ou simplificando /m:<tipo>. O método Main, pode ser declarado de 4 formas: Retornando um vazio (void): public static void Main(); Retornando um inteiro(int): public static int Main(); Recebendo argumentos, através de um array de string e retornando um vazio: public static void Main(string[] args); Recebendo argumentos, através de um array de string e retornando um inteiro: public static int Main(string[] args). Estrutura de um programa O esqueleto de um programa em C#, apresentando alguns dos seus elementos mais comuns, segue abaixo: using System; namespace Tarefa { public class Programa { public static void Main ( string [ ] args ) { Math m = new Math (); Console . WriteLine ( m . Sum (1 ,1) ) ; } public class Math : Object { public int Sum ( int a , int b ) { return ( a + b ) ; } } } } Pode ser dividida em um ou mais arquivos, e conter: • Namespaces: são a forma lógica de organizar o código-fonte; • Tipos: classes, estruturas, interfaces, delegações, enums; • Membros: constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores; A declaração de uma classe O C# requer que toda a lógica do programa esteja contida em classes. Após a declaração da classe usando a palavra reservada class, temos o seu respectivo identificador. Para quem não está familiarizado com o conceito de classe, apenas adiantamos que uma classe é um tipo abstrato de dados que no paradigma de programação orientada a objetos é usado para representar objetos do mundo real. No exemplo acima, temos uma classe que contém apenas o método Main( ) e não recebe nenhum parâmetro. O Método Main( ) Todo programa C# deve ter uma classe que defina o método Main( ), que deve ser declarado como estático usando o modificador static, que diz ao runtime que o método pode ser chamado sem que a classe seja instanciada. É através desse modificador que o runtime sabe qual será o ponto de entrada do programa no ambiente Win32, para poder passar o controle ao runtime .NET. O ―M‖ maiúsculo do método Main é obrigatório, e seu valor de retorno void significa que o método não retorna nenhum valor quando é chamado. Algumas variantes do método Main( ) // Main recebe parâmetros na linha de comando via o array // args static void Main(string[ ] args) { // corpo do método } // Main tem como valor de retorno um tipo int static int Main( ) { // corpo do método } A forma do método Main( ) irá ser usada vai depender dos seguintes fatores: O programa vai receber parâmetros na linha de comando? Então esses parâmetros serão armazenados no array args. Quando o programa é finalizado, é necessário retornar algum valor ao sistema? Então o valor de retorno será do tipo int. Um programa escrito em C# pode ter mais de uma classe que implementa o método Main( ). Nesse caso, deverá ser especificado em tempo de compilação em qual classe se encontra o método Main( ), que deverá ser chamado pelo runtime quando a aplicação for executada. Exemplo: using System; namespace Tarefa { class programa { static void Main( ) { Console.WriteLine("Método Main( ) da classe 1"); } } class class2 { static void Main( ) { Console.WriteLine("Método Main( ) da classe 2"); } } } Exemplo de um programa using System; namespace Tarefa // o namespace é utilizado para organizar o código. Podemos ter vários no mesmo arquivo ou simplesmente nenhum. { class programa // podemos ter várias classes dentro de um namespace, mas apenas uma que irá conter o método estático Main, pois este é responsável pelo "arranque" do programa { static void Main(string[ ]args) // os parâmetros dentro do Main são opcionais, você não precisa colocar. Vai funcionar se colocar assim Main() { string nome; int idade; double salario; nome = "Pedro da Silva"; idade = 42; salario = 937.00; Console.WriteLine("Nome.....:{0}", nome); Console.WriteLine("Idade....:{0}", idade); Console.WriteLine("Salário..:{0}\n", salario); // o {0} representa a variável nome, {1} representa a variável idade e assim sucessivamente Console.WriteLine("Bom dia{0}, você tem {1}anos de idade e ganha{2} por mês", nome, idade, salario); Console.ReadKey (); } } } Alguns últimos detalhes adicionais Blocos de código são agrupados entre chaves { }. Cada linha de código é separada por ponto-e-vírgula. Os comentários de linha simples começam com duas barras//. Comentários em bloco são feitos usando os terminadores /* (de início) e */ (de fim). /* Este é um comentário de bloco Segue o mesmo estilo de C/C++ */ O C# é sensível ao contexto, portanto int e INT são duas coisas diferentes. int é uma palavra reservada que é um alias do tipo System.Int32. INT poderia ser um identificador, entretanto não é recomendado usar como identificadores de variáveis o nome de um tipo ou palavra reservada como no exemplo citado. Sempre declare uma classe onde todos os aspectos inerentes à inicialização da aplicação serão implementados, e obviamente, que conterá o método Main( ) também. No decorrer deste livro seguiremos fielmente essa regra nos nossos exemplos. Palavras reservadas em C# abstract event new struct as explicit null switch base extern object this bool false operator throw break finally out true byte fixed override try case float params typeof catch for private uint char foreach protected ulong checked goto public unchecked class if readonly unsafe const implicit ref ushort continue in return using decimal int sbyte virtual default interface sealed volatile delegate internal short void do is sizeof while double lock stackalloc else long static enum namespace string Formatando a saída padrão A formatação da saída padrão é feita usando os chamados ―caracteres de escape‖ (veja a tabela abaixo). Vejamos um exemplo: // \t = TAB // \n = quebra de linha e retorno de carro (CR LF) Console.WriteLine( "var1: {0} \t var2: {1}\t var3: {2}\n", var1, var2, var3); Caracteres de Escape Significado \n Insere uma nova linha \t TAB \a Dispara o som de um alarme sonoro simples \b Apaga o caractere anterior da string que está sendo escrita no console(backspace) \r Insere um retorno de carro \0 Caractere NULL (nulo) Recebendo parâmetros na linha de comando Para receber parâmetros na linha de comando, ou seja, na chamada de um programa quando digitamos o nome do executável no prompt da linha de comando do DOS (como ―ScanDisk /All /AutoFix‖, por exemplo), o método Main() precisa ser declarado da seguinte forma: // não retorna nenhum valor ao sistema staticvoid Main(string[ ] args) ou, // retorna um valor do tipo int ao sistema static int Main(string[ ] args) O parâmetro args é um array de strings que recebe os parâmetros passados quando a aplicação é chamada na linha de comando. A seguir mostramos uma das formas da varrer os parâmetros recebidos: - foreach (string cmd in args) { int i = 0; Console.WriteLine("Par {0}: {1}", i, cmd); i++; } Para saber o número de argumentos que foram passados, usamos o método Length( ) do array args da seguinte forma: numArgs = args.Length( ); Quando na linha de comando são recebidos parâmetros numéricos, estes devem ser convertidos de string para o tipo numérico respectivo usando a classe Convert. Exemplo: Convert.ToInt32(varString) Variáveis O que e uma variável? Podemos dizer que variável é um lugar que usamos para armazenar uma informação que pode sofrer alteração durante a execução de um programa. As variáveis são usadas para guardar valores que serão usados durante o decorrer do programa, para guardar informações fornecidas pelo usuário e que será exibida mais tarde. Cada variável que usamos e identificada por um nome e por um tipo. Você pode guardar informação de diversos tipos em uma variável: números pequenos, números médios, números grandes, letras, palavras, frases, páginas de texto, etc...; Então dizemos que uma variável tem um nome que a identifica e um tipo de dado que está armazenando. Quando você guarda uma informação em uma variável está usando a memória do computador para isto, e, quanto maior a informação que você guardar mais memória você vai gastar dependendo do tipo de variável que decidir usar. Se você precisar realizar cálculos que envolvam somente valores inteiros deverá procurar usar uma variável do tipo Int, você pode usar uma variável do tipo Long , Float e Double mas com isto irá gastar mais memória. Variáveis na Linguagem C# Na linguagem C# as variáveis estão agrupadas em algumas categorias como: Static: existe apenas uma única copia desta variável para todas as instâncias de uma classe. Uma variável static começa a existir quando um programa começa a executar, e deixa de existir quando o programa terminar. Instance: existe uma copia para cada instância de uma classe. Uma variável Instance começa a existir quando uma instância daquele tipo é criado, e deixa de existir quando não houver nenhuma referência aquela instância ou quando e método Finalize e executado. Array: é uma matriz que e criada em tempo de execução. Tipos de dados Como toda linguagem de programação o C# também apresenta seu grupo de tipos de dados básico. Esses tipos são conhecidos como tipos primitivos ou fundamentais por serem suportados diretamente pelo compilador, e serão utilizados durante a codificação na definição de variáveis, parâmetros, declarações e até mesmo em comparações. A Tabela 1 apresenta os tipos básicos da linguagem C# relacionados juntamente com os tipos de dados do .NET Em C#, todos eles possuem um correspondente na Common Language Runtime(CLR), por exemplo int, em C#, refere-se a System.Int32. Tipos primitivos do C# Tipo C# Tipo .NET Descrição Faixa de dados bool System.Boolean Booleano true ou false byte System.Byte Inteiro de 8-bit com sinal -127 a 128 char System.Char CaracterUnicode de 16-bit U+0000 a U+ffff decimal System.Decimal Inteiro de 96-bit com sinal com 28-29 digitos 1,0 x 10−28 a 7,9 x 1028 Significativos double System.Double Flutuante IEEE 64-bit com +-5,0 x 10−324 a +-1,7 x 10324 float System.Single Flutuante IEEE 32-bit com +-1,5 x 10−45 a +-3,4 x 1038 int System.Int32 Inteiro de 32-bit com sinal -2.147.483.648a 2.147.483.647 long System.Int64 Inteiro de 64-bit com sinal -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 Object System.Object Classe base - Sbyte System.Sbyte Inteiro de 8-bit sem sinal 0 a 255 Short System.Int16 Inteiro de 16-bit com sinal -32,768 a 32,767 String System.String String de caracteres Unicode - Uint System.UInt32 Inteiro de 32-bit sem sinal 0 a 4,294,967,295 Ulong System.UInt64 Inteiro de 64-bit sem sinal 0 a 18,446,744,073,709,551,615 Ushort System.UInt16 Inteiro de 16-bit sem sinal 0 a 65,535 Tipos Valor e Tipos Referência Os tipos de dados no C# são divididos em 3 categorias: Tipos valor(value types); Tipos referência(reference types); Tipos ponteiro(pointer types). Tipos valor armazenam dados em memória enquanto tipos referência armazenam uma referência, ou o endereço, para o valor atual. Quando utilizamos uma variável do tipo referência não estaremos acessando seu valor diretamente, mas sim um endereço referente ao seu valor, ao contrário do tipo valor que permite o acesso diretamente a seu conteúdo. Os tipos ponteiro, apenas apontam para um endereço de memória. Exercícios 1. Observe os identificadores abaixo, assinale os que seriam permitidos e ao lado justifique todas as respostas. ( ) NOME COMPLETO ................................................................. ( ) EMPRESA ................................................................. ( ) 1º NOME ................................................................. ( ) DIA/MÊS/ANO ................................................................. 2. Em um programa de computador, qual a função de uma variável? 3. Observe os dados abaixo e diga o tipo de cada um. ―Lógica de Programação‖ _________________________________ 23 ____________________________________ 1.77 ____________________________________ 01/01/01 ____________________________________ 4. Falando de variáveis, defina atribuição e que símbolo é utilizado para atribuir em VB? 5. Complete as declarações de variáveis abaixo: ____________ altura as ____________ _____________ nome as ______________ 6. Faça a declaração em VB, de três variáveis do tipo inteiro, duas variáveis do tipo decimal, duas variáveis de um único caractere, duas variáveis do tipo lógico e uma do tipo data: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Conversão de Tipos Converter um tipo de dado em número ou em literal é comum em situações de programação. Devemos considerar alguns aspectos para a conversão de n´úmeros: Como existem diversos tipos de n´úmeros, inteiros, ponto flutuante ou decimal, os valores são convertidos sempre para o tipo de maior faixa de valores. Por exemplo, o tipo long é convertido para o ponto flutuante, mais é importante ressaltar que o contrario causa um erro. Os tipos de menor faixa são convertidos para os de maior faixa. Por exemplo, o tipo int pode ser convertido para: long, float, double ou decimal. A conversão dos tipos de ponto flutuante(float, double) para decimal causa erro. A conversão entre os tipos com sinal e sem sinal de valores inteiros com o mesmo tamanho causa erro. Por exemplo, entre o tipo int e unit. Por exemplo: Exemplo de conversão automática de tipos int VarInteiro = 32450; long VarLong = VarInteiro; float VarFloat = VarLong; double VarDouble = VarFloat; decimal VarDecimal = VarLong; byte VarByte = (byte)VarInteiro; int VarInteiro = (int)31.245F; Tipos de conversão automática Tipo Converte em sbyte short, int, long, float, double, decimal Byte short, ushort, int, uint, long, ulong, float, double, decimal short int, long, float, double, decimal ushort int, uint, long, ulong, float, double, decimal Int long, float, double, decimal Uint long, ulong, float,double, decimal Long float, double, decimal ulong long, double, decimal Char ushort, int, uint, long, ulong, float, double, decimal Float Double O Objeto Convert Em C# temos o objeto Convert que é usado para converter um tipo de dado em outro. Os tipos de dados suportados são: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime e String. Por exemplo: Exemplo de utilização do objeto Convert double dNumber = 23.15; int iNumber = System.Convert.ToInt32(dNumber); bool bNumber = System.Convert.ToBoolean(dNumber); String strNumber = System.Convert.ToString(dNumber); char chrNumber = System.Convert.ToChar(strNumber[0]); Programa exemplo: using System; namespace Tarefa { class programa { static void Main(string[] args) { string nome; int idade; double salario; Console.Write ("Qual o seu nome?"); nome = Console.ReadLine(); // a função ReadLine retorna uma string, por isso não há necessidade de conversão de dados Console.Write("Qual a sua idade?"); idade = Convert.ToInt16 (Console.ReadLine()); // a classe Convert possui diversos métodos de conversão de dados. o método ToInt16 converterá o conteúdo retornado em int Console.Write("Quanto você ganha?"); salario = Convert.ToDouble (Console.ReadLine()); // ToDouble converterá para double Console.WriteLine("Nome.....:{0}", nome); Console.WriteLine("Idade....:{0}", idade); Console.WriteLine("Salário..:{0}\n", salario); // o {0} representa a variável nome, {1} representa a variável idade e assim sucessivamente Console.WriteLine("Bom dia {0}, você tem {1} anos de idade e ganha {2} por mês", nome, idade, salario); Console.ReadKey(); } } } Operadores C# é uma linguagem muito rica em operadores. Estes representados por símbolos são utilizados na construção de expressões. A sintaxe de expressão do C# é baseada na sintaxe do C++. Os operadores são categorizados em diversas funcionalidades. A tabela 3 apresenta essas divisões. Quando uma expressão possui múltiplas operações, a precedência dos operadores é levada em consideração na avaliação da mesma. Normalmente, as expressões são avaliadas da esquerda para direita, exceto para operações de atribuição e condicional, porém a precedência pode ser alterada através do uso do parênteses. Operadores do C# Categoria Operadores Aritmética & + - * / % Lógica (boolena e bitwise) ! && || true false Concatenação de string + Incremento e decremento ++ – Shift << >> Relacional == != <> <= >= Atribuição = += -= *= /= %= &= —= =ˆ <<= >>= Acesso a membro . Indexação [] Indexação () Condicional ?: Delegate (concatenação e remoção) + - Delegate (concatenação e remoção) new Informação de tipo is sizeof typeof Controle de exceção de overflow checked unchecked Indireção e endereço * -¿ [] & Operadores Aritméticos Os operadores aritméticos são utilizados na maioria das expressões para execução de cálculos. Numa expressão, eles podem produzir resultados fora da faixa de valores. Neste caso, uma exceção como OverflowException é gerada. Os operadores unários (atribuídos a 1 atributo) + e - são utilizados para representar se o número é positivo ou negativo, respectivamente. Exemplos: x = +1000 // x = 1000 x = -1000 // x = -1000 Os operadores binários +, -, *, / e % são utilizados nas expressões para execução decálculos tais como soma, subtração, multiplicação, divisão e sobra. O operador binário + quando utilizado entre strings representam concatenação. No entanto, quando existem strings e números na expressão e nenhuma operação de cast for executada a operação é tratado como concatenação. O operador binário % é computado através da fórmula dividendo - ( dividendo / divisor ) * divisor. Exemplos: string x = "Hello" + "World" // x = "HelloWorld" string x = "Valor = " + 100 // x = "Valor = 100" int x = 1000 % 11 // x = 10 O código abaixo utiliza os operadores aritméticos. Note a utilização e recebimento de argumentos através da linha de comando. O entry-point Main permite ser passado um vetor de strings como parâmetro. O método Length conta o número de parâmetros passado, ignorando o executável. Como todo vetor o primeiro parâmetro é representado pelo índice zero, por exemplo args[0]. A variável args não é uma palavra-chave, portanto, esta pode ser alterada: using System; namespace Tarefa { class programa { public static void Main(string[] args) { if(args.Length == 3) //Verifica o número de argumentos entrados { int x=0,y=0; try { //Convertem os valores dos argumentos 2 e 3 para inteiro 32-bit //Se ocorrer algum erro o modo de utilização x = args[1].ToInt32(); y = args[2].ToInt32(); } catch { usage(); return; } //Efetua a operação selecionada no primeiro argumento switch(args[0]) { case " + " : Console.Write("Valor da soma={0}",x+y); break; case " - " : Console.Write("Valor da subtração={0}",x-y); break; case " / " : Console.Write("Valor da divisão={0}",x/y); break; case " * " : Console.Write("Valor da multiplicação={0}",x*y); break; case " % " : Console.Write("Valor do resto={0}",x%y); break; default: usage(); } Else { usage(); } } public static void usage() { //Modo de utilização Console.WriteLine("Modo de usar : Arithmetics operador valor1 valor2 " ); Console.WriteLine("Ex.: Arithmetics + 1 0 0 2 0 0 " ); } } } Operadores de Incremento e Decremento Os operadores ++ e – aumentam ou diminuem por um o valor correspondente. O ponto chave é que se o operador for utilizado `a esquerda da variável, ou seja prefixado, o valor é adicionado ou subtraído de um antes de sua utilização. Exemplos: int x = 1000; // x = 1000 x++; // x = 1001 int y = x++; // x = 1002 , y = 1001 x--; // x = 1001 y = --x; // x = 1000 , y = 1000 ++x; // x = 1001 --x; // x = 1000 y = ++x; // x = 1001 , y = 1001 Operadores Relacional, Lógico e Condicional Esses operadores são utilizados em expressões onde o resultado retornado ou a característica é booleana. Operadores Relacionais Estes operadores serão utilizados em comparações entre variáveis ou expressões. O resultado desta comparação sempre será verdadeiro ou falso. Operador Descrição == igual > maior < menor >= maior ou igual <= menor ou igual != diferente Exemplos: Expressão Resultado 1 = 2 Falso 5 > 2 Verdadeiro 11‟ < „4‟ Verdadeiro 4 >= 5 Falso 3 <= 3 Verdadeiro 2 + 3 <> 5 Falso Os operadores relacionais ==, !=, ¡, ¿, ¡=, ¿=, resultam em um valor booleano e representam igual, não igual ou diferente, menor, maior, menor ou igual e maior ou igual, respectivamente. Por exemplo, a == b quer dizer se a for igual a b, isto é totalmente válido na expressão com tipos primitivos(value types), tais como int, long, char, entre outros. Porém o comportamento dos operadores == e != são diferenciados quando utilizado entre structs (value types) e classes (reference types). Para structs a comparação deve levar em consideração todos os campos da estrutura. Para classes a comparação é efetuada pelo endereço, ou referência, da classe. O único reference type que compara o valor e não a referência é a string ou a classe System.String, pois os operadores == e != são sobrecarregados. A sobrecarga pode alterar o comportamento padrão dos operadores.Operadores Lógicos Os operadores lógicos servem para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso. Os operadores lógicos são: and && O resultado final só será verdadeiro se ambas as partes forem verdadeiras. or || O resultado final será verdadeiro se pelo menos uma das partes for verdadeira. Exemplo: Expressão Resultado (1 > 2) && (3 > 2) Falso (1 > 2) || (3 > 2) Verdadeiro ! (1 > 2) Verdadeiro O operador de negação ! retorna o complemento de um valor booleano. Exemplos: bool x = true; bool y = !x // y = false; if(!y) System.Console.Write( " y é v e r d a d e i r o " ); Prioridade Em uma expressão, a ordem de avaliação dos operadores segue a tabela abaixo: Prioridade Operadores 1º Aritméticos ou matemáticos 2º Relacionais 3º Lógicos Operador de Atribuição Estes operadores, divididos entre simples e compostos, são utilizados na designação de um valor para uma variável. O operador = representa a atribuição simples, ou seja uma variável do lado esquerdo recebe o conteúdo de um valor, de uma variável ou do resultado de uma expressão do lado direito. Exemplo: int x = 10 int y = x int z = x + y; Os operadores +=, -=, *=, /=, %=, &=, —=, =,ˆ ¡¡= e ¿¿= representam a atribuição composta, que normalmente atuam como um atalho na construção de uma expressão. Exemplo: x = x + 10; // Pode ser escrito como : x += 10; // x <op >= < valor > Exemplo: using System; namespace Tarefa { class programa { static void Main(string[ ] args) { string usuario, senha; Console.Write("Usuário:"); usuario = Console.ReadLine(); Console.Write("Senha..:"); senha = Console.ReadLine(); if (usuario == "admin" && senha == "123") { Console.WriteLine("Seja bem vindo usuário {0}", usuario); } Console.ReadKey(); } } } Atribuição Depois de declarar uma variável, a primeira coisa que você quase sempre precisa fazer é armazenar informações na variável. Esse é o trabalho da instrução de atribuição. Esta instrução é bastante simples; você especifica uma variável cujo valor deseja definir, coloca um sinal de igualdade após o nome da variável e depois insere à direita o valor que deseja armazenar. Por exemplo, a linha de código a seguir é o tipo mais básico de instrução de atribuição: NUMERO = 10 A instrução de atribuição informa ao C# para armazenar o valor inteiro 10 no espaço de memória representado pela variável NUMERO. É claro que você não está limitado a atribuir números inteiros. A expressão que segue o sinal de igualdade pode ser um valor literal, uma expressão ou equação que utilize alguma combinação de outras variáveis e constantes, ou mesmo uma função que retorne um valor. Não há limite para a complexidade da expressão que você pode empregar. A única restrição é que a expressão deve gerar um valor do mesmo tipo da variável a qual ela é atribuída. Exercícios: 1. Quais são os três grupos de operadores? ____________________________________ ____________________________________ 2. Defina a ordem de prioridade existente entre os operadores. ____________________________________ ____________________________________ ____________________________________ 3. Resolva as expressões abaixo: 2 + 7 30.5 - 3 4 * 2 25 / 2 25 \ 2 25 mod 2 4 ^ 2 1 >= 1 9 <= 3 10 > 1 11 < 16 not ((1 >= 1) and (9 <= 3) or (10 > 1) and (11 < 16)) ((8 \ 3) <> 4) xor ((10 mod 3) = 1) 4. Indique o resultado das expressões abaixo: Sendo: X = 6.0 Y = 2 Z = 4.0 A = 8 B = 7.5 C = 7.7 D = 12 P = 4 Q = 3 R = 10 S = 2.5 x + y – z * a (( z / a) + b * a) – d d / y d mod y p * (r mod q) – q / 2 ESTRUTURAS DE CONTROLE Estrutura sequencial A estrutura sequencial, como diz o próprio nome, é uma sequência de instruções que se sucedem uma após outra sem desvios ou interrupções. Este tipo de estrutura não possui palavras chaves, é composta somente por linhas de comandos sucessivas. Estrutura condicional Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificação tem-se quatro tipos de estruturas de decisão (simples, composta, encadeada e múltipla). Estrutura repetitiva São muito comuns as situações em que se deseja repetir um determinado trecho de um programa certo número de vezes. Por exemplo, pode-se citar o caso de um algoritmo/programa que calcula a soma dos números ímpares entre 500 e 1000 ou então um algoritmo/programa que escreve os números maiores que zero enquanto a sua soma não ultrapasse 1000. As estruturas de repetição são muitas vezes chamadas de laços ou também de loops. A classificação das estruturas repetitivas é feito de acordo com o conhecimento prévio do número de vezes que o conjunto de comandos será executado. Assim os laços se dividem em: Estrutura repetitiva com contador Estrutura repetitiva com condição no início Estrutura repetitiva com condição no final Indentação/Identação/Endentação Em ciência da computação, indentação (recuo, neologismo derivado da palavra em inglês indentation, também encontram-se as formas identação e endentação) é um termo aplicado ao código fonte de um programa para indicar que os elementos hierarquicamente dispostos têm o mesmo avanço relativamente à posição (x,0). Na maioria das linguagens de programação a endentação (por exemplo VB) tem um papel meramente estético, tornando a leitura do código fonte muito mais fácil (read-friendly), porém é obrigatória em outras. Python, Occam e Haskell, por exemplo, utilizam-se desse recurso tornando desnecessário o uso de certos identificadores de blocos ("begin" e/ou "end"). A verdadeira valia deste processo é visível em arquivos de código fonte extensos, não se fazendo sentir tanto a sua necessidade em arquivos pequenos (relativamente ao número de linhas). Para qualquer programador, deve ser um critério a ter em conta, principalmente, por aqueles que pretendam partilhar o seu código com outros. A indentação facilita também a modificação, seja para correção ou aprimoramento, do código fonte. Indentação em linguagens de programação Em palavras simples, indentação é a organização do código fonte em blocos. Assim pode-se identificar melhor o que em cada bloco está contido. Auxilia muito na busca de erros ou implementações. Exemplo de um programa com indentação: using System; namespace Tarefa { class programa { static void Main(string[] args) { int num; Console.Write("Informe um nº:"); num = Convert.ToInt16(Console.ReadLine()); if (num % 2 == 0) Console.WriteLine("{0} é PAR", num); else Console.WriteLine("{0} é IMPAR", num); Console.ReadKey(); } } } Mesmo exemplo anterior, agora sem indentação: using System; namespace Tarefa { class programa { static void Main(string[] args) { int num; Console.Write("Informe um nº:"); num = Convert.ToInt16(Console.ReadLine()); if (num % 2 == 0) Console.WriteLine("{0} é PAR", num); else Console.WriteLine("{0} é IMPAR", num); Console.ReadKey(); } } } Comandos utilizados em C# Comando de Entrada de Dados O comando de entrada de dados em C# permite que o usuário digite dados, possibilitando um diálogo com o computador. O dado digitado é armazenado na posição de memória indicada no comando (variável). Nomedavariável = Console.ReadLine(); Exemplo: Nome = Console.ReadLine();
Compartilhar