INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Introdução à Algoritmos INF 1005 e INF1004 - Programação I Pontifícia Universidade Católica Departamento de Informática 1 Algoritmo: Conceito Sequência finita e não ambígua de passos para a solução de um problema. Em um algoritmo pode-se ter: – tomada de decisões – repetição de passos (iteração) Diferentes algoritmos podem levar a solução de um mesmo problema: – exemplo: como se vestir de manhã? Primeiro colocar a calça ou a camisa? 2 1 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Algoritmos: Seqüência Exemplo – receita de bolo 3 Algoritmo: Tomada de Decisão É fundamental que seja possível tomar diferentes decisões baseado em condições que são avaliadas em tempo de execução. Padrão de sintaxe a ser usado na “Linguagem Natural”: se condicao_teste então ação(ões) a ser tomada se condicao_teste for verdadeira senão ação(ões) a ser tomada se condicao_teste for falsa fimse 4 2 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Algoritmo: Tomada de Decisão Decidir se determinados passos devem ser executados ou não – filtro Exemplo – selecionar a quantidade de ovos – solução: » se quiser bolo mais macio então acrescente 2 ovos 5 Algoritmo: Tomada de Decisão Decidir qual conjunto de passos devem ser executados – categorização Exemplo – escolher o tipo de açúcar – solução: » se bolo for para diabéticos então utilizar adoçante » senão utilizar açúcar refinado 6 3 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Algoritmo: Repetição Precisamos de mecanismos de programação que nos permitam requisitar que um conjunto de instruções seja repetidamente executado, até que uma determinada condição seja alcançada: – REPETIÇÕES SÃO PROGRAMADAS ATRAVÉS DA CONSTRUÇÃO DE LAÇOS (OU CICLOS). Padrão de sintaxe a ser usado na “Linguagem Natural”: enquanto condicao_execucao faça ação(ões) a ser tomada se condicao_execucao for verdadeira fimenquanto 7 Algoritmo: Repetição Repetir um determinado conjunto de passos. Exemplo (continuando na arte culinária!): – preparar uma lasanha – solução » montagem da lasanha coloque coloque coloque coloque uma uma uma uma camada camada camada camada de de de de molho massa presunto queijo » repita o processo acima quantas vezes desejar – problema!!!! 8 4 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Formas de Representação de um Algoritmo Linguagem Natural: Os algoritmos são expressos diretamente em linguagem natural (o português, por exemplo). Fluxograma: Representação gráfica que emprega formas geométricas padronizadas para indicar as diversas ações e decisões que devem ser executadas para resolver o problema. Pseudocódigo: Emprega uma linguagem intermediária entre a linguagem natural e uma linguagem de programação para descrever algoritmos. Linguagem de Programação: Método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. 9 Exemplo 1 Faça um algoritmo que leia 2 números inteiros e imprima a diferença entre o primeiro e o segundo número. Passos da solução: – identificação da entrada de dados » 2 números inteiros – identificação da saída » 1 número inteiro representando a diferença entre os 2 números obtidos na entrada – descrição do algoritmo 10 5 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 1 Descrição do algoritmo (versão 1): 1. 2. 3. 4. obter o primeiro número inteiro com o usuário obter o segundo número inteiro com o usuário calcular a diferença do primeiro número para o segundo exibir o resultado da diferença 11 Exemplo 1 Problemas: – Como obter os números com o usuário? Por que meio? – Como guardar os números que o usuário forneceu? – Como identificar qual foi o primeiro valor e qual foi o segundo valor fornecido? 12 6 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 1 Descrição do algoritmo (versão 2): 1. obter o primeiro número inteiro com o usuário e armazená-lo na caixa chamada numero1 2. obter o segundo número inteiro com o usuário e armazená-lo na caixa chamada numero2 3. calcular a diferença e armazená-la na caixa chamada diferenca diferenca numero1 - numero2 4. exibir o conteúdo da caixa chamada diferenca numero1 numero2 diferenca 13 Exemplo 1 Descrição do algoritmo (versão 3): 1. solicitar ao usuário que informe o primeiro número inteiro 2. obter o primeiro número inteiro com o usuário e armazená-lo na caixa chamada numero1 3. solicitar ao usuário que informe o segundo número inteiro 4. obter o segundo número inteiro com o usuário e armazená-lo na caixa chamada numero2 5. calcular a diferenca e armazená-la na caixa chamada diferenca diferenca numero1 - numero2 6. exibir o conteúdo da caixa chamada diferenca numero1 numero2 diferenca 14 7 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 1 Descrição do algoritmo (versão 4): 1. 2. 3. 4. 5. 6. solicitar ao usuário que informe o primeiro número inteiro obter numero1 solicitar ao usuário que informe o segundo número inteiro obter numero2 diferenca numero1 - numero2 exibir diferenca numero1 numero2 diferenca 15 Exemplo 2 Problema: A partir de 3 notas de um aluno, calcular sua média aritmética e escrever na tela se ele foi aprovado ou reprovado, levando em conta que a média para aprovação deve ser pelo menos 5.0. 16 8 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 2 Linguagem Natural: 1. 2. 3. 4. 5. Obter as 3 notas das provas do aluno. Calcular a média aritmética das 3 notas. Comparar a média com o valor 5.0. Se for maior ou igual, escrever “aprovado”. Caso contrário, escrever “reprovado”. 17 Exemplo 2 Fluxograma: Início Leia (nota1,nota2, nota3) media <- (nota1 + nota2 + nota3)/3.0 sim media>=5.0? Escreva(“Aluno aprovado) não Escreva(“Aluno reprovado) Fim 18 9 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 2 Pseudocódigo: Variáveis: armazenam Informações necessárias para solução do problema variaveis media, nota1, nota2, nota3 inicio leia nota1, nota2 e nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) entao escreva “aluno aprovado” senao escreva “aluno reprovado” fim fim 19 Exemplo 2 Linguagem de Programação: #include <stdio.h> int main(void) { float media, nota1, nota2, nota3; printf("Entre com a nota da p1:"); scanf("%f", ¬a1); printf("Entre com a nota da p2:"); scanf("%f", ¬a2); printf("Entre com a nota da p3:"); scanf("%f", ¬a3); media = (nota1 + nota2 + nota3)/3.0; if (media >= 5.0) printf("Aprovado!\n"); else printf("Reprovado!\n"); return 0; } 10 20 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exemplo 3 Escreva um algoritmo que fica recebendo como entrada a matricula e duas notas (P1 e P2) dos alunos de uma turma enquanto a matrícula do aluno for maior que 0. Para cada aluno, seu algoritmo deve calcular a média dele na disciplina. Como uma das saídas, seu algoritmo deve imprimir a matricula do aluno, seu média e a mensagem “Aluno aprovado” se a média dele for maior ou igual a 5.0 ou “Aluno reprovado”, caso contrário. Após a entrada de alunos chegar ao fim, a média da turma deve ser calculada e exibida como saída. 21 Exemplo 3 – Solução Proposta em Linguagem Natural 1. Declarar e inicializar uma variável chamada somaMedias com o valor 0. 2. Declarar e inicializar uma variável que conta o número de alunos da turma. Inicialmente este valor é 0. 3. Ler matricula de um aluno. 4. Enquanto matricula>0 faça 4.1. Ler e armazenar nota1, nota2 4.2. Calcular media do aluno: mediaAlun = (nota1+nota2)/2.0 4.3. Escrever matricula e a media do aluno (mediaAlun) 4.4. se mediaAlun >5 então 4.4.1. Escrever “aluno aprovado”, 4.4.2. senão 4.4.2.1. Escrever “aluno reprovado” 4.4.3. fimse 4.5. Aumentar de 1 unidade o valor do contador dos alunos: contAlun <- contAlun +1 4.6. Acumular o valor da media do aluno: somaMedias <- somaMedias + mediaAlun 4.7. Ler uma nova matricula 4.8. fimenquanto 5. Calcular média da turma: mediaTurma <- somaMedias / contAlun 6. Escrever media da turma 22 11 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exercícios Escreva em linguagem natural uma solução algorítmica para cada um dos problemas apresentados. 23 Exercícios 1. 2. 3. Escreva um algoritmo que dado o raio de um círculo, calcula o volume da esfera com este raio. Sabe-se que 4 3 o volume da esfera é dado por volume = 3 * π * r Escreva um algoritmo que pede para o usuário fornecer o tempo total em segundos que ele levou para percorrer uma maratona. Seu algoritmo deve apresentar como saída o tempo equivalente no formato hora minuto segundo. Escreva um algoritmo que recebe dois números inteiros como entrada e exibe, como saída, a soma, o produto, a diferença, o quociente e o resto entre estes dois números. 24 12 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exercícios 4. 5. 6. Modifique o algoritmo da questão 3 (anterior) para que ele leia também uma opção que define qual das operações que o usuário quer executar. Esta alteração faz com que o usuário possa apenas executar uma das operações aritméticas. Escreva um algoritmo que recebe dois números como entrada e imprime, como saída, qual a relação entre esses dois números: se são “iguais”, “maior que” ou “menor que”. Escreva um algoritmo que recebe 3 números inteiros como entrada e exibe, como saída, os números em ordem crescente. 25 Exercícios 7. 8. Escreva um algoritmo que recebe um número inteiro como entrada e exibe, como saída, se o número é par ou é ímpar. Escreva um algoritmo que recebe como entrada um número de dias decorrido em um evento, fornecido pelo usuário, e exiba como saída o mesmo valor expresso em numero de semanas e numero de dias. Por exemplo, se um usuário fornecer o valor 17, o programa deve imprimir 2 e 3, pois 17 dias correspondem a 2 semanas e 3 dias. 26 13 INF1005 – Programação 1 Aula 02: 03/01/2012 – Algoritmos e Ciclo de Desenvolvimento 2012.1 Exercícios 9. Considerando a existência de notas (cédulas) nos valores R$ 100, R$ 50, R$ 20, R$ 10, R$ 5, R$ 2 e R$ 1, escreva um algoritmo que capture um valor inteiro em reais (R$) e determine o menor número de notas para se obter o montante fornecido. O seu algoritmo deve exibir o número de notas para cada um dos valores de nota existentes. 27 14