Baixe o app para aproveitar ainda mais
Prévia do material em texto
LÓGICA DE PROGRAMAÇÃO Aula 1 - Conceitos introdutórios Aula 2 - Definições de lógica Aula 3 - Elementos fundamentais de programação Aula 4 - Algoritmos Referências Aula 1 CONCEITOS INTRODUTÓRIOS Nesta aula iniciamos os estudos sobre programação de computadores em que você terá contato com os primeiros conceitos de algoritmos, variáveis, tipos de dados e os operadores básicos. INTRODUÇÃO Olá, estudante. Nesta aula iniciamos os estudos sobre programação de computadores em que você terá contato com os primeiros conceitos de algoritmos, variáveis, tipos de dados e os operadores básicos. A compreensão dos fundamentos da programação é importante para que o restante do aprendizado adiante não seja comprometido, assim como compreender a base sobre a qual a grande área de Tecnologia da Informação é construída. Desse modo, aproveite esta etapa para estudar com calma, lendo e relendo os conceitos e exemplos apresentados, realizando os exercícios, assistindo aos vídeos das aulas para que o conteúdo seja entendido de modo adequado e sua jornada seja tranquila. Bons estudos! PRIMEIROS CONCEITOS Vamos começar abordando os primeiros conceitos da lógica de programação e a definição de algoritmo, que é o núcleo da sua aprendizagem nesta disciplina. A programação de computadores é um termo abrangente e que pode ser compreendido de diversas formas. “Programar”, no nosso contexto, refere-se a aplicar técnicas e sequências de instruções a um dado artefato tecnológico com o objetivo de que suas tarefas sejam executadas automaticamente. Pense no exemplo dos robôs de limpeza utilizados para limpar o chão de casas de modo autônomo. Para que este artefato tecnológico consiga realizar suas tarefas sem danificar objetos da residência, muitas instruções estão gravadas em seu sistema para controlar sua operação. A partir do momento que ele é ligado, deve mapear o ambiente, verificar a existência de móveis, calcular a rota e assim por diante. Todas essas operações já estão programadas. Por exemplo, caso encontre um objeto à frente, gire 90º para a direita e siga em frente. Para que uma instrução como essa seja salva no sistema do robô, é necessário que linguagens específicas sejam utilizadas, afinal, o objetivo é instruir uma máquina formada por dezenas e milhares de transistores, resistores e circuitos. Assim, uma instrução na linguagem humana deve ser traduzida para linguagens compreendidas pela máquina por meio do que chamaremos de comandos. Portanto, uma operação que pode parecer simples do nosso ponto de vista muitas vezes será dividida em dezenas, centenas ou milhares de comandos para a máquina. Desse modo, é possível inferir que o estudo da programação deve ser composto de outras áreas do conhecimento, como a lógica, pois é necessário que as sequências de comandos estejam organizadas logicamente de modo a fazer funcionar a máquina em toda sua complexidade. Além disso, elementos da matemática e até mesmo da linguística também são utilizados, pois para escrever um programa com instruções e comandos é fundamental que sigam as sintaxes e padrões estabelecidos. O que é algoritmo É comum hoje nos depararmos com a palavra algoritmo em notícias, vídeos, reportagens, pois ela é utilizada em contextos diferentes como: eleições, propagandas, recomendação de filmes e séries, etc. O motivo para a difusão desta palavra é simples: o algoritmo é a base da programação. Mais especificamente, um programa de computador é a implementação de um ou mais algoritmos como solução para resolver um problema. Do modo sucinto, pois abordaremos os detalhes em outro momento, um algoritmo é uma sequência de instruções e comandos para resolver um problema. Reflita Quais algoritmos você já utilizou em sua vida? Podemos pensar no ensino fundamental, quando aprendemos o algoritmo da divisão. Ou então os passos para resolver uma fórmula de Bhaskara; os passos para descobrir se um número é primo, entre outros. Em resumo, um algoritmo é como uma receita, isto é, a descrição dos passos necessários para se chegar a um resultado esperado. Variáveis, tipos e operadores Para que um programa implemente um algoritmo é preciso, além da lógica do algoritmo em si, um ferramental para manipular os dados e organizar as instruções. De modo geral, a maioria das linguagens de programação apresentam variáveis para armazenar dados, que possuem tipos específicos e podem ser relacionadas por meio de operadores. Ao retomarmos o exemplo do robô aspirador, podemos imaginar de que modo vamos guardar a direção que o robô se encontra, sua velocidade, sua energia, se há ou não objetos próximos e assim por diante. Todas as informações devem ser armazenadas em variáveis. E, caso necessário, seus valores podem ser alterados, como ao alterar a direção. Por essa capacidade de modificar os dados armazenados chamamos a estrutura de variáveis, em oposição a constantes, que são dados armazenados imutáveis. Por exemplo: o peso do robô será uma constante, pois não deve sofrer variações de acordo com sua execução. Por último, para que as variáveis sejam alteradas é necessário manipulá-las, o que é feito com os operadores. UM PROGRAMA E SEUS ELEMENTOS Agora, vamos aprofundar o estudo inicial de programas de computador e uso e tipos de variáveis. Para iniciar, temos uma receita de bolo abaixo: Receita de bolo • 2 xícaras de açúcar • 3 xícaras de farinha • 4 colheres de manteiga • 3 ovos • 1 colher de fermento Modo de preparo: • Bata as claras em neve; • Misture as gemas, o açúcar e a manteiga; • Acrescente o leite e a farinha de trigo aos poucos; • Adicione as claras em neve e o fermento; • Despeje a massa em uma forma grande de furo central; • Asse em forno médio a 180 °C, preaquecido, por aproximadamente 40 minutos. Observe que uma receita tem duas partes principais: os ingredientes utilizados e o modo de preparo (no nosso caso, o algoritmo), que é o passo a passo da manipulação dos ingredientes para obter o bolo conforme esperado. Assim, a sequência correta da execução das instruções é essencial para o resultado correto. Caso a última instrução fosse executada antes da hora, provavelmente o bolo não seria saboroso. Da mesma forma, as instruções de um programa de computador devem seguir uma sequência lógica de passos. Ademais, não basta seguir a sequência correta se os recipientes e ingredientes não estiverem de acordo com a receita. Observe que na receita há um número certo de xícaras de farinha. Na nossa analogia da receita com um programa, os ingredientes seriam as variáveis, que podem ter suas quantidades alteradas de acordo com o tamanho do bolo desejado e manipulados de acordo com cada operador, como adicionar as claras em neve e o fermento. Tomemos agora um exemplo de um programa em que se deseja calcular a média de três números inteiros. Poderíamos escrever as instruções desse programa da seguinte maneira: • Some os três números. • Divida a soma dos três números pelo número 3. • Imprima na tela o resultado. Para os números 3, 4 e 9, por exemplo, poderíamos escrever o seguinte programa: 1. 3 + 4 + 9 2. (3 + 4 + 9) / 3 → Observe que os parênteses são utilizados da mesma forma que na notação da matemática 3. imprimir((3+4+9)/3)) Porém, caso quiséssemos utilizar o programa para calcular a média de 6, 7 e 10, teríamos que reescrever todo o programa para tal. 1. 6 + 7 + 10 2. (6 + 7 + 10) / 3 3. imprimir((6 + 7 + 10)/3)) E assim por diante, isto é, para cada três novos valores seria necessário reescrever todo o programa. Para resolver esta situação, introduzimos o uso das variáveis e assim nosso código pode ser reutilizado. Utilizaremos as variáveis x, y e z para representar os números, mas observe que você pode dar o nome que quiser, desde que o primeiro caractere seja uma letra. Por exemplo: numero1, numero2 e numero3, ou a, b e c, etc. E as variáveis soma e média representarão outras variáveis auxiliares. Desse modo, o programa ficaria da seguinte maneira: 1. soma ← x + y + z 2. media ← (soma)/33. imprimir(media) E, com isso, pode ser reaproveitado para quaisquer números, bastando modificar os valores de x, y e z. Assim temos um programa mais completo e eficiente. Contudo, ainda é preciso estar atento aos tipos das variáveis, afinal, a divisão de números inteiros nem sempre é inteira. Desse modo, é preciso especificar qual o tipo numérico de cada variável: 1. x: inteiro; 2. y: inteiro; 3. z: inteiro; 4. soma: inteiro; 5. media: decimal; Desse modo, nosso primeiro programa está praticamente completo, com as variáveis e tipos definidos e o algoritmo de cálculo da média implementado: a primeira parte refere-se ao que chamamos de declaração das variáveis e a segunda parte às instruções propriamente ditas do algoritmo: // Declaração das variáveis 1. x: inteiro; 2. y: inteiro; 3. z: inteiro; 4. soma: inteiro; 5. media: decimal; // Instruções do programa 6. soma ← x + y + z 7. media ← (soma)/3 8. imprimir(media) Apesar de completo, este exemplo tem fins apenas didáticos, pois não está em uma linguagem reconhecida por nenhum compilador ou tradutor de linguagem de máquina. É o que chamamos de pseudocódigo, pois simula o código de um programa em linguagem e símbolos mais fáceis de serem compreendidos por nós, o que é a forma ideal de iniciar na programação. O USO DE VARIÁVEIS E OPERADORES Agora, veremos alguns exemplos de criação de programas básicos e sua implementação utilizando pseudocódigo para representar as variáveis e as operações. Tome o exemplo a seguir: 1. x: inteiro; 2. y: inteiro; 3. x ← 2 4. y ← x 5. imprimir(y) Qual o valor de y após a execução das duas linhas? Neste caso, a variável y recebe o valor que estava armazenado em x, no caso, o valor 2. Agora observe o caso a seguir: 1. x: inteiro; 2. y: inteiro; 3. x ← 2 4. imprimir(x) 5. y ← x + 1 6. x ← x + y 7. imprimir(x) O programa possui dois comandos de impressão na tela. Quais os valores de x serão impressos? Pare responder a essa pergunta precisamos executar o código passo a passo. Quando o programa executar o primeiro comando “imprimir(x)” (linha 4), o valor de x será 2, pois até aquele momento foi a última atualização da variável x. Contudo, no momento da execução do segundo comando “imprimir(x)” (linha 7), o valor impresso será 5, você sabe explicar o porquê? Após a primeira impressão, a variável y recebe o valor armazenado na variável x (que é igual a 2) mais o número 1, portanto, y está valendo 3. No próximo comando, a variável x recebe a soma dos valores armazenados em x (igual a 2) mais o valor armazenado na variável y (igual a 3). Portanto, a variável x é atualizada para o valor 5. Ou seja, deixa de armazenar o valor 2 para armazenar o valor 5. Façamos agora um outro exemplo para fixar o conteúdo visto até o momento. O objetivo do programa será implementar um algoritmo que leia o nome de duas pessoas junto com suas respectivas idades e imprima na tela uma mensagem de texto informando a soma da idade das duas pessoas. Por exemplo: se o usuário digitar o nome João e a idade 24 e o nome Maria com a idade 25, deve imprimir na tela a mensagem: “A soma da idade de João e Maria é 49”. Para tanto, passamos a precisar de variáveis que representem texto e variáveis que representam números inteiros. Além disso, é preciso ler os nomes e idades, calcular a soma das idades e imprimir a mensagem solicitada, conforme o programa abaixo. 1. nome1: texto; 2. nome2: texto; 3. idade1: inteiro; 4. idade2: inteiro; 5. Ler(nome1); //neste momento é lido o primeiro nome 6. Ler(idade1); //neste momento é lida a primeira idade 7. Ler(nome2); //neste momento é lido o segundo nome 8. Ler(idade2); //neste momento é lida a segunda idade 9. soma ← idade1 + idade2; 10. Imprimir(“A soma da idade de “ nome1 “ e “ nome2 “ é “ soma); Observação As duas barras // indicam um comentário. Isso significa que o texto após as barras não faz parte do código, como nas linhas 5, 6, 7 e 8. Como último exercício de fixação, execute mentalmente (ou em um papel) o programa acima com diferentes nomes e idades e observe quais mensagens serão impressas ao final. Este é um bom exercício para compreender que um programa deve poder ser utilizado para diferentes tipos de valores, o que chamamos de entradas de dados. Nesta aula, você aprendeu de maneira introdutória os principais conceitos de algoritmo, programa, variáveis, tipos de dados e alguns operadores. Bons estudos! VÍDEO RESUMO Olá, estudante, no vídeo desta aula abordaremos os primeiros conceitos da lógica de programação de modo a complementar este material escrito. Abordaremos e ilustraremos a definição e os exemplos do uso de variáveis com os principais operadores de maneira a consolidar essa etapa introdutória e essencial ao seu aprendizado. Saiba mais O estudo da lógica de programação e dos primeiros passos para pensar e construir algoritmos pode ser uma novidade interessante e desafiadora para muitas pessoas. Por isso, há diversas ferramentas disponíveis para auxiliar os estudantes nesta etapa. Uma das mais utilizadas para o nível introdutório é a linguagem Scratch, criada em 2007 pelo MIT e que utiliza elementos ilustrativos e blocos para ensinar o pensamento algoritmo de maneira lúdica e didática. O Scratch, sua documentação e instruções para download estão disponíveis em seu site. Aula 2 DEFINIÇÕES DE LÓGICA https://scratch.mit.edu/ Nesta aula, você conhecerá uma temática fundamental para a compreensão do pensamento algorítmico: a lógica proposicional, o ramo da lógica que auxilia a compreender e organizar as variáveis, os métodos e as funções de maneira estruturada. INTRODUÇÃO Olá, estudante. Nesta aula, você conhecerá uma temática fundamental para a compreensão do pensamento algorítmico: a lógica proposicional, o ramo da lógica que auxilia a compreender e organizar as variáveis, os métodos e as funções de maneira estruturada. Assim, por meio de definições e conceitos iniciais, você aprenderá o básico da lógica, os principais conectivos como conjunção, disjunção e condicional, bem como sua representação utilizando a tabela verdade. Portanto, é importante que você acompanhe este material com atenção para que o conteúdo abordado sirva como base para o seu desenvolvimento futuro no mundo da programação. Bons estudos! INTRODUÇÃO À LÓGICA A lógica é um campo fundamental da ciência e da filosofia que estuda a representação do conhecimento, em que a preocupação principal é a validação da argumentação. Assim, a lógica, como veremos nesta aula, não busca verificar se uma ou mais afirmações são verdadeiras, mas se o modo como as afirmações são organizadas é válido. No programação, um dos maiores desafios é como representar as informações do mundo real que são necessárias para a operação correta de um sistema. Assim, o estudo da lógica nos servirá para compreender a linguagem de representação de informações do mundo real assim como validar e organizar as instruções nos algoritmos. A lógica é um extenso campo subdividido em diversos ramos. Entre eles, podemos destacar a lógica clássica (também chamada de lógica aristotélica em referência a Aristóteles), que é composta em alguns princípios elementares que definem suas regras: • O princípio da identidade: este princípio, um tanto óbvio, afirma que algo é sempre algo. Isto é, a = a e b = b; • O princípio da não contradição: estabelece que se uma afirmação é falsa, sua contraditória deve ser verdadeira. Ou seja, se uma afirmação A é verdadeira e outra afirmação B é o contrário de A, então B deve, obrigatoriamente, ser falsa; • O princípio do terceiro excluído: estabelece que uma afirmação não pode ser falsa e verdadeira ao mesmo tempo. Assim, uma vez definidos os princípios, é preciso definir o que é uma proposição. Uma proposição lógica é uma afirmação, uma declaração de algo. Mas, atenção, pois nem toda sentença é uma proposição lógica. Por exemplo: "Feliz ano novo" é uma sentença exclamativa e não declarativa e, portanto, não é uma proposição. Para identificar uma proposiçãoé preciso sempre pensar que deve ser possível atribuir um valor lógico, isto é, uma proposição será sempre verdadeira ou falsa. Por exemplo: "5 é menor que 3". Neste caso há uma declaração e a proposição em questão tem valor lógico falso, pois 5 não é menor que 3. Um outro exemplo de proposição é: "O Brasil é o maior país da América do Sul e o Amazonas é o maior estado do Brasil". Neste caso, temos duas proposições que formam uma proposição composta. Como podemos verificar, as duas proposições simples são verdadeiras e, portanto, a proposição composta também é verdadeira. Por fim, podemos observar um último elemento importante que abordaremos em maior profundidade a seguir que são os conectores. A proposição composta anterior foi formada por meio do conector e, que uniu as duas proposições menores. Os conectores que estudaremos são conjunção, disjunção, negação e condicional. A conjunção é também representada pelo e, a disjunção pelo ou, a negação pelo não e a condicional pelo se. ELEMENTOS DA LÓGICA PROPOSICIONAL A lógica proposicional é baseada no estudo dos valores lógicos, sentenças e afirmações que se representam por meio de proposições, como você observou no bloco anterior. Assim, você verá como essas sentenças declarativas podem ser relacionadas, formando proposições compostas em que o valor lógico depende dos valores de cada variável. Neste sentido, vamos aprofundar o conhecimento de cada uma delas para, no último bloco, analisar a aplicação desses conceitos por meio da tabela verdade. Negação A primeira das relações a ser estudada é a mais simples, a negação. Nesta operação, se uma variável p tem certo valor lógico, sua negação (representada por ~p) terá o valor oposto. Por exemplo, dada a proposição: p: o céu é amarelo Sua negação será: ~p: o céu não é amarelo A negação pode ser aplicada a uma variável isolada ou em proposições com mais variáveis. Conjunção A próxima operação analisada é a conjunção, que necessita de duas variáveis para sua aplicação. A conjunção nada mais é do que o conectivo que representa a intersecção, ou então, na língua portuguesa o E, isto é, uma coisa e outra. Por exemplo, tomando duas proposições p e q: p: Brasília é a capital do Brasil q: Buenos Aires é a capital da Argentina Neste caso, a conjunção é representada da seguinte forma p^q: Brasília é a capital do Brasil e Buenos Aires é a capital da Argentina E, como ambas as proposições são verdadeiras a proposição resultante também é. Disjunção Outro conectivo muito importante é a disjunção, que representa a união da matemática, ou, em língua portuguesa, o OU. Mas atenção: a disjunção será verdadeira quando uma das variáveis for verdadeira ou ambas forem verdadeiras. Como exemplo temos as duas proposições p e q: p: a água é transparente q: o mar é vermelho Deste modo, a disjunção é representada da seguinte forma: p V q: a água é transparente ou o mar é vermelho Condicional e bicondicional Outros dois conectivos fundamentais para o estudo da lógica são o condicional e o bicondicional. Como o nome indica, a operação condicional representa uma condição e pode ser lida como se p então q (indicado pela seta à). Por exemplo, p: choveu hoje q: o asfalto está molhado Assim, a condicional é representada por: p à q: se choveu hoje então o asfalto está molhado De modo análogo, temos a bicondicional, que é a condicional aplicada a ambas as direções e lida como p se e somente se q(representada por <->). Como exemplo temos: p: a é primo q: a é divisível por 2 Neste caso, a bicondicional é representada por: p <-> q: a é primo se e somente se a é divisível por 2 Que, observando os valores lógicos de p e q, é falso. Desse modo, você conheceu os principais conectivos lógicos da lógica proposicional que conformam o arcabouço que auxilia na compreensão e no desenvolvimento do pensamento algorítmico necessário para a programação. A TABELA VERDADE E ALGUNS EXEMPLOS Agora, veremos a aplicação dos conceitos da lógica por meio de exemplos e do uso da tabela verdade para a validação das proposições. Tabela verdade A representação mais interessante no início dos estudos da lógica proposicional é a tabela verdade, pois permite avaliar os valores lógicos resultantes das operações entre as proposições de maneira mais direta. A tabela é formada por colunas, sendo uma para cada variável proposicional e uma ou mais colunas para a proposição composta resultante, a depender do seu tamanho. No nosso caso, utilizaremos apenas a tabela com três colunas, conforme o exemplo a seguir, que representa a operação E indicada pelo operador ^. Observe que temos duas variáveis, p e q e, para cada uma, há 4 linhas com os possíveis valores lógicos. A terceira coluna corresponde à proposição composta p ^ q e possui os valores de todas as combinações possíveis entre os valores lógicos de cada variável. Tabela 1 | Tabela verdade da conjunção p q p ^ q F F F F V F V F F V V V Observe que a primeira linha interna da tabela tem a variável p com valor falso (F), a variável q também com F e, na terceira coluna, o resultado da operação p ^ q com ambas as variáveis F, que resulta em F. Na segunda linha, quando p é verdadeiro (V), q é F, o resultado de p ^ q é F, afinal, para a conjunção ser verdadeira, é necessário que ambas as proposições sejam verdadeiras, o que ocorre apenas na última linha da tabela. A seguir temos a tabela da disjunção, isto é, dados p e q, a operação p V q. É importante lembrar que a disjunção é a operação também conhecida como OU, ou seja, o resultado será verdadeiro quando uma das duas proposições forem verdadeiras (ou ambas) – como observamos nas três primeiras linhas – e falso quando nenhuma das duas forem verdadeiras, conforme observamos na primeira linha da tabela. Tabela 2 | Tabela verdade da disjunção p q p v q F F F F V V V F V V V V É importante observar que a aplicação da tabela verdade é útil em muitos casos, mas pode se tornar inviável a depender do número de variáveis que compõem a proposição. Suponha que tenhamos 10 proposições simples formando uma proposição composta por meio de operadores lógicos. Qual seria o número de linhas da tabela verdade? Para responder a essa questão é preciso observar que o número de linhas de uma tabela com uma única variável será 2, pois há apenas duas combinações possíveis. A tabela as seguir ilustra a tabela verdade com apenas a variável p formando a proposição ~p, que é a negação de p. Tabela 3 | Tabela verdade da negação p ~p F V V F Assim, retornando ao questionamento, uma tabela com uma variável possui 2 linhas, uma tabela com duas variáveis possui 4 linhas, uma tabela com 3 variáveis terá 8 linhas. Forma-se um padrão que é representado pela expressão , portanto uma proposição composta por 10 variáveis terá 2¹⁰ linhas, ou 1024 linhas, o que torna difícil sua representação para muitas variáveis. VÍDEO RESUMO Olá, estudante, no vídeo desta aula abordaremos alguns conceitos da lógica, sua definição e elementos práticos de como manipular e validar argumentos por meio de exemplos e da construção da tabela verdade. Saiba mais O estudo da lógica proposicional pode ser complementado por estudos paralelos e pela prática em forma de exercícios. Desse modo, seguem alguns links com jogos educativos para praticar seu conhecimento em relação aos conceitos apresentados: Lógica Proposicional Clássica - Quiz com exercícios sobre lógica. Raciocínio Lógico - Conceitos Básicos – I - Quiz com perguntas. Aula 3 ELEMENTOS FUNDAMENTAIS DE PROGRAMAÇÃO Nesta aula você terá contato com os primeiros elementos necessários para iniciar o desenvolvimento de programas de computador, o que será essencial para a evolução na sua aprendizagem. https://www.quiz.com.br/quiz/716/raciocinio-logico-conceitos-basicos-i/ https://quizizz.com/admin/quiz/5e184173be7d73001c424bf7/logica-proposicional-classica INTRODUÇÃO Olá, estudante. Nesta aula você terácontato com os primeiros elementos necessários para iniciar o desenvolvimento de programas de computador, o que será essencial para a evolução na sua aprendizagem. Veremos como os algoritmos formam a base da computação e são fundamentais para que um sistema possa ser executado de maneira eficiente e adequada. Veremos também elementos estruturantes para a produção de códigos como os principais operadores aritméticos, lógicos e relacionais, e a noção e manipulação de variáveis e constantes. Esperamos que este material contribua para que seus estudos na introdução à programação sejam completos e auxiliem em sua vida acadêmica e profissional. Bons estudos! OS ALGORITMOS NA PROGRAMAÇÃO A computação tem como objetivo central a resolução de problemas pelo uso de máquinas potentes que são capazes de realizar bilhões de operações por segundo. E para que essas máquinas e esses equipamentos possam realizar seus cálculos e operações corretamente é necessário que as instruções sejam estruturadas de maneira lógica. Para isso, cabe aos programadores a tarefa de escrever as instruções a serem executadas. Assim, programar não é uma tarefa simples, pois exige conhecimentos sobre os equipamentos, linguagens de programação e, principalmente, sobre as melhores maneiras de resolver os problemas. Neste sentido, antes de escrever as dezenas, centenas ou milhares de linhas de código para um sistema computacional, é fundamental o estudo e planejamento da solução e de sua lógica, para só então transformá-la em programas de computador. E é aqui que são desenvolvidos os algoritmos, que são as instruções de um programa em sequência e ordem determinadas, as quais garantem que uma entrada de dados será processada e resultará em uma saída que deve resolver o problema. É análogo a uma receita de bolo, em que o algoritmo deve instruir o cozinheiro ou cozinheira como processar os ingredientes e transformá-los em um bolo perfeito. Desse modo, faz-se essencial estudar como desenvolver um bom algoritmo e conhecer as ferramentas utilizadas para construí-los e transformá-los em código. Para tanto, nesta aula abordaremos alguns dos elementos para darmos início à construção de códigos, como os operadores aritméticos, operadores relacionais, operadores lógicos, variáveis e constantes. Em linhas gerais, os operadores possibilitam manipular e relacionar dados. Estes dados podem ser de vários, tipos: numéricos, textuais, lógicos, entre outros. E, na programação, a lógica de manipulação segue a lógica matemática que você conhece do ensino médio. Assim, como os dados podem sofrer alterações durante o algoritmo, há estruturas conhecidas como variáveis que servem para armazenar temporariamente um dado valor de dado tipo, de acordo com o que o programador definir. Essas variáveis, como o nome indica, podem sofrer variações em seus valores durante a execução do programa, diferente das constantes, que são dados imutáveis. Ressaltamos a importância deste momento do aprendizado, pois a manipulação correta de variáveis, por exemplo, é a base para a execução eficiente de um programa de computador. Imagine, por exemplo, um programa de computador para orientar o lançamento de foguetes espaciais. São inúmeros cenários e fatores que podem decidir o sucesso ou fracasso do lançamento que devem ser todos considerados para o desenvolvimento do sistema. Como são milhares ou milhões os fatores que podem ser transformados em dados e analisados pelos programas, é dever do programador criar algoritmos corretos e eficientes utilizando corretamente as variáveis e as operações pois um programa com excesso de variáveis pode levar a estourar a capacidade de memória, e um algoritmo com operações em excesso pode sobrecarregar a capacidade de processamento. São detalhes como este que fazem diferença tanto no mercado de trabalho quanto na vida acadêmica de computação e que iniciaremos o estudo nesta aula. O USO DE OPERADORES E VARIÁVEIS Vamos aprofundar os conhecimentos sobre os operadores, variáveis e constantes, definindo cada um deles. Operadores aritméticos Os operadores aritméticos são aqueles utilizados para realizar cálculos aritméticos, da mesma maneira que você aprendeu na matemática. Neste bloco veremos os 4 principais: adição, subtração, divisão e multiplicação: 1. Adição O operador de adição é o símbolo +. Para utilizá-lo, basta relacionar dois elementos sejam eles variáveis, constantes ou números. Por exemplo: a expressão 3 + 2 é uma adição válida, assim como 3 + num, desde que a variável num seja do tipo numérico. É possível também associar duas variáveis como num1 + num2, ou então variáveis e constantes, como em num2 + NUM3, em que num2 é uma variável e NUM3 uma constante. A ordem neste caso não faz diferença. 2. Subtração O operador da subtração é o símbolo -. Analogamente à adição, é possível relacionar números, variáveis e constantes, como 3 - 4, ou então num1 - num2, ou então NUM3 - 4. 3. Divisão O operador da divisão utilizado na maioria das linguagens de programação e em pseudocódigo é o /. Com ele é possível realizar divisões entre valores numéricos (números, variáveis e constantes). Assim como na matemática, também pode ser necessário o uso de parênteses para o correto resultado. Por exemplo, a divisão 3 + 4/2 é diferente de (3+4)/2. Uma observação importante é que a divisão de números inteiros geralmente resultará um um resultado inteiro, portanto, é preciso estar atento ao tipo das variáveis e números utilizados. 4. Multiplicação O último operador aritmético analisado é o de multiplicação, com o símbolo *. Neste caso, assim como na divisão, é preciso estar atento ao uso de parenteses. Por exemplo, 5 * 2 - 3 é igual a 7, já 5 * (2 - 3) é igual a 5. Uma característica importante, assim como na matemática, é a precedência dos operadores, pois a divisão e a multiplicação são realizadas antes da soma e da subtração. Com base no que vimos, um exercício interessante é descobrir qual o valor da seguinte expressão: 4 - (5 * 2) / 5 ? Operadores relacionais Os operadores relacionais servem para testar os valores lógicos de uma dada expressão, isto é, se a expressão é verdadeira ou falsa. 1. Igualdade Para testar a igualdade, utilizaremos o símbolo ==, como no exemplo: 5 == 7. Neste caso, o resultado da expressão é falso, pois 5 não é igual a 7. 2. Diferença Para testar a diferença, utilizamos o operador !=, como no exemplo 5 != 7. Neste caso, o resultado da expressão é verdadeiro, pois 5 é diferente de 7. 3. Maior e menor Já para testar se um valor é maior ou menor que outro, utilizamos os mesmos operadores que a matemática, > para testar se um valor é maior que outro e < para testar se um dado valor é menor que outro. Por exemplo, 5 < 2 possui valor lógico falso, pois não é verdade que 5 é menor que 2, enquanto 5 > 2 retorna verdadeiro, pois de fato 5 é maior que 2. Ainda é importante salientar que é possível utilizar o símbolo >= e <= para testar se valores são maiores ou iguais e menores ou iguais a outros, respectivamente. Operadores lógicos Os operadores lógicos são utilizados, no nosso caso, para concatenar expressões, isto é, se uma expressão composta é verdadeira ou falsa. Por exemplo: se quisermos avaliar as expressões 4 > 5 e a expressão 5 > 6 pela conjunção, escrevemos da seguinte maneira: 4 > 5 && 5 > 6. Neste caso, o resultado será falso, já que ambas as expressões são falsas. No caso da disjunção utilizaremos o símbolo ||. Por exemplo: 5 > 3 || 6 >= 7. Neste caso, a expressão 5>3 é verdadeira e a expressão 6>=7 é falsa. Porém, a expressão completa 5 > 3 || 6 >= 7 é verdadeira, pois trata-se de uma disjunção. Variáveis e constantes Por fim, vamos conhecer um pouco mais sobre variáveis e constantes. Uma variável é um espaço na memória reservado para armazenar um valor de tipo pré- determinado. Por exemplo: se quisermos armazenar um número inteiro, devemos declarar uma variável com um nome que o programador escolhe e o tipo destavariável. Para declarar uma variável inteira e uma real, é possível indicar: num1: inteiro; num2: real; A partir de então é possível armazenar valores nestas variáveis, utilizá-las em expressões e até mesmo substituir seus valores. Já as constantes são valores fixos. Uma vez atribuídos valores para as constantes (que também recebem nomes e tipos), estes valores não podem mais ser modificados. Convenciona-se escrever as constantes em letra maiúscula, como no exemplo a seguir: NUM1: inteiro; NUM1 <- 5; A partir deste momento a constante NUM1 sempre conterá o valor 5. EXEMPLOS DE ALGORITMOS COMPLETOS Agora, você irá consolidar o conhecimento adquirido anteriormente por meio da aplicação da lógica de desenvolvimento de um algoritmo, a noção de operadores e a manipulação de variáveis na solução de problemas. A primeira etapa, conforme abordamos, é compreender o problema proposto. Vamos iniciar com um problema simples: imprimir a soma de dois números inteiros. Para isso, temos como entrada dois números, que precisamos salvar em duas variáveis, como no código a seguir: 1. num1: inteiro; 2. num2: inteiro; 3. soma: inteiro; 4. ler(num1, num2); Observe que nas três primeiras são declaradas as variáveis inteiras que utilizaremos. A seguir, é necessário utilizar o operador aritmético de adição para realizar a soma das variáveis e operador de atribuição para salvar o resultado na variável soma: 1. num1: inteiro; 2. num2: inteiro; 3. soma: inteiro; 4. ler(num1, num2); 5. soma <- num1 + num2; 6. imprime(soma); Na linha 5 realizamos a operação de soma e, na linha 6, imprimimos na tela o resultado calculado. Agora passemos a um exemplo mais completo: ler 5 números inteiros e imprimir na tela quantos números positivos e negativos. Para isso, é preciso inicialmente fazer a leitura de cada número. Quando um número é lido, é necessário salvar em uma variável, que neste caso será do tipo inteiro. Em seguida, é necessário utilizar o operador relacional para comparar se o número é maior ou menor que zero e então incrementar a variável correspondente, conforme o pseudocódigo a seguir: 1. contador: inteiro; 2. num: inteiro; 3. qtdePositivos: inteiro; 4. qtdeNegativos: inteiro; 5. contador <- 0, qtdePositivos <- 0, qtdeNegativos <- 0; 6. enquanto contador < 5 faça: 7. ler(num) 8. se num > 0 então: 9. qtdePositivos <- qtdePositivos + 1; 10. se num < 0 então: 11. qtdeNegativos <- qtdeNegativos + 1; 12. 13. imprima(qtdePositivos, qtdeNegativos); Agora vamos compreender o código acima. Nas linhas 1 a 4 são declaradas as variáveis que serão utilizadas, bem como o tipo de cada uma, que no caso são inteiras. A variável contador servirá para contar a quantidade de números lidos; as variáveis qtdePositivos e qtdeNegativos servem para contar a quantidade de números positivos e negativos, respectivamente; a variável num armazena cada número lido por vez. Na linha 5, há a inicialização dos valores de cada variável utilizando o operador de atribuição. A linha 6 declara um laço de repetição, assunto que será abordado em aulas futuras. Entre a linha 7 e a linha 11, o algoritmo em si, conforme explicado anteriormente, é executado com sua lógica de comparação e incremento das variáveis. E, por fim, na linha 13 há a impressão do resultado. Observe que no decorrer do código utilizamos os operadores aritméticos de adição, os operadores relacionais de maior e menor e operador de atribuição. Um exercício interessante para fixar ainda mais o conteúdo é reler o código e marcar todas as ocorrências de cada operador indicando seu tipo. Desse modo você aprendeu a manipular variáveis e operadores para construir algoritmos básicos utilizando pseudocódigo. VÍDEO RESUMO Olá, estudante, no vídeo desta aula abordaremos a importância de pensar em algoritmos, como desenvolver um algoritmo eficiente, assim como os principais elementos que o constituem como variáveis, constantes e os principais operadores. Saiba mais O pensamento algorítmico é fundamental para um bom programador. Nesse sentido, uma das maneiras de entrar no mundo dos códigos é por meio dos jogos. CodeCombat - Jogo online para aprender a programar. CodinGame - Jogo que envolve programação em várias linguagens. Aula 4 ALGORITMOS Nesta aula você terá um contato mais aprofundado com a construção e o desenvolvimento dos algoritmos. Serão introduzidos conceitos importantes de representação de algoritmos antes do momento da implementação utilizando linguagens de programação. INTRODUÇÃO Olá, estudante. Nesta aula você terá um contato mais aprofundado com a construção e o desenvolvimento dos algoritmos. Serão introduzidos conceitos importantes de representação de algoritmos antes do momento da implementação utilizando linguagens de programação. Afinal, você deve se perguntar se um algoritmo só pode ser implementado utilizando uma linguagem específica como a C, Java ou outras. E, para isso, mostraremos as técnicas de descrição narrativa e pseudocódigo, além de abordar a https://www.codingame.com/start https://codecombat.com/ declaração de variáveis e entrada e saída de dados por meio delas. Bons estudos! CONSTRUÇÃO DE ALGORITMOS Estudante, neta aula, você aprenderá mais algumas características dos algoritmos que são importantes neste momento do início da sua jornada pelo mundo da programação. Você já aprendeu que para desenvolver uma solução para qualquer problema computacional é preciso compreender o problema, esboçar uma solução e aí então iniciar a escrita. Neste momento, introduziremos duas maneiras de escrever o projeto de algoritmos: a descrição narrativa e o pseudocódigo. Vale ressaltar que ambas as técnicas não são programas em linguagem de máquina, isto é, que podem ser compilados e executados, mas, sim, instruções redigidas em ordem e estrutura definidas para que a lógica da programação esteja clara para futuros desenvolvimentos. Neste sentido, podemos afirmar que essas técnicas assemelham-se a um esboço do código final, apresentando os principais passos para resolver um problema em um nível de abstração mais alto, em que detalhes da implementação por vezes não estão presentes. Por isso, esse tipo de representação pode ser chamado de também de alto nível, pois o nível de abstração é maior, em oposição às linguagens de baixo nível, que são linguagens mais próximas à linguagem utilizada para a manipulação direta das estruturas físicas do computador. Assim, a definição da descrição narrativa pode ser ampliada para a representação passo a passo em linguagem natural das instruções do algoritmo e o pseudocódigo, de modo muito similar, da descrição dos passos em maiores detalhes e com maior capacidade de representação de estruturas. Por exemplo: com o pseudocódigo é possível explicitar a declaração de variáveis, isto é, deixar claro o nome da variável e seu tipo, como no exemplo a seguir: num1: inteiro; Neste caso foi declarada a variável chamada num1 do tipo numérico inteiro. Note que, na descrição narrativa, não há a preocupação em declarar as variáveis, mas apenas informar passos mais gerais. Outro elemento que a técnica de pseudocódigo permite aprofundar é a entrada e saída de dados, que são as operações de leitura e impressão, por exemplo. São estas operações que realizam a comunicação com cenários externos ao programa, pois recebem os dados que serão utilizados para a execução de um programa e, após seu processamento, devolvem o resultado em forma de saída. Uma maneira de representar a leitura de um número no pseudocódigo seria: ler(num1); Assim, informa-se ao leitor que será realizada a operação (função ou método) de leitura de algum valor e que este valor será armazenado na variável chamada num1. Analogamente, a saída de dados também é representada da seguinte forma: imprime(num1); Neste caso está representada uma chamada a uma operação de impressão da variável num1. Esta impressão poderia ser realizada em um terminal de saída, por exemplo, ou atémesmo gravada em arquivos. ETAPAS DE DESENVOLVIMENTO DE ALGORITMOS Você já estudou sobre a importância de um bom algoritmo para resolver um problema computacional, conheceu os principais operadores, as variáveis e constantes, porém pode se questionar qual o próximo passo. Afinal, o projeto de algoritmos mentalmente é importante, porém não suficiente, já que é preciso documentar e escrever os passos utilizados. Contudo, como estamos introduzindo o ensino da programação, antes de iniciar os códigos diretamente utilizando uma linguagem de programação como o C, Java ou Python, você aprenderá duas técnicas úteis para representar o algoritmo de modo inicial, de modo a auxiliar no planejamento e visualização de uma solução para algum problema proposto. Descrição narrativa A técnica da descrição narrativa tem como função a descrição em linguagem natural (no nosso caso o português) dos passos necessários para resolver o problema proposto. Ou seja, trata-se da descrição do algoritmo em uma linguagem mais próxima da resolução mental proposta e, por isso, é a primeira forma de documentar e planejar um programa. Podemos pensar em uma receita que buscamos na internet como uma descrição narrativa, pois ali estão descritos os passos para realizar um prato em língua portuguesa, ou seja, é altamente compreensível para o ser humano mas não é capaz de executar um programa de computador. Para escrever uma descrição narrativa, basta inserir cada passo da solução por linha. Por exemplo, para calcular o menor número dentre dois números dados, o algoritmo em descrição narrativa seria o seguinte: 1. Ler os dois números 2. Comparar os números 3. Imprimir o menor Dessa maneira, nota-se que a descrição narrativa é mais enxuta e objetiva. Um elemento que aparece neste caso é a entrada e saída de dados. A entrada está representada na linha 1, em que a instrução de leitura de dois números é informada. Esta leitura pode ser do teclado ou de um arquivo. E a saída pode ser a impressão na tela, ou a gravação em algum arquivo Pseudocódigo O uso do pseudocódigo pretende utilizar a linguagem natural com maiores detalhes técnicos, indicando quais variáveis serão utilizadas e como as expressões serão formadas. Para resolver o mesmo problema anterior, o pseudocódigo seria o seguinte: 1. num1: inteiro; 2. num2: inteiro; 3. ler(num1, num2); 4. 5. se num1>num2: 6. imprime(num2); 7. se num2 > num1: 8. imprime(num1); Observe que neste caso deixamos claro quais as variáveis, seu tipo, como serão lidas e alguns elementos mais claros de sintaxe, como o uso de ponto e vírgula ao fim de cada linha. Apesar de possuir mais regras de sintaxe que a descrição narrativa, o pseudocódigo também não serve para ser executado como um programa de computador, mas sim para elucidar e auxiliar no planejamento de algoritmos. ALGORITMOS NA PRÁTICA Agora, veremos alguns exemplos práticos na construção de algoritmos utilizando a descrição narrativa e a técnica de pseudocódigo apresentadas anteriormente. Tomemos como base para a construção dos códigos o seguinte problema: você deve desenvolver um programa de computador para uma agência de monitoramento climático e foi solicitado que, com os dados de temperatura de sete dias da semana, você escreva um programa que calcule a média das temperaturas. Para iniciar o desenvolvimento do código, é preciso, inicialmente, estudar o problema e analisar as entradas do programa. Neste caso, o problema principal é calcular a média de 7 temperaturas e a solução é aplicar a fórmula da média, sendo dividir a soma dos valores pela quantidade de valores, no caso o número de dias da semana. Para analisar as entradas, observamos que o programa irá receber 7 valores de temperatura, que serão valores reais. Portanto, até o momento, já sabemos a fórmula que devemos implementar e os tipos dos valores utilizados que serão transformados em variáveis. Por fim, é preciso analisar qual será a saída do programa, isto é, qual o resultado. No nosso caso, o resultado será a impressão da média calculada. Desse modo, temos as condições necessárias para desenvolver o código. Iniciaremos mostrando o código em descrição narrativa: 1. Ler os 7 valores de temperatura 2. Somar os 7 valores 3. Dividir a soma dos valores por 7 4. Armazenar o resultado na média 5. Imprimir a média calculada Assim, é possível notar que o programa em descrição narrativa é simples e direto, evidenciado em linhas gerais os passos que serão efetuados, porém sem apresentar detalhes maiores, como as variáveis utilizadas. Em seguida, apresentamos o código em pseudocódigo: 1. temp1: real; 2. temp2: real; 3. temp3: real; 4. temp4: real; 5. temp5: real; 6. temp6: real; 7. temp7: real; 8. soma: real; 9. media: real; 10. 11. ler(temp1, temp2, temp3, temp4, temp5, temp6, temp7); 12. soma <- temp1 + temp2 + temp3 + temp4 + temp5 + temp6 + temp7; media <- soma/7; 13. media <- soma/7; 14. imprime(media); Em relação ao exemplo em pseudocódigo, é possível observar que o código tem mais detalhes que a descrição narrativa e é mais próximo a uma implementação real em linguagem de programação. Neste caso, são descritas quais as variáveis e quais seus tipos, como descrito das linhas 1 a 9, como se dá a entrada de dados, na linha 11, as operações em si, linhas 12 e 13 e a saída de dados na linha 14. Assim, você aprendeu duas técnicas para representar algoritmos que auxiliam no planejamento e projeto, etapas importantes para a futura implementação nas linguagens de programação. VÍDEO RESUMO Neste vídeo você verá maiores detalhes sobre as técnicas de descrição narrativa e pseudocódigo por meio de mais um exemplo de cada, de modo a fixar este importante conteúdo. Também abordaremos as estratégias de construção de algoritmos utilizando variáveis e entrada e saída de dados. Saiba mais O uso de pseudocódigo é muito importante para visualizar a estratégia de resolução de problemas antes da implementação em si. Existem diversas ferramentas que auxiliam no aprendizado como a linguagem em pseudocódigo Portugol. REFERÊNCIAS Aula 1 DASGUPTA, S.; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH Editora, 2009. ZIVIANI, N. et al. Projeto de algoritmos: com implementações em Pascal e C. Luton: Thomson, 2004. Aula 2 LABRA, J. E.; FERNÁNDEZ, A. I. Lógica proposicional para informática. Cuaderno Didáctico, n. 12, 1998. MORTARI, C. A. Introdução à lógica. Unesp, 2001. Aula 3 DASGUPTA, S.; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH Editora, 2009. ZIVIANI, N. et al. Projeto de algoritmos: com implementações em Pascal e C. Luton: Thomson, 2004. https://portugol-webstudio.cubos.io/ Aula 4 DASGUPTA, S.; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH Editora, 2009. ZIVIANI, N. et al. Projeto de algoritmos: com implementações em Pascal e C. Luton: Thomson, 2004. UNIDADE 2 ELEMENTOS DE ALGORITMOS •Aula 1 - Representações de algoritmos •Aula 2 - Execução sequencial e estruturas de decisão •Aula 3 - Estruturas de repetição •Aula 4 - Variáveis indexadas •Referências Aula 1 REPRESENTAÇÕES DE ALGORITMOS Nesta aula você aprenderá a definição de algoritmos, sua aplicabilidade e conceito como peça fundamental para desenvolvimento de um programa de computador. INTRODUÇÃO Olá, estudante! Nesta aula você aprenderá a definição de algoritmos, sua aplicabilidade e conceito como peça fundamental para desenvolvimento de um programa de computador. Também irá estudar quais as principais propriedades de um algoritmo e como fluxogramas podem ser criados para representar algoritmos. Todo este conhecimento é a base fundamental para a construção de softwares, já que https://conteudo.colaboraread.com.br/202301/WHITE_LABEL/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/LIVRO/U2/index.html#referencias https://conteudo.colaboraread.com.br/202301/WHITE_LABEL/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/LIVRO/U2/index.html#aula4 https://conteudo.colaboraread.com.br/202301/WHITE_LABEL/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/LIVRO/U2/index.html#aula3https://conteudo.colaboraread.com.br/202301/WHITE_LABEL/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/LIVRO/U2/index.html#aula2 https://conteudo.colaboraread.com.br/202301/WHITE_LABEL/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/LIVRO/U2/index.html#aula1 você exercitará a criação da lógica necessária para o processo de desenvolvimento de novas aplicações ou manutenção em aplicações já existentes. Lembre-se que o seu aprendizado só dependerá de você, então, não se limite apenas ao estudado em aula, mas busque, de forma proativa, ampliar seus conhecimentos. Bons estudos! O QUE SÃO ALGORITMOS E QUAIS SUAS APLICABILIDADES Em seu cotidiano, todas as ações que você executa têm uma sequência lógica de passos para sua conclusão. Mesmo que, de forma inconsciente, você não precise ficar raciocinando sobre a ordem de execução de cada passo, em algum momento, alguém te ensinou a sequência que você reproduz. A esta sequência lógica de passos para executar uma ação denominamos algoritmo. Os passos necessários para obter um resultado de uma ação, como, por exemplo, preparar uma receita culinária, devem seguir uma sequência lógica com o objetivo de estabelecer uma ordem no pensamento das etapas que deverão ser seguidas para que a refeição, ao final do processo, esteja pronta. Segundo o que apresenta Forbellone (1993), a sequência finita e ordenada de passos necessária para se atingir um objetivo (como trocar um pneu, preparar uma receita culinária ou sair de casa para ir ao trabalho) é o que se conhece como um algoritmo. Um programa de computador (software) é a representação, por meio de uma linguagem de programação, de uma lógica que irá resultar em um comportamento esperado para o programa, como, por exemplo, o cadastro de dados de uma pessoa em uma clínica médica, marcação de consultas a partir de uma agenda disponível de um médico, dentre outros exemplos do nosso cotidiano. Então, antes da construção de qualquer programa de computador, é necessário entender o processo de raciocínio lógico e a definição dos passos necessários para a construção de um algoritmo. Como exemplo de um algoritmo simples para, por exemplo, abrir uma porta trancada, você pode listar os seguintes passos: 1. selecionar a chave correta para a fechadura que se deseja abrir; 2. inserir a chave na fechadura; 3. se a chave encaixou corretamente, então: 3.1 gire a chave no sentido anti-horário uma volta; 3.2 tente abrir a porta. Se a porta abriu, então: 3.2.1 porta aberta com sucesso. 3.3 Se a porta não abriu, então: 3.3.1 Volte ao passo 3.1 Quando os passos, em sua respectiva sequência lógica, são listados, é possível perceber, por exemplo, que cada tarefa tem um certo nível de complexidade e um determinado padrão de comportamento (uma porta que possua chaves mecânicas sempre seguirá a mesma lógica para sua abertura). É importante mencionar que, em muitos casos, será necessário que o usuário forneça algumas informações de entrada ao algoritmo (como nome, endereço e RG de uma pessoa que será cadastrada como aluna em uma instituição de ensino, por exemplo), que passará por um processamento (como uma validação, por exemplo), gerando um resultado (efetuar o cadastro do aluno com sucesso). Para que a lógica de um algoritmo possa ser representada de modo que fique claro para outras pessoas que conheçam lógica de programação e algoritmos, você poderá utilizar um fluxograma, ou seja, a representação gráfica de um fluxo de passos sequenciais, por meio do uso de símbolos com significados específicos. Conforme nos apresenta Pressman (1995), a construção de um fluxograma é um método bastante utilizado para representação da lógica de um algoritmo por ser simples, fazendo uso de losangos para representação de uma condição de controle e setas para mostrar qual o fluxo a seguir, conforme cada alternativa possível que parta do fluxo de condição. Uma sequência de passos pode ser representada por meio de retângulos. Detalharemos a representação utilizando fluxogramas em um momento posterior neste texto. PRINCIPAIS CARACTERÍSTICAS DE UM ALGORITMO Toda lógica que se pretende transferir a um programa de computador poderá ter diferenças na forma como as etapas são ordenadas para se atingir o objetivo desejado, a depender da maneira pela qual quem está construindo o algoritmo ordene seu pensamento lógico. Porém, existem alguns pontos fundamentais para garantir que um algoritmo seja compreendido facilmente e, caso necessário, sofra alterações evolutivas (quando se deseja acrescentar novas funcionalidades a uma aplicação), adaptativas (quando se deseja ajustar funcionalidades já existentes para o que o usuário considera mais adequado para resolver seus problemas) ou corretivas (quando é feita correção de erros detectados durante a utilização do programa). A estes pontos damos o nome de propriedades de um algoritmo. Quando a construção de um algoritmo se preocupa em garantir que as principais propriedades serão respeitadas, o processo de representação deste algoritmo em fluxograma será facilitado, garantindo maior probabilidade de sucesso ao longo do processo de codificação (implementação) de sua lógica. Uma das propriedades dos algoritmos é a sequenciação, já que, para que se atinja um objetivo específico (como cadastrar os dados um usuário, extrair um relatório, etc.), é preciso que os passos necessários para a concretização da funcionalidade sejam definidos em uma ordem sequencialmente lógica. Por exemplo: caso o seu algoritmo seja de cadastro de dados de um paciente, é preciso que uma tela contendo os campos que serão informados pelo usuário possa aparecer, seguindo-se do preenchimento destes campos e do envio para que possam ser validados (conforme as regras de negócio) e cadastrados. Caso o envio aconteça antes da etapa de informação dos dados, a sequência lógica será quebrada, não sendo possível alcançar o propósito final (cadastramento dos dados). A complexidade é outra propriedade importante para um algoritmo. Quanto mais simples os passos e a sequência lógica destes passos aconteçam, mais simples será seu algoritmo, sendo mais fácil de ser construído e mantido posteriormente. Um fator que aumenta a complexidade, de forma considerável, conforme apresenta Forbellone (1993), é a relação entre o que deve ser feito e o como deve ser feito, que pode levar a respostas tão complexas que não cheguem a nenhuma solução. Quando você perguntar “O quê?”, terá uma resposta direta e objetiva. Por exemplo: na pergunta “O que é um relógio?”, uma resposta objetiva seria similar a “instrumento que apresenta a passagem do tempo, ao longo de um dia”. Já a pergunta “Como é um relógio?”, por outro lado, poderá ter diferentes e irrelevantes respostas, como “objeto esférico com ou sem ponteiros, com tamanhos variados, que pode ser de parede, bancada ou de pulso”. A legibilidade é uma propriedade importante para garantir que outras pessoas irão conseguir ler o seu algoritmo e ter um mesmo entendimento a respeito de seu objetivo. Quanto maior for a legibilidade de um algoritmo, mais facilmente ele será entendido e menor será sua complexidade. Outra propriedade importante de um algoritmo é a portabilidade. Construir um algoritmo que possa ser executado em diferentes sistemas operacionais e diferentes arquiteturas de máquina (hardware) é uma questão importante para englobar os mais diferentes perfis e tipos de usuários de uma aplicação. Um algoritmo, por ser apenas a representação de uma sequência lógica de passos que irão resolver um problema do mundo real do usuário, poderá ser escrito (implementado) utilizando diferentes linguagens de programação e para os mais diferentes ambientes de execução. Todas estas propriedades são importantes para garantir que, após a definição de quais passos serão necessários para se atingir um objetivo com um algoritmo, a sua representação em fluxogramas seja feita de forma fácil, contendo apenas os passos estritamente necessários, sem maiores complexidades e de fácil manutenibilidade(facilidade de manutenção futura). UTILIZANDO FLUXOGRAMAS PARA A REPRESENTAÇÃO DE ALGORITMOS Algoritmos podem ser representados por meio de fluxogramas, como já mencionado, já que esta ferramenta possui os elementos gráficos necessários para representação de uma sequência de passos, com representação para tomada de decisões e fluxo de repetição de passos. Todo fluxograma tem um início e um fim, sendo o início representado pela primeira ação (ou passo) a ser executada para se atingir o objetivo da lógica estruturada. É importante que você defina um “gatilho” para que a sua lógica seja iniciada, ou seja, uma ação que deverá ser feita pelo usuário (como o clique em um botão de menu, a abertura de uma tela contendo um formulário, dentre outras), para que a sequência de passos possa, então, seguir a partir desta ação inicial. Tabela 1 | Principais símbolos de um fluxograma Elemento Significado Elemento que indica início do fluxo a ser construído. Elemento que indica um passo a ser executado, em forma sequencial. Elemento que indica uma condição (pergunta) que irá alterar o fluxo da execução, conforme a Elemento Significado resposta (Sim ou Não). Elemento que indica sequência do fluxo. Elemento que indica término do fluxo. Fonte: elaborada pela autora. A Tabela 1 apresenta um resumo dos principais elementos que são utilizados para construção de um fluxograma. É possível, por exemplo, criar fluxos contendo apenas elementos sequenciais ou, em fluxos mais elaborados, contendo fluxos alternativos, que irão partir de tomada de decisões. A Figura 1 apresenta um exemplo de um fluxograma básico, sem estrutura de controle, apenas com um sequenciamento de passos do início ao fim. O início de todo fluxograma deve ser representado com um conector, que irá exibir qual será o primeiro passo para ser executado em busca do resultado esperado. Figura 1 | Representação de um fluxograma simples Fonte: elaborada pela autora. A Figura 1 apresenta uma sequência de passos simples para o envio de um e-mail a um ou mais destinatários. O primeiro elemento do fluxo apresenta um conector, indicando que o processo será iniciado. Cada caixa retangular irá indicar um passo a ser executado, sendo ligadas por setas, que indicam a sequência que deverá ser seguida. Ao final do processo, um elemento que representa a conclusão do fluxo, sendo representado por um elemento ovalado, apresenta o objetivo concluído (que é o e-mail enviado). Para fluxos mais complexos, que incluem situações de tomadas de decisão ou fluxo de repetição de passos, elementos que representam os caminhos alternativos a serem seguidos podem ser inseridos no fluxo, conforme apresentado na Figura 2. Figura 2 | Fluxograma com tomada de decisão Fonte: elaborada pela autora. A Figura 2 apresenta uma sequência de passos para a abertura de uma porta, conforme exemplo apresentado em momento anterior neste texto. Após o conector que representa o início do processo ter sido inserido, então o fluxo se inicia com uma pergunta condicional sobre a chave, se é compatível com a fechadura da porta a ser aberta ou não. Caso seja compatível, o fluxo será alternado para o ramo da esquerda, seguindo pelas etapas de girar a chave, verificar se a porta se abriu e, caso a porta não abra, então, o fluxo retornará para a etapa de girar chave no sentido anti-horário, repetindo os passos abaixo deste. Caso a porta se abra, então o fluxo será finalizado. Uma pessoa que não tenha elaborado este fluxograma, ao realizar a leitura deste, deverá ter o mesmo entendimento dos passos e fluxos condicionais, o que caracteriza a propriedade de legibilidade do algoritmo. A partir de um fluxograma, deverá ser possível implementar sua lógica em qualquer linguagem de programação desejada. VÍDEO RESUMO Olá, estudante! Neste vídeo você aprenderá os principais conceitos e aplicações de um algoritmo, a importância da sequência lógica de passos para construção de um algoritmo, suas principais propriedades e a importância de cada propriedade. Você também irá aprender a importância de um fluxograma para a construção de um algoritmo e como a construção destes fluxogramas poderá ser utilizada para representar um algoritmo. Saiba mais Com a ferramenta gratuita diagrams.net (draw.io), é possível criar fluxogramas de uma forma simples, sem a necessidade de criar contas ou realizar login. A ferramenta gratuita Portugol Webstudio é voltada para o teste da lógica de programação, em linguagem natural, para iniciantes no aprendizado de algoritmos. Você poderá ver um exemplo clicando no link “Abrir Exemplo” e, ao clicar em “Novo Arquivo”, poderá criar a sua própria lógica. Inicie a partir do exemplo Entrada e Saída à Olá, mundo. É o mais simples e o que você poderá reproduzir de forma mais fácil. A partir daí, vá seguindo com os demais exemplos, sempre tentando aglutinar os exemplos aprendidos em um mesmo arquivo. Aula 2 EXECUÇÃO SEQUENCIAL E ESTRUTURAS DE DECISÃO Nesta aula, você aprenderá a estrutura básica necessária para elaboração de um programa de computador. INTRODUÇÃO Olá, estudante! Nesta aula, você aprenderá a estrutura básica necessária para elaboração de um programa de computador, quais são as estruturas sequenciais que podem ser utilizadas e quais elementos podem ser utilizados como formas de decisão https://dgadelha.github.io/Portugol-Webstudio/ https://dgadelha.github.io/Portugol-Webstudio/ https://app.diagrams.net/ no seu código, que irão permitir que o fluxo principal seja alternado para outro fluxo, conforme o teste de uma condição específica (que poderá dar verdadeiro ou falso como resultado). Ao final desta aula, você será capaz de criar um código simples, contendo estruturas sequenciais e de decisão. Lembre-se que você é responsável pelo seu aprendizado, então, não se limite apenas ao visto em aula, mas busque enriquecer seus conhecimentos por meio de outras fontes confiáveis. Bons estudos! ESTRUTURAS SEQUENCIAIS E CONDICIONAIS DE UM ALGORITMO Um algoritmo, para que possa ser legível e interpretado por um computador ou outra pessoa, precisa seguir uma estrutura básica, mantendo sua organização lógica e seguindo um fluxo principal, que irá culminar no resultado (objetivo final) desejado. Então, é preciso que as estruturas sequenciais, como a declaração de variáveis (endereços de memória que irão receber valores que variam ao longo do tempo) e declaração de constantes (informações que são definidas uma única vez na lógica, não sofrendo alterações ao longo do tempo) precisam estar organizadas logo no início do seu algoritmo. É possível definir valores para as variáveis declaradas, por meio do processo de atribuição, que pode ser proveniente da execução de uma operação matemática ou um número já definido. Uma característica de uma variável é a sua tipificação, ou seja, ela irá armazenar valores de um mesmo tipo de dados, que pode ser inteiro, real (ponto flutuante), caractere (que armazena texto, podendo ser um ou mais caracteres) e lógico (também conhecido como booleano, por armazenar os valores verdadeiro ou falso). Então, se uma variável é declarada como inteiro, ela não poderá armazenar números com pontos flutuantes ou informações textuais, pois irá contra a sua tipificação. Figura 1 | Fluxo para declaração de variáveis Fonte: adaptada de Forbellone (1995). A Figura 1 apresenta a forma como uma variável deve ser declarada. Primeiro, você deverá definir qual será o tipo de dado (ou tipo primitivo) que ela irá armazenar, seguindo-se do caractere “:” e do nome (identificador) que irá representar a sua variável. Para finalizar a sua declaração, você deverá utilizar o caractere “;”, indicando a finalização do comando. Um exemplo simples de declaração de variáveis. caractere : nomePaciente; inteiro : idade; real : valorConsulta; logico : ehPrimeiraConsulta; O exemplo mostra algumas variáveis sendo declaradas com seus respectivos tipos primários associados. Então, temos uma variávelque irá armazenar texto, com identificador nomePaciente, uma variável que irá armazenar números inteiros, com identificador idade, uma variável que irá armazenar números com ponto flutuante, com identificador valorConsulta e uma variável que irá armazenar um valor lógico (verdadeiro ou falso), com identificador ehPrimeiraConsulta. Com estas variáveis declaradas, você poderá solicitar informações (entrada de dados) ao usuário que executará sua aplicação ou armazenar resultado de operações matemáticas (cálculos utilizando números simples ou outras variáveis). Estas operações irão seguir uma sequência lógica, que irá representar os passos do seu algoritmo. A seguir veja um exemplo de um algoritmo contendo uma estrutura sequencial simples para ler e escrever um número informado pelo usuário. 1 inteiro : numero; 2 leia (numero); 3 escreva "o número digitado foi: " + numero; Observe que, as operações acontecem de forma sequencial, ou seja, primeiro (linha 1) é declarada a variável que irá armazenar o valor informado pelo usuário, que será numérico. Em seguida, na linha 2, você irá solicitar ao usuário que digite um valor e, na linha 3, o valor digitado será concatenado (símbolo de +) ao texto entre aspas duplas, apresentando qual foi o valor digitado. É possível, além de realizar operações simples de atribuição, também acrescentar comandos condicionais, que irão realizar uma avaliação lógica de uma condição e, a depender do resultado verdadeiro ou falso, alterar o fluxo principal para alternativos. O comando condicional mais simples para testar uma condição é o se, que pode ser estruturado conforme exemplo a seguir. Se <condição_a_ser_testada> Então Lógica, caso verdadeira a condição Senão Lógica, caso falsa a condição O fluxograma que representa uma condicional simples se deve ser elaborado conforme apresentado na Figura 2. Figura 2 | Fluxograma para uma estrutura de decisão simples Fonte: elaborada pela autora. A Figura 2 apresenta o fluxo para uma condicional simples se. A partir do teste de uma condição, caso a resposta seja verdadeira, então uma sequência específica de comandos deverá ser executada. Caso o resultado lógico do teste seja falso, então um outro conjunto de comandos poderá ser executado. Após o término de execução da estrutura condicional, o algoritmo irá retomar seu fluxo principal de passos até a sua conclusão. Iremos apresentar um exemplo prático em momento posterior nesta aula. Também é possível fazermos uma condição mais complexa, que envolva diferentes opções de resultado, conhecida como escolha. Um comando do tipo escolha irá avaliar o valor de uma variável simples declarada conforme uma lista de diferentes opções. A lógica do seu algoritmo, então, poderá ser alterada para a opção que o valor for igual ao valor contido na variável. A seguir veja a estrutura condicional complexa escolha. Escolha <variável>: caso <valor_variável1>: <sua lógica> caso <valor_variável2>: <sua lógica> caso <valor_variável3>: <sua lógica> caso contrário: <sua lógica> Com a estrutura condicional complexa escolha, cujo formato de declaração está apresentado, você poderá testar o valor de uma variável dentre um conjunto de valores, construindo uma lógica diferente para cada possibilidade de valor. Caso nenhuma das possibilidades listadas seja atendida, o fluxo irá seguir a lógica do caso contrário. O fluxograma que representa uma condicional complexa escolha segue o modelo apresentado na Figura 3. Figura 3 | Fluxograma para a estrutura condicional complexa escolha Fonte: elaborada pela autora. A Figura 3 apresenta como deverá ficar um diagrama de fluxo para uma condicional do tipo escolha. A escolha se dará a partir do valor que uma variável poderá assumir, sendo executado o bloco de instruções que irá corresponder ao valor já conhecido e que a variável esteja assumindo no momento do teste. Caso nenhum dos valores possíveis seja igual ao valor atual da variável testada, então a cláusula caso contrário terá suas instruções executadas (comportamento padrão). COMO E QUANDO UTILIZAR CADA TIPO DE ESTRUTURA EM UM ALGORITMO Vamos iniciar com um exemplo de algoritmo simples, para que você possa entender em qual momento poderá utilizar cada tipo de estrutura apresentada anteriormente. Caso você precise construir uma lógica para testar se a idade informada pelo usuário é menor ou maior que 60 anos, você irá utilizar uma estrutura condicional simples da seguinte forma: • Caso a idade informada seja menor que 60 anos, então você deverá apresentar a mensagem “Idade menor que 60”; • Caso a idade informada seja maior ou igual a 60, a mensagem apresentada deverá ser “Idade igual ou superior a 60”. Para transcrever a lógica acima apresentada para um algoritmo, você deverá utilizar uma estrutura condicional se – senão simples, como mostrado a seguir. 1 se (idade < 60) então 2 escreva "Idade menor que 60."; 3 senão 4 escreva "Idade maior ou igual a 60"; Porém, no exemplo apresentado, não é possível saber se a idade informada é igual a 60 ou maior, caso entre na condição senão. Então, vamos alterar a lógica para apresentar uma mensagem personalizada para cada faixa etária, da seguinte forma: • Caso a idade do usuário esteja entre 16 e 18 anos, você irá apresentar a mensagem “Olá, adolescente!”; • Caso a idade do usuário esteja entre 19 e 59 anos, você irá apresentar a mensagem “Olá, adulto!”; • Caso a idade do usuário esteja acima de 60 anos, você irá apresentar a mensagem “Olá, idoso!”; • Caso a idade não do usuário for abaixo de 16 anos, a mensagem deverá ser “Não permitido uso por pessoas com idade inferior a 16 anos.”. Existem formas diferentes de construir esta lógica. Caso você tenha listado os passos do algoritmo utilizando o operador condicional simples se, você deverá realizar um teste para cada condição, ou seja, um para cada faixa etária que se deseja verificar a idade que o usuário informou. Isso irá encadear vários comandos condicionais se, para a resolução do algoritmo proposto. 1 se (idade >= 16 e idade <=19) então 2 escreva “Olá, adolescente!”; 3 senão se (idade >=20 e idade <=59) então 4 escreva “Olá, adulto!”; 5 senão se (idade >= 60) então 6 escreva “Olá, idoso!”; 7 senão 8 escreva “Não permitido uso por pessoas com idade inferior a 16 anos.”; Perceba, conforme o apresentado, que o teste de cada se irá retornar um valor lógico verdadeiro ou falso. Além disso, a idade informada pelo usuário, antes que os testes sejam feitos, deverá ser lida pela sua lógica, caracterizando então a necessidade de armazenamento temporário desta informação em uma variável do tipo inteiro. Porém, estamos considerando que o usuário já irá informar a idade dele, não a data de nascimento para que o cálculo da idade seja feito, a partir do ano atual. Então, seguindo esta linha de raciocínio, você deverá listar os passos iniciais do seu algoritmo como: 1. Solicitar ao usuário que informe sua idade; 2. Armazenar a idade informada em uma variável para testes; 3. Testar a idade informada para cada faixa etária desejada. O comando condicional complexo escolha serve para que você possa simplificar a sua lógica, em caso de muitas condicionais simples se aninhadas. Trocando o tipo de estrutura por uma escolha, você poderá testar, em uma única condição, todas as opções que desejar como possiblidades, possibilitando, ainda, a definição de uma mensagem padrão, caso nenhuma das opções sejam atendidas. Uma diferença, porém, entre os comandos condicionais simples se e complexo escolha, é o tipo de teste que deve ser feito para que o fluxo principal possa ser alternado. Enquanto o se poderá ter mais de uma condição em seu teste, como o exemplo se (idade > 18) e (nome = ‘João’ ou nome = ‘Maria’) então, o condicional escolha irá selecionar, dentre uma lista de valores, os que podem ser assumidos por uma determinada variável, sem, efetivamente, testar uma ou mais condições. Um exemplo de usoda estrutura condicional escolha pode ser visto a partir da alteração do algoritmo apresentado a seguir. 1 escreva "Digite sua faixa etária: 1 - Adolescente; 2 - Adulto; 3 - Idoso"; 2 leia (faixa_etaria); 3 4 escolha(faixa_etaria) 5 caso 1 6 escreva “Olá, adolescente!”; 7 caso 2 8 escreva “Olá, adulto!”; 9 caso 3 10 escreva “Olá, idoso!”; 11 caso contrario: 12 escreva “Não é uma opção válida.”; No exemplo, fizemos um pequeno ajuste solicitando que o usuário informe números em uma faixa já esperada (1, 2 ou 3), indicando sua faixa etária. Qualquer outro número informado será considerado opção inválida. UTILIZANDO ESTRUTURAS SEQUENCIAIS NA CRIAÇÃO DE UM ALGORITMO Para que você ponha em prática todo o conteúdo estudado nesta aula, iremos iniciar com um exemplo de um algoritmo básico, contendo uma estrutura condicional simples se. O exemplo inicial consiste na criação de um algoritmo para o cálculo de um desconto de 10% em cima de um valor inteiro positivo informado pelo usuário, apresentando, como resultado, o valor descontando (que irá representar os 10%). Se o valor descontado for igual ou superior a 20, então apresente a mensagem “Valor inicial acima de 200”. Caso o valor descontado seja inferior a 20, então apresente a mensagem “Valor inicial entre 0 e 199”. 1 Ler valor 2 Calcular desconto de 10% em cima do valor lido 3 Escrever valor do desconto de 10% calculado 4 Se valor do desconto for igual ou superior a 20 5 Apresentar mensagem “Valor inicial acima de 200” 6 Se valor do desconto for inferior a 20 7 Apresentar mensagem “Valor inicial entre 0 e 199” Conforme os passos apresentados para o algoritmo proposto, teremos, como primeira ação, que solicitar um valor de entrada ao usuário. Este valor, no entanto, deverá ser armazenado de forma temporária, até que uma nova solicitação seja feita. Também deverá armazenar o resultado do valor do desconto de 10% calculado, para que possa ser apresentada a mensagem coerente com o resultado, após a execução do teste condicional. 1 inteiro : valor; 2 inteiro : resultadoDesconto; 3 4 leia(valor); 5 resultadoDesconto = valor * 0,10; 6 7 se (resultadoDesconto >= 20) então 8 escreva(“Valor inicial acima de 200”); 9 10 se (resultadoDesconto < 20) então 11 escreva(“Valor inicial entre 0 e 199”); Vimos um algoritmo em pseudocódigo. Note que, nas linhas 1 e 2, as variáveis que serão utilizadas no código estão sendo declaradas, sendo elas a variável valor, que será informada pelo usuário, e a variável resultadoDesconto, que armazenará o valor do desconto de 10% sobre o valor informado. A linha 5 realiza uma operação de atribuição do cálculo dos 10% sobre a variável valor à variável resultadoDesconto. As linhas 7 e 10 apresentam o operador condicional simples se sendo utilizado para testar o valor do resultado obtido com o cálculo dos 10%. O teste deverá sempre retornar um verdadeiro ou falso, sendo que, no exemplo apresentado, apenas o resultado verdadeiro irá apresentar a mensagem contida na ação escreva em cada teste. Note que, neste exemplo, podemos aperfeiçoar nossa lógica fazendo uma pequena modificação nas linhas 7 e 10. Você poderá utilizar a condição senão para o condicional se da linha 7, não sendo necessário fazer um novo teste se, como apresentado na linha 10. Então, veja o exemplo de alteração da lógica para uso do condicional senão. 1 inteiro : valor; 2 inteiro : resultadoDesconto; 3 4 leia(valor); 5 resultadoDesconto = valor * 0,10; 6 7 se (resultadoDesconto >= 20) então 8 escreva(“Valor inicial acima de 200”); 9 senão 10 escreva(“Valor inicial entre 0 e 199”); A troca do condicional se, apresentado pelo condicional senão, apresentado na linha 9 só é possível pois não existem outras opções, para o algoritmo apresentado, de valores que a variável resultadoDesconto poderá assumir. Para cada condicional se, você poderá utilizar um senão, que irá ser executado caso o teste no se dê negativo. Quando se utiliza o senão, qualquer outro valor que a variável resultadoDesconto assuma, inclusive menor que zero, irá apresentar a mensagem “Valor inicial entre 0 e 199”, o que não está de acordo com o nosso requisito inicial. Então, é possível que um teste, ao dar negativo, possa efetuar um novo teste, em sua cláusula senão, conforme o exemplo de alteração do algoritmo para inclusão de se aninhado. 7 se (resultadoDesconto >= 20) então 8 escreva(“Valor inicial acima de 200”); 9 senão se (resultadoDesconto > 0) então 10 escreva(“Valor inicial entre 0 e 199”); 11 senão 12 escreva(“Valor inicial menor que 0”); Na linha 9 do novo exemplo, em comparação com a linha 9 do exemplo anterior, foi alterada para realizar um novo teste condicional se, em cima da variável resultadoDesconto, para saber se seu valor é maior que zero (atendendo, portanto, ao requisito de número inteiro positivo). Caso não seja um inteiro positivo, o fluxo alternará para a linha 11, apresentando a mensagem de “Valor inicial menor que 0”. VÍDEO RESUMO Olá, estudante! Neste vídeo, você irá aprender como um algoritmo deve ser estruturado, sendo composto por elementos sequenciais e condicionais. Irá aprender, também, um exemplo prático da estrutura condicional complexa escolha. Seu código, ao final do vídeo, poderá ser elaborado de modo a realizar tomada de decisões simples e complexa e alterar o fluxo principal para fluxos alternativos, dependendo da resposta a cada decisão. Saiba mais Por meio do projeto Portugol, escolhendo a opção “Abrir Exemplo” à Algoritmos sequenciais, você irá encontrar exemplos práticos para a definição de variáveis (exemplo “Troca Variáveis”), além da utilização de condicionais simples (exemplo “Maioridade penal”). Ao escolher o menu “Desvios condicionais”, ainda nos exemplos disponíveis, é possível ver um exemplo de uso do condicional complexo escolha em “Escolha – Caso”, além dos demais exemplos, que apresentam variações do uso do condicional se. Aula 3 ESTRUTURAS DE REPETIÇÃO Nesta aula, você aprenderá os conceitos e a utilização das principais estruturas de repetição de trechos de código em um algoritmo. INTRODUÇÃO Olá, estudante! Nesta aula, você aprenderá os conceitos e a utilização das principais estruturas de repetição de trechos de código em um algoritmo. Irá aprender em quais situações deverá aplicar cada uma das estruturas apresentadas, o que são condições de parada e como elaborá-las para cada tipo de laço de repetição. Também serão apresentados os principais símbolos para representação dos laços de repetição em fluxogramas. Desta forma, os diagramas de fluxo que você irá criar serão mais completos, podendo representar lógicas mais complexas. Lembre-se que você é responsável pelo seu aprendizado, então, não se limite apenas ao visto em aula, mas busque enriquecer seus conhecimentos por meio de outras fontes confiáveis. Bons estudos! https://dgadelha.github.io/Portugol-Webstudio/ O QUE SÃO ESTRUTURAS DE REPETIÇÃO E COMO UTILIZÁ-LAS Em sua lógica para a resolução de uma determinada tarefa do dia a dia, você poderá precisar que um trecho desta tarefa se repita por uma quantidade limitada de vezes (até que uma condição de parada seja satisfeita). Um bom exemplo é quando implementamos um algoritmo para subir uma escada. Como você não sabe, logo no começo do processo, quantos degraus serão necessários subir para que se chegue ao topo da escada, seu algoritmo deverá fazer uma sequência de passos, subindo cada degrau individualmente, até que não existam mais degraus a subir e, consequentemente, se tenha chegado ao topo da escada (objetivo final). A ação de subir um degrau e realizar um teste (se chegou ou não ao topo) é listada uma única vez na sequência de passos lógica do seu algoritmo, porém, esta ação se repetirá até que uma condição de parada seja satisfeita (que é chegar ao topo da escada). Existem diferentes formas de implementar uma estrutura
Compartilhar