Baixe o app para aproveitar ainda mais
Prévia do material em texto
DESCRIÇÃO Apresentação do conceito de solução estruturada de problemas e pensamento computacional. PROPÓSITO Identificar os conceitos de solução estruturada e raciocínio lógico que permitem modelar problemas e obter solução computacional através da linguagem de programação. PREPARAÇÃO Antes de iniciar o conteúdo deste tema, tenha os softwares Bizagi e Portugol Studio instalados em seu computador. OBJETIVOS MÓDULO 1 1234 Identificar o conceito de solução estruturada, raciocínio lógico e pensamento computacional MÓDULO 2 2345 Distinguir o uso de algumas ferramentas para a representação de soluções MÓDULO 3 3456 Reconhecer as aplicações do pseudocódigo e da ferramenta Portugol Studio Identificar os conceitos de solução estruturada, raciocínio lógico e pensamento computacional INTRODUÇÃO Caso você fosse questionado por um colega sobre como se abre uma porta, sua resposta seria algo parecido com “Segure a maçaneta, gire e puxe”. Logicamente, esta resposta é compreendida por quem perguntou, porque seu colega também é um ser humano! Porém, ao tentar instruir um robô para executar esta tarefa, sua resposta não seria suficiente. O robô executa muito bem aquilo para o qual foi programado, mas não tem capacidade de compreender instruções vagas como “Segure a maçaneta, gire e puxe”. Imagem: Shutterstock.com Para que a tarefa fosse corretamente desempenhada pelo robô, seriam necessários muitos mais níveis de detalhamento e definição, como uma sequência de passos. Poderíamos pensar em algo como: Imagem: Shutterstock.com Ande na direção da porta até que a distância fique igual a 30cm. Então, pare. Levante a mão direita até encostar em uma extremidade da maçaneta. Verifique se esta é a extremidade livre da maçaneta. Se for, passe para o próximo passo. Se não for, percorra a maçaneta até encontrar a extremidade livre. Imagem: Shutterstock.com Imagem: Shutterstock.com Feche os dedos envolvendo a extremidade livre da maçaneta. Exerça uma força de 10N sobre a extremidade livre da maçaneta para baixo até que ela não gire mais. Então, pare de puxar para baixo, mas continue segurando-a. Coloque seu cotovelo direito para trás sem soltar a maçaneta. Imagem: Shutterstock.com OBSERVE COMO PODE SER MAIS COMPLEXO DAR INSTRUÇÕES AO COMPUTADOR! SOLUÇÃO ESTRUTURADA O computador não tem discernimento para julgar culturalmente se algo é certo ou errado. No entanto, ele pode ser instruído para tomar decisões lógicas, baseadas em critérios objetivos, e seguir instruções ordenadas. A isso, chamamos solução estruturada. Imagem: Shutterstock.com COMENTÁRIO Embora possa parecer mais complexo dar instruções de forma estruturada a um computador, é só uma questão de prática para que você desenvolva esta habilidade. Além disso, existem diversas vantagens em instruir computadores a executar tarefas: eles não se cansam, não precisam parar para beber água, executam cálculos matemáticos muito mais rápido que seres humanos etc. Propor uma solução estruturada para um problema consiste em elaborar uma sequência de passos a serem dados, de forma que, ao seguir esta sequência, exista uma resposta coerente para este problema. Conforme foi dito, os computadores podem seguir instruções adequadamente programadas para realizar certas tarefas. Por isso, podemos concluir que eles têm comportamento previsível. Este fato nos permite prever o que determinado programa fará ao ser executado, caso tenhamos acesso ao conjunto de instruções que o gerou. Imagem: Shutterstock.com PENSAMENTO COMPUTACIONAL Aplicar o pensamento computacional é o primeiro passo para conseguir instruir o computador a executar determinada tarefa. O pensamento computacional vai permitir que você proponha a solução de determinado problema de forma que o computador possa executá-la. De acordo com Grover e Pea (2013), o pensamento computacional tem nove elementos que o levam a atender alunos interdisciplinarmente, além de avaliar seu desempenho. São eles: Fonte-Shutterstock Fonte-Shutterstock Fonte-Shutterstock DE ACORDO COM BRACKMANN (2017), O PENSAMENTO COMPUTACIONAL TEM QUATRO PILARES PARA A RESOLUÇÃO DE PROBLEMAS. SÃO ELES: (Clique nos pilares abaixo para abrir os ítens) Assista ao vídeo abaixo para saber mais sobre os quatro pilares do pensamento computacional: Imagem: Shutterstock.com RACIOCÍNIO LÓGICO Ao longo da vida acadêmica de um aluno, ao passar pelo Ensino Fundamental e Ensino Médio, é comum que ele se veja tentando reconhecer padrões em boa parte do tempo. Aprende-se a resolução de exercícios de Ciências Exatas, por exemplo, a partir da repetição de alguns passos a problemas similares. Isto é, ao se deparar com um problema de determinado tipo, o aluno reconhece que este obstáculo, para o qual ele já tem uma solução, encaixa-se em determinado padrão. Por exemplo, observe a sequência: Fonte-Shutterstock A seguir, vamos treinar um pouco mais as suas habilidades para o reconhecimento de padrões e estimular seu raciocínio matemático. 1. Encontre o próximo termo da sequência: 1, 3, 5, 7, 9, .... RESPOSTA Observe que a sequência é dos números ímpares. O próximo ímpar depois de 9 é o 11. 2. Encontre o próximo termo da sequência: 1, 6, 12, 19, 27, .... RESPOSTA Repare que a diferença entre dois elementos sempre aumenta uma unidade a cada par. O primeiro par (1 e 6) tem diferença 5. O próximo par (6 e 12) tem diferença 6. Como o par (19 e 27) tem diferença 8, a próxima diferença será 9. Assim, 27 + 9 = 36. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Lógica/Algoritmo Raciocínio Lógico VERIFICANDO O APRENDIZADO 1. TENDO EM VISTA O PENSAMENTO COMPUTACIONAL, QUAL DAS OPÇÕES ABAIXO NÃO É UM PILAR PARA ESTE CONCEITO? A) Algoritmos B) Adaptabilidade C) Decomposição D) Abstração 2. O RECONHECIMENTO DE PADRÕES ESTÁ PRESENTE EM NOSSAS VIDAS DESDE A EDUCAÇÃO BÁSICA. PODE-SE AFIRMAR QUE ELE CONSISTE EM: A) Dividir o problema inicial em partes menores. B) Filtragem e classificação dos dados. C) Uma sucessão ordenada e finita de passos. D) Identificar repetições ou regras de recorrência. GABARITO 1. Tendo em vista o pensamento computacional, qual das opções abaixo não é um pilar para este conceito? A alternativa "B " está correta. Os pilares do pensamento computacional são: Decomposição, Reconhecimento de Padrões, Abstração e Algoritmos. 2. O reconhecimento de padrões está presente em nossas vidas desde a Educação Básica. Pode-se afirmar que ele consiste em: A alternativa "D " está correta. O reconhecimento de padrões se caracteriza por identificar repetições ou regras de recorrência, aumentando a chance de se conhecer alguma solução para problemas similares. Distinguir o uso de algumas ferramentas para a representação de soluções INTRODUÇÃO Neste módulo, você vai conhecer algumas ferramentas que podem ajudar a representar soluções, permitindo uma melhor organização do seu raciocínio e aplicação do pensamento computacional que está desenvolvendo. Como já foi abordado, os computadores são muito bons em executar tarefas. Se organizarmos nossas soluções em passos e condições lógicas, os computadores poderão ser instruídos a segui-los e encontrar respostas de forma rápida e precisa. Imagem: Shutterstock.com CONCEITOS Basicamente, vamos aprender um pouco mais sobre algoritmos e fluxogramas. São dois conceitos importantes, que vão ajudar na nossa vida com os computadores. Como já vimos antes, algoritmos são procedimentos para resolver um problema com as ações a serem executadas e a ordem em que elas devem acontecer. Um exemplo bem fácil de identificar é a receita para preparação de um macarrão instantâneo: Fonte-Shutterstock NESTE CASO, FIZEMOS UMA SUCESSÃO DE PASSOS SIMPLES, SEM NOS PREOCUPAR COM VERIFICAÇÕES QUE PODERIAM SER FEITAS PARA AUMENTAR O NÍVEL DE DETALHAMENTO. PODERÍAMOS, POR EXEMPLO, ACRESCENTARA VERIFICAÇÃO SE O GÁS ESTÁ CHEGANDO ADEQUADAMENTE AO FOGÃO. PODERÍAMOS, TAMBÉM, VERIFICAR SE O MACARRÃO REALMENTE ESTÁ PRONTO APÓS OS 3 MINUTOS. É POSSÍVEL FAZER VÁRIAS ADAPTAÇÕES PARA AUMENTAR O NÍVEL DE DETALHAMENTO. MAS A IDEIA PRINCIPAL É CRIAR UMA SEQUÊNCIA DE PASSOS QUE ORIENTE A EXECUÇÃO DA TAREFA. Vamos observar outro exemplo simples sobre divisibilidade. O critério para verificar se um número é par ou não é ser divisível por 2. Poderíamos pensar que ser divisível significa ter resto zero na divisão. Logo, um possível algoritmo para responder a um amigo se o número que ele falou é divisível por 2 ou não vem a seguir: Imagem: Shutterstock.com Perguntar ao seu amigo o número que ele quer testar; Ouvir a resposta dele; Calcular o resto da divisão do número informado por 2; Se o resto da divisão do número informado por 2 for zero, então: Responder ao amigo que o número é par; Se não for: Responder ao amigo que o número é ímpar. Um algoritmo que esteja organizado como o exemplo que acabamos de ver, já está bem próximo do que precisamos fazer para instruir corretamente um computador a executar esta tarefa. FLUXOGRAMA O fluxograma é outra ferramenta bem útil para a representação de uma solução, e pode ser entendido como a representação gráfica de um algoritmo. É como se pudéssemos fazer um esquema, com regras simples, que represente a sequência de passos e condições que compõem um algoritmo. Fluxogramas também podem ser usados para representar sistemas ou processos. Existem diversas ferramentas para a criação de fluxogramas, tanto locais como on- line. Podemos citar o Bizagi. Porém, até mesmo usando o Microsoft Word ou o Microsoft Powerpoint é possível criar fluxogramas. Para utilizar corretamente o fluxograma, é necessário entender os seus principais componentes. São eles: Imagem: Shutterstock.com Quer aprender a utilizar corretamente o Bizagi? Acompanhe o vídeo a seguir: O algoritmo que usamos para responder a um amigo, se o número que ele falou é divisível por 2 ou não, pode ser representado pelo seguinte fluxograma: Fonte-Shutterstock Considere o fluxograma a seguir: Fonte-Shutterstock Supondo que o usuário informe, no passo 3, o número 125. Qual será o resultado deste fluxograma? RESPOSTA O número não é um quadrado perfeito”, uma vez que 125 não tem raiz inteira. Assim, na decisão 5, o caminho será da seta não. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Conceitos básicos de algoritmos e fluxogramas Fluxogramas VERIFICANDO O APRENDIZADO 1. CONSIDERE O FLUXOGRAMA A SEGUIR: SUPONHA QUE O USUÁRIO TENHA INFORMADO O VALOR 1,80 NO PASSO 3 E O VALOR 70 NO PASSO 5. QUAL SERÁ O RESULTADO DESTE FLUXOGRAMA? A) Será exibido o valor 21,60. B) Será exibida a frase “Você não está abaixo do peso C) Será exibida a frase “Você está abaixo do peso". D) Não é possível determinar o resultado apenas com estes dados. 2. (FCC - 2016 - ADAPTADA) CONSIDERE O DIAGRAMA ABAIXO. ANALISANDO O RACIOCÍNIO LÓGICO E AS ESTRUTURAS LÓGICAS UTILIZADAS NO DIAGRAMA, É CORRETO AFIRMAR QUE: A) A lógica implementa a solução de cálculo da média de 2 números diferentes de zero. B) Se um dos números digitados for zero, nada é impresso. C) Se os dois números digitados na primeira vez forem zero, os dois serão somados e divididos por 2. D) Se os dois números digitados forem iguais, nenhum resultado é impresso. GABARITO 1. Considere o fluxograma a seguir: Suponha que o usuário tenha informado o valor 1,80 no passo 3 e o valor 70 no passo 5. Qual será o resultado deste fluxograma? A alternativa "B " está correta. Com os valores informados pelo usuário, o valor do IMC será 21,60. Porém, este valor não é exibido. Ele é utilizado na decisão 7, tomando o caminho da seta não. Assim, será exibida a frase na tela “Você não está abaixo do peso”. 2. (FCC - 2016 - Adaptada) Considere o diagrama abaixo. Analisando o raciocínio lógico e as estruturas lógicas utilizadas no diagrama, é correto afirmar que: A alternativa "A " está correta. O fluxograma apresentado só terá algum resultado impresso caso os dois números digitados forem diferentes de zero. Neste caso, a impressão será do resultado da divisão da soma dos dois números por 2, que é justamente a média entre estes dois números. Reconhecer as aplicações do pseudocódigo e da ferramenta Portugol Studio Imagem: Shutterstock.com INTRODUÇÃO Neste módulo, você conhecerá dois importantes aliados na sua iniciação à programação. Grosso modo, chamamos de programar a ação do programador ao, usando alguma linguagem de programação, criar um conjunto de instruções que um computador consiga executar. Tanto o pseudocódigo como o Portugol Studio permitirão que você se aproxime ainda mais da fluência na programação. PSEUDOCÓDIGO Pseudocódigo é uma linguagem artificial e informal que ajuda programadores a desenvolver algoritmos. O pseudocódigo parece com a forma natural que usamos para nos expressar, mas também tem semelhanças com uma linguagem de programação para um computador real. Assim, ele é útil para ajudar o programador a pensar na solução, mas não pode ser executado por uma máquina. Pedir um número inteiro ao usuário; Ler (a); Pedir um número inteiro ao usuário; Ler (b); Se (a > = b) Imprimir a; Senão Imprimir b. Observação importante: É muito comum utilizar o operador de atribuição, que em pseudocódigo, normalmente, é simbolizado pela seta (←). No Portugol Studio, que você vai conhecer na sequência, o operador é simbolizado pelo igual (=). É importante perceber que o operador de atribuição não é uma igualdade. Ele atribui à variável do lado esquerdo o valor que está do lado direito. Ou seja, a linha: a ← 10 (pseudocódigo) [ou a = 10 (no Portugol Studio)] atribui o valor 10 à variável a. É usual escrevermos a instrução a ← a + 1 (pseudocódigo) [ou a = a + 1 (no Portugol Studio)] que causa estranheza no primeiro contato, mas simplesmente atribui à variável a o valor que ela tinha antes, acrescido de uma unidade. Ou seja, se as duas linhas acima estivessem em sequência, como a seguir: a ← 10 (pseudocódigo) [ou a = 10 (no Portugol Studio)] a ← a + 1 (pseudocódigo) [ou a = a + 1 (no Portugol Studio)] a variável a teria o valor 11 ao final da execução. PORTUGOL STUDIO O Portugol Studio é uma ferramenta para aprender programação, voltada para as pessoas que falam o idioma português. A ferramenta tem diversos exemplos e materiais de apoio à aprendizagem, o que facilita a jornada dos nossos futuros programadores. O Portugol Studio traz a funcionalidade de simular a execução real de um programa por meio de interações com o usuário, impressão na tela, entre outras. A seguir, veja um passo a passo para aprender a utilizar o programa: EXPLORE O EXEMPLO DE OPERAÇÕES SIMPLES COM NÚMEROS REAIS NO PORTUGOL STUDIO. Recomendamos que o estudante tente se familiarizar com o Portugol Studio e veja os primeiros exemplos que já vêm com a ferramenta. Entender bem os conceitos iniciais e poder testar ajudará muito na sua formação como programador. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Pseudocódigo Discussão da questão 2 em diferentes linguagens de programação VERIFICANDO O APRENDIZADO 1. OBSERVE O TRECHO DE PSEUDOCÓDIGO A SEGUIR: A ← 10 B ← 15 javascript:void(0); A ← A + B IMPRIMIR (A) DETERMINE A SAÍDA DE UM PROGRAMA QUE FOSSE ESCRITO COM ESTE TRECHO. A) 10 B) 15 C) 25 D) 1015 2. CONSIDERE O SEGUINTE PROGRAMA, ESCRITO EM PORTUGOL: NA LINHA EM QUE ESTÁ ESCRITO //TRECHO OMITIDO, DEVE SER INSERIDA UMA INSTRUÇÃO QUE IMPRIMA NA TELA A SEGUINTE FRASE: “O NÚMERO DIGITADO FOI: , ” SEGUIDA DO VALOR QUE O USUÁRIO DIGITOU. OU SEJA, SE O USUÁRIO TIVER DIGITADO O VALOR 1 QUANDO FOI SOLICITADO, A FRASE IMPRESSA NA TELA DEVE SER O NÚMERO DIGITADOFOI: 1 PARA EXECUTAR CORRETAMENTE ESTA INSTRUÇÃO, A LINHA OMITIDA DEVE SER: A) Escrever (“O número digitado foi: ”, numero) B) Escreva (“O número digitado foi: ”, numero) C) Escreva (“O número digitado foi: numero”) D) Escreva (“O número digitado foi: ”) GABARITO 1. Observe o trecho de pseudocódigo a seguir: a ← 10 b ← 15 a ← a + b Imprimir (a) Determine a saída de um programa que fosse escrito com este trecho. A alternativa "C " está correta. O comando de atribuição (←) faz com que a variável a receba o valor da soma dos conteúdos das variáveis a e b neste momento (10 e 15, respectivamente). Ou seja, ao término desta atribuição, a variável a tem o valor 25. 2. Considere o seguinte programa, escrito em Portugol: Na linha em que está escrito //TRECHO OMITIDO, deve ser inserida uma instrução que imprima na tela a seguinte frase: “O número digitado foi: , ” seguida do valor que o usuário digitou. Ou seja, se o usuário tiver digitado o valor 1 quando foi solicitado, a frase impressa na tela deve ser O número digitado foi: 1 Para executar corretamente esta instrução, a linha omitida deve ser: A alternativa "B " está correta. A função correta é escreva( ), com os parâmetros passados entre os parênteses. O conteúdo da variável numero é o segundo parâmetro, sendo passado depois da vírgula, separado da frase estática “O número digitado foi: CONCLUSÃO CONSIDERAÇÕES FINAIS Neste tema, você aprendeu como solução estruturada e raciocínio lógico embasam o que chamamos de pensamento computacional. A modelagem de soluções computacionais utilizando algoritmos e fluxogramas é altamente recomendada, antes que o programador efetivamente comece a desenvolver. Além disso, podem ser usados o pseudocódigo e o Portugol como passos intermediários. O desafio desta disciplina consistiu em fazer você aprender a projetar e implementar soluções computacionais usando uma linguagem de programação. No mundo atual, cada vez mais vemos o crescimento do uso de dispositivos eletrônicos, como computadores, tablets e smartphones. Como um computador pode executar cálculos bilhões de vezes mais rápido que um ser humano, os profissionais que sabem programá-lo podem proporcionar enorme ganho de produtividade, o que os torna muito valorizados no mercado. AVALIAÇÃO DO TEMA: REFERÊNCIAS BRACKMANN, C. P. Desenvolvimento do pensamento computacional através de atividades desplugadas na educação básica. Tese (Doutorado em Informática na Educação) - Universidade Federal do Rio Grande do Sul, Porto Alegre, 2017. GROVER, S.; PEA, R. Computational Thinking in K-12: A Review of the State of the Field. Educational Researcher, 2013, v. 42, n. 1, p. 38 - 43. LIU, Yang. Sistema de recomendação dos amigos na rede social on-line baseado em Máquinas de Vetores Suporte. Dissertação (Mestrado em Informática) - Universidade de Brasília, Brasília, 2014. MELVILLE, P.; SINDHWANI, V. Recommender systems. In: Encyclopedia of machine learning. Berlin: Springer-Verlag, 2010. EXPLORE+ Os exemplos do Portugol Studio, Portugol Studio. In: LITE da UNIVALI. Consultado em meio eletrônico em: 14 abr. 2020. Acesse nossa lista de exercícios complementares para praticar o que aprendeu. CONTEUDISTA Humberto Henriques de Arruda CURRÍCULO LATTES javascript:void(0); javascript:void(0); DEFINIÇÃO Tipos de dados da linguagem C. Manipulação de variáveis e constantes, além de suas operações. Tipos de operadores (e sua precedência) e de expressões passíveis de uso. Conceito de tabela verdade na elaboração de expressões lógicas. PROPÓSITO Compreender os conceitos dos tipos de dados suportados pela linguagem e suas manipulações para o desenvolvimento de aplicações robustas e eficientes. PREPARAÇÃO Antes de iniciar seu estudo, instale e configure em seu computador ou smartphone o ambiente de desenvolvimento Dev C++, que é obtido gratuitamente na internet. Para fazer isso, pesquise e siga as instruções indicadas por Lucas Hort no vídeo Como baixar, instalar e configurar o Dev-C++ no Windows (2019). Se não quiser realizar a instalação e configuração desse ambiente, você ainda pode usar a versão portátil (também disponível na internet). Basta apenas executá-la diretamente por intermédio de um pendrive. OBJETIVOS MÓDULO 1 Empregar os conceitos de tipos de dados por meio da manipulação de variáveis e constantes na linguagem C MÓDULO 2 Aplicar os operadores matemáticos, lógicos, relacionais e de atribuição, além dos conceitos de tabela verdade Empregar os conceitos de tipos de dados por meio da manipulação de variáveis e constantes na linguagem C TIPOS DE DADOS VOCÊ SABE COMO PODEMOS REPRESENTAR A SOLUÇÃO DE UM PROBLEMA DA VIDA REAL NA LINGUAGEM DE PROGRAMAÇÃO? É possível fazer isso por meio de uma sequência finita de passos conhecida como algoritmo. Um algoritmo pode ser entendido como uma linha de produção fabril semelhante à do Fordismo, uma vez que javascript:void(0); transformamos os dados de entrada para alcançarmos ou calcularmos determinado valor. Fonte: Wikpedia FORDISMO Linha de produção do empreendedor e engenheiro mecânico estadunidense Henry Ford (1863-1947) implantada em 1914. Imagem: Shutterstock.com Veja a representação do carregamento do código na linguagem C como uma linha de produção. Os espaços de memória recebem inputs (entradas) para transformá-los em códigos (saídas). Com a execução do código, esses espaços são preenchidos por variáveis que dão origem à linguagem de programação. EXEMPLO Para o cálculo do índice de massa corpórea (IMC) de uma pessoa, medimos sua altura e seu peso. Normalmente, ela é medida em metros e possui valores com casas decimais. Da mesma forma, ele o é em quilogramas, apresentando casas decimais. Suponhamos que essas medidas apresentem os seguintes números: Imagem: Shutterstock.com Fonte: Shutterstock A representação em casas decimais de números tão comuns do nosso dia a dia também pode ser feita nas linguagens de programação. Para desenvolver um algoritmo, precisamos: 1º Identificar quais dados de entrada serão utilizados e como representá-los em nossa linguagem de programação. 2º Fazer, com esses dados já identificados, as transformações necessárias para modificar ou realizar cálculos. Imagem: Shutterstock.com Da mesma forma que, para montar um carro, Ford iniciava o processo com uma carroceria a fim de poder agregar seus demais componentes, como portas, sistema de suspensão e motor... Imagem: Shutterstock.com ... Nós o começamos com uma região de memória na qual serão acrescentados os dados necessários para a realização do nosso cálculo. DESDE SUA CONCEPÇÃO, A LINGUAGEM C POSSUI QUATRO TIPOS DE DADOS BÁSICOS: CHAR, INT, FLOAT E DOUBLE. POR MEIO DELES E DE SUAS MANIPULAÇÕES, É POSSÍVEL REPRESENTAR QUALQUER TIPO DE INFORMAÇÃO DO MUNDO REAL. DICA Ainda existe nessa linguagem uma forma de identificar a ausência de valores. Tal situação será vivida quando posteriormente forem tratados os casos de modularização de códigos (funções e procedimentos). Neste caso, é usada a palavra reservada void. CHAR O tipo char representa um caractere (podendo ser uma letra, um número ou um símbolo) e ocupa um byte na memória. Em computação, ele é representado pela tabela ASCII com seus 256 símbolos. Observe-a a seguir: ASCII Sigla para American Standard Code for Information Interchange. Imagem: computersciencewiki.org Nos 256 símbolos listados, ocorre a seguinte divisão: javascript:void(0); DO 0 AO 31 Os 32 iniciais são símbolos de controle. DO 32 AO 127 Compõem a tabela ASCII (algumas vezes, chamada de normal) DO 128 AO 255 Pertencem à tabela ASCII estendida. Esses caracteres podem ser usados de diversas formas. EXEMPLO: A representação dos termos Masculino e Feminino em um cadastro é feita pelos caracteres M e F. Utilizam-se aspas simples para a sua representação quando ambos forem mostrados em uma implementação. Desse modo, o caractere M de Masculino é representadopor ‘M’ e o F de Feminino, por ‘F’. Fonte: Shutterstock Observemos que a tabela ASCII representa os caracteres minúsculos e maiúsculos de forma distinta: Assim, conforme pode ser visto, o ‘m’ (m minúsculo) é diferente de ‘M’ (M maiúsculo). Notemos também que, para cada caractere da tabela, existe um índice representado em: Neste vídeo, o professor Humberto Henriques discorre sobre os outros três tipos de dados básicos da linguagem C: int, float e double. MANIPULAÇÃO DE VARIÁVEIS E CONSTANTES Já sabemos como representar os dados do mundo real na linguagem de programação C. Agora precisamos entender como eles podem ser manipulados. Para fazer isso, a linguagem trata os dados como variáveis e constantes. 1. CONCEITO A variável é um tipo de espaço de memória que pode ser alterado a qualquer tempo. ≠ A constante, por sua vez, não pode. Fonte: Shutterstock As duas formas permitem a referenciação deles em um espaço de memória. Esses espaços são identificados por meio de rótulos. Chamados de identificadores, eles possibilitam, a partir de seu uso, o acesso ao conteúdo armazenado em memória. EXEMPLO: Caixas de correio que ficam em frente às residências. Fonte: Shutterstock 2. DEFINIÇÃO DAS VARIÁVEIS Formalmente, um espaço de memória é rotulado por intermédio de um identificador quando as variáveis são definidas. Fonte: Shutterstock Para criar uma variável, utiliza-se a seguinte notação: O tipo do dado pode ser qualquer um dos quatro tipos já abordados: char, int, float e double. DE ACORDO COM O QUE VIMOS, COMO ESTARIA DESCRITA A REPRESENTAÇÃO DOS VALORES DE PESO E ALTURA? FLOAT PESO; FLOAT ALTURA; Já sabemos que a linguagem C é considerada sensível a um contexto. Assim, ao escrevermos uma aplicação nessa linguagem, os identificadores... CONTEXTO A grafia que usa maiúsculas e minúsculas é diferente. peso - Peso - PESO ... Serão diferentes. Além disso, o próprio tipo de dado utilizado possui a mesma regra. Desse modo: float Todas as letras são minúsculas = Ao tipo de dado, constituindo uma palavra reservada da linguagem. javascript:void(0); Quaisquer representações diferentes não correspondem a ele, podendo, dessa forma, ser utilizadas como identificadores, a exemplo de Float ou FLOAT. FLOAT OU FLOAT Não constitui uma boa prática de programação usar identificadores que sejam variantes em minúsculas ou maiúsculas de palavras reservadas. Por exemplo, não é recomendável o uso de identificadores como Float ou FLOAT. Ainda podemos definir as variáveis com outro formato: TIPO NOME_DO_IDENTIFICADOR_1, NOME_DO_IDENTIFICADOR_2; COMO ESTARIA DESCRITA, PORTANTO, A REPRESENTAÇÃO DOS VALORES DE PESO E ALTURA? FLOAT PESO, ALTURA; OU FLOAT ALTURA, PESO; Também é possível estabelecer uma quantidade maior de variáveis separando-as sempre das demais pelo uso de vírgula, enquanto a última deve conter um ponto e vírgula para finalizar. ATENÇÃO Não é recomendável definir uma quantidade muito grande de variáveis de uma só vez, pois isso dificulta o entendimento do código-fonte da aplicação. javascript:void(0); Recomendamos a definição de poucas variáveis por vez. Caso haja algum tipo de relação entre elas, essa identificação deve ser feita por meio de comentários. SEGUINDO O EXEMPLO DO CASO DE PESO E ALTURA, FARÍAMOS ASSIM: FLOAT ALTURA, PESO; // VALORES DE ALTURA E PESO DO USUÁRIO, // MEDIDOS EM METROS E QUILOGRAMA, // RESPECTIVAMENTE. Outro ponto importante é que uma variável sempre deve ser definida antes de seu uso. Assim, quando formos usar determinada variável, sua definição deverá ocorrer previamente. Fonte: Shutterstock Coloquialmente conhecidos como nomes de variáveis, os identificadores podem ter até 32 caracteres formados por: LETRAS DO ALFABETO (MAIÚSCULAS E MINÚSCULAS) DÍGITOS (0-9) SÍMBOLO DE UNDERSCORE _ O primeiro caractere deve ser uma letra do alfabeto ou o underscore. NÃO USAMOS CARACTERES ACENTUADOS AO DEFINIRMOS UM IDENTIFICADOR. SAIBA MAIS Pesquise na internet sobre a notação húngara criada por Charles Simonyi. Além das variáveis, há situações em que é necessário usar valores fixos em toda a aplicação. Conhecidos como constantes, esses valores são definidos por intermédio da palavra reservada const antes do tipo de acordo com o seguinte formato: const TIPO NOME_DO_IDENTIFICADOR; Nele, o NOME_DO_IDENTIFICADOR segue as mesmas regras relativas ao identificador descritas anteriormente. Por exemplo, é possível definir o valor π usando o seguinte exemplo: const float pi = 3.141592; APLICAÇÃO DOS CONCEITOS APRESENTADOS Da teoria da informação, advêm os conceitos de: DADOS Considerado um valor sem contextualização. INFORMAÇÃO Quando é contextualizado, o dado transforma-se em informação. Hoje em dia, a informação é o principal fator de destaque em empresas vencedoras. A partir dos dados contextualizados, é possível compreender tudo à nossa volta. Afinal, eles dão origem a áreas que estão revolucionando o mercado nos últimos anos. EXEMPLO: Big data, ciência de dados e inteligência artificial. Fonte: Shutterstock Só será possível analisar os dados, entendendo suas correlações e regras de formação, se eles forem tratados da melhor forma à medida que estiverem sendo capturados no mundo real. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Tipo Char Constantes e Variáveis Questão 4 / Variáveis VERIFICANDO O APRENDIZADO 1. (ADAPTADA DE: MPU - FCC - ANALISTA DE INFORMÁTICA - DESENVOLVIMENTO DE SISTEMAS - 2007) O TIPO DE DADOS FLOAT REFERE-SE AOS DADOS DO TIPO: A) Caractere B) Inteiro C) Booleano D) Real 2. (ADAPTADA DE: IBGC - HEMOMINAS - TÉCNICO DE INFORMÁTICA - 2013) ASSINALE A ALTERNATIVA QUE APRESENTA UM EXEMPLO TÍPICO DE DADOS NUMÉRICOS SEM CASAS DECIMAIS: A) Rua Corrente Divina, 123 B) 558 C) 3,1415 D) Um, dois e três 3. (FUNIVERSA - PC-DF - PERITO CRIMINAL - INFORMÁTICA - 2012) SÃO PALAVRAS-CHAVE DA LINGUAGEM C NO PADRÃO ANSI, NÃO PODENDO, PORTANTO, SER UTILIZADAS COMO NOMES PARA VARIÁVEIS: A) typedef, master, core, newline B) union, extern, main, core C) int, long, static, void D) signed, unsigned, master, main 4. EM UMA APLICAÇÃO PARA O CÁLCULO DO IMC, FORAM DEFINIDAS DUAS VARIÁVEIS: PESO E ALTURA. DEVIDO A REQUISITOS ORIUNDOS DO MUNDO REAL, ELAS SÃO DEFINIDAS COMO FLOAT. ASSINALE A ALTERNATIVA QUE APRESENTA A FORMA INCORRETA DE DEFINIÇÃO DESSAS VARIÁVEIS: A) float peso; float altura; B) float peso, altura; C) float altura, peso; D) float peso, float altura; 5. (ADAPTADA DE: CESPE - BANCO DA AMAZÔNIA - TÉCNICO-CIENTÍFICO - TECNOLOGIA DA INFORMAÇÃO - ADMINISTRAÇÃO DE DADOS - 2010) ACERCA DAS ESTRUTURAS DE INFORMAÇÃO, CONSIDERE A SEGUINTE AFIRMAÇÃO: NOS TIPOS PRIMITIVOS DE DADOS DO TIPO INTEIRO, OS VALORES SÃO NÚMEROS INTEIROS PARA OS QUAIS SÃO DEFINIDAS OPERAÇÕES MATEMÁTICAS. ESSES TIPOS DE DADOS NÃO POSSUEM CASAS DECIMAIS. NA IMPLEMENTAÇÃO DE UM APLICATIVO, PODEMOS REPRESENTAR A IDEIA APRESENTADA POR MEIO DO SEGUINTE TIPO INTEIRO: A) A idade B) A cor dos olhos C) O peso D) O endereço GABARITO 1. (Adaptada de: MPU - FCC - Analista de Informática - Desenvolvimento de Sistemas - 2007) O tipo de dados float refere-se aos dados do tipo: A alternativa "D " está correta. Os do tipo float são dados com casas decimais. Por isso, eles são representados na Matemática como números reais. 2. (Adaptada de: IBGC - Hemominas - Técnico de Informática - 2013) Assinale a alternativa que apresenta um exemplo típico de dados numéricos sem casas decimais: A alternativa "B " está correta. As letras A e D representam tipos de dados do tipo char. B apresenta um tipo de dado numérico; C, tipos de dados com casas decimais. 3. (FUNIVERSA - PC-DF - Perito Criminal - Informática - 2012) São palavras-chave da linguagem C no padrão ANSI, não podendo, portanto, ser utilizadas como nomes para variáveis: A alternativa "C " está correta. Na letra A, são apresentados os termos master, coree newline, que não pertencem à linguagem C. Nas letras B e D, os termos core e master se repetem. 4. Em uma aplicação para o cálculo do IMC, foram definidas duas variáveis: peso e altura. Devido a requisitos oriundos do mundo real, elas são definidas como float. Assinale a alternativa que apresenta a forma incorreta de definição dessas variáveis: A alternativa "D " está correta. Depois de um identificador, só é possível haver um sinal de ponto e vírgula ou uma vírgula seguida de outro identificador. 5. (Adaptada de: CESPE - Banco da Amazônia - Técnico-científico - Tecnologia da Informação - Administração de Dados - 2010) Acerca das estruturas de informação, considere a seguinte afirmação: nos tipos primitivos de dados do tipo inteiro, os valores são números inteiros para os quais são definidas operações matemáticas. Esses tipos de dados não possuem casas decimais. Na implementação de um aplicativo, podemos representar a ideia apresentada por meio do seguinte tipo inteiro: A alternativa "A " está correta. Exemplos de idades de pessoas são 20 ou 50 anos, ou seja, números sem casas decimais. Portanto, utilizamos o tipo primitivo inteiro. A cor dos olhos é medida em cadeia de caracteres (char), como, por exemplo azul, verde e castanho- claro. O peso, por sua vez, deve ser medido em quilogramas (ou libras) com um número real (tipo primitivo float ou double), como 70,0 Kg. Já o endereço é representado como uma cadeia de caracteres (char), como Av. Paulista, 100. Aplicar os operadores matemáticos, lógicos, relacionais e de atribuição, além dos conceitos de tabela verdade OPERADORES Agora que já definimos os tipos de dados da linguagem C e apresentamos os conceitos de variáveis e constantes, precisamos aprender como manipular esses dados. Essa manipulação é realizada de acordo com os operadores disponibilizados pela linguagem. 1. OPERADORES MATEMÁTICOS O objetivo dos operadores matemáticos é representar as operações matemáticas do mundo real. Suas operações possuem peculiaridades para os quatro tipos de dados diferentes (char, int, float e double) da linguagem. NÚMEROS REAIS (R) Os números reais são representados na linguagem C pelos tipos float e double por apresentarem uma maior similaridade com o mundo real. Já aprendemos que a principal diferença entre ambos está em sua precisão: float ≠ double A) OPERACIONALIDADE São ofertadas pela linguagem as seguintes operações: SOMA Representada pelo símbolo ‘+’ SUBTRAÇÃO Símbolo ‘-’ MULTIPLICAÇÃO Representada pelo símbolo ‘*’ DIVISÃO Símbolo ‘/’ Essas operações funcionam exatamente da mesma forma que no mundo real, possuindo como única diferença a precisão numérica calculada. No mundo real, os números podem possuir representação infinita. No computador, isso não é possível, já que, em tal ambiente, a representação é finita. Desse modo, é possível ocorrer algum problema de precisão numérica ao serem realizados os cálculos matemáticos. Embora seja pouco significativo na maioria dos casos, esse problema acarreta uma decisão sobre o tipo de ponto flutuante utilizado, que pode ser o de precisão: float Simples ou double Dupla Vejamos uma tabela com um resumo do que estudamos até o momento: Operação matemática Símbolo utilizado Exemplo Equação Resultado Soma + 1.2 + 3.4 4.6 Subtração - 1.2 - 3.4 -2.2 Operação matemática Símbolo utilizado Exemplo Equação Resultado Multiplicação * 1.2 * 3.4 4.08 Divisão / 1.2 / 3.4 -0.3529 Tabela resumo 1. Para os inteiros, números sem casa decimal, as diferenças começam a aparecer. As operações de soma, subtração e multiplicação funcionam essencialmente conforme já explicamos, considerando que os dois operandos sejam números inteiros. Fonte: Shutterstock Se um desses operadores for um número inteiro (int) e o outro, um real (float ou double), seu resultado também será um número real (float ou double, respectivamente). Para a operação de divisão, quando os dois operandos são números inteiros, o resultado também é um inteiro. Portanto, essa operação é chamada de divisão inteira, embora ela use o mesmo símbolo utilizado para números reais. EXEMPLO: Observe que 5 / 2 tem como resultado o número 2, ou seja, o maior inteiro que pode ser obtido dentro do resultado matemático – que, neste caso, seria 2,5. Caso a operação de divisão envolva dois números – um real (float ou double) e um inteiro (int) –, o resultado será um número real (float ou double). Ainda existe outra operação que é particular de números inteiros: resto da divisão. Usando o símbolo %, ela retorna o resto da divisão de dois números inteiros. EXEMPLO: Note que 5 % 2 tem como resultado o número 1. ESSA OPERAÇÃO, PORTANTO, NÃO ESTÁ DEFINIDA PARA NÚMEROS REAIS. Observemos mais um resumo do que aprendemos. Figura: Resumo 2. A divisão inteira dos números inteiros (int) a e b resulta no valor d e no resto c. Assim, os valores c e d podem ser obtidos por meio das seguintes equações: D = A / B C = A % B B) CLASSIFICAÇÃO Perante a quantidade de operandos possíveis, os operadores podem ser classificados como: UNÁRIOS Só possuem um operando. O operando dos operadores unários é chamado de incremento ou decremento. Esses operadores podem ser usados de forma pré-fixa ou pós-fixa. Nas duas situações, os valores são acrescidos (incremento) ou decrescidos (decremento) de uma unidade. Desse modo, a expressão a++ ou ++a calcula o valor a+1. BINÁRIOS Têm dois operandos. TERNÁRIOS Três operandos. Todos os operadores apresentados até aqui são considerados BINÁRIOS, pois eles possuem dois operandos. Vejamos esta tabela com um resumo do que foi exposto: Operação matemática Símbolo utilizado Exemplo Equação Resultado Soma + 1 + 2 3 Subtração - 3 - 4 -1 Multiplicação * 5 * 6 30 Divisão inteira / 5 / 2 2 Resto da divisão % 5 % 2 1 Incremento ++ 2++ 3 ++2 Decremento -- 2-- 1 --2 Tabela: Resumo 3. Quando utilizados como operandos de operação matemática, os dados do tipo char são traduzidos para números inteiros, possuindo o mesmo funcionamento descrito anteriormente. Essa tradução é realizada graças ao uso da tabela ASCII apresentada no módulo 1. 2. OPERADORES RELACIONAIS Os operadores relacionais permitem a realização de comparações entre valores. Elas são expressas por meio dos valores verdadeiro e falso. VERDADEIRO E FALSO Um dos tipos utilizados no desenvolvimento de algoritmos é o lógico. Ele modela a álgebra de Boole ou álgebra booleana, base para o desenvolvimento da eletrônica presente na computação. Nessa álgebra, são utilizados os valores verdadeiro e falso. Na linguagem C, não há um tipo de dado que represente tais valores diretamente. Essa representação ocorre pela interpretação do valor da variável. Assim, os valores 0, vazio ou null são interpretados como falso; os outros, como verdadeiro. As operações são: MENOR Expressa pelo símbolo '<' MAIOR Símbolo '>' MENOR OU IGUAL javascript:void(0); Combinação dos símbolos '<=' MAIOR OU IGUAL: Combinação dos símbolos '>=' IGUALDADE Combinação dos símbolos '==' DESIGUALDADE Combinação dos símbolos '!=' EXEMPLO: Caso seja necessário verificar se uma pessoa tem mais de 1,90m de altura, o que podemos fazer? Fonte: Shutterstock Resposta: Devemos comparar os valores de altura da pessoa pela variável a e pelo valor de referência 1,90m. Na linguagem C, esse conhecimento é representado por: a > 1.9 ATENÇÃO Note que a unidade de medida não é expressa na equação. Caso fosse realizada a comparação anterior, seria necessário manter essa unidade. Demonstraremos a seguir uma tabela com um resumo do assunto abordado: Operação matemática Símbolo utilizado Exemplo Equação Resultado Maior > 1.2 > 3.4 0 (falso) Menor < 1.2 < 3.4 1 (verdadeiro) Menor ou igual <= 1.2 <= 3.4 1 (verdadeiro) Maior ou igual >= 1.2 >= 3.4 0 (falso) Igualdade == 1.2 == 3.4 0 (falso) Desigualdade != 1.2 != 3.4 1 (verdadeiro) Tabela: Resumo 4. 3. OPERADORES LÓGICOS Eles possuem como operandosos tipos verdadeiro e falso apresentados anteriormente. Existem dois tipos de operadores lógicos: UNÁRIOS Possuem apenas um operando. Exemplo: Negação (representado pelo símbolo !). Quando é aplicado a uma variável lógica, o operador negação (!) retorna o oposto dela. Exemplo: Caso a variável a seja falsa (0, vazio ou null), sua negação valerá verdadeiro (valor diferente de 0, vazio ou null). BINÁRIOS Têm dois operandos. Exemplo: Trata-se do e-lógico (representado pela combinação dos símbolos &&) e do ou-lógico (combinação dos símbolos ||). Quando for aplicado a dois valores lógicos, o operador e-lógico (&&) só retornará verdadeiro (1) se os dois operadores forem simultaneamente verdadeiros. Da mesma forma, o operador OU (||) retornará verdadeiro nos casos em que, no mínimo, um dos operandos seja verdadeiro. Verifiquemos um resumo sobre esse assunto: Operador lógico Símbolo utilizado Exemplo Equação Resultado Negação ! !0 1 Operador E && 1 && 0 0 Operador OU || 1 || 0 1 Tabela: Resumo 5. ATENÇÃO Note que, durante o estudo, são usados os termos falso e verdadeiro. Na linguagem C, os tipos de dados que representam o valor falso sempre são os valores: 0: Caso a variável seja numérica, ou seja, int, float ou double; null: Se for uma variável que armazene algum endereço de memória; null: Quando for uma string, isto é, uma cadeia de caracteres. O valor, portanto, será verdadeiro caso não seja falso, podendo assumir quaisquer valores numéricos, de endereço de memória ou de cadeia de caracteres. 4. OPERADORES BIT A BIT Como vimos até agora, os tipos de dados apresentados ocupam espaço em memória. 1 BYTE O tipo caractere ocupa um byte na memória. 4 BYTES O tipo float ocupa quatro bytes na memória. JÁ SABEMOS QUE 1 BYTE É IGUAL A 8 BITS. EM ALGUMAS SITUAÇÕES, NO ENTANTO, É NECESSÁRIO REALIZAR UMA MANIPULAÇÃO BIT A BIT. EXEMPLO: Esses casos ocorrem quando manipulamos tráfegos em redes de computadores, obtemos valores armazenados em memória e desejamos fazer alguma leitura ou escrita direta em dispositivos físicos (hardware). Essas operações podem ser resumidas de acordo com a seguinte tabela: Operação Expressão Exemplo Equação Resultado E lógico a&b 2&6 2 OU lógico a | b 2 | 4 6 OU Exclusivo a ^ b 2 ^ 6 4 Operação Expressão Exemplo Equação Resultado Deslocamento à esquerda a >> b 4 >> 2 1 Deslocamento à direita a << b 2 << 4 32 Negação ~a ~2 -3 Tabela: Resumo 6. 5. OPERADORES DE ATRIBUIÇÃO As operações observadas até aqui permitiram a realização de cálculos, comparações e manipulações dos dados. Agora, contudo, é necessário apresentar a maneira de armazenar esses valores em memória – e isso é feito em função dos operadores de atribuição. EXEMPLO: Em computação, como podemos atribuir um valor 1,80m a uma variável altura e como representamos essa expressão na linguagem C? Além disso, podemos armazenar o resultado de uma operação em determinada variável. Em nosso exemplo, o IMC é calculado pela divisão do peso pela altura ao quadrado: Como representamos essa expressão matemática na linguagem C? IMC = peso / (altura * altura); NESTE CASO, AS OPERAÇÕES SÃO REALIZADAS DO LADO DIREITO DA EXPRESSÃO, ENQUANTO SEU RESULTADO É ARMAZENADO NA VARIÁVEL IMC. EXEMPLO: Em uma aplicação, existe a necessidade de adicionar R$100,00 ao saldo bancário de uma pessoa. Para isso, deve-se recuperar o valor do saldo bancário dela, somar o de R$100,00 e, na sequência, armazenar o resultado na mesma variável. Caso esse saldo fosse representado pela variável SaldoBancario, como poderíamos representar sua expressão na linguagem C? Neste caso, a variável é utilizada dos dois lados da expressão. Dessa forma, do lado direito da equação, temos o valor inicial da variável antes de a expressão ser executada e, no esquerdo, o da variável após a sua execução. Essa forma de operação e atribuição sequencial pode ser substituída por outra mais resumida na qual não haja a necessidade de repetir o nome da variável dos dois lados da expressão: SaldoBancario += 100; Esta tabela demonstra que a forma resumida também pode ser utilizada em outras operações: Operação Forma resumida a = a + b; a + = b; Operação Forma resumida a = a - b; a - = b; a = a * b; a*=b; a=a/b; a/=b; a=a%b a%=b; a=a&b; a&=b; a=a|b; a|=b; a=a^b; a^=b a=a<<b; a<<=b; a=a>>b; a>>=b; 6. OPERADORES DE CONVERSÃO Este tipo de operador permite uma “tradução” entre valores diferentes. Com ele, é possível converter valores de tipos de dados diferentes. Essa conversão pode ocorrer de duas formas: SEM PERDA DE INFORMAÇÃO COM PERDA DE INFORMAÇÃO A) SEM PERDA DE INFORMAÇÃO Converte um tipo que ocupa uma quantidade menor de memória para outro com uma quantidade maior. EXEMPLO: Considere que a variável idade, do tipo inteiro, tenha valor 20. Desse modo, temos: idade = 20; Caso fosse necessário convertê-la para outra variável do tipo float, idade_real, essa conversão não apresentaria problema. Desse modo, teríamos: idade_real = (float) idade; Neste caso, a variável idade_real fica com o valor 20.0. Portanto, não há perda de informação. B) COM PERDA DE INFORMAÇÃO Converte um tipo de dado de maior tamanho ocupado em memória para outro com um tamanho menor. EXEMPLO: Considere a variável float pi com valor 3,1415: float pi = 3.1415; Se quisermos converter este número para uma variável inteira p, como a variável pi possui uma parte inteira (antes da vírgula) e outra decimal (depois dela), a inteira será copiada para a nova variável, enquanto a decimal ficará perdida. ASSIM, A CONVERSÃO INT P = (INT)PI; RESULTARIA NO SEGUINTE VALOR FINAL DE P= 3. HAVERIA, PORTANTO, UMA PERDA DA PARTE DECIMAL 0.1415. PRECEDÊNCIA DOS OPERADORES Precisamos definir a ordem em que os operadores podem ser aplicados. Imagine uma expressão do tipo: a+b%c O que seria executado primeiramente? A soma ou a operação resto de divisão? EXEMPLO: Considere que: int a=1, b=2, c=3; Qual seria o valor da expressão a+b%c? Como o operador resto da divisão tem precedência, ele é executado primeiramente e seu resultado, adicionado à variável soma. Desse modo, tal expressão seria executada pelo ambiente de desenvolvimento da seguinte forma: A + B % C 1 + 2 % 3 1 + 2 % 3 1 + 2 3 A precedência de todos os operadores é apresentada nesta tabela: Prioridade Precedência 12 () [] . -> Expressão++ Expressão-- 11 * & + - ! ~ ++Expressão --Expressão (Conversão) sizeof 10 * / % 9 + - 8 >> << 7 < > <= >= 6 == != 5 & ^ | 4 && 3 || 2 ?: 1 = += == *= /+ %= >>= <<= &= ^= |= , Nas primeiras linhas, são exibidos os itens com maior prioridade (menor número). Desse modo, aqueles com uma escala 10 possuem uma prioridade maior que outros com uma 5. TABELA VERDADE Já dissertamos sobre o funcionamento dos operadores lógicos e relacionais. Tais operadores são utilizados para desenvolver expressões lógicas a serem utilizadas em instruções de fluxo de execução, constituindo parte essencial no desenvolvimento de uma aplicação. Para analisar o resultado de uma expressão lógica, deve ser elaborada uma tabela conhecida como tabela verdade (ou tabela veritativa). São utilizadas nela todas as combinações possíveis de entrada, sendo calculados, consequentemente, todos os valores possíveis da expressão lógica. EXEMPLO: Considere a variável float pi com valor 3,1415: a && b A tabela verdade montada para tal expressão deve considerar que as variáveis a e b possam assumir os valores verdadeiro e falso, tendo o resultado expresso na última coluna desta tabela: a b a && b verdadeiro verdadeiro verdadeiro verdadeiro falso falso falso verdadeiro falso falso falso falso Apresentaremos a seguir as tabelas verdade para as expressões dos operadores lógicos anteriormente citados: a b a||b a b a||b verdadeiro verdadeiro verdadeiro verdadeiro falso verdadeiro falso verdadeiro verdadeiro falso falso falso a b a → b verdadeiro verdadeiro verdadeiro verdadeiro falso falso falso verdadeiro verdadeirofalso falso verdadeiro a b a ^ b verdadeiro verdadeiro falso verdadeiro falso verdadeiro falso verdadeiro verdadeiro falso falso falso a ~aa ~a verdadeiro falso falso verdadeiro Neste vídeo, o professor Humberto Henriques reforça, por meio de exemplos, o entendimento sobre os conceitos de precedência de operadores e de tabela verdade. APLICAÇÃO DOS CONCEITOS APRESENTADOS Imagem: Shutterstock.com Desde o final da década de 1990, a internet dominou todos os campos de nossa vida. Hoje em dia, é praticamente impossível vivermos sem o uso das ferramentas proporcionadas pela web (gerada nos laboratórios da CERN graças ao trabalho do físico britânico e cientista da computação Tim Berns-Lee). Imagem: Shutterstock.com Com a finalidade de apresentar uma forma mais dinâmica de divulgação dos dados, Berns-Lee desenvolveu o protocolo HTTP, que constitui a base de praticamente todas as tecnologias na área da informática. Esse desenvolvimento esteve fundamentado na confiabilidade dos protocolos que permitem o acesso aos sites feito basicamente por meio do envio de bits e bytes pela internet. CERN javascript:void(0); javascript:void(0); Sigla para a Organização Europeia de Pesquisa Nuclear, um dos maiores e mais respeitados centros de pesquisa científica do mundo. PROTOCOLO HTTP Ele permite o acesso a sites na internet. GRAÇAS À REPRESENTAÇÃO DE DADOS (INT, FLOAT, DOUBLE E CHAR) EM LINGUAGENS DE PROGRAMAÇÃO, FOI POSSÍVEL OBTER TODO O BOOM TECNOLÓGICO DOS ÚLTIMOS ANOS. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Operadores Relacionais Precedências de Operadores Tabela Verdade VERIFICANDO O APRENDIZADO 1. SEJAM AS VARIÁVEIS A , B E C DO TIPO INT (INTEIRO). CONSIDERANDO AS LINHAS DE CÓDIGO NA LINGUAGEM C ABAIXO: A = 3, B = 2, C = 2; C++; C += !A >= B && C != B; ASSINALE A ALTERNATIVA QUE CORRESPONDA AO VALOR DA VARIÁVEL C AO FINAL DA EXECUÇÃO: A) 4. B) 3. C) 2. D) 0. 2. (ADAPTADO DE: NUCEPE - SEDUC-PI - PROFESSOR DE INFORMÁTICA - 2009) ASSINALE A ALTERNATIVA QUE MOSTRA O OPERADOR LÓGICO OU EM LINGUAGEM C: A) $$ B) || C) && D) Or 3. (FCC - TRF - 4ª REGIÃO - TÉCNICO JUDICIÁRIO - TECNOLOGIA DA INFORMAÇÃO - 2014) O TIPO BOOLEANO É UM TIPO DE DADO UTILIZADO NA PROGRAMAÇÃO DE COMPUTADORES. EM OPERAÇÕES LÓGICAS, O RESULTADO SERÁ SEMPRE UM VALOR BOOLEAN TRUE OU FALSE. MUITAS VEZES, TAIS OPERAÇÕES SÃO APRESENTADAS EM UMA TABELA CONHECIDA COMO TABELA VERDADE. OBSERVE ESTE EXEMPLO: A B A E B A OU B NÃO (A E B) TRUE FALSE I II FALSE TRUE III AS LACUNAS I, II OU III SÃO PREENCHIDAS, CORRETA E RESPECTIVAMENTE, POR: A) True, true e false B) True, false e false C) False, true e true D) True, true e true 4. (FUNDATEC - PREFEITURA DE CHUÍ - RS - FISCAL DE TRIBUTOS - 2019) OBSERVE A SEGUINTE TABELA VERDADE: P Q R P^Q (P^Q)⇒R VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO (1) VERDADEIRO FALSO FALSO (2) OS VALORES LÓGICOS QUE PREENCHEM (1) E (2) SÃO, RESPECTIVAMENTE: A) Falso - Verdadeiro B) Verdadeiro - Verdadeiro C) Verdadeiro - Falso D) Falso - Falso 5. CONSIDERE O SEGUINTE SEGMENTO DE CÓDIGO NA LINGUAGEM C: INT A=5, B=2; FLOAT C=7, D=3; INT E, F; FLOAT G, H; E=A/B; F=C/D; G=A/B; H=C/D; ASSINALE A ALTERNATIVA QUE APRESENTA OS VALORES DAS VARIÁVEIS TÉRMINO DA EXECUÇÃO: A) 5, 2, 7.0, 3.0, 2, 2, 2.0, 2.3 B) 5, 2, 7.0, 3.0, 3, 4, 2.0, 2.3 C) 5, 2, 7.0, 3.0, 2, 2, 2.5, 2.3 D) 5, 2, 7.0, 3.0, 3, 4, 2.5, 2.3 6. (UFTM - ENGENHARIA DA COMPUTAÇÃO OU ENGENHARIA DA PRODUÇÃO - 2018) APONTE, ENTRE AS ALTERNATIVAS ABAIXO, OS RESULTADOS DA RESOLUÇÃO DA SEGUINTE EXPRESSÃO LÓGICA (ESCRITA NA LINGUAGEM C) PARA OS VALORES DE A, B E C DEFINIDOS NOS CENÁRIOS I, II E III: (A && B) && ((C || A || B) || (!A && C)) I: A=TRUE, B=TRUE, C=FALSE II: A=FALSE, B=TRUE, C=TRUE III: A=FALSE, B=TRUE, C=FALSE A) I: true, II: false, III: false B) I: true, II: true, III: false C) I: false, II: false, III: false D) I: false, II: true, III: false GABARITO 1. Sejam as variáveis a , b e c do tipo int (inteiro). Considerando as linhas de código na linguagem C abaixo: a = 3, b = 2, c = 2; c++; c += !a >= b && c != b; Assinale a alternativa que corresponda ao valor da variável c ao final da execução: A alternativa "B " está correta. Vamos analisar a execução das linhas de código: Na primeira linha as variáveis a , b , c (todas do tipo int) são inicializadas com os valores 3, 2 e 2, respectivamente; Na segunda linha a variável c é incrementada em 1 unidade. Logo, c = 3 e as demais variáveis permanecem inalteradas (a = 3 e b = 2); Na terceira linha temos a expressão lógica !a >= b && c != b sendo somada ao valor de c e atribuída à própria variável c ; Do lado esquerdo da expressão temos a verificação se a negação de a (!a) é maior ou igual a b . Como o valor de a é diferente de zero, portanto considerado na linguagem C como um valor verdadeiro, a sua negação será considerada como falso, ou seja, 0 (zero). E como b tem valor igual a 2, o resultado de !a >= b (0 >= 2) será falso (F); Do lado direito da expressão temos a verificação se a variável c é diferente de b . Após ter sido incrementada, c = 3. E como b = 2, c != b será verdadeiro (V); Substituindo na expressão !a <= b && c != b , temos F && V, ou seja, falso E verdadeiro, o que resulta em falso; Resta atribuir o resultado da expressão lógica à variável c . Como c é do tipo inteiro, o valor falso será representado pela linguagem C como 0 (zero); Substituindo em c += !a >= b && c != b , temos c += 0, que é o mesmo que c = c + 0. Assim, c = 3 + 0 = 3. 2. (Adaptado de: NUCEPE - SEDUC-PI - Professor de Informática - 2009) Assinale a alternativa que mostra o operador lógico OU em linguagem C: A alternativa "B " está correta. Os símbolos das letras A e D não pertencem à linguagem C. O símbolo de C é o e-lógico. 3. (FCC - TRF - 4ª Região - Técnico Judiciário - Tecnologia da Informação - 2014) O tipo booleano é um tipo de dado utilizado na programação de computadores. Em operações lógicas, o resultado será sempre um valor boolean TRUE ou FALSE. Muitas vezes, tais operações são apresentadas em uma tabela conhecida como tabela verdade. Observe este exemplo: A B A E B A OU B NÃO (A E B) TRUE FALSE I II FALSE TRUE III As lacunas I, II ou III são preenchidas, correta e respectivamente, por: A alternativa "A " está correta. Os valores calculados derivam diretamente das tabelas verdade apresentadas anteriormente: a b a || b verdadeiro verdadeiro verdadeiro verdadeiro falso verdadeiro falso verdadeiro verdadeiro falso falso falso a b a && b !(a && b) verdadeiro verdadeiro verdadeiro falso verdadeiro falso falso verdadeiro a b a && b !(a && b) falso verdadeiro falso verdadeiro falso falso falso verdadeiro 4. (FUNDATEC - Prefeitura de Chuí - RS - Fiscal de Tributos - 2019) Observe a seguinte tabela verdade: P Q R P^Q (P^Q)⇒R verdadeiro verdadeiro verdadeiro verdadeiro verdadeiro (1) verdadeiro falso falso (2) Os valores lógicos que preenchem (1) e (2) são, respectivamente: A alternativa "A " está correta. Os casos (1) e (2) são obtidos na verificação dos valores de P ^ Q nas tabelas verdade já apresentadas. 5. Considere o seguinte segmento de código na linguagem C: int a=5, b=2; float c=7, d=3; int e, f; float g, h; e=a/b; f=c/d; g=a/b; h=c/d; Assinale a alternativa que apresenta os valores das variáveis término da execução: A alternativa "A " está correta. Vemos que a/b é uma divisão inteira. Assim, seu resultado é inteiro; portanto, a/b=2. Quando esse valor é atribuído ao inteiro e, tal inteiro apenas recebe seu valor: e=2. Quando essa atribuição é feita a um número ponto flutuante, ele é convertido; logo, g=2.0. Observamos que c/d é uma divisão de números ponto flutuante sendo atribuída a um número inteiro, ou seja, depois da divisão com ponto flutuante (2.33333).Quando atribuído a um número inteiro, ele é convertido: f=2; já para um ponto flutuante, não há conversão: h=2.3. 6. (UFTM - Engenharia da Computação ou Engenharia da Produção - 2018) Aponte, entre as alternativas abaixo, os resultados da resolução da seguinte expressão lógica (escrita na linguagem C) para os valores de A, B e C definidos nos cenários I, II e III: (A && B) && ((C || A || B) || (!A && C)) I: A=true, B=true, C=false II: A=false, B=true, C=true III: A=false, B=true, C=false A alternativa "A " está correta. Devemos inicialmente montar a tabela verdade: A B C !A C=A&&B D=C||A||B E=!A&&C D||E C&&F 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 1 0 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 0 A B C !A C=A&&B D=C||A||B E=!A&&C D||E C&&F 0 0 0 1 0 0 0 0 0 Basta agora confrontar os valores da tabela verdade com os dados do enunciado apresentados nos itens I, II e III para encontrar o valor da expressão e os valores das variáveis mais adequados. CONCLUSÃO CONSIDERAÇÕES FINAIS Versamos sobre quatro tipos de dados primitivos utilizados na linguagem C: char, que representa um caractere; int, um número inteiro; float e double, que representam os números ponto flutuante de precisão simples e dupla. Além de descrevermos suas características e funcionalidades, falamos sobre a precedência deles. Apresentamos ainda seis tipos de operação que trabalham com esses operadores. Trata-se das operações matemáticas, relacionais, lógicas, bit a bit, de conversão e de atribuição. Por fim, estabelecemos os conceitos de tabela verdade. AVALIAÇÃO DO TEMA: REFERÊNCIAS DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2006. SCHILDT, H. C completo e total. 3. ed. São Paulo: Makron Books, 1996. EXPLORE+ Para explorar mais os conceitos da álgebra booleana e dos circuitos lógicos, sugerimos que assista ao seguinte filme: O jogo da imitação. Direção: Morten Tyldum. Estados Unidos: Diamond Films, 2014. 115 min, son., color. A obra retrata o desenvolvimento de uma tecnologia capaz de decifrar os códigos da máquina alemã Enigma durante a Segunda Guerra Mundial. Projetada a partir da combinação de circuitos lógicos, a Máquina de Turing foi desenvolvida pelo matemático e cientista da computação Alan Turing (1912-1954). CONTEUDISTA Anderson Fernandes Pereira dos Santos CURRÍCULO LATTES javascript:void(0); DESCRIÇÃO Inicialização de variáveis, apresentação de seus formatos de escrita e de leitura e reconhecimento de funções para armazenamento e exibição de dados. PROPÓSITO Criar programas utilizando os comandos de entrada e saída, habilidade fundamental à formação de um programador. PREPARAÇÃO Para este tema, recomendamos que você instale o software Dev C++, pois esse será o ambiente de programação que utilizaremos. Além desse, existem outros compiladores que suportam a linguagem C, como o Code::Blocks. OBJETIVOS MÓDULO 1 Utilizar o comando de atribuição MÓDULO 2 Aplicar os comandos de saída de dados MÓDULO 3 Executar os comandos de entrada de dados INTRODUÇÃO VOCÊ JÁ OUVIU FALAR OU REALIZOU ALGUM TESTE NO SITE BUZZFEED? Esse tipo de teste é muito conhecido e utilizado nas redes sociais para identificar perfis variados de usuários em diferentes contextos. Para começar este tema, preparamos um teste no estilo BuzzFeed sobre os diferentes tipos de inteligência propostos pelo psicólogo Howard Gardner que permitirá identificar as inteligências que você possui. javascript:void(0) Fonte: Site Planeta de libros HOWARD GARDNER Nasceu em 1943 na Pensilvânia (EUA). Iniciou os estudos em Direito e História na Universidade de Harvard, mudando, depois, para Psicologia e Educação. Pesquisou sobre os sistemas simbólicos, vindo a criar a chamada Teoria das Inteligências Múltiplas. Fonte: Escola e educação. Responda as perguntas abaixo. Você pode escolher mais de uma opção. Ao final do teste, clique nas legendas para ver as definições. Você deve estar se perguntando: SE ESTE TEMA É SOBRE PROGRAMAÇÃO, POR QUE PRECISEI FAZER UM TESTE SOBRE AS INTELIGÊNCIAS MÚLTIPLAS? Primeiro: o teste permite um autoconhecimento. Você saberá identificar suas inteligências com mais potencial e desenvolvê-las. Segundo: a dinâmica do teste mostra exatamente o que vamos tratar neste tema: comandos de entrada e saída. Ao realizar o teste, você precisou inserir dados para que um resultado fosse exibido ao final. Para ajudá-lo a entender melhor essa dinâmica, o professor Humberto Henriques explica, no vídeo a seguir, os contextos nos quais são utilizados os comandos de entrada e saída. HUMBERTO HENRIQUES Possui graduação em Engenharia de Computação pelo Instituto Militar de Engenharia (2003) e mestrado em Engenharia de Produção pela Universidade Federal do Rio de Janeiro (2009). Tem experiência na área de Engenharia de Produção e trabalha com metodologias de aprendizagem ativa e CDIO no Instituto Militar de Engenharia. Fonte: Currículo Lattes MÓDULO 1 Utilizar o comando de atribuição COMANDO DE ATRIBUIÇÃO javascript:void(0) Ao declarar uma variável, o compilador reserva espaço na memória para o armazenamento de valor. Como a memória do computador é composta por bytes, formados a partir de bits, a variável pode assumir um valor aleatório, uma vez que não temos controle sobre eles. A inicialização só ocorre quando se atribui valor por meio de um comando de atribuição. A seguir, vamos ver um pouco mais sobre o uso dessa ferramenta na programação. Imagem: Artram / Shutterstock.com CONCEITOS Todos os comandos apresentados neste tema obedecem à sintaxe (conjunto de regras) da linguagem C e do Portugol. Antes de utilizar o comando de atribuição, você deve inicializar a variável. Vejamos como realizar esse procedimento: Tomemos como exemplo a declaração da variável inteira chamada a. int a; Na linguagem C e no Portugol, esse comando é representado pelo sinal de igual =, conforme se observa no formato geral da estrutura: nome_da_variável = valor_atribuído; Após a declaração de a, existem duas maneiras de atribuir o valor 10 a essa variável: 1 De forma separada int a; a = 10; 2 Na mesma linha da declaração int a = 10; O nome da variável deve ajudar a entender seu significado. O uso de iniciais maiúsculas, a partir da segunda palavra, ou do símbolo underscore _ permite a criação de nomes mais complexos, como: idCliente, id_cliente, cpf_usuario, cpfUsuario, entre outros. Na linguagem C, ainda é possível atribuir o mesmo valor a mais de uma variável. Vejamos um exemplo: Com a seguinte instrução, é dado o valor 2 às variáveis a e b: a = b = 2; Observe que não há como guardar o histórico de valores de uma variável. A atribuição de outro valor faz com que o anterior seja perdido. Para evitar que isso aconteça, deve-se usar outra variável. Na sequência de instruções a seguir, a variável a vale 3, sem que 1 e 2 sejam guardados. int a; a = 1; a = 2; a = 3; ATENÇÃO Em pseudocódigo, o comando de atribuição é representado pela seta (←), mas não simboliza a igualdade; ele atribui à variável do lado esquerdo o valor que está à direita. Vejamos alguns exemplos: a ← 10 (pseudocódigo) ou a = 10 (Portugol e C) atribui o valor 10 à variável a. a ← a + 1 (pseudocódigo) ou a = a +1 (Portugol e C) acresce uma unidade à variável a, resultando no valor 11. O mesmo ocorre na próxima sequência, em que a teria o valor 6 ao final da execução das instruções: a ← 5 (pseudocódigo) ou a = 5 (Portugol e C). a ← a + 1 (pseudocódigo) ou a = a +1 (Portugol e C). O comando de atribuição pode ser usado para variáveis dos tipos int, double e float da mesma forma que vimos anteriormente. Por outro lado, o tipo char deve ser usado com cautela para que não haja confusão entre o uso de caractere e variável, conforme é mostrado a seguir: Para declarar uma variável do tipo char chamada escolha, usamos: char escolha; Como é do tipo char, espera-se receber caracteres. Para atribuir bà escolha, utilizaremos as aspas simples a fim de indicar que se trata do caractere b, e não da variável b, sendo o comando correto: escolha = ‘b’; Caso seja feito sem as aspas simples, o programa apontará erro, já que o compilador irá procurar a variável b, não declarada, para atribuir o seu valor à escolha. A linguagem C também permite operações aritméticas com variáveis do tipo char, relacionando o valor dos caracteres armazenados nelas aos inteiros correspondentes na tabela ASCII, conforme representado no próximo exemplo: TABELA ASCII Criada em 1960 por Robert W. Bemer, cientista da computação norte-americano conhecido pelo seu trabalho na IBM entre os anos de 1950 a 1960, a tabela ASCII uniformizou a representação de caracteres entre as máquinas. A sigla ASCII, do inglês American Standard Code for Information Interchange, significa Código Padrão Americano para o Intercâmbio de Informação. É baseado no alfabeto javascript:void(0) romano e sua função é padronizar a forma como os computadores representam letras, números, acentos, sinais diversos e alguns códigos de controle. No ASCII, existem apenas 95 caracteres que podem ser impressos. Eles são numerados de 32 a 126, sendo os caracteres de 0 a 31 reservados para funções de controle. Veja alguns caracteres especiais: \7 Bell (sinal sonoro do computador) \a Bell (sinal sonoro do computador) \b BackSpace \n New Line (mudança de linha) \r Carriage Return \t Tabulação Horizontal \v Tabulação Vertical \\ Caractere \\ (forma de representar o próprio caractere especial \ ) \’ Caractere ‘ (aspas simples) \” Caractere “ (aspas) \? Caractere ? (ponto de interrogação) \000 Caractere cujo código ASCII em Octal é 000 \xyy Caractere cujo código ASCII em Hexadecimal é yy Atenção! Para visualização completa da tabela utilize a rolagem horizontal char escolha; escolha = ‘b’; escolha = escolha + 1; Ao final da execução dessas linhas, a variável escolha armazenará o caractere ‘c’. E AÍ, ENTENDEU TUDO SOBRE COMO ATRIBUIR VALOR A UMA VARIÁVEL? Para que não haja mais dúvidas, o professor Humberto Henriques responde, no vídeo a seguir, às principais dúvidas sobre atribuição de valor a uma variável. TEORIA NA PRÁTICA A seguir você receberá uma série de atividades para realizar em seu ambiente de programação. Tente executá-las e, caso tenha alguma dúvida quanto ao resultado, basta clicar no botão “FEEDBACK” para obter a resposta. 1. Descubra qual é o valor da variável cont após a execução das seguintes linhas: int cont = 0; cont = cont + 1; FEEDBACK O valor da variável é 1. A variável cont é inicializada com 0, mas a segunda linha acresce uma unidade a esse valor. 2. Descubra qual é o valor da variável escolha após a execução das seguintes linhas: char escolha; escolha = ‘D’; escolha = escolha - 2; FEEDBACK O valor da variável é ‘B’. Por se tratar de um caractere, ao realizar a operação aritmética para diminuir duas unidades da variável escolha, ficará aquele que estiver duas posições antes na tabela ASCII (nesse caso, no alfabeto). Vale lembrar que a linguagem C é case sensitive, ou seja, diferencia letras maiúsculas de minúsculas. 3. Descubra qual é o valor da variável c após a execução das seguintes linhas: int a, b, c, d; a = 10; b = a + 1; c = b + 1; d = c + 1; a = b = c = d = 20; FEEDBACK O valor da variável é 20. A última linha atribui valor 20 a todas as variáveis, não importando o valor que tinham previamente. 4. Descubra qual é o resultado da execução das seguintes linhas: char escolha; escolha = a; escolha = escolha + 1; FEEDBACK Ocorrerá erro de compilação na segunda linha por não haver variável declarada com o nome a. Lembre-se sempre de não confundir caractere ‘a’ com variável a. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Teoria na Prática – Exemplo de comando de atribuição na linguagem Java Teoria na Prática – Exemplo de atribuição na linguagem Python VERIFICANDO O APRENDIZADO 1. QUAL É O VALOR ARMAZENADO NA VARIÁVEL A APÓS A EXECUÇÃO DESTAS LINHAS? INT A, B, C; A = B + C; B = 1; C = B + 1; A) 1. B) 2. C) 3. D) Um valor aleatório. 2. QUAL É O VALOR ARMAZENADO NA VARIÁVEL CH APÓS A EXECUÇÃO DESTAS LINHAS? INT A = 1; CHAR CH = ‘A’; CH = CH + A; A) 1. B) ‘A’. C) ‘B’. D) Ocorrerá um erro de compilação. GABARITO 1. Qual é o valor armazenado na variável a após a execução destas linhas? int a, b, c; a = b + c; b = 1; c = b + 1; A alternativa "D " está correta. A variável a recebe a soma das variáveis b e c, porém, na segunda linha, elas ainda não têm valor atribuído. O resultado é um valor aleatório, visto que os bits são compostos por 0 e 1. 2. Qual é o valor armazenado na variável ch após a execução destas linhas? int a = 1; char ch = ‘A’; ch = ch + a; A alternativa "C " está correta. A terceira linha somará uma unidade ao valor da variável ch e, com isso, ela passará a armazenar o caractere ‘B’. MÓDULO 2 Aplicar os comandos de saída de dados COMANDOS DE SAÍDA A partir de agora vamos conhecer os comandos de saída, utilizados na programação para permitir a exibição de informações ao usuário. Além disso, construiremos nosso primeiro programa em C. VOCÊ LEMBRA DO TESTE ESTILO BUZZFEED QUE REALIZOU NO INÍCIO DESTE TEMA? No vídeo a seguir, o professor Humberto Henriques retoma o teste e mostra como os resultados são exibidos na tela a partir dos comandos de saída. CONCEITOS VOCÊ SABE QUAL A RELAÇÃO ENTRE UM PROGRAMA E A LINGUAGEM C? Um programa é uma sequência de instruções dadas para resolver um problema. Imagem: Titov Nikolai / Shutterstock.com A linguagem C é a forma de dar essas orientações ao computador. O nosso primeiro programa em C será o mais conhecido no mundo da programação: o Hello World. Vamos começar! No seu ambiente de programação, digite a seguinte sequência: #include <stdio.h> void main(){ printf("Hello World"); } Salve o arquivo com o nome de sua preferência e execute-o. Você verá este resultado: Hello World Dentro da função main(), inserimos as instruções que serão executadas. Usam-se as chaves { } para delimitar o que está incluso no corpo dessa função. A primeira linha #include <stdio.h> é uma diretiva de pré-compilação e não uma instrução, por isso não é seguida por ponto e vírgula. A diretiva serve para incluir funções que estejam na biblioteca por meio das tags < >. Entende-se, então, que a biblioteca stdio.h tem funções que serão usadas em main(). Em main(), nota-se uma única função, representada por printf(), que faz parte da biblioteca stdio.h. Por esse motivo, é preciso incluir a biblioteca no início do arquivo. Printf, traduzido do inglês como escrever formatado (print + format), tem como principal objetivo realizar a escrita na tela. Você pode estar se perguntando: MAS O QUE ESSA FUNÇÃO EXIBE PARA O USUÁRIO? Ela exibe o parâmetro recebido dentro dos parênteses! No exemplo anterior, printf() recebeu Hello World como parâmetro. Perceba que a string (cadeia de caracteres) está entre aspas, uma vez que servem para delimitá-la. Para testar os conhecimentos adquiridos até aqui, tente fazer sozinho um programa que escreva o seu nome completo na tela. Observe estas instruções: #include <stdio.h> void main(){ printf("Primeira linha"); printf("Segunda linha"); } Ao compilar esse programa, você verá na tela: Primeira linhaSegunda linha Observe que a função printf() não faz a quebra de linha automática ao final da string. Em função disso, devemos inserir o caractere especial ‘\n’, ajustando o programa anterior para: #include <stdio.h> void main(){ printf("Primeira linha\n"); printf("Segunda linha"); } Com isso, teremos: Primeira linha Segunda linha A função printf() também permite a utilização de variáveis para compor o que será escrito na tela. Para indicar a posição de entrada de conteúdode variáveis dos tipos int e char utilizam- se, respectivamente, os símbolos %d e %c. Vejamos, a seguir, a utilização dessas variáveis. Observe o exemplo a seguir: #include <stdio.h> void main(){ int a = 10; char ch = 'Z'; printf("Atualmente, temos a = %d e ch = %c.\n", a, ch); } Após a execução dessas instruções, o resultado será: Atualmente, temos a = 10 e ch = Z. Também podemos utilizar mais de uma variável do mesmo tipo, desde que sejam passadas, corretamente, quais delas preencherão a frase. Será seguida, então, a ordem invocada em printf(), com os conteúdos das variáveis acompanhando a sequência de uso dos símbolos %d ou %c e a correspondente passagem de parâmetros. Vejamos como aplicar essas variáveis: Observe o exemplo a seguir: #include <stdio.h> void main(){ int a, b, c; a = 10; b = a + 1; c = b + 2; printf("Atualmente, temos a = %d, b = %d e c = %d.\n", a, b, c); } Depois de compilar esses códigos, você verá em sua tela: Atualmente, temos a = 10, b = 11 e c = 13. Você também pode escrever uma expressão matemática como parâmetro da função printf() por meio destas linhas: #include <stdio.h> void main(){ int a; a = 10; printf("A variavel a vale %d. Seu sucessor e o %d.\n", a, a + 1); } Em resposta a esses comandos, o computador exibirá: A variavel a vale 10. Seu sucessor e o 11. No próximo exemplo, utilizamos variáveis do tipo char: #include <stdio.h> void main(){ char ch1, ch2, ch3; ch1 = 'H'; ch2 = 'o'; ch3 = 'W'; printf("%cell%c %corld.\n", ch1, ch2, ch3); } Este será o resultado: Hello World. SAIBA MAIS Para ampliar seus conhecimentos, listamos os principais formatos de escrita e leitura das variáveis, usados com a função printf(): Tipo Formato Observações char %c Um único caractere int %d ou %i Um inteiro (Base decimal) int %o Um inteiro (Base octal) int %x ou %X Um inteiro (Base hexadecimal) short int %hd Um short inteiro (Base decimal) long int %ld Um long inteiro (Base decimal) unsigned short int %hu Short inteiro positivo unsigned int %u Inteiro positivo unsigned long int %lu Long inteiro positivo float %f ou %e ou %E double %f ou %e ou %E Atenção! Para visualizaçãocompleta da tabela utilize a rolagem horizontal O próximo exemplo mostra o uso de printf com variável do tipo float. Observe o exemplo a seguir: #include <stdio.h> void main(){ float a; a = 12.5; printf("a = %f\n", a); } Na tela, será exibido: a = 12.500000 Repare que a variável do tipo float é armazenada com seis casas decimais. Para reduzir esse número, utiliza-se %.1f, %.2f, entre outros. O número entre “.” e “f” indica as casas decimais exibidas. É importante lembrar que o conteúdo da variável permanece inalterado, visto que a mudança afeta apenas a forma como será feita a escrita na tela. Vamos fazer um teste! No exemplo anterior, caso alterássemos a última linha para: printf("a = %.1f\n", a); O resultado seria: a = 12.5 Outra função que pode ser usada para a escrita na tela é a puts(), traduzida do inglês como colocar caractere (put + string). Tanto puts (“Hello World”); quanto printf(“Hello World”); terão o mesmo efeito. E AÍ, ALGUMA DÚVIDA SOBRE OS COMANDOS DE SAÍDA DE DADOS? Então assista ao vídeo a seguir, onde o professor Humberto Henriques vai responder às principais dúvidas sobre os comandos de saída. TEORIA NA PRÁTICA 5. Execute o seguinte trecho de código escrito em C e observe o que será exibido na tela. #include <stdio.h> void main(){ int a, b, c; a = 1; b = a + 3; c = a; printf(“b = %d e c = %d.\n”, b, c); } FEEDBACK Ao usar o símbolo %d, o conteúdo das variáveis b e c será colocado na frase e será exibido o seguinte resultado: b = 4 e c = 1 6. Execute o seguinte código escrito na linguagem C e observe o que será exibido na tela. #include<stdio.h> int main() { printf("Valor total: %.1f\n", 9.1415169265); return 0; } FEEDBACK Ao usar o símbolo %.1f, o conteúdo da variável será exibido com apenas uma casa decimal: Valor total: 9.1 7. Determine qual é a função que as strings “%d”, “%f” e “%s” estão usualmente associadas na linguagem C. FEEDBACK Os símbolos %d, %f e %s são utilizados para compor a frase que a função printf() vai exibir na tela. VEM QUE EU TE EXPLICO! Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar. Teoria na Prática – Exemplo de comando de saída na linguagem Java Teoria na Prática – Exemplo de comando de saída na linguagem Python VERIFICANDO O APRENDIZADO 1. CONSIDERE O SEGUINTE TRECHO DE CÓDIGO ESCRITO EM C: #INCLUDE <STDIO.H> VOID MAIN(){ INT A, B; A = 5; B = A%2; A = A + 1; PRINTF(“A = %D E B = %D.∖N”, A, B); } ASSINALE A ALTERNATIVA QUE APRESENTA, CORRETAMENTE, O CONTEÚDO A SER EXIBIDO NA TELA QUANDO O TRECHO FOR EXECUTADO. A) a = %d e b = %d.∖n. B) a = 5 e b = 1.∖n. C) a = 6 e b = 1. D) a = 6 e b = 0. 2. CONSIDERE O SEGUINTE TRECHO DE CÓDIGO ESCRITO EM C: #INCLUDE <STDIO.H> VOID MAIN(){ CHAR LETRA; INT A; A = 10; LETRA = ‘L’; LETRA = LETRA + A%2; PRINTF(“A = %D E LETRA = %C.∖N”, A, LETRA); } ASSINALE A ALTERNATIVA QUE APRESENTA, CORRETAMENTE, O CONTEÚDO A SER EXIBIDO NA TELA QUANDO O TRECHO FOR EXECUTADO: A) a = 10 e letra = L. B) a = 10 e letra = M. C) a = 0 e letra = L. D) a = 10 e letra = K. GABARITO 1. Considere o seguinte trecho de código escrito em C: #include <stdio.h> void main(){ int a, b; a = 5; b = a%2; a = a + 1; printf(“a = %d e b = %d.∖n”, a, b); } Assinale a alternativa que apresenta, corretamente, o conteúdo a ser exibido na tela quando o trecho for executado. A alternativa "C " está correta. A variável b recebe o resto de a dividido por 2. Como a, nesse momento, tem valor 5, o resto da divisão por 2 é 1. A variável a, após a atribuição de valor de b, é incrementada em uma unidade. 2. Considere o seguinte trecho de código escrito em C: #include <stdio.h> void main(){ char letra; int a; a = 10; letra = ‘L’; letra = letra + a%2; printf(“a = %d e letra = %c.∖n”, a, letra); } Assinale a alternativa que apresenta, corretamente, o conteúdo a ser exibido na tela quando o trecho for executado: A alternativa "A " está correta. Como o resto da divisão de a por 2 é igual a 0, o valor da variável a não é alterado. MÓDULO 3 Executar os comandos de entrada de dados COMANDOS DE ENTRADA DE DADOS Já conhecemos os comandos de saída. Agora você vai conhecer os comandos de entrada, utilizados na programação para receber e processar as informações fornecidas pelo usuário. Mas antes, vamos novamente retomar aquele teste estilo BuzzFeed que você respondeu no início do tema. No vídeo a seguir, o professor Humberto Henriques explica a relação do teste BuzzFeed com os comandos de entrada de dados. CONCEITOS No cotidiano do programador, além de exibir a escrita formatada na tela, é preciso ler os dados informados pelo usuário. Para isso, utilizam-se comandos de entrada, permitindo a leitura formatada, principalmente, a partir do teclado, como é o caso do scanf(). A função scanf() permite que o valor informado pelo usuário seja armazenado em uma variável e, posteriormente, usado para diversos cálculos. Imagem: monkographic / Shutterstock.com Para chamar essa função, basta passar dois parâmetros entre os parênteses. Observe: #include <stdio.h> void main(){ int numero; printf("Entre com um número inteiro:\n"); scanf("%d", &numero); } 1 O primeiro é composto pela string que traz o formato de leitura, com %d, %f ou %c entre aspas. 2 O segundo armazena o valor recebido, sendo o nome dessa variável precedido de &. ATENÇÃO É importante que você observe alguns detalhes: O formato de leitura se mantém igual ao da escrita na tela: %d para as variáveis do tipo int, %f para as do tipo float e %c para as do tipo char. Por enquanto, não vamos nos aprofundar no porquê do uso do & antes do nome da
Compartilhar