Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Prof. Sandro de Araujo Lógica de Programação e Algoritmos Aula 1 Conversa Inicial A aula apresenta-se com a seguinte estrutura de conteúdo: 1. Introdução à lógica 2. Introdução aos algoritmos 3. Formas de representação de algoritmos 4. Construção de algoritmos O objetivo da aula é introduzir os principais conceitos e temas das abordagens sobre lógica de programação e algoritmos para a resolução de diferentes problemas, bem como entender os tipos de algoritmos a serem utilizados nessa disciplina Introdução à lógica Antes de começarmos nossos estudos sobre lógica de programação faremos uma reflexão sobre o significado da palavra lógica: Afinal, o que é lógica? 2 Arte de pensar Rafael Ramirez Lee/shutterstock Colocar em ordem os pensamentos A lógica baseia-se em argumentos compostos por premissas e conclusões. Exemplo: A seguir temos em p e q as premissas e em r a conclusão: a. p: Sei que a camisa está no guarda-roupas q: Sei que o guarda-roupas está fechado r: Logo, concluo que tenho de abrir o guarda-roupas para pegar a camisa Embora o uso do raciocínio lógico pareça simples, é uma tarefa bastante complexa, que exige muita prática Faça uma reflexão e análise de todos os passos envolvidos na troca de um pneu. Percebeu que essa tarefa não se resume a tirar um pneu e colocar outro? Se detalharmos um pouquinho os passos para a troca do pneu, teremos algo como: Passo 1 – O estepe está cheio o suficiente? Passo 9 – Parafusar todos os parafusos Passo 2 – Se o estepe estiver cheio Passo 10 – Abaixar o macaco Passo 3 – Pegar o macaco no porta-malas Passo 11 – Guardar o macaco no porta-malas Passo 4 – Posicionar o macaco no lugar adequado Passo 12 – Guardar o pneu furado no porta-malas Passo 5 – Suspender o carro Passo 13 – Fechar o porta-malas Passo 6 – Retirar todos os parafusos Passo 14 – Entrar no carro Passo 7 – Retirar o pneu Passo 15 – Ligar o carro Passo 8 – Colocar o estepe Passo 16 – Dirigir até encontrar uma borracharia 3 Introdução aos algoritmos Algoritmo é uma sequência lógica de passos que levam a um determinado objetivo Sabemos o que é e como construir algoritmos Se não fosse verdade, ninguém decidiria qual o melhor caminho para chegar a um lugar Um fator importante é que às vezes um problema pode ser resolvido de diversas maneiras, porém, gerando a mesma resposta/resultado, ou seja, podem existir vários algoritmos para solucionar o mesmo problema IR À ESCOLA Ônibus (mais barato) Caminhando (mais saudável) Carro (mais confortável) INÍCIO INÍCIO INÍCIO 1. Caminhar até o ponto de ônibus 1. Colocar um calçado adequado para caminhada 1. Entrar no carro 2. Esperar o ônibus 2. Mapear os trajetos até a escola 2. Mapear os trajetos até a escola 3. Entrar no ônibus 3. Escolher o trajeto 3. Escolher o trajeto 4. Descer no ponto mais próximo da escola 4. Caminhar até a escola 4. Dirigir até a escola 5. Caminhar até a escola 5. Chegar à escola 5. Sair do carro 6. Chegar à escola 6. Chegar à escola FIM FIM FIM Formas de representação de algoritmos Diagrama Nassi-Shneiderman 4 Fluxograma Início 1. Acionar o interruptor 2. Se a lâmpada não acender: 2.1. Pegue uma escada (...) Pseudocódigo (...) 2.2. Coloque a escada embaixo do soquete 2.3. Busque uma lâmpada nova 2.4. Suba na escada 2.5. Retire a lâmpada queimada 2.6. Coloque a lâmpada nova Fim Pseudocódigo Construção de algoritmos Conforme conceituado anteriormente, um algoritmo é uma sequência finita de passos que levam à execução de uma tarefa Podemos pensar em algoritmo como uma receita de uma pizza marguerita. Essa sequência finita de instruções em forma de receita dá cabo de uma meta específica, que é o preparo de uma deliciosa pizza marguerita 1. Entender o problema a ser resolvido, destacar os pontos mais importantes e os objetivos que o compõem 2. Definir os dados de entrada, ou seja, quais dados serão fornecidos e quais objetivos fazem parte do cenário do problema (...) Para construir um algoritmo é preciso seguir os seguintes passos: 5 (...) 3. Definir o processamento, ou seja, quais operações serão executadas e quais as restrições para essas operações; o processamento deve transformar os dados de entrada em dados de saída e também verificar quais objetos são responsáveis pelas atividades 4. Definir os dados de saída, ou seja, quais dados gerados depois do processo (...) Para construir um algoritmo é preciso seguir os seguintes passos: (...) 5. Construir o algoritmo utilizando um dos três tipos apresentados anteriormente (diagrama N-S, fluxograma ou pseudocódigo) 6. Testar o algoritmo realizando simulações 7. Corrigir possíveis erros e voltar ao item 5 Para construir um algoritmo é preciso seguir os seguintes passos: algoritmo “nome” /* Tem como objetivo identificar o algoritmo; deve-se utilizar um nome o mais significativo possível, para facilitar a identificação */ var /* Seção de declarações – Neste ponto são informadas quais variáveis e seus respectivos tipos que serão utilizados no algoritmo */ (...) Estrutura de um algoritmo em pseudocódigo (...) inicio /* Seção de comandos – Aqui será escrita a sequência de comandos que deve ser executada para solucionar o problema em questão */ fimalgoritmo // Marca o final do algoritmo Estrutura de um algoritmo em pseudocódigo Observa-se agora um pseudocódigo que recebeu um valor inteiro, fornecido pelo usuário, e o retornou no monitor algoritmo “exemplo 1” var x: inteiro inicio leia (x) escreva (x) fimalgoritmo Nesse exemplo, o algoritmo que recebe um valor inteiro acresce duas unidades a este, e exibe o resultado desta manipulação algoritmo “exemplo 2” var n: inteiro inicio escreva (“Digite um número inteiro: ”) leia (n) n <- n+2 escreval (“Resultado (número + 2): ”, n) fimalgoritmo 6 Nesse exemplo o algoritmo que recebe um valor inteiro, acresce duas unidades a este, e exibe o resultado desta manipulação algoritmo “exemplo 3” var n1, n2, res: inteiro inicio escreva (“Digite o multiplicando inteiro: ”) leia (n1) escreva (“Digite o multiplicador inteiro: ”) leia (n2) res <- n1 * n2 escreva (“Resultado da multiplicação: ”, res) fimalgoritmo 1 Prof. Sandro de Araújo Lógica de Programação de Algoritmos Aula 2 Conversa Inicial Conceitos básicos de algoritmos – dados, tipos de dados, variáveis, constantes, operadores Esta aula apresenta a seguinte estrutura de conteúdo: 1. Definição de dados 2. Tipos de dados 3. Variáveis 4. Constantes 5. Operadores O objetivo desta aula é apresentar os principais conceitos de dados, tipos de dados, variáveis, constantes e operadores de atribuição, aritméticos, relacionais e lógicos Definição de dados 2 O dado é uma sequência de símbolos quantificados ou quantificáveis São valores fornecidos pelo usuário do programa, podendo ser obtidos com base em processamentos, arquivos, banco de dados ou outros programas Para garantir a integridade do resultado obtido com processamento, os dados devem ser classificados de acordo com o tipo do valor a ser armazenado na variável, evitando problemas ocasionados pelo fornecimento de valores inadequados à operação realizada Número inteiro com inteiro Número flutuante com flutuante Tipos de dados Ao desenvolver um algoritmo, é necessário que se tenha conhecimento prévio do tipo de dado que será utilizado para resolver o problema proposto. Então, escolhe-se o tipo de dado adequado para a variável que representará esse valor Alguns tipos são formados por números inteiros e reaisque suportam operações matemáticas como adição, subtração, multiplicação, entre outros. Esses tipos são particularmente importantes, visto que o computador trabalha naturalmente com números Também podemos considerar as letras como um tipo de dado em que poderíamos definir operações como escrever, ler, concatenar, entre outros 3 A maioria das linguagens de programação tipifica os dados em um grupo chamado de tipos primitivos: Numéricos Lógicos Literais ou caracteres Tipos primitivos numéricos: Dividem-se em dois grupos: inteiros e reais Os inteiros: Positivos e negativos Não apresentam parte fracionária Exemplo: -357, -23, 0, 98, 237 Tipos primitivos numéricos: Dividem-se em dois grupos: inteiros e reais Os reais: Positivos e negativos Apresentam parte fracionária Exemplo: - 23.45, -5.6, 0.0, 32.55, 222.02 Tipos primitivo lógicos: São também chamados de booleanos e podem assumir os valores verdadeiro ou falso – o número 0 para falso e 1 para verdadeiro Tipos primitivos literais ou caracteres: São dados formados por um único caractere ou por uma cadeia de caracteres. Esses caracteres podem ser: O alfabeto, com maiúsculos e minúsculos Os números, que não poderão ser usados para cálculos, pois não são valores Os caracteres especiais, como @,#,$,?, + Variáveis 4 Uma variável pode ser entendida como uma Posição identificada na memória: Que contém dados Que pode ser modificada durante a execução do programa Pode assumir qualquer valor de um conjunto de valores Variável A altura de uma pessoa A cotação do bitcoin A velocidade de um carro Nesses exemplos, os valores dos dados sofrem alterações ou são dependentes da execução em certo instante ou circunstância Exemplos de variáveis Toda variável deve receber um nome ou identificador e estar de acordo com algumas regras: Não utilizar espaços entre as letras Por exemplo, em vez de nome do cliente, o correto seria nome_do_cliente ou nomeDoCliente O caractere "underline", representado por "_", pode ser utilizado para substituir o espaço entre as letras Identificação das variáveis Não iniciar o nome da variável com algarismos (números) Por exemplo: não usar 2valor; o correto seria valor2 Identificação das variáveis Não utilizar palavras reservadas, isto é, palavras que são utilizadas nos algoritmos para representar ações específicas. Por exemplo: se (if na linguagem C) é uma palavra usada para representar uma condição ou teste lógico Identificação das variáveis var: palavra para representar a área de declaração de variáveis (em pseudocódigo) Cada linguagem de programação tem sua sintaxe para declaração de variável Identificação das variáveis 5 Exemplo: na linguagem de programação C devemos listar primeiro o tipo, depois o nome da variável Identificação das variáveis Sintaxe em pseudocódigo Sintaxe em linguagem C <indicador de variáveis> var <nome_da_variável> : <tipo> matricula_aluno : inteiro <tipo> <nome_da_variável>; int matricula_do_aluno; Onde: var Indica onde as variáveis serão declaradas matricula_do_aluno é o nome da variável inteiro é o tipo da variável Onde: int é o tipo da variável (inteiro) matricula_do_aluno é o nome da variável Não utilizar caracteres especiais, como acentos, símbolos (?, /, :, @, # etc.), ç, entre outros Exemplo: m@tricula, #nome_aluno, $erviço, numeração, entre outros Identificação das variáveis Não utilizar nomes iguais para representar variáveis diferentes Utilizar duas variáveis com o mesmo nome em um mesmo escopo não é possível Identificação das variáveis Ser conciso e utilizar nomes coerentes Vou criar uma variável para guardar a matrícula do aluno e denominei como: altd3241 : interio altd3241 não faz sentido para quem vai ler o código Já matricula_do_aluno faz todo o sentido para quem o lê Identificação das variáveis Constantes 6 Uma constante segue as mesmas regras de variável, mas com a certeza de que o dado ou valor não será alterado durante a execução do programa e de que será sempre o mesmo, sendo obrigatória a atribuição de um valor no momento da declaração Constante Um exemplo de uma constante matemática é o número PI, que é um valor fixo de aproximadamente 3,1415 , e que continuará assim até o final da execução Constante Operadores Os operadores são utilizados para representar expressões de cálculo, comparação, condição e atribuição. Para a construção de algoritmos temos os seguintes tipos de operadores: De atribuição Aritméticos Relacionais Lógicos Operadores Um dos operadores mais utilizados na programação é o operador de atribuição, representado no pseudocódigo pela seta ← nomeDaVariavel ← expressão Operadores de atribuição Exemplos: nomeDoCliente ← “Joãozinho da Silva” resultado ← a + 5 valor ← 3.5 Operadores de atribuição 7 Para a linguagem C, o sinal de atribuição é representado pelo “=”, nomeDaVariavel = expressão Exemplos: nomeDoCliente = “Joãozinho da Silva” resultado = a + 5 valor = 3.5 Operadores de atribuição Chamamos de operadores aritméticos o conjunto de símbolos que representa as operações básicas da matemática Operadores de atribuição OPERADOR NOTAÇÃO ALGORÍTMICA Incremento Utiliza-se uma expressão. Exemplo: a ← a + 1 Decremento Utiliza-se uma expressão. Exemplo: a ← a - 1 Adição + Subtração - Multiplicação * Divisão / Exponenciação ^ ou ** Exemplo: pot ← 2**3 ou 2^3, raiz ← 4**(½) ou raiz ← 4^(½) Módulo Mod Exemplo: resto ← a mod b Chamamos de operadores aritméticos o conjunto de símbolos que representa as operações básicas da matemática Operadores lógicos Operador Representação algorítmica Notação para C Descrição para linguagem C E .e. && Realiza a operação E, exemplo: (x >= 0 && x <= 8) OU .ou. || Realiza a operação OU, exemplo: (a == ‘G’ || b != 33) NÃO .não. ! Realiza a operação OU, exemplo: !(x == 11) Como resultado, dessas operações teremos como retorno: O valor UM (1), se a expressão relacional for verdadeira o valor ZERO (0), se a expressão relacional for falsa Operadores lógicos 8 Na tabela verdade é expresso o conjunto de possibilidades existentes para a combinação de variáveis ou expressões e operadores lógicos Operadores lógicos a b a .e. b (a && b) a .ou. b (a | | b) .não. a falso falso falso falso verdadeiro falso verdadeiro falso verdadeiro verdadeiro verdadeiro falso falso verdadeiro falso verdadeiro verdadeiro verdadeiro verdadeiro falso GUEDES, S. Lógica de programação algorítmica. São Paulo: Pearson, 2014. MEDINA, M.; FERTING, C. Algoritmos e programação: teoria e prática. São Paulo: Novatec, 2006. PUGA, S.; RISSETTI, G. Lógica de programação e estruturas de dados. São Paulo: Pearson, 2016. 1 Prof. Sandro de Araújo Lógica de Programação e Algoritmos Aula 3 Conversa Inicial O objetivo desta aula é conhecer os principais conceitos das estruturas: sequencial e de seleção, tanto em pseudocódigo como na linguagem de programação C Estudaremos como representar os algoritmos nas diferentes estruturas para resolver problemas computacionais A aula apresenta a seguinte estrutura de conteúdo: Estrutura sequencial Estrutura de seleção Estrutura de seleção simples ou se-então Estrutura de seleção composta ou se-então- senão 2 Estrutura de seleção encadeada ou se- então-senão-se-então-senão Estrutura de seleção de múltipla escolha ou escolha-caso Estrutura sequencial e estrutura de seleção É aquela que realiza um conjunto predeterminado de instruções de forma sequencial, de cima para baixo, na ordem em queforam declarados Estrutura sequencial Considere um algoritmo que irá somar dois números inteiros quaisquer Para esse exemplo, temos como entrada dois números inteiros (numero1 e numero2) e como saída um número inteiro (resultado) que recebe o resultado de numero1 + numero2 Exemplo de estrutura sequencial 3 Pseudocódigo 1.algoritmo “exemplo1” 2.var numero1, numero2, resultado: inteiro 3.inicio 4. leia (numero1) 5. leia (numero2) 6. resultado ← numero1 + numero2 7. escreval (“A soma dos dois números é: “, resultado) 8. fimalgoritmo Linguagem C 1. #include <stdio.h> 2. int main () 3. { 4. int numero1, numero1, resultado; 5. scanf("%d", &numero1); 6. scanf("%d", &numero2); 7. resultado = numero1 + numero2; 8. printf("A soma dos dois números é: %d\n", resultado); 9. system("pause"); 10. return(0); 11. } Uma estrutura de seleção permite a escolha de um grupo de ações (bloco) a ser executado quando determinadas condições representadas por expressões lógicas ou relacionais são ou não satisfeitas Estrutura de seleção Temos os seguintes tipos de seleção: Simples Composta Encadeada De múltipla escolha Estrutura de seleção simples ou se-então As estruturas de seleção simples são utilizadas para testar certa condição antes de executar determinada ação 4 Se a condição for atendida, um conjunto de instruções deverá ser executado. Se não for atendida, o fluxo da execução do algoritmo seguirá após o fim do bloco de decisão Pseudocódigo: sintaxe 1. Inicio 2. Se (<condição>) entao 3. <comandos> 4. Fimse 5. 6. Fimalgoritmo Linguagem C: sintaxe 1. if (<condição>) 2. { 3. <comandos> 4. } Considerar um algoritmo que vai pegar dois números inteiros. Comparar se o primeiro número é maior que o segundo e imprimir na tela uma mensagem informando o resultado da comparação Exemplo de estrutura de seleção simples Para esse exemplo temos como entrada dois números inteiros (a e b) e como saída uma mensagem de texto 5 Pseudocódigo 1.algoritmo “estruturaSimples” 2. 3.var a, b: inteiro 4.a ← 8 5.b ← 3 6. 7.inicio 8. Se (a > b) então 9. escreval("O número da variável a é maior que o número da variável b“) 10. Fimse 11. fimalgoritmo Linguagem C 1. ... 2.{ 3. int a = 8, b = 3; 4. if (a > b) 5. { 6. printf(" O nº da variável a é maior que o nº da variável b\n"); 7. } 8. system ("pause"); 9. return(0); 10. } Estrutura de seleção composta ou se-então-senão A estrutura de seleção composta prevê dois conjuntos de instruções. Após a avaliação da condição, um conjunto caso a resposta da condição resulte em verdadeiro e outro caso a condição resulte em falso Fonte: Adaptado de Guedes (2014) 6 Pseudocódigo: sintaxe 1. Inicio 2. Se <condição> entao 3. <Primeiro conjunto de Instruções> 4. Senao 5. <Segundo conjunto de Instruções> 6. Fimse 7. Fimalgoritmo Linguagem C: sintaxe 1. ... 2.if (<condição>) 3. { 4. < Primeiro conjunto de Instruções> 5. } 6.else 7. { 8. <Segundo conjunto de Instruções> 9. } 10. ... Considerar um algoritmo que vai pegar dois números inteiros, comparar se o primeiro número é diferente do segundo e imprimir na tela uma mensagem com o resultado dessa comparação Exemplo de estrutura de seleção composta Pseudocódigo 1. ... 2. var a, b: inteiro 3. inicio 4. escreval(“Digite um número inteiro“) 5. leia(a) 6. escreval(“Digite outro número inteiro“) 7. leia(b) 8. Se (a <> b) então 9. escreval(“Os números são diferentes“) 10. Senao 11. escreval(“Os números são iguais“) 12. Fimse 13.fimalgoritmo Linguagem C 1. #include <stdio.h> 12. } 2. int main() 13. else 3. { 14. { 4. int a, b; 15. printf("a é igual a b \n”); 5. printf("Digite um número inteiro \n"); 16. } 6. scanf("%d", &a); 17. system ("pause"); 7. printf("Digite outro número inteiro \n"); 18. return(0); 8. scanf("%d", &b); 19. } 9. if (a != b) 10. { 11. printf("a é diferente de b \n"); 7 Estrutura de seleção encadeada ou se-então-senão-se-então-senão Uma estrutura de seleção encadeada é formada pela combinação de estruturas de seleção simples e compostas, uma dentro da outra, não havendo limite para o número de combinações, podendo, em alguns casos, gerar um código bastante complexo Fonte: Puga e Rissetti (2016) Pseudocódigo: sintaxe 1.Inicio 2. Se (<condição1>) entao 3. Se (<condição2>) entao 4. <Primeiro conjunto de Instruções> 5. Senao 6. <Segundo conjunto de Instruções> 7. Fimse 8. Senao 9. <Terceiro conjunto de Instruções> 10. Fimse 11. Fimalgoritmo Linguagem C: sintaxe 1. ... 2. if (<condição1>){ 3. if (<condição2>){ 4. <Primeiro conjunto de Instruções> 5. } 6. else{ 7. <Segundo conjunto de Instruções> 8. } 9. } 10. else{ 11. <Terceiro conjunto de Instruções> 12. } 13. ... Considerar que o algoritmo vai pegar dois números inteiros e testar para ver se o primeiro número é igual ao segundo Exemplo de estrutura de seleção encadeada 8 Caso seja verdadeiro, ele vai imprimir uma mensagem na tela do usuário. A segunda condição só entrará em ação caso o resultado da primeira condição seja falso Pseudocódigo 1. algoritmo “estruturaEncadeada” 2. var numero1, numero2: inteiro 3. inicio 4. escreval("Digite o primeiro número: ") 5. leia(numero1) 6. escreval("Digite o segundo número: ") 7. leia(numero2) 8. se (numero1 = numero2) então 9. escreval("Os números são iguais!") 10. senao 11. se (numero1 > numero2) entao 12. escreval("O maior valor é =", numero1) 13. senao 14. escreval("O maior valor é =", numero1) 15. fimse 16. fimse 17. fimalgoritmo Linguagem C 1. ... 2. int numero1, numero2; 3. printf("Digite o primeiro número: "); 4. scanf("%d", & numero1); 5. printf("Digite o segundo número: "); 6. scanf("%d", & numero2); 7. if (numero1== numero2) 8. printf("Os números são iguais!"); 9. else 10. if (numero1> numero2) 11. printf("O maior valor é = %d", numero1); 12. else 13. printf("O maior valor é = %d", numero2); 14. ... Estrutura de seleção de múltipla escolha ou escolha-caso Uma estrutura de seleção de múltipla escolha é uma solução bem-posta quanto se tem várias estruturas de decisão (se-então- senão) 9 A estrutura escolha-caso permite ir direto ao bloco de instruções desejado, submetendo-se ao valor de uma variável de verificação Fonte: Puga e Rissetti (2016) Pseudocódigo: sintaxe 1.escolha <expressão> 2. 3.caso <valor1> 4. <comandos> 5. caso <valor2> 6. <comandos> 7. outrocaso 8. <comandos> 9. 10. fimescolha Linguagem C: sintaxe 1. switch (<expressão>) 2. { 3. case <valor1> : 4. <comandos> 5. break; 6. case <valor2> : 7. <comandos> 8. break; 9. default : 10. <comandos> 11. } Considere um algoritmo que vai pegar um número e vai retornar o dia da semana equivalente ao número Exemplo de estrutura de seleção de múltipla escolha 10 Pseudocódigo 1.... 2. escreval("Digite um número de 1 a 7 ") 3. leia(numero1) Pseudocódigo 4. escolha numero1 5. caso "1" 6. escreval("O dia escolhido foi Domingo") 7. caso "2" 8. escreval("O dia escolhido foi Segunda-feira") 9. ... 10. caso "7" 11. escreval("O dia escolhido foi Sábado") 12. outrocaso 13. escreval("Não existe dia da semana para esse número") 14.... Linguagem C 1.... 2.{ 3. int opcao; 4. printf ("Digite um número de 1 a 7: "); 5. scanf("%d", &opcao); Linguagem C 1. switch (opcao) 2. { 3. case 1: 4. printf ("O dia escolhido foi Domingo\n"); 5. break; 6. 7. case 2: 8. printf ("O dia escolhido foi Segunda-feira\n"); 9. break; 10.... 11. case 7: 12. printf ("O dia escolhido foi Sábado\n"); 13. break; 14. default: 15. printf ("Não existe diada semana para esse número\n"); 16.... 11 1 Prof. Sandro de Araujo Estrutura de Repetição Aula 4 Conversa Inicial Estrutura de repetição Estrutura de repetição while (enquanto) Estrutura de repetição do-while (repita-até) Estrutura de repetição for (para) Estrutura de repetição aninhada Essa aula apresenta a seguinte estrutura de conteúdo: O objetivo desta aula é conhecer os principais conceitos e aplicações das estruturas de repetições, como: while (enquanto), do-while (repita-até) e for (para). Também é objetivo representá-los em fluxograma, pseudocódigo e linguagem C para resolver problemas computacionais Estrutura de repetição Também é conhecida como laços (loops) a repetição de um conjunto de ações uma vez, várias vezes ou nenhuma vez Depende de uma condição verdadeira ou falsa Condicionada a um controle ou condição de parada Estrutura de repetição 2 Inicialização – determina a condição inicial da repetição Condição – é a expressão booleana que avalia após cada leitura do corpo e determina se uma nova leitura deverá ser feita ou se a estrutura de repetição pode ser encerrada Quatro elementos fundamentais de uma estrutura de repetição Corpo – formado por todas as instruções que serão executadas repetidamente Iteração – é a repetição de um conjunto de instruções juntamente com a condição de terminação do laço Quatro elementos fundamentais de uma estrutura de repetição Exemplo - estrutura de repetição Fonte: Elaboração própria (2018). <INICIALIZAÇÃO DO CONTADOR> cont 0 <CONDIÇÃO> cont<10 <INCREMENTA O CONTADOR> cont cont+1 <INSTRUÇÕES> Não Sim INÍCIO DO LAÇO cont = 0 cont = 1 cont = 2 cont = 3 ... cont = 9 Terminou de contar! Como resultado do contador, teremos... Estrutura de repetição while (enquanto) Na estrutura de repetição while (enquanto), a execução de loop depende de uma condição que é verificada no início do laço Enquanto o resultado da condição for verdadeiro, o bloco de instruções é executado; caso contrário, ocorre o desvio para a primeira linha após esse bloco Estrutura de repetição while (enquanto) 3 Exemplo - estrutura de repetição while (enquanto) Fonte: Elaboração própria (2018). <INSTRUÇÕES> <CONDIÇÃO> SIM NÃO Pseudocódigo - Sintaxe 1. enquanto <EXPRESSÃO BOOLEANA> faca 2. <comandos> 3. Fimenquanto Linguagem C - Sintaxe 1. while (<condição>) 2. { 3. <comandos> 4. } Considere um algoritmo que vai imprimir na tela o número de vezes que foi executado o loop usando a estrutura de repetição while Exemplo - estrutura de repetição while (enquanto) Fonte: Elaboração própria (2018). INÍCIO cont 0 cont>10 cont cont+1 “Total de loops é”, cont FIM NÃO SIM Pseudocódigo 1. algoritmo "Exemplo1" 2. var 3. cont : inteiro 4. inicio 5. cont 0 6. enquanto cont < 10 faca 7. escreval (Total de loops é: ”, cont) 8. cont cont + 1 9. fimenquanto 10.fimalgoritmo Linguagem C 1. ... 2. { 3. int cont = 0; //declarando e inicializando a variável de controle 4. 5. while (cont < 10) // Testando a condição 6. { 7. printf(“Total de loops é: %d ", cont); //Instruções do laço 8. 9. cont++; //atualizando a variável de controle 10. } 4 Estrutura de repetição do-while (repita-até) É bastante similar ao laço while (enquanto) Utilizada em simulações em que se faz necessário executar o corpo antes do teste, para ter garantia de que o laço será executado uma vez Estrutura de repetição do-while (repita-até) Fonte: Elaboração própria (2018). <INSTRUÇÕES> <CONDIÇÃO> SIM NÃO Pseudocódigo - Sintaxe 1. repita 2. <INSTRUÇÕES 3. ate <EXPRESSÃO BOOLEANA> Linguagem C - Sintaxe 1. do{ 2. <comandos> 3. } while (<condição>); Considere um algoritmo que vai pegar dois números inteiros, comparar se o primeiro número é diferente do segundo e imprimir na tela uma mensagem com o resultado dessa comparação Exemplo - estrutura de repetição do-while (repita-até) Fonte: Elaboração própria (2018). “O valor de a:”, a a=10 a<=40 FIM SIM NÃO INÍCIO 5 Pseudocódigo 1. ... 2. var 3. a : inteiro 4. inicio 5. a <- 10 6. repita 7. escreval ("O valor de a: ", a) 8. a <- a+1 9. ate ( a <= 40 ) 10. fimalgoritmo Linguagem C 1. ... 2. int a = 10; 3. do { 4. printf("O valor de a: %d\n", a); 5. a = a + 1; //ou a++; 6. } while( a <= 40 ); 7. ... Estrutura de repetição for (para) A estrutura de repetição for (para) é uma estrutura que reúne no cabeçalho os elementos de inicialização, condição e iteração No for, o laço vai repetir se o resultado da condição for verdadeira Estrutura de repetição for (para) Fonte: Elaboração própria (2018). <INICIALIZAÇÃO DO CONTADOR> <CONDIÇÃO> <INCREMENTA CONTADOR> <INSTRUÇÕES> SIM NÃO Pseudocódigo - Sintaxe 1. para <variável> de <início> ate <fim><passo +1> faca 2. <instruções> 3. fimpara Linguagem C - Sintaxe for (inicialização ; teste; interação) { <instruções>; } 6 Considere um algoritmo que faz a contagem decrescente de 1 até 30 e imprime na tela o resultado Exemplo - estrutura de repetição for (para) Fonte: Elaboração própria (2018). cont>=1 cont=cont-1 cont=30 cont FIM SIM NÃO INÍCIO Pseudocódigo 1. ... 2. var 3. cont: inteiro 4. inicio 5. para cont de 30 ate 1 passo -1 faca 6. escreval (cont) 7. fimpara 8. fimalgoritmo Linguagem C 1. ... int cont; for (cont = 30; cont >= 1; cont--) { printf("%d\n", cont); } system("pause"); return 0; } Estrutura de repetição aninhada A linguagem C permite a utilização de um laço dentro de outro laço Quando um laço faz parte do corpo de outro laço, dizemos que o laço interno é um laço aninhado (Mizrahi, 2008) Estrutura de repetição aninhada 7 Sintaxe while 1. while (<condição>) 2. { 3. while (<condição>) 4. { 5. <comandos> 6. } 7. <comandos> 8. } Sintaxe do-while 1. do 2. { 3. <comandos> 4. do 5. { 6. <comandos> 7. } while (<condição>); 8. } while (<condição>); Sintaxe for 1. for (<valor inicial>; <condição>; <incremento>) 2. { 3. for (<valor inicial>; <condição>; <incremento>) 4. { 5. <instruções>; 6. } 7. <instruções>; 8. } Referências MIZRAHI V. V. Treinamento em Linguagem C. 2. ed. São Paulo: Makron Books, 2008. 1 Prof. Sandro de Araujo Lógica de Programação e Algoritmos Aula 5 Conversa Inicial Esta aula apresenta a seguinte estrutura de conteúdo: Vetor e matriz Declarar e inicializar vetores Declarar e inicializar matrizes Cadeia de caracteres Inicializar uma cadeia de caracteres O objetivo dessa aula é conhecer os principais conceitos e aplicações dos vetores, matrizes e cadeias de caracteres – e de que forma declará-los e inicializá-los – bem como representá-los em pseudocódigo e linguagem C para resolver problemas computacionais Vetor e matriz Variável composta homogênea unidimensional Conjunto de dados do mesmo tipo Possuem o mesmo identificador (nome) Acessados por um número inteiro chamado de índice Tipo_de_dado + Nome_do_Vetor + [Posições - Índices] Vetor ou array 2 Fonte: Puga e Rissetti, 2016. Índice: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Nome: temp 18 17 20 26 32 29 15 12 16 21 É um vetor de vetores Acessado também por índice Estrutura de dados com duas ou mais dimensões Estrutura composta por linhas e colunas Tipo_de_dado + Nome_da_Matriz + [Qtde Linhas] + [Qtde Colunas] Matriz COLUNAS LI N H A S 0,0 0,1 1,0 1,1 19 21 33 581 Índices Dados [0,0] [0,1] [1,0] [1,1] 19 21 33 581 Declarar e inicializar vetores A declaração de um vetor deveconter três informações: 1. Nome do vetor (identificador) 2. Número de posições (tamanho) 3. Tipo de dado que será armazenado 3 Pseudocódigo nomeDoVetor: vetor [início..final] de tipoDoVetor nota: vetor[1..4] de Inteiro Linguagem C tipoDoVetor nomeDoVetor [QuantidadeDeElementos] int nota [4] Sintaxe pseudocódigo e linguagem C Também é possível inicializar um vetor sem especificar a quantidade de elementos: Ou seja: Declarar e inicializar vetores int números[6] = {1,2,3,0,0,0} int números[ ] = {3,6,7}; números[0] = 3; números[1] = 6; números[2] = 7; int números[6] = {1,2,3}; Pseudocódigo ... var nota: vetor[1..4] de real inicio nota[1] <- 7.6 nota[2] <- 8.9 nota[3] <- 9 nota[4] <- 9.9 escreval ("Exibindo os Valores das Notas") escreval (" NOTA 1:", nota[1]) escreval (" NOTA 2:", nota[2]) escreval (" NOTA 3:", nota[3]) escreval (" NOTA 4:", nota[4]) fimalgoritmo ... { float nota[4] = {7.6, 8.9, 9, 9.9}; printf("Exibindo os Valores das Notas \n\n"); printf(" NOTA 1: %.1f\n", nota[0]); printf(" NOTA 2: %.1f\n", nota[1]); printf(" NOTA 3: %.1f\n", nota[2]); printf(" NOTA 4: %.1f\n", nota[3]); ... Linguagem C Declarar e inicializar matrizes A declaração de uma matriz deve conter quatro informações: 1. Nome da matriz (identificador) 2. Número de linhas (tamanho) 3. Número de colunas (tamanho) 4. Tipo de dado que será armazenado 4 Pseudocódigo nomeDaMatriz: vetor[início..final, inicio..final] de tipoDoVetor nota: vetor[1..4,1..4] de Inteiro Linguagem C tipoDaMatriz nomeDaMatriz [QtdeLinhas][QtdeColunas]; int nota [4][4]; Sintaxe pseudocódigo e linguagem C Para declarar uma matriz 2X4 e inicializá-la, devemos colocar cada linha entre chaves {}, e separar elas por vírgulas: Exemplo: int numeros[2][4] = { {11, 22, 35, 54 }, {5, 9, 16, 8 } }; Declarar e inicializar vetores 11 22 35 54 Duas linhas 5 9 16 8 Quatro colunas ... var tabela: vetor[1..3,1..2] de inteiro linha,coluna: inteiro (...) Pseudocódigo (...) inicio tabela[0,0] <- 1 tabela[0,1] <- 8 tabela[1,0] <- 3 tabela[1,1] <- 9 tabela[2,0] <- 6 tabela[2,1] <- 78955 escreval ("Imprimindo a matriz tabela:") escreval (" ") para linha de 0 até 2 faca para coluna de 0 até 1 faca escreval("tabela[",linha,"][",coluna,"]=",tab ela[linha,coluna]) fimpara fimpara escreval (" ") escreval ("********************************** ***") escreval (" ") escreval("O conteúdo da tabela[2][1] é: ",tabela[2,1]) fimalgoritmo 5 int main() { int tabela[3][2] = {{1,8},{3,9},{6,78955}}; int linha,coluna; Linguagem C (continuação) printf("Imprimindo a matriz tabela: \n\n"); for(linha=0;linha<3;linha++) { for(coluna=0;coluna<2;coluna++) { printf("tabela[%d][%d]=%d",linha,coluna,tabela [linha][coluna]); printf("\n"); } } printf("\n"); printf("*************************************"); printf("\n\n"); printf("O conteudo da tabela[2][1] e: %d\n\n",tabela[2][1]); system("pause"); return 0; } Linguagem C Pseudocódigo Linguagem C Cadeias de caracteres É uma variável usada para armazenar cadeia de caracteres com conteúdo que pode ser alterado ou substituído por outros elementos para formar uma nova cadeia de caracteres Cadeia de caracteres (string) 6 A linguagem C não possui um tipo de dado similar à string. Em vez disso, para armazenar uma cadeia de caracteres, utiliza vetores (matrizes unidimensionais) char NomeDaString[NúmeroDeElementos] char nome[8]; A palavra "UNINTER", na linguagem de programação C, é um array que contém oito [8] posições, conforme mostrado abaixo: char nome [8] = { ‘U’, ‘N’, ‘I’, ‘N’, ‘T’, ‘E’, ‘R’, '\0' }; Inicializar uma cadeia de caracteres Uma string pode ser inicializada automaticamente pelo programa ou pode receber um valor por meio do teclado Usam-se as duas formas para inicializar uma string em C: char nome [ ] = “UNINTER”; char nome [ ] = { ‘U’, ‘N’, ‘I’, ‘N’, ‘T’, ‘E’, ‘R’, '\0' }; Exemplo 1 char nome [ ] = “UNINTER”; char nome [ ] = { ‘U’, ‘N’, ‘I’, ‘N’, ‘T’, ‘E’, ‘R’, '\0’ }; Exemplo 2 char [ ] = “12345”; char [ ] = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘\0’}; Não é possível fazer cálculos matemáticos com números do tipo caractere algoritmo "exemploString" var nome1 : caractere nome2 : caractere nome3 : caractere asteriscos : caractere Pseudocódigo 7 (...) inicio nome1 <- "Centro Universitário" nome2 <- "Internacional" nome3 <- "UNINTER" asteriscos <- "********************************************" escreval(asteriscos) escreval(" ",nome1," ",nome2," ",nome3) escreval(asteriscos) fimalgoritmo escreval(asteriscos) escreval(" ",nome1," ",nome2," ",nome3) escreval(asteriscos) fimalgoritmo #include<stdio.h> #include<conio.h> #include <locale.h> int main() { char nome1[ ]= "Centro Universitário"; char nome2[ ]= "Internacional"; char nome3[ ]= "UNINTER"; char asteriscos[]= "\n***********************************\n"; Linguagem C (...) printf("%s",asteriscos); printf("%s %s %s", nome1,nome2,nome3, setlocale(LC_ALL,"")); printf("%s\n\n",asteriscos); system("pause"); return 0; } printf("%s",asteriscos); printf(" %s %s %s", nome1,nome2, nome3, setlocale(LC_ALL,"")); printf("%s",asteriscos); system("pause"); return 0; } Pseudocódigo Linguagem C 8 1 Prof. Sandro de Araújo Lógica de Programação e Algoritmos Aula 6 Conversa Inicial Esta aula apresentará a seguinte estrutura de conteúdo: Procedimento Função Declaração de uma função Parâmetros Passagem de parâmetros O objetivo desta aula é conhecer os principais conceitos e aplicações de procedimentos e funções e fazer uma introdução de como declará-los nas construções de algoritmos para resolver problemas computacionais Procedimento Procedimentos são estruturas que juntam um conjunto de comandos, que são executados no momento em que são chamados O procedimento é identificado com o nome <identificador> acompanhado de parênteses () e pode possuir ou não parâmetros (Puga e Rissetti, 2016) Procedimento 2 Quando o programa principal chama um procedimento, por meio do seu identificador, o controle do fluxo de execução do programa passa para o procedimento e, no momento em que o procedimento finalizar a tarefa, o controle do fluxo de execução retornará ao programa principal Procedimento Para criar um procedimento em pseudocódigo utiliza-se a seguinte estrutura: procedimento <nome-de-procedimento> [(<declarações-de-parâmetros>)] var // Seção de declarações internas início // Seção de comandos fimprocedimento Na linguagem de programação C, um procedimento é uma função sem retorno e, para criar um procedimento, utiliza-se a seguinte estrutura: void nome<identificador>( ) { // Seção de Comandos return; /* retorno de uma função void */ } Exemplo: Considere um algoritmo que somará dois números, usando um procedimento, e mostrará o resultado no programa principal algoritmo "CalculaSoma“ procedimento SOMA var resultado,a,b:real início escreva("ABAIXO A ROTINA DA SOMA") escreva("*** Digite o primeiro número: ") leia(a) Pseudocódigo escreva("*** Digite o segundo numero: ") leia(b) resultado<-a+b escreva("") escreva("A soma dos dois valores é:",resultado) escreva("") fimprocedimento 3 (...) início //programa principal SOMA fimalgoritmo Pseudocódigo #include <stdio.h> #include <conio.h> void SOMA() { float resultado, a, b; printf("ABAIXO A ROTINA DA SOMA"); printf("\n*** Digite o primeironúmero: "); Linguagem C scanf("%f", &a); printf("*** Digite o segundo número: "); scanf("%f", &b); resultado = a + b; printf("\n A soma dos dois valores digitados é: %.2f\n", resultado); return; } Linguagem C Linguagem C #include <stdio.h> #include <stdlib.h> int main() //programa principal { SOMA(); return 0; } 4 Função A função é um tipo especial de procedimento. Também conhecida como sub-rotina, ela é um conjunto de instruções construídas para cumprir uma tarefa específica e agrupada numa unidade Função Para criar uma função em pseudocódigo utiliza- se a seguinte estrutura: função<nome-função>[(<declarações- parâmetros>)]:<tipo-de-dado> // Seção de declarações internas início // Seção de comandos retorne valor_de_retorno fimfuncao Para criar uma função na linguagem C, utiliza-se a seguinte estrutura: <tipo> nome<identificador> (<tipo>parâmetro,<tipo>parâmetro, …) { // Seção de comandos return valor_de_retorno; } Exemplo: Considere um algoritmo que terá uma rotina da qual recebe um número do tipo inteiro e calcula o seu quadrado algoritmo "CalculaQuadrado" var n1, a, resultado: inteiro função calcula_quadrado(a : inteiro): inteiro var retorna: inteiro Pseudocódigo 5 início retorna <- a*a retorne retorna fimfuncao Pseudocódigo início escreva ("Digite um número inteiro: ") leia (n1) escreva ("O quadrado do número é: ", calcula_quadrado(n1)) fimalgoritmo Pseudocódigo int quadrado(int n1); int main() { int número, resultado; printf("Digite um número inteiro: \n"); scanf("%d", &número); Linguagem C printf("O quadrado do número é: %d", quadrado(numero)); return 0; } int quadrado(int n1) Linguagem C { resultado = n1*n1; return resultado; } Linguagem C 6 Declaração de uma função Na chamada de uma função, o compilador necessita que sejam informados corretamente o tipo de retorno e os parâmetros da função, para que ele possa manipulá-los Declaração de uma função Declaração de uma função O valor de retorno da função se dá com o comando return. Esse comando é sempre o último a ser executado por uma função, finalizado o bloco de instruções O tipo void representa o "sem retorno", ou seja, um retorno com conteúdo indeterminado Declaração de uma função Parâmetros 7 Os parâmetros podem ser divididos em duas categorias Formais: que correspondem aos parâmetros utilizados na descrição da função Reais: que correspondem aos parâmetros especificados na instrução de chamada Parâmetros Parâmetros Os parâmetros formais só existem para o programa no momento da execução da função. Após sua execução eles deixam de existir Diferentemente, os parâmetros reais podem ser usados na chamada da função e também em outros momentos no programa principal Parâmetros int soma (int x, int y); int main() { int a = 6, b = 5, c; c = a - b; // Parâmetros reais usados para subtração printf("Soma = %d\n", soma(a,b)); //Parâmetros reais Parâmetros printf("Subtração = %d\n\n", c); system("pause"); return 0; } Parâmetros int soma (int x, int y) // Parâmetros formais { int z; z = x + y; return z; } Parâmetros 8 Passagem de parâmetros Por valor – uma cópia do parâmetro é feita, um valor da expressão é calculado e o valor resultante é passado para a execução da função Passagem de parâmetros Por referência – o endereço de um parâmetro é passado na chamada da função. Com isso, a função pode modificar a variável diretamente Passagem de parâmetros void soma_mais_1(int num); int main() { int a = 8; printf("Antes da função: a = %d\n",a); //Impressão de “a” soma_mais_1(a); //A função recebe o parâmetro de “a” Exemplo de passagem por valor printf("Depois da função: a = %d\n",a); // Impressão de “a” system("pause"); return 0; } Exemplo de passagem por valor 9 void soma_mais_1(int num){ // Cópia do dado de "a" em “num" num = num + 1; printf("Dentro da função: a = %d\n", num); } Exemplo de passagem por valor Exemplo de passagem por valor void soma_mais_1(int num); int main() { int a = 8; printf("Antes da função: a = %d\n",a); //Impressão de “a” soma_mais_1(a); //A função recebe o parâmetro de “a” Exemplo de passagem por valor printf("Depois da função: a = %d\n",a); // Impressão de “a” system("pause"); return 0; Exemplo de passagem por valor } void soma_mais_1(int num){ // Cópia do dado de "a" em “num" num = num + 1; printf("Dentro da função: a = %d\n", num); } Exemplo de passagem por valor 10 Passagem por valor Passagem por referência Na passagem por valor, o parâmetro formal comporta-se como uma variável local e as alterações feitas nesta variável não terão efeito sobre o parâmetro real Na passagem por referência, o parâmetro formal comporta-se como se fosse uma variável global, em que todas as alterações feitas, nesta variável, são feitas no parâmetro real Passagem de parâmetros
Compartilhar