1
Algoritmos e
Ciclo de Desenvolvimento
Aula 02: 01/03/2012
INF 1005 - Programação I
Pontifícia Universidade Católica Departamento de Informática
3
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.
Memória
Memória volátil usada para armazenar dados e
programas.
Conteúdo modificável pelas instruções dos
programas.
5
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.
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
7
Linguagens de Alto-Nível
FORTRAN (1957)
COBOL (1960)
ALGOL (1968)
PASCAL (1970)
C (1972)
C++ (1983)
JAVA (1995)
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; }
9
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.
11
Ciclo de Desenvolvimento
Problema
de computador
Programa
Resultados
(solução)
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
13
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 umCOMPILADOR:
» programa
Ciclo de Desenvolvimento
15
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?
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
17
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
executorda solução.
Atores envolvidos
– criador da solução (programador)
– executor da solução (computador)
– usuário da solução (programador – em INF1005)
19
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?
Algoritmos: Seqüência
Exemplo
21
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”:
secondicao_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
Algoritmo:
Tomada de Decisão
Decidir se determinados passos devem ser executados
ou não
– filtro
Exemplo
23
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
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”:
enquantocondicao_execucao faça
ação(ões) a ser tomada se condicao_execucao for verdadeira fimenquanto
25
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!!!!
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.
27
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
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
29
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?
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
31
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
diferencanumero1-numero2
6. exibir o conteúdo da caixa chamada diferenca
numero1 numero2 diferenca
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. diferencanumero1-numero2 6. exibir diferenca
33
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.
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”.
35
Exemplo 2
Fluxograma:
InícioFim
Leia (nota1,nota2, nota3)
Escreva(“Aluno reprovado)
Escreva(“Aluno aprovado) media <- (nota1 + nota2 + nota3)/3.0
media>=5.0? sim
não
Exemplo 2
Pseudocódigo:
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 Variáveis: armazenam Informações necessárias para solução do problema
37
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; }
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
39
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. Enquantomatricula>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. semediaAlun >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
Exercícios
Escreva em linguagem natural uma solução algorítmica
41
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
o volume da esfera é dado por
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 * * 3 4 r volume= π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.
43
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.
Exercícios
9.