Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C AULA 1 – FUNDAMENTOS DA LÓGICA Objetivos • Identificar raciocínio lógico e pensamento computacional; • Examinar fluxogramas e algoritmos escritos em portugol; • Praticar a estruturação de soluções com fluxogramas e algoritmos. Tecnologia A tecnologia avançou muito e a maioria das pessoas possui um smartphone ou um notebook. Vivemos em um mundo em que os computadores são encontrados em quase toda parte e a maioria dos objetos agora está conectada a eles. Os smartphones, por exemplo, são uma combinação de computadores e telefones; os smartwatches são a união de computadores com relógios de pulso. Esse panorama nos leva a acreditar que, em um futuro não muito distante, é possível que todos os objetos acabem sendo associados a computadores. Muitas empresas e nomes conhecidos já afirmaram que vivemos a era em que os objetos serão controlados por computadores; mas não podemos esquecer que é a programação que alimenta os computadores e os transforma em máquinas capazes de grandes feitos. Por causa do aumento rápido na demanda por computadores, a demanda cresce. Apesar disso, há uma falta de programadores em todo o mundo e não é raro assistir reportagens na televisão que dizem sobrar vagas na área de TI. Diante dessa situação, muitas pessoas perceberam a importância da programação e escolas ao redor do mundo começaram a incluir a disciplina em seu currículo desde o ensino fundamental. Em uma graduação da área de tecnologia, aprender a programar computadores faz total sentido. É a nós que a sociedade confia a tarefa de criar as muitas aplicações que fazem dos computadores essas máquinas tão úteis e essenciais. Então, começaremos a conversar sobre como você deve estruturar seu pensamento para conseguir solucionar, com a ajuda do computador, os diferentes problemas do cotidiano. “Ninguém nasce cientista da computação, mas com um pouco de trabalho duro e um pouco de matemática e ciências, praticamente qualquer um pode se tornar um. Não deixe ninguém te dizer ‘Você não pode’. Se você é um jovem ou uma jovem, quer viva em uma cidade ou em uma área rural, os computadores serão uma grande parte do seu futuro. Se você está disposto a trabalhar e estudar muito, esse futuro é seu para moldar.” (Barack Obama, ex-presidente dos Estados Unidos) 2 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C O que é necessário para aprender programação? Neste momento, você pode estar se perguntando se possui as qualidades necessárias para aprender a programar computadores. Bom, tranquilize-se, pois tudo de “não tecnológico” de que você vai precisar é o seu raciocínio lógico. Na computação, o raciocínio lógico é o que nos ajuda a explicar por que as coisas acontecem da maneira como acontecem. Pense só: Se você configurar dois computadores da mesma maneira, fornecer as mesmas instruções e os mesmos dados de entrada, você pode praticamente garantir a mesma saída. Os computadores não fazem as coisas de forma diferente da informada e não dependem de como se sentem no momento. Isso significa que os computadores são previsíveis. Por causa desta característica, podemos usar o raciocínio lógico para descobrir exatamente o que um programa ou sistema de computador fará. A lógica é fundamental para o funcionamento dos computadores; tudo o que a máquina faz é controlado pela lógica e podemos usá-la para raciocinar sobre o comportamento dos programas. O raciocínio lógico nos ajuda a entender as coisas observando, coletando dados, pensando sobre os fatos que conhecemos e depois calculando as coisas com base no que já sabemos. Ele nos ajuda também a usar nosso conhecimento existente para estabelecer regras e checar fatos, e, por fim, contribui para o desenvolvimento de uma nova forma de pensar: o pensamento computacional. O pensamento computacional O pensamento computacional é um processo de solução de problemas que envolve os seguintes passos: • Identificação e descrição de um problema. • Verificação de detalhes importantes para a solução. • Decomposição do problema em partes menores. • Tratamento dos segmentos na criação de um processo de solução. • Aplicação e avaliação da solução proposta É importante ressaltar que, antes que um computador possa ser utilizado para resolver um problema, precisamos compreender o problema e as diferentes maneiras que podemos usar para solucioná-lo. O pensamento computacional envolve tomar esse problema e dividi-lo em uma série de problemas menores e mais gerenciáveis (decomposição). Cada um desses problemas menores pode ser examinado individualmente, considerando como problemas semelhantes foram resolvidos anteriormente. Existem quatro pilares para o pensamento computacional: 3 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C • Decomposição: Envolve a decomposição do problema em partes menores e mais gerenciáveis. • Reconhecimento de padrões: Busca semelhanças entre o problema e outras soluções anteriores e dentro do próprio problema. • Abstração: Concentra-se nas informações relevantes para o problema, ignorando detalhes que não são importantes. • Algoritmos: Desenvolvem uma solução passo a passo para o problema, incluindo as regras a serem seguidas para tal. Esses pilares são como pernas de uma mesa: se uma estiver faltando, a mesa provavelmente não se manterá de pé. O esquema a seguir ilustra a relação dos quatro pilares para o pensamento computacional: Ter um raciocínio lógico apurado pode ajudar no trabalho, nos estudos e nas relações interpessoais. Para melhorar sua habilidade de pensar logicamente, envolva-se em atividades que estimulem o pensamento crítico, trabalhe na alteração de seus padrões de pensamento e participe de jogos que exijam habilidades de raciocínio. Algoritmos A discussão em torno do conceito e das etapas do pensamento computacional introduziu um termo muito presente no estudo de programação: algoritmos. Mas o que são algoritmos? Os algoritmos são séries de procedimentos definidos passo a passo que visam a solução de um problema. Algoritmos são independentes de linguagens de programação e, por isso, um algoritmo pode ser convertido em qualquer linguagem de programação. Exemplo: Joana é programadora e recebeu o desafio de criar algoritmos para descrever como jogar pedra- papel-tesoura. Da maneira como está descrito, o jogador vencedor precisa ganhar duas rodadas em três: 1. Ambas as pessoas escolhem entre pedra, papel ou tesoura. 2. Se os dois jogadores escolherem as mesmas opções, refaça a etapa 1. 3. Se os dois jogadores escolherem opções forem diferentes: 3.1. Se o primeiro jogador escolheu tesoura e o segundo escolheu papel, então o primeiro jogador recebe um ponto. Decomposição Abstração Identificação de padrões Algoritmos Pensamento Computacional 4 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 3.2. Se o primeiro jogador escolheu tesoura e o segundo escolheu pedra, então o segundo jogador recebe um ponto. 3.3. Se o primeiro jogador escolheu papel e o segundo escolheu tesoura, então o segundo jogador recebe um ponto. 3.4. Se o primeiro jogador escolheu papel e o segundo escolheu pedra, então o primeiro jogador recebe um ponto. 3.5. Se o primeiro jogador escolheu pedra e o segundo escolheu tesoura, então o primeiro jogador recebe um ponto. 3.6. Se o primeiro jogador escolheu pedra e o segundo escolheu papel, então o segundo jogador recebe um ponto. 4. Repita os passos 1 a 3 até que um jogador tenha dois pontos. O exemplo de algoritmo anterior está escrito de forma livre e não segue nenhuma representação padrão. Os algoritmos que formulam soluções para problemas computacionais e que serão traduzidos em uma linguagem de programação normalmente estão descritos como fluxogramas ou escritos em pseudocódigo. Fluxogramas Os fluxogramas são a representaçãográfica dos algoritmos. Para desenhá-los, existe um conjunto de regras a ser seguido e é necessário utilizar uma simbologia específica. Veja, a seguir, os símbolos que podem ser usados: Terminação Processo Dados Decisão Processo Definido Armazenamento interno Documento Fita Perfurada Somador Ou Agrupar Classificar Extrair Mesclar Vários documentos Preparação Entrada manual Operação manual Conector de mesma página Conector fora de página 5 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Para compreendermos de que maneira os símbolos do fluxograma são utilizados, observe os exemplos a seguir. Disco magnético Armazenamento de acesso direto Exibir Processo alternativo Início Num1, Num2 Soma = Num1 + Num2 Soma Fim Soma: O usuário deve fornecer dois números quaisquer para que o computador calcule a soma dos mesmos e exiba o resultado. Média: O usuário deve fornecer as notas de um teste e uma prova para que seja calculada a média do aluno para informá-lo se ele está abaixo da média mínima. Início Teste, Prova Media = (Teste+Prova)/2 Media Media<6 “Você está abaixo da média!” Fim Verdadeiro Falso Cartão Dados armazenados Atraso Armazenamento de acesso sequencial 6 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Pseudocódigo Os programas de computador são escritos em linguagens de programação. Essas linguagens possuem uma sintaxe muito particular que deve ser respeitada para que o programa seja executado corretamente. O pseudocódigo não é uma linguagem de programação e, por isso, não precisa seguir uma sintaxe específica. Ele é uma maneira simples de descrever um conjunto de instruções que deverão ser executadas pelo computador. O pseudocódigo é escrito na língua nativa de quem o utiliza – no nosso caso, o português – e sua intenção é garantir que qualquer pessoa compreenda o que está descrito. Em computação, o termo sintaxe faz referência às regras que especificam de que maneira devem ser utilizadas as instruções e declarações de uma linguagem de programação. Na Informática, os algoritmos costumam ser escritos em portugol. O portugol é uma pseudolinguagem, ou seja, é uma linguagem intermediária entre a linguagem natural e a linguagem de programação. Para fins de padronização e garantia de compreensão dos algoritmos, o portugol adota algumas regras. Vamos ver o exemplo a seguir, em que são recebidos dois números para que se calcule e exiba a subtração entre eles. Início Escreva(“Informe o 1° Número: “) Leia(N1) Escreva(“Informe o 2° Número: “) Leia(N2) Subtra <- N1 – N2 Escreva(“A subtração entre os números é :”, Subtra) Fim A instrução escreva indica que a mensagem entre aspas deve ser mostrada na tela do computador. Há variações deste comando no portugol e, em alguns algoritmos, é possível que essa mesma instrução apareça como escrever, exibir ou exiba. O mesmo acontece com a instrução leia, que indica que o usuário deve informar um valor via teclado e que esse valor será armazenado na variável entre parênteses. Alguns algoritmos utilizam ler, receber ou receba. Apesar dessa pequena variação nas instruções e, algumas vezes, na estrutura dos algoritmos escritos em portugol, você não precisa preocupar, já que as instruções são praticamente sinônimas. No exemplo anterior, do fluxograma no qual o usuário devia fornecer as notas de um teste e uma prova para que fosse calculada a média do aluno para informá-lo se estava abaixo da média mínima, observe como ficariam as instruções quando escritas em portugol. Veja novamente o fluxograma e, a seu lado, as instruções em português estruturado: 7 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Fluxograma: Algoritmo em Portugol O portugol não é uma linguagem de programação e, por isso, um algoritmo escrito em portugol não pode ser executado por um computador. Para garantir que os algoritmos pudessem ser testados antes que fossem traduzidos para uma linguagem de programação, diversos programas começaram a surgir: • Portugol Online • VisuAlg • Portugol Studio Todas essas alternativas são excelentes para quem está iniciando o estudo de programação, pois permitem que a proposta de solução seja executada e testada e, assim, sejam identificados pelo programador possíveis erros de lógica presentes na solução. Ao longo de nossas aulas, os algoritmos serão escritos conforme padrão do Portugol Studio. Sugerimos que você instale essa ferramenta em seu computador para que possa realizar os exercícios e vê-los funcionando. O portugol Studio é um projeto brasileiro desenvolvido pelo Laboratório de Inovação Tecnológica na Educação da Universidade do Vale do Itajaí (UNIVALI), é gratuito. Início Teste, Prova Media = (Teste+Prova)/2 Media Media<6 “Você está abaixo da média!” Fim Verdadeiro Falso Início Leia(Teste) Leia(Prova) Media <- (Teste+Prova)/2 Escreva(Media) Se (Media<6) Escreva (“Você está abaixo da média”) Fim Se Fim 1 2 3 4 5 6 7 1 2 3 4 5 6 7 5 8 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Exercício Imagine que você está prestes a viajar para os Estados Unidos e deseja saber quantos dólares consegue comprar com uma determinada quantia em reais. 1. Crie um fluxograma que pergunte a quantia em reais de que você dispõe e exiba quantos dólares será possível comprar com mesma quantia. Lembre-se de fazer com que o fluxograma pergunte também a cotação do dólar para o dia da conversão. 2. Com base no fluxograma que você desenvolveu no exercício anterior, escreva o algoritmo que resolva o mesmo problema. 1) 2) AULA 2 – CONCEITOS BÁSICOS DE PROGRAMAÇÃO A codificação desenvolve habilidades para a resolução de problemas e permite que você crie uma solução que funcione exatamente da maneira que deseja. Para isso, é necessário definir as etapas para usar os recursos a sua disposição de forma a executar a tarefa com eficiência. Nesta aula, veremos alguns dos recursos disponíveis para os programadores: as variáveis e as constantes, seus tipos e os operadores. As variáveis são essenciais e dificilmente você criará um programa ou algoritmo no qual não precise delas. Portanto, aprender a utilizá-las adequadamente é um requisito básico para os programadores. Os operadores também são muito importantes. Eles nos permitem criar expressões aritméticas, relacionais e lógicas e, assim como as variáveis, são muito utilizados nas soluções que desenvolveremos ao longo de nossos exercícios. Objetivos: • Apontar o conceito de variáveis e constantes; • Identificar os diferentes tipos de dados existentes; • Examinar os diferentes tipos de operadores e sua aplicação. Início Reais, Cotacao Dolares = (Reais/Cotacao) Dolares Fim Início Escreva(“Quantos reais você tem? ”) Leia(Reais) Escreva(“Qual a cotação do dólar hoje? ”) Leia(Cotacao) Dolares <- Reais/Cotacao Escreva(Dolares) Fim 9 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Armazenamento de dados Já estudamos que o princípio básico do funcionamento dos computadores envolve as etapas de: entrada > processamento > saída Isso significa dizer que o computador recebe dados, faz o processamento necessário com eles e gera as informações necessárias para a saída. Na programação, trabalharemos diretamente com essas etapas. Observe o exemplo a seguir: Início Escreva(“Informe o 1o. número: ”) Leia(N1) Escreva(“Informe o 2o. número: ”) Leia(N2) Subtra <- N1 - N2 Escreva(“A subtração entre os números é ”, Subtra) Fim Entrada de dados > Processamento > Saída de Informações Nesse exemplo, as cores destacam a etapa envolvida em cada momento. Veja que fica claroque ocorre a entrada de dois dados que servem para o cálculo da subtração, que é a etapa de processamento. Em seguida, o valor obtido com a realização do cálculo é mostrado para o usuário, o que configura a saída de informações. Os dados de entrada e as informações a serem exibidas como saídas ficam armazenados na memória principal do computador, conhecida como RAM – Random Access Memory ou Memória de Acesso Aleatório. Por isso, é preciso ter uma solução que permita armazenar os dados e recuperá-los sem dificuldade e sem que eles se misturem com todos os outros dados na memória. Essa solução existe: são as variáveis. Variáveis Uma variável é um espaço da memória principal dedicado ao armazenamento temporário de valores. Ela funciona como um recipiente em que colocamos os valores dos quais precisamos para o programa e retiramos de lá quando eles já não são mais necessários. É possível, também, alterar esses valores ao longo da execução do programa pois, como o nome diz, eles são variáveis. Quando criamos uma variável, precisamos dar a ela um identificador. Esse identificador funcionará como um rótulo para a área da memória onde a variável está armazenada. Toda as vezes que precisarmos recuperar o valor da variável ou armazenar um valor na mesma, faremos referência ao seu identificador. 10 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C As regras para a criação desses identificadores variam em função da linguagem de programação utilizada, por isso precisamos conhecer essas regras quando estivermos programando em uma nova linguagem. Em nossas aulas, utilizaremos o Portugol Studio para testar os algoritmos. Para promover a familiarização com uma linguagem de programação, utilizaremos C++ e o ambiente de desenvolvimento Dev-C++. Este software é gratuito e portátil. Em geral, os identificadores de variáveis podem conter letras e números, não devem conter espaços em branco nem caracteres especiais, e não podem começar com números. O único caractere especial que costuma ser aceito em nomes de variáveis é o sublinhado (_). É importante, também, que o identificador seja capaz de nos fazer lembrar o dado que está armazenado na variável. Se você precisa armazenar o nome de um cliente, por exemplo, o ideal é identificar sua variável como nome ou nomeCliente. No C++, as regras para criação de identificadores de variáveis são as seguintes: Os identificadores podem começar com uma letra ou com o caractere “_” Após o primeiro caractere, o identificador pode ser composto por letras e números Caracteres especiais e espaços em branco não podem ser utilizados É importante ressaltar que algumas linguagens são case sensitive (ou sensíveis ao caractere). Isso significa que os caracteres maiúsculos são considerados diferentes dos seus equivalentes minúsculos. Assim, nesse tipo de linguagem, os identificadores telefone, Telefone e TELEFONE representariam três variáveis diferentes. Lembre-se: C++ é uma linguagem case sensitive. Outro aspecto importante a respeito das variáveis é que elas podem ser de diferentes tipos. Em geral, esses tipos pertencem à categoria dos numerais, dos literais ou dos lógicos. • Numerais: Agrupa tipos que identificam variáveis cuja intenção é armazenar valores numéricos. • Literais: Permitem a criação de variáveis para armazenamento de caracteres. • Lógicos: Permitem a criação de variáveis para armazenamento de valores do tipo verdadeiro ou falso. Observe a tabela a seguir e veja os tipos de variáveis existentes no Portugol Studio e seus tipos equivalentes no C++: Tipos de Variáveis Portugol Studio C++ inteiro: número sem casa decimal significativa int / long int real: número com casa decimal significativa float / double caractere: somente um caractere char cadeia: conjunto de caracteres char logico: verdadeiro ou falso bool No Portugol Studio, as palavras com o tipo de dado que define variáveis para armazenamento de valores lógicos são escritas sem os acentos. 11 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Para que uma variável possa ser utilizada em um programa, ela precisa ser criada (ou declarada, que é o termo utilizado em programação). A forma como a declaração de variáveis é feita depende da sintaxe da linguagem de programação utilizada. A linguagem C++ é fortemente tipada, o que significa dizer que será necessário informar tipo e identificador da variável para que ela seja criada. O Portugol Studio segue o mesmo critério. Veja exemplos de definições de variáveis a seguir. Declaração de Variáveis Portugol Studio C++ inteiro idade = 42 int idade = 42; real saldo = 550.00 float saldo = 550.00; cadeia nome = “Luciana” char nome[] = “Luciana”; cadeia sexo = ‘F’ char sexo[] = “F”; logico trabalha = verdadeiro bool trabalha = true; No C++, as variáveis lógicas são declaradas como do tipo bool e podem receber true (verdadeiro) ou false (falso). Nas linguagens de programação fortemente tipadas, o tipo de dado a ser armazenado na variável deve ser explicitamente definido. Outro aspecto importante é que a variável somente armazenará valores do tipo definido em sua declaração e a tentativa de armazenar valores de tipos distintos, acarretará erro. Observe um exemplo de operação que gerará um erro: soma = 2 + “2”; A operação tenta somar um tipo caractere com um tipo inteiro; o que não é permitido em linguagens fortemente tipadas. Alguns exemplos de linguagens fortemente tipadas são C e Java. Existem também as linguagens de programação fracamente tipadas, nas quais o tipo de dado não é uma prioridade. Por conta disso, podemos especificar um tipo para um dado, mas usá-lo como outro tipo. Nesse caso, a conversão de tipos é realizado automaticamente. Observe, por exemplo, o código a seguir: soma = 2 + “2”; O resultado a ser armazenado na variável soma é 22. Isso acontece porque o número 2 é tratado como sendo do tipo caractere e é concatenado com o caractere 2". O mesmo código teria gerado um erro em uma linguagem fortemente tipada. Os programadores acham mais fácil escrever programas em linguagens de tipagem fraca. Alguns exemplos de linguagens fracamente tipadas são Python e JavaScript. Nos dois exemplos seguimos basicamente o mesmo padrão: primeiro informamos o tipo da variável, seguido de seu identificador e de seu valor inicial. Perceba, entretanto, que, em C++, as declarações terminam com “;”. Outro aspecto distinto diz respeito ao uso de aspas simples e duplas. 12 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C No Portugol Studio, as aspas simples são usadas para delimitar um único caractere (como em sexo), e as aspas duplas delimitam cadeias de caracteres (como em nome). No C++ isso não acontece e as aspas duplas são utilizadas em ambos os casos. Constantes Um valor constante é um valor que não se altera. Ao contrário das variáveis, que podem ter seu valor modificado ao longo do programa, as constantes têm um valor predefinido que não pode ser alterado. Assim como as variáveis, entretanto, as constantes precisam ser declaradas e devem ter seu tipo e identificador definidos. Observe como declarar uma constante no Portugol Studio e no C++: Declaração de Variáveis Portugol Studio C++ const inteiro MESES = 12 const int MESES = 12; const real PI = 3.14 const float PI = 3.14; A declaração de constantes é muito parecida no Portugol Studio e no C++. Nos dois casos, a primeira palavra a ser escrita é const, seguida do tipo da constante, seu identificador e seu valor. Por uma questão de convenção, os identificadores de constantes costumam ser escritos em caixa alta, mas essa não é uma obrigatoriedade. Operadores Os operadores são símbolos que, combinados às variáveis e constantes, nos permitem construir expressões aritméticas, relacionais e lógicas. Quanto ao número Quanto ao número de operandos sobre os quais atuam, os operadores podemser unários ou binários. Operadores unários atuam sobre um único operando, e operadores binários precisam de dois operandos para que possam ser utilizados. Quanto ao tipo Os operadores podem ser aritméticos, relacionais, lógicos, de atribuição, de incremento e de decremento. Observe, a seguir, os operadores pertencentes a cada uma dessas categorias. 13 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Operadores Matemáticos Tipo Operadores Relacionais Tipo + Soma Binário > Maior que Binário - Subtração Binário < Menor que Binário / Divisão Binário >= Maior ou igual a Binário * Multiplicação Binário <= Menor ou igual a Binário % Resto da divisão Binário == Igual a Binário != Diferente de Binário Operadores Lógicos Tipo Operadores Especiais de Atribuição Tipo ! Não Unário += Soma e atribui. Ex.: res+=2 Binário && E Binário -= Subtrai e atribui. Ex.: res-=2 Binário || Ou Binário /= Divide e atribui. Ex.: res/=5 Binário *= Multiplica e atribui. Ex.: res*=5 Binário Operadores de Atribuição Tipo Operadores de Incremento/Decremento Tipo = Atribuição de valor a variáveis ou constantes Binário ++ Incremento Unário -- Decremento Unário Na próxima aula, veremos de que maneira os operadores se combinam às variáveis e constantes para construção de expressões. Exercício Você se lembra do exercício da aula 1, no qual escreveu um algoritmo para converter uma quantia em reais para uma quantia em dólares? Você precisou perguntar a quantia em reais e a cotação do dólar do dia e calculou quantos dólares seria possível comprar. 1. Imagine que você vai escrever esse algoritmo no Portugol Studio. Como ficaria a declaração de variáveis para esta situação? 2. Agora imagine que você vai escrever o algoritmo anterior na linguagem de programação C++. Como seria a declaração de variáveis? 3. A aceleração da gravidade (ag) na Terra possui um valor constante aproximado de 9,8 m/s2. Imagine que um corpo é abandonado em queda livre de uma determinada altura e leva um número de segundos (seg) para chegar ao solo. Considere que a velocidade (vel) da queda pode ser calculada multiplicando-se a aceleração da gravidade pelo tempo. Se você precisasse criar um algoritmo para resolver esse problema no Portugol Studio, como seria a declaração de variáveis e constantes? 4. Considerando o problema anterior, como ficaria a declaração de variáveis e constantes caso a solução fosse escrita em C++? 1. Será necessário criar três variáveis do tipo real, conforme declaração a seguir: real quantia_reais = 0 real quantia_dolares = 0 real cotacao = 0 14 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 2. No C++, as variáveis seriam declaradas da seguinte maneira: float quantia_reais = 0; float quantia_dolares = 0; float cotacao = 0; 3. Para este algoritmo, será necessário criar duas variáveis e uma constante: const real ag = 9.8 real seg = 0 real vel = 0 4. No C++, a declaração seria feita da seguinte maneira: const float AG = 9.8; float seg = 0; float vel = 0; AULA 3 - EXPRESSÕES E TABELA DA VERDADE Na a aula anterior, falamos brevemente sobre os operadores. Nesta aula, veremos de que forma utilizamos esses operadores na criação de expressões que utilizam não somente números, mas também variáveis. Como já estudamos, as variáveis são essenciais na programação. As expressões também são muito utilizadas para cálculos e para tomada de decisões. Para finalizar, abordaremos as tabelas da verdade, ou tabelas-verdade, que são uma ferramenta muito utilizada para verificar todos os resultados possíveis para uma expressão lógica. Compreender as expressões lógicas e os possíveis resultados que elas podem retornar é muito importante para que, no futuro, você consiga construir os testes lógicos a serem avaliados por estruturas mais complexas utilizadas na programação de computadores. Objetivos desta aula: • Identificar os diferentes tipos de expressão; • Analisar a forma como são escritas as expressões; • Avaliar expressões lógicas para construção de tabelas da verdade. Operadores Na aula anterior, conhecemos os operadores que nos permitirão realizar atribuições e construir expressões aritméticas, relacionais e lógicas. Vimos que esses operadores podem ser unários (quando atuam sobre somente um operando) ou binários (quando atuam sobre dois operandos), e aprendemos, também, que eles podem ser do tipo aritmético, relacional, lógico, de atribuição, de incremento e de decremento. Vamos, agora, ver de que maneira eles são utilizados nos programas e algoritmos que iremos construir. 15 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Expressões matemáticas Para que exista uma expressão matemática, ou operação algébrica, é necessário que existam, no mínimo, dois valores ou variáveis e um operador. Observe os exemplos a seguir, que representam expressões matemáticas: 12 - 7 14 / 2 35 x 3 14 + 2 Para que sejam usadas em um programa ou algoritmo, essas expressões precisam sofrer algumas adaptações. Vejamos: O sinal de multiplicação: Conforme vimos anteriormente, em programação não é possível usar o “.” ou o “x” para representar essa operação. No lugar deles, devemos utilizar o sinal de “*” (asterisco) Quando o computador resolver uma expressão matemática, por mais simples que ela seja, ele chegará a um resultado. Esse resultado precisa ser armazenado em uma variável ou constante. Para que as expressões matemáticas nos exemplos possam ser utilizadas em um algoritmo ou programa, precisam ser escritas conforme a seguir: Subtra = 12 - 7 Divide = 14 / 2 Mult = 35 * 3 Soma = 14 + 2 Veja que, agora, os resultados das expressões já têm um local para serem armazenados: nas variáveis “Subtra”, “Divide”, “Mult” e “Soma”, respectivamente. Um operador que está disponível em diversas linguagens de programação é o módulo, representado pelo sinal “%”. A operação de módulo é responsável por retornar o resto de uma divisão. Observe os exemplos: Resto1 = 120 % 2 Resto2 = 310 % 3 A operação de módulo é responsável por retornar o resto de uma divisão. Desse modo, a variável “Resto1” armazenará o valor 0, e a variável “Resto2” armazenará o valor “10”. Lembre-se de que os operadores têm o que chamamos de precedência — responsável por definir a ordem em que as operações serão executadas, quando uma expressão combina várias delas. Observe a tabela de precedência a seguir: Precedência dos operadores matemáticos 1° Multiplicação, divisão, módulo 2° Adição, subtração Assim como são usados na Matemática, os parênteses também podem ser utilizados em algoritmos e programas. Quando eles estiverem presentes, resolva primeiro o conteúdo dentro dos parênteses. Expressões relacionais As expressões relacionais são construídas de modo a avaliar a relação entre os termos da expressão. Uma expressão desse tipo é composta por termos de um mesmo tipo e por operadores relacionais. O resultado de uma expressão relacional será sempre um valor lógico: Verdadeiro ou Falso 16 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Considere as variáveis N1=15 e N2=29: • Maior = (N1 > N2) Maior armazena falso • Menor = (N1 < N2) Menor armazena verdadeiro. • Diferente = (N1 != N2) Diferente armazena verdadeiro. As expressões relacionais são muito utilizadas na programação, pois elas nos ajudam a avaliar condições. • Se você precisa escrever um algoritmo que, a partir da idade do usuário, informe se ele pode ou não votar, é necessário avaliar se a idade é maior ou igual a 16 (idade>=16). • Se o algoritmo precisa informar se um aluno foi aprovado ou reprovado em uma instituição de ensino em que a média mínima é 7, você precisa avaliar se a média é maior ou igual a 7 (Media>=7). Expressões lógicas As expressões lógicas, também conhecidas como expressões booleanas, são construídas com o auxílio dos operadoreslógicos e são responsáveis por avaliar uma ou mais condições. O resultado de uma expressão lógica será sempre um valor lógico. Para avaliar uma expressão lógica, é preciso conhecer o que retornam os operadores lógicos quando avaliam uma relação. Vejamos um exemplo: Imagine que você precisa escrever um algoritmo que avalie se um número armazenado na variável “Num” é positivo e par. • Para ser positivo, o número precisa ser maior que zero • Para ser par, o resto da divisão do número por dois, precisa ser zero Uma solução para esse problema é mostrada a seguir: • se (Num>0) && (Num%2==0) EXPRESSÃO LÓGICA • escreva (“O número é par e positivo!”) Veja que, na situação proposta, precisamos avaliar duas condições relacionais: (Num>0) e (Num%2==0). Para fazer com que as duas sejam avaliadas, precisamos construir uma expressão lógica com o auxílio do operador “e” (&&). Agora vamos avaliar duas situações diferentes. 1. Considere que a variável “Num” está armazenando o valor 10. Ao avaliarmos a expressão lógica para esse caso, veremos que ambas expressões relacionais retornam verdadeiro. • Num = 10 • (Num>0) Esta expressão relacional retorna verdadeiro. • (Num%2==0) Esta expressão relacional retorna verdadeiro. (Num>0) && (Num%2==0) Verdadeiro && Verdadeiro -> Verdadeiro 17 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 2. Agora imagine que a variável “Num” está armazenado o valor 15. Neste caso, uma expressão relacional é verdadeira, mas a outra é falsa. Observe: • Num = 15 • (Num>0) Esta expressão relacional retorna verdadeiro. • (Num%2==0) Esta expressão relacional retorna falso. (Num>0) && (Num%2==0) Verdadeiro && Falso -> Falso Observe que: • Quando as duas expressões avaliadas pelo operador lógico “&&” são verdadeiras, o resultado da expressão lógica é verdadeiro. • Quando um valor é verdadeiro e o outro é falso, a expressão lógica retorna falso. Isso acontece porque há regras para que os operadores lógicos definam o valor a retornar. Agora observe as tabelas a seguir. Operador && (E) A B A && B Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso Falso Falso Verdadeiro Falso Falso Falso Falso Operador || (OU) A B A || B Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso Verdadeiro Falso Verdadeiro Verdadeiro Falso Falso Falso Operador ! (NÃO) A !A Verdadeiro Falso Falso Verdadeiro Essas tabelas apresentam todas os resultados possíveis para quando os operadores avaliam dois valores lógicos. • O operador “E” precisa que os dois valores avaliados sejam verdadeiros para que o resultado também seja verdadeiro. • O operador “OU” precisa que os dois operadores avaliados sejam falsos para que o resultado também seja falso Assim como no caso dos operadores matemáticos, os operadores lógicos também possuem precedência, conforme a tabela a seguir: 18 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Precedência dos operadores lógicos 1° Não (!) 2° E (&&) 3° Ou (||) Conhecer a precedência dos operadores é essencial quando é necessário resolver uma expressão na qual vários operadores são combinados. Vejamos uma situação: Considere as variáveis: A = verdadeiro, B = verdadeiro, C = falso. E a expressão lógica: A && B || !C. Observe as etapas a serem seguidas na resolução: 1. Substituímos as variáveis por seus valores equivalentes. Verdadeiro && Verdadeiro || !Falso 2. Respeitando a precedência, resolvemos !C. Verdadeiro && Verdadeiro || Verdadeiro 3. Em seguida, resolvemos A && B. Verdadeiro || Verdadeiro 4. Por fim, resolvemos a relação “ou” entre o resultado de A && B com !C. Verdadeiro Nesse exemplo, resolvemos a expressão lógica para o caso das variáveis A = verdadeiro, B = verdadeiro e C = falso. Há situações, entretanto, em que desejamos descobrir todos os resultados possíveis para os diferentes valores das variáveis. Nesse caso, é necessário montar uma tabela da verdade. Tabela da verdade Uma tabela da verdade, ou tabela-verdade, é uma tabela matemática capaz de apresentar todos os resultados possíveis para uma expressão lógica, a partir das diferentes combinações de valores para as variáveis avaliadas. Observe a tabela da verdade para a expressão A && B || !C, utilizada no exemplo anterior. A B C !C A && B A && B || !C V V V F V V V V F V V V V F V F F F V F F V F V F V V F F F F V F V F V F F V F F F F F F V F V 19 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C As colunas da tabela são definidas segundo as variáveis da expressão lógica e os passos para resolução dela. Cada linha da tabela apresenta uma possibilidade de combinação para as variáveis e os passos para a solução da expressão até que se chegue a um resultado. Vejamos: Na primeira linha Quando A = Verdadeiro Quando B = Verdadeiro Quando C = Verdadeiro O resultado da expressão será Verdadeiro Na segunda linha Quando A = Verdadeiro Quando B = Verdadeiro Quando C = Falso O resultado da expressão será Verdadeiro Na terceira linha Quando A = Verdadeiro Quando B = Falso Quando C = Verdadeiro O resultado da expressão será Falso Para descobrir quantos resultados possíveis existem para uma expressão lógica, é preciso identificar a quantidade de variáveis que compõem essa expressão e descobrir quantas possibilidades diferentes de combinação de verdadeiro e falso elas geram. A quantidade de variáveis será expoente de uma base 2 e o resultado dessa potenciação dirá quantos resultados diferentes existem para a expressão. Observe: 1. Identificar a quantidade de variáveis. A && B || !C Três variáveis: A, B e C 2. Utilizar a quantidade de variáveis como expoente de uma base 2. 23 Quantidade de variáveis da expressão 3. Resolver a potenciação para descobrir a quantidade de combinações possíveis. 23 = 8 Quantidade de combinações possíveis A quantidade de combinações possíveis nos ajudará a definir quantas linhas irão compor a tabela da verdade. 20 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Operadores de atribuição Os operadores de atribuição são responsáveis por armazenar valores em constantes e variáveis. Observe: • Resultado = 0 Atribui 0 à variável “Resultado” • Pi = 3.14 Atribui 3.14 à constante “Pi” • Nome = “Thomás” Atribui “Thomás” à variável “Nome” • Soma = N1 + N2 Atribui a soma de N1+N2 à variável “Soma” Nos exemplos anteriores, vimos exemplos utilizando o operador de atribuição simples, que é o sinal de igualdade (“=”). O padrão para atribuição é o seguinte: Nome da variável ou da constante = Valor ou expressão (que será resolvida para que o resultado seja atribuído) Existem ainda outros operadores de atribuição que são combinados aos operadores matemáticos para efetuarem um cálculo e armazenarem o resultado em uma variável: += -= Operador de adição e atribuição Operador de subtração e atribuição Soma += 5 (Equivale à expressão Soma = Soma + 5) Subtra –= 10 (Equivale à expressão Subtra = Subtra – 10) /= *= Operador de divisão e atribuição Operador de multiplicação e atribuição Divide /= 2 (Equivale à expressão Divide = Divide / 2) Multiplica *= 3 (Equivale à expressão Multiplica = Multiplica * 3) Operadores de incremento e decremento Em programação, incrementar e decrementar significam, respectivamente, aumentar e diminuir o valor de uma variável. • O operador de incremento aumenta em uma unidade o valor da variável. • O operador de decremento diminui em uma unidade o valor da variável. ++ -- Operador de incremento Operador de decremento Total ++ (Equivale à expressão Total = Total + 1) Total –- (Equivale à expressão Total = Total – 1) AULA 4: COMANDOS DE ENTRADA E SAÍDA Nesta aula, estudaremos os primeiros comandos para a comunicação entre o usuário e o computador. São os comandos de entrada e saída que permitem que os usuários forneçam dados para o computador(comandos de entrada) e o computador exiba informações para os usuários (comandos de saída). 21 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Os comandos de entrada e saída estarão presentes em todos os outros programas e algoritmos que escreveremos em nossas aulas. Por isso, você precisa dominá-los com segurança para que não sinta dificuldades mais adiante. Fique atento aos exemplos e realize todos os exercícios para conseguir compreender a forma como esses comandos são utilizados e a maneira como se comportam quando os programas são executados. Objetivos: • Identificar os comandos de entrada e saída • Analisar problemas simples que possam ser resolvidos com programas • Aplicar algoritmos e programas para solução dos problemas apresentados Comandos de entrada e saída em Portugol Studio Uma característica interessante da programação é que ela permite a interação entre a máquina – no nosso caso, o computador – e seus usuários. Essa interação ocorre por meio dos comandos de entrada e saída (ou comandos de I/O, pois o termo vem das palavras em inglês input e output). Nesta disciplina, trabalharemos apenas com os comandos de entrada de dados via teclado, mas um input pode vir de outras origens, como o clique em um botão do mouse ou um sinal detectado por um sensor de movimentos, por exemplo. Os comandos de saída podem direcionar a informação para uma impressora ou um dispositivo de áudio, por exemplo, mas o destino padrão das saídas de nossos programas e algoritmos será o monitor de vídeo. Para termos uma ideia de como são utilizados esses comandos, imagine que você deseja criar um algoritmo que, a partir do ano atual e do ano de nascimento, informe a idade aproximada de uma pessoa. Veja uma solução possível, escrita no Portugol Studio: 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro anoNasc, anoAtual, idade 6 escreva("Ano atual: ") 7 leia(anoAtual) 8 escreva("Ano de nascimento: ") 9 leia(anoNasc) 10 idade=anoAtual-anoNasc 11 escreva("Você tem ou fará ", idade, " anos") 12 } 13 } 22 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Vamos ver o que fazem as outras linhas: Linha 5 Cria as variáveis anoNasc, anoAtual e idade e as declara como sendo tipo inteiro. Essas variáveis servirão para o armazenamento do ano de nascimento do usuário, do ano atual e da idade (que será calculada pelo algoritmo). Linha 6 O comando escreva é o responsável por exibir em tela mensagens e conteúdo de variáveis e constantes. Neste exemplo, ele exibe a mensagem entre aspas na tela. Linha 7 O comando leia é o responsável por receber valores informados pelo usuário via teclado e armazená-los em variáveis. Aqui, o valor numérico informado pelo usuário será armazenado na variável anoAtual. Linha 8 Esta linha exibirá em tela a mensagem entre aspas. Linha 9 Receberá o valor numérico informado pelo usuário e armazenará na variável anoNasc. Linha 10 Esta expressão fará a subtração definida à direita do sinal de atribuição (“=”) e armazenará o resultado dela na variável idade. Linha 11 Esta linha exibirá em tela a mensagem “Você tem ou fará XX anos”, em que XX será o valor armazenado na variável idade. Veja que combinamos, em um mesmo comando escreva, a exibição de mensagens e do conteúdo de uma variável. Para isso, usamos as aspas duplas para delimitar as mensagens e usamos a vírgula para separar mensagens de variáveis. Imagine que você viajou para os Estados Unidos e está muito confuso com o modo que os americanos usam para medir a temperatura, em Fahrenheit. Para facilitar, você decide criar um algoritmo que, dada uma temperatura em Fahrenheit, exiba seu equivalente em graus Celsius. Uma solução possível seria: 1 programa 2 { 3 funcao inicio() 4 { 5 real tempF, tempC 6 escreva("Temperatura em Fahrenheit: ") 7 leia(tempF) 8 tempC=(tempF-32)/1.8 9 escreva("Temperatura em graus Celsius: ", tempC) 10 } 11 } Vamos ver o que fazem as linhas de código? Linha 5 Cria as variáveis tempF e tempC, e as declara como sendo do tipo real. Essas variáveis irão armazenar, respectivamente, a temperatura em graus Fahrenheit e a temperatura em graus Celsius. Linha 6 Esta linha faz com que seja exibida em tela a mensagem entre aspas. Linha 7 Permite que o usuário informe um valor via teclado e faz com que esse valor seja armazenado na variável tempF. Linha 8 Esta expressão fará a conversão do valor em graus Fahrenheit para graus Celsius. O resultado é armazenado na variável tempC. Linha 9 Esta linha é responsável por mostrar, em tela, a mensagem entre aspas seguida do valor armazenado na variável tempC. Combinamos, em um mesmo comando escreva, a exibição de mensagens e do conteúdo de uma variável. Perceba o uso da vírgula separando os itens. Arredondando valores reais no Portugol Studio Ao testar o algoritmo de conversão de temperaturas, é possível que você tenha obtido um valor com várias casas decimais como resultado. Nem sempre é uma boa opção informar ao usuário esse tipo de valor. O ideal é que o número seja arredondado para mostrar menos casas decimais – uma ou duas – e, assim, facilitar sua compreensão. Para arredondarmos valores no Portugol Studio e configurar o número de casas decimais que desejamos exibir, é preciso utilizar a função arredondar, da biblioteca Matematica-->mat. Veja como fazer: 23 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C real pi_Longo = 3.14159265358979323846 real pi_Curto // Arredonda o valor de pi_Longo para 2 casas decimais pi_Curto = mat.arredondar(pi_Longo,2) Para que seja utilizada a função arredondar, precisamos incluir a biblioteca Matematica-->mat. Veja como fazer: programa { inclua biblioteca Matematica --> mat funcao inicio() { ... } } Se você quiser utilizar a formatação de casas decimais no problema de conversão de temperaturas, insira a linha de inclusão da biblioteca no início do algoritmo e altere a linha de exibição da temperatura em Celsius para que fique assim: escreva("Temperatura em graus Celsius: ", mat.arredondar(tempC,2)) Você percebeu, no exemplo da função arredondar, que uma linha do algoritmo começa com os caracteres “//”? Trata-se de uma linha de comentário. Linhas de comentário são muito úteis, pois nos permitem escrever informações que nos ajudam a compreender melhor o código. Elas não serão executadas pelo computador e servem somente para fins de documentação. Comandos de entrada e saída em C++ Na linguagem de programação C++, os comandos cin e cout são os que utilizaremos para entrada e saída de dados, respectivamente. Antes de falarmos mais sobre eles, é preciso saber que os programas que escreveremos em C++ terão uma estrutura básica que estará presente em todas as soluções: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 $ 6 } O código será escrito entre as chaves, que marcam o início e o fim do bloco de comandos pertencentes ao seu programa (a partir da linha 5). Na linha 1, temos a diretiva include, que informa quais bibliotecas de comandos serão necessárias no programa. Para o exemplo anterior, somente utilizaremos a biblioteca iostream, que contém os recursos básicos para entrada e saída e nos permitirá utilizar os comandos cin e cout. Você se lembra do algoritmo que fizemos no início desta aula, para cálculo da idade do usuário a partir do ano atual e do ano de nascimento? Vamos ver como ele ficaria escrito em C++? 24 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int anoAtual, anoNasc, idade; 6 cout <<"Ano atual: "; 7 cin >> anoAtual; 8 cout <<"Ano de nascimento:"; 9 cin >> anoNasc; 10 idade=anoAtual-anoNasc; 11 cout <<"Você tem ou fará " << idade << " anos."; 12 } Quando terminar de digitar seu programa, compile-o e execute-o pressionando a tecla F11. C++ é uma linguagemde programação compilada. O compilador é responsável por verificar erros de sintaxe no programa e, quando o programa está sintaticamente correto, produzir outro programa em linguagem de máquina. Vamos ver o que fazem as linhas do programa? Linha 1 Sinaliza a inclusão da biblioteca iostream, que permite o uso dos comandos cin e cout, entre outros. Linha 2 Um namespace é uma região declarativa que fornece um escopo para os identificadores (nomes dos tipos, função, variáveis etc.) dentro dele. Todas as declarações dentro desses blocos são declaradas no escopo nomeado. Utilizar esta linha no início do programa faz com que não precisemos escrever std::cout <<"Ano atual: ". Linha 3 Os programas em C são organizados em forma de função. A função principal é denominada main, esta linha marca a abertura da função principal do programa. Linha 4 Marca o início do programa. Linha 5 Declara as variáveis anoAtual, anoNasc e idade, e as declara como sendo do tipo inteiro. Essas variáveis irão armazenar, respectivamente, o ano atual, o ano de nascimento do usuário e a idade a ser calculada pelo programa Linha 6 Exibe, em tela, a mensagem entre aspas. Linha 7 Recebe, via teclado, um valor e o armazena na variável anoAtual. Linha 8 Exibe, em tela, a mensagem entre aspas. Linha 9 Recebe, via teclado, um valor e o armazena na variável anoNasc. Linha 10 Calcula a idade do usuário realizando a subtração entre o ano atual e ano de nascimento e armazena na variável idade. Linha 11 Exibe, em tela, as mensagens entre aspas combinadas com o valor armazenado na variável idade. Linha 12 Marca o fim do programa. Vamos ver como ficaria, em C++, o algoritmo para conversão de temperaturas? 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float tempF, tempC; 6 cout << "Temperatura em Fahrenheit: "; 7 cin >> tempF; 8 tempC=(tempF-32)/1.8; 9 cout << "Temperatura em graus Celsius: " << tempC; 10 } Linha 5 Cria as variáveis tempF e tempC, e as declara como sendo do tipo real. Essas variáveis irão armazenar, respectivamente, a temperatura em graus Fahrenheit e a temperatura em graus Celsius. Linha 6 Esta linha faz com que seja exibida em tela a mensagem entre aspas. 25 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Linha 7 Permite que o usuário informe um valor via teclado e faz com que esse valor seja armazenado na variável tempF. Linha 8 Esta expressão fará a conversão do valor em graus Fahrenheit para graus Celsius. O resultado é armazenado na variável tempC. Linha 9 Esta linha é responsável por mostrar, em tela, a mensagem entre aspas seguida do valor armazenado na variável tempC. Combinamos, em um mesmo comando escreva, a exibição de mensagens e do conteúdo de uma variável. Perceba o uso da vírgula separando os itens. Exibindo a acentuação gráfica no C++ Se você usou acentuação gráfica nos programas que escreveu em C++, percebeu que, quando executado, o programa substitui os caracteres acentuados por alguns símbolos. Para que isso não aconteça, é preciso que você inclua a biblioteca locale e configure o idioma para português do Brasil. Observe como ficaria o início de um programa que realiza essa configuração: 1 #include <iostream> 2 #include <locale> 3 using namespace std; 4 int main() 5 { 6 setlocale(LC_ALL, "ptb"); 7 … 8 } Exercício 1. Leia os enunciados a seguir e crie os algoritmos que solucionam os problemas propostos. • Exiba o quadrado e o cubo de um número inteiro qualquer informado pelo usuário. • Receba a quantidade de dias que uma pessoa já viveu e informe quantos anos ela tem. Desconsidere os anos bissextos. • Sabendo que o dono de uma loja aplica 20% sobre o valor de compra de um produto, informe o valor sugerido para venda com base no valor pago na compra do produto. Algoritmo 1 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num, quadrado, cubo 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 quadrado = num * num 9 cubo = num * num * num 10 escreva(num, " ao quadrado é: ", quadrado) 11 escreva(num, " ao cubo é: ", cubo) 12 } 26 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 13 } Se você escreveu o algoritmo como no exemplo, percebeu, quando executou, que as linhas que exibem o quadrado e o cubo do número mostram as mensagens na mesma linha. Para que cada resultado fique em uma linha, e a leitura deles seja facilitada, inclua “\n” ao final da linha que mostra o quadrado do número: escreva(num, " ao quadrado é: ", quadrado, "\n") Essa formatação fará com que o algoritmo exiba a mensagem e quebre a linha antes de executar o próximo comando. Algoritmo 2 1 programa 2 { 3 funcao inicio() 4 { 5 real dias, anos 6 escreva("Quantos dias você já viveu? ") 7 leia(dias) 8 anos = dias / 365 9 escreva("Você já viveu ", anos, " anos.") 10 } 11 } Algoritmo 3 1 { 2 funcao inicio() 3 { 4 real preCompra, preVenda 5 escreva("Preço de compra do produto: R$ ") 6 leia(preCompra) 7 preVenda = preCompra + (preCompra * 20/100) 8 escreva("Preço sugerido para venda R$ ", preVenda) 9 } 10 } 2. Com base nos algoritmos escritos na atividade anterior, escreva os programas em C++. Abaixo estão os enunciados. • Exiba o quadrado e o cubo de um número inteiro qualquer informado pelo usuário. • Receba a quantidade de dias que uma pessoa já viveu e informe quantos anos ela tem. Desconsidere os anos bissextos. • Sabendo que o dono de uma loja aplica 20% sobre o valor de compra de um produto, informe o valor sugerido para venda com base no valor de compra do produto. Programa 1 1 #include <iostream> 2 using namespace std; 3 int main() 27 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 4 { 5 int num, quadrado, cubo; 6 cout << "Informe um número qualquer: "; 7 cin >> num; 8 quadrado = num * num; 9 cubo = num * num * num; 10 cout << num << "ao quadrado é: " << quadrado; 11 cout << num << "ao cubo é: " << cubo; 12 } Programa 2 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float dias, anos; 6 cout << "Quantos dias você já viveu? "; 7 cin >> dias; 8 anos = dias / 365; 9 cout << "Você já viveu " << anos << "anos."; 10 } Programa 3 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float preCompra, preVenda; 6 cout << "Preço de compra do produto: R$ "; 7 cin >> preCompra; 8 preVenda = preCompra + (preCompra * 20/100); 9 cout << "Preço sugerido para venda R$ " << preVenda; 10 } 3. Observe o algoritmo a seguir e responda: Sabendo que o valor do litro do combustível é R$ 3,90 e que você dispõe de R$ 200,00 para abastecer, qual mensagem seria exibida pelo computador na linha 12? 1 programa 2 { 3 inclua biblioteca Matematica --> mat 4 funcao inicio() 5 { 6 real qtdeDin, valComb, qtdeLitros 7 escreva("Quanto custa o litro do combustível? R$ ") 8 leia(valComb) 9 escreva("Quantos reais você tem? R$ ") 28 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 10 leia(qtdeDin) 11 qtdeLitros=qtdeDin/valComb 12 escreva("Com R$ ", qtdeDin, " você consegue abastecer ", 13 mat.arredondar(qtdeLitros,2)," litros de combustível.") 14 } 15 } O computador exibiria a mensagem "Com R$ 200.00 você consegue abastecer 51.28 litros de combustível." Lembre-se de que o separador de casas decimais é o ponto e não a vírgula! AULA 5: ESTRUTURA DE SELEÇÃO SIMPLES E COMPOSTA Na aula anterior, começamos a escrever códigos simples utilizando os comandos de entrada e saída. Você deve ter percebido que os algoritmos e os programas que vimos como exemplos são executados sequencialmente, ou seja, da primeira linha à ultima, sem nenhum desvio. Nesta aula, veremos que existem muitas situações em que o fluxo de execução não pode ser sequencial. Há muitos casos em que a solução somente pode passarpor determinado trecho do código quando uma condição é satisfeita. Para criar testes que determinam o caminho a ser seguido na execução do programa ou algoritmo, você precisará recorrer às estruturas de seleção, ou estruturas seletivas. Essas estruturas são responsáveis por avaliar expressões relacionais ou lógicas denominadas condições e, assim, criar uma restrição para que uma parte do programa possa ser executada. Os programas ficam mais interessantes à medida que novas estruturas são conhecidas. Ao aprender um novo conceito, certifique-se de que não tem dúvidas antes de seguir adiante. Objetivos: • Identificar as estruturas seletivas • Aplicar as estruturas de seleção para escrever algoritmos e programas • Analisar os resultados produzidos por códigos que empreguem estruturas seletivas Estrutura Seletiva Você se lembra do código que escrevemos na aula anterior para calcular a idade de um indivíduo? Imagine que, além de informar a idade, você deseje dizer ao usuário se ele já pode votar. Para ser um eleitor, é preciso ter a idade mínima de 16 anos. Isso significa que você precisar verificar se o usuário tem 16 anos ou mais para poder informar que ele pode votar. Para que isso seja possível, será preciso fazer uso de uma estrutura seletiva, conhecida também como estrutura de seleção. Uma estrutura seletiva restringe a execução de um trecho do código à veracidade, ou não, de uma ou mais condições. No seu formato mais simples, uma estrutura seletiva, no Portugol Studio e no C++, tem a seguinte sintaxe: 29 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Portugol Studio se (condição) { // Comandos a serem executados se a condição for verdadeira. } C++ if (condição) { // Comandos a serem executados se a condição for verdadeira. } Você se lembra de quando falamos das expressões relacionais e lógicas? Uma condição será sempre uma expressão desse tipo. Retomando a situação proposta no início desta aula, na qual desejamos informar ao usuário se ele pode votar, poderíamos ter uma estrutura seletiva escrita conforme vemos a seguir: Portugol Studio se (idade>=16) { escreva("Você já pode votar!") } Observe que estamos avaliando a condição (idade>=16) – que é uma expressão relacional – e, se ela for verdadeira, exibimos a mensagem informando ao usuário que ele já pode votar. Em C++, o trecho seria escrito da seguinte maneira: C++ if (idade>=16) { cout <<"Você já pode votar!"; } Observe como ficaria, então, a solução completa no Portugol Studio: 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro anoNasc, anoAtual, idade 6 escreva("Ano atual: ") 7 leia(anoAtual) 8 escreva("Ano de nascimento: ") 9 leia(anoNasc) 10 idade=anoAtual-anoNasc 30 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 11 escreva("Você tem ou fará ", idade, " anos") 12 se (idade>=16) 13 { 14 escreva("Você já pode votar!") 15 } 16 } 17 } Agora veja o programa completo em C++: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int anoAtual, anoNasc, idade; 6 cout <<"Ano atual: "; 7 cin >> anoAtual; 8 cout <<"Ano de nascimento:"; 9 cin >> anoNasc; 10 idade=anoAtual-anoNasc; 11 cout <<"Você tem ou fará " << idade << " anos."; 12 if (idade>=16) 13 { 14 cout <<"Você já pode votar!"; 15 } 16 } Vamos ver mais um exemplo? Imagine que você deseja verificar se um número qualquer informado pelo usuário é múltiplo de 2. Para que seja múltiplo de 2, o resto da divisão do número por 2 precisa ser igual a 0. Observe: 25 / 2 = 12 (Resto = 1) Significa que 25 não é múltiplo de 2 12 / 2 = 6 (Resto = 0) Significa que 12 é múltiplo de 2 Precisamos, então, receber o número informado pelo usuário, efetuar sua divisão por 2 e descobrir qual é o resto. Para isso, utilizaremos a função módulo, expressa pelo caractere %. Estudamos esse operador na aula 2, você se lembra? Veja como ficaria o algoritmo para esse problema: 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num, resto 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 resto=num%2 9 se (resto==0) 31 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 10 { 11 escreva("Este número é múltiplo de 2!") 12 } 13 } 14 } Agora veja a solução em C++ 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int num, resto; 6 cout <<"Informe um número qualquer: "; 7 cin >> num; 8 resto=num%2; 9 if (resto==0) 10 { 11 cout <<"Este número é múltiplo de 2!"; 12 } 13 } Exercício 1. Leia os enunciados a seguir e crie os algoritmos e os programas em C++ que solucionem os problemas propostos. • Exiba o quadrado de um número inteiro qualquer informado pelo usuário e diga se ele é maior do que 25. • Receba a quantidade de dias que uma pessoa já viveu e informe quantos anos ela tem. Desconsidere os anos bissextos. Informe se a pessoa já é maior de idade. Algoritmo 1 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num, quadrado 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 quadrado = num * num 9 escreva(num, " ao quadrado é: ", quadrado) 10 se (quadrado>25) 11 { 12 escreva("O quadrado de ", num, " é maior do que 25.") 13 } 32 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 14 } 15 } Algoritmo 2 1 programa 2 { 3 funcao inicio() 4 { 5 real dias, anos 6 escreva("Quantos dias você já viveu? ") 7 leia(dias) 8 anos = dias / 365 9 escreva("Você já viveu ", anos, " anos.") 10 se (anos>=18) 11 { 12 escreva("Você é maior de idade.") 13 } 14 } 15 } Programa 1 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int num, quadrado; 6 cout << "Informe um número qualquer: "; 7 cin >> num; 8 quadrado = num * num; 9 cout << num << "ao quadrado é: " << quadrado; 10 if (quadrado>25) 11 { 12 cout << "O quadrado de " << num << " é maior do que 25." 13 } 14 } Programa 2 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float dias, anos; 6 cout << "Quantos dias você já viveu? "; 7 cin >> dias; 8 anos = dias / 365; 9 cout << "Você já viveu " << anos << "anos."; 10 if (anos>=18) 11 { 33 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 12 cout << "Você é maior de idade." 13 } 14 } Nos dois exemplos que vimos – o primeiro que informa se o usuário pode votar e o segundo que diz se o número informado é múltiplo de 2 – a mensagem somente é exibida quando a condição avaliada é verdadeira. • No primeiro exemplo, se o usuário ainda não tiver 16 anos e, por isso, não puder votar, nada será exibido depois da idade dele. • No segundo exemplo, nenhuma mensagem é exibida quando o número não é múltiplo de 2, mas seria interessante que algo fosse dito ao usuário quando esse for o caso, ou ele vai informar um número e nada acontecerá. Para casos assim, nos quais desejamos que um bloco de comandos seja executado quando a condição for verdadeira e outro bloco seja executado quando a condição for falsa, precisamos complementar a estrutura seletiva conforme vemos a seguir: Portugol Studio se (condição) { // Comandos a serem executados se a condição for verdadeira. } senao { // Comandos a serem executados se a condição for falsa. } C++ if (condição) { // Comandos a serem executados se a condição for verdadeira. } else { // Comandos a serem executados se a condição for falsa. } Revendo as estruturas de seleção utilizadas no primeiro exemplo e adaptando-as com a nova possibilidade apresentada, ou seja, de definir o que será feito quando a condição for falsa, temos: Portugol Studio se (idade>=16) { escreva("Você já pode votar!") 34 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C } senao { escreva("Você ainda não pode votar!")} C++ if (idade>=16) { cout <<"Você já pode votar!"; } else { cout <<"Você ainda não pode votar!"; } Que tal vermos como ficaria a solução que verifica se o número é múltiplo de 2? Observe a seguir: Portugol Studio se (resto==0) { escreva("Este número é múltiplo de 2!") } senao { escreva("Este número não é múltiplo de 2!") } C++ if (resto==0) { cout <<"Este número é múltiplo de 2!"; } else { cout <<"Este número não é múltiplo de 2!"; } 2. Escreva os algoritmos e os programas em C++ para os enunciados a seguir. • Receba um número qualquer e informe se ele é par ou ímpar. • Receba um número qualquer e informe se ele é positivo ou negativo. • Receba o valor de um salário e informe se ele é maior ou menor do que o salário mínimo. Considere o valor de 1000,00 como sendo o mínimo. 35 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C Algoritmo 1 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num, resto 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 resto=num%2 9 se (resto==0) 10 { 11 escreva("Este número é par!") 12 } 13 senao 14 { 15 escreva("Este número é ímpar!") 16 } 17 } 18 } Algoritmo 2 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 se (num>0) 9 { 10 escreva("Este número é positivo!") 11 } 12 senao 13 { 14 escreva("Este número é negativo!") 15 } 16 } 17 } Algoritmo 3 1 programa 2 { 3 funcao inicio() 4 { 5 real salario 6 escreva("Informe o seu salário: R$ ") 7 leia(salario) 36 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 8 se (salario>1000) 9 { 10 escreva("Seu salário é maior do que o salário mínimo!") 11 } 12 senao 13 { 14 escreva("Seu salário é menor do que o salário mínimo!") 15 } 16 } 17 } Programa 1 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int num, resto; 6 cout <<"Informe um número qualquer: "; 7 cin >> num; 8 resto=num%2; 9 if (resto==0) 10 { 11 cout <<"Este número é par!"; 12 } 13 else 14 { 15 cout <<"Este número é ímpar!"; 16 } 17 } Programa 2 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int num; 6 cout <<"Informe um número qualquer: "; 7 cin >> num; 8 if (num>0) 9 { 10 cout <<"Este número é positivo!"; 11 } 12 else 13 { 14 cout <<"Este número é negativo!"; 15 } 37 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 16 } Programa 3 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float salario; 6 cout <<"Informe o seu salário: R$ "; 7 cin >> salario; 8 if (salario>1000) 9 { 10 cout <<"Seu salário é maior do que o salário mínimo!"; 11 } 12 else 13 { 14 cout <<"Seu salário é menor do que o salário mínimo!"; 15 } 16 } Em todos os exemplos vistos até agora, analisamos somente uma condição nas estruturas de condição. O que fazer quando precisarmos avaliar duas ou mais condições? Imagine que você deseja receber um número do usuário e informar se o número é par e positivo. Para que seja par, o número precisa ser divisível por 2; e para ser positivo, o número precisa ser maior do que 0. Veja que temos, então, duas situações distintas para avaliar; o que nos deixa com duas condições a serem testadas. Como faríamos neste caso? 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro num, resto 6 escreva("Informe um número qualquer: ") 7 leia(num) 8 resto=num%2 9 se (resto==0 e num>0) 10 { 11 escreva("Este número é par e positivo!") 12 } 13 } 14 } Agora veja a solução em C++ 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 38 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 5 int num, resto; 6 cout <<"Informe um número qualquer: "; 7 cin >> num; 8 resto=num%2; 9 if (resto==0 && num>0) 10 { 11 cout <<"Este número é par e positivo!"; 12 } 13 } Observe que, na linha inicial da estrutura seletiva, onde incluímos o teste condicional, vemos não só uma, mas duas condições unidas pelo operador lógico E. Você deve se lembrar que o resultado de uma expressão lógica utilizando esse operador somente será verdadeira quando todos os termos avaliados forem verdadeiros. Isso significa que, para que a mensagem Este número é par e positivo! seja impressa, o número precisa ser par e o número precisa ser positivo. Se uma dessas condições for falsa, a mensagem não será impressa. 3. Escreva um algoritmo e seu equivalente em C++ que receba uma hora qualquer (sem os minutos e os zeros) e informe se é dia ou noite. Será dia se a hora estiver entre 6 e 18. Algoritmo 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro hora 6 escreva("Informe a hora: ") 7 leia(hora) 8 se (hora>=6 e hora<=18) 9 { 10 escreva("É dia!") 11 } 12 senao 13 { 14 escreva("É noite!") 15 } 16 } 17 } Programa 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int hora; 39 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 6 cout <<"Informe a hora: "; 7 cin >> hora; 8 if (hora>=6 && hora<=18) 9 { 10 cout <<"É dia!"; 11 } 12 else 13 { 14 cout <<"É noite!"; 15 } 16 } Esta foi a primeira vez que falamos sobre estruturas seletivas, mas continuaremos falando sobre elas na próxima aula, quando você vai ver que, muitas vezes, precisamos avaliar não somente uma ou duas condições, mas várias delas. Imagine quantas opções existem em uma calculadora, por exemplo. Você pode somar, subtrair, multiplicar, dividir, calcular potências, guardar o número na memória de cálculo e várias outras coisas mais! Como será que um programa faz para dar conta de tantas alternativas? AULA 6: ESTRUTURA DE SELEÇÃO COM MÚLTIPLAS ALTERNATIVAS Na aula anterior, vimos que existem muitas situações nas quais o fluxo de execução do algoritmo ou do programa não pode ser sequencial. Para solucionar essa dificuldade, precisamos recorrer às estruturas de seleção, ou estruturas seletivas. Da forma como estudamos até o momento, aprendemos que essas estruturas são responsáveis por avaliar condições e decidir o que acontecerá quando a condição for verdadeira e o que acontecerá quando a condição for falsa. Há situações, entretanto, em que não existem somente duas possibilidades a serem consideradas, mas várias delas. Nesses casos, precisaremos aninhar as estruturas seletivas, ou seja, escrever várias estruturas de seleção uma dentro da outra. Algumas vezes, essa prática vai gerar estruturas seletivas muito complexas e difíceis de serem lidas e compreendidas; e é aí que vamos recorrer a outra estrutura que nos permite analisar um número maior de condições de forma mais inteligível. Objetivos: • Aplicar as estruturas seletivas aninhadas; • Identificar uma alternativa à estrutura “se..então..senão”; • Estabelecer a estrutura de seleção adequada para escrever algoritmos e programas. Estrutura seletiva aninhada Você se lembra do exercício que fizemos, no qual recebíamos um número e informávamos se ele era positivo ou negativo? Sabemos que: 40 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C • Um número será negativo se for menor que zero • Um número será positivo se for maior que zero Mas e se pedirmos ao usuário para informar um número e ele digitar o número 0? Da forma como fizemos a solução, avaliamos somente duas condições para o número – positivo ou negativo, mas está claro que temos que considerar uma terceira possibilidade: a de o número ser nulo. Para dar conta das três possibilidades e ser capaz de dar uma mensagem correta seja qual for a situação – número nulo, número positivo ou número negativo – precisamos adequar o código, mais especificamente o trecho que avalia as condições. Observe:Portugol Studio se (num>0) { escreva("Este número é positivo!") } senao se (num<0) { escreva("Este número é negativo!") } senao { escreva("Este número é nulo!") } C++ if (num>0) { cout <<"Este número é positivo!"; } else if (num<0) { cout <<"Este número é negativo!"; } else { cout <<"Este número é nulo!"; } Logo após o comando senao ou else, inserimos outro teste de condição, iniciado pelo comando se ou if. Com a reformulação da estrutura de seleção, passamos às seguintes análises: • Avaliamos a possibilidade de o número ser positivo • Se ele não for positivo, avaliamos a possibilidade de o número ser negativo 41 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C • Caso o número não seja nem positivo nem negativo, sabemos que ele será nulo, pois não há nenhuma outra possibilidade a ser avaliada; portanto, a última possibilidade é tratada somente por um comando senao ou else. É importante que você saiba que não há um limite para aninhamento de estruturas seletivas. Agora imagine que você deseja criar uma calculadora básica, capaz de realizar as operações matemáticas básicas entre dois números. Veja como poderia ser o algoritmo para solucionar esse problema: Portugol Studio 1 programa 2 { 3 funcao inicio() 4 { 5 real num1, num2, resultado, op 6 escreva("Informe o 1o. número: ") 7 leia(num1) 8 escreva("Informe o 2o. número: ") 9 leia(num2) 10 escreva("------------------------------------\n") 11 escreva("Escolha a operação matemática: \n") 12 escreva("1 - Adição\n") 13 escreva("2 - Subtração\n") 14 escreva("3 - Divisão\n") 15 escreva("4 - Multiplicação\n") 16 escreva("Opção: ") 17 leia(op) 18 se (op==1) 19 { 20 resultado=num1+num2 21 escreva(num1, " + ", num2, " = ", resultado) 22 } 23 senao se (op==2) 24 { 25 resultado=num1-num2 26 escreva(num1, " - ", num2, " = ", resultado) 27 } 28 senao se (op==3) 29 { 30 resultado=num1/num2 31 escreva(num1, " / ", num2, " = ", resultado) 32 } 33 senao se (op==4) 34 { 35 resultado=num1*num2 36 escreva(num1, " * ", num2, " = ", resultado) 37 } 42 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 38 senao 39 { 40 escreva("Opção inválida!!!") 41 } 42 } 43 } No exemplo anterior, avaliamos cinco possibilidades de escolha de opção: 1, 2, 3, 4 ou qualquer outro número diferente desses. Dessa forma, se o usuário escolher: • Opção 1: Efetuamos a soma entre os números informados • Opção 2: O resultado será a subtração entre o primeiro e o segundo números • Opção 3: O algoritmo calculará a divisão entre o primeiro e o segundo números • Opção 4: A operação de multiplicação será efetuada entre os números • Um número diferente: O algoritmo exibirá a mensagem de erro “Opção inválida!!!” Vamos ver como fica o programa em C++? C++ 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 float num1, num2, resultado; 6 int op; 7 cout <<"Informe o 1o. número: "; 8 cin >>num1; 9 cout <<"Informe o 2o. número: "; 10 cin >>num2; 11 cout <<"------------------------------------\n"; 12 cout <<"Escolha a operação matemática: \n"; 13 cout <<"1 - Adição\n"; 14 cout <<"2 - Subtração\n"; 15 cout <<"3 - Divisão\n"; 16 cout <<"4 - Multiplicação\n"; 17 cout <<"Opção: "; 18 cin >>op; 19 if (op==1) 20 { 21 resultado=num1+num2; 22 cout <<num1 << " + " << num2 << " = " << resultado; 23 } 24 else if (op==2) 25 { 26 resultado=num1-num2; 27 cout <<num1 << " - " << num2 << " = " << resultado; 28 } 29 else if (op==3) 43 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 30 { 31 resultado=num1/num2; 32 cout <<num1 << " / " << num2 << " = " << resultado; 33 } 34 else if (op==4) 35 { 36 resultado=num1*num2; 37 cout <<num1 << " * " << num2 << " = " << resultado; 38 } 39 else 40 { 41 cout <<"Opção inválida!!!"; 42 } 43 } Imagine que você precisa criar um algoritmo que, a partir de um número de mês, escreva o nome do mês por extenso. Utilizando estruturas de condição aninhadas, teríamos algo assim: Portugol Studio 1 programa 2 { 3 funcao inicio() 4 { 5 inteiro numMes 6 cadeia mesExtenso="" 7 escreva("Informe o número do mês: ") 8 leia(numMes) 9 se (numMes==1) 10 { 11 mesExtenso="janeiro" 12 } 13 senao se (numMes==2) 14 { 15 mesExtenso="fevereiro" 16 } 17 senao se (numMes==3) 18 { 19 mesExtenso="março" 20 } 21 senao se (numMes==4) 22 { 23 mesExtenso="abril" 24 } 25 senao se (numMes==5) 26 { 27 mesExtenso="maio" 28 } 44 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 29 senao se (numMes==6) 30 { 31 mesExtenso="junho" 32 } 33 senao se (numMes==7) 34 { 35 mesExtenso="julho" 36 } 37 senao se (numMes==8) 38 { 39 mesExtenso="agosto" 40 } 41 senao se (numMes==9) 42 { 43 mesExtenso="setembro" 44 } 45 senao se (numMes==10) 46 { 47 mesExtenso="outubro" 48 } 49 senao se (numMes==11) 50 { 51 mesExtenso="novembro" 52 } 53 senao se (numMes==12) 54 { 55 mesExtenso="dezembro" 56 } 57 senao 58 { 59 escreva("Mês inválido!!!") 60 } 61 escreva("O número ", numMes, " equivale ao mês de ", mesExtenso) 62 } 63 } Um algoritmo imenso, não é mesmo? Tudo porque temos doze possibilidades de meses, mais o caso de o usuário digitar um número de mês inválido. Em situações nas quais existem muitas condições a serem avaliadas, temos a alternativa de utilizar outra estrutura condicional, conforme veremos a seguir. Exercício Antes de seguir para o próximo tópico, execute o algoritmo anterior e informe um número de mês inválido, como 15, por exemplo. Observe que o algoritmo exibe a mensagem “Mês 45 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C inválido!!!”, mas exibe também “O número 15 equivale ao mês de”. Isso acontece porque a linha responsável por exibir esta última mensagem está fora das condições e será executada independentemente do número de mês digitado. Vamos resolver esse problema? 1. Crie uma variável lógica chamada invalido e inicialize-a com o valor falso. Caso o mês digitado seja inválido, troque o valor dessa variável para verdadeiro. Agora, crie um teste de condição capaz de avaliar o valor da variável invalido e exibir a mensagem do mês por extenso somente quando ele não for inválido. Algoritmo 1 { 2 funcao inicio() 3 { 4 inteiro numMes 5 cadeia mesExtenso="" 6 logico invalido=falso 7 escreva("Informe o número do mês: ") 8 leia(numMes) 9 se (numMes==1) 10 { 11 mesExtenso="janeiro" 12 } 13 ... 14 senao 15 { 16 escreva("Mês inválido!!!") 17 invalido=verdadeiro 18 } 19 se (nao invalido) 20 { 21 escreva("O número ", numMes, " equivale ao mês de ", mesExtenso) 22 } 23 } 24 } 2. Leia os enunciados a seguir e crie os algoritmos e os programas em C++ que solucionem os problemas propostos. a) Peça ao usuário que informe a medida de cada um dos três lados de um triângulo e informe se ele é equilátero, escaleno ou isósceles. Veja como é a classificação dos triângulos: • Equilátero: Três lados com a mesma medida; • Escaleno: Dois lados quaisquer com a mesma medida; • Isósceles: Três lados com medidas diferentes. Algoritmo 1 programa 2 { 46 INTRODUÇÃO À PROGRAMAÇÃO ESTRUTURADA EM C 3 funcao inicio() 4 { 5 real lado1, lado2, lado3 6 escreva("Medida do primeiro lado: ") 7 leia(lado1) 8 escreva("Medida do segundo lado: ") 9 leia(lado2) 10 escreva("Medida do terceiro lado: ") 11 leia(lado3) 12 se (lado1==lado2 e lado2==lado3) 13 { 14 escreva("Este é um triângulo equilátero!") 15 } 16 senao se (lado1==lado2 ou lado2==lado3 ou lado3==lado1) 17 { 18 escreva("Este é um triângulo escaleno!") 19 } 20 senao 21
Compartilhar