Algoritmos e Ciclo de Desenvolvimento Aula 02: 01/03/2012 INF 1005 - Programação I Pontifícia Universidade Católica Departamento de Informática 1 Modelo de um Computador 2 1
CPU: Unidade Central de Processamento Principal componente de um computador digital. Localiza e executa as instruções de um programa. Capaz de executar operações simples com grande rapidez. 3 Memória Memória volátil usada para armazenar dados e programas. Conteúdo modificável pelas instruções dos programas. Permite acesso aleatório. 4 2
Disco Rígido (HD) Um dos dispositivos não-voláteis mais usados para o armazenamento de grandes volumes de dados. Utiliza superfícies magnetizáveis para armazenar as informações. Permite acesso randômico aos dados armazenados. 5 Linguagens de Alto-Nível Programar em linguagem de máquina é uma tarefa entediante e propensa a erros. A partir de meados dos anos 50 várias linguagens de alto nível foram criadas. Tais linguagens possuem nível de abstração relativamente elevados. Elas são mais próximas das linguagens utilizadas pelos seres humanos. 6 3
Linguagens de Alto-Nível FORTRAN (1957) COBOL (1960) ALGOL (1968) PASCAL (1970) C (1972) C++ (1983) JAVA (1995) 7 Exemplo de Programa em C int main(void){ int a = 3, b = 7, c; c=a+b; if(c%2==0) printf("o resultado e par\n"); else printf("o resultado e impar\n"); } return 0; 8 4
Compilação Programas escritos em linguagens de alto nível não são executados diretamente pelo processador. Antes de executá-lo é preciso traduzir os comandos de alto-nível para instruções de máquina. Esta tarefa (compilação) é realizada por um programa chamado de compilador. 9 Ciclo de Desenvolvimento 10 5
Ciclo de Desenvolvimento Problema Programa de computador (solução) Resultados 11 Ciclo de Desenvolvimento Escolha da linguagem de programação depende da aplicação que será desenvolvida. Na disciplina INF1005, a escolha da linguagem C está relacionada a: eficiência facilidade de uso base para muitas outras linguagens mais usada atualmente base para Programação II 12 6
Ciclo de Desenvolvimento Um programa escrito em C deve respeitar a sintaxe da linguagem. Um computador não é capaz de executar uma sequência de instruções escritas em C: ou em qualquer outra linguagem de alto nível Para executar um programa em C, antes é necessário converter o programa em C para um programa em linguagem de máquina: processo chamado de COMPILAÇÃO processo realizado por um COMPILADOR:» programa 13 Ciclo de Desenvolvimento 14 7
Como descrever um problema? Andando pelo campus da PUC e após quase tropeçar em esquilos e levar um susto com o vôo do tucano, alguém lhe pergunta: Como faço para ir ao centro da cidade? O que você responde? 15 Como descrever um problema? Na pergunta anterior é fácil observar que faltam detalhes para a resposta ser mais correta ou eficiente: meio de transporte» envolve tempo e dinheiro endereço específico quando?» envolve trajeto devido a engarrafamento número de pessoas Fica difícil responder sem saber as reais necessidades de quem perguntou. 16 8
Solução de problemas Objetivo: encontrar uma sequência de passos que permitam que o problema possa ser resolvido de maneira automática e repetitiva. Detalhamento do problema. Perfeita compreensão do problema. Descrição da solução: clara não ambígua sequencial Linguagem utilizada na solução deve ser compreendida pelo executor da solução. Atores envolvidos criador da solução (programador) executor da solução (computador) usuário da solução (programador em INF1005) 17 Algoritmos 18 9
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? 19 Algoritmos: Seqüência Exemplo receita de bolo 20 10
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 21 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 22 11
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 23 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 24 12
Algoritmo: Repetição Repetir um determinado conjunto de passos. Exemplo (continuando na arte culinária!): preparar uma lasanha solução» montagem da lasanha coloque uma camada de molho coloque uma camada de massa coloque uma camada de presunto coloque uma camada de queijo» repita o processo acima quantas vezes desejar problema!!!! 25 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. 26 13
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 27 Exemplo 1 Descrição do algoritmo (versão 1): 1. obter o primeiro número inteiro com o usuário 2. obter o segundo número inteiro com o usuário 3. calcular a diferença do primeiro número para o segundo 4. exibir o resultado da diferença 28 14
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? 29 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 30 15
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 31 Exemplo 1 Descrição do algoritmo (versão 4): 1. solicitar ao usuário que informe o primeiro número inteiro 2. obter numero1 3. solicitar ao usuário que informe o segundo número inteiro 4. obter numero2 5. diferenca numero1 - numero2 6. exibir diferenca numero1 numero2 diferenca 32 16
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. 33 Exemplo 2 Linguagem Natural: 1. Obter as 3 notas das provas do aluno. 2. Calcular a média aritmética das 3 notas. 3. Comparar a média com o valor 5.0. 4. Se for maior ou igual, escrever aprovado. 5. Caso contrário, escrever reprovado. 34 17
Exemplo 2 Fluxograma: Início Leia (nota1,nota2, nota3) media <- (nota1 + nota2 + nota3)/3.0 media>=5.0? sim Escreva( Aluno aprovado) não Escreva( Aluno reprovado) Fim 35 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 36 18
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; } 37 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. 38 19
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 39 Exercícios Escreva em linguagem natural uma solução algorítmica para cada um dos problemas apresentados. 40 20
Exercícios 1. 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 = * π * r 2. 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. 3. 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. 3 41 Exercícios 4. 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. 5. 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. 6. Escreva um algoritmo que recebe 3 números inteiros como entrada e exibe, como saída, os números em ordem crescente. 42 21
Exercícios 7. Escreva um algoritmo que recebe um número inteiro como entrada e exibe, como saída, se o número é par ou é ímpar. 8. 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. 43 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. 44 22